From 815e96af8d0218e1ff483c0593d32785f73c6ce6 Mon Sep 17 00:00:00 2001 From: farrisli Date: Mon, 25 Jan 2021 11:16:24 +0800 Subject: [PATCH 01/81] Add test case sequence reading and parsing capabilities --- .../CMakeFiles/3.3.2/CMakeCCompiler.cmake | 63 ++ .../CMakeFiles/3.3.2/CMakeCXXCompiler.cmake | 64 ++ .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 20784 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 20800 bytes src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake | 15 + .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 ++++++++++++++++ src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 0 -> 20880 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 +++++++++++++++ .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 0 -> 20888 bytes .../CMakeDirectoryInformation.cmake | 16 + src/dbtest/CMakeFiles/CMakeOutput.log | 548 +++++++++++++++++ src/dbtest/CMakeFiles/Makefile.cmake | 50 ++ src/dbtest/CMakeFiles/Makefile2 | 145 +++++ src/dbtest/CMakeFiles/Progress/1 | 1 + src/dbtest/CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/dbtest.dir/CXX.includecache | 58 ++ .../CMakeFiles/dbtest.dir/DependInfo.cmake | 19 + src/dbtest/CMakeFiles/dbtest.dir/build.make | 113 ++++ .../CMakeFiles/dbtest.dir/cmake_clean.cmake | 10 + .../CMakeFiles/dbtest.dir/depend.internal | 10 + src/dbtest/CMakeFiles/dbtest.dir/depend.make | 10 + src/dbtest/CMakeFiles/dbtest.dir/flags.make | 8 + .../CMakeFiles/dbtest.dir/progress.make | 3 + .../CMakeFiles/dbtest.dir/src/db_test.cc.gcno | Bin 0 -> 17760 bytes .../dbtest_core_static.dir/CXX.includecache | 34 ++ .../dbtest_core_static.dir/DependInfo.cmake | 25 + .../dbtest_core_static.dir/build.make | 114 ++++ .../dbtest_core_static.dir/cmake_clean.cmake | 10 + .../cmake_clean_target.cmake | 3 + .../dbtest_core_static.dir/depend.internal | 7 + .../dbtest_core_static.dir/depend.make | 7 + .../dbtest_core_static.dir/flags.make | 8 + .../dbtest_core_static.dir/progress.make | 3 + .../src/db_test.cc.gcno | Bin 0 -> 1260 bytes src/dbtest/CMakeFiles/feature_tests.bin | Bin 0 -> 20744 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 ++ src/dbtest/CMakeFiles/feature_tests.cxx | 405 +++++++++++++ src/dbtest/CMakeFiles/progress.marks | 1 + src/dbtest/Makefile | 195 ++++++ src/dbtest/cmake/Modules/FindLIBCONFIG.cmake | 57 ++ src/dbtest/cmake_install.cmake | 44 ++ src/dbtest/config/db-test.conf | 4 + src/dbtest/config/gflags.conf | 6 + src/dbtest/include/gflags/gflags.h | 573 ++++++++++++++++++ .../include/gflags/gflags_completions.h | 121 ++++ src/dbtest/include/gflags/gflags_declare.h | 141 +++++ src/dbtest/include/gflags/gflags_gflags.h | 101 +++ src/dbtest/include/libconfig.h++ | 540 +++++++++++++++++ src/dbtest/src/.db_test.h.swp | Bin 0 -> 20480 bytes src/dbtest/src/db_test.cc | 89 +++ src/dbtest/src/db_test.h | 178 ++++++ src/dbtest/src/dbtest | Bin 0 -> 359728 bytes 52 files changed, 4840 insertions(+) create mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake create mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin create mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out create mode 100644 src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log create mode 100644 src/dbtest/CMakeFiles/Makefile.cmake create mode 100644 src/dbtest/CMakeFiles/Makefile2 create mode 100644 src/dbtest/CMakeFiles/Progress/1 create mode 100644 src/dbtest/CMakeFiles/cmake.check_cache create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/build.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno create mode 100755 src/dbtest/CMakeFiles/feature_tests.bin create mode 100644 src/dbtest/CMakeFiles/feature_tests.c create mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx create mode 100644 src/dbtest/CMakeFiles/progress.marks create mode 100644 src/dbtest/Makefile create mode 100644 src/dbtest/cmake/Modules/FindLIBCONFIG.cmake create mode 100644 src/dbtest/cmake_install.cmake create mode 100644 src/dbtest/config/db-test.conf create mode 100644 src/dbtest/config/gflags.conf create mode 100644 src/dbtest/include/gflags/gflags.h create mode 100644 src/dbtest/include/gflags/gflags_completions.h create mode 100644 src/dbtest/include/gflags/gflags_declare.h create mode 100644 src/dbtest/include/gflags/gflags_gflags.h create mode 100644 src/dbtest/include/libconfig.h++ create mode 100644 src/dbtest/src/.db_test.h.swp create mode 100644 src/dbtest/src/db_test.cc create mode 100644 src/dbtest/src/db_test.h create mode 100755 src/dbtest/src/dbtest diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake new file mode 100644 index 00000000..ff7e1439 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake @@ -0,0 +1,63 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "8.3.1") +set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") + + + diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake new file mode 100644 index 00000000..8abfa8c8 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake @@ -0,0 +1,64 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "8.3.1") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP) +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + + + + +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") + + + diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin b/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..b01e72d7cefa69326618a19c0a3f1407599ccd38 GIT binary patch literal 20784 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake new file mode 100644 index 00000000..1e28fa59 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-5.4.32-1-tlinux4-0001") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "5.4.32-1-tlinux4-0001") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-5.4.32-1-tlinux4-0001") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "5.4.32-1-tlinux4-0001") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 00000000..444e4093 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,508 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} +#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..df37a0ba458edea0f27a40f4181672bcb68fb975 GIT binary patch literal 20880 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 ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..721698c5 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,498 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..f0380648c5053dc778459644ff0b04275b5e1716 GIT binary patch literal 20888 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 ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccRVGoVg.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_cec3a] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_4fe4f/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_4fe4f.dir/build.make CMakeFiles/cmTC_4fe4f.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_4fe4f +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4fe4f.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -o cmTC_4fe4f -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_1ba76/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_1ba76.dir/build.make CMakeFiles/cmTC_1ba76.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_1ba76 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ba76.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -o cmTC_1ba76 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_abea6/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_abea6.dir/build.make CMakeFiles/cmTC_abea6.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_abea6.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_abea6 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_abea6.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -o cmTC_abea6 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Determining if the CXX compiler works passed with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_14d92/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_14d92.dir/build.make CMakeFiles/cmTC_14d92.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_14d92 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_14d92.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -o cmTC_14d92 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp +Linking CXX executable cmTC_dcf1b +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux +Thread model: posix +gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) +COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o +COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast"] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build] + ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Linking CXX executable cmTC_dcf1b] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccdsGisy.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_dcf1b] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting CXX [-std=c++14] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_4a014/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_4a014.dir/build.make CMakeFiles/cmTC_4a014.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++14 -o CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_4a014 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4a014.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -o cmTC_4a014 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:1cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:1cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:1cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:1cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:1cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:1cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:1cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:1cxx_relaxed_constexpr + Feature record: CXX_FEATURE:1cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:1cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_3d352/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_3d352.dir/build.make CMakeFiles/cmTC_3d352.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++11 -o CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_3d352 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3d352.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -o cmTC_3d352 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++98] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_7bf6e/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_7bf6e.dir/build.make CMakeFiles/cmTC_7bf6e.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++98 -o CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_7bf6e +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7bf6e.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -o cmTC_7bf6e -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:0cxx_alias_templates + Feature record: CXX_FEATURE:0cxx_alignas + Feature record: CXX_FEATURE:0cxx_alignof + Feature record: CXX_FEATURE:0cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:0cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:0cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:0cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:0cxx_default_function_template_args + Feature record: CXX_FEATURE:0cxx_defaulted_functions + Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:0cxx_delegating_constructors + Feature record: CXX_FEATURE:0cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:0cxx_enum_forward_declarations + Feature record: CXX_FEATURE:0cxx_explicit_conversions + Feature record: CXX_FEATURE:0cxx_extended_friend_declarations + Feature record: CXX_FEATURE:0cxx_extern_templates + Feature record: CXX_FEATURE:0cxx_final + Feature record: CXX_FEATURE:0cxx_func_identifier + Feature record: CXX_FEATURE:0cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:0cxx_inheriting_constructors + Feature record: CXX_FEATURE:0cxx_inline_namespaces + Feature record: CXX_FEATURE:0cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:0cxx_local_type_template_args + Feature record: CXX_FEATURE:0cxx_long_long_type + Feature record: CXX_FEATURE:0cxx_noexcept + Feature record: CXX_FEATURE:0cxx_nonstatic_member_init + Feature record: CXX_FEATURE:0cxx_nullptr + Feature record: CXX_FEATURE:0cxx_override + Feature record: CXX_FEATURE:0cxx_range_for + Feature record: CXX_FEATURE:0cxx_raw_string_literals + Feature record: CXX_FEATURE:0cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:0cxx_right_angle_brackets + Feature record: CXX_FEATURE:0cxx_rvalue_references + Feature record: CXX_FEATURE:0cxx_sizeof_member + Feature record: CXX_FEATURE:0cxx_static_assert + Feature record: CXX_FEATURE:0cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:0cxx_thread_local + Feature record: CXX_FEATURE:0cxx_trailing_return_types + Feature record: CXX_FEATURE:0cxx_unicode_literals + Feature record: CXX_FEATURE:0cxx_uniform_initialization + Feature record: CXX_FEATURE:0cxx_unrestricted_unions + Feature record: CXX_FEATURE:0cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:0cxx_variadic_macros + Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile.cmake b/src/dbtest/CMakeFiles/Makefile.cmake new file mode 100644 index 00000000..2030fd8d --- /dev/null +++ b/src/dbtest/CMakeFiles/Makefile.cmake @@ -0,0 +1,50 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "CMakeFiles/3.3.2/CMakeCCompiler.cmake" + "CMakeFiles/3.3.2/CMakeCXXCompiler.cmake" + "CMakeFiles/3.3.2/CMakeSystem.cmake" + "CMakeLists.txt" + "/usr/local/lib/cmake/gflags/gflags-config-version.cmake" + "/usr/local/lib/cmake/gflags/gflags-config.cmake" + "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets-noconfig.cmake" + "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeCInformation.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeCXXInformation.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeGenericSystem.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/local/share/cmake-3.3/Modules/CMakeUnixFindMake.cmake" + "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-C.cmake" + "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-CXX.cmake" + "/usr/local/share/cmake-3.3/Modules/Compiler/GNU.cmake" + "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU-C.cmake" + "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU.cmake" + "/usr/local/share/cmake-3.3/Modules/Platform/Linux.cmake" + "/usr/local/share/cmake-3.3/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/dbtest_core_static.dir/DependInfo.cmake" + "CMakeFiles/dbtest.dir/DependInfo.cmake" + ) diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 new file mode 100644 index 00000000..74913812 --- /dev/null +++ b/src/dbtest/CMakeFiles/Makefile2 @@ -0,0 +1,145 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest + +#============================================================================= +# Target rules for target CMakeFiles/dbtest.dir + +# All Build rule for target. +CMakeFiles/dbtest.dir/all: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/depend + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=1,2 "Built target dbtest" +.PHONY : CMakeFiles/dbtest.dir/all + +# Include target in all. +all: CMakeFiles/dbtest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/dbtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/dbtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 +.PHONY : CMakeFiles/dbtest.dir/rule + +# Convenience name for target. +dbtest: CMakeFiles/dbtest.dir/rule + +.PHONY : dbtest + +# clean rule for target. +CMakeFiles/dbtest.dir/clean: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/clean +.PHONY : CMakeFiles/dbtest.dir/clean + +# clean rule for target. +clean: CMakeFiles/dbtest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/dbtest_core_static.dir + +# All Build rule for target. +CMakeFiles/dbtest_core_static.dir/all: + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/depend + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=3,4 "Built target dbtest_core_static" +.PHONY : CMakeFiles/dbtest_core_static.dir/all + +# Include target in all. +all: CMakeFiles/dbtest_core_static.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/dbtest_core_static.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/dbtest_core_static.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 +.PHONY : CMakeFiles/dbtest_core_static.dir/rule + +# Convenience name for target. +dbtest_core_static: CMakeFiles/dbtest_core_static.dir/rule + +.PHONY : dbtest_core_static + +# clean rule for target. +CMakeFiles/dbtest_core_static.dir/clean: + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/clean +.PHONY : CMakeFiles/dbtest_core_static.dir/clean + +# clean rule for target. +clean: CMakeFiles/dbtest_core_static.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/dbtest/CMakeFiles/Progress/1 b/src/dbtest/CMakeFiles/Progress/1 new file mode 100644 index 00000000..7b4d68d7 --- /dev/null +++ b/src/dbtest/CMakeFiles/Progress/1 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/src/dbtest/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache new file mode 100644 index 00000000..e6aea788 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache @@ -0,0 +1,58 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS-DBTest/src/db_test.cc +db_test.h +/data1/farrisli/3TS-DBTest/src/db_test.h +gflags/gflags.h +/data1/farrisli/3TS-DBTest/src/gflags/gflags.h +iomanip +- +cstdlib +- +libconfig.h++ +- + +/data1/farrisli/3TS-DBTest/src/db_test.h +vector +- +libconfig.h++ +- +iostream +- + +include/gflags/gflags.h +string +- +vector +- +gflags_declare.h +include/gflags/gflags_declare.h +gflags_gflags.h +include/gflags/gflags_gflags.h + +include/gflags/gflags_declare.h +string +- +stdint.h +- +sys/types.h +- +inttypes.h +- + +include/gflags/gflags_gflags.h + +include/libconfig.h++ +stdio.h +- +exception +- +string +- + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake b/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake new file mode 100644 index 00000000..6931b0e8 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake @@ -0,0 +1,19 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/data1/farrisli/3TS-DBTest/src/db_test.cc" "/data1/farrisli/3TS-DBTest/CMakeFiles/dbtest.dir/src/db_test.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "src" + "include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) diff --git a/src/dbtest/CMakeFiles/dbtest.dir/build.make b/src/dbtest/CMakeFiles/dbtest.dir/build.make new file mode 100644 index 00000000..e8e93a2b --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/build.make @@ -0,0 +1,113 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest + +# Include any dependencies generated for this target. +include CMakeFiles/dbtest.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/dbtest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/dbtest.dir/flags.make + +CMakeFiles/dbtest.dir/src/db_test.cc.o: CMakeFiles/dbtest.dir/flags.make +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc + +CMakeFiles/dbtest.dir/src/db_test.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest.dir/src/db_test.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i + +CMakeFiles/dbtest.dir/src/db_test.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest.dir/src/db_test.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s + +CMakeFiles/dbtest.dir/src/db_test.cc.o.requires: + +.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + +CMakeFiles/dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build +.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.provides + +CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest.dir/src/db_test.cc.o + + +# Object files for target dbtest +dbtest_OBJECTS = \ +"CMakeFiles/dbtest.dir/src/db_test.cc.o" + +# External object files for target dbtest +dbtest_EXTERNAL_OBJECTS = + +dbtest: CMakeFiles/dbtest.dir/src/db_test.cc.o +dbtest: CMakeFiles/dbtest.dir/build.make +dbtest: CMakeFiles/dbtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/dbtest.dir/build: dbtest + +.PHONY : CMakeFiles/dbtest.dir/build + +CMakeFiles/dbtest.dir/requires: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + +.PHONY : CMakeFiles/dbtest.dir/requires + +CMakeFiles/dbtest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/dbtest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/dbtest.dir/clean + +CMakeFiles/dbtest.dir/depend: + cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/dbtest.dir/depend + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake b/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake new file mode 100644 index 00000000..380f5ad3 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/dbtest.dir/src/db_test.cc.o" + "dbtest.pdb" + "dbtest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/dbtest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal new file mode 100644 index 00000000..4553eb0f --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest.dir/src/db_test.cc.o + /data1/farrisli/3TS-DBTest/src/db_test.cc + /data1/farrisli/3TS-DBTest/src/db_test.h + include/gflags/gflags.h + include/gflags/gflags_declare.h + include/gflags/gflags_gflags.h + include/libconfig.h++ diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.make b/src/dbtest/CMakeFiles/dbtest.dir/depend.make new file mode 100644 index 00000000..a645e678 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags_declare.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags_gflags.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: include/libconfig.h++ + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/flags.make b/src/dbtest/CMakeFiles/dbtest.dir/flags.make new file mode 100644 index 00000000..0c7fc2ed --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include + +CXX_DEFINES = + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/progress.make b/src/dbtest/CMakeFiles/dbtest.dir/progress.make new file mode 100644 index 00000000..abadeb0c --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..7894358f5d53ab09731c3c3b7a4520ddb6f92dc3 GIT binary patch literal 17760 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 q2bc-#TT+)e@!JNgeRGT~ni&iIYu|]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS-DBTest/src/db_test.cc +db_test.h +/data1/farrisli/3TS-DBTest/src/db_test.h +iomanip +- +cstdlib +- +libconfig.h++ +- + +/data1/farrisli/3TS-DBTest/src/db_test.h +vector +- +libconfig.h++ +- +iostream +- + +include/libconfig.h++ +stdio.h +- +exception +- +string +- + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake new file mode 100644 index 00000000..86aa1816 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake @@ -0,0 +1,25 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/data1/farrisli/3TS-DBTest/src/db_test.cc" "/data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "GFLAGS_IS_A_DLL=0" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "src" + "include" + "/usr/local/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make new file mode 100644 index 00000000..fa470236 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest + +# Include any dependencies generated for this target. +include CMakeFiles/dbtest_core_static.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/dbtest_core_static.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/dbtest_core_static.dir/flags.make + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: CMakeFiles/dbtest_core_static.dir/flags.make +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires: + +.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build +.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o + + +# Object files for target dbtest_core_static +dbtest_core_static_OBJECTS = \ +"CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + +# External object files for target dbtest_core_static +dbtest_core_static_EXTERNAL_OBJECTS = + +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/build.make +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libdbtest_core_static.a" + $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest_core_static.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/dbtest_core_static.dir/build: libdbtest_core_static.a + +.PHONY : CMakeFiles/dbtest_core_static.dir/build + +CMakeFiles/dbtest_core_static.dir/requires: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + +.PHONY : CMakeFiles/dbtest_core_static.dir/requires + +CMakeFiles/dbtest_core_static.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake +.PHONY : CMakeFiles/dbtest_core_static.dir/clean + +CMakeFiles/dbtest_core_static.dir/depend: + cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/dbtest_core_static.dir/depend + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake new file mode 100644 index 00000000..ccfaea54 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + "libdbtest_core_static.pdb" + "libdbtest_core_static.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/dbtest_core_static.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake new file mode 100644 index 00000000..5ded2361 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libdbtest_core_static.a" +) diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal new file mode 100644 index 00000000..44bfc02c --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o + /data1/farrisli/3TS-DBTest/src/db_test.cc + /data1/farrisli/3TS-DBTest/src/db_test.h + include/libconfig.h++ diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make new file mode 100644 index 00000000..f5b45059 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.h +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: include/libconfig.h++ + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make new file mode 100644 index 00000000..60ef1fd8 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make new file mode 100644 index 00000000..8c8fb6fb --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..f658c158ecb4ec4b0fa763bc0c07698045b5d327 GIT binary patch literal 1260 zcmd5*yGlbr5Z#S2f)CIXHa0d28gvb@NTnn(iV_htHi9ghy-^mDn{XeEA0hsLUtnir z5ep0TC#>ugf5JKUAsQ_5uyA1S?984y%ssQ)vi134E??L_eq81(Fg{1FZDlrJubqXB z+s?xn#d4=|P%KoWbp4v#l~zr9b=O7EmESipCmfiLFy-!m-psi=Q)3>pgGb%e2X!?)@} zXEGu$Op8WVS53AD(3gd^&;ZtNE$%clf(?5QXNlv(X{Q#i?r+}SPhap>n#$PVhV{!o ePBr+iUf(n39lz&LkKf;MI>M0~sHbTZM)nEC;L#ia literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..278f070a547e2715934a68da6cf6885e9f5ba075 GIT binary patch literal 20744 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c new file mode 100644 index 00000000..5a17cdba --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx new file mode 100644 index 00000000..54f83f04 --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks new file mode 100644 index 00000000..b8626c4c --- /dev/null +++ b/src/dbtest/CMakeFiles/progress.marks @@ -0,0 +1 @@ +4 diff --git a/src/dbtest/Makefile b/src/dbtest/Makefile new file mode 100644 index 00000000..69c05d89 --- /dev/null +++ b/src/dbtest/Makefile @@ -0,0 +1,195 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles /data1/farrisli/3TS-DBTest/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named dbtest + +# Build rule for target. +dbtest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dbtest +.PHONY : dbtest + +# fast build rule for target. +dbtest/fast: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build +.PHONY : dbtest/fast + +#============================================================================= +# Target rules for targets named dbtest_core_static + +# Build rule for target. +dbtest_core_static: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dbtest_core_static +.PHONY : dbtest_core_static + +# fast build rule for target. +dbtest_core_static/fast: + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/build +.PHONY : dbtest_core_static/fast + +src/db_test.o: src/db_test.cc.o + +.PHONY : src/db_test.o + +# target to build an object file +src/db_test.cc.o: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o +.PHONY : src/db_test.cc.o + +src/db_test.i: src/db_test.cc.i + +.PHONY : src/db_test.i + +# target to preprocess a source file +src/db_test.cc.i: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.i + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i +.PHONY : src/db_test.cc.i + +src/db_test.s: src/db_test.cc.s + +.PHONY : src/db_test.s + +# target to generate assembly for a file +src/db_test.cc.s: + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.s + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s +.PHONY : src/db_test.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... dbtest_core_static" + @echo "... dbtest" + @echo "... src/db_test.o" + @echo "... src/db_test.i" + @echo "... src/db_test.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake b/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake new file mode 100644 index 00000000..b276459f --- /dev/null +++ b/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake @@ -0,0 +1,57 @@ +# - Find libconfig +# - This module determines the libconfig library of the system +# The following variables are set if the library found: +# LIBCONFIG_FOUND - If false do nnt try to use libconfig. +# LIBCONFIG_INCLUDE_DIRS - where to find the headfile of library. +# LIBCONFIG_LIBRARY_DIRS - where to find the libconfig library. +# LIBCONFIG_LIBRARIES, the library file name needed to use libconfig. +# LIBCONFIG_LIBRARY - the library needed to use libconfig. +# imported target +# libconfig::libconfig + +if(LIBCONFIG_FOUND) + return() +endif() +if (WIN32) + # windows下使用CONFIG模式调用find_package查找 + find_package(LIBCONFIG CONFIG) +else () + # linux下调用pkg_check_modules 查找 + include(FindPkgConfig) + unset(_verexp) + if(LIBCONFIG_FIND_VERSION) + if(LIBCONFIG_FIND_VERSION_EXACT) + set(_verexp "=${LIBCONFIG_FIND_VERSION}") + else() + set(_verexp ">=${LIBCONFIG_FIND_VERSION}") + endif() + endif() + pkg_check_modules (LIBCONFIG libconfig${_verexp}) +endif() + +# handle the QUIETLY and REQUIRED arguments and set LIBCONFIG_FOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBCONFIG DEFAULT_MSG LIBCONFIG_LIBRARIES LIBCONFIG_INCLUDE_DIRS) + +if(LIBCONFIG_FOUND) + if(NOT LIBCONFIG_FIND_QUIETLY) + message(STATUS " -I: ${LIBCONFIG_INCLUDE_DIRS}") + message(STATUS " -L: ${LIBCONFIG_LIBRARY_DIRS}") + message(STATUS " -l: ${LIBCONFIG_LIBRARIES}") + endif() + find_library (LIBCONFIG_LIBRARY NAMES ${LIBCONFIG_LIBRARIES} PATHS ${LIBCONFIG_LIBRARY_DIRS}) + + # 创建 imported target + if (NOT TARGET libconfig::libconfig) + add_library(libconfig::libconfig INTERFACE IMPORTED) + set_target_properties(libconfig::libconfig PROPERTIES + INTERFACE_COMPILE_OPTIONS "${LIBCONFIG_CFLAGS}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBCONFIG_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "-L${LIBCONFIG_LIBRARY_DIRS} -l${LIBCONFIG_LIBRARIES }" + ) + if(NOT LIBCONFIG_FIND_QUIETLY) + message(STATUS "IMPORTED TARGET: libconfig::libconfig,link libraies ${_link_libs}") + endif() + endif () +endif(LIBCONFIG_FOUND) diff --git a/src/dbtest/cmake_install.cmake b/src/dbtest/cmake_install.cmake new file mode 100644 index 00000000..a73a0d6a --- /dev/null +++ b/src/dbtest/cmake_install.cmake @@ -0,0 +1,44 @@ +# Install script for directory: /data1/farrisli/3TS-DBTest + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "0") +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/data1/farrisli/3TS-DBTest/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/src/dbtest/config/db-test.conf b/src/dbtest/config/db-test.conf new file mode 100644 index 00000000..6e86d1ba --- /dev/null +++ b/src/dbtest/config/db-test.conf @@ -0,0 +1,4 @@ +# db_info +mysql = ["9.134.218.253", "3306", "ly", "123123"]; +oracle = ["9.134.218.253", "3306", "ly", "123123"]; + diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf new file mode 100644 index 00000000..62512763 --- /dev/null +++ b/src/dbtest/config/gflags.conf @@ -0,0 +1,6 @@ +-db="mysql" +-host="9.134.218.253" +-port="3306" +-user="ly" +-passwd="123456" + diff --git a/src/dbtest/include/gflags/gflags.h b/src/dbtest/include/gflags/gflags.h new file mode 100644 index 00000000..0db38f5c --- /dev/null +++ b/src/dbtest/include/gflags/gflags.h @@ -0,0 +1,573 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Revamped and reorganized by Craig Silverstein +// +// This is the file that should be included by any file which declares +// or defines a command line flag or wants to parse command line flags +// or print a program usage message (which will include information about +// flags). Executive summary, in the form of an example foo.cc file: +// +// #include "foo.h" // foo.h has a line "DECLARE_int32(start);" +// #include "validators.h" // hypothetical file defining ValidateIsFile() +// +// DEFINE_int32(end, 1000, "The last record to read"); +// +// DEFINE_string(filename, "my_file.txt", "The file to read"); +// // Crash if the specified file does not exist. +// static bool dummy = RegisterFlagValidator(&FLAGS_filename, +// &ValidateIsFile); +// +// DECLARE_bool(verbose); // some other file has a DEFINE_bool(verbose, ...) +// +// void MyFunc() { +// if (FLAGS_verbose) printf("Records %d-%d\n", FLAGS_start, FLAGS_end); +// } +// +// Then, at the command-line: +// ./foo --noverbose --start=5 --end=100 +// +// For more details, see +// doc/gflags.html +// +// --- A note about thread-safety: +// +// We describe many functions in this routine as being thread-hostile, +// thread-compatible, or thread-safe. Here are the meanings we use: +// +// thread-safe: it is safe for multiple threads to call this routine +// (or, when referring to a class, methods of this class) +// concurrently. +// thread-hostile: it is not safe for multiple threads to call this +// routine (or methods of this class) concurrently. In gflags, +// most thread-hostile routines are intended to be called early in, +// or even before, main() -- that is, before threads are spawned. +// thread-compatible: it is safe for multiple threads to read from +// this variable (when applied to variables), or to call const +// methods of this class (when applied to classes), as long as no +// other thread is writing to the variable or calling non-const +// methods of this class. + +#ifndef GFLAGS_GFLAGS_H_ +#define GFLAGS_GFLAGS_H_ + +#include +#include + +#include "gflags_declare.h" // IWYU pragma: export + + +// We always want to export variables defined in user code +#ifndef GFLAGS_DLL_DEFINE_FLAG +# ifdef _MSC_VER +# define GFLAGS_DLL_DEFINE_FLAG __declspec(dllexport) +# else +# define GFLAGS_DLL_DEFINE_FLAG +# endif +#endif + + +namespace GFLAGS_NAMESPACE { + + +// -------------------------------------------------------------------- +// To actually define a flag in a file, use DEFINE_bool, +// DEFINE_string, etc. at the bottom of this file. You may also find +// it useful to register a validator with the flag. This ensures that +// when the flag is parsed from the commandline, or is later set via +// SetCommandLineOption, we call the validation function. It is _not_ +// called when you assign the value to the flag directly using the = operator. +// +// The validation function should return true if the flag value is valid, and +// false otherwise. If the function returns false for the new setting of the +// flag, the flag will retain its current value. If it returns false for the +// default value, ParseCommandLineFlags() will die. +// +// This function is safe to call at global construct time (as in the +// example below). +// +// Example use: +// static bool ValidatePort(const char* flagname, int32 value) { +// if (value > 0 && value < 32768) // value is ok +// return true; +// printf("Invalid value for --%s: %d\n", flagname, (int)value); +// return false; +// } +// DEFINE_int32(port, 0, "What port to listen on"); +// static bool dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort); + +// Returns true if successfully registered, false if not (because the +// first argument doesn't point to a command-line flag, or because a +// validator is already registered for this flag). +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const bool* flag, bool (*validate_fn)(const char*, bool)); +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const int32* flag, bool (*validate_fn)(const char*, int32)); +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const int64* flag, bool (*validate_fn)(const char*, int64)); +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const uint64* flag, bool (*validate_fn)(const char*, uint64)); +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const double* flag, bool (*validate_fn)(const char*, double)); +extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const std::string* flag, bool (*validate_fn)(const char*, const std::string&)); + +// Convenience macro for the registration of a flag validator +#define DEFINE_validator(name, validator) \ + static const bool name##_validator_registered = \ + GFLAGS_NAMESPACE::RegisterFlagValidator(&FLAGS_##name, validator) + + +// -------------------------------------------------------------------- +// These methods are the best way to get access to info about the +// list of commandline flags. Note that these routines are pretty slow. +// GetAllFlags: mostly-complete info about the list, sorted by file. +// ShowUsageWithFlags: pretty-prints the list to stdout (what --help does) +// ShowUsageWithFlagsRestrict: limit to filenames with restrict as a substr +// +// In addition to accessing flags, you can also access argv[0] (the program +// name) and argv (the entire commandline), which we sock away a copy of. +// These variables are static, so you should only set them once. +// +// No need to export this data only structure from DLL, avoiding VS warning 4251. +struct CommandLineFlagInfo { + std::string name; // the name of the flag + std::string type; // the type of the flag: int32, etc + std::string description; // the "help text" associated with the flag + std::string current_value; // the current value, as a string + std::string default_value; // the default value, as a string + std::string filename; // 'cleaned' version of filename holding the flag + bool has_validator_fn; // true if RegisterFlagValidator called on this flag + bool is_default; // true if the flag has the default value and + // has not been set explicitly from the cmdline + // or via SetCommandLineOption + const void* flag_ptr; // pointer to the flag's current value (i.e. FLAGS_foo) +}; + +// Using this inside of a validator is a recipe for a deadlock. +// TODO(user) Fix locking when validators are running, to make it safe to +// call validators during ParseAllFlags. +// Also make sure then to uncomment the corresponding unit test in +// gflags_unittest.sh +extern GFLAGS_DLL_DECL void GetAllFlags(std::vector* OUTPUT); +// These two are actually defined in gflags_reporting.cc. +extern GFLAGS_DLL_DECL void ShowUsageWithFlags(const char *argv0); // what --help does +extern GFLAGS_DLL_DECL void ShowUsageWithFlagsRestrict(const char *argv0, const char *restrict); + +// Create a descriptive string for a flag. +// Goes to some trouble to make pretty line breaks. +extern GFLAGS_DLL_DECL std::string DescribeOneFlag(const CommandLineFlagInfo& flag); + +// Thread-hostile; meant to be called before any threads are spawned. +extern GFLAGS_DLL_DECL void SetArgv(int argc, const char** argv); + +// The following functions are thread-safe as long as SetArgv() is +// only called before any threads start. +extern GFLAGS_DLL_DECL const std::vector& GetArgvs(); +extern GFLAGS_DLL_DECL const char* GetArgv(); // all of argv as a string +extern GFLAGS_DLL_DECL const char* GetArgv0(); // only argv0 +extern GFLAGS_DLL_DECL uint32 GetArgvSum(); // simple checksum of argv +extern GFLAGS_DLL_DECL const char* ProgramInvocationName(); // argv0, or "UNKNOWN" if not set +extern GFLAGS_DLL_DECL const char* ProgramInvocationShortName(); // basename(argv0) + +// ProgramUsage() is thread-safe as long as SetUsageMessage() is only +// called before any threads start. +extern GFLAGS_DLL_DECL const char* ProgramUsage(); // string set by SetUsageMessage() + +// VersionString() is thread-safe as long as SetVersionString() is only +// called before any threads start. +extern GFLAGS_DLL_DECL const char* VersionString(); // string set by SetVersionString() + + + +// -------------------------------------------------------------------- +// Normally you access commandline flags by just saying "if (FLAGS_foo)" +// or whatever, and set them by calling "FLAGS_foo = bar" (or, more +// commonly, via the DEFINE_foo macro). But if you need a bit more +// control, we have programmatic ways to get/set the flags as well. +// These programmatic ways to access flags are thread-safe, but direct +// access is only thread-compatible. + +// Return true iff the flagname was found. +// OUTPUT is set to the flag's value, or unchanged if we return false. +extern GFLAGS_DLL_DECL bool GetCommandLineOption(const char* name, std::string* OUTPUT); + +// Return true iff the flagname was found. OUTPUT is set to the flag's +// CommandLineFlagInfo or unchanged if we return false. +extern GFLAGS_DLL_DECL bool GetCommandLineFlagInfo(const char* name, CommandLineFlagInfo* OUTPUT); + +// Return the CommandLineFlagInfo of the flagname. exit() if name not found. +// Example usage, to check if a flag's value is currently the default value: +// if (GetCommandLineFlagInfoOrDie("foo").is_default) ... +extern GFLAGS_DLL_DECL CommandLineFlagInfo GetCommandLineFlagInfoOrDie(const char* name); + +enum GFLAGS_DLL_DECL FlagSettingMode { + // update the flag's value (can call this multiple times). + SET_FLAGS_VALUE, + // update the flag's value, but *only if* it has not yet been updated + // with SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef". + SET_FLAG_IF_DEFAULT, + // set the flag's default value to this. If the flag has not yet updated + // yet (via SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef") + // change the flag's current value to the new default value as well. + SET_FLAGS_DEFAULT +}; + +// Set a particular flag ("command line option"). Returns a string +// describing the new value that the option has been set to. The +// return value API is not well-specified, so basically just depend on +// it to be empty if the setting failed for some reason -- the name is +// not a valid flag name, or the value is not a valid value -- and +// non-empty else. + +// SetCommandLineOption uses set_mode == SET_FLAGS_VALUE (the common case) +extern GFLAGS_DLL_DECL std::string SetCommandLineOption (const char* name, const char* value); +extern GFLAGS_DLL_DECL std::string SetCommandLineOptionWithMode(const char* name, const char* value, FlagSettingMode set_mode); + + +// -------------------------------------------------------------------- +// Saves the states (value, default value, whether the user has set +// the flag, registered validators, etc) of all flags, and restores +// them when the FlagSaver is destroyed. This is very useful in +// tests, say, when you want to let your tests change the flags, but +// make sure that they get reverted to the original states when your +// test is complete. +// +// Example usage: +// void TestFoo() { +// FlagSaver s1; +// FLAG_foo = false; +// FLAG_bar = "some value"; +// +// // test happens here. You can return at any time +// // without worrying about restoring the FLAG values. +// } +// +// Note: This class is marked with GFLAGS_ATTRIBUTE_UNUSED because all +// the work is done in the constructor and destructor, so in the standard +// usage example above, the compiler would complain that it's an +// unused variable. +// +// This class is thread-safe. However, its destructor writes to +// exactly the set of flags that have changed value during its +// lifetime, so concurrent _direct_ access to those flags +// (i.e. FLAGS_foo instead of {Get,Set}CommandLineOption()) is unsafe. + +class GFLAGS_DLL_DECL FlagSaver { + public: + FlagSaver(); + ~FlagSaver(); + + private: + class FlagSaverImpl* impl_; // we use pimpl here to keep API steady + + FlagSaver(const FlagSaver&); // no copying! + void operator=(const FlagSaver&); +}__attribute((unused)); + +// -------------------------------------------------------------------- +// Some deprecated or hopefully-soon-to-be-deprecated functions. + +// This is often used for logging. TODO(csilvers): figure out a better way +extern GFLAGS_DLL_DECL std::string CommandlineFlagsIntoString(); +// Usually where this is used, a FlagSaver should be used instead. +extern GFLAGS_DLL_DECL +bool ReadFlagsFromString(const std::string& flagfilecontents, + const char* prog_name, + bool errors_are_fatal); // uses SET_FLAGS_VALUE + +// These let you manually implement --flagfile functionality. +// DEPRECATED. +extern GFLAGS_DLL_DECL bool AppendFlagsIntoFile(const std::string& filename, const char* prog_name); +extern GFLAGS_DLL_DECL bool ReadFromFlagsFile(const std::string& filename, const char* prog_name, bool errors_are_fatal); // uses SET_FLAGS_VALUE + + +// -------------------------------------------------------------------- +// Useful routines for initializing flags from the environment. +// In each case, if 'varname' does not exist in the environment +// return defval. If 'varname' does exist but is not valid +// (e.g., not a number for an int32 flag), abort with an error. +// Otherwise, return the value. NOTE: for booleans, for true use +// 't' or 'T' or 'true' or '1', for false 'f' or 'F' or 'false' or '0'. + +extern GFLAGS_DLL_DECL bool BoolFromEnv(const char *varname, bool defval); +extern GFLAGS_DLL_DECL int32 Int32FromEnv(const char *varname, int32 defval); +extern GFLAGS_DLL_DECL int64 Int64FromEnv(const char *varname, int64 defval); +extern GFLAGS_DLL_DECL uint64 Uint64FromEnv(const char *varname, uint64 defval); +extern GFLAGS_DLL_DECL double DoubleFromEnv(const char *varname, double defval); +extern GFLAGS_DLL_DECL const char *StringFromEnv(const char *varname, const char *defval); + + +// -------------------------------------------------------------------- +// The next two functions parse gflags from main(): + +// Set the "usage" message for this program. For example: +// string usage("This program does nothing. Sample usage:\n"); +// usage += argv[0] + " "; +// SetUsageMessage(usage); +// Do not include commandline flags in the usage: we do that for you! +// Thread-hostile; meant to be called before any threads are spawned. +extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage); + +// Sets the version string, which is emitted with --version. +// For instance: SetVersionString("1.3"); +// Thread-hostile; meant to be called before any threads are spawned. +extern GFLAGS_DLL_DECL void SetVersionString(const std::string& version); + + +// Looks for flags in argv and parses them. Rearranges argv to put +// flags first, or removes them entirely if remove_flags is true. +// If a flag is defined more than once in the command line or flag +// file, the last definition is used. Returns the index (into argv) +// of the first non-flag argument. +// See top-of-file for more details on this function. +#ifndef SWIG // In swig, use ParseCommandLineFlagsScript() instead. +extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv, bool remove_flags); +#endif + + +// Calls to ParseCommandLineNonHelpFlags and then to +// HandleCommandLineHelpFlags can be used instead of a call to +// ParseCommandLineFlags during initialization, in order to allow for +// changing default values for some FLAGS (via +// e.g. SetCommandLineOptionWithMode calls) between the time of +// command line parsing and the time of dumping help information for +// the flags as a result of command line parsing. If a flag is +// defined more than once in the command line or flag file, the last +// definition is used. Returns the index (into argv) of the first +// non-flag argument. (If remove_flags is true, will always return 1.) +extern GFLAGS_DLL_DECL uint32 ParseCommandLineNonHelpFlags(int *argc, char*** argv, bool remove_flags); + +// This is actually defined in gflags_reporting.cc. +// This function is misnamed (it also handles --version, etc.), but +// it's too late to change that now. :-( +extern GFLAGS_DLL_DECL void HandleCommandLineHelpFlags(); // in gflags_reporting.cc + +// Allow command line reparsing. Disables the error normally +// generated when an unknown flag is found, since it may be found in a +// later parse. Thread-hostile; meant to be called before any threads +// are spawned. +extern GFLAGS_DLL_DECL void AllowCommandLineReparsing(); + +// Reparse the flags that have not yet been recognized. Only flags +// registered since the last parse will be recognized. Any flag value +// must be provided as part of the argument using "=", not as a +// separate command line argument that follows the flag argument. +// Intended for handling flags from dynamically loaded libraries, +// since their flags are not registered until they are loaded. +extern GFLAGS_DLL_DECL void ReparseCommandLineNonHelpFlags(); + +// Clean up memory allocated by flags. This is only needed to reduce +// the quantity of "potentially leaked" reports emitted by memory +// debugging tools such as valgrind. It is not required for normal +// operation, or for the google perftools heap-checker. It must only +// be called when the process is about to exit, and all threads that +// might access flags are quiescent. Referencing flags after this is +// called will have unexpected consequences. This is not safe to run +// when multiple threads might be running: the function is +// thread-hostile. +extern GFLAGS_DLL_DECL void ShutDownCommandLineFlags(); + + +// -------------------------------------------------------------------- +// Now come the command line flag declaration/definition macros that +// will actually be used. They're kind of hairy. A major reason +// for this is initialization: we want people to be able to access +// variables in global constructors and have that not crash, even if +// their global constructor runs before the global constructor here. +// (Obviously, we can't guarantee the flags will have the correct +// default value in that case, but at least accessing them is safe.) +// The only way to do that is have flags point to a static buffer. +// So we make one, using a union to ensure proper alignment, and +// then use placement-new to actually set up the flag with the +// correct default value. In the same vein, we have to worry about +// flag access in global destructors, so FlagRegisterer has to be +// careful never to destroy the flag-values it constructs. +// +// Note that when we define a flag variable FLAGS_, we also +// preemptively define a junk variable, FLAGS_no. This is to +// cause a link-time error if someone tries to define 2 flags with +// names like "logging" and "nologging". We do this because a bool +// flag FLAG can be set from the command line to true with a "-FLAG" +// argument, and to false with a "-noFLAG" argument, and so this can +// potentially avert confusion. +// +// We also put flags into their own namespace. It is purposefully +// named in an opaque way that people should have trouble typing +// directly. The idea is that DEFINE puts the flag in the weird +// namespace, and DECLARE imports the flag from there into the current +// namespace. The net result is to force people to use DECLARE to get +// access to a flag, rather than saying "extern GFLAGS_DLL_DECL bool FLAGS_whatever;" +// or some such instead. We want this so we can put extra +// functionality (like sanity-checking) in DECLARE if we want, and +// make sure it is picked up everywhere. +// +// We also put the type of the variable in the namespace, so that +// people can't DECLARE_int32 something that they DEFINE_bool'd +// elsewhere. + +class GFLAGS_DLL_DECL FlagRegisterer { + public: + FlagRegisterer(const char* name, const char* type, + const char* help, const char* filename, + void* current_storage, void* defvalue_storage); +}; + +// If your application #defines STRIP_FLAG_HELP to a non-zero value +// before #including this file, we remove the help message from the +// binary file. This can reduce the size of the resulting binary +// somewhat, and may also be useful for security reasons. + +extern GFLAGS_DLL_DECL const char kStrippedFlagHelp[]; + + +} // namespace GFLAGS_NAMESPACE + + +#ifndef SWIG // In swig, ignore the main flag declarations + +#if defined(STRIP_FLAG_HELP) && STRIP_FLAG_HELP > 0 +// Need this construct to avoid the 'defined but not used' warning. +#define MAYBE_STRIPPED_HELP(txt) \ + (false ? (txt) : GFLAGS_NAMESPACE::kStrippedFlagHelp) +#else +#define MAYBE_STRIPPED_HELP(txt) txt +#endif + +// Each command-line flag has two variables associated with it: one +// with the current value, and one with the default value. However, +// we have a third variable, which is where value is assigned; it's a +// constant. This guarantees that FLAG_##value is initialized at +// static initialization time (e.g. before program-start) rather than +// than global construction time (which is after program-start but +// before main), at least when 'value' is a compile-time constant. We +// use a small trick for the "default value" variable, and call it +// FLAGS_no. This serves the second purpose of assuring a +// compile error if someone tries to define a flag named no +// which is illegal (--foo and --nofoo both affect the "foo" flag). +#define DEFINE_VARIABLE(type, shorttype, name, value, help) \ + namespace fL##shorttype { \ + static const type FLAGS_nono##name = value; \ + /* We always want to export defined variables, dll or no */ \ + GFLAGS_DLL_DEFINE_FLAG type FLAGS_##name = FLAGS_nono##name; \ + type FLAGS_no##name = FLAGS_nono##name; \ + static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \ + #name, #type, MAYBE_STRIPPED_HELP(help), __FILE__, \ + &FLAGS_##name, &FLAGS_no##name); \ + } \ + using fL##shorttype::FLAGS_##name + +// For DEFINE_bool, we want to do the extra check that the passed-in +// value is actually a bool, and not a string or something that can be +// coerced to a bool. These declarations (no definition needed!) will +// help us do that, and never evaluate From, which is important. +// We'll use 'sizeof(IsBool(val))' to distinguish. This code requires +// that the compiler have different sizes for bool & double. Since +// this is not guaranteed by the standard, we check it with a +// COMPILE_ASSERT. +namespace fLB { +struct CompileAssert {}; +typedef CompileAssert expected_sizeof_double_neq_sizeof_bool[ + (sizeof(double) != sizeof(bool)) ? 1 : -1]; +template double GFLAGS_DLL_DECL IsBoolFlag(const From& from); +GFLAGS_DLL_DECL bool IsBoolFlag(bool from); +} // namespace fLB + +// Here are the actual DEFINE_*-macros. The respective DECLARE_*-macros +// are in a separate include, gflags_declare.h, for reducing +// the physical transitive size for DECLARE use. +#define DEFINE_bool(name, val, txt) \ + namespace fLB { \ + typedef ::fLB::CompileAssert FLAG_##name##_value_is_not_a_bool[ \ + (sizeof(::fLB::IsBoolFlag(val)) != sizeof(double))? 1: -1]; \ + } \ + DEFINE_VARIABLE(bool, B, name, val, txt) + +#define DEFINE_int32(name, val, txt) \ + DEFINE_VARIABLE(GFLAGS_NAMESPACE::int32, I, \ + name, val, txt) + +#define DEFINE_int64(name, val, txt) \ + DEFINE_VARIABLE(GFLAGS_NAMESPACE::int64, I64, \ + name, val, txt) + +#define DEFINE_uint64(name,val, txt) \ + DEFINE_VARIABLE(GFLAGS_NAMESPACE::uint64, U64, \ + name, val, txt) + +#define DEFINE_double(name, val, txt) \ + DEFINE_VARIABLE(double, D, name, val, txt) + +// Strings are trickier, because they're not a POD, so we can't +// construct them at static-initialization time (instead they get +// constructed at global-constructor time, which is much later). To +// try to avoid crashes in that case, we use a char buffer to store +// the string, which we can static-initialize, and then placement-new +// into it later. It's not perfect, but the best we can do. + +namespace fLS { + +inline clstring* dont_pass0toDEFINE_string(char *stringspot, + const char *value) { + return new(stringspot) clstring(value); +} +inline clstring* dont_pass0toDEFINE_string(char *stringspot, + const clstring &value) { + return new(stringspot) clstring(value); +} +inline clstring* dont_pass0toDEFINE_string(char *stringspot, + int value); +} // namespace fLS + +// We need to define a var named FLAGS_no##name so people don't define +// --string and --nostring. And we need a temporary place to put val +// so we don't have to evaluate it twice. Two great needs that go +// great together! +// The weird 'using' + 'extern' inside the fLS namespace is to work around +// an unknown compiler bug/issue with the gcc 4.2.1 on SUSE 10. See +// http://code.google.com/p/google-gflags/issues/detail?id=20 +#define DEFINE_string(name, val, txt) \ + namespace fLS { \ + using ::fLS::clstring; \ + static union { void* align; char s[sizeof(clstring)]; } s_##name[2]; \ + clstring* const FLAGS_no##name = ::fLS:: \ + dont_pass0toDEFINE_string(s_##name[0].s, \ + val); \ + static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \ + #name, "string", MAYBE_STRIPPED_HELP(txt), __FILE__, \ + s_##name[0].s, new (s_##name[1].s) clstring(*FLAGS_no##name)); \ + extern GFLAGS_DLL_DEFINE_FLAG clstring& FLAGS_##name; \ + using fLS::FLAGS_##name; \ + clstring& FLAGS_##name = *FLAGS_no##name; \ + } \ + using fLS::FLAGS_##name + +#endif // SWIG + + +// Import gflags library symbols into alternative/deprecated namespace(s) +#include "gflags_gflags.h" + + +#endif // GFLAGS_GFLAGS_H_ diff --git a/src/dbtest/include/gflags/gflags_completions.h b/src/dbtest/include/gflags/gflags_completions.h new file mode 100644 index 00000000..f951c1e0 --- /dev/null +++ b/src/dbtest/include/gflags/gflags_completions.h @@ -0,0 +1,121 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- + +// +// Implement helpful bash-style command line flag completions +// +// ** Functional API: +// HandleCommandLineCompletions() should be called early during +// program startup, but after command line flag code has been +// initialized, such as the beginning of HandleCommandLineHelpFlags(). +// It checks the value of the flag --tab_completion_word. If this +// flag is empty, nothing happens here. If it contains a string, +// however, then HandleCommandLineCompletions() will hijack the +// process, attempting to identify the intention behind this +// completion. Regardless of the outcome of this deduction, the +// process will be terminated, similar to --helpshort flag +// handling. +// +// ** Overview of Bash completions: +// Bash can be told to programatically determine completions for the +// current 'cursor word'. It does this by (in this case) invoking a +// command with some additional arguments identifying the command +// being executed, the word being completed, and the previous word +// (if any). Bash then expects a sequence of output lines to be +// printed to stdout. If these lines all contain a common prefix +// longer than the cursor word, bash will replace the cursor word +// with that common prefix, and display nothing. If there isn't such +// a common prefix, bash will display the lines in pages using 'more'. +// +// ** Strategy taken for command line completions: +// If we can deduce either the exact flag intended, or a common flag +// prefix, we'll output exactly that. Otherwise, if information +// must be displayed to the user, we'll take the opportunity to add +// some helpful information beyond just the flag name (specifically, +// we'll include the default flag value and as much of the flag's +// description as can fit on a single terminal line width, as specified +// by the flag --tab_completion_columns). Furthermore, we'll try to +// make bash order the output such that the most useful or relevent +// flags are the most likely to be shown at the top. +// +// ** Additional features: +// To assist in finding that one really useful flag, substring matching +// was implemented. Before pressing a to get completion for the +// current word, you can append one or more '?' to the flag to do +// substring matching. Here's the semantics: +// --foo Show me all flags with names prefixed by 'foo' +// --foo? Show me all flags with 'foo' somewhere in the name +// --foo?? Same as prior case, but also search in module +// definition path for 'foo' +// --foo??? Same as prior case, but also search in flag +// descriptions for 'foo' +// Finally, we'll trim the output to a relatively small number of +// flags to keep bash quiet about the verbosity of output. If one +// really wanted to see all possible matches, appending a '+' to the +// search word will force the exhaustive list of matches to be printed. +// +// ** How to have bash accept completions from a binary: +// Bash requires that it be informed about each command that programmatic +// completion should be enabled for. Example addition to a .bashrc +// file would be (your path to gflags_completions.sh file may differ): + +/* +$ complete -o bashdefault -o default -o nospace -C \ + '/home/build/eng/bash/bash_completions.sh --tab_completion_columns $COLUMNS' \ + time env binary_name another_binary [...] +*/ + +// This would allow the following to work: +// $ /path/to/binary_name --vmodule +// Or: +// $ ./bin/path/another_binary --gfs_u +// (etc) +// +// Sadly, it appears that bash gives no easy way to force this behavior for +// all commands. That's where the "time" in the above example comes in. +// If you haven't specifically added a command to the list of completion +// supported commands, you can still get completions by prefixing the +// entire command with "env". +// $ env /some/brand/new/binary --vmod +// Assuming that "binary" is a newly compiled binary, this should still +// produce the expected completion output. + + +#ifndef GFLAGS_COMPLETIONS_H_ +#define GFLAGS_COMPLETIONS_H_ + +namespace google { + +extern void HandleCommandLineCompletions(void); + +} + +#endif // GFLAGS_COMPLETIONS_H_ diff --git a/src/dbtest/include/gflags/gflags_declare.h b/src/dbtest/include/gflags/gflags_declare.h new file mode 100644 index 00000000..9b85f46c --- /dev/null +++ b/src/dbtest/include/gflags/gflags_declare.h @@ -0,0 +1,141 @@ +// Copyright (c) 1999, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// +// Revamped and reorganized by Craig Silverstein +// +// This is the file that should be included by any file which declares +// command line flag. + +#ifndef GFLAGS_DECLARE_H_ +#define GFLAGS_DECLARE_H_ + + +// --------------------------------------------------------------------------- +// Namespace of gflags library symbols. +#define GFLAGS_NAMESPACE google + +// --------------------------------------------------------------------------- +// Windows DLL import/export. + +// We always want to import the symbols of the gflags library +#ifndef GFLAGS_DLL_DECL +# if 1 && defined(_MSC_VER) +# define GFLAGS_DLL_DECL __declspec(dllimport) +# else +# define GFLAGS_DLL_DECL +# endif +#endif + +// We always want to import variables declared in user code +#ifndef GFLAGS_DLL_DECLARE_FLAG +# ifdef _MSC_VER +# define GFLAGS_DLL_DECLARE_FLAG __declspec(dllimport) +# else +# define GFLAGS_DLL_DECLARE_FLAG +# endif +#endif + +// --------------------------------------------------------------------------- +// Flag types +#include +#if 1 +# include // the normal place uint32_t is defined +#elif 1 +# include // the normal place u_int32_t is defined +#elif 1 +# include // a third place for uint32_t or u_int32_t +#endif + +namespace GFLAGS_NAMESPACE { + +#if 1 // C99 +typedef int32_t int32; +typedef uint32_t uint32; +typedef int64_t int64; +typedef uint64_t uint64; +#elif 0 // BSD +typedef int32_t int32; +typedef u_int32_t uint32; +typedef int64_t int64; +typedef u_int64_t uint64; +#elif 0 // Windows +typedef __int32 int32; +typedef unsigned __int32 uint32; +typedef __int64 int64; +typedef unsigned __int64 uint64; +#else +# error Do not know how to define a 32-bit integer quantity on your system +#endif + +} // namespace GFLAGS_NAMESPACE + + +namespace fLS { + +// The meaning of "string" might be different between now and when the +// macros below get invoked (e.g., if someone is experimenting with +// other string implementations that get defined after this file is +// included). Save the current meaning now and use it in the macros. +typedef std::string clstring; + +} // namespace fLS + + +#define DECLARE_VARIABLE(type, shorttype, name) \ + /* We always want to import declared variables, dll or no */ \ + namespace fL##shorttype { extern GFLAGS_DLL_DECLARE_FLAG type FLAGS_##name; } \ + using fL##shorttype::FLAGS_##name + +#define DECLARE_bool(name) \ + DECLARE_VARIABLE(bool, B, name) + +#define DECLARE_int32(name) \ + DECLARE_VARIABLE(::GFLAGS_NAMESPACE::int32, I, name) + +#define DECLARE_int64(name) \ + DECLARE_VARIABLE(::GFLAGS_NAMESPACE::int64, I64, name) + +#define DECLARE_uint64(name) \ + DECLARE_VARIABLE(::GFLAGS_NAMESPACE::uint64, U64, name) + +#define DECLARE_double(name) \ + DECLARE_VARIABLE(double, D, name) + +#define DECLARE_string(name) \ + /* We always want to import declared variables, dll or no */ \ + namespace fLS { \ + using ::fLS::clstring; \ + extern GFLAGS_DLL_DECLARE_FLAG ::fLS::clstring& FLAGS_##name; \ + } \ + using fLS::FLAGS_##name + + +#endif // GFLAGS_DECLARE_H_ diff --git a/src/dbtest/include/gflags/gflags_gflags.h b/src/dbtest/include/gflags/gflags_gflags.h new file mode 100644 index 00000000..0c17825d --- /dev/null +++ b/src/dbtest/include/gflags/gflags_gflags.h @@ -0,0 +1,101 @@ +// Copyright (c) 2014, Andreas Schuh +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ----------------------------------------------------------------------------- +// Imports the gflags library symbols into an alternative/deprecated namespace. + +#ifndef GFLAGS_GFLAGS_H_ +# error The internal header gflags_gflags.h may only be included by gflags.h +#endif + +#ifndef GFLAGS_NS_GFLAGS_H_ +#define GFLAGS_NS_GFLAGS_H_ + + +namespace gflags { + + +using GFLAGS_NAMESPACE::int32; +using GFLAGS_NAMESPACE::uint32; +using GFLAGS_NAMESPACE::int64; +using GFLAGS_NAMESPACE::uint64; + +using GFLAGS_NAMESPACE::RegisterFlagValidator; +using GFLAGS_NAMESPACE::CommandLineFlagInfo; +using GFLAGS_NAMESPACE::GetAllFlags; +using GFLAGS_NAMESPACE::ShowUsageWithFlags; +using GFLAGS_NAMESPACE::ShowUsageWithFlagsRestrict; +using GFLAGS_NAMESPACE::DescribeOneFlag; +using GFLAGS_NAMESPACE::SetArgv; +using GFLAGS_NAMESPACE::GetArgvs; +using GFLAGS_NAMESPACE::GetArgv; +using GFLAGS_NAMESPACE::GetArgv0; +using GFLAGS_NAMESPACE::GetArgvSum; +using GFLAGS_NAMESPACE::ProgramInvocationName; +using GFLAGS_NAMESPACE::ProgramInvocationShortName; +using GFLAGS_NAMESPACE::ProgramUsage; +using GFLAGS_NAMESPACE::VersionString; +using GFLAGS_NAMESPACE::GetCommandLineOption; +using GFLAGS_NAMESPACE::GetCommandLineFlagInfo; +using GFLAGS_NAMESPACE::GetCommandLineFlagInfoOrDie; +using GFLAGS_NAMESPACE::FlagSettingMode; +using GFLAGS_NAMESPACE::SET_FLAGS_VALUE; +using GFLAGS_NAMESPACE::SET_FLAG_IF_DEFAULT; +using GFLAGS_NAMESPACE::SET_FLAGS_DEFAULT; +using GFLAGS_NAMESPACE::SetCommandLineOption; +using GFLAGS_NAMESPACE::SetCommandLineOptionWithMode; +using GFLAGS_NAMESPACE::FlagSaver; +using GFLAGS_NAMESPACE::CommandlineFlagsIntoString; +using GFLAGS_NAMESPACE::ReadFlagsFromString; +using GFLAGS_NAMESPACE::AppendFlagsIntoFile; +using GFLAGS_NAMESPACE::ReadFromFlagsFile; +using GFLAGS_NAMESPACE::BoolFromEnv; +using GFLAGS_NAMESPACE::Int32FromEnv; +using GFLAGS_NAMESPACE::Int64FromEnv; +using GFLAGS_NAMESPACE::Uint64FromEnv; +using GFLAGS_NAMESPACE::DoubleFromEnv; +using GFLAGS_NAMESPACE::StringFromEnv; +using GFLAGS_NAMESPACE::SetUsageMessage; +using GFLAGS_NAMESPACE::SetVersionString; +using GFLAGS_NAMESPACE::ParseCommandLineNonHelpFlags; +using GFLAGS_NAMESPACE::HandleCommandLineHelpFlags; +using GFLAGS_NAMESPACE::AllowCommandLineReparsing; +using GFLAGS_NAMESPACE::ReparseCommandLineNonHelpFlags; +using GFLAGS_NAMESPACE::ShutDownCommandLineFlags; +using GFLAGS_NAMESPACE::FlagRegisterer; + +#ifndef SWIG +using GFLAGS_NAMESPACE::ParseCommandLineFlags; +#endif + + +} // namespace gflags + + +#endif // GFLAGS_NS_GFLAGS_H_ diff --git a/src/dbtest/include/libconfig.h++ b/src/dbtest/include/libconfig.h++ new file mode 100644 index 00000000..a43672c9 --- /dev/null +++ b/src/dbtest/include/libconfig.h++ @@ -0,0 +1,540 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2014 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, see + . + ---------------------------------------------------------------------------- +*/ + +#ifndef __libconfig_hpp +#define __libconfig_hpp + +#include +#include +#include + +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +#if defined(LIBCONFIGXX_STATIC) +#define LIBCONFIGXX_API +#elif defined(LIBCONFIGXX_EXPORTS) +#define LIBCONFIGXX_API __declspec(dllexport) +#else /* ! LIBCONFIGXX_EXPORTS */ +#define LIBCONFIGXX_API __declspec(dllimport) +#endif /* LIBCONFIGXX_STATIC */ +#else /* ! WIN32 */ +#define LIBCONFIGXX_API +#endif /* WIN32 */ + +#define LIBCONFIGXX_VER_MAJOR 1 +#define LIBCONFIGXX_VER_MINOR 5 +#define LIBCONFIGXX_VER_REVISION 0 + +struct config_t; // fwd decl +struct config_setting_t; // fwd decl + +namespace libconfig { + +class LIBCONFIGXX_API ConfigException : public std::exception { }; + +class Setting; // fwd decl +class SettingIterator; +class SettingConstIterator; + +class LIBCONFIGXX_API SettingException : public ConfigException +{ + public: + + SettingException(const Setting &setting); + SettingException(const Setting &setting, int idx); + SettingException(const Setting &setting, const char *name); + SettingException(const char *path); + + SettingException(const SettingException &other); + SettingException& operator=(const SettingException &other); + + virtual ~SettingException() throw(); + + const char *getPath() const; + + virtual const char *what() const throw(); + + private: + + char *_path; +}; + +class LIBCONFIGXX_API SettingTypeException : public SettingException +{ + public: + + SettingTypeException(const Setting &setting); + SettingTypeException(const Setting &setting, int idx); + SettingTypeException(const Setting &setting, const char *name); + + virtual const char *what() const throw(); +}; + +class LIBCONFIGXX_API SettingNotFoundException : public SettingException +{ + public: + + SettingNotFoundException(const char *path); + SettingNotFoundException(const Setting &setting, int idx); + SettingNotFoundException(const Setting &setting, const char *name); + + virtual const char *what() const throw(); +}; + +class LIBCONFIGXX_API SettingNameException : public SettingException +{ + public: + + SettingNameException(const Setting &setting, const char *name); + + virtual const char *what() const throw(); +}; + +class LIBCONFIGXX_API FileIOException : public ConfigException +{ + public: + + virtual const char *what() const throw(); +}; + +class LIBCONFIGXX_API ParseException : public ConfigException +{ + public: + + ParseException(const char *file, int line, const char *error); + + ParseException(const ParseException &other); + + virtual ~ParseException() throw(); + + inline const char *getFile() const + { return(_file); } + + inline int getLine() const + { return(_line); } + + inline const char *getError() const + { return(_error); } + + virtual const char *what() const throw(); + + private: + + const char *_file; + int _line; + const char *_error; +}; + +class LIBCONFIGXX_API Setting +{ + friend class Config; + + public: + + enum Type + { + TypeNone = 0, + // scalar types + TypeInt, + TypeInt64, + TypeFloat, + TypeString, + TypeBoolean, + // aggregate types + TypeGroup, + TypeArray, + TypeList + }; + + enum Format + { + FormatDefault = 0, + FormatHex = 1 + }; + + enum Option + { + OptionNone = 0, + OptionAutoConvert = 0x01, + OptionSemicolonSeparators = 0x02, + OptionColonAssignmentForGroups = 0x04, + OptionColonAssignmentForNonGroups = 0x08, + OptionOpenBraceOnSeparateLine = 0x10 + }; + + typedef SettingIterator iterator; + typedef SettingConstIterator const_iterator; + + public: + + virtual ~Setting(); + + inline Type getType() const { return(_type); } + + inline Format getFormat() const { return(_format); } + void setFormat(Format format); + + operator bool() const; + operator int() const; + operator unsigned int() const; + operator long() const; + operator unsigned long() const; + operator long long() const; + operator unsigned long long() const; + operator double() const; + operator float() const; + operator const char *() const; + operator std::string() const; + + inline const char *c_str() const + { return operator const char *(); } + + Setting & operator=(bool value); + Setting & operator=(int value); + Setting & operator=(long value); + Setting & operator=(const long long &value); + Setting & operator=(const double &value); + Setting & operator=(float value); + Setting & operator=(const char *value); + Setting & operator=(const std::string &value); + + Setting & lookup(const char *path) const; + inline Setting & lookup(const std::string &path) const + { return(lookup(path.c_str())); } + + Setting & operator[](const char *name) const; + Setting & operator[](int index) const; + + bool lookupValue(const char *name, bool &value) const; + bool lookupValue(const char *name, int &value) const; + bool lookupValue(const char *name, unsigned int &value) const; + bool lookupValue(const char *name, long long &value) const; + bool lookupValue(const char *name, unsigned long long &value) const; + bool lookupValue(const char *name, double &value) const; + bool lookupValue(const char *name, float &value) const; + bool lookupValue(const char *name, const char *&value) const; + bool lookupValue(const char *name, std::string &value) const; + + inline bool lookupValue(const std::string &name, bool &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, int &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, unsigned int &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, long long &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, + unsigned long long &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, double &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, float &value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, const char *&value) const + { return(lookupValue(name.c_str(), value)); } + + inline bool lookupValue(const std::string &name, std::string &value) const + { return(lookupValue(name.c_str(), value)); } + + void remove(const char *name); + + inline void remove(const std::string &name) + { remove(name.c_str()); } + + void remove(unsigned int idx); + + Setting & add(const char *name, Type type); + + inline Setting & add(const std::string &name, Type type) + { return(add(name.c_str(), type)); } + + Setting & add(Type type); + + bool exists(const char *name) const; + + inline bool exists(const std::string &name) const + { return(exists(name.c_str())); } + + int getLength() const; + const char *getName() const; + std::string getPath() const; + int getIndex() const; + + const Setting & getParent() const; + Setting & getParent(); + + bool isRoot() const; + + inline bool isGroup() const + { return(_type == TypeGroup); } + + inline bool isArray() const + { return(_type == TypeArray); } + + inline bool isList() const + { return(_type == TypeList); } + + inline bool isAggregate() const + { return(_type >= TypeGroup); } + + inline bool isScalar() const + { return((_type > TypeNone) && (_type < TypeGroup)); } + + inline bool isNumber() const + { + return((_type == TypeInt) || (_type == TypeInt64) || (_type == TypeFloat)); + } + + unsigned int getSourceLine() const; + const char *getSourceFile() const; + + iterator begin(); + iterator end(); + + const_iterator begin() const; + const_iterator end() const; + + private: + + config_setting_t *_setting; + Type _type; + Format _format; + + Setting(config_setting_t *setting); + + void assertType(Type type) const; + static Setting & wrapSetting(config_setting_t *setting); + + Setting(const Setting& other); // not supported + Setting& operator=(const Setting& other); // not supported +}; + + +class LIBCONFIGXX_API SettingIterator +{ + public: + + SettingIterator(Setting &setting, bool endIterator = false); + SettingIterator(const SettingIterator &other); + SettingIterator& operator=(const SettingIterator &other); + + // Equality comparison. + inline bool operator==(SettingIterator const &other) const + { return((_setting == other._setting) && (_idx == other._idx)); } + + inline bool operator!=(SettingIterator const &other) const + { return(!operator==(other)); } + + bool operator<(SettingIterator const &other) const; + + // Dereference operators. + inline Setting & operator*() + { return((*_setting)[_idx]); } + + inline Setting * operator->() + { return(&(*_setting)[_idx]); } + + inline const Setting & operator*() const + { return(*_setting)[_idx]; } + inline const Setting * operator->() const + { return(&(*_setting)[_idx]); } + + // Increment and decrement operators. + SettingIterator & operator++(); + SettingIterator operator++(int); + + SettingIterator & operator--(); + SettingIterator operator--(int); + + // Arithmetic operators. + SettingIterator operator+(int offset) const; + SettingIterator & operator+=(int offset); + + SettingIterator operator-(int offset) const; + SettingIterator & operator-=(int offset); + + int operator-(const SettingIterator &other) const; + + private: + + Setting *_setting; + + int _count; + int _idx; +}; + +SettingIterator operator+(int offset, const SettingIterator &si); + +class LIBCONFIGXX_API SettingConstIterator +{ + public: + + SettingConstIterator(const Setting &setting, bool endIterator = false); + SettingConstIterator(const SettingConstIterator &rhs); + SettingConstIterator& operator=(const SettingConstIterator &rhs); + + // Equality comparison. + bool operator==(SettingConstIterator const &other) const + { return((_setting == other._setting) && (_idx == other._idx)); } + + inline bool operator!=(SettingConstIterator const &other) const + { return(!operator==(other)); } + + // Dereference operators. + inline Setting const & operator*() + { return((*_setting)[_idx]); } + inline Setting const * operator->() + { return(&(*_setting)[_idx]); } + + inline const Setting& operator*() const + { return((*_setting)[_idx]); } + inline const Setting * operator->() const + { return(&(*_setting)[_idx]); } + + // Increment and decrement operators. + SettingConstIterator & operator++(); + SettingConstIterator operator++(int); + + SettingConstIterator & operator--(); + SettingConstIterator operator--(int); + + // Arithmetic operators. + SettingConstIterator operator+(int offset) const; + SettingConstIterator & operator+=(int offset); + + SettingConstIterator operator-(int offset) const; + SettingConstIterator & operator-=(int offset); + + int operator-(const SettingConstIterator &other) const; + + private: + + const Setting *_setting; + + int _count; + int _idx; +}; + +SettingConstIterator operator+(int offset, const SettingConstIterator &si); + +class LIBCONFIGXX_API Config +{ + public: + + Config(); + virtual ~Config(); + + void setOptions(int options); + int getOptions() const; + + void setAutoConvert(bool flag); + bool getAutoConvert() const; + + void setDefaultFormat(Setting::Format format); + inline Setting::Format getDefaultFormat() const + { return(_defaultFormat); } + + void setTabWidth(unsigned short width); + unsigned short getTabWidth() const; + + void setIncludeDir(const char *includeDir); + const char *getIncludeDir() const; + + void read(FILE *stream); + void write(FILE *stream) const; + + void readString(const char *str); + inline void readString(const std::string &str) + { return(readString(str.c_str())); } + + void readFile(const char *filename); + void writeFile(const char *filename); + + Setting & lookup(const char *path) const; + inline Setting & lookup(const std::string &path) const + { return(lookup(path.c_str())); } + + bool exists(const char *path) const; + inline bool exists(const std::string &path) const + { return(exists(path.c_str())); } + + bool lookupValue(const char *path, bool &value) const; + bool lookupValue(const char *path, int &value) const; + bool lookupValue(const char *path, unsigned int &value) const; + bool lookupValue(const char *path, long long &value) const; + bool lookupValue(const char *path, unsigned long long &value) const; + bool lookupValue(const char *path, double &value) const; + bool lookupValue(const char *path, float &value) const; + bool lookupValue(const char *path, const char *&value) const; + bool lookupValue(const char *path, std::string &value) const; + + inline bool lookupValue(const std::string &path, bool &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, int &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, unsigned int &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, long long &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, + unsigned long long &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, double &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, float &value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, const char *&value) const + { return(lookupValue(path.c_str(), value)); } + + inline bool lookupValue(const std::string &path, std::string &value) const + { return(lookupValue(path.c_str(), value)); } + + Setting & getRoot() const; + + private: + + static void ConfigDestructor(void *arg); + void handleError() const; + + config_t *_config; + Setting::Format _defaultFormat; + + Config(const Config& other); // not supported + Config& operator=(const Config& other); // not supported +}; + +} // namespace libconfig + +#endif // __libconfig_hpp diff --git a/src/dbtest/src/.db_test.h.swp b/src/dbtest/src/.db_test.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..db2e4a4305b6734896afad285e61ddcdf5bdd8af GIT binary patch literal 20480 zcmeI3TWlRi8OOIRBqdF`RZt0WS<=cqA@(`7BSdi=LmVfn)g*RvY)25nvOYV?~pS(MlZ@&4@x4Sd5>y>+#=T5r!)$euid$r^Ef7|AMr&cTUsd8yyE@2&0~uU)z!Yqqjgz$#!BunJfOtO8a6tAJI&D)7Ih zfau-gd>Ag@tlj>Q{(Dp9@5}W0Z9~f4qSMFp-;4ThW=EgeKUM*&fK|XMU=^?mSOu&C zRspMkRlq7>6|f5Y7ZmUV$7y4c{y|#6wyDa*y}jI1wRL00$%{12M>cTct5xwyaU_=?gYER3)sB)J$Mp)8$1dwf<9OS%ivw$ zEx-YP+~YXE0Y3s?0UKZr+ztNm3di{wxD1{IUjv^5p91UP95@8-2D`zFw?aekWpEL^ z4=jNL;Ger4=R4q&;1qZO>;cd3a-2VbAA_%ghrv2H4&De}2cCMl<9rMp2RDJM*r>Sz zo&isTZvg=s;2!WS#`%ljJfJaO0yE&9U>A4_8$mw=9|!Z`l;%1^)5UK+2?IBbLm@xs z@Hk8Rk?^806}40Zlas07VZ1ux>WrQ*I{Obf18S!1e4oWFHlQwjDB|gwz5YrRwkD+o z*}yt$iG)wlhb2e-lpWjbA%O*_r6bd>tZR7Xsm7~So4R#fq2vsz^mw@L3pVMrB0o*t z=7T3rGe2P5eFz;BeIC2%`N(6sZKyyUyr7z*!@-4esRlS@I%o(vJ?*YC;Z<784b}F$ z4>{CeCdcAdkI5QRhZY3#1d^zn_NkoV9fH@xG#>8LFn@H%8V&dCS(F*~`1mMEg@cJv zw_dNG8+9pTBFn%*o8TGLmyAgla`!_prKz^3YKgNW|=#sb!MOU@O8j>ULivm zR0FXxaQV>40IUv-j=ItS6vpX>YR08{#n{j-lsV=K)ly3T6HY!Wr??>$&%&J0* zWpgCxz_zce^su(8R+X`(IEJsmkvQr4(UwX(%9Au*==k^~wL9v{Zs;V2Vj$M#{C?_3 zq1ajulgOtlzGQ|PoR6ceMefI`-`bX+%hL2WM3RV(vO1e!Uc%%6G}qXMN^A<&(?^VR zKgCo@oeu65rEVKSRbhdLU7v3qO`?RSDrtV5@qqhnvA`37DGxfLGUj5zcuFbp>MXv& zRjD%(?)zst2oQCCG7N%ARCS;=yi~C(yO`u9wQt@b3cT#$cjK~|5dNLR{DE+8VR~&9S=A*@|Tq?Ki zQZt`H#>C)Q_6U%{b7bAmhbxJq8OT@aLeZRIf_knpFt<>BXos;Mc|6%jYkJ~4pb$sB zQkm=yB*HFB`sR!TPX?Ws-+i;ft)$xxD`i!hELs+;*%>C2ZS&O+RQnD;H zYjd0Mn{h6VAzD9-g&OW;!)qn|*z5v?Q)%0}AgdYK)z)P24rVX;ON$ z=ovT1@a1!6uAbqhpfA}d*{Hf)QXOjxm*y#4u4FI+5sq_LHY1q|alK+xy3bEl@O6UdsN4!Osl&D_v~kA(4ti{p zOdjJrflEWBAOmG_vD*M0A$7uCUzCg;hpNifzDcu@6Jd;W!?i&IOS^`waB#b-Wmo1J z^V*S(4w{DMet?%$?iX<-^*&WBm7~i9Ey+Fg7 z4d(C=pe;uP5CwBhm69T4Z+LWUDXFx?W)$Q;sxXrNW{oO0W^i4Uw)wIuxy@|FrQ*(L zo_e4ZAd~s)nnpwIHx%}bb*HR;jn_xiXSvg-R$=Pp6x=aio)}sAlDuj=+i2FC{Mdo; z($WjBip^4{wCdy+z|PB6V`ta%yJv;Wjh0HAqL4<)u+5u1HH;}2YQlaN?)2f zuvAa8EV_nh{eKDT_g?{8|6|E5e^;>P{}=cj_$i?804{+hcmTWx{5q?r>)1b50jq#j zz$#!BunJfOtO8a6tAJI&Dqt1(4=X^6>Hquhkg@GW+kr0jeB7Sg8KqCiXn#cRLdtK( F{tZHr&*T6A literal 0 HcmV?d00001 diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc new file mode 100644 index 00000000..d829d9e0 --- /dev/null +++ b/src/dbtest/src/db_test.cc @@ -0,0 +1,89 @@ +#include "db_test.h" +#include "gflags/gflags.h" +#include +#include +#include +#include + + +DEFINE_string(db, "mysql", "database type, include mysql, oracle, sql server"); +DEFINE_string(host, "", "database host ip, such as x.x.x.x"); +DEFINE_string(port, "", "database port, such as 3306"); +DEFINE_string(user, "", "username"); +DEFINE_string(passwd, "", "password"); + + +std::pair SQLReader::get_txn_id_and_sql(std::string line) { + std::pair txn_id_and_sql; + int index = line.find_first_of(" "); + if (index > 0) { + txn_id_and_sql.first = line.substr(0, index); + txn_id_and_sql.second = line.substr(index+1); + } else { + std::cout << "read txn_sql failed, please check format of test file. line:" + line << std::endl; + } + return txn_id_and_sql; +} + +TestCaseType SQLReader::get_test_case_type_by_test_file(std::string& test_file) { + if (test_file.find("dirty-read")) { + return TestCaseType::DirtyRead; + } else { + std::cout << "unsupported test type" << std::endl; + return TestCaseType::Unsupported; + } + +} + +TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) { + std::ifstream test_stream(test_file); + TestCaseType test_case_type = SQLReader::get_test_case_type_by_test_file(test_file); + std::string line; + TestSequence test_sequence(test_case_type); + if (test_stream) { + while (getline(test_stream, line)) { + std::pair txn_id_and_sql = SQLReader::get_txn_id_and_sql(line); + TxnSQL txn_sql(txn_id_and_sql.second, txn_id_and_sql.first, test_case_type); + test_sequence.add_txn_sql(txn_sql); + } + } else { + std::cout << "test file not found" << std::endl; + } + std::vector txn_sql_list = test_sequence.get_txn_sql_list(); + TxnSQL txn_sql = txn_sql_list[0]; + std::cout << txn_sql.get_txn_id() << std::endl; + std::cout << txn_sql.get_sql() << std::endl; + return test_sequence; +} + +void SQLReader::init_test_sequence_list(std::string& test_path) { + std::ifstream do_test_stream("./do_test_list.txt"); + std::string test_case; + if (do_test_stream) { + while (getline(do_test_stream, test_case)) { + std::string test_file_name = test_case + ".txt"; + std::string test_file = test_path + "/" + test_file_name; + TestSequence test_sequence = SQLReader::get_one_test_sequence_from_file(test_file); + SQLReader::add_test_sequence(test_sequence); + } + } else { + std::cout << "do_test_list.txt not found" << std::endl; + } +} + +int main(int argc, char* argv[]) { + google::ParseCommandLineFlags(&argc, &argv, true); + + SQLReader sql_reader; + std::string test_path_base = "../t/"; + std::string test_path = test_path_base + "mysql"; + sql_reader.init_test_sequence_list(test_path); + std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); + for (auto test_sequence : test_sequence_list) { + std::vector txn_sql_list = test_sequence.get_txn_sql_list(); + for (auto txn_sql : txn_sql_list) { + std::cout << txn_sql.get_sql() << std::endl; + } + } + return 0; +} diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h new file mode 100644 index 00000000..75b3dab0 --- /dev/null +++ b/src/dbtest/src/db_test.h @@ -0,0 +1,178 @@ +#include +#include +#include + +// result set +class ReadResultSet { +private: + std::vector> rs_; +public: + std::vector> get_rs() {return rs_;}; +}; + +class WriteResultSet { +private: + uint row_count_; +public: + uint get_row_count() {return row_count_;}; +}; + +class TxnResultSet { +private: + bool is_commit_; + bool is_timeout_; + ReadResultSet& read_rows_; + ReadResultSet& final_rows_; +public: + bool is_commit() {return is_commit_;}; + bool is_timeout() {return is_timeout_;}; + ReadResultSet& get_read_rows(); + ReadResultSet& get_final_rows(); +}; + +enum class ResultType { + RollBack, + Avaid, + Exception +}; + +class TestResultSet { +private: + ResultType& result_type_; +public: + ResultType& get_result() {return result_type_;}; +}; + +enum class TestCaseType { + Unsupported, + DirtyRead, + UnrepeatableRead, + PhantomRead, + DirtyWrite, + LostUpdate, + MiddleRead, + BlackWhite, + IntersectingData, + OverdraftProtection, + PrimaryColors, + ReadWritePartialOrder, + ReadPartialOrder, + Serrasoid, + Step, + DoubleWriteSkew, + PredicateSawtooth, + ReadOnlyTransactionAnomaly, + CausalityViolationAnomaly, + CrossPhenomenon, + CrossPhantom, + UnnamedAnomaly, + HalfPredicatesReadPartialOrder, + TotalPredicatesReadPartialOrderSame, + TotalPredicatesReadPartialOrderDifferent, + HalfPredicatesWritePartialOrder, + TotalPredicatesWritePartialOrderSame, + TotalPredicatesWritePartialOrderDifferent +}; + +// The sql with txn_id in test case +class TxnSQL { +private: + std::string sql_; + std::string txn_id_; + TestCaseType test_case_type_; + bool is_read_sql_; + ReadResultSet* read_rs_; +public: + TxnSQL(std::string sql, std::string txn_id, TestCaseType test_case_id) { + sql_ = sql; + txn_id_ = txn_id; + test_case_type_ = test_case_id; + }; + std::string get_sql() {return sql_;}; + std::string get_txn_id() {return txn_id_;}; + TestCaseType get_test_case_type() {return test_case_type_;}; + bool is_read_sql() {return is_read_sql_;}; + ReadResultSet* get_read_result_set() {return read_rs_;}; +}; +// TestSequence->exception test case, include a series of TxnSQL +class TestSequence { +private: + std::vector txn_sql_list_; + TestCaseType test_case_type_; + TestResultSet* test_result_set_; +public: + TestSequence(TestCaseType test_case_type) { + test_case_type_ = test_case_type; + }; + void add_txn_sql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; + std::vector get_txn_sql_list() {return txn_sql_list_;}; + TestCaseType get_test_case_type() {return test_case_type_;}; + TestResultSet* get_test_result_set() {return test_result_set_;}; +}; + +class TestCaseExpectedResult { +private: + TestCaseType test_case_type_; + // [[sql1_r1, sql1_r2, ...], [sql2_r1, sql2_r2, ...], ...] + std::vector> sql_expected_result_list_; +public: + TestCaseType get_test_case_type() {return test_case_type_;}; + std::vector> get_sql_expected_result_list() { + return sql_expected_result_list_; + }; +}; + +//read and parse sql from file +class SQLReader { +private: + std::vector test_sequence_list_; + std::vector test_result_list_; +public: + void init_test_sequence_list(std::string& test_path); + void init_test_result_list(std::string& result_path); + + void add_test_sequence(TestSequence test_sequence) { + test_sequence_list_.push_back(test_sequence); + }; + void add_test_result(TestCaseExpectedResult test_case_expected_result) { + test_result_list_.push_back(test_case_expected_result); + }; + + TestSequence get_one_test_sequence_from_file(std::string& test_file); + TestCaseExpectedResult get_one_test_result_from_file(std::string& result_path); + + TestCaseType get_test_case_type_by_test_file(std::string& test_file); + + std::pair get_txn_id_and_sql(std::string line); + + std::vector get_test_sequence_list() {return test_sequence_list_;}; + std::vector get_test_result_list() {return test_result_list_;}; +}; + +//class ConfigBase { +//private: +// std::string cfg_file_; +//public: +// +// ConfigBase(std::string cfg_file) { +// cfg_file_ = cfg_file; +// } +// +// const libconfig::Setting& get_db_info(const std::string& db_type) { +// libconfig::Config cfg; +// try { +// cfg.readFile(cfg_file_.c_str()); +// } catch (libconfig::FileIOException& fioex) { +// std::cerr << "I/O error while reading file." << std::endl; +// } catch (libconfig::ParseException& pex) { +// std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine() +// << " - " << pex.getError() << std::endl; +// } +// try { +// const libconfig::Setting& root = cfg.getRoot(); +// return root[db_type.c_str()]; +// } catch (libconfig::SettingNotFoundException& nfex) { +// std::cerr << "get db info failed, please config file" << std::endl; +// } +// }; +//}; diff --git a/src/dbtest/src/dbtest b/src/dbtest/src/dbtest new file mode 100755 index 0000000000000000000000000000000000000000..fac70f3bf2bc9eb6772a7169fcbb2f0f46a5180a GIT binary patch literal 359728 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 literal 0 HcmV?d00001 From 449d8d74fec01b2ad1e7e86e5078869f1c77e661 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Mon, 25 Jan 2021 11:30:31 +0800 Subject: [PATCH 02/81] Modify .gitignore -> dbtest *.swp CMakeCache.txt CMakeFiles cmake_install.cmake Makefile --- .gitignore | 6 ++++++ src/dbtest/src/.db_test.h.swp | Bin 20480 -> 0 bytes 2 files changed, 6 insertions(+) delete mode 100644 src/dbtest/src/.db_test.h.swp diff --git a/.gitignore b/.gitignore index 66e84ace..578a1470 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,9 @@ core* 3ts rundb runcl +dbtest +*.swp +CMakeCache.txt +CMakeFiles +cmake_install.cmake +Makefile diff --git a/src/dbtest/src/.db_test.h.swp b/src/dbtest/src/.db_test.h.swp deleted file mode 100644 index db2e4a4305b6734896afad285e61ddcdf5bdd8af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI3TWlRi8OOIRBqdF`RZt0WS<=cqA@(`7BSdi=LmVfn)g*RvY)25nvOYV?~pS(MlZ@&4@x4Sd5>y>+#=T5r!)$euid$r^Ef7|AMr&cTUsd8yyE@2&0~uU)z!Yqqjgz$#!BunJfOtO8a6tAJI&D)7Ih zfau-gd>Ag@tlj>Q{(Dp9@5}W0Z9~f4qSMFp-;4ThW=EgeKUM*&fK|XMU=^?mSOu&C zRspMkRlq7>6|f5Y7ZmUV$7y4c{y|#6wyDa*y}jI1wRL00$%{12M>cTct5xwyaU_=?gYER3)sB)J$Mp)8$1dwf<9OS%ivw$ zEx-YP+~YXE0Y3s?0UKZr+ztNm3di{wxD1{IUjv^5p91UP95@8-2D`zFw?aekWpEL^ z4=jNL;Ger4=R4q&;1qZO>;cd3a-2VbAA_%ghrv2H4&De}2cCMl<9rMp2RDJM*r>Sz zo&isTZvg=s;2!WS#`%ljJfJaO0yE&9U>A4_8$mw=9|!Z`l;%1^)5UK+2?IBbLm@xs z@Hk8Rk?^806}40Zlas07VZ1ux>WrQ*I{Obf18S!1e4oWFHlQwjDB|gwz5YrRwkD+o z*}yt$iG)wlhb2e-lpWjbA%O*_r6bd>tZR7Xsm7~So4R#fq2vsz^mw@L3pVMrB0o*t z=7T3rGe2P5eFz;BeIC2%`N(6sZKyyUyr7z*!@-4esRlS@I%o(vJ?*YC;Z<784b}F$ z4>{CeCdcAdkI5QRhZY3#1d^zn_NkoV9fH@xG#>8LFn@H%8V&dCS(F*~`1mMEg@cJv zw_dNG8+9pTBFn%*o8TGLmyAgla`!_prKz^3YKgNW|=#sb!MOU@O8j>ULivm zR0FXxaQV>40IUv-j=ItS6vpX>YR08{#n{j-lsV=K)ly3T6HY!Wr??>$&%&J0* zWpgCxz_zce^su(8R+X`(IEJsmkvQr4(UwX(%9Au*==k^~wL9v{Zs;V2Vj$M#{C?_3 zq1ajulgOtlzGQ|PoR6ceMefI`-`bX+%hL2WM3RV(vO1e!Uc%%6G}qXMN^A<&(?^VR zKgCo@oeu65rEVKSRbhdLU7v3qO`?RSDrtV5@qqhnvA`37DGxfLGUj5zcuFbp>MXv& zRjD%(?)zst2oQCCG7N%ARCS;=yi~C(yO`u9wQt@b3cT#$cjK~|5dNLR{DE+8VR~&9S=A*@|Tq?Ki zQZt`H#>C)Q_6U%{b7bAmhbxJq8OT@aLeZRIf_knpFt<>BXos;Mc|6%jYkJ~4pb$sB zQkm=yB*HFB`sR!TPX?Ws-+i;ft)$xxD`i!hELs+;*%>C2ZS&O+RQnD;H zYjd0Mn{h6VAzD9-g&OW;!)qn|*z5v?Q)%0}AgdYK)z)P24rVX;ON$ z=ovT1@a1!6uAbqhpfA}d*{Hf)QXOjxm*y#4u4FI+5sq_LHY1q|alK+xy3bEl@O6UdsN4!Osl&D_v~kA(4ti{p zOdjJrflEWBAOmG_vD*M0A$7uCUzCg;hpNifzDcu@6Jd;W!?i&IOS^`waB#b-Wmo1J z^V*S(4w{DMet?%$?iX<-^*&WBm7~i9Ey+Fg7 z4d(C=pe;uP5CwBhm69T4Z+LWUDXFx?W)$Q;sxXrNW{oO0W^i4Uw)wIuxy@|FrQ*(L zo_e4ZAd~s)nnpwIHx%}bb*HR;jn_xiXSvg-R$=Pp6x=aio)}sAlDuj=+i2FC{Mdo; z($WjBip^4{wCdy+z|PB6V`ta%yJv;Wjh0HAqL4<)u+5u1HH;}2YQlaN?)2f zuvAa8EV_nh{eKDT_g?{8|6|E5e^;>P{}=cj_$i?804{+hcmTWx{5q?r>)1b50jq#j zz$#!BunJfOtO8a6tAJI&Dqt1(4=X^6>Hquhkg@GW+kr0jeB7Sg8KqCiXn#cRLdtK( F{tZHr&*T6A From 829c2b40c9b622aee21ca8b6b8511b1d4211ca51 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Mon, 25 Jan 2021 11:38:31 +0800 Subject: [PATCH 03/81] Modify .gitignore -> CMakeFiles/* cmake/* *.cmake *Makefile* --- .gitignore | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 578a1470..3f1e021b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ runcl dbtest *.swp CMakeCache.txt -CMakeFiles -cmake_install.cmake -Makefile +CMakeFiles/* +*.cmake +*Makefile* +cmake/* From c8c43db624378284449283d13a0504b0ffd503f1 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Tue, 26 Jan 2021 10:24:22 +0800 Subject: [PATCH 04/81] Add mysql-connector --- src/dbtest/src/db_test.cc | 25 +++--- src/dbtest/src/db_test.h | 172 ++++++++++++++++++++------------------ src/dbtest/src/dbtest | Bin 359728 -> 0 bytes 3 files changed, 107 insertions(+), 90 deletions(-) delete mode 100755 src/dbtest/src/dbtest diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc index d829d9e0..17c95397 100644 --- a/src/dbtest/src/db_test.cc +++ b/src/dbtest/src/db_test.cc @@ -12,15 +12,22 @@ DEFINE_string(port, "", "database port, such as 3306"); DEFINE_string(user, "", "username"); DEFINE_string(passwd, "", "password"); +//std::unique_ptr get_db_connector(const std::string& host, +// const std::string& port, +// const std::string& user, +// const std::string& passwd, +// const DBType& db_type) { +// return NULL; +//} std::pair SQLReader::get_txn_id_and_sql(std::string line) { std::pair txn_id_and_sql; - int index = line.find_first_of(" "); + const auto index = line.find_first_of(" "); if (index > 0) { txn_id_and_sql.first = line.substr(0, index); - txn_id_and_sql.second = line.substr(index+1); + txn_id_and_sql.second = line.substr(index + 1); } else { - std::cout << "read txn_sql failed, please check format of test file. line:" + line << std::endl; + throw "read txn_sql failed, please check format of test file. line:" + line; } return txn_id_and_sql; } @@ -29,10 +36,8 @@ TestCaseType SQLReader::get_test_case_type_by_test_file(std::string& test_file) if (test_file.find("dirty-read")) { return TestCaseType::DirtyRead; } else { - std::cout << "unsupported test type" << std::endl; - return TestCaseType::Unsupported; + throw "unsupported test type"; } - } TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) { @@ -47,7 +52,7 @@ TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) test_sequence.add_txn_sql(txn_sql); } } else { - std::cout << "test file not found" << std::endl; + throw "test file not found"; } std::vector txn_sql_list = test_sequence.get_txn_sql_list(); TxnSQL txn_sql = txn_sql_list[0]; @@ -67,7 +72,7 @@ void SQLReader::init_test_sequence_list(std::string& test_path) { SQLReader::add_test_sequence(test_sequence); } } else { - std::cout << "do_test_list.txt not found" << std::endl; + throw "do_test_list.txt not found"; } } @@ -79,9 +84,9 @@ int main(int argc, char* argv[]) { std::string test_path = test_path_base + "mysql"; sql_reader.init_test_sequence_list(test_path); std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); - for (auto test_sequence : test_sequence_list) { + for (auto &test_sequence : test_sequence_list) { std::vector txn_sql_list = test_sequence.get_txn_sql_list(); - for (auto txn_sql : txn_sql_list) { + for (auto &txn_sql : txn_sql_list) { std::cout << txn_sql.get_sql() << std::endl; } } diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h index 75b3dab0..9ce24cb4 100644 --- a/src/dbtest/src/db_test.h +++ b/src/dbtest/src/db_test.h @@ -1,34 +1,11 @@ #include #include #include - -// result set -class ReadResultSet { -private: - std::vector> rs_; -public: - std::vector> get_rs() {return rs_;}; -}; - -class WriteResultSet { -private: - uint row_count_; -public: - uint get_row_count() {return row_count_;}; -}; - -class TxnResultSet { -private: - bool is_commit_; - bool is_timeout_; - ReadResultSet& read_rows_; - ReadResultSet& final_rows_; -public: - bool is_commit() {return is_commit_;}; - bool is_timeout() {return is_timeout_;}; - ReadResultSet& get_read_rows(); - ReadResultSet& get_final_rows(); -}; +#include "jdbc/mysql_connection.h" +#include "jdbc/mysql_driver.h" +#include "jdbc/cppconn/statement.h" +#include "jdbc/cppconn/prepared_statement.h" +#include enum class ResultType { RollBack, @@ -36,13 +13,6 @@ enum class ResultType { Exception }; -class TestResultSet { -private: - ResultType& result_type_; -public: - ResultType& get_result() {return result_type_;}; -}; - enum class TestCaseType { Unsupported, DirtyRead, @@ -74,14 +44,47 @@ enum class TestCaseType { TotalPredicatesWritePartialOrderDifferent }; +// result set +class ReadResultSet { +private: + std::vector>> read_rs_; +public: + std::vector>> get_rs() {return read_rs_;}; +}; + +class TxnResultSet { +private: + bool is_commit_; + bool is_timeout_; +public: + bool is_commit() {return is_commit_;}; + bool is_timeout() {return is_timeout_;}; + void update_commit_status(bool commit) {is_commit_ = commit;}; + void update_timeout_status(bool timeout) {is_timeout_ = timeout;}; +}; + +class TestResultSet { +private: + TestCaseType test_case_type_; + std::vector txn_result_set_list_; + // key:sql_id value:[[read set1], [read set2], ...] + std::unordered_map> read_sql_result_set_; + ResultType result_type_; +public: + TestCaseType get_test_case_type() {return test_case_type_;}; + std::vector get_txn_result_set_list() {return txn_result_set_list_;}; + std::unordered_map> get_read_sql_result_set() {return read_sql_result_set_;}; + bool is_expected_result(); + ResultType get_result_type() {return result_type_;}; + void set_result_type(ResultType result_type) {result_type_ = result_type;}; +}; + // The sql with txn_id in test case class TxnSQL { private: std::string sql_; std::string txn_id_; TestCaseType test_case_type_; - bool is_read_sql_; - ReadResultSet* read_rs_; public: TxnSQL(std::string sql, std::string txn_id, TestCaseType test_case_id) { sql_ = sql; @@ -91,15 +94,12 @@ class TxnSQL { std::string get_sql() {return sql_;}; std::string get_txn_id() {return txn_id_;}; TestCaseType get_test_case_type() {return test_case_type_;}; - bool is_read_sql() {return is_read_sql_;}; - ReadResultSet* get_read_result_set() {return read_rs_;}; }; // TestSequence->exception test case, include a series of TxnSQL class TestSequence { private: - std::vector txn_sql_list_; TestCaseType test_case_type_; - TestResultSet* test_result_set_; + std::vector txn_sql_list_; public: TestSequence(TestCaseType test_case_type) { test_case_type_ = test_case_type; @@ -107,26 +107,13 @@ class TestSequence { void add_txn_sql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; std::vector get_txn_sql_list() {return txn_sql_list_;}; TestCaseType get_test_case_type() {return test_case_type_;}; - TestResultSet* get_test_result_set() {return test_result_set_;}; -}; - -class TestCaseExpectedResult { -private: - TestCaseType test_case_type_; - // [[sql1_r1, sql1_r2, ...], [sql2_r1, sql2_r2, ...], ...] - std::vector> sql_expected_result_list_; -public: - TestCaseType get_test_case_type() {return test_case_type_;}; - std::vector> get_sql_expected_result_list() { - return sql_expected_result_list_; - }; }; //read and parse sql from file class SQLReader { private: std::vector test_sequence_list_; - std::vector test_result_list_; + std::vector test_result_list_; public: void init_test_sequence_list(std::string& test_path); void init_test_result_list(std::string& result_path); @@ -134,45 +121,70 @@ class SQLReader { void add_test_sequence(TestSequence test_sequence) { test_sequence_list_.push_back(test_sequence); }; - void add_test_result(TestCaseExpectedResult test_case_expected_result) { + void add_test_result(TestResultSet test_case_expected_result) { test_result_list_.push_back(test_case_expected_result); }; TestSequence get_one_test_sequence_from_file(std::string& test_file); - TestCaseExpectedResult get_one_test_result_from_file(std::string& result_path); + TestResultSet get_one_test_result_from_file(std::string& result_path); TestCaseType get_test_case_type_by_test_file(std::string& test_file); std::pair get_txn_id_and_sql(std::string line); std::vector get_test_sequence_list() {return test_sequence_list_;}; - std::vector get_test_result_list() {return test_result_list_;}; + std::vector get_test_result_list() {return test_result_list_;}; }; -//class ConfigBase { -//private: -// std::string cfg_file_; +//db connector +//class DBConnectorBase { //public: +// virtual void set_auto_commit() = 0; +// virtual void begin() = 0; +// virtual void rollback() = 0; +// virtual void commit() = 0; +// virtual void execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; +// virtual void ececute_write_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; +// virtual void close_stmt() = 0; +// virtual void close_conn() = 0; +// virtual ~DBConnectorBase(); +//}; // -// ConfigBase(std::string cfg_file) { -// cfg_file_ = cfg_file; -// } +//enum class DBType { +// MYSQL, +// ORACLE +//}; // -// const libconfig::Setting& get_db_info(const std::string& db_type) { -// libconfig::Config cfg; -// try { -// cfg.readFile(cfg_file_.c_str()); -// } catch (libconfig::FileIOException& fioex) { -// std::cerr << "I/O error while reading file." << std::endl; -// } catch (libconfig::ParseException& pex) { -// std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine() -// << " - " << pex.getError() << std::endl; -// } -// try { -// const libconfig::Setting& root = cfg.getRoot(); -// return root[db_type.c_str()]; -// } catch (libconfig::SettingNotFoundException& nfex) { -// std::cerr << "get db info failed, please config file" << std::endl; +//class MYSQLConnector : public DBConnectorBase { +//private: +// std::vector conn_pool_; +// std::vector stmt_pool_; +//public: +// MYSQLConnector(const std::string& host, std::string port, const std::string& user, const std::string& passwd, int conn_pool_size) { +// sql::mysql::MySQL_Driver *driver = NULL; +// driver = sql::mysql::get_mysql_driver_instance(); +// for (int i=0;iconnect(url, user, passwd); +// if (conn == NULL) { +// std::cout << "conn is null" << std::endl; +// } +// conn_pool_.push_back(conn); +// std::cout << "connect suceess" << std::endl; // } -// }; +// } +// virtual void set_auto_commit() override; +// virtual void begin() override; +// virtual void rollback() override; +// virtual void commit() override; +// virtual void execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; +// virtual void ececute_write_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; +// virtual void close_stmt() override; +// virtual void close_conn() override; +// virtual ~MYSQLConnector(); //}; diff --git a/src/dbtest/src/dbtest b/src/dbtest/src/dbtest deleted file mode 100755 index fac70f3bf2bc9eb6772a7169fcbb2f0f46a5180a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359728 zcmce93t&{$5%%(k#%H1xjqhl+1r-fy5Ukjst}ZW)NGw$`yn>)SVn`6RXfUK@T~||U z6yH(XO0_C&MG*@uf-LnJt&ga!q>6gipvHH!w*22WbI!eIH@gV*|NpdjcjnBQGiPSb zoH^&7d+*iZk*D|U(IaI4dWKF85gLC&nV|H)p-^>Qp1}N1S!hsb7yS3&&_SUc0QVLg zOITKxcAeT&z>vM>D;Vm9E9)&b<%@fk0U}(+OXvXkZ*a8|^2&O_Uzz!-*Op@xwAWCf z!mKAfC{Z|6Ql>x5wc-hF!Cu{Z(q5;LpmV6!GuP@j6|`5k9(6PKdF|lbf1V6g8)wTmB_ zGy9n_l$$b;A8GhUdefZzz8o;i*{{)|lF$!(6pG6b{|o#p{?8XX?e)?N`(If;aR0p) z?Rx6mVV691dgPA}_Y1!|62)2n*6tVz?U|+IdNh&^|1E^dhTjaqvf=Ln?`-%-_sEX_ z1bF4*V~7$xeSPm}ldE zQx17n=a6SZ4!y0((ciao;P*rv$R$uX`c9Qb)T#%~|cLq*;Gp3gB(TXW3IWCB**{)Xm|XH^b) zCgz|&FNdCw%0d5Jj`;9$4*#slA^(9n=%?nG7v9gor*96u4bCC|!W{ZPEr*|+k%Ruj z9R5R_7vo>%-{>6jx8%^n>pARlcMd-H<;Z^`IrMN|4*W_8UYsdB;Ql%A?K%AIxEyh{ z9eSgVGXDrfR}uE=o#5mBYr2s+?R^Q+3g_*|k+QV@91ieb&sXF%u?EuhO!t zC5A<1&1KVPO}eCV+RSOSp$y#Qs@b(Qvo6m>Usl5!nb^9Sf~~Bqs;QYds}jJ3+G(?9 zQrg+IlP4W{B!wLqs;s?-JC!pzB)HB}QQOrJ1wQq{zA$UVp>nK^56RV8{+bxuj; z=ySGTV}UT+tnccPM&HocplP#ai#W#*gU6UYoq5iz>9fP-r;k2o);X0_+Bvn=({mdp zx9Y_{qIp;V5)YF8j@Wh=8F1W`X;A8vX*IKJD`!oi{4+$Z6E3Q%#k#&Kw{(u%U_52G zO>WVL2InxDJGZjBs%G}AnG>c@tG&E( z4hH&pXKsfoPM9=nM)ic6s=yt$gURu;r(IDc{+n9^S^B5rb>M{Av!`7&(-;9`eL^MT z*R0FnN0Tcj)YMG4ymDsMWtG#bW?ob~mA%|{d)px=aY0(RsBS_HxKEr_Q@gz^eW|xo z^8;tsO@!^kGt~8*K|Q%@Qccy2s+qMp#`<UR0$ph**|CrpA{Z?8+~xIu(CjuB$=^m2yQ?eH5+C1=?nz0Gm4w5kSiSX&hZ$n^WVg8lAdkPEe;f9uq~@P#JdO(5&=0G;n*PqWT9Tp~#D- zeQCEtcbFD92~+v(%j5~$YXoQT8n@lni~#QNKg@3@)Kp;_o&!tLiMAs;`XN?rd!~#Q z$fQmwbK?k|`v;(BPVAeGG|6~w`o!v2-e#xNkuk##jqR}Oam-z|b36^yj3&(XCHMK? zGlB9EPA>4jvx8uRD$g0ZorzTGr0G=?YPMH9aJ1^_6DBca82va?RZSIG&&Je`$Z`B6 zgo^ES#?q=8)h4i}C6d!-e*c`a?GrEDZN{Yk!P!uM`vb6}PdoCqdA#^3>^9e&Hdh12 zwkxevW(xJ9?FcsmbvlvyGcViDkm=}7e340tcwv+5*gMIQ#6HN>o}>)i09ITN=x7THO62IuhYne<9)B->PN!9-iL+_8ggJFHVG z`vTkBTbWO>6){71A@J*>Nnl85K&Y}}=4D(hj;@+rH=~L>7L$~0%9QDKv!{lp%$y-P z-IQ5ao`sN$&73r&n%A01Q)@z4q#>&#SUYR_bY3UdRl}XJ=;7La%7kgtL(^u@M!s96 zM3Z^J5H>D9p|)x+_FjO)|3fpXW{~-u*)yxL2~s-+_{nsKDb;ngvqMuRO`nA+0)&$= zRge(N*{YdyNW~cg1+}y4AjOo+YNpjzg{E+qNXQ{5SkIU>M{A>IWhFamc4B5sm^L#s zMSC)5ifJ0Pt3qd-dTQly*kw9ngXgIDj;qA~|h8`!^ygNMQVzj6l;NAmy1I(TeF`+wsdJRHaWo9f_ki`)OJcJSDG z_y6WPc--Rf|LPq)w#@y%g$|y6YX6!Xyn8=kk%Kp`DOFk={0}S>To*fdp5?KBOB{S3 zi^O%AgWuc1Cmj4f4t~9ZFLLm$4t`$;-{#T2cJNW%95?9Z`@9*F{9lSl$#^Npq zf1pDj`d8q$2RZnB2Y;}GFLdz54!+32AL8JP9sHpVzORG-p@T1R@P|40K@R?K2Vdsk zf8^jJ4*tguzTCn0b?{>yd_M<2-oYQ?;HNtHBOQFTgFni_&vo#;r)K}^9sJQ2iR(fK ze~g1~a_}V%evyM8;NV*v{IL#xv4cO(!7p*}$2<6C4!+dECmj4h2fyCIpWxtI9sD2% z-{#;4JNR}7f1-o;9Q;ole5Zpy$-#Fy_#qBH^iJUaCp-9j2mezCU+Cb=9DI?3AL`(X z9lW-rg?%0TsSbUKgFnr|4|4FQJNPmOe};pPIQWQzFL&_69Q;@ZKit8Ockm+|{8R@& z(!p0d_)!jiu7f|*!Ph(ZvmE?F2Vd^sn;iUT2fxU{pX1x1gCFbQ*E{&1JNQ-yf1ZPHbMQO^X8+n9`~?B2X-w4i+}s*zSew5_ z+S^?E4$zwq--!Pf99)K9gvGL{_RaV^{7u44u~V%Azf8C%;e^1?5bi~IiNH@0W-6U( z5qLRarqHP-f&WaHsdK7c;0FkEIHaltzL#)5;qe0BMwqE{s$Ae32{UC*l?i+;VW!Hd z5`nKF%oI6QEbtYCnHr}G1+F2?lsFX<_+r9Lg;SmX1>*3DgqZ@T+66w3FjL=DtH7fP zGv!Ss1RhS9scveCz^4#qikoT?_(Z}?ZBtDGA4`}iZK_`2BM387x+!WOfgff0>4c7P{Ij;pCSB1!b=2xiZD~jRExmN2{VOEH3|G@!b}}g z^#VUY_{W5+1-_SXU&7-BzKw7{!sP3l?Z$dVWxtqVu7z9%oH$H zC~ys7rhciAz!wu{%9rZ=PV7&Zsa~pG;PVJG#Y?pcJen|5yHrBp;e?serIrYM3Sp*l zsTP4xB+L{p)gIFW6FjKZvwZMlGW~!DNFYtbZnWCl21>Tb|Q?pc=z&jIW zN|q`SxF=zzVyR+*zkLYs5W+) zVWw88guu@bK9%qifuADGR4UaX@N&Xo!c7AInJ`nTRK36t5I%!&wZQihju0L%@NI;L z5iS?_M#94hmkE3=VWvu{5`nKF%oHhAEbtYCnHr@E1+F2?lqeMv_+r9Lg;Jg0iv0;Q z1xmFGd>-Mm3AYM7nlMwLR6^k4gqZ@RmI!nd+qK1wMi> zQ=C+_z=slMYLgl-@P34u(xl1--jgs>nN*p;I}>IKlPVFoCt;>8sbYb@{UhLUgbM}! zj4)G`R7l_t2{T1Wb$%oECp?~TyTES}W=fK375HVsOhr-&fuA8fiSQDEpCZiEBh@1C za>7h4QcVK?neY_C^#VUYm?=i8THt#La{@|@7x*^9(+HOfd?VqD36}|cE#XTDmk4|f z;pv2n1-^nXQ;Afez%_(t5)KJ`G2vN+JG;dGgqdQb+66w3FjI?EtH7fP*APws=KMO~ zqhZmPE{sIqi8O5NEFUv0nJ7yQ4MmcxTRmQq3(7FB_8E>x;l5}h{hBF97aY6*973U{ zNPI{?FpR|W4&`NVS8X3m)q8`MQ}s@p+Y1h^C*c}%1^qV7>%|*+piz;D%uLw{h%Teeb2iBonDu>2ACe> z)--_*)PaDc@3@wP=S1djS_DZV(G_!1B@$iA`8pD9p2|zCQISb+Am&DZ#4e}gD}R7T z=_1jjHvsC6hBr0L+Y~Ce{(6+e!kZ$KS|jmreI&M2xI|x)Dy059oYQiRSJX$MuMztY zhOAV;@1fua77d9W%B96}Nv=lQkSyt4?=mSbM$MK;bX_F+x;I%F0Ze*buwzFJ3KNl- z^k!v|5qTr#Wx+?+t!hUG=RJ=$SMsbX>v244Y0`U?JdTb;*I2}TM8Gm@B7thoKpGK= zwz2Ljh`qLC{#xqwd}yC~Mz&TMiO%baMC&>uv2dpat$M&WOE0(eQ(WOh|(!7|LSX?gg#&(FdoC#PY`T|9L zLP`x$qgD}PoCz(%ppkfEg1rIh3(!ccViP*X2GnG8cLyis8p-2cEeXGbWD61n3(h4R zZH%nE(V(P{89`WZh-?G+muy&~2 zi;nt3<#1`0rAaUPB_+UMORN9QE@+BaTYsWk|2@$fOOxI()JNPjA|<`S>R{3%6rYCN z9i<6ljs2xHacWln$LE_jr}D%LF;sm|`0@*&|0KO8xGMYBe%fkHq7wy!=jS zTn2QTbUBRBAE%7V?+uDps5ZC=fTwBwQBbTQnO-}>XW z3BKx&pmzZ{nm$dd(;}>%_bIAhYyDUIbqGj0PI7$f3kYYuRCIl%@wQAEO!T1t}=cYhOfh(Li2{IhPwl3fMm;`4&37R!mU|Lk$I>! z^Tha##Zt%5HqOT^h?WE!4SSIo{y~T_GL1JDk=URvQdFVTH}irLDF14d)0-pe%~BPd z9+PT}uUzXJS*D2(X=sW!I|aYME(u6=_6oP7?RJXOply5PU{E(Js$F#4td~Y1P;vNl z6UF%zH6Ax5NskZhYPfF-#Mxmd(nz>=u*0!~BUl@*{{rj#&N@&$L&NoLpU@7CS{L)5 z>QseEdVF3hHCEK-2jgp00owDVH$-b#olQi1Pu&9fo`mp}Ud@yA9?=0WmW5gl)po~| zH^3hVNP{Q6%h080TWYEJ8#6ZXn|sg$XAC7s`OlAope~I;ud2*6sA}`D;0r%+MM-<{ajX(RrJq zbsncNa220%@;cDWN{)|JWhD7E zcIqP0yzo6eLo3IVs2ED}X3K1VR5tG@6i5oa!Rzr6B#Gti2h6bO8^fZBC*A{_<(=ez z$fsbqkPMG`D->EzPAkcORTFVfq7jvY;Hs;JLyk%8ZY=M)7V^&v#CW?hI)yrDC>jOo{Dqe|}mvtN=eiksgHDzjnX`H_`kiAU)4Qu<_tTTPx zTfwz2*1*#4E!u9^-?FceBPx!io|c_DTK9#rM7G3%3-+;!FQVl|O}aWxZy#;PAcMAF z3i_;6X;Q`v*X&Zd{BA*{`F?&MF%&~e6>n&T#(A1=J$pP^tzcecdRJ(E!oSM%t$*76457jxNP53ghe4&Xe8QIj&eR8~QS=K52Ka5f zaynp;rtg%H)|4M*S)*>Tvh7ZbvV#z%x5Q`T`{=Tfp$)$+EvMQde*|&p1jD2AJ*lH3 zi0Fo=Fp|WBU)7@aSa}(^dKf0Sv==;9ej34ra%qpm$|D4!yhz7>b`(L_pHUbcHFr=S z4Qq?Cj~Z(SY4b((pUzl$5x922({aJDlCcZrmKSI0Tz8y|ErrM94A7{x^*oHux{UL} zE>Ks}>y3QT>d+r)YBwn#Xa)~y-$xiXqEX#_eRU&XiMmBcBHz4?R5{U9o1or=-==AA zU+P}9cOiY6q}k$*k^BIpZCNFSWLKb!2{K7zk$k-ZBkROVSZJ7huHDVDpNER&reaxP zWbjk91Jb!M=m@*hEjtd9czL<9F3;~c)Hbq&I*zWEKqc);y@(@!_n;9Qw;t6KRC9`n zJvt*1K~%?=*x1q;Qo348pAwlice+Y@NmGEjzVXUuErDtW2_?Op9^7V?Az*7W*MrI8az%u@ATlVeEN7 zf5RQ5)LLwyEQ)ld_)LjKizi{zth>d&0JUSWr2x|`wimbBAb^-6!(ul{^J15;WyJXw zD-^M%rfp=g*jg4Ei#>q`Gc9I{&h+KX!sDkbG=#5%pW(q!GYFvua@JwD zxq{;a*Q9p~H??&6FMUY83)nd0kbkj^3h^R6cmahBr7;?qyhvnj8`ci85kF%F8iyvr?UeJ^qBvOu-NbI85~m4?LBah5C?sDZ zMzl4uy1gfN)>pUpj`Ub>C>u5vLkV4S_d(`%ncoqVG(u1ywDp`M?(8rqrQ|mo*fVA; zS?Al)s_3mLWBce7+Kv0%N3d^c+zl1<9>?emC=c-|ZNgjR&mS^LB)tQKq{!-RHvw_) zZ4K_K7^SJ4)B}4ML(nVlD?g)>;y7B>^5EW0HtFf9TPOVuK4nhnuN4ws`YQ$eUg^#B zkxP2tNzk33FNNX>>>*6PUT5X37VHfnYy?Z2-DBm_A~o0#Aql?L)tlpG+4IloU!>p> z;MI}nm~2Z%$|u~XGfmIHy2g%lW0RcT+NqVqC;1W_Td$j6Ghs-2@3I-TKgv{;#{Z!e zrLP=sQ=y2(7!oar3yaXe;^ohBmxD_+GTEOth+-6?gk6nd#L7>mw+JHq4YD^SDGx7; z#4GSG3}zzb@3r=Nt>Q1X+7+DuI$^@kB61lZ60egel0Jsn4baAS?Wrw(W>ondH>r|g z57JVlBFhrlxZ-pRF_K=XOkE{l%J$kK(Km=~QW20Yg}riHb545Ae@hwwzKjzLoKo{# zThlZ*R4P%;)CTyAng?c!rWSTib-(2RbU7pCIIWaKD5<8`e&>vE3hUevY`MapR8x9jD#1 z_u+IEj3FD7GsjNa_@18O^L_oWDQP!`3-fGs*^$B++78n025QG$wCG(a>E;LQxu)C_ zXml)6Z}=C2b9Z4#;2%~e%KtVMywhKq7mF}LFJmgR!nAA^y8KBjItrrFLDNS0*{I~V zkfsZsC(IhpV6*2m7Sz;aT|0C8t_<;W9jCFY`J>*S#(d~?NU!~=*)K}1bGw*%F zK@Ne^weXpfeQrgp)9~}Xv96?xPTnon{gpk9a+QEE6s(-TQgj07gd6M55Q)3TI??M^ z$GURKy8T#ppe#)@W1ZX=iozig>-vg#Fvi~LHQ$v*Duz^AtmD8jLQ7=$muvuM#=4!! zDr>Ckl{41G)i0y%4C1XB-y9EHii3Za zM$_V83aGR=xCjHI`q5^Jtnm8Clot)9b)k4-x=^~vGC3+m`M33){viGXWwm!;U z>Q_k1kNw^hr$wFYL3cQK_(3VDx?l@s+Y+DivMO{W@3xuL^ENly zXU?Bn5`QhM0`b!mYeG5KZwK<;HiFI)+LJr$8@xx=v>0`MTKFaTrma#kc05Y9pqn(E z+8IJN1sPo6L50|~&1Tzeq0Nxz0LUZElgvNO&oZdk|BV~Efvz(1^oDtzq1t_fft|rM z)!N`F*fuFCP?{Hg;86MIlODP|EeKHlntwfQKqr#zk#Vh&=-aExA)q%CyRg_C85#X} zWb^~?6K*r^OPc80geRhOWE8O(=Lugi!(6w^r8Qc85Qc}_5`HJWt7&4{-4akvPV`%Y zO)_-375jq)Hzsh>Z&yGf*mp02w`9;bi6jogZ5FBeq=1;2;}twq*=};FGB$uLs|Sdf zZz=KhBpw|0YWB34ujuu_%-P*yHUiVp8xZ$Px&M&GeNl!^d?jhGzb5@aK%}ndM_cwK zpR+gN8c(c^6R_~b;P%TOC`Vq}LB`Cm9F=tix}5ZW$9{-HMKr$17-+C-)qcIiF&}-~ zyO#xNNvQ_o?mqMYDD6;og-wrF*a8*j_Jdn4c2_#=;FA7`%gy>hP9fCE_YNT)ySX{V z>^e*ayXx5teY?k*ubNNW9g6SOLuj#pvWmzR5zNF^A_=>>%eXGQ8TGkK&peziBMHQO z>{JI4($Pb4+B}jo0(`7H-KND{>i){1+WrX8ml0t4J8lG6jS=rgfbl3b5#X!VZHNGI z21m2nFm`$;DUguzevNDLU0q~L<)#@e1A<>LH3o^!NN652B5yT=Z4@EgPmWEe`iZh z*GsmjsU+qa@s^LV|AAz5FeH`f=O+|1NVUF{-IBMdwqsdhsJ`T`33re?mY`2w$8jY1 z?OM(k+(%(vE8LI88D8(X_0;{?he5n9y^MySBoh!9bzBp zK+=;fAvi>lI7FHWjXx~L5iiQUJ8Jk=aa^stk^hTs`;?RzeN8iRKQ_LtM$Xl~u`xDU zgN}cnn!bR9S^Zx^N7DNvZbWW9w`W{#COh0l|9Su{T>r`w^DwA@7=Nbumt)sVkKxDED8NQ-w5xA- zkICw3FPeI>mI34d}LF8xZ zb_5tto(T!ES{-aJbj#AS1xnTBZ>Tf)f&K+(*?LH3H`2msGw!xn!VG!7LexkbCvGeF zjc4T;R|bbW3vS_3IL{lD5Zgk6v_%RiuYx>=mz9>imZc=OHjIW#WHfGhal#|d$|_^S zMt!j-?I=fG#2%khM9v0VzK2{6gP}{bo1H3*+E7`=v)d9ykg-j+CCo8|!E(qHXKcm+ zZMG!dLP8O2NnC&(R(C=2B1+AIq>AB|Yi{QRU$;1_HvJabwWivlO?N||En$XD2l~qE z9<8YWJgY>7IX0cVGK)>IYDjtyK%W0gHvJ2BtnIz99KHW;mGs`uqFKGZO=;*%S$*SM z*%&XfW3@xT@AZwoIeo+U?N)or9ysQ&n^)o~vUL5^-(64H0UOb-r~D43##4U6z}d}H z(gyP%5s<9mx9B1FA-Q!3F#uJssO0{REIUsBdTCF$HXUif{dae|Xp=)J{&X>gPl4)m zaWYL{ri&X%m6?w8`K!2}n~vOv)3V+Wh8j#4@5vSFOnUp_n6;TM{N6a@Ib$ST&z7T_ z@pn5hc(r(j4v2m5+tF2I*%bZTVcT?aF4(v_(e{0v{EjUo1)X7V76`kxr^*CpgWUdHeoYhJ9<bF;}d#BUC-p z&bh&+VK0#$y5+%OqJzV@-g0(~hg!>MI6aKpX%6Fd>0#W?NUS`fBeFbV?2Vo}*H(iVBV4vO_Q}(~#$rwc847b}TiESx!*k;7J zv@P_$Dq>nz+})C-%3;aekN^h4J>sCn|OTFN$_CGJDt2UE|6;R+P13dDMyJeKBIjP@d@#1d*P6JylA-}sR%!1|m-aVXC#_i6<`3N`TrRTG z&OMwNNCE2f0hG30j)*u(j};Iex-@A`i+W-~>%AFXr1``H%hDzR3Y&c>T>5xGIDb<+ z+KjF^3Qmjn6co#)dAwZWQ*jv?ZLF3{d@e4Cc*O<%!u19HMl}`mt7s|cH*QHmzp6w* zzZtCs{p#8a`pxT1HVy(M?=>YGPr|Pfb}Al5_Z!OqM(h*zjS)hzylW@-l$0*s%zAjh zScQ-U{LN1Y$wh_)3Tw;LJeylH$6di=W%&gw6LvndMu2Ki zvJ-|8IQjoSNRl^n?NIQme^4(8?2$F%2Re{<#GD?XSnr;ZMUi-)gYX+CIybi) zm+()h)j_wZdkj0swG!zo#zoS*fCUS)6r73zycC1M1LXOJyg#uQWMcOr_Vi3_4`NFU zmTxopq5X|^7c8X)m3gsY-uf6EpvmfrPoeXk51v97i$s@-nPOreDi9B_Htxz05zjlN z4*ibmT$18eYHV0k8XuIj@a&Z}TEZyBW2c2t7)ZtF1aj?+3P!D;3N2-^s zC0KFH)AcBqerl})v(yS{t>>9RH-x<&9Sw48EcI6+0`;7kybvub_Eqqnp=w-h$^wcjIG-d6*?`J9F6*v(9JcoTFHmLF{vTQ68^8RQFX(LzF? zmMrX9P$mddkw`DXCO{KR-ee{XnFY>=Z>0^M=fK6z0tqsfSs)(9<2HD{jv539s6YmJ z?M{ebdxENCNBk%vdAuTpECFrd+{ugHS2A|A^0m-N>i6Qy!U0>~I5dn?y74}zqUOpn zsyLdI-h1=@LNkQ%#9`9w!B*oHA7bFPpmp$;!F!wX783ebYIs)OAI{3;eTeezAn)JF z?+QGun8y2LLzkOL%HJ>KWW_CWi;T0MK5$8V!8;B{sRso(m38}>LC`E{u?ua(wsh{8@vEKd< z!>UNijcZK@H?xo0gKbNR*miVK@&TKd60yvnpyYYKM6`NPP$Kb9>WD^q2PL=qb)-KZ zia>4b{nad?r|B_6XFs*e*|}tn<)>2~dYd+o?nWo=K>7`SyXh1LPr+mBWi^R;p6>km z=GN3&)g|*J^JtAzc>k6PuMG8PW2`)E~aSL~3rp z#oGln*`g}7HQKtmy;r|h$wuqhK#$f;zGkhC^)_V0t}fabsne&~=$lL%oe##= zMrUawe#%?$7(KdEL*1aKu+mGl1#0&1+r>gST7|N|ZlSCtD06Q3ahF%B&fj8jN0r)v zvjB%0CBo1ADFsKbF1S4*w*%#O_^FN)wVZ;By>%)&AwBxeeJ>%dQO&gC(vPkQzwZ!_|s}%L9&c$FS6RvezjLX!KTuxt?FLw8CLt6 zjJX8y?$m0-(yA@&UhQdCOZe5MWUF>|_i71N<04&KJ4UNbDflGu+0cSLdLO2}E9zeH z2~_MjN1wg_<_~78^#gAul%sVv0-2$a$61H=om&I@zN+@UW2)G90WRK>#jL}J|AKc! zWG>hMH%i$}oCbCi$j%?Bx|(F{O7o79ptRmmhTk^)!F{cJ7Cg4+!ot)a zP&3_aV|zvmQ#WQscU+ZD%2)bD3p=J}#WJ)x&0)~=WD=EQlwA2ctTNf{8!tt--_>rP zdy#1IWL&(9@0V?bT)P%#?}x7Tqb>^L`UDu>>dAv;(CQE|mij%<;0$9{=1SsOgamPY&|O-uBZ6JpfI9E#sN^&1jp zhR02$;9In02_lv5At76dmyees=H9P+&#;4}ge({SR(`iTwQlumHPurka?n>Q{#q+S z|4Hv~Rx};@#t}KMg>}>udpJU$O*H6fd~82OrTYt;RvR=~PG`e>^Qb9HIAs%^K1Z9@ zqr~pw`0+{u51C_cs~_5eUzEXx@!VHzbg>cXm9MdjCKTq?rh4WNHS$>l9@PVkOw1)vXy02+(vfrMb5mJdIWdpZRwx#w)Z=s&-94<0=&bH+7)JP81}lD1y#~pJ%U9vUea43MRGvt6==}Druk>K>YXS@(u?+_>MxzD z*BGv*k+T4f;w#DUG&SD$QTl3SkI*WbLbqA?Mxu^kmhI_=t*LuLI;-9ptX@uM6$dL} zB(X1~KFH@b5uM_UF*3JYN>L$+G|>|mnJRZPj#VbFFq649bJuDSblznA{&-bxD^U37 zpZhzNXxSf1dbE6E^&N6R2O61DgWOWCf#PR7dqv=NMO;vMJ^wuE

+s(T#MvbieJ51?WU2SFeQ_=ub9ra%zhGix`u(xsIdp4-aVI~{5qPb_8H52_i0>de zihD{O)$Jej)K6E@zP#Fukgu~gglVCRMGChD!;QgyMB{(HGV;pXf4O;njjQY3qS|D1 zGUyzFaSV1E(GI?zF6vOab?gD2fAOS;X%Pg`N1*<}h~>uNIhxA1CXU(j^7ppEo_pI8 zI_ahNSU%}C1C2?x%pUFENJEzH0sfv$htyl{Tg-hr^it}rybj;UhaQ`BS?0;U89psA zkZft?QuqwdcYU8+>@oiI4}aeKMzV4j*aOEmCZB49_aM-2Q`+kboV}7f>LL7s^1BNn z(Jv8?+XvS#-fhQUTpC^Yr`^WUZ!wO{zY1hhd}g9&X;y3|A8r2m2cp!aAG$iua=Ey*^5c7$_illUKcg@p6^H7Jif`Hl9amPfuI zg}&kEnaU#{_tMV+2l;t_iRlF%`XAHv$OpaL&e?v*-%MBVwbNewT`Vg^_mO@+WBbpY znDCMYEYu6hR`w<=@E^$*tJOf4^wVvzOmso6NVZt4*IZWeUXp5y<)$kVJ(6In&ieMu z_RDUX0l#7<{U-ZB@d@V*8^SI$q-h75?nFA%P+-6QT3WgwHj<@%Waz=LypgGjH>cWD z$!v8`mNuA~l3L!IXpd*R8q)Nu4oX7*&7<9dtEa^0cD2T7d+jBuIPz)#a&dy@*k`2L z620wNKG`bH%2SP*bVn+lNudO72@T7@aFZ3|mdzy6*&gxe3Lak(Tc5>Z!bDTi7<;ZsQ#Csz|cOvry6>48x}b z1dj+rq~L1`bM3=vsp!KGG+?0)NVc?@u)rInQecJc6Q&vJ7`9I^VM%z~I zLm%^p9J2V}e|@kN=zR|z(qHGcZXWxh z?Rxp^uxmI}yB09UV5Ey_B0!M>k99Y|a^r9x`S8a#wQl}y{Sf$BBM9H!N0J|chQs5q z)Z(uA(o}mly(wuYI(~l(b-?tzee$^Ds;jGO)K?KSBxxX5 zjkib1jRli1CbV}u?b$ImzxgL#gCtaQGB(?j`lm#95mcBg7t9kMo_))+>dsFd| z4;zJqeBjEM5w4Zz(6&%sy$0CG2mf#m^T!e!G$3D=NBr4T9{JmOoI^e^P34dedu2L@ zeAos39B4wmqzP?YzXtV3KI$Rsf;^PT*FE?+!%KgjAiR7EKF%=VnXphVBwO7!VX=Od z1}n%oBWN8VPoz@RF~~T>MAwr{g7e98M7u$+f95`DD6a zqmXQ|xXU*1v+_}*2X$UYhxGB7uVx*Dk08hMsxBeFG`i%bjp+hyNX6(< z9@mW-iPjSG9ow8f@2cBR|1Z`DR?u%TzAv;lp7NYuF|S*s7x!TW=`=*rgd-ngp`uUp zvn%R)w=`Xg{s0I46H2PqigDhdg}aP|u+Z@_>tP)mK+_ z1GZP%8QVH86S(ptP>jboE^e0);+t`}{_N`q<+}-o>u!f*s+W|F4UbsM*~3@E{$MZ74c8f#NRid|hKePNxiFQOzwqK|Us$tqh9{IQy=g>z9lAX0Y$d@r2ohIbtdSK}1kPn>&rW~K4?zk5D z;HNyN-Vgb>-b5$zw{y;6JfxOG{y^uPP7CsJy^e{xAz$*x6srNf$VZ>3m&ZBeL)Y|k zke7_rNIH>+d*$gXE`9?Y+mFEs6^Ze1A0%6y1=jusJk$-z77tio*6_eD@D0fpPsaj( zWgi>{>p%l-&~m*>}#2#y{obLRdp*+p+7r{`mX*vB^89SdT+ zYmNm$Rzb#Srh0H42tcIZV>BJhgd_V3KYuj{j_f1C<3yqpseY%|U9|axvt~YB()m2R zpBaxFPVt}6v(^1|L@#vgbs-nlG4@UTV+7D0@Lkm-@K5IB9QsLarses(Fuo%A3A=6b z5g{|=OPhzbsmlYhKt5z3<$yet$;+)ce-Qff1ReRrF?!qw$yOgtSh9VW0!y~>QecJk z15I@d>jRpw!uo*a`8<1lHO&o%^#jZEdET*YSO4v-Md3b+?F@a2`Me8X-r=y_PdRCQ z-fwfw=TR?;_*#8#-o$x^fZlIfUEi8+bKZ9v7cawYu8q?l<3pxivC8s%UNLhpZM~gI zo_9JwCrbSD|JQupQQbo-hrRpsGXduF{B+Pfq30-}oet*bwjL#JqTfSbE#rdRr<#2{ z^xZNp$o(Z>hy1)RQOw-1n>MBkv>_FvOL<&3W+aL|(hgX^dgi*})BcTEJNjG9c}z{T zwq{a2JzZ_Ih)&E;I1i%IdGw=RZC=h#tf6bbqqTGd;VrI}yfyi2I*;N1$uU<@dYBf_ zgJi$Ag1dYqI*L#(skrgz+B-Mj0=$FYDd$2L(lcOP8L^51Z(>lE#$x&sJKxfTsdG`f zqr07UbaHkC@E;57`?tUhgAWNhHU^)Aj%`hJ9V2LxA8!BGZ!D=}0f*}+vG~0gXPr|q z{P6of{JE;PQ|Rfro@}Oz)(6nLPcbl*v;Kwos?HIgLbrlWLXW>_zUp+HD`=7*!D9yC ztBS>SlQ@wmo}IYz_Wnc8Uv%o-;3?W6^f}Q$telZoP{cpI+Q0JSl8{ zAJ;J1*Y4J~kS%CR_0Yq#&8cib!)s%c`l{Up?=QY{NTjObwne_YcWu~Tko967GN?}U zRo;&w-v8=b^LlH>+;h}j)89W0@hX#@(RSK%8yosHH{P={(H(D1WE1pwlpM(w?jO~? z=R4`%ukSD+M@j1Q^@>SnEtiOW#bkmVfcKxc# zo8@^B`p<5?l!}uv;Gn)pHnxgo#O3HSI+8x_8o1s5M@%1h4EAb-FKw+yfp8_Q+S|WjoFT9ZUoLBa;0%&s{ze9YZ+vD`yPc>D@C|y;HUG z0LV+U7u#u1tY=DQQdrN_)X^cR+lD^9`aM%@?@YQL{JK(<=C%VKm0~RuaKU?t)zA42 znaK4*xCV9}=Rmu>Ugo1uFr7m_#_1+ZGCC z-|*Q7(t-QP`s25%i|B7<%pr{2&INQXxyQq{cqS~S-9A>oCPx$gVY-;7_E;Ahu)@v< z=~&=D^a#n8Ul&uEuZfcKgX;<1L$bv)VL?}sY_TroV$LVi1>Hs}1r{)nY_Yz<#hg#3 zE9|-;6BgPWQYq*{TSY1kD-s<|7+C)X}!5JJMNNH_TM})zQ_@lB0J3F$#8u*TpgKxosEcpF&2m?~#2BWF`Ad z*@xj8*~jW~L_V&^H4+2AVaL=w{0<{;6ED63pj=`*z`EtHJ31C{^fi!j4F}+DWMsnO z`WKHQ`>SHnqM$b;#p6=Fw{ z7CC_TqeZvduTq`B*VjbdHl4l+bTLgtoJhgtrq|Jp6N!!`ytj`!eD;ya*S21{deQqF zduz_t*2UfL027`;Jl#ecgQbp3rn<9nnm(acRUMZ>(3Yw=ISh4JL($YCBPf1;3v@w$ z&lvOp_HL>o1GYEC^-;17$##W%AP?U-a65Sp-^i1FmF$o38`lZasOHSu^y zVp(cKwUtYOX!4I-Tm7xXVhWoynU)5K`uf=q$W@|Y55)V4;o#E)g7Nl!0@$SLApVy+ zDs>RQaUHYNt}oDOWjYB=q~JD1ueS+Duz+xF_~*u9zj^yD-yCrLVJA;O%uo8w%Es;# zsp{;?bkN8|R!$hD>?H218yxdQuMdyK>d0?P$<+upbTyJ7V1pJ2;S}x{aG4ylaJymK zh5S;;4)icB1SnE?*|~9eFa3i*zINVjub=$2wZFZ$8{^^v{uFiz7u}3_p3$MG5Pwx) zY78+2{M}0^HS?E!!(cWaJm&Vm>(0Sv=$~vW_^q}d*dA3b_+QV%Z_uP(hu>l4r`LBp z6HJImcJfoPOgKT?ULhQ=d*L=*2uIp_8=WxK3;ah4j}wVbpz=rT{`xl8kGbk*tQj3l zze&IICZ!|oZ9!-)X}sECa$4flV;B~c(%u|X z^^$rI9Q+Tx!2jwwHJ|l{@#S@_rs4Y;)Pw6lHx|iG*QHrU|7yYss_TVtP+z1%y5)@% zi4LXmR}MYBbNoZYj)X4)8zyY0?2Yn+(E7!xCFxG5Gb(gXwSE1ZIu^8pyTt%-)AKQO zTA5BFSR^~yt5_zSptASI;rH?^UiS5!@B7K`wmP_Fhj-wQlFXF%`{jiumKY?LrjpCz z?WxWfp4=C;vXS3XYQ&IVmuSo^KlnAWf5Lwdt!#_XOX*7>Pi?z6r?y}H9InST_?9+U z-Us>m^|%JKneKyp=(Fh@@)1WgokKqOV>*X?#A`qY_>OBpA85nxAoE>vE=!gJ9_9`8 z`hicl7U$%BkcZ#-SRLCw{02=pUH~M8O>tpkb7g)f?eUWUiOgLPR;&H$$BpZ5` z8R{joY;ZbcAwdD#2k077u{h96q+)Q;Hs$=6El#JQZoojY!7|~XeION!Bj>$}#X-A6 zDi%l1cNL3+c8ydl4%#bHc$`RdG?ia?+crDzIQN})>^<#_WAi?z$)`kY%{Yvu1xm`E zZ-wYm{gv&>@Stt&APf-qJ#352J|)h$GsKmtO^W;RvhuI$h@yRz3xild+Cmw;WQm zg8n_^yBCj}_pQCVU{{>EFU78C?MLUf^6Y~LuZ{Y$knRgRf^W%dRmYJF-m(s{ZPD!r z>?-n*Z12sb#HY})Qw}*~tFC3IpXH@vt|i-U74y2ck^g;B$Et|UOFsVgaku{ES36)# zo7+2ZifiVE7KU`MYEZ%`#x89(Juya4E;Q5I!&05el+wS|h*_i>glTC)mcDs1>7Y1m zPbUNof5&SrhiQHVYlG3oVcVsS;VeBZ-1ZdGl(hn~4iERnC+EW{Hv-ce7T71_amNtLQd`~7H}{xh&f~TUUlqy|Ma83jd=L1Piyk)-mpSE_n0cC zh43t^YMH#AWflG=c!p#nha_DOdy_)J0PDzu*rQU&0d%zrn&gMu=GfE`I9xx86^T~R zzpcAGQ2G7cH;V`JQCxyhAJ6pS_a^V7>`gp4_T1@B{lEM20_Y&#qt0_`#x*T&RgA@I zC-;a~Z^mhPCb^c`M7lGT5gjfs$ISF5v+1r*j0)wd3xD0z*M$6=6bUxsBPi4tsGBCb zm?qGL6x?^#vD`Rp7qTDzx%sNPZ63qAF=y<#pM@>t$FkxGVieOeffSL3h{YEY88IO&;!* z*A6Dzd)@DoGmULw>vZ24{g?EeZO3*dENO#_#oCnD4vr_Djp~2YfRieposZZ?PL~U> z9n=)LypE7q>7?L3n!e`6z5dV67f|B>Zk$MTBvBSmzP{&?4^@5#YuYe3WZ?^x*S8VB zZ2TUq=QFL}lJ?04%Y-9sQ?WQ4%d@MSi5@x4TP!^ogCT{-i9{=@{Lmo{1OD>Nf9}Kj zHjdXSaXGAS)2)|WpX7ANA_`Yt>lR2Bs@>^JYu!c=cmDdx;^vpeuW!e?Dd#yIW!;pf zWci31?G;d7LxoTa+e2ROv=#lvIuqD7{T%XP6HMojUtUAilc`L18hvLqPF!9?wc*%8 z<&SAC7W5LyrccswFgAe>BiZ7Z);<9P$p*`WgRu=#u{h;5RM-;~E3_jK6Q4`5hH4yP z|K^Z~MqPa3pZm?7KKO?l&Nu379o+K>pVzt}ZZGEbRDN?hIEVfKHeR>$@C%VA{Y+e| zUxTv9N8f=%u7^b#Szhf|a6R(#d4bmW8|PY96V5qw3kC}=sG$4V#&*hUDwZ18XGs0D z<>%Q@#(av7rTuV{%|5NIp?%CzSuMf20e{ROj z*$`Zvs4k?BD*uyo|Gv0}Vi?ssw&so4#9ME=6?Or3#%&ig-$!nR_&>0|b3E1c@n^Pb zZ@XYp8al@@de3*}%9@8-G~uU<`n*_QTr+|8U;CY-CXHWs%6abgZ=83{$--~K)rRMN zaetO^#PeroJ^bZi)hpIxzLkA~p!2P=C-mQ>#nx{r@6kd+p=8UqzBk98(l<9vt`?G`>Jygt4ha-%$&K$+-kIhyhbJGh{bwK7`~!2VL+H25569f9RPcN#Mj4G4H>p~Pc6IDt-an+LQn&e=`u-sm zq)(ro_136|u1NkKbE=LFRpwNsa!KoncU~AKQwgV#uBdjPye9=Q%-MGWd@IkVmgiHU z5uCVx4by+<^Prdqw^1hksT!TkUG2le12hWXjb*qUM#C3V@kDpQGc2b^4h0VZREs_mSnU`EH;5g4H z8xu|e-##!-0pC6V4)3`(;kLWy4E@=^wnt17dZXUy3Um%7TJ|v_ut>)`Kh3DZJrNK5p*G*tM{Lz` z^p9PfM&+aaT-*pkdvELa_IZBnR~MqaIO{eG#%c69Jo!>z8<}D!2iW-p9be>grWhBh zJOW+EfTUas{|xjogu(U8fr)wjUtak8iJb>sb;_fa>zkauwmBQ-JzI&Mp7av&u&?tL zGygcW>s=MuB&JX!|D^-=Y!@v4ah~@DO+oj@K%XRvI%6jEPly}gKtA_Zysi~_xR>c1 z^3ez29AfDb6TUX`;pZaZw_YB3IOH|3`}#G&M}DDowYW~D8}vi3K@%|L*bu+vo`kT6 zl3tWYKKxA+4ai43Go3>|uuSKW4_@o%K%bO>qyc&0MZO-v_ow&Lktl-`Dw4ZR_|1Ko z@HRJKpT3f6g3|Mj;SPCpT7Ayr8+BcFd)=q{x!X6;mVsRh9W$80I zhCY7%%TLB%xZ7t#u-1h8Dsm6B_k@Z4p7QSr6H9vND)XDds$wyD2S0y7Ut`gaoCUP& zE#Ndb{gmum_?!I+wj<_!#?W3war(Btw=9U;6K{so$La~O{*^;N96h+-f&-wVuK0ho zHfB!7rieO;jqw|27x0;k5z|zE}8l#^6PYj(iF<-ZApkgd_VS4?QvBwB?DR|Ck=xf7sx38E|C3 z5gv#4V7&LS{kK2wh;0r;dj?hko#p+voULSR?!ADpK{LLkuG+R&*fH7cZ0{{@%OBAS z`rhoj3mTu^>#1Wf&OskQ^(GT#T&qN{JFKo!UJBMk?}2Gdc2FTo9(0IUfo`)NB_#(B z)(K_*;$j6Rx|k+WCHe@|c8qm&<8Ys`>jht4e)8PrEO_mVZ)o1ic7P+c)oJfa()(P* zTin@V`tjf8Yc7pMenB+@{~r|9{Nng;qU&Bkll%zIe;vz>6Nw&4kl$}R`NSQbeP__1 zbKZJ)CjDkzuZqu1^eoLL7PqGw()6qd!qcUOBlxr*T?=PMD< zW)kUaPs5zWRWUxQv14QnR*~deZ+vlYa#i@kKj+=7JeGz4rw^=LrQPNZtQ8(mRNC?P2(y%&avpycPT=XB6%4tT=uU~;Cw zk9qVh``945D18#hlx5=ot|Z(8*WnunSgPtB@}OtI(tYZi^U5DW$Ln%Bj)!YH$u)M~Wn)Y4P*N=D?;fJf7VfVhf9MpxRo%mHKnNH| zSHkKZXkvN@P^93oFH@U!V@0Cyj~}`8XWMtTJ#{%`av=R?nK;Eqy3mH+rbGG=(kGDpD{QCClYKqTArDQDuVeqWl(rYN zF&`tA-&>GzwXK|tsyCi5DEdl_LY$~zmz1Er&#)EwACTby z;fEBqgP*4iK^xP>5`Cl2KwI-cn-3k=nH$!+ zmwx!hb1*lou8TN@u)(`EbZm^a0=`H;#V^ibqU&5ill%xCPtdWrZW1RF9Yz2C?xW48 zyxjEX`wHxxt1uZM18n8#y)|;7`l)mB<@FyqdC)&BTRB#-;iJC(qk_;Te|+WE>pxob zG2+47(QooClsyKtISj2ODUTF;wIgGkd?DQj_6py!9jSc?a@9Tu=kObS4GzhJ0&T_f z-U5O@#5-U|J@iuNKZbs~@(ldV|7LqzxW6{d{REn$5k8TL z<~KoDF1c;LP5ptxb(dhl+ksA(o2E!~EJ4nib^g$)-#znb^dZh(8$R;`7TfSUZz1!m zs~(^4i_eo!BpIBw=%-und;7ctAOpDvj`Du6e56_i-)OXBJF5_*)+i#{QxLU4>&(59 z*~^9r-PZfbzUT|UUw)|a55xAW|M%bE3yh%OJQmHZ2t-JoMlfe8j?W4eG#Z%;%5~pGWs`PzL!J z8k^1`A6TYyxIgTQ=^XOC${~MSLpjtF`S7zrm-OB68+GCO6t`9rvO1Q5a05!g=Sobn z2Ufd=hjA)+f`qzy%?FzBOjyhdd#p|aUC;w0Te|f5O4Jd0gH#GE=owNeuw=Wi#d6Pu zvM&xjMk)msFpzAqvIaS#ogmp_^%}6yzL1K;ibTf|#sT;4*ZZB18uncOkK49$_8kqg zwxu3}MY;3!lI+r0M+aGGL8bp1BUhVR8i~k#=k4G!K_m{07BN#5Gvu>5mKBCgSY z?wOMY^j@@0$>SQcoxsKvb6~@U?!Obs<+w&pZuC!Ze_Yo|J+1-&``p#Znk82pH5OxP z*gqbx)pd8JJG1oWKxYjVMXIW+a(P{`CTWU%$HX-2jc^t%k=vZzX-n)10oCn5D-r~uvG3MFe9UJ;O@M33ZX(e86MUgVt z@o00NF;K{9Q;5G-5*^=JQgKwvzve9a-1$eVn^!;`DB19DK3xy~;aloC>ylZ|ajsPH zYrdzrF+Rj|2$ijM$DDrE#c{N8_)Vsmj5~BM=V$T^@Th+-_NB&8{!RBl{Xe2Z*8huW z=XyK>bTLhWF!~7I&UGv|P9%zU-SprI`=ow3uMvDkpQX(+Hm<;&7eb0P@h0Lhy~i#l z2r0zd+^hka(MPBR{D{Xy$k zTqb$1+BBW#HvOzl57PpAknH%bV!3gc??2wW-;tH0UONQ7w!`;g*iOcU9`~)`2N-Pl zzNx)WVjOY$hp}@f&YaP^96Bjudj*)Iz1XgxY8JE$s{HzrZi4>{-Z-e`nVyC!=%&N} z60qN;qE`Ih)O2(>@#w*iqz1%pF=xD-w>XV5xn-1LV zq3VZQ-T=SI{|_<0SD$H1)1nJ!$p!SGt%ySUm+M#x&4JIkv_v zkdJSvd-6WWM;^Xq9)6?E2+|yV#&67TBTvUiKH>~Gr?&&-qb~x!eh&HI8_pr7DQQMK zLO#Yzk_P1A8kH{Offih+(vRQ3V!YzkT0ltC{)!^tpr1&kz=A#_l>!SGNVZrX8S033gJg?k z;yv0Mk}cLJF1jMoafI=Uo7OKs{f7C?f4t;|eVz5#A?$E<4eW5dJ<*emceRN{a2InHE*~)Ra0V}L+9%8@>Ynw;7 zup-gXRJTtaz9h2wA^V<>_ue4RDPrWd4`NK(aA7j!5Xetn8j1Xk8Xt7?HPHy!9<$z? z=ipHd8Mj3d-QK|_As^SN=hS?0E3&J|lh?6b48OJw^>~GW2^A@LyjNfU^Qr+yX4&x8 zgd^1;JPzy5tvBsov*&3;S_X}L?gD3gWxuX{awgT2%B+x^H`%teK_oQPr$z{mbqDkN zvLC{KVdDVMLDmVLy9EDnFMJ~(x+Cv{d|c1GwOhxI=cCm7z_vm*$b)TUxihBPm!rLM z;&Uhi{^|6ACgjULU8No8kPn+;Du;aOAL!+fkFl(&9P*(PrgO;0JGM;cP$$e~n9d;| z{v*zzyvj4=BhG9phkU$W)^rZ}yLp^L{_Y;za@ zucU5pU5gvzqOG|1tSN4cYrr0uiU=NXO>p9L)M~)HN zW9jc~1ixT!k!YhMFh=r52;frb7BsT5e~kB~}% zh5if47Hgt`U+C|UY_Td0Sm+;-N`ZyG6Ui2feMv4$pV3kD@%Y!*5BkBvvFkC17~0pZ zPqwEL`MrT`{O`}mK@k0p=wR8;Rs94|8`RH*uYm*XXAy)S^MEeLVWEGJ!jE~}IFaaR zLR<6k;mMaTnp}@{1h74!#-~_e+MenZ&t`!{N;bT|iLM9le~5w`dB1vn9Ef}KeZ|f3 z5k-6Z&ZpN;{^27Z+=BHj@NKYuIkmhY8Cy(icxb&cJw{#2D|vVf;WZY|?N~+Ym9HQi z_*_@gA?xX-WD_&a99`Z+HQ*h2Yf)Xkrm5`%h9KJhM?oj zhxUDGmt)tWPk>&d4OZ93c@=xSt25rwwSsogNKmVct!NU@5(ogl`|A7045x+zyEj@i zpfAquo9G%P8?~sFdn{>FN8oV%1Q0$%pF2Mt9rt1Du@_9*tK;?1eJ-sqA&XcS@8}TV zest-!_y0(D&_4epbclJ+EkV_8&BG$Hzu4=sE2`$KMDs|Bbzs#Wn*mWqSduI${hC*{iW~mSJ)B zOxhfl-^+8lSCS#wV6_|`0-d3RA`Zyo`3E$sNPfR#rY=u6K20dYHg$XB&t#I%E z#I`hyop9qsqT{Gu>$iVw%#gOT*VT^QqN|AYAGKorM_W3hF91P14b(oJJ&?d?@OoRp zaPHS_*5rY|s;)zipaXh;2YBS+8;4pBWsnCRv;J@!)Z2l)M)u$EKh%4B_1`E5dkPzf z|4~M^H~dCE_=f*wpDf!Q^5vY5%)>Qs_i(+;11-2t&BJfpi)k!wz5>8oFgPJ1xqVDq zxtp+<_x3R&6P6^k6m-cpTna4Nj!S_h`+QrhEhTdlIm-UNSS<9Zvd<5LwUvQ3;2_!J z4KQG#?I77=nRJZDANE+=xaf*R_aSzq5e*@yKBDN;Cd(1yLT#fC` zGbtVcraNi2KHD&h##Go8I<`XHV%YSgA6-TZ{An}4?)fcFKnimAve(XY6v9$}i;M_# z_gP^~*iP?Bzoq@bf3Qi?exi!_E$uOisWwmM<9huZ@=)G%4*6)0rgN&jRxv?04(KM5 zwBPDAzzt%*_4@)B`Yy4dSNb);Mm}`UbPoB@CH)+*kq>OpD*FMQZsdoZ`^R`jzb|Bi zeB1|zlriX#b34dGy@Jm5V~#^&pc6c?m^7JLUjQcxUV{D6)d z=(thCle%Jqr(>u-a!{Ipag#=iI-U-S1B@Tial3{EnjmAOpjdZ!;K;r;D9+u4bFW4Z z_>A&ML2-U%z>xiESPbwO_6NxZ<9?#$HwJoS9~uHW*JDXyNfj za2y>2`~^KoL1{tU1#ujF=M%Se;2{OYLfi#0lV|AQ{+Y|eM@QYH%?^t9utpOw1BRR@F9rjB2~tpu#|?C#uR#imfmmxkv3zA; z6%@lQ-$)eYCoj5k*-LXzy5^%FU>zE*kKXX{ud9Ihk#jY0Y6#)(A7 z5LJKr$(9G)IO_FlvF8wc1R*o?yO$eR#9~u(dqv?TGWk(MQ*(8^u_cZ{f%8%Y!t#@? zKK}%p16e&M7+;)hAx|k=DNoi9j>*V8TN#^ZW_sy{A_bSRj%C6LB4d9X-h=M+k?(h| zc&Fpn`Te_Sdc3VGvoeusZD^WJa;2eM6ZR>Zlu2QZlSYSasZ6RfNwb~wn&CRU7A3|t zM7#FVHx$Kgle6d=$Y8c8!m{MLnB&rrjclhVC&voNhm540V7GA{QcyaW1}=j(i2j~+ zAsB|cd?Z>y<;NcO+#v%7oKlH-V)!81UUSvj77yl)=ct@t`+yC|wY5IF_uOdW(SL7x zr}D-6OKYIJ@M+jSx%VK@86IRKxkKlGk z?_1nBY%d=Fzk3cj`K5=CL!SUY-Gb+Go2`Pnt@3v$HE{5k*JgjdwjX_77#V=({~z|G z8%6b7{^*O79=vnuGp@Cc+P;EbZ7A2$luguNk8SkzaJn9L7vDkJ5BdPvAIQF%Z8rBG zdcS~iK^Pe_J)j9Gd>eA(M56HNx7_9E32&XzvL|>B-9{TqG-zB_-iYGocZ)tgk?qP* zKd=_qbl`hq@KWt#ZDvjV`nWzh6tQ>iKNt0@Jgceg5b%)g5Z;D8gZ59#bggP= z)b{r>ce91`w6FKEb;Rb4%-|%N@YU1(U&U9xwn@+T+k59FV#gXwu zL!tSB*_v4L+pg8bu?-XE4q~xJ`o_OBTA+1w2gT_PQes=)YG+$s-?gLuDu%R0;ud5t)V^aIy4K4t_M(?*rGg>_p9?kNnXtI7 z{&P!(u_DpYMBn{q?RWH$wbifq`eDXBx2ntg0jE2Y?Y*t3%H%%#cCgFbV2#mFHS8zJ6yF5DWtR*!Ft}g#X5X>3(LUq{;L6Zi$iRlCzBsmC zveOmquimlULE6~b#bsq^?K>~l7suA4NpBChZ}7N*yS*|-@#o1m$?GJogHJV>4WX|? zZ=<{K5*@H-@6jR0Y|;k8CLyVI5qZ)ss^c=`!{o5p32(bV57R>bh!oy-xp5-VafCN^ z;kUM*z2f^V&|A!flRvNQpaEurK#_U(c-=4cu%T5m84zsI{Ar3>Xn>b z-aX@Tc-NFZRTMdzXb|hSMO_Qe(}3ra|E4}Cgd9BSlFzyd(t`CNMl3f@B#Lp>CF5T2 zH{-6KJr3OuIp=fld$80(y|b>$n>y5}inBuh-Td zcHs11y^b}gSj#5n4*Z9#<@Kn(hu#Y&9g5u~Hu$7<(DJVvHJ!;{$P+pJ9?|V~qcw?+b9Z!0@ z=ZOB>UwP<-b%@R5EE#;FULptWy?$VIs@J}>6?3;f8t#=cO4Ji zfUn@5rcU>6At<`BpW&EbC`Gz?(*G#a_A0w{3DBb31GrcPRKX=DHCaakMMH~Zk$MT459sg z@*YilzqH^{=;==Mn|SR%f9CK#7GUDcgYU*UrM@_C27lpeCs$>!Ut4tnbRGQi^%v9$ zGrHD;zs7gJ_oX?r3B;T4{dnPF{d@2KDdx=ZEHCVDZe*m}juLO);%C#<7)^Qa7S>^X zUa34+7VJGO<-J?HV-|WlEAQRnKj&87yTzYB`g|MWJ&5xl1-19UDDT~3p0_K{l@*@n zD(~I0;XK!-x_8T1vI}qgboYHO9p3R@%$12Xf$%}ib7gW=Wi?6W=l|<-MCH9egsFBu zg2#MyKDy`HBGC#$y#1b!4{dnioJc-i;hH0pvJE^rhV^A$b1`y0X%=0BxDwAR6<%kG zc}2O-lw(}x=e`kd!F5PM>0lbT4B``5Zz1O~gJ8JJ^Lo-#4*ce#wjb{zo&i8VtL+CO zM{wo`l<9iEwt+Z)Uw=j!akkk0?__p7@VpoDdb{CsJCf1POp{-jtsu|Uxu?Fg{|Dkc z^A6na(9YzapGRK+-4yW%|BzkJVUWkKyL`RS~G;F%G?|M81wiri#oo@K&IY1ZFME{5sJ|6AHi9|;b-m4>a zY)rTBxIg%dek4FU$+sfqp)b_chTnbdnXl2rpO)I|zj{jl?>~&WYK&(EukGJ!-qVv_ z(#bCnA`nV`eAnLv(n5+0JwIGHC7aeW@+MjrvhyVBX)_n2V;yF|2{MQ2j}wW)Moqqb z_dTYM`0cQ~jiOcyxE8)PxZ#P9omX_E;{pO_V355uEzUn65WYpI=d>?A@ATv zpDzF3P$9IR--^O41Fk3g_s9k-ShqM2zr*werhD^!aTk%q9zz3ucHR-o`@c8>b|t@# zVv=Ajwp?3YcZ2cq!j ztJ}CY-&fomAA&D$F5R>3tt(=`x@-FTr-kk_tE<2m-gC=o_BMQZk%$3b{syWXeaEwI z^7$hCr?z=NyNh$M7tk9VXhPC{;2iSgw|WlOARl=+pvOVmgf8b7sWjI`00}HSC&6^s z>5K^nbwIM=u?YwDMGB9@@1=eGYqJK<`cI+`<8H_ev5n4Daqp$QmT*Adb#zFb;ClP_ z15%Dscko-4DdYfMLh_sEaE!RvPY<*(9ikY0gxkN)jS-2CC8SS&{=h*euRirj@Gciq zwe?x6CsF%blFIU1NYN$bHV3ki?ass~w8LFQ11RkOfVbdfA)beAN1%skp__;lyl>Il zq#K8Qo@>UP@Z}?qTzuzAvs%_WK2L~u^a-aY-4k!`N+#Mv@%;}}H}L%lQAg%`fAPOr z*U>H{-_a%@F33PWn~MLDFYTE;r{=3|NnR(!UWDC4J-80^k4WL=Wx`>a?d+8a2lYj= zX&Y`F)}Qm&?RCIM?^cXN-x=O#uBEoyLv7dnvT_^R9-+EGe;z}n{s;O`)aOxA7x@uh zkJd>D@y$44^hn2nO$(z(z+pM%2#dDRzf{gO%HsJL+KfFG!#|VaF^YdriIZoRO{Ck& zNoy8+f>ifpW0ap--kWHTXS*8G^s8Z6TYK>)O)g7id!#Y->!)!y!5`Y+a|IbNw1btxkQMH~AU`iV3R{T-P|_|2^&NDYm>vQW zDY);T;#R3h)^1l5s`NI^t@w-toJI>PO^ zxV{!P1$v_QwZ-ZW==~3rI+w!fkB))2qhx{OGiwP8c=(omI`?h%eY(l-Q`Zpr^_6POh-nc7(MRw;+Z!Vi9Y;tH zTzSBdKMr~OW$@71A27r`O%3_mxfMeVjY)c^FKw|u+1UusPmlGu%BMsVc*0I{>3#07 zu_Ms+8R*KT@MB1403eZs9A2t>A^zW0wNIcwC`Jy`+9_@nUz%=BWoTVRV{$%?-{g&K zKXL5k@xPzAoLxBz$j-t$a-V$JA(2$ zY?}Z*Obh5i3g0H&IFaZmLi_me?{{NyCm7Gtr?$@?n`5Iw6Q>~B54)Ba~1brj?_h<N4!``o=tC=4FM2;0YqoVvCMCMN@j`c6m|GVj#_(%$ z$l;?uBph=d+v2xergO+cc^qmvltCWWW#Afl zZ~Vq}IN+;?_4`pruAcxBSV8Tn9+NTQFwOpUIS3ATfaGW2gW&M`mSS)s(S813duIY? zS5f8veh48DP(TMn4R-bf0!epgV<#jX(g|5R3PkYH>3&ICJKdqX69VHlqW)DxMI8|k z9oZCzMbQC9{mbAo;(riD=l{nI7Zi2=iXfo4%;=nNoqPJ-SJdl%x9%0=kn`!f_uW%f zzdBWQ>eQ*aON$)8y}fhog5h!J;;ZR*QAXD0F&=aSOZi13`!kKMp=q-o8m++fBSFaaAFT0a)Vs$gWjGDui@#B zM(hLW2s*YEi*e-J0MfwYoVE+dl;&|=gsq^yKXP@YJScvTAcPZRD?&J0_iTL`!iljJ zKMu5y&KcR{sm0Mfl>J}ynclmecjH~y9Bj1sCJ{Pc`|+zR_VjA08+EzH)p6`ScaoXD zr}Ytj5&DQcDvJO*ir2?loTd^s=Hh8b&75=UZ-)!L zeGuySn5&<)koq&|36w=g!Fk-nVyqY|3)T~s$w{HQ6=PdMI5D=R7N@B+L*zPP+*_C5 zcgx%_uwKb?Kd9!u+{)y}T;g(MX|reQeYx>R+;qk--tvn}^Y(*(Urv@TBRA%<^uwj1 z8`$1=Io%!GR-@Nut5JLGvyMOYKlojQ%| z1J9bdeV453#ulE9cF)!8YgdVLn5F$cA!TE?KP90N|NH4`f8@H&$z+H4_OHd!@2z)z zbD;E%bDFN>eK+pUOZ%tp^R)F>&ab{KBDXL{HZSY6E%$P2^2p=1O)nK(+Lp7mZCY31 zqRVQ&Re!lo>o0QxJSc0~n#&za{12)fkH780UDL06sKGjq^&Nv?o!3Y?)S2_sU1u%R z70ki;MxU5>;_w@0jx)%5XuG1TX~5~>tGHbXc%9_s45yO-m)@dH(17nNjv7U)v!;iciyVKC?jOSqeZjnsr(8pZnvFAzbjLnnuyREy6njeuzWpUtg zh}VHyoTk!DL0kC5dlo(C3;Q3y{CKEb>;ATES*73CSk9{y{R2If4!bKn#=9T$*wN<2 zikgk>EYGab2mjNbqoe(&eE<9I-Gj|5_Z?jn_YMYty+8PM^xy z8$~zvjJHMleOAA3{P8wT`sAEP+t(ekboL4OP|13CWop4CE8qTs!EN%wW$$ohko&D2 zYwc5nBQJBxzo1}T%71WgZ|^Zjyn+5UNY-R8k^w@WPILohYqSH67)+RB$l zWsw3LWwUc>tXdph|NQ+WFDSpf`~O~-@?G;Z`}XY(e%mfB*VLrVXBOP%=#iO|vBtbF z5C3<4hLb00_KY?yjaQ4K{_B-bzNhn%$KH1q-%j`&DWYb7K|cO5x^}m3TEB92XIcKM z`%{L+hVlj`rp{CKHfxr84@-T~;qz1dP{h0hra$+j=cOX%qjY;y53NJ~z6;?rIv=HF z3gM`|7<)ddkE454pI&;w;uCjG9-sQ(fYk?m%t|H>OB>ITBrD9ZbR+$Y**!9lu!~=D z14`{;+TPL9L}}aTb0S=$O7Q&tH+~w!(&hC>kX7ZBf*obEndy3ma2oCZ`Z(&te{1G> zEnhrm%}Y}M8?bJ_dH)(PlMnMLX%G7D({xDAced%bKWE<|tICP2P<-EoaANwd7DwN~ zIPrfs@A%=)n;vA|e6C0-_IoUUrS^a0R(m?=wv074(>CFm8)b&{KSuMw+{E7ba7G?D1iS z=J;!fknho`9Zc(b2&V`i<_OWDjw}Ck*sI4a`zUka1l6gkh4l0(;L41tBk8$#k1rz) zoXo3@>Os2wYJDR8{|vAC%H6Y8UGzNnjn@YIug0YrYradDzsH}+*MGi0!}yy%<;s(r z&se>JJ*}tqU)u)xIBE6MGsyrP+2E4=S^DppxTnnfR6UhLCr-TU?w)#k_R_|k@>Q`) ze|N?9mq(g-Py5#XuX=wEafY<-3CllO{^v(GT*jWgK10?yyuGiZTfTPQ(!I57TQ3=ZN|76*x%+-`7vCrzrzFZs&9y zYc=@rvaYK`_0hTrn4`wmWV|tgVAwxZ~KAiSDpFbC3hZKT_=vb+Y;o50<6+Ky7ic_qEe~mbZV9x!uW|zkfnFjo323pKEcNN>fC%6&uDa7`o)%10H_G zJND+8Pxm}R*5`rUBxP@qX6xID$sTe`Y7d$5ZgUI2h|>CwzW+bkJVhKBc218=cm(cA zk;adMj}0J=9|s?MO+MywC6yCC-y{rSk{0y{#ldH-6pDji4-@`@b@IXI8%ZHd_&kFY zii3|{gyP`yoQ)sHID$`G5tzpteICcxS@h!wryCB)VNot+K(tl8xzfi9;UGJd7YE&d z^5W=y(QG))f%ZW!p)B%*aL{2W3(n+#JT^A6;LHf%kRQs6!#IMn;LHrj!?@SFgE$-9s1d z`>CSV@@rRi&QCAq(XEDT(r|Y-(!EiP5ccCzXN+{Mrg~MZe?u7*VdwN*X7d~E3x(!F z(!jSgT!ZK1z_&CuH>T5IyWwLK)NX1$xh5Tf`JXs&LUSP)@T<7(rSx+-F@12cYkvWC zqnRD(uOEENH`U9>^|U(q;7_j;2Y-fyQ2)WF zJmO|aKpxX|_(w{h&5TEyG>?2-A0>fwCrU63;^5DgK%8G!_(vykZArYf5&UD4I6oi! zIZ0fLoYUpOpPR&`^D&;`w@N@RD~J5X^V7peE~`KJxSp5r(&>qV&-W-pb%np6P8|G& zb>iSJk^sJ69{gh^P~PzplyvODKTbkO7WgMf2w{RloS%>OgKuNO+K>J=o-ZH#lO=?( z;GZG^8BDiMkzZgC^6U*T2Yz2dmEymP0nQISEar9U1TnWX%<_~Q(n zj@cvlaX=Trg0jf;PymPeL3wfTyPzyMKMBZ#j|OGI`Huh&{v4DS2j36Mi-VsCWx@G* zpkDZtP+lDTPbdq{F9Y)6t3r8k@N1zgIFAJ6!3T!&;@~esd2#Tqp}aUpC`=}tM+5DH z&kkjgCxp}NP_p4X7LaFB1kMuyoXHV5j|XsAV?bHjCxkOqVKU)_>NTw(9M(BdmU@Nc zVNC?(#bNyf<;7vm1?9nE4m{GKWXJJ!8Z6dzP!^e<6kYsXKp$BLLRqjvIIJ0=EI5A% z$iw;)%8SEV6v~40$ACO@6($qTp8_~75jcCX@Eak0mV`Ahl%-z#1aMd{LwRvnTSHlJ z#s%bI9S-HiVa*O@!Pz$;59@m<3(oie4toJm7M%S9IP4ohS#TxtPvw3GQ`?FdL zhIVWk8Xj!lwk;7WQ~k!vf|)&q{oTTO_k7;ee;x#xRbH!c{4;bRoS40%TAZd5zRt3) z6+0hz*!}>{*{wAe?NzCV*0rj zr>TT*JaxZ&doK9?!XMAw@S10_2N88oaY?KGt9j|(*l(lmB|Zgxytnf$ihCY`Jy3t| zn6`t@nKE@xcu9%h@X<|(eNWP)^J7xsvj<69+g~OxJna|7;@YrKg%B2e@J$9QACneJ z55Fo;{4;K}_p<_ioJ|>7#%Bme+d=E!=pMHAy;RVV+C^>S{5bR(l%-xFdFW>-FAll^ z<;5`*lNX2lP!^ope%J3wO}k?L>>pGP-^qIlw3V|b_AR&Sx5j#Rwd<5WT6z9^5%#V7 z>z$ISjj-`%dW%Y@d0Z2h9;;ke$6VuMC?wByRVp~+`*S0e(==)_pS?R zOY}v3tfw|+`o9NcY0qgQJAK6Wff{+wfMkEp_Cy|)1$m&xeIvhbYH{=%B}bk6&3XIY z*m3vG5A+{RJJr$6W4G^+Pi=1M>V75vq-bv0Ns^^qTSWnB*OQzgs-Eh2Z|pf4bTvI6 z(C$DHs;20}QpB!tMoJ@_+Exulz z7{F;{ZfOLE_J^|6OLa{1$+5&fckB3FOULc~o11xe6n~*c&s)OpKaYI$TheDKf6wmG|G{9#NG&dLj)rLOE<)zz;Vw zlckMozwa4u<7#o#rrdtb9c#Y*`~Z`+3Z3=9kcJ={b_Pdh;i7q_=ZAALYZhXDPDIr{o2Lc|Rl*{Lq?^eDLXa zKOcDT?HP!%)`+h8l4shf2hVf(n6wRip3$)M@a&r3_BS6~aMwD9gAC;m}V|UYr=;!Iy`zfo?!q<+(4=*6OQf!}@9fr;)X(?-zw|s1uZ> zZaxlsTZ|VdE6%-AH?>8Y-*nP!Ll!*0?-)0YJRjw^QwYcGLcBaprDl=mu)}Y7>18+m z+j*>$uni6P1bfy@(oX0FW6`GbEd8)&&D7uBx1*;rr@OvC9a?+E*gb#Egdcp!veFrM zF5T-U{2ThMM(3aUeUz$WBWbhr^B&(u+spSM_V_m0^eANi_xLv5`p?T{OwvAke4Ekj zDL&FO$+zLz&6|I4`NYk84PA_Hga0;~oew%S8SVX^z2H52!G9^ghG($fbJD+_wJB=R7!$@1BjNBO@R2%%~&J#P6g| zkv1CF*EzWEpha7kpFiPz*7|PzW&PHbyt6M0j**x4M_X_B&zrqZ7Nhvqceq8V?xoI> z>mv42sh@89=zF2~pX`hIzCApG?V+-#kj@7m8AJKt+a9W)FJ=!FIcPujg7}Rb={-*P z_yxqJ%OeeZ_G;A6*88udN%P3ZHG46nYnG6%YrQ>G@}VE>ACQmtrqcP~vxgOGBlx`c z6^et;yIi3-`1nMjcA$LTxeDcj&wEs%IQYC9<;T&F@TW_Fc<;$igB0oa+KOG4D!;aAMw-zCIvN%)8Pb4dBGQEB%iFoS1i|LpU+-O5fzkgYLw^S<;g0UZ1eD2pzBEP#WL0%gJZcmM}K2FijH>a%8tk`3pR0eSFype*u)a3(8E zZk#C*IJXDth3^GrsaFUGe+|luWBzRxoZ5bGDk00eww^rUW7}T$4W2p1&dPc<_5aA` zmCIdyeFNR);lZxn;h_%qzbCreTNjo)%i9MBws&pm8m^QF`pew|+b<}04Gr~f>9_yT zShtRqUBh$IsQl~NrXC55t%`)F`Pt;U@~A9MAUQPjTuKnD7N@C%ZeM);Q7^w|%fv5# z_NSMf!Mq){PmtQ2$)X3>it~@Z`C+#R$o{-C+0>`keE@#rn-lyvc>C0egOC3l$_F1A z{W!{kPdQHf4ENxD--mX%UO@y6YN(Ih|3&w)LO93{W$Bv`4($Zx!C^j)S*swA>WLFU z4%$XB>y=uZrqUWgdtmlUH{JE|%kE>p`b4>Q~XOc zwRW&~Tctc$AxC-pKwoe71q!#YS_!kCr*E3uuAxPQZBK2$v)-!r-W15LEyPm3M3e!2 zc$rfQ9lP4EjlFAty5}9c$lm z%A)O=h#@+T90nVQq3@vFvg^pcMen%u(t6KZ@9M8nV*dU0h*pd?-u>sp_S}>C>%Av4 zMRcuy(ah)Hy68Dm_WstVA7H%_>kq`5nI8upeA_Q#|H)5-oq}JrgX#~Fhy9^Ydb`JpK2Yr8o{<_`u zl@#PC-ggP%AUiag4f16Q;n4n2UYr=;#g_*kD8_FAN5_S$iX619WA<7@IOrghrHw*3 zn%Z4oWbG_S`&9_d+?lI?>9mT$b%@m?@QT6>|_-g-^XX$jh z(K!wrFhg@3{3>qz97p}v*rv2#n%z}-v$f^g08Y#tw=RG~`#@Rxwic(UG)3~iVCstU zu?OFF5PNZn4;b@}rM^o4mf@|*He42&J|YcE-`(IESoJNf2h@=@UYf@>$+ZnsU%00K zRbS%!A9++30do}ZwspD< zscyQhiLwjT>w9Z&Pi4^cGHsY;JY6j5SwnGdWKVmvKBgZD>3+mUIQ5ZpR=Ffg zLh*g5^)ei_VRIgR|GXcbef;gTeY_2u-(BW2aXS?|OWht5r<`&1xO2|OwqaS@oHayD zn>kNM-77BV*ftCO^~V!DLJ|6lJSvO)a1^h%s|R+NuSKJ1f@8q{-5@ACgSy`A1x4ZClk3wM(!YwN;Eef^U!DQ3iprK)l%_ zc=QWtj7J*!n>gcfT}0ne-)n&#q4>VLZUloLilg<&Hb#9M?5fs18_xBT&&R^Yh_OE( zmV8yxy3q$v7X7NlX)3Wi{Q2Paao=3O_ND`O9qj&v$hNNDeg`ZE_QdA&bPad4%-P&E zIM_SX*E^?eL+6~K!R|Rdn}+4{JIT*7zmMrg>Ccuxd+m^5e&l-hJFLUh1D#&y(p2@& z*IUy|`qYnuN11*c*zo5`fM|O^4e_SqejND;t0X{-#ZVgfD@h>4yzHl;4EXdFakj6{ zcmf~3<;TYO`AGxc($Ft{8rlaw*pz43Tw6Z;dp{p(;j^X;#lc5!LvipKAE7w-JflNg zvjqAKnJ5o_=$!!S37>oGq-S3%gbknP5kqlByc@tX^=Wx|MlkeF0P?~=E=kXRuP+m6 z;4hQ_h29Y$4SY)zdRKsUgU?*=mq8r-dhbNoI|8A6yem+zf14$4k_0~=^1?q&0yJ5I zp9Y!WPf6mY%h}qL{O~RR)Fch@=&|W8d`mM;e*0yR7CzXNXZpqU3<-XE(!ie?h}$>e zpDJf)mIOaPY2cqM0XkBGpN2BvA5|v~{_Hw&@QFpC-XDNYC|h38D1x{d#h}qE34F%sFX%u1~L% z9{wsXJ=d%2q=)b83D;}uq=&ywg2_Xh*)_lM7nyhVa=+vKo^z7?daC_@*#`(St1qRi zGXqsT`Ui@^JJ;p3gW}QmP!V{vAvO|<#p}}S$x&s*zk*^gH)+=7sCfG&S4H9Np98Nu zAm4<7@ea&^R|&}X>>PNT19;CV81JBh@eVE+5C0d6(Z5jpG47xkye*nFIqLYpzlLJ) zwrbYosCf9~P*HgJxlmDftb?JV@a&zUqVQN_Krwi|nl(9Uf3O~bio#><0u_bFItMBO zkFmkp2#UoE=`?F9C@^cvEuV4Fu$y zS}@-99C+si>=%hGND?sJ^Vjp(5~@FK0Wnc)VfBAL{3$bKr)? z@i95@LcZXf9C#sLpFIgEreDr=Iqjf!t0lRN!3(Xw*rR}A@XmEP?V$46o?i@JXl`f! z11bv7_Dy2&Lh~H^BTx)pXdEwAxWe$*dx46QZ>ho+hS#10FJxa%%YhfNFC97XLiUAy zBPganLiS~q!bRboo8;A#j$ihjpcwgT?Th|jr2}7l>$d&_J~fNy$Hxh-+{gF+D~dkE zSISR(F<@uP&7P2YM=L%QBjMnlJXrebFHOIRjLL z`z>SkMe?}>9xDF1C>Qf5XVb4DZP3AjYI+hQ8&WCh`z+=M<-^kcy7RVc2A}t=~>w#+?KJb=@K3k^0*ki68U#%^v z@m1M0P~KYU+g=&$IK6i+ZYO%EM zzWnBA@BEkf-#Gj)+IOjem(_l(mp)_2ao*kfPGv$aC|}>zV(D6J((`XWyX%_flXzdx z*6}S%PhB$5-!Gr{8PJ!sq-4fK%v!8h^3k@Ot!;Ha&h7`351T_b5s*o3kYX7RzOAio zeu|adL8b7_<`sqKR8H{o<7t1+Z`&|q$D2R@#d`f|!(>l?=HGi!oi+_oydwLP_3gpK zcTBwOyR#prKhb}g7mw{+cRF9{O5UK1ADe3hkFm-5uWf9q%uaAQooGE<0v1#VRKKz$0iMYOT+U?ej4fz->*MqSw5br^YeiX-_r1$Tqq5EOT)8o zej3V$pDrIB*F1}6eFBeb+Q!-k9@t#-n>mEKMEZ*(V{DnjvV&qOer6xfVS=~Z;M_Tv zpW!e=c-mHRGIj*yW9&jPw#vt&U(gvS7H@@SPmbD#*as*EGlYjtfnxAhYS!ea@?n3V zqVTX)Pz>Jbnl(A9eBeMacxyCka#TEQB2*L}_7jT1tM%V>9Aj&tSiE(bJvnNfvC&Wr zW(W_v4#nWD*R07=_GIJ1B=}6u>Z<@!Cb!3rK#>4Rp)#4)tH+t4gQ7iV}JwC z(lAf@Y2Xo%&yOQN{5A=Y;icsuFMQ@Be%o{9=1;=6{LC?-GT>Vp<_$j$xbV%7#rH=B zD+7M31bFn1pC9?)&y@g;=GRWqB<_7}9|t+G%h*ysjxyjMBLTuThSI>FO#&h8T__Fw z=_C-shWTlb1O9UZamWGR%D~3>`AGwRmIP=tKiATP{9NRK&$#x>APzp`G86|Nzcv&H zAO9ANw63A=@X;yq(f{z!2kyI&-gE*zG@atz1iu{G0KTQ+T?0Q2*znWXl)-hg1V24- z@Fz(K$qs+AgtY8jmy&?&ZFHncEQ?;YwL4s zZ?5On!GJ$sLRvJjV(`$rDye+TlTcB3%&AaOc+A64 z3?5^uN?KoVpcp*HVU-jw&l=6gd#->p-$SwTVHc{TG9HvLVldUGG(^S2mw<}G!_GiO z;L(NzC>HNn&7K^!&iFP^3}y%q{|G7y?@)y+1dsN^&w^s*3+W;L85D!*j}>$VpAL$_ z3)u$STaCdB*;c)u5GUX9TD9b;I%w;l82R|-NtF~Y&-=9@Jp5WHM!u6ZYjRZi@QI-q zywKd`*cp)2zZx0oPH(TMN@Iv;=*4;7k zh5Fb0;TXJ-y=u!*-_ZE5GGgSb9Uo04Y}J1r^5CZ9KJc20-gf`A!gR zf+v}`YxZf|TDDY%jn|u2zPyc=`GCo@Z`xB<8E8Op}o}!EBNQX-k z)>qop^wHNl;^5i2s(-rA3;#3;P)KiyhmRaSHax--2@q@2P#XB`=|HSA{WO#TpEaW& z2R{785+K%rej4(_N2mDREJ3OI+=1n1o#yAK4EUCY{_)d*3!ilvarh)93GDNbAO0y4 z;IYo~^OFX?_Ir4LmNHmV;nRll!#95m-#nBCzRfwTRYGat+nmArBa{Zd%~OX4(jY5* z)(3um;^5=whvMMlv-@$h5&RP*K#Y}88u;c%;9L7?C?7s^Pbdz4Xy2B6@bO>yO<$@# z)v*a59Rt(${Lq8R5=d{l&@8`9mnO+?Uk2(4-_npjlm@<~nG#5YZ1AT_u<|)`Jxzj- zNgVv?b>iU9s1pYtKN5_Rgmk;W$0wvbYZtCbM}S8@YyiHVFBe$wXG^g3@VH)*;(@{V z!5<4@z-LZKV{m;+iU$UIjh_<2fR9g<#^9RqVmvUoW~~>(fR7Jl>8T6Xj7#Hz!8QJ7 z2m?O8yrl<&YsSCvz+fC4Cn1CZpY@}q2ZL+Im+`>h`a}sK4ETPTT%TMgJ^WK77(Qik zy;y>h>H^oNN(hw+e~ARcKt`^YN(iNg-!37Yp6g|G(!)Q^OV9Q4I_cqeq|#F-yXJQh z`|j8@Y*v+W`E%Xf0)(BblH$>R5Oyr;_aI- zV(^-)VDd}x#utdkT#au7#mYBHvnNND5nl+3!3^Pn1I6G?)~v}<<-^y4io(M$gNnk# zmxE&PrfAmWsP)C~gNndIXYd1|SiGs4Jvpk3;6gE&Av}Ccs3<)AQK%?9{8OkXJbYTH z2t4`%KNyO|o2J>5qxLa#3>1SI!n66R2t4X+^HnTfNDpn!iopzxWt+2N@Itn*nGO+( z!NbR{lJ>FL@1pQb<`_JD`YNe>)}}Fdv#Vh8OYyAFWAH-qnV!esh5QfJR8S0_>6#*F zeOZS=F?cp!6+!V#hhp$%D^PM&JmbaSH3#rmzd+7F!hFPk1JKREeK zuRZu$+EVV1EZDHCUtX22-gKjVV#>po(wAyewJ&u&o4qf=p)GBFO*{B~N*Z{!M?ii2 zG+@B5_Pg#kk;n2Ar~RgK!lzu-6HU+ceiB0X@T(ZA2YK|$<|Kg?%CA=;Jn8|(_Os^Z zsPfUqP*Hf+r$ynJ9_7btDzO&pJ9p>o4^5cz6~5s{TUN(WzVCU4#*nr}_Ax}Cpx4Of z>#dCyJ6H8r%YhG1$G{$)&agMSRhliaf&6k*Vs8D~#?BLea?VjT-yEr#OH%eQ6IXyMIQD+r%BMgD4maW-z=XkG238srr8iXBdb#NnF8BS#Fm9@ zQN8&XOq-AWe8xBI(ELn(`1m1ye&XP>KhAI82Eu3WmpJn;sT=#%J{GdT=YBmz+xuz2 zfp7Bq~A!UQD_Hi5@ZC)j0a?x4@bS=xNPlQVKGR_* zRMN+cGbl#J5MG{pVIe%mGgOp(;6O2WcK<>VRA=(s2Mggb7NMf#vvD1RXZKfBBCW5D z>!R>%T*u(mwqH|est9`X_NMX`XRTeu-Unky=6Cz(b<9NGDIctL9v=3Vu~P3FwL`;w z|>a{kCUURG(!OQKKYfe==;0h z_tT&BcLDvmq@_c;RsP&}QQLPqu^W}~AxX_WxSzOOPw(CrV=rspBCpEo1eQZw|AsKK z_HQjlQ)#kDGw;q@=DqEWv$}rvALo1r-Nhd-m$&rqD0lDL)iSSKc3+$>4-aF)OK_7>?ri8#OOf}yfJe%{rWbfV;E{t1lH%C6x#X(abCwQZ7?HD1328>d>Qu&<5p zMf-DB-$T=JUG?|$JEqo8S>;h#1kh1K->?tXtrn-LG)?f{xA@X2pS*6v3u)`bHjdra ztqY~Cw+{|%@7mHOUwj+rFK-*zSt)l74fSs6k8AfWA`9*A7TwAI@n5ptkw;~bACBVN zy%tCJ=4iEPBZ&}vYwPmTiNin!1{ZU#;H)50e z2D-cY=JfV=_wDGZ%-OP8G7Kdr6nUj68#=h!Dcx>hlNylsbQ>T^do%W_1Jr1}S9uuN z$EVn&24vB8b47D-@4E~yKJ*1g|LMNB+;P#|YZ=3%_L*$Muie?%QcfTmm4A8CZyl+A z(>560{-kY9a84Mb&XlWVCIU;Hxi8iE`_1Jgr+sbW>mMJOfd683p5HUjKP=wO(9qoB zfu-%sI##!rMO{U8Po0mIZfRfJy>?}{18cPIZ6X6UXhEv(>Pv^~j=d!*?L!||*T1@6 zHohOn8Vufe2@p7b8hC_pfjDsCgF_ly<8xi@hsN$Vphx7feF?5v-}v%SCVcw9(!;ZB zelw59^gZo9-?g~|aX2w!FN8rophk5dgrRMm4}<=K^2kB|LU}Mu=kj2nBTya;^ahH< zXeu2odH>M$`3+01d-&zI{`$rV>`jVosQo7F{0{k?R_f#Gaj#`{E-1@iFVbdS1G}jg zzlS!v41mP9nB{(l?FwVb?23(V&hV$Yd^$c=w{>rn-!qdq(sJ$FBlu=d{Bdvggna2Z zbdF%y=#P(0JbX(-pZaN#9sU#vRwwdNmgNiC9n!$JH0X_w4IX@KHF2!p%|;Oi|Jf4! zII!UxHa5q{CJlT`WAk~sZK)glbloVo-u^0a%ropQ`Q;G@KeW$^EbvVh)}EpK@VSpb z9P7e#Tfk=z#g79UzF{+-d~DLdw=~?p^wZE5@Y8KUKIE``_}P9w(!jSgJhSPip>5#v z>?LuNB&6#GAD_XG0~@|!^ZbmDO&a)?ra6#?y21DBh8&h}viwF)7-i+qO9HR%Y(L(Xd6T>JD}LB+NW@MDB>?bAEV5T4d6 z&i?Kgk&Pc(XW9_LZe+bD3!d)KfB@y%t9Nw{;h~dIjEv`N*5s)2jZdzM!o!|JF?hQ) zYjRZimp z!MjMaCP&q2d<7^L@6DP$IclBpF`yXC5FUOB6odB`&6*rlK71IcC_MZfCd#ndik7nC#bkpAA>9GDe0T zDT8u3+n&YV?ss_40)N`}EJ#;fV`zHTKJW-`# z`#H~8rTwauUvENq)B}p?-{qP$IjVfL5fp=`dZPJloLHa6;Dzc-|3UfjlKbh$O`Ov7 z$|GB`b?A$XyTqO?WL^>bX7`fg{iqWKmpuy3yQ6(mxtwrv$giihc>26t{{>GRwbvCN zZhvg>-Y1v?tL+?V*z{33Cv=Q1ERvk)y1pZa`0Qm;hNVy6cT3kD zdDy3{^77kT`m{><^*Dq_y`fm0)7%{M+uLKSU?X^W?Co&@JoE~RsqgWcH92a1^Vn}4 zs|Kogrt>lKh58r$hKj<=v$tO>pFZ!faPMCqI(+}(Z(zP+k5KGr=Wt8gj{bo``RCM? zp7OS??H#?H!wYu0e>ewcqpx#jKY~?S> zG@8sjzuwiiWnfd+P=)6xzax2=KYrx$>RhGcys^2;Y_;A0#rA?nFdk`q9@o|RqM_%9 zU0a3Z|AAmtsquFAv3^(ukza~qHaSb1K3IdJ>)uyCc=oHWUh}Uv@N6Zz>&Diia=E86 z+|}FHI=8%buy$w%-ixZZq$f|k@j;g1u1$TFBp?0yIcZ$l`13S! zvd2T;SfB6<9oPD4Uvr)Alk|Qy0)8gVCSkwKXU7PzjV=khu81R&At6S?eduLw)OU;be6tcCgswX z>sOs5BMwEgnq=s3=XvpOIT z{RCyH*O~wheG6s5SzCjnW9c83fApAVtvPwe)jxaLDs)5rPR}kb=&ST^8Q#iha)o9r z_XH`IdM|P1>sV6x!+s8WRPc#P+gM8TNP~#lOpW_RzRjY(KNp-THSQPrSSPD6 z2~^{Lk&kmq04HW_gm7ZU#;G;(=zB|hpMBBn759DU-+5mQ{Rrw}Yvnxgy1UKe&Z7U5 zrA+#GiYr_7Q0+|PdWh~2fY2($>k0CxECS{zUQcRql0DG-A3W>O4}E5QjlbvnJPVRH z>(+NmtEv=P+Vlvi18w?Z*BIKSv`-daH|^_XEnCZV1#&3iH*Z|gHt+u1ueg(XBTIQ> zPoKOmWlJ&*D#?@jb=> z80C%q=Wko9e)wouACa`|yWJqc]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS-DBTest/src/db_test.cc +db_test.h +/data1/farrisli/3TS-DBTest/src/db_test.h +iomanip +- +cstdlib +- +libconfig.h++ +- + +/data1/farrisli/3TS-DBTest/src/db_test.h +vector +- +libconfig.h++ +- +iostream +- + +include/libconfig.h++ +stdio.h +- +exception +- +string +- + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make new file mode 100644 index 00000000..fa470236 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest + +# Include any dependencies generated for this target. +include CMakeFiles/dbtest_core_static.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/dbtest_core_static.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/dbtest_core_static.dir/flags.make + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: CMakeFiles/dbtest_core_static.dir/flags.make +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires: + +.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build +.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o + + +# Object files for target dbtest_core_static +dbtest_core_static_OBJECTS = \ +"CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" + +# External object files for target dbtest_core_static +dbtest_core_static_EXTERNAL_OBJECTS = + +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/build.make +libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libdbtest_core_static.a" + $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest_core_static.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/dbtest_core_static.dir/build: libdbtest_core_static.a + +.PHONY : CMakeFiles/dbtest_core_static.dir/build + +CMakeFiles/dbtest_core_static.dir/requires: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires + +.PHONY : CMakeFiles/dbtest_core_static.dir/requires + +CMakeFiles/dbtest_core_static.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake +.PHONY : CMakeFiles/dbtest_core_static.dir/clean + +CMakeFiles/dbtest_core_static.dir/depend: + cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/dbtest_core_static.dir/depend + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal new file mode 100644 index 00000000..44bfc02c --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o + /data1/farrisli/3TS-DBTest/src/db_test.cc + /data1/farrisli/3TS-DBTest/src/db_test.h + include/libconfig.h++ diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make new file mode 100644 index 00000000..f5b45059 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.h +CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: include/libconfig.h++ + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make new file mode 100644 index 00000000..60ef1fd8 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make new file mode 100644 index 00000000..8c8fb6fb --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..f658c158ecb4ec4b0fa763bc0c07698045b5d327 GIT binary patch literal 1260 zcmd5*yGlbr5Z#S2f)CIXHa0d28gvb@NTnn(iV_htHi9ghy-^mDn{XeEA0hsLUtnir z5ep0TC#>ugf5JKUAsQ_5uyA1S?984y%ssQ)vi134E??L_eq81(Fg{1FZDlrJubqXB z+s?xn#d4=|P%KoWbp4v#l~zr9b=O7EmESipCmfiLFy-!m-psi=Q)3>pgGb%e2X!?)@} zXEGu$Op8WVS53AD(3gd^&;ZtNE$%clf(?5QXNlv(X{Q#i?r+}SPhap>n#$PVhV{!o ePBr+iUf(n39lz&LkKf;MI>M0~sHbTZM)nEC;L#ia literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..278f070a547e2715934a68da6cf6885e9f5ba075 GIT binary patch literal 20744 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c new file mode 100644 index 00000000..5a17cdba --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx new file mode 100644 index 00000000..54f83f04 --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks new file mode 100644 index 00000000..0cfbf088 --- /dev/null +++ b/src/dbtest/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf new file mode 100644 index 00000000..3b3486dc --- /dev/null +++ b/src/dbtest/config/gflags.conf @@ -0,0 +1,5 @@ +-db_type=mysql +-user=test123 +-passwd=Ly.123456 +-db_name=test + diff --git a/src/dbtest/dbtest b/src/dbtest/dbtest new file mode 100755 index 0000000000000000000000000000000000000000..2cad91be3028f85b2f34563905dbed4687daa3c6 GIT binary patch literal 798408 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc new file mode 100644 index 00000000..a2bf6fc4 --- /dev/null +++ b/src/dbtest/src/db_test.cc @@ -0,0 +1,118 @@ +#include "db_test.h" +#include "gflags/gflags.h" +#include +#include +#include +#include + + +DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini"); +DEFINE_string(user, "test123", "username"); +DEFINE_string(passwd, "Ly.123456", "password"); +DEFINE_string(db_name, "test", "create database name"); + +std::pair SQLReader::get_txn_id_and_sql(std::string line) { + std::pair txn_id_and_sql; + const auto index = line.find_first_of(" "); + if (index > 0) { + txn_id_and_sql.first = line.substr(0, index); + txn_id_and_sql.second = line.substr(index + 1); + } else { + throw "read txn_sql failed, please check format of test file. line:" + line; + } + return txn_id_and_sql; +} + +TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) { + std::ifstream test_stream(test_file); + const auto start = test_file.find_last_of("/"); + const auto end = test_file.find_last_of('.'); + std::string test_case_type = test_file.substr(start + 1, end); + std::string line; + TestSequence test_sequence(test_case_type); + if (test_stream) { + while (getline(test_stream, line)) { + std::pair txn_id_and_sql = SQLReader::get_txn_id_and_sql(line); + TxnSQL txn_sql(txn_id_and_sql.second, txn_id_and_sql.first, test_case_type); + test_sequence.add_txn_sql(txn_sql); + } + } else { + //throw "test file not found"; + std::cerr << "test file not found" << std::endl; + } + std::vector txn_sql_list = test_sequence.get_txn_sql_list(); + return test_sequence; +} + +bool SQLReader::init_test_sequence_list(std::string& test_path) { + std::cout << "start read test sequence" << std::endl; + std::ifstream do_test_stream("./do_test_list.txt"); + std::string test_case; + if (do_test_stream) { + while (getline(do_test_stream, test_case)) { + std::string test_file_name = test_case + ".txt"; + std::string test_file = test_path + "/" + test_file_name; + TestSequence test_sequence = SQLReader::get_one_test_sequence_from_file(test_file); + SQLReader::add_test_sequence(test_sequence); + std::cout << test_file + " read success" << std::endl; + } + return true; + } else { + //throw "do_test_list.txt not found"; + std::cerr << "do_test_list.txt not found" << std::endl; + return false; + } +} + +bool DBConnector::execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { + SQLRETURN ret; + SQLLEN length; + SQLHSTMT m_hStatement = DBConnector::stmt_pool_[conn_id - 1]; + // execute sql + std::cout << "execute sql:" + sql + start" << std::endl; + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "execute sql failed" << std::endl; + return false; + } + // get result + std::cout << "get and parse result start" << std::endl; + ret = SQLFetch(m_hStatement); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get result failed" << std::endl; + return false; + } + // parse result + SQLINTEGER ID; + SQLGetData(m_hStatement, 1, SQL_C_LONG, &ID, 0, &length); + std::cout << ID << std::endl; + return true; +} + +int main(int argc, char* argv[]) { + google::ParseCommandLineFlags(&argc, &argv, true); + // read test sequence + SQLReader sql_reader; + std::string test_path_base = "t/"; + std::string test_path = test_path_base + "mysql"; + if (!sql_reader.init_test_sequence_list(test_path)) { + std::cerr << "init test sequence failed" << std::endl; + } + std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); + // init db_connector + DBConnector db_connector; + if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, 1)) { + std::cerr << "init db_connector failed" << std::endl; + } + TestResultSet test_rs; + db_connector.execute_sql("select * from sbtest1", test_rs, 1); + // send sql + for (auto &test_sequence : test_sequence_list) { + std::vector txn_sql_list = test_sequence.get_txn_sql_list(); + for (auto &txn_sql : txn_sql_list) { + std::cout << txn_sql.get_sql() << std::endl; + } + } + + return 0; +} diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h new file mode 100644 index 00000000..53ce8b23 --- /dev/null +++ b/src/dbtest/src/db_test.h @@ -0,0 +1,172 @@ +#include +#include +#include +#include +#include +#include + +enum class ResultType { + RollBack, + Avaid, + Exception +}; + +// result set +class ReadResultSet { +private: + std::vector>> read_rs_; +public: + std::vector>> get_rs() {return read_rs_;}; +}; + +class TxnResultSet { +private: + bool is_commit_; + bool is_timeout_; +public: + bool is_commit() {return is_commit_;}; + bool is_timeout() {return is_timeout_;}; + void update_commit_status(bool commit) {is_commit_ = commit;}; + void update_timeout_status(bool timeout) {is_timeout_ = timeout;}; +}; + +class TestResultSet { +private: + std::string test_case_type_; + std::vector txn_result_set_list_; + // key:sql_id value:[[read set1], [read set2], ...] + std::unordered_map> read_sql_result_set_; + ResultType result_type_; +public: + std::string get_test_case_type() {return test_case_type_;}; + std::vector get_txn_result_set_list() {return txn_result_set_list_;}; + std::unordered_map> get_read_sql_result_set() {return read_sql_result_set_;}; + bool is_expected_result(); + ResultType get_result_type() {return result_type_;}; + void set_result_type(ResultType result_type) {result_type_ = result_type;}; +}; + +// The sql with txn_id in test case +class TxnSQL { +private: + std::string sql_; + std::string txn_id_; + std::string test_case_type_; +public: + TxnSQL(std::string sql, std::string txn_id, std::string test_case_id) { + sql_ = sql; + txn_id_ = txn_id; + test_case_type_ = test_case_id; + }; + std::string get_sql() {return sql_;}; + std::string get_txn_id() {return txn_id_;}; + std::string get_test_case_type() {return test_case_type_;}; +}; +// TestSequence->exception test case, include a series of TxnSQL +class TestSequence { +private: + std::string test_case_type_; + std::vector txn_sql_list_; +public: + TestSequence(std::string test_case_type) { + test_case_type_ = test_case_type; + }; + void add_txn_sql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; + std::vector get_txn_sql_list() {return txn_sql_list_;}; + std::string get_test_case_type() {return test_case_type_;}; +}; + +//read and parse sql from file +class SQLReader { +private: + std::vector test_sequence_list_; + std::vector test_result_list_; +public: + bool init_test_sequence_list(std::string& test_path); + void init_test_result_list(std::string& result_path); + + void add_test_sequence(TestSequence test_sequence) { + test_sequence_list_.push_back(test_sequence); + }; + void add_test_result(TestResultSet test_case_expected_result) { + test_result_list_.push_back(test_case_expected_result); + }; + + TestSequence get_one_test_sequence_from_file(std::string& test_file); + TestResultSet get_one_test_result_from_file(std::string& result_path); + + std::pair get_txn_id_and_sql(std::string line); + + std::vector get_test_sequence_list() {return test_sequence_list_;}; + std::vector get_test_result_list() {return test_result_list_;}; +}; + +//db connector +class DBConnector { +private: + std::vector conn_pool_; + std::vector stmt_pool_; +public: + bool InitDBConnector(std::string& user, std::string& passwd, std::string& db_type, int conn_pool_size) { + for (int i = 0; i < (int)conn_pool_size; i++) { + SQLHENV m_hEnviroment; + SQLHDBC m_hDatabaseConnection; + SQLHSTMT m_hStatement; + SQLRETURN ret; + // get env + ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get env failed" << std::endl; + return false; + } + + SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); + // get conn + ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get conn failed" << std::endl; + return false; + } + // connect + ret = SQLConnect(m_hDatabaseConnection, + (SQLCHAR*)db_type.c_str(), SQL_NTS, + (SQLCHAR*)user.c_str(), SQL_NTS, + (SQLCHAR*)passwd.c_str(), SQL_NTS); + + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "connected failed" << std::endl; + return false; + } + conn_pool_.push_back(m_hDatabaseConnection); + // get stmt + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get stmt failed" << std::endl; + return false; + } + stmt_pool_.push_back(m_hStatement); + } + std::cerr << "init db_connector success" << std::endl; + return true; + }; + void set_auto_commit(); + void begin(); + void rollback(); + void commit(); + bool execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id); + void release_stmt() { + for (int i = 0; i < (int)stmt_pool_.size(); i++) { + SQLFreeHandle(SQL_HANDLE_STMT, stmt_pool_[i]); + } + }; + void release_conn() { + for (int i = 0; i < (int)conn_pool_.size(); i++) { + SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); + } + }; + void release_env(); + void release() { + release_stmt(); + release_conn(); + }; +}; diff --git a/src/dbtest/src/odbc b/src/dbtest/src/odbc new file mode 100755 index 0000000000000000000000000000000000000000..7343aa9e1c5b025d0a4c5e72de2b1d650158dad2 GIT binary patch literal 43569 zcmeHw3w%`7wf8wQnaq$wCIjIS2*d#)0+Bo*5J12rWFS!jkp!RUaWa{}NHP;M69Trr z>Z79K`>M6tQg3U0wN-Cbw5{)|wbt6!Rnq>?zxFxv%8c^e`@8pk z_xIz#oVE8_Yp=cb+H1d0&N(-*cC|y-HT!aCD>cS^;~E8}?wU66HHlidC7Pi%YKLnx zwL)MD@M{zbp$ge>i$f7?=&|^mfJ}G0MZewAh#2FI1llyYr=YDNA=9OhE3X+#s$6JXWhOhH8 zM%b7EyCkM*Hnh_nhji5QU@zP38?5~D*`?Le--dR**YriY7uVPH^~~>!M2EJ|-@at= z{KfUv@mTc&Dfa{@LZ4c*ZlhN8`JQ<%U#UNM*?SkBtrfeTzwwQMUr=xAKzZchMSd$g z36DdZbe8Lq##&w1eIDXU@tcTWbKsY6fA4qKeBS@@-^TpwnI}%0aO2oja|6Fz3sT;z z50vpasGWK6r{%$4ln4KHD4a|F;yn1D=aEy9hktt>yccr(_+?+$0g+3eTl3)W%_Dyv z`2F~0UrT}TXCo0G#xGaCPeQ&=o2*^l*qD*(SAs9o_B3VUe`m>Q^kw3ov-q>+M1dct zm1(;z`98#XJ&d2|WA&qg*)?D&o$e++RdKuV0d#Ro(KcMchH5l!I1jN>a6D`3+kipJyA`soy zlt>IR*3{P*3#Ir1+ry!j$e=AFoCs~9rtw5isH%#(F4oMG*L5bAL}GEXI~Whww?!j~ zmb$<;!N>aIfsWN1I%Az?0Eo^+eHa?Fg*p>;b)hZ6K{GKJj3nZ1p+H~*a0?+J5;9}) z#9%ns-_~Vz)tZ6M#VF+HJXWbZIum{Iwu2KF>VmLEX2-E1rAjC^lt^kBVX^vEi4fWx z3Yl@n>WG(GK}pTf_MjO|gtteK&?LdChW=nAs+r*)n$$GA<8g%tD%zv1S=-jU%3M&r zpn8!CpLn9Vu)023^9VT6->82I%N~fAj(-mM+5HhQH;K<_njaiPQzIDJoZ4%af02F{ z@OHnNn0pO|0*Ceoi@x{hMo?8>RwN;H+n0tfPQxEa!?SJM*ZXPs5*rC<`#XnC_Ko&c zX0-!15SA)J@~7e1pW4@)G`wAQ(rVN2wv~uql7_d(BH|m<@YYaHwAPx2Pam&3((u&P zzD`WT+hZ$fr>EhqDTXB3l7=^IA%FvE__1mD?P++s?npi_4L>Q3|4{Id1rAx@kOdA| z;E)CWD=hHWl8O&nFL>M2dYS8u8Vr{gJ(h5cyx4ldQ=TU!yOBk|1$t!mo4A)8)`$?} zTS(i#cLdk$R~hF}zyC#v|D16L9X?EP0s{65Ax zRPR4e;&(F6A$tFS#BXJsL-YRAC4Lj*9Fq5UNcrR^ne^oI~<{ zzr@dCoKvCwKE!E{x_@um`LokncmB5Zf;SIzbhSP6m~UdE*80rjyC)Dlvm9V#;+@r+ z_P49Z|734<$zc~lf~H;7x@*N!2yETuT0pS${lr9=b{lwU+A$-0OAb4aj89q+{9}ZF zk%M6FC#{cv;%wb{p!M;6N4M%vxBl#t!~_Uvw*+`b_V$(>){;uk{LfqQ7Sd`%r5js! zzP0Zxl;UaEFM!cceex>g1MZZ9mv z)*`j;+PJTE=hKhUBldmraZc&}r1X!$kd&?|5&P($XMEiBP%YS+_JCvLp=Ag@%+Mpv z2r<745QE$Lawy-P6#tcU@n2(#%L4nL;a+M;_4jQ8GKYxMk|It?7jc>ru~(@QwN%;u zSu!T4%b04(U?JA!PI+N6_t!s4v(H{cP=LLyyV_qtAzo_R`J<*iC8TP&UHNvN z{n5^$_b)j6BYo(I^Ur>NWCXrh@#wux@SYV&`LGAYd4$nNHLQ;J{o})=v`5IR^7sxa z7ye6sZ91WC=gUpUx9xndX=BsQkDI#I?wbA498KHUx@&&HTutj-JD1+<*;fNet&e}~ zOdMACn$^D6?)+fw&i7h&zSA@^;n%GfJgK)XeSPSU?B7l~wP{n+sZFOfnNMDo**>0x z)tE13rg}mk4_${WaL59OEO5vIhb(Z&0*5Sc$O4Bf@W0#wJa@>rHir}baCDo$HyG&) z_h^iUaJpp2*Y2pUTd=Tx(PAwTjwcY*+IQeMX+C2b8F7RZ?y>2yFk&)$qp9j1Ukmtj^^s_c-`gWgQKGyBI3V80p^H~EA z{wM?=xlNzOQBy5^izKs8DTz2`mv;{^mhY(7xb0s^c^Ys^T7WcbUAmi z<##ALb$lDYXF(4${c5l8N=Lw3c7-$G_3tVOc;{U1YW3D$T-fSea)En|w=wEn(&Vje z^3G}Y`kTFF&0b%#*CTeRhkXt}j%@>qJ9Hhgz#$79vcMq=9J0V63mme*AqyO`z#$9# z_gmnA^<3elIE&=x41dQQ3Aip$yt;i*>qS&Po~5ihQFc)k0{NQ}_qY$Q<6Xaf$o8X1*maS2;3y8SHM zUoHLYXRgY~ge(17G{$+TCs$*m0DHCDVWqd%h4wRGlNGnt;ZgiH{uQ^1+j?)e`0QuF z?EGRhL#O-{sER=YUMYqKKj{*C+@@xebTlKx#g2!91*Mi$Dc(Dbqx8Q9S ze87TFTkuyF{JjO=vtXg+x6FUds#VMUbMSQbT>p~lh1GTb1+{fc>*^NN`R8oFo13(~o|fVZUHq(soB% zHq6Ci(`-1(z5~i0HrvPPW%CB3(O7pRn#EhYsJ1~9 zKS;@)w`Tnb+PnY|$!9$!zj@O9N|XlD39f0X!jsjZt!Ah%7~i6v@lTTz>NN)jV+m|# zMPgBQR(8L~4s=b^yw&SBbhWKMNgH9B(_OHCrckU`z03> z^OAHkXzpxTvHnQH>>UjDhs}XlB#LLm!ISKhl`e(jfg1-b|5iaRB~O(PPgwUwHb;ri zS67WzeFrRPe}jsAL%EU@V~pC$m4q%W%xAT`_HBy(=kV z1hyc85#$bx9=Q@a@Har1jhqI+$ZoF<0XOD8V3YkXB4A(xSaoF%oBLM(IoH&W1YYojUjSAw zn8Lf9-!`TTyvJB7@LuC|f%h4o6ZkL2^#Z?Z+$->Y<9UG(7=IA>pz&QSiCoS-#&ZH6 zGX5y=VWS93A(!)e#yo-FH;xzh1LI7Aj~dqseBAhsz$c8K3VhP|NZ?b(bS$l0&L0{p z1U_wa34F#F68Nlfy}%zC4+?zFctzlkjROLoH#}H+xtz}%M+p3hvD$)RfiD;rTJWC* z{?vHFf^P_X(a@$d{fovdz(S`-pVTUWG5Vw)2^8s*E|)-=?qyjDo#nch#x8VL=w4d6 z&^bf*(!7Pv*}7LHuhhLN`4PI8$=wmO3ccX?qQ~L99!3gI^3K63On(@NF%N+S6PcS4 zHXinZcFbBz`_S2! z<2U9}Nc9PM+!OTTjbm?wmNg(PvdP-GuhLJCANwj+jBUWKPg2IWQ~rs?3&21jn?dO( z^@mipR5Co>eKFdO{so{fNhVaJZufe4uzm~Bx7#G&k5fs*?qOu9{{XaSlk}I_epUL2 z`&|qW`s<+WOVWSF^b=N5v2E@Zu>H$G=sHr3#ZMJj@=!cyxnICyKzL?@UYq0*Ii*`6 z%yqu|>*$#E0B9XHeauEQey#LGtioLvx^Kf=MGu2EVAFjRsZD&3M!m{sg86mou@m$w z$s-n;bT#sJeaZa|NZC*F*OMfz=(nscSDWu~;1F0km59l2qBn8{JP)DZw1kgHtt^V- zyD#-j|1N|~c?v>{-UQKo7qZn0myQjAd+Hd}d*M;@-vmqfT`*7K^7&M0{Mihz9Crsr zfUgR_I{e1G1EMzmbC6TGYT9^6BDD>_^-1b9vui-gHQh9~NdP(ji8;Ru*JRGGgEw!^ zGz4;f82)iS_`ZSPU6lQ9dd~Nv1(5nAem_c5N9U|-MSPaNf(@kbj4{O(Lx>gb8B^?D zhi*vsoIBQ!mB?Z4f>%)`p7X~}Ld@@$O$-rs4$zu=0}$k0o59YqQACZ^y4#DQFvSfv$wx+|L*?-(w9%!zm&3b5VER6p7)Z}#8{Ea%q`MzS zqbBW*Tufq`9^L&1n1)P+%tRzfb~K1q*+Luj>Fx%UhZrtEeGzbLWqT1d%Jdm5Y7z03 zuM;zgy{sk`q&WxU3;G1_QIG?$9M zM4xdf3|&N`RQ$ENdop@-*6digo$#szQt>ySTwo=+DwC`#{>!@iLg++mbddfz<|ntb zioa8LzXUHKW~h?k7<3=Y#2fGBJ>ziB$aay1Nu6 zAnny$On-%%#!I@p7DO_QB$=e*X%MU8f33UMqaKKv3W>fig4?S2o%#$;=8A|{6~7k- zfU${KLuRG6RQ#K|yAqW~+ikYxC}FDN_v!8}R?IO#&Ahw+UQiH2X&V^H{7jdKLH8J7w?#<*VKT4TJxcB4Yz zI%A%|^~Pd>#~Dux++cj0uy~R2bAgMEvYCuG7z+W*9zvJx{-S5v0nYcl=NfO3=snMv zaya3|#(4sF8eb83x$%&|UB*uZUSYf?@Ji!Dfma)qvzYEWqgmkf#z_LdWDE(s$+%kJ zmyP=b-eUYh;BMnxf&XlHW;6XajEMqoGv)~VrqL$wb|WJ24r8alyNule?=~J6cwkby z=<)8Pjqnba_q|E43;z8{{}A|(N$V?#|6o#yzz-+Y2>fW$8H6R>#yEI`t0ZK2k01;i z7Ygh(ZVh zHvs2$6r%OiOr3BOIy7e+BXv_J6!7*%V6+0#&O&IOdHe!x+?okh`292DM_z)i!H@1` z{^wy%ef%j7L$79Vyy?}VGx_#u6Kk7EK`F-l#!!8ig^T&0~xxxg;9x+~peER}fJ=n}ZahzX1s7Xcpm zltgUDOlVrg?wq{3DFY^c=~37a<$DY3}pg)UIdj_o&@DD8l5;l5@RibcWI> z3QJAis_+X@oXLGD?bH-<6MY?G9H9P(#Hd;8OjIYuwEaiLsEKkAHBXaYMKPAiZ$y3C zCYSK1nVhp5%{|wp#Jrp)rX#K9B>ZV&WXj}jC{SW5sDY);WDM)JHWL0cF+R=#7QbeR zu|@nHUTcex@TZC3=%r~5e&=2|T7$3P0{C7-K|w1@*x)JHrjTa>lyibt_R3^hpuyw* zCK!qsUQz%FWm7aRP?r7xvQ$u8dL|GmT(ER6`j08H*!CV(OZa+IgstA7Z$TgrA>P(IFCfxwDu;A`dMOUbd~LKwchbUYa}?+i#NFL6t2@N#Wb zKEd@7xC*qDv@?H4Q&XqbpcmeRwpv6~V}T3jGg=Xom4A%f$|pMC0arO6^PN^WF$jDS z_sYt5!S|-Srd*1!`$ODbsi^aCu=CDD)2Uc!WgLWh6^qB53=i{o-$O1H4HEHrC&Hu^ zOC(a}-9Wab67hRK2PqZHBr?al7yV1cQ4*>3ZiP`RmP=%bH-Z9ItdK~f_hWP&6^#;U z^Wcu!+K zX3<56?D2kxs;oF&bbHL(O@nkF^9ckzg*rk;hqZT^=XfC|KswU*Tg`hTO)&G*2;{R{OHS~*4@8qLR; zk5O2JZr}U~x)uK%#l}5cWsxl2=CKquOP7M)M=stVVh2Us#xfqKMEoWxLPF`;QD*ZC zwC3-XirgAbx8_WEkN<5&<94yowB{eft^MniCAfR6G!)5}t@w65|FGiVzOt$Yi}(qv z-02j5;AXRr{$kZ%3v1wbmGD~9#9^co8ASna0dwEjm&iF@nmr0Xc~1QE#X_H=;{ zqNDeJPn?fC@M)=O;Ki8Bm|c)a!Suo+_|GS<5eeZ-7niTJ!xn0JO(A``qXL8}>RI4SdffE;J|gfh)r zj|!YIP9lEqYO+lj%kguL_eMDSjEN<54Hz zDZ@zn(*iSTf_||n&mU6OvFN*@f`5~w=eb07`sN^=;RIFT9b}LSmr#0(W8DUNFp~Hm z6%Bc&k;+SJZe%6x&`UV^+Lfd+1p8me=6Wgl_S|MWi*KR0!sKb=gGIe|bU+t>J-d~J!t)r&!mqi7edO1s6R-w(GNja|Oihu$ zI+ zI-EuR-btq+?0yA0pI*7p!yQ%cG!(K@t(I{3iyEj@t0j-O1g5TBDN7ok_k1+%$`*-~ zc`t{s%78@t-ZBbUEs;6iXDMKfL~6YT1++?JiFX@1r^+^oG+2H*b)M{miL^{29k!^!Sy1Y8dT-ha&jo$Y$vR9rWk>kAs zsPW285;?((cA{095;@WP9ZCyI+Clf56a2w{nw;{6+?^+{xtw~x~LC3313 zco8kX@+?{2aZ6e{Aeqf;Yb!}Qd(zQBH+g>U*R++K32a1E*222h-i<0g;;Y^OQ0*SL z;t{)L+R+|DhjGN$WN>cpAb8 zUiz!1(gY;pK|ceYxvO1&R%zOuk0Q>^ER|+mDLZm2&3cI-&0|c{;hGJ$vcI5wb7wnC zdJ$>z^x=LSRp-{d?*Ryvo7OxAjx)DIjmI~T#v2mc0C3ftTTznEL+^m2X76M~dlGN!59N#NHy zxuG}rIH#9}<{^S|2Wq4>m8gHzPx z*@Gmp2GaGI{ms2q&D41wp+?$SNMSJ)W9*uHlS<5kifo3i`;ZYFqnM``@+e1kaW=YX z);>ou&o$K0+R}&KXYLQJsoYjZp3#eW&f()=q6O}x%0puARm6%y456;*{()bR;U2Lu zk3&)nDucj_%=5c4*W@utHof_6nz2|Fi{~f8pfx{7vENYU;BktYb;|@oP4qrbJAXx` z<0frt9i}yZNZJX`3i>TKZqqhl1Iy^E1GDJH+{;zj1^9CGxzEZ>g*&_1S_T@Z6o!}H*3w(zeo+A^ai!w>>3fS8>ugLc;;Jw9gfO%tOt4Q;n0)6Hc zmvF}n?dujyUgvq8On&^G(4?Zudjbz3n>>#L)#TwmnrzH*&qz8WVjn`}gs);$!;FK$ zO=xmWp1&d}ygXDA-cqf61{A648c#inh;M%v603H4s}OFIow@cx7ciF!ru{AGP<5FK zzl=6^X*XG!!3nv{vqU6eXKeQo^@I1MKD3th(hz|%aXAX)~b3{Wbh!&VlKw8S@mzq z(RnUrp@S^e8%oA38|`BV1*a*R+nI2gYUeyaQ;xzdDezV9gJ0invH>m72}>cu=OR0U#pqBY--TUEWvo9Blqn(BO| z^{?GZ4ZkHO3w)cxzbE}L4;ZC>wB}t-U@uZO`IzWbjkR|o#r*k_qWu}>)B=2=eocdHe(_9Dk$8%z z1zsVkemo;QCbTT(qO32EW9ly_u_tXu8yMr{%K>?nUx1{wXHSuN<1q~Hp2DJ(FU7o| z_Et5oJ`PR0_W3Cs(aLWuLip#?WYN$8lh(dA2>ZY z?}PLWDBB9yxc@c8q98Kn3O^*SY3&Q2B%svf_2_=@k%i>4Zj_D*2ah`pv=9pw3zgy;6u! z`{t=f;ltC{2=AKd%Rd*H6N3Qmx z!t#z2(Dj?cUq;#W!s1V0SI5<-hj+qDb$4-56{9DHk3h+Fk9U$pJ9-Dh2~8hU@_S*9 zhWY4}UNrUziMEFKVw$bj`yP;J3&P{{+1^sa=`Ht;)5p6x4RS2iot|aJQHBm(ol7;R z7ZKM|W2X*l7cA3MtPDh#hY@3`!3ds&N>SXUy3=bIib^@2YW?UbA_?qK@A4_3DVO2+ z6_hb99Q@QnbWx?802%cvN8xKLJ$lM=(8fY1ssSXW6+5!TdyA8a+Deze^d+P7>nUYY zAG5<>^<>i(b$lket#tVmMJUZAEHG@sgiJzPX^J#47b#>3oRo`5drZzGd{Ku1sCe0= zWKFODQyhrWG*i=yPHXi6S#B}IUSytDqd8?MGQCy;(_o>BRL$aura)h57~oCW*gppu zka0$;LTHa^Ma*EPl^PjfEuE}wxCwQgl`I1gtZgD^3zD8CNXjC*GLzRvA5pErVKTU} zU_m*&EYMubACy~C%seP0UTZmOl{hNYqi-Hbe^J@ZPr44$E`ajYnfa%x4^K+ku5Y_x zt;)Xw2B?Eoto))-NxA8QOjDsxN$E)?>$B?$r~65(KvzmqYA#NiR4m*uOEZj>Xr?&E zO;IRvsV!3Z{jw4;VqI3M+pRC^CEN1JNd%)S>{QA>R_c12w2q@^pmo$hK%$Z2v|T}*WosQMyj69|Xva;oioXFptJayU5lN`(qbsQ> zkP5Xi9hGdR$ER8zCdZ{H2d#193h; z#5j7I6~q{6T0smpr&mKt{SF~0GH0bavTuNjID) zs_DjOY;xi8Jt}i?{rtgj&z4|9eWNNbZ%?>;Xmc(h;q3{9#wTZL@RzYQxuhI zWSD{VF&{}%RfTuH^+q;>3Y&%o2Fx@Ll_Z|%GY5hZOMsLe1k^*?hk+Dl2!CqCXDFx( zzD^XxCyW>b7WS}%kr+ej147Upe?x3#vjbmH>NmrKgE1+C{h=aD^l*rZF)0YW!#xZQ zpti!jk!ZNbj19yUBZ_VY`E8_NB1V zGSwPJ3Csj2@O{(l$0wBVAt4))6*bM(ZEFLH7iAd=CDITnlGF>h(92m|iGGzx>Knl^ zq|kQIA`#6%3}s`KAZ1?_PDJ{{DuhD!qol*J!5$z`qssP*XqvqP`1+GoHs%*og!qm) z?cRrPSOEcD5Q$neW%v1Z5kOQJE9IGeb`elG%{5LN8cBQNMSl8H-T>44XzoKS^y#)@}l)@Ve zbeHbj?s<0kF&=a)c=I9NqNvgOW^WL0N?dI6TT-g&6FFdp;`kf$a0osahfxM$`fk>5 zA~w|5rw!W;(=9b*F(r~D89XSuwRcP=pd@nNy`CcI%QB*nvtZA`d%z>M|wB8Das+l;?HHzUz)Y!d7X zM7$ZrpQO_}P}LghA5BjS#^d}$^F+V7qbImS<-VY9Ac7(eN8(`jt%i+Wo_%a0&4;rwBFvnA^fqvd?l=|0bF4y*QW#rqlvcewcWLW zz@lxzzM*h{30Ji?Z6Ivz>}v1Qw)GCjL%}EvV|lVAX_0AWn6PePMzlUY92~%R%W6$6 z5rg**2BUGY+VEfmO`D(o!nfL@L-=agb`5{5AIA6G;`nM9UWl0`m~Xnox5JPIRx^A1 zf}7(h50T0>S$3(_9G^mKq1B`%DK`+8fhrE*=7|tG&DFEj)r!a z@g4o$!ov~`@GEn0$OK;W2_gN#!L8xJxQ4F2C(_%?mdk_36z`Q{@soBv;ZUR>^(JpL&=8YOU``Z%kKE^GN?cHHnwdQ? zO%&c79&C#QP;>o}XaHTbB!$u@yK>xVfu6`_42pHN+E5gR53%Kh26kxu<`#SiFESYG z4=eSL#dqcMdQ)gycRpWjh{h5o{<;Nj8WG{aENd))ep$Nr_QlYQqMO@#1F(;%8QwmC zkN!myb+!0*UN*l~*5%UbXz!Kakue339rsyCD{U@}u{#t)`CWFU_ZdNMxcf&V_ zL+l{<@xA_TiJ|+8$ILD2Lv$*J&UwnxH?N0!M7+Qc+JUKcuR^FC&=MfN%LCuZ*EIS4`_{aP$Yjp0EI(+svAi4 zb)VL{dvdpK47IRzk21fqP{#K$hXV`x66j7iGFvsA)^~Qt(Z)j<{~#tF+@^+}r0F!e z0bUgovid!wmy*^kSc2&^QnK5I_n^A9;r?)ce{5S=(nK?6BGM;mm=*U}{$Wi-KFdF% z;mzpSpp-oc*b*DUAZJQvVwFWkgq#xs%U!aJu~ihfiMz6l$EkV zeUR8ce=~;C7wh4scubrGwCI)HiM}HCqtd>O=~%&Iyke*q~pw?SR$*t zu;w8-dJK!gP6N{p&J#`cOYD|7b)r$yrwpGm!1u`jAKV^bMR5p;YwX}vAJ{9-Jb?Cp zkkaBwY3#EC>yBqiw)xNK*B8{P55lGSp+1RK0b z`mD6UKopL{t9sOMuF9WG`RTKrUJR#M(;cpP=&H$Oo0^KZr{)1>tosapB^kqSbZay= z9L1-ZdlO-q7NLJq6A3lp#QeuRo=Xv#tAwzf62^Cg&&1kJ_9D;@uvU-}Y!C}16oIoG zSvhfZT>`qbRFm|u(df09YF!8E|7yC-*2IbM7WNv*NBV|D{{TdxHaioX)N(9VRJD-k z9T-ZmG}6sxxa@FXF^1~Ri7i}Cax}?Yk)_WoCD#}Xr9PtEiPcCHi(gYFYOg+vFsVlN;$hL+GYM z+fWPWY1yHsEwpL;99j(9TBz=N)Fd(0DRWU6iK~ic=S4kb)TQ0o{WPs>SsTcmM_pao zTnm$dGh{N5%O(rC_`s47qd6Bg<|-7eOFM_3=9ZD23%}H&j~}(p?8A^hS9Tm|Fk?qW zYN|5nm_hg>H~S*d-k7E5XY?b%PBpQutHT_^-uJ?)R6e6UYD%ezPq8lGjTk`bj`X(F zYKYTJm5e)gFj~iYZUk&lBO%6pQ+$TMQpvmSKmtnH(>ccJ;M*dhI z_KejQnKfIJO%d+FihFYNRx_JY+o`BMD8VsovzohOJ|4uN#a(U@Y3(J@&({XlvFZ}B z9)f}H!L7NfV0g4$&an7CqoHEJZ;^dE?478Lwkp7(DUKY~nhIZcSt5N4Hv;if${t)6 zb+vGx!7%rI!uhsO>aF$=Qtjd3s&uiM3s9z+I7`Mq3|?F?a&s-&x2uUVr^eXrX+aC; zOl+0xuHsga+q(#uzuNKK$WQydt+uq=;i7>oun?ZRQf;AZ?#m)y|c z&Z^lPRZS1uajd{ZtXo^mC2zkX_Vi+6hHrq_|SFs$_Wl}V5f6xIw37msGs4>G?-Sx6_`R`(e3Wb_*KM+kC zaqQ^xOgQi5#G&c!j>b`RCr*Z+%87Ss`*Pw7lJ9#@7v{uitNot$OnhPTeejuhx0dTY z>Q0=L+V5Y_d@c6s@3-CTZhzs0}XdV1Ej&yOs;{qA2I|AvLnw*No!;3wjtj9hkGkO$wH2OrCW zzcLU0_B{9>TKMepzG>lI6C3TK3gjzDsed-!Z{f4;vjX^Bc5VgUfw%H^WVNqjEc|&{ z_){(XV_En(@VZu}-P5G>q&xBYg5XE@pLbYt4rIx>U-(D&!!H4!OaEUBe~ISvH%fkX zzJC{dnPxu$Z{ztFC@gRGW8I4_eD+h|`Ruj<{5rlAaO6ytuVilBa_M>{ z|2V$U-Lf;xE7!{+zj)MB?!UJ3ZOj_qXW>DwT>8`iKh9C2c`W(1Qp@x3-w8d(J4Vk3 zjv+tVh28%^4Y|7W$T>3)elq35Pwf7r#*%Yc9{v~e;7<}gN6&x$1paZ3$=X#}_Wyu* zv?F`m_gRiR4suvu+4a%|x)1z&tafLqsZ|Jn*{J%RC*`uaQgFTCi#5Cd30tIqRloMr zWcJ@Fn0e%E1Kyt!n+#o(hkv(~ug~h=?E1PV5C21X@UH-$E8jol!RvTVE|(vc*!Zk| z>0q8Gt*)*~{>PJ+i|cFfG+JGCOslrOyn|I_Sv=KSa8j6sBVR6j^-#1g zvNhbdBWHqq#A-bKGME?|$eAb)ty*>&GImOGP{SV^eN>vJ=i%me$TgTWmr zW?~QeSE5##~Unpn4Iux;hhm@wS6gHPi(~7nwNi&D52fb+Nv9pkwuh&RC}z$fBBE z?W^pXp>_B`S~d&qNngNjmuYs#v8%1Z+y=~g+M+J7Ejx8a1C;GMsuRg#YwK#qLA2du zpcETS7oRtyy#ja=pe2H5zo|h|Ae#iKt9g!L6GS&0j7FkX4z@9|F^sKwMTQ$P!+hCw zh7)+;wJE^|g+>>$WmF-xYCI^6BNITJdI{WOhp?d?9>my-ZSHV2o(-+$A3yZWkDwzK zR8w=?eC%>+LfgVmt5x^xh(ex%P(dg-J&E%iCOu+;hLJbO1XgIE50eSD8Lb+}$heD* zst04zCaS|*td3$!57OE(l|nT;mBJ1~a1ejrfLu9A!L3>{P{QB|S~dDEIf_UXtvU$1 zMY@L)=}Ghrcbc!!TfSQu&_cnPMJewM^iH+#KgV-_Qjp5ETy-Djou+l&^>PTvCj zd-w*Xt-t-@l|B6hOV^N+uH9giPb z?feH^jfnAkqXIPhyP_(lWY}TC)9}NeUMKap_n&)c6kOE`B=xuRvEf$G`HfIJZtqjy zXr*to(o=u(*!o*&?JNXnQ#-xApUrgyuk8vX^S9I6<-ZVgrf;_R?0xSJi_!irD$Rja zc`|=H{T0B`r>LJ?_Bz@6Gx6*lTjrI1?L;I!z28djx6&U-XGYjUC*gHj>FsqcKMlgm zm6f5LUQzL_2?WyfxA*1C_&1ff@F$HKSC%+!H>gZ++uz<-(ELE+x>kYY-L}7txE+D? z^!C2Wb$-RsWiwhZJO2lOPfu^32ki5!1g#{dUD^3R1{(fmRoVdA?ERQM^BGIoTg6iK zZ_9Ze1nj0H)7$3@&synizI^Fl0fD|_HP_@h#EW+RmSJuGvgO(J_y*Flh<1AWykf7l z(cuRz{j$^B@b@65r`H-A6??4$mne|D+v#lh4k+pA?R||)tn}ISMc(x5T|_9$)_=E^ z|K(QtvaAID^u!2%fFD^b_9WF#k9Ry|T(&qHIuWqC3gNTQUG`W4`FWJ|E4w^XklvP+ z&iB+(70cEun|Ds0^nbI`-X~4mroMnE|uY7yVyV3A5k; literal 0 HcmV?d00001 diff --git a/src/dbtest/src/odbc.cc b/src/dbtest/src/odbc.cc new file mode 100644 index 00000000..f90ba647 --- /dev/null +++ b/src/dbtest/src/odbc.cc @@ -0,0 +1,66 @@ +#include +#include +#include +#include +void exec_sql() { + SQLHENV m_hEnviroment; + SQLHDBC m_hDatabaseConnection; + SQLHSTMT m_hStatement; + SQLRETURN ret; + SQLLEN length; + // get env + ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "get env failed" << std::endl; + } + + SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); + // get conn + ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "get conn failed" << std::endl; + } + // connect + //SQLCHAR* sqlwcaDsnName = "MySQL-test"; + //SQLCHAR* sqlwcaUserName = "test123"; + //SQLCHAR* sqlwcaPassWord = "Ly.123456"; + + ret = SQLConnect( m_hDatabaseConnection + ,(SQLCHAR*)"MySQL-test", SQL_NTS + ,(SQLCHAR*)"test123", SQL_NTS + ,(SQLCHAR*)"Ly.123456", SQL_NTS); + + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "connected failed" << std::endl; + } + // get stmt + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "get stmt failed" << std::endl; + } + // execute sql + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"SELECT * FROM sbtest1", SQL_NTS); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "get stmt failed" << std::endl; + } + // get row + ret = SQLFetch(m_hStatement); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "get row failed" << std::endl; + } + + SQLINTEGER sqlnID; + // parse result + SQLGetData(m_hStatement, 1, SQL_C_LONG, &sqlnID, 0, &length); + + std::cout << sqlnID << std::endl; + SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement); + SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection); + SQLFreeHandle(SQL_HANDLE_ENV, m_hEnviroment); + +} + +int main() { + exec_sql(); + return 0; +} From 2afc053ceced26fe29577dac7ed96e3edd977091 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Fri, 29 Jan 2021 11:21:18 +0800 Subject: [PATCH 08/81] Support transation processing --- .gitignore | 2 +- .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 20784 -> 0 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 20800 -> 0 bytes .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 ---------------- src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 20880 -> 0 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 ---------------- .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 20888 -> 0 bytes .../CMakeFiles/3ts_dbtest.dir/build.make | 114 ---- .../CMakeFiles/3ts_dbtest.dir/depend.make | 2 - .../CMakeFiles/3ts_dbtest.dir/flags.make | 8 - .../CMakeFiles/3ts_dbtest.dir/progress.make | 3 - src/dbtest/CMakeFiles/CMakeOutput.log | 548 ------------------ src/dbtest/CMakeFiles/Makefile2 | 108 ---- src/dbtest/CMakeFiles/Progress/1 | 1 - src/dbtest/CMakeFiles/cmake.check_cache | 1 - .../CMakeFiles/dbtest.dir/CXX.includecache | 58 -- src/dbtest/CMakeFiles/dbtest.dir/build.make | 114 ---- .../CMakeFiles/dbtest.dir/depend.internal | 9 - src/dbtest/CMakeFiles/dbtest.dir/depend.make | 9 - src/dbtest/CMakeFiles/dbtest.dir/flags.make | 8 - .../CMakeFiles/dbtest.dir/progress.make | 3 - .../CMakeFiles/dbtest.dir/src/db_test.cc.gcda | Bin 28484 -> 0 bytes .../CMakeFiles/dbtest.dir/src/db_test.cc.gcno | Bin 281892 -> 0 bytes .../dbtest_core_static.dir/CXX.includecache | 34 -- .../dbtest_core_static.dir/build.make | 114 ---- .../dbtest_core_static.dir/depend.internal | 7 - .../dbtest_core_static.dir/depend.make | 7 - .../dbtest_core_static.dir/flags.make | 8 - .../dbtest_core_static.dir/progress.make | 3 - .../src/db_test.cc.gcno | Bin 1260 -> 0 bytes src/dbtest/CMakeFiles/feature_tests.bin | Bin 20744 -> 0 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 -- src/dbtest/CMakeFiles/feature_tests.cxx | 405 ------------- src/dbtest/CMakeFiles/progress.marks | 1 - src/dbtest/config/gflags.conf | 8 +- src/dbtest/dbtest | Bin 798408 -> 0 bytes src/dbtest/src/db_test.cc | 259 +++++++-- src/dbtest/src/db_test.h | 118 ++-- src/dbtest/src/odbc | Bin 43569 -> 0 bytes src/dbtest/src/odbc.cc | 32 +- src/dbtest/test.cc | 7 + 41 files changed, 310 insertions(+), 2721 deletions(-) delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log delete mode 100644 src/dbtest/CMakeFiles/Makefile2 delete mode 100644 src/dbtest/CMakeFiles/Progress/1 delete mode 100644 src/dbtest/CMakeFiles/cmake.check_cache delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno delete mode 100755 src/dbtest/CMakeFiles/feature_tests.bin delete mode 100644 src/dbtest/CMakeFiles/feature_tests.c delete mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx delete mode 100644 src/dbtest/CMakeFiles/progress.marks delete mode 100755 src/dbtest/dbtest delete mode 100755 src/dbtest/src/odbc create mode 100644 src/dbtest/test.cc diff --git a/.gitignore b/.gitignore index e611002d..278991cf 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ core* 3ts rundb runcl -dbtest +3ts_dbtest *.swp CMakeCache.txt CMakeFiles/* diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin b/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index b01e72d7cefa69326618a19c0a3f1407599ccd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20784 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 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c deleted file mode 100644 index 444e4093..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c +++ /dev/null @@ -1,508 +0,0 @@ -#ifdef __cplusplus -# error "A C++ compiler has been selected for C." -#endif - -#if defined(__18CXX) -# define ID_VOID_MAIN -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(SDCC) -# define COMPILER_ID "SDCC" - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} -#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out deleted file mode 100755 index df37a0ba458edea0f27a40f4181672bcb68fb975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20880 zcmeHPeQX@X6`#9{6Q>DhCtzv_ZI%`!$Kdq`iE(HHd$!MBgA=>4!$*VJtnb$LDd#)) zZm)HaTB0Vc2#)R8>ix652niAQkZksT5kGMkRCX+#@}&i?|4*$6s9#Kte;=26lF1tp0U#ye?q|&Qq4s-@)To4 zN$)G5hvmH7KyKeI^9%CJQCUBt;7aT5-Cun?dFO2dPv0~-_hLs)Js1KL9w3@A_TN1T4hyWFq=1Qj3Q zRe-Ja!IOX~KKOV5&Y<2YtY$Ye42&B^+br0|teMHN!Qr9aKBG(RQa3SUXnd=YwhGpC zrf6G*@vVK?e9js-C$ko4PS56ZQqvHkzJgdV;gJY<1N}kmR=PH`5_z9P5eTR6&^X0D zfN~VhI&ktW^3FSO^gD%%4xIWH@j@DUAoM`!fzSh?2SN{o9tb@UdLZ<`f7SzUHGKX( zec!oy{XpF-?TqOUAGM?9lls2n^-DY>bV2AmyeXg8JKwD8DqNHmu*z)fe?cTV6oBhwA=-Wb;M439_1!S*gOLytVCzi`RE3Jh$K2I|YFryADxSM@Rfy;~-L%}Q79 z&=<~}eXv|EKUa4bAd!isMaT!Fs|7^)*B(W|g>RnI7fPp3B;UvK=m(l2pmHF2PJdF5 zoNPG48h&#$l6)WVH{sLV4}ZlE=YkDK_G<85Ei4>JzCW=9g%%FN{1f*KExeStduZW8 zVn<@(gT(mop&OsRnXw)Ep*Eyr!yC?E8=W1wR4(hsK8V@tJ71Rm8eVvBc;Q0-!W)V5 zRj2fQOA&qZpG$wo_S-p;xIZzGcpzacExPNAEsOc`cCWNF);bKK2SN{o9tb@UdLZ;b z=z-7!p$9?_gdPYz@c-(8NM!}ozlKBG21ag6LKz9Kx zoG+Jcpyz--0rdVi%jHu*as3xV`G#PLHUMv|`4lPT@ zTMpLg@s3B9>+zm_D+c3QF5Z)fcO>F1y>X>C-rO5+?2Xs+^86Ci=fMu;jpo7-dLZ;b z=z-7!p$9?_gdPYz5PBf=Kx?vglcisgayVTG2Lr&-Fw;xkW^Kj5>Er{j_@)ju&p`^tj~puoB{hJvKu zk#w-H?>40c<^wh;J?brLr_$BYxw*5mt5a#&Zlx97v<2R_X#+!_<2N^M6dp|65V>Wh zXET0(E3!`zt&vMzrd;td<*dt;`;?Ur`<%;vW@p8BBhrU{GQ=ZVq58@MDk8OoP zv{zlBl*?su)5>%z{P8&d^y)-vYunH+4w2bs$F z$Mss5uLW!kpli?o24PRsuV9(k%rqaGg4$|Sw)YN6z5Wl|>f>)K>TmdORD+3D-~J|e z{{7AG-lg^>>L)|b)T?D*@ROnEEL*Gb?&c@6OX}l3E(}3^54U?^ct_Gty6@qA`Ck|( z`1tehj1#E%agP%Lea}^g59@m$RllaM{0}@kss9r7yC;Z8)K7-)yLBIO|IvL{C+|PJ ze}X~`9tMY_S`9k}Yc$7w@fbVni!WpKF+V$XjNXHtnZ)3U_mr>v3g-8o8iR){z2Ca+ ztYq|_?8c#&NFTZJRh9P`H@=!x#w`aUhEH}yb08ubWAV!WEjpPo7#*JXm2YJ9z2TN$ z!{|H1jjv^X@5wQE6QTcubIZeOl%_c$9*@D-MYAt{HS6)kKU-r1ff#(PXuC8Q4<0@6 ze~@qTcN`~U3nrqg7`@vOZ)*TlnohTl+34IUk<=0B<`*6eu;bQ z`wZZI{p49GPtSPr&+jEp;~?R$NZi|w?*`ya_^|e=S62W&7J%mi@W%r1!vXm3B<`*6 zs}esW-*KqEk!7O%UR;s5*FReT_w%z3cohD7ewSxFyi?+f9(+RLCp~x(@CbZ?(71u! z3B$KJUOSFGBkeFxy`JUrwd3KR0QW0@P`&=f?KH6c*K52S&WoR&cR(J$YQ5v_a(ID? zu-fsqfxlSQmh%f7uO0t4aXYo+@Lhnf1^?rJFks;7KzBk!LBJD!!tvU1`x}5a!gx;p zC$$}buZ`9|zrKYy2|4JGq#f^b;TM1_4mpbc3h*`2D_Fgv5ya_ph&!H-+`Yhgk>gFQ zMHBM)9)sbpfTJI%|62lP;;Y~zdJXtT z@#K3A;Ar3Lw;KV+^3XR3--7|RTG39l*3aF5D>5%9d7YQD_I+a%?SOwY>9;PaG{NyE z*5N59YcCZGc<4Yo%zCuLX#+<0#cfH*_cRk&_T0gk?KK^hEa09h|aSPS@$Ia(P04mr{AG&2c{&F+90k_|b zbXGXcv@JZI0i8IPu|!d-4HYDY{m9BrwefD2AFC<=Skw2a7#74&*4+kf`5>N;?>&mO zey>2~0SXqX_45r1QpfHa}@*jkKLF6b-X9&v2Jr*0Qa%dTZC_js8Lg z=3$tHg1HB(X&3e|G2xgl&Cc!t6-SEK)Fs-t)!c3M^~ueALun|UVGL|fY)u-;ZT$uu z4C2;FGo$~$ZHcWzeQu8Mo?*c3zme3X1-*YeGX{r8dK1IO$iTo@a@-hC^bRM{DnGXb zy^E#)@RLfcv}v29!ZYGWooJfttP=yJ#Cawl>ptAXNEh?QjG0U0!6!o_AeGMKj8f4` zvrKL(Z_w65%7j{-1>9vqi?%?5)?~3Lv*w4e7zUiRLJq`3SbR@b;aSV=k-{SGc4SN~ z?wPgCNuYK?&>4#HDP$O~b1=89PUlMMWGMsZ-(=w4%=5BLRGBc%Lk z9;Y6^OCV7B>HUk|=LDCrZ4kjVP12|No))P;F9qSXhu59-Y5nqUz)_U+pNeUa!u3>6 zD(j{qC2UX}=>zb?HBZu~`J=e3D9#sRpz@O((cQqqHB?H|JX5pOS5O&(xBLQS>_Ld2 zDCyIDRFBl(B?T#eZ~gZJANvp5=YhVv_yQb*6VKd1nyrA3Ld>a8@5PGLe-W9EAmIwK z2r;KV&4XQ(3q~|wOA6lne<1a#{+0PMMQA)uijqpWg8mp{m_O-P&jS-88!M6`;>{oT zHaqoc{_S~1$R8D?awY#0a0DW8_{r{8nWv-k!o2d7Ci+{@#Wexar|(N$1rP$siBvUB z_#c6RZBP0%??>mc(Yb5XKS+<-@g>m3`jbA*51y7EMhftpf%J)<0;W?RKE#B0hahyH zid1d+&j7=zPv4czQePoONhx1~UxNr@RDSwS>yi3idCbch&O-t*DPCcb{>>FcL`a|L zy8zRk3zVRF&a^bRnl@Yrb$+kQC?{x#`mPh7+bmLtr9SQ}8HFF!hy03cs=Lq-*XBM! ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 721698c5..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__COMO__) -# define COMPILER_ID "Comeau" - /* __COMO_VERSION__ = VRR */ -# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) -# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) - -#elif defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out deleted file mode 100755 index f0380648c5053dc778459644ff0b04275b5e1716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20888 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 CMakeFiles/3ts_dbtest.dir/src/db_test.cc.i - -CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s - -CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires: - -.PHONY : CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires - -CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides.build -.PHONY : CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides - -CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o - - -# Object files for target 3ts_dbtest -3ts_dbtest_OBJECTS = \ -"CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o" - -# External object files for target 3ts_dbtest -3ts_dbtest_EXTERNAL_OBJECTS = - -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/build.make -3ts_dbtest: /usr/local/lib/libgflags.so.2.2.2 -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable 3ts_dbtest" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_dbtest.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/3ts_dbtest.dir/build: 3ts_dbtest - -.PHONY : CMakeFiles/3ts_dbtest.dir/build - -CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires - -.PHONY : CMakeFiles/3ts_dbtest.dir/requires - -CMakeFiles/3ts_dbtest.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/3ts_dbtest.dir/cmake_clean.cmake -.PHONY : CMakeFiles/3ts_dbtest.dir/clean - -CMakeFiles/3ts_dbtest.dir/depend: - cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/3ts_dbtest.dir/depend - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make deleted file mode 100644 index ce418f73..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make +++ /dev/null @@ -1,2 +0,0 @@ -# Empty dependencies file for 3ts_dbtest. -# This may be replaced when dependencies are built. diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make deleted file mode 100644 index a72c49ae..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make deleted file mode 100644 index abadeb0c..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_PROGRESS_1 = 1 -CMAKE_PROGRESS_2 = 2 - diff --git a/src/dbtest/CMakeFiles/CMakeOutput.log b/src/dbtest/CMakeFiles/CMakeOutput.log deleted file mode 100644 index cbaa8ef4..00000000 --- a/src/dbtest/CMakeFiles/CMakeOutput.log +++ /dev/null @@ -1,548 +0,0 @@ -The system is: Linux - 5.4.32-1-tlinux4-0001 - x86_64 -Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. -Compiler: /usr/bin/cc -Build flags: -Id flags: - -The output was: -0 - - -Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - -The C compiler identification is GNU, found in "/data1/farrisli/3TS-DBTest/CMakeFiles/3.3.2/CompilerIdC/a.out" - -Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. -Compiler: /usr/bin/c++ -Build flags: -fPIC -Id flags: - -The output was: -0 - - -Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - -The CXX compiler identification is GNU, found in "/data1/farrisli/3TS-DBTest/CMakeFiles/3.3.2/CompilerIdCXX/a.out" - -Determining if the C compiler works passed with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_19748/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_19748.dir/build.make CMakeFiles/cmTC_19748.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_19748.dir/testCCompiler.c.o -/usr/bin/cc -o CMakeFiles/cmTC_19748.dir/testCCompiler.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCCompiler.c -Linking C executable cmTC_19748 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_19748.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_19748.dir/testCCompiler.c.o -o cmTC_19748 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Detecting C compiler ABI info compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_cec3a/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_cec3a.dir/build.make CMakeFiles/cmTC_cec3a.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -/usr/bin/cc -o CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c -Linking C executable cmTC_cec3a -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cec3a.dir/link.txt --verbose=1 -/usr/bin/cc -v CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -o cmTC_cec3a -rdynamic -Using built-in specs. -COLLECT_GCC=/usr/bin/cc -COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-redhat-linux -Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux -Thread model: posix -gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) -COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64' - /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRVGoVg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_cec3a /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64' -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Parsed C implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] - ignore line: [] - ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_cec3a/fast"] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_cec3a.dir/build.make CMakeFiles/cmTC_cec3a.dir/build] - ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] - ignore line: [Building C object CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] - ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c] - ignore line: [Linking C executable cmTC_cec3a] - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cec3a.dir/link.txt --verbose=1] - ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -o cmTC_cec3a -rdynamic ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/cc] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] - ignore line: [Thread model: posix] - ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRVGoVg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_cec3a /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccRVGoVg.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_cec3a] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting C [-std=c11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_4fe4f/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_4fe4f.dir/build.make CMakeFiles/cmTC_4fe4f.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_4fe4f -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4fe4f.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -o cmTC_4fe4f -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:1c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c99] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_1ba76/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_1ba76.dir/build.make CMakeFiles/cmTC_1ba76.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_1ba76 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ba76.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -o cmTC_1ba76 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c90] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_abea6/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_abea6.dir/build.make CMakeFiles/cmTC_abea6.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_abea6 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_abea6.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -o cmTC_abea6 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:0c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:0c_variadic_macros -Determining if the CXX compiler works passed with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_14d92/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_14d92.dir/build.make CMakeFiles/cmTC_14d92.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx -Linking CXX executable cmTC_14d92 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_14d92.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -o cmTC_14d92 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Detecting CXX compiler ABI info compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp -Linking CXX executable cmTC_dcf1b -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic -Using built-in specs. -COLLECT_GCC=/usr/bin/c++ -COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-redhat-linux -Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux -Thread model: posix -gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) -COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' - /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o -COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Parsed CXX implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] - ignore line: [] - ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast"] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build] - ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] - ignore line: [Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] - ignore line: [/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Linking CXX executable cmTC_dcf1b] - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] - ignore line: [Thread model: posix] - ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccdsGisy.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_dcf1b] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting CXX [-std=c++14] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_4a014/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_4a014.dir/build.make CMakeFiles/cmTC_4a014.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++14 -o CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_4a014 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4a014.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -o cmTC_4a014 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:1cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:1cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:1cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:1cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:1cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:1cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:1cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:1cxx_relaxed_constexpr - Feature record: CXX_FEATURE:1cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:1cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_3d352/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_3d352.dir/build.make CMakeFiles/cmTC_3d352.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++11 -o CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_3d352 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3d352.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -o cmTC_3d352 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++98] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_7bf6e/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_7bf6e.dir/build.make CMakeFiles/cmTC_7bf6e.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++98 -o CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_7bf6e -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7bf6e.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -o cmTC_7bf6e -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:0cxx_alias_templates - Feature record: CXX_FEATURE:0cxx_alignas - Feature record: CXX_FEATURE:0cxx_alignof - Feature record: CXX_FEATURE:0cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:0cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:0cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:0cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:0cxx_default_function_template_args - Feature record: CXX_FEATURE:0cxx_defaulted_functions - Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:0cxx_delegating_constructors - Feature record: CXX_FEATURE:0cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:0cxx_enum_forward_declarations - Feature record: CXX_FEATURE:0cxx_explicit_conversions - Feature record: CXX_FEATURE:0cxx_extended_friend_declarations - Feature record: CXX_FEATURE:0cxx_extern_templates - Feature record: CXX_FEATURE:0cxx_final - Feature record: CXX_FEATURE:0cxx_func_identifier - Feature record: CXX_FEATURE:0cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:0cxx_inheriting_constructors - Feature record: CXX_FEATURE:0cxx_inline_namespaces - Feature record: CXX_FEATURE:0cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:0cxx_local_type_template_args - Feature record: CXX_FEATURE:0cxx_long_long_type - Feature record: CXX_FEATURE:0cxx_noexcept - Feature record: CXX_FEATURE:0cxx_nonstatic_member_init - Feature record: CXX_FEATURE:0cxx_nullptr - Feature record: CXX_FEATURE:0cxx_override - Feature record: CXX_FEATURE:0cxx_range_for - Feature record: CXX_FEATURE:0cxx_raw_string_literals - Feature record: CXX_FEATURE:0cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:0cxx_right_angle_brackets - Feature record: CXX_FEATURE:0cxx_rvalue_references - Feature record: CXX_FEATURE:0cxx_sizeof_member - Feature record: CXX_FEATURE:0cxx_static_assert - Feature record: CXX_FEATURE:0cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:0cxx_thread_local - Feature record: CXX_FEATURE:0cxx_trailing_return_types - Feature record: CXX_FEATURE:0cxx_unicode_literals - Feature record: CXX_FEATURE:0cxx_uniform_initialization - Feature record: CXX_FEATURE:0cxx_unrestricted_unions - Feature record: CXX_FEATURE:0cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:0cxx_variadic_macros - Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 deleted file mode 100644 index 7980d19a..00000000 --- a/src/dbtest/CMakeFiles/Makefile2 +++ /dev/null @@ -1,108 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# The main recursive all target -all: - -.PHONY : all - -# The main recursive preinstall target -preinstall: - -.PHONY : preinstall - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -#============================================================================= -# Target rules for target CMakeFiles/3ts_dbtest.dir - -# All Build rule for target. -CMakeFiles/3ts_dbtest.dir/all: - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/depend - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2 "Built target 3ts_dbtest" -.PHONY : CMakeFiles/3ts_dbtest.dir/all - -# Include target in all. -all: CMakeFiles/3ts_dbtest.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/3ts_dbtest.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 2 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_dbtest.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 -.PHONY : CMakeFiles/3ts_dbtest.dir/rule - -# Convenience name for target. -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/rule - -.PHONY : 3ts_dbtest - -# clean rule for target. -CMakeFiles/3ts_dbtest.dir/clean: - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/clean -.PHONY : CMakeFiles/3ts_dbtest.dir/clean - -# clean rule for target. -clean: CMakeFiles/3ts_dbtest.dir/clean - -.PHONY : clean - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/src/dbtest/CMakeFiles/Progress/1 b/src/dbtest/CMakeFiles/Progress/1 deleted file mode 100644 index 7b4d68d7..00000000 --- a/src/dbtest/CMakeFiles/Progress/1 +++ /dev/null @@ -1 +0,0 @@ -empty \ No newline at end of file diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd731..00000000 --- a/src/dbtest/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache deleted file mode 100644 index 3a2a14bd..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache +++ /dev/null @@ -1,58 +0,0 @@ -#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS/src/dbtest/src/db_test.cc -db_test.h -/data1/farrisli/3TS/src/dbtest/src/db_test.h -gflags/gflags.h -/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h -iomanip -- -cstdlib -- -fstream -- -cassert -- - -/data1/farrisli/3TS/src/dbtest/src/db_test.h -iostream -- -sql.h -- -sqlext.h -- -sqltypes.h -- -vector -- -unordered_map -- - -/usr/local/include/gflags/gflags.h -string -- -vector -- -gflags/gflags_declare.h -/usr/local/include/gflags/gflags/gflags_declare.h -gflags_gflags.h -/usr/local/include/gflags/gflags_gflags.h - -/usr/local/include/gflags/gflags_declare.h -string -- -stdint.h -- -sys/types.h -- -inttypes.h -- - -/usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/build.make b/src/dbtest/CMakeFiles/dbtest.dir/build.make deleted file mode 100644 index cce240c4..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/build.make +++ /dev/null @@ -1,114 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -# Include any dependencies generated for this target. -include CMakeFiles/dbtest.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/dbtest.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/dbtest.dir/flags.make - -CMakeFiles/dbtest.dir/src/db_test.cc.o: CMakeFiles/dbtest.dir/flags.make -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS/src/dbtest/src/db_test.cc - -CMakeFiles/dbtest.dir/src/db_test.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest.dir/src/db_test.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i - -CMakeFiles/dbtest.dir/src/db_test.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s - -CMakeFiles/dbtest.dir/src/db_test.cc.o.requires: - -.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - -CMakeFiles/dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build -.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.provides - -CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest.dir/src/db_test.cc.o - - -# Object files for target dbtest -dbtest_OBJECTS = \ -"CMakeFiles/dbtest.dir/src/db_test.cc.o" - -# External object files for target dbtest -dbtest_EXTERNAL_OBJECTS = - -dbtest: CMakeFiles/dbtest.dir/src/db_test.cc.o -dbtest: CMakeFiles/dbtest.dir/build.make -dbtest: /usr/local/lib/libgflags.so.2.2.2 -dbtest: CMakeFiles/dbtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/dbtest.dir/build: dbtest - -.PHONY : CMakeFiles/dbtest.dir/build - -CMakeFiles/dbtest.dir/requires: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - -.PHONY : CMakeFiles/dbtest.dir/requires - -CMakeFiles/dbtest.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/dbtest.dir/cmake_clean.cmake -.PHONY : CMakeFiles/dbtest.dir/clean - -CMakeFiles/dbtest.dir/depend: - cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/dbtest.dir/depend - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal deleted file mode 100644 index 0da98cf7..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal +++ /dev/null @@ -1,9 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest.dir/src/db_test.cc.o - /data1/farrisli/3TS/src/dbtest/src/db_test.cc - /data1/farrisli/3TS/src/dbtest/src/db_test.h - /usr/local/include/gflags/gflags.h - /usr/local/include/gflags/gflags_declare.h - /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.make b/src/dbtest/CMakeFiles/dbtest.dir/depend.make deleted file mode 100644 index 9b68b733..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.make +++ /dev/null @@ -1,9 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_declare.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/flags.make b/src/dbtest/CMakeFiles/dbtest.dir/flags.make deleted file mode 100644 index a72c49ae..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/progress.make b/src/dbtest/CMakeFiles/dbtest.dir/progress.make deleted file mode 100644 index abadeb0c..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/progress.make +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_PROGRESS_1 = 1 -CMAKE_PROGRESS_2 = 2 - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda deleted file mode 100644 index 0f7e8c95ccac73424a9e1e4223834a0e80453a63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28484 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 diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno deleted file mode 100644 index 8e0483c06a5a0d188df1e5d5a54a23237bfc40c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281892 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]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS-DBTest/src/db_test.cc -db_test.h -/data1/farrisli/3TS-DBTest/src/db_test.h -iomanip -- -cstdlib -- -libconfig.h++ -- - -/data1/farrisli/3TS-DBTest/src/db_test.h -vector -- -libconfig.h++ -- -iostream -- - -include/libconfig.h++ -stdio.h -- -exception -- -string -- - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make deleted file mode 100644 index fa470236..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make +++ /dev/null @@ -1,114 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest - -# Include any dependencies generated for this target. -include CMakeFiles/dbtest_core_static.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/dbtest_core_static.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/dbtest_core_static.dir/flags.make - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: CMakeFiles/dbtest_core_static.dir/flags.make -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires: - -.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build -.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o - - -# Object files for target dbtest_core_static -dbtest_core_static_OBJECTS = \ -"CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - -# External object files for target dbtest_core_static -dbtest_core_static_EXTERNAL_OBJECTS = - -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/build.make -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libdbtest_core_static.a" - $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest_core_static.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/dbtest_core_static.dir/build: libdbtest_core_static.a - -.PHONY : CMakeFiles/dbtest_core_static.dir/build - -CMakeFiles/dbtest_core_static.dir/requires: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - -.PHONY : CMakeFiles/dbtest_core_static.dir/requires - -CMakeFiles/dbtest_core_static.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake -.PHONY : CMakeFiles/dbtest_core_static.dir/clean - -CMakeFiles/dbtest_core_static.dir/depend: - cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/dbtest_core_static.dir/depend - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal deleted file mode 100644 index 44bfc02c..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal +++ /dev/null @@ -1,7 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o - /data1/farrisli/3TS-DBTest/src/db_test.cc - /data1/farrisli/3TS-DBTest/src/db_test.h - include/libconfig.h++ diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make deleted file mode 100644 index f5b45059..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make +++ /dev/null @@ -1,7 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.h -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: include/libconfig.h++ - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make deleted file mode 100644 index 60ef1fd8..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make deleted file mode 100644 index 8c8fb6fb..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_PROGRESS_1 = 3 -CMAKE_PROGRESS_2 = 4 - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno deleted file mode 100644 index f658c158ecb4ec4b0fa763bc0c07698045b5d327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmd5*yGlbr5Z#S2f)CIXHa0d28gvb@NTnn(iV_htHi9ghy-^mDn{XeEA0hsLUtnir z5ep0TC#>ugf5JKUAsQ_5uyA1S?984y%ssQ)vi134E??L_eq81(Fg{1FZDlrJubqXB z+s?xn#d4=|P%KoWbp4v#l~zr9b=O7EmESipCmfiLFy-!m-psi=Q)3>pgGb%e2X!?)@} zXEGu$Op8WVS53AD(3gd^&;ZtNE$%clf(?5QXNlv(X{Q#i?r+}SPhap>n#$PVhV{!o ePBr+iUf(n39lz&LkKf;MI>M0~sHbTZM)nEC;L#ia diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin deleted file mode 100755 index 278f070a547e2715934a68da6cf6885e9f5ba075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20744 zcmeHPeT*B$6(65-$w3m|1(J{wM2rgU5y;*LNw`1*_I>*3C4uAup)_pv?6q%+y*}1! zxS&=b5)cOsxmJQA{s^rqs(|=|wgR>4*U_XvrBVf{K&5~bzS`qUO`*_0A?|xK^K9>W z_7YK1sN_k`Z|C>kn~yhdW@l$-=jOhl{)SM9QD|V7FpNc8VjL2`j5S@xqY~?4b6Jd? z!IrYwfXsrw80R1rS42k}1cPXklnVnzy?v6uuOS98jK`2b+9D985+X&tN{GozK@(UY z2t-+nh@)O3UdlL=^&|S2%z!A#mGg_DGK6T16QW0Cg@{(`VNqH%A>ML{&?7oe*1JVg z(!(g~MWtR;>JgoiM4RB>0h!)`h8V;!9z()<`EP}yEQZTpcT;$M^s77yG{!H8 zt`smMN_tm-o;0~cibkEo2YwyZU>dSzQSwIXZT#qky6U8`5DUa1xG zS|_jfLdYI{YGD0lmU(l}%AYMiFgbs;=eN(#S+e(q@80_^mK)1}>7fh;lqd7!HTnng zv0isvaaLp0+|`O0+BgD#-F?r!eceet&;Rn(?|p0DMc<$M$k$(;y6)!tztuT%=$*e@ zzvYZW&%C;K{=!%Gf@ok^2ArsZdm~_{C~z!uRDoX{fKLG4!WOYJVlj`_0}@~2!yn=J zVsK}#{0{+-LOOo=Nx&Dd`M?zN;Sces>~C!xW$Y(FTiD{7 za{gM%x65=)DgTVbe;{#e7aqVb3T`TS-g)Q?tC_B6a(P=XxQ65EI@1S-*Xb$KF*8=d zHJ#ygJ=wf%4jUs`Q}C1=NHZsrgR4w3sTVNT!625TZ17rUlQS%v>1N7s4M=nYpef7N ziv=?U#X(fafryRBNTEQ0&QnPiin?W6F7V3nGyrU1Xt29S@6BeLEyEB-2&6NL?_GRN>e+C>*WAsqKkZr*#X|El{^W-2!zB z)GbiAK-~ggd<(qSeC9`qoo_cK?rMA)=H`jprrd_o!Nkr3P5XJ_k>Byo;KZ}nCMI4< z?0oIW<->zdP2ns&@zfJINl!fW6wdiei|z;Ye@>$O{n@sFp`wL8WcjHfy ztU2l~f~?XqtCLEHo0r{!g8L-}`3Ww+>Q*G@9!orNES#7)l6YeJ(nRRV#IwiTg^<8n znLtzNaJqR}Z$%&Tzh!M4*sOT!=ETJ7(>Ik$r6(KP010i~KMDDObfthO|JI!-IPvX| z6BETFclCXoxG%ALQMj40=ErBXH2-F5YgL6%K7Q5U#0&8&2PZy=Z;nrV5+5Ggea?aN z8QYxLy#nc`p>tnHn@&G)tW-)o@k!WS)^SMIZ)oD9p@|QAC;lEUEqpPtbAKqY=B47B zXzy#b#=jZg8oxHK@1OLR4_gBBOa|VW8LkPh)zU^W>+)AumXWn? zGM&Q7wenfZDCn-48_R-{S|DQ^L5zG_k)-Q7)<{vE8u6fbV~&}GJX4Akif&$acZ`{} ztP#sLoE`8Y4qg`;Sw*puc^h6Oj*mIDy1)XCTQssdT;2fout2z0E@dXO>fDK=8&JYv zMX-4?4;D3{8649sIySG3GAq$Y>7t!wm%qV0jsv93Ec%OO zXV54G*C{65yvkEh5L#=-jIE62>IHMma13=Krd`bG>AZ8J;iSL?l3A2gw*s_b)=ENp zGqx49C%m@BVmTIE95+pHn~ISYwu2YDMz*$P(b~F|GHusNTc*OdGNz3V3B4?J9D{R7 zE2(FV+(=5*u`GMkbgUC-5zB_n7N%|+IkPZkBvrjPFcZPxMb(qW82G4CJ)eZmf_>q5 zjtTGWGdllK_Z&NKjwj7Ax7M^adL1}HQqP&W5!2yiQiv6^*)dmPd2n&Zfu^ZdaSS_S zqPMA7H^NJP2faRcC~?d*Y)!C}rhYw)8QAbMdcR|4jd2j+-AFwGRSgElhaJa^^UrWzn{h`II?BlYs=ZcdpU} z`RG!cVbKPEhxSk6hz3f^`v7baac0Qt2E(y%r%KrXUL*0_F_%f9ZyQM`Ka&8Nvv4xr z=|fAy7vr8T+(*+oT`FA;bPLcF(8wF5(m2pAp!WgY2lOyd47kqJ|vHfZShsQ0~{Hy@Gx!cFBbnpqI|bW95z|F~;mzU>h zDGx87d7SKWM8+SMe5wAq5!zR-D!@Qb&qdKz*e!i-v`f1{>xg!?cdY5?=Es^Gv~p>LUOwfPwa(J#!mI{mM7Etn3H!+{yc-7 zpT-g4Z_E2PY#bi!znYa$ZLvr9Jidz>ma*cSHuZtjhV`3(?<>z7+W*g0c^S__bNkcE z=U}}cjZY!^Sl)uw9tUK~W1Ohl>{9?+0O$ft0E0+R)DNCgvR1}MIH;{Im+ie-QosG{ zZB-fPrENd+wjzJSPo)OpYJU?vwZCBj{r#KTm#9jH?wgCHFQ{bbUizrKr>bPONqzc0 zBgpsYyNd^9TA#P?VZZzg#tA@(mZGlnn>TKgJeH8Np%7jr;~huO3epT(NOs&pF5^WEx9 z!f@A{lJjCOK8LC1qhYww(md8He-fkluonkUk#_RpmG8g2_&i2qmlp?*jmD}WejSFd z@aVh5YGxQli1t>Md<&!J3a|VEM$Z#o{1m2|4~JnkLf=n$R?Oi;;%8jOKU5TNi*E5~q1N$rl6g-2wQI18}~3 z7|P>M|4@MZzXI@iSYbsv=SZC9N~n%ut;Fe`Dp1C*4oIgMfZr2jpH?yv7IiTmsO5a235c}&XFeV**|2Z_^INchVV_qXGR0r(=kVJqs@8GvsJ z!1Dq4o&bDb0RDT4`|JCf#P9Kq*`ZmY{C+$tald`m0f+PrbZ1{oDk5~)uw5c z{~!s+2P7T0L(4Nwu3+%Dcv{jQ=ih1jWVF$|tCCaUS`prxZ#T0$lnOyi4b}%7w>YL$ z3gBtxID9tlD=HS>#{hMF{|zsY^U3P^dU0>Py*zI{y*!?w$39-Z!X91$o?R|>1cCQH3+PuP3+q=T|*}B3|*%{t~!*L395JHW8eQb|?e1|5? zpo?cJXs8RrK*24h)6f+vXG7?24i+Ebbch0;+K|^X+58CXO-bQCBiN2L&S=L~O1rRg z%}TY9j(Nb=D#zFX)pVU5Oe_|rin-hlP^pS>2k?rT25ysq*Zl>zpurXhrhj9oD=kng zRsY8Lx<0*ceJ`GDp~J$w-j|SIqIV;fsF2r34LgOWTc}-^>AhF4kFOi-0cki5qnsGJ zXt^+WN<|gGI~CIhhBkD^hx85o{hRuR_2GE;P#+XSdF+Ka5yNx##Z1Ru%ydXcrRn*R z7_zl_kzmh*WyfOGr(~#(|4<(B!L-7ToNJ5#bsa%R>58xG!Z>Whg0q&fi`q!hf`ex) z=#(6acMq;`jSS8+sx70lb@|{ApdK37-=n3<*-6$27?}k@awa?-EI$-ZyTM`lDzZ z2r!-Dbtip#Z+Io({E-BOAkaF^lq@K{uM}L723;e)7XI*EBjr!)IS$yoCjjq#(yjGK!5#r0Uu3->GMF(L447i z!AWD@Ak9(+?}V#reVPYHrT%Tw{-hvbin2+cK0RmblP_^-4V4u9`QIz`ss1pr7NSu> z-j~l$BF316Da!EBC@doB(>fQO%Y}Qjs)Ij&-0M`WPwQdrtwL+6S{bg%{scb`7kI{% zbl38_8J*MRm!~+<-+?Z!(~~}}uPxC4gg|m4R*4h-CtzUPlRmA((K%>Svi-&h!}38W3cTt-`b1v@X0?8KU9VkeQ9q?LNRR02K7D%LS|auR?Io*2$+5TK z3e%$U)A?OzoS^;@nZFb-r%U?hml1J6`4jyR;A$78b;pEEa2{=Rkm;!EL%v&`)s{6P vwoU5eehwV#$Zlj;WK-RRhWPz?x1cdqmHyF$kZATP_@eATDXR8; diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c deleted file mode 100644 index 5a17cdba..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.c +++ /dev/null @@ -1,34 +0,0 @@ - - const char features[] = {"" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 -"1" -#else -"0" -#endif -"c_function_prototypes\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_restrict\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L -"1" -#else -"0" -#endif -"c_static_assert\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_variadic_macros\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx deleted file mode 100644 index 54f83f04..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.cxx +++ /dev/null @@ -1,405 +0,0 @@ - - const char features[] = {"" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_aggregate_default_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alias_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignof\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_attributes\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_attribute_deprecated\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_auto_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_binary_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_contextual_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_decltype\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_decltype_auto\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_decltype_incomplete_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_default_function_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_move_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_delegating_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_deleted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_digit_separators\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_enum_forward_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_explicit_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_extended_friend_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_extern_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_final\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_func_identifier\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_generalized_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_generic_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_inheriting_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_inline_namespaces\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_lambda_init_captures\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_local_type_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_long_long_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_noexcept\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_nonstatic_member_init\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_nullptr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_override\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_range_for\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_raw_string_literals\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_reference_qualified_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_relaxed_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_return_type_deduction\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_right_angle_brackets\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_rvalue_references\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_sizeof_member\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_static_assert\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_strong_enums\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus -"1" -#else -"0" -#endif -"cxx_template_template_parameters\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_thread_local\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_trailing_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unicode_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_uniform_initialization\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unrestricted_unions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_user_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_variable_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_macros\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_templates\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks deleted file mode 100644 index 0cfbf088..00000000 --- a/src/dbtest/CMakeFiles/progress.marks +++ /dev/null @@ -1 +0,0 @@ -2 diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf index 3b3486dc..9829942e 100644 --- a/src/dbtest/config/gflags.conf +++ b/src/dbtest/config/gflags.conf @@ -1,5 +1,5 @@ --db_type=mysql --user=test123 --passwd=Ly.123456 --db_name=test +-db_type="mysql" +-user="test123" +-passwd="Ly.123456" +-db_name="test" diff --git a/src/dbtest/dbtest b/src/dbtest/dbtest deleted file mode 100755 index 2cad91be3028f85b2f34563905dbed4687daa3c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798408 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 diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc index a2bf6fc4..ba4e611a 100644 --- a/src/dbtest/src/db_test.cc +++ b/src/dbtest/src/db_test.cc @@ -4,18 +4,22 @@ #include #include #include +#include DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); DEFINE_string(db_name, "test", "create database name"); +DEFINE_int32(conn_pool_size, 3, "db_conn pool size"); +DEFINE_string(isolation, "read-uncommitted", "transation isolation level"); +std::string dash(10, '-'); -std::pair SQLReader::get_txn_id_and_sql(std::string line) { - std::pair txn_id_and_sql; - const auto index = line.find_first_of(" "); +std::pair SQLReader::TxnIdAndSql(std::string line) { + std::pair txn_id_and_sql; + const auto index = line.find(" "); if (index > 0) { - txn_id_and_sql.first = line.substr(0, index); + txn_id_and_sql.first = std::stoi(line.substr(0, index)); txn_id_and_sql.second = line.substr(index + 1); } else { throw "read txn_sql failed, please check format of test file. line:" + line; @@ -23,37 +27,45 @@ std::pair SQLReader::get_txn_id_and_sql(std::string li return txn_id_and_sql; } -TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) { +TestSequence SQLReader::TestSequenceFromFile(std::string& test_file) { std::ifstream test_stream(test_file); - const auto start = test_file.find_last_of("/"); - const auto end = test_file.find_last_of('.'); + const auto start = test_file.rfind("/"); + const auto end = test_file.rfind('.'); std::string test_case_type = test_file.substr(start + 1, end); std::string line; TestSequence test_sequence(test_case_type); + bool is_first_row = true; if (test_stream) { while (getline(test_stream, line)) { - std::pair txn_id_and_sql = SQLReader::get_txn_id_and_sql(line); - TxnSQL txn_sql(txn_id_and_sql.second, txn_id_and_sql.first, test_case_type); - test_sequence.add_txn_sql(txn_sql); + if (is_first_row) { + auto start = line.find(":"); + std::string table_type_str = line.substr(start + 1); + int table_type = std::stoi(table_type_str); + test_sequence.SetTableType(table_type); + is_first_row = false; + } else { + std::pair txn_id_and_sql = SQLReader::TxnIdAndSql(line); + TxnSQL txn_sql(txn_id_and_sql.first, txn_id_and_sql.second, test_case_type); + test_sequence.AddTxnSql(txn_sql); + } } } else { //throw "test file not found"; std::cerr << "test file not found" << std::endl; } - std::vector txn_sql_list = test_sequence.get_txn_sql_list(); return test_sequence; } -bool SQLReader::init_test_sequence_list(std::string& test_path) { - std::cout << "start read test sequence" << std::endl; +bool SQLReader::InitTestSequenceList(std::string& test_path) { + std::cout << dash + "read test sequence start" + dash << std::endl; std::ifstream do_test_stream("./do_test_list.txt"); std::string test_case; if (do_test_stream) { while (getline(do_test_stream, test_case)) { std::string test_file_name = test_case + ".txt"; std::string test_file = test_path + "/" + test_file_name; - TestSequence test_sequence = SQLReader::get_one_test_sequence_from_file(test_file); - SQLReader::add_test_sequence(test_sequence); + TestSequence test_sequence = SQLReader::TestSequenceFromFile(test_file); + SQLReader::AddTestSequence(test_sequence); std::cout << test_file + " read success" << std::endl; } return true; @@ -64,55 +76,236 @@ bool SQLReader::init_test_sequence_list(std::string& test_path) { } } -bool DBConnector::execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { +void DBConnector::ErrInfoWithStmt(SQLHANDLE& m_hStatement, SQLCHAR ErrInfo[]) { + SQLCHAR SQLState[256]; + SQLINTEGER NativeErrorPtr = 0; + SQLSMALLINT TextLengthPtr = 0; + SQLGetDiagRec(SQL_HANDLE_STMT, m_hStatement, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); +} + +bool DBConnector::IsSqlExecuteErr(const std::string& sql, SQLHSTMT& m_hStatement, SQLRETURN ret) { + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { + return false; + } else if (ret == SQL_ERROR) { + SQLCHAR ErrInfo[256]; + DBConnector::ErrInfoWithStmt(m_hStatement, ErrInfo); + std::cerr << "execute sql: '" + sql + "' failed, reason: " << ErrInfo << std::endl; + return true; + } else if (ret == SQL_NEED_DATA) { + std::cout << "SQL_NEED_DATA" << std::endl; + return true; + } else if (ret == SQL_STILL_EXECUTING) { + std::cout << "SQL_NEED_DATA" << std::endl; + return true; + } else if (ret == SQL_NO_DATA) { + std::cout << "SQL_NEED_DATA" << std::endl; + return true; + } else if (ret == SQL_INVALID_HANDLE) { + std::cout << "SQL_NEED_DATA" << std::endl; + return true; + } else if (ret == SQL_PARAM_DATA_AVAILABLE) { + std::cout << "SQL_NEED_DATA" << std::endl; + return true; + } else { + std::cerr << "execute sql: '" + sql + "' failed, unknow error" << std::endl; + return true; + } +} + +bool DBConnector::ExecWriteSql(const std::string& sql, TestResultSet& test_rs, int conn_id) { + SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + if (DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + return false; + } + // execute sql + std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'"<< std::endl; + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + if (DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + return false; + } + // get error info + return true; +} + +bool DBConnector::ExecReadSql2Int(const std::string& sql, TestResultSet& test_rs, int conn_id) { SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get stmt failed" << std::endl; + return false; + } SQLLEN length; - SQLHSTMT m_hStatement = DBConnector::stmt_pool_[conn_id - 1]; + SQLCHAR k[20]={0}, v[20]={0}; // execute sql - std::cout << "execute sql:" + sql + start" << std::endl; + std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'" << std::endl; ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + // parse result + if(!DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + // bind column data + SQLBindCol(m_hStatement, 1, SQL_C_CHAR, (void*)k, sizeof(k), &length); + SQLBindCol(m_hStatement, 2, SQL_C_CHAR, (void*)v, sizeof(v), &length); + // get next row + while(SQL_NO_DATA != SQLFetch(m_hStatement)) { + std::cout << "k:" << k << "v:" << v << std::endl; + } + return true; + } else { + return false; + } +} + +bool DBConnector::SQLEndTnx(std::string opt, int conn_id) { + SQLRETURN ret; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + std::cout << "txn_id: " + std::to_string(conn_id) + " execute opt: '" + opt + "'" << std::endl; + if ("commit" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); + } else if ("rollback" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + } else { + std::cerr << "unknow txn opt" << std::endl; + } + if (DBConnector::IsSqlExecuteErr(opt, m_hDatabaseConnection, ret)) { + return false; + } + return true; +} + +bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { + SQLRETURN ret; + SQLUINTEGER autoCommit; + if (opt == 0) { + autoCommit = 0; + } else { + autoCommit = 1; + } + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)(long)autoCommit, 0); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "execute sql failed" << std::endl; + std::cerr << "set AutoCommit = 0 failed" << std::endl; return false; } - // get result - std::cout << "get and parse result start" << std::endl; - ret = SQLFetch(m_hStatement); + return true; +} + +bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt) { + SQLRETURN ret; + if (opt == "read-uncommitted") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); + } else if (opt == "read-committed") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + } else if (opt == "repeatable-read") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); + } else if (opt == "serializable") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); + } else { + std::cerr << "unknow isolation level" << std::endl; + } if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "get result failed" << std::endl; + std::cerr << "set TXN_ISOLATION = " + opt + "failed" << std::endl; return false; } - // parse result - SQLINTEGER ID; - SQLGetData(m_hStatement, 1, SQL_C_LONG, &ID, 0, &length); - std::cout << ID << std::endl; + return true; +} + +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_connector) { + std::vector txn_sql_list = test_sequence.TxnSqlList(); + TestResultSet test_rs; + // set TXN_ISOLATION + std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + for (auto hdbc : db_connector.DBConnPool()) { + if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation)) { + return false; + } + } + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + "success"<< std::endl; + + // set AutoCommit + std::cout << dash + "set AutoCommit = 0" + dash << std::endl; + for (auto hdbc : db_connector.DBConnPool()) { + if(!db_connector.SetAutoCommit(hdbc, 0)) { + return false; + } + } + std::cout << "set AutoCommit = 0 success" << std::endl; + + std::cout << dash + "test start" + dash << std::endl; + for (auto txn_sql : txn_sql_list) { + int txn_id = txn_sql.TxnId(); + std::string sql = txn_sql.Sql(); + auto index_read = sql.find("SELECT"); + auto index_commit = sql.find("COMMIT"); + auto index_rollback = sql.find("ROLLBACK"); + if (index_read != sql.npos) { + if (test_sequence.TableType() == 1) { + if (!db_connector.ExecReadSql2Int(sql, test_rs, txn_id)) { + return false; + } + } else { + std::cerr << "unsupported table type" << std::endl; + return false; + } + } else if (index_commit != sql.npos) { + if (!db_connector.SQLEndTnx("commit", txn_id)) { + return false; + } + } else if (index_rollback != sql.npos) { + if (!db_connector.SQLEndTnx("rollback", txn_id)) { + return false; + } + } else { + if (!db_connector.ExecWriteSql(sql, test_rs, txn_id)) { + return false; + } + } + } return true; } int main(int argc, char* argv[]) { + // parse gflags args google::ParseCommandLineFlags(&argc, &argv, true); // read test sequence SQLReader sql_reader; std::string test_path_base = "t/"; std::string test_path = test_path_base + "mysql"; - if (!sql_reader.init_test_sequence_list(test_path)) { + if (!sql_reader.InitTestSequenceList(test_path)) { std::cerr << "init test sequence failed" << std::endl; } - std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); + std::vector test_sequence_list = sql_reader.SQLReader::TestSequenceList(); // init db_connector + std::cout << dash + "init db_connector start" + dash << std::endl; DBConnector db_connector; - if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, 1)) { + if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { std::cerr << "init db_connector failed" << std::endl; } - TestResultSet test_rs; - db_connector.execute_sql("select * from sbtest1", test_rs, 1); + // init database + std::cout << dash + "init database start" + dash << std::endl; + TestResultSet test_rs__; + db_connector.ExecWriteSql("create database if not exists " + FLAGS_db_name, test_rs__, 1); + db_connector.ExecWriteSql("use " + FLAGS_db_name, test_rs__, 1); + + //TestResultSet test_rs; + //db_connector.ExecReadSql2Int("select * from sbtest1", test_rs, 1); + // send sql + JobExecutor job_executor; + if (!job_executor.ExecTestSequence(test_sequence_list[0], db_connector)) { + return 0; + } +/* for (auto &test_sequence : test_sequence_list) { std::vector txn_sql_list = test_sequence.get_txn_sql_list(); for (auto &txn_sql : txn_sql_list) { std::cout << txn_sql.get_sql() << std::endl; } } - +*/ return 0; } diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h index 53ce8b23..d1125e3c 100644 --- a/src/dbtest/src/db_test.h +++ b/src/dbtest/src/db_test.h @@ -4,19 +4,19 @@ #include #include #include - +/* enum class ResultType { RollBack, Avaid, Exception -}; +};*/ // result set class ReadResultSet { private: std::vector>> read_rs_; public: - std::vector>> get_rs() {return read_rs_;}; + std::vector>> ReadRs() {return read_rs_;}; }; class TxnResultSet { @@ -24,10 +24,10 @@ class TxnResultSet { bool is_commit_; bool is_timeout_; public: - bool is_commit() {return is_commit_;}; - bool is_timeout() {return is_timeout_;}; - void update_commit_status(bool commit) {is_commit_ = commit;}; - void update_timeout_status(bool timeout) {is_timeout_ = timeout;}; + bool IsCommit() {return is_commit_;}; + bool IsTimeout() {return is_timeout_;}; + void UpdateCommitStatus(bool commit) {is_commit_ = commit;}; + void UpdateCimeoutStatus(bool timeout) {is_timeout_ = timeout;}; }; class TestResultSet { @@ -35,45 +35,48 @@ class TestResultSet { std::string test_case_type_; std::vector txn_result_set_list_; // key:sql_id value:[[read set1], [read set2], ...] - std::unordered_map> read_sql_result_set_; - ResultType result_type_; + std::unordered_map> sql_read_result_set_; + std::string result_type_; public: - std::string get_test_case_type() {return test_case_type_;}; - std::vector get_txn_result_set_list() {return txn_result_set_list_;}; - std::unordered_map> get_read_sql_result_set() {return read_sql_result_set_;}; - bool is_expected_result(); - ResultType get_result_type() {return result_type_;}; - void set_result_type(ResultType result_type) {result_type_ = result_type;}; + std::string TesCaseType() {return test_case_type_;}; + std::vector TxnResultSetList() {return txn_result_set_list_;}; + std::unordered_map> SQLReadResultSet() {return sql_read_result_set_;}; + bool IsExpectedResult(); + std::string ResultType() {return result_type_;}; + void SetResultType(std::string result_type) {result_type_ = result_type;}; }; // The sql with txn_id in test case class TxnSQL { private: std::string sql_; - std::string txn_id_; + int txn_id_; std::string test_case_type_; public: - TxnSQL(std::string sql, std::string txn_id, std::string test_case_id) { + TxnSQL(int txn_id, std::string sql, std::string test_case_id) { sql_ = sql; txn_id_ = txn_id; test_case_type_ = test_case_id; }; - std::string get_sql() {return sql_;}; - std::string get_txn_id() {return txn_id_;}; - std::string get_test_case_type() {return test_case_type_;}; + std::string Sql() {return sql_;}; + int TxnId() {return txn_id_;}; + std::string TestCaseType() {return test_case_type_;}; }; // TestSequence->exception test case, include a series of TxnSQL class TestSequence { private: std::string test_case_type_; std::vector txn_sql_list_; + int table_type_; public: TestSequence(std::string test_case_type) { test_case_type_ = test_case_type; }; - void add_txn_sql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; - std::vector get_txn_sql_list() {return txn_sql_list_;}; - std::string get_test_case_type() {return test_case_type_;}; + void AddTxnSql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; + std::vector TxnSqlList() {return txn_sql_list_;}; + std::string TestCaseType() {return test_case_type_;}; + void SetTableType(int table_type) {table_type_ = table_type;}; + int TableType() {return table_type_;}; }; //read and parse sql from file @@ -82,36 +85,34 @@ class SQLReader { std::vector test_sequence_list_; std::vector test_result_list_; public: - bool init_test_sequence_list(std::string& test_path); - void init_test_result_list(std::string& result_path); + bool InitTestSequenceList(std::string& test_path); + void InitTestResultList(std::string& result_path); - void add_test_sequence(TestSequence test_sequence) { + void AddTestSequence(TestSequence test_sequence) { test_sequence_list_.push_back(test_sequence); }; - void add_test_result(TestResultSet test_case_expected_result) { + void AddTestResult(TestResultSet test_case_expected_result) { test_result_list_.push_back(test_case_expected_result); }; - TestSequence get_one_test_sequence_from_file(std::string& test_file); - TestResultSet get_one_test_result_from_file(std::string& result_path); + TestSequence TestSequenceFromFile(std::string& test_file); + TestResultSet TestTesultFromFile(std::string& result_path); - std::pair get_txn_id_and_sql(std::string line); + std::pair TxnIdAndSql(std::string line); - std::vector get_test_sequence_list() {return test_sequence_list_;}; - std::vector get_test_result_list() {return test_result_list_;}; + std::vector TestSequenceList() {return test_sequence_list_;}; + std::vector TestResultList() {return test_result_list_;}; }; //db connector class DBConnector { private: std::vector conn_pool_; - std::vector stmt_pool_; public: bool InitDBConnector(std::string& user, std::string& passwd, std::string& db_type, int conn_pool_size) { for (int i = 0; i < (int)conn_pool_size; i++) { SQLHENV m_hEnviroment; SQLHDBC m_hDatabaseConnection; - SQLHSTMT m_hStatement; SQLRETURN ret; // get env ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); @@ -138,35 +139,40 @@ class DBConnector { return false; } conn_pool_.push_back(m_hDatabaseConnection); - // get stmt - ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "get stmt failed" << std::endl; - return false; - } - stmt_pool_.push_back(m_hStatement); } std::cerr << "init db_connector success" << std::endl; return true; }; - void set_auto_commit(); - void begin(); - void rollback(); - void commit(); - bool execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id); - void release_stmt() { - for (int i = 0; i < (int)stmt_pool_.size(); i++) { - SQLFreeHandle(SQL_HANDLE_STMT, stmt_pool_[i]); - } - }; - void release_conn() { + bool SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt); + void Begin(); + void Rollback(); + void Commit(); + bool ExecReadSql2Int(const std::string& sql, TestResultSet& test_rs, int conn_id); + bool ExecWriteSql(const std::string& sql, TestResultSet& test_rs, int conn_id); + void ErrInfoWithStmt(SQLHANDLE& m_hStatement, SQLCHAR ErrInfo[]); + std::vector DBConnPool() {return conn_pool_;}; + bool IsSqlExecuteErr(const std::string& sql, SQLHSTMT& m_hStatement, SQLRETURN ret); + void ReleaseConn() { for (int i = 0; i < (int)conn_pool_.size(); i++) { SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); } }; - void release_env(); - void release() { - release_stmt(); - release_conn(); + bool SQLEndTnx(std::string opt, int conn_id); + bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt); + void ReleaseEnv(); + void Release() { + ReleaseConn(); }; }; + +class JobExecutor { +public: + bool ExecAllTestSequence(std::vector test_sequence_list); + bool ExecTestSequence(TestSequence& test_sequence, DBConnector db_connector); + void handle_result(TestResultSet& rs); +}; + +class Outputter { +public: + void WriteResultSet(); +}; diff --git a/src/dbtest/src/odbc b/src/dbtest/src/odbc deleted file mode 100755 index 7343aa9e1c5b025d0a4c5e72de2b1d650158dad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43569 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 diff --git a/src/dbtest/src/odbc.cc b/src/dbtest/src/odbc.cc index f90ba647..65b73a22 100644 --- a/src/dbtest/src/odbc.cc +++ b/src/dbtest/src/odbc.cc @@ -13,20 +13,14 @@ void exec_sql() { if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { std::cout << "get env failed" << std::endl; } - SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); // get conn ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { std::cout << "get conn failed" << std::endl; } - // connect - //SQLCHAR* sqlwcaDsnName = "MySQL-test"; - //SQLCHAR* sqlwcaUserName = "test123"; - //SQLCHAR* sqlwcaPassWord = "Ly.123456"; - ret = SQLConnect( m_hDatabaseConnection - ,(SQLCHAR*)"MySQL-test", SQL_NTS + ,(SQLCHAR*)"mysql", SQL_NTS ,(SQLCHAR*)"test123", SQL_NTS ,(SQLCHAR*)"Ly.123456", SQL_NTS); @@ -39,25 +33,19 @@ void exec_sql() { std::cout << "get stmt failed" << std::endl; } // execute sql - ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"SELECT * FROM sbtest1", SQL_NTS); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cout << "get stmt failed" << std::endl; + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"INSERT INTO t1 VALUES (1, 1);", SQL_NTS); + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"SELECT * from t1 WHERE k = 1;", SQL_NTS); + SQLCHAR k[20]={0}, v[20]={0}; + SQLBindCol(m_hStatement, 1, SQL_C_CHAR, (void*)k, sizeof(k), &length); + SQLBindCol(m_hStatement, 2, SQL_C_CHAR, (void*)v, sizeof(v), &length); + // get next row + while(SQL_NO_DATA != SQLFetch(m_hStatement)) { + std::cout << "k:" << k << "v:" << v << std::endl; } - // get row - ret = SQLFetch(m_hStatement); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cout << "get row failed" << std::endl; - } - - SQLINTEGER sqlnID; - // parse result - SQLGetData(m_hStatement, 1, SQL_C_LONG, &sqlnID, 0, &length); - - std::cout << sqlnID << std::endl; + // release SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement); SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection); SQLFreeHandle(SQL_HANDLE_ENV, m_hEnviroment); - } int main() { diff --git a/src/dbtest/test.cc b/src/dbtest/test.cc new file mode 100644 index 00000000..c0c9ff14 --- /dev/null +++ b/src/dbtest/test.cc @@ -0,0 +1,7 @@ +#include +int main() { + std::string s = "select * from sbtest"; + auto index = s.find("select"); + std::cout << index << std::endl; + return 0; +} From 7a56e31fd021ab669a5b85e0604205de23970d05 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Sat, 30 Jan 2021 18:06:32 +0800 Subject: [PATCH 09/81] Support check result; Update t/mysql/* --- src/dbtest/src/db_test.cc | 293 +++++++++++++++++++++++++++++--------- src/dbtest/src/db_test.h | 81 +++++++---- 2 files changed, 276 insertions(+), 98 deletions(-) diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc index ba4e611a..02cd4aad 100644 --- a/src/dbtest/src/db_test.cc +++ b/src/dbtest/src/db_test.cc @@ -12,59 +12,121 @@ DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); DEFINE_string(db_name, "test", "create database name"); DEFINE_int32(conn_pool_size, 3, "db_conn pool size"); -DEFINE_string(isolation, "read-uncommitted", "transation isolation level"); +DEFINE_string(isolation, "serializable", "transation isolation level"); std::string dash(10, '-'); -std::pair SQLReader::TxnIdAndSql(std::string line) { - std::pair txn_id_and_sql; - const auto index = line.find(" "); - if (index > 0) { - txn_id_and_sql.first = std::stoi(line.substr(0, index)); - txn_id_and_sql.second = line.substr(index + 1); - } else { - throw "read txn_sql failed, please check format of test file. line:" + line; +std::vector SQLReader::TxnIdAndSql(std::string line) { + std::vector txn_id_and_sql; + const auto index_first = line.find("-"); + const auto index_second = line.rfind("-"); + if (line != "") { + if (index_first != line.npos && index_second != line.npos) { + txn_id_and_sql.push_back(line.substr(0, index_first)); + txn_id_and_sql.push_back(line.substr(index_first + 1, index_second - index_first - 1)); + txn_id_and_sql.push_back(line.substr(index_second + 1)); + } else { + std::cerr << "read txn_sql failed, please check format of test file. line:" + line << std::endl; + } } return txn_id_and_sql; } -TestSequence SQLReader::TestSequenceFromFile(std::string& test_file) { +std::pair SQLReader::SqlIdAndResult(std::string line) { + std::pair sql_id_and_result; + const auto index = line.find("-"); + if (index != line.npos) { + std::string sql_id = line.substr(0, index); + std::string result = line.substr(index + 1); + sql_id_and_result.first = std::stoi(sql_id); + sql_id_and_result.second = result; + } + return sql_id_and_result; +} + +std::string SQLReader::Isolation(std::string line) { + const auto index = line.find("{"); + return line.substr(0, index - 1); +} + +void split(const std::string& str, + std::vector& tokens, + const std::string delim = " ") { + tokens.clear(); + auto start = str.find_first_not_of(delim, 0); + auto position = str.find_first_of(delim, start); + while (position != std::string::npos || start != std::string::npos) { + tokens.emplace_back(std::move(str.substr(start, position - start))); + start = str.find_first_not_of(delim, position); + position = str.find_first_of(delim, start); + } +} + +std::pair SQLReader::TestSequenceAndTestResultSetFromFile(std::string& test_file) { + std::pair test_sequence_and_result_set; std::ifstream test_stream(test_file); - const auto start = test_file.rfind("/"); - const auto end = test_file.rfind('.'); - std::string test_case_type = test_file.substr(start + 1, end); + const auto index_first = test_file.find("/"); + const auto index_second = test_file.rfind("/"); + const auto end = test_file.find("."); + std::string db_name = test_file.substr(index_first + 1, index_second - index_first - 1); + std::string test_case = test_file.substr(index_second + 1, end - index_second - 1); + std::string test_case_type = db_name + "_" + test_case; std::string line; TestSequence test_sequence(test_case_type); - bool is_first_row = true; + TestResultSet test_result_set(test_case_type); + bool is_result_row = false; if (test_stream) { while (getline(test_stream, line)) { - if (is_first_row) { - auto start = line.find(":"); - std::string table_type_str = line.substr(start + 1); - int table_type = std::stoi(table_type_str); - test_sequence.SetTableType(table_type); - is_first_row = false; - } else { - std::pair txn_id_and_sql = SQLReader::TxnIdAndSql(line); - TxnSQL txn_sql(txn_id_and_sql.first, txn_id_and_sql.second, test_case_type); - test_sequence.AddTxnSql(txn_sql); - } + if (line != "") { + auto index_table_type = line.find("TableType"); + auto index_left = line.find("{"); + auto index_right = line.find("}"); + if (index_table_type != line.npos) { + auto start = line.find(":"); + std::string table_type_str = line.substr(start + 1); + int table_type = std::stoi(table_type_str); + test_sequence.SetTableType(table_type); + } else if (index_left != line.npos) { + std::string isolation = SQLReader::Isolation(line); + test_result_set.SetIsolation(isolation); + is_result_row = true; + } else if (index_right != line.npos) { + is_result_row = false; + } else if (is_result_row) { + std::pair sql_id_and_result = SQLReader::SqlIdAndResult(line); + std::vector ret_list; + std::string result_str = sql_id_and_result.second; + split(result_str, ret_list, ","); + test_result_set.AddSqlResultSet(sql_id_and_result.first, ret_list); + } else if (!is_result_row){ + std::vector txn_id_and_sql = SQLReader::TxnIdAndSql(line); + TxnSql txn_sql(std::stoi(txn_id_and_sql[0]), std::stoi(txn_id_and_sql[1]), txn_id_and_sql[2], test_case_type); + test_sequence.AddTxnSql(txn_sql); + } + } } + test_sequence_and_result_set.first = test_sequence; + test_sequence_and_result_set.second = test_result_set; } else { //throw "test file not found"; std::cerr << "test file not found" << std::endl; } - return test_sequence; + return test_sequence_and_result_set; } -bool SQLReader::InitTestSequenceList(std::string& test_path) { - std::cout << dash + "read test sequence start" + dash << std::endl; + + +bool SQLReader::InitTestSequenceAndTestResultSetList(std::string& test_path) { + std::cout << dash + "read test sequence and test result set start" + dash << std::endl; std::ifstream do_test_stream("./do_test_list.txt"); std::string test_case; if (do_test_stream) { while (getline(do_test_stream, test_case)) { std::string test_file_name = test_case + ".txt"; std::string test_file = test_path + "/" + test_file_name; - TestSequence test_sequence = SQLReader::TestSequenceFromFile(test_file); + std::pair test_sequence_and_result_set = SQLReader::TestSequenceAndTestResultSetFromFile(test_file); + TestSequence test_sequence = test_sequence_and_result_set.first; + TestResultSet test_result_set = test_sequence_and_result_set.second; + SQLReader::AddTestResultSet(test_result_set); SQLReader::AddTestSequence(test_sequence); std::cout << test_file + " read success" << std::endl; } @@ -76,19 +138,25 @@ bool SQLReader::InitTestSequenceList(std::string& test_path) { } } -void DBConnector::ErrInfoWithStmt(SQLHANDLE& m_hStatement, SQLCHAR ErrInfo[]) { +// handle_type: stmt and dbc +void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[]) { SQLCHAR SQLState[256]; SQLINTEGER NativeErrorPtr = 0; - SQLSMALLINT TextLengthPtr = 0; - SQLGetDiagRec(SQL_HANDLE_STMT, m_hStatement, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + SQLSMALLINT TextLengthPtr = 0; + if ("stmt" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_STMT, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } + if ("dbc" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_DBC, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } } -bool DBConnector::IsSqlExecuteErr(const std::string& sql, SQLHSTMT& m_hStatement, SQLRETURN ret) { +bool DBConnector::IsSqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret) { if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { return false; } else if (ret == SQL_ERROR) { SQLCHAR ErrInfo[256]; - DBConnector::ErrInfoWithStmt(m_hStatement, ErrInfo); + DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo); std::cerr << "execute sql: '" + sql + "' failed, reason: " << ErrInfo << std::endl; return true; } else if (ret == SQL_NEED_DATA) { @@ -112,29 +180,59 @@ bool DBConnector::IsSqlExecuteErr(const std::string& sql, SQLHSTMT& m_hStatement } } -bool DBConnector::ExecWriteSql(const std::string& sql, TestResultSet& test_rs, int conn_id) { +bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - if (DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + if (DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { return false; } // execute sql std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'"<< std::endl; ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); - if (DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + if (DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { return false; - } + } // get error info return true; } -bool DBConnector::ExecReadSql2Int(const std::string& sql, TestResultSet& test_rs, int conn_id) { +bool IsExpectedResult(std::vector cur_result,std::vector expected_result) { + if (cur_result.size() != expected_result.size()) { + std::cerr << "number of cur_result_row != number of expected_result_row" << std::endl; + std::cout << "cur_result: " << std::endl; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "expected_result: " << std::endl; + std::copy(expected_result.begin(), expected_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "\n" << std::endl; + return false; + } + int len = cur_result.size(); + for (int i = 0; i < len; i++) { + std::string cur = cur_result[i]; + std::string expected = expected_result[i]; + if (cur != expected) { + return false; + } + } + return true; +} + +std::string SQLCHARToStr(SQLCHAR* ch) { + char* ch_char = (char*)ch; + std::string ch_str = ch_char; + return ch_str; +} + +bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + std::unordered_map>> sql_result_set_map = test_result_set.SqlResultSetMap(); + std::vector> expected_sql_result_set_multi = sql_result_set_map[sql_id]; + std::vector cur_sql_result_set; ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { @@ -147,21 +245,54 @@ bool DBConnector::ExecReadSql2Int(const std::string& sql, TestResultSet& test_rs std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'" << std::endl; ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); // parse result - if(!DBConnector::IsSqlExecuteErr(sql, m_hStatement, ret)) { + if(!DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { // bind column data SQLBindCol(m_hStatement, 1, SQL_C_CHAR, (void*)k, sizeof(k), &length); SQLBindCol(m_hStatement, 2, SQL_C_CHAR, (void*)v, sizeof(v), &length); - // get next row + // get next row, and fill cur_sql_result_set while(SQL_NO_DATA != SQLFetch(m_hStatement)) { - std::cout << "k:" << k << "v:" << v << std::endl; + std::string k_str = SQLCHARToStr(k); + std::string v_str = SQLCHARToStr(v); + std::string row = k_str + " " + v_str; + std::cout << "row: " + row << std::endl; + cur_sql_result_set.push_back(row); + } + if (SQL_NO_DATA == SQLFetch(m_hStatement)) { + cur_sql_result_set.push_back("null"); } + // check result + for (auto expected_sql_result_set : expected_sql_result_set_multi) { + if (IsExpectedResult(cur_sql_result_set, expected_sql_result_set)) { + test_result_set.SetResultType("avoid"); + return true; + } + } + test_result_set.SetResultType("exception"); return true; } else { return false; } } -bool DBConnector::SQLEndTnx(std::string opt, int conn_id) { +std::string DBConnector::IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN ret) { + if (ret == SQL_ERROR) { + SQLCHAR ErrInfo[256]; + SQLCHAR SQLState[256]; + SQLINTEGER NativeErrorPtr = 0; + SQLSMALLINT TextLengthPtr = 0; + SQLGetDiagRec(SQL_HANDLE_DBC, m_hDatabaseConnection, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + std::string state = SQLCHARToStr(SQLState); + if ("25S03" == state) { + return "rollback"; + } + if ("40001" == state) { + return "deadlock"; + } + } + return ""; +} + +bool DBConnector::SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set) { SQLRETURN ret; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; std::cout << "txn_id: " + std::to_string(conn_id) + " execute opt: '" + opt + "'" << std::endl; @@ -172,8 +303,9 @@ bool DBConnector::SQLEndTnx(std::string opt, int conn_id) { } else { std::cerr << "unknow txn opt" << std::endl; } - if (DBConnector::IsSqlExecuteErr(opt, m_hDatabaseConnection, ret)) { - return false; + std::string result_type = DBConnector::IsTxnRollback(m_hDatabaseConnection, ret); + if (result_type != "") { + test_result_set.SetResultType(result_type); } return true; } @@ -206,17 +338,17 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); } else { std::cerr << "unknow isolation level" << std::endl; + return false; } if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "set TXN_ISOLATION = " + opt + "failed" << std::endl; + std::cerr << "set TXN_ISOLATION = " + opt + " failed" << std::endl; return false; } return true; } -bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_connector) { - std::vector txn_sql_list = test_sequence.TxnSqlList(); - TestResultSet test_rs; +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + std::vector txn_sql_list = test_sequence.TxnSqlList(); // set TXN_ISOLATION std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; for (auto hdbc : db_connector.DBConnPool()) { @@ -224,7 +356,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_c return false; } } - std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + "success"<< std::endl; + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; // set AutoCommit std::cout << dash + "set AutoCommit = 0" + dash << std::endl; @@ -235,8 +367,9 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_c } std::cout << "set AutoCommit = 0 success" << std::endl; - std::cout << dash + "test start" + dash << std::endl; + std::cout << dash + test_sequence.TestCaseType() + " test start" + dash << std::endl; for (auto txn_sql : txn_sql_list) { + int sql_id = txn_sql.SqlId(); int txn_id = txn_sql.TxnId(); std::string sql = txn_sql.Sql(); auto index_read = sql.find("SELECT"); @@ -244,7 +377,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_c auto index_rollback = sql.find("ROLLBACK"); if (index_read != sql.npos) { if (test_sequence.TableType() == 1) { - if (!db_connector.ExecReadSql2Int(sql, test_rs, txn_id)) { + if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, txn_id)) { return false; } } else { @@ -252,15 +385,15 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, DBConnector db_c return false; } } else if (index_commit != sql.npos) { - if (!db_connector.SQLEndTnx("commit", txn_id)) { + if (!db_connector.SQLEndTnx("commit", txn_id, test_result_set)) { return false; } } else if (index_rollback != sql.npos) { - if (!db_connector.SQLEndTnx("rollback", txn_id)) { + if (!db_connector.SQLEndTnx("rollback", txn_id, test_result_set)) { return false; } } else { - if (!db_connector.ExecWriteSql(sql, test_rs, txn_id)) { + if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id)) { return false; } } @@ -275,10 +408,32 @@ int main(int argc, char* argv[]) { SQLReader sql_reader; std::string test_path_base = "t/"; std::string test_path = test_path_base + "mysql"; - if (!sql_reader.InitTestSequenceList(test_path)) { - std::cerr << "init test sequence failed" << std::endl; + if (!sql_reader.InitTestSequenceAndTestResultSetList(test_path)) { + std::cerr << "init test sequence and test result set failed" << std::endl; + } + + std::vector test_sequence_list = sql_reader.TestSequenceList(); + std::vector test_result_set_list = sql_reader.TestResultSetList(); +/* + for (auto test_sequence : test_sequence_list) { + std::vector txn_sql_list = test_sequence.TxnSqlList(); + for (auto txn_sql : txn_sql_list) { + std::cout << txn_sql.SqlId() << txn_sql.TxnId() << txn_sql.Sql() << std::endl; + } + } + for (auto test_result_set : test_result_set_list) { + std::unordered_map>> sql_result_set_map = test_result_set.SqlResultSetMap(); + for (auto map : sql_result_set_map) { + int sql_id = map.first; + std::vector> result = map.second; + for (auto ret : result) { + for (auto row : ret) { + std::cout << test_result_set.TestCaseType() << test_result_set.Isolation() << sql_id << row << std::endl; + } + } + } } - std::vector test_sequence_list = sql_reader.SQLReader::TestSequenceList(); +*/ // init db_connector std::cout << dash + "init db_connector start" + dash << std::endl; DBConnector db_connector; @@ -288,24 +443,24 @@ int main(int argc, char* argv[]) { // init database std::cout << dash + "init database start" + dash << std::endl; TestResultSet test_rs__; - db_connector.ExecWriteSql("create database if not exists " + FLAGS_db_name, test_rs__, 1); - db_connector.ExecWriteSql("use " + FLAGS_db_name, test_rs__, 1); + db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); + db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); //TestResultSet test_rs; //db_connector.ExecReadSql2Int("select * from sbtest1", test_rs, 1); // send sql JobExecutor job_executor; - if (!job_executor.ExecTestSequence(test_sequence_list[0], db_connector)) { - return 0; - } -/* - for (auto &test_sequence : test_sequence_list) { - std::vector txn_sql_list = test_sequence.get_txn_sql_list(); - for (auto &txn_sql : txn_sql_list) { - std::cout << txn_sql.get_sql() << std::endl; + int len = test_sequence_list.size(); + for (int i = 0; i < len; i++) { + if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { + std::cerr << "test sequence" + test_sequence_list[i].TestCaseType() + "execute failed" << std::endl; + return 0; + } else { + std::string result_type = test_result_set_list[i].ResultType(); + std::cout << "result_type:" << result_type + "\n" << std::endl; } } -*/ + return 0; } diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h index d1125e3c..b7d2f372 100644 --- a/src/dbtest/src/db_test.h +++ b/src/dbtest/src/db_test.h @@ -4,6 +4,7 @@ #include #include #include +#include /* enum class ResultType { RollBack, @@ -12,11 +13,12 @@ enum class ResultType { };*/ // result set -class ReadResultSet { +class SqlResultSet { private: - std::vector>> read_rs_; + std::vector sql_rs_; public: - std::vector>> ReadRs() {return read_rs_;}; + SqlResultSet(std::vector sql_rs) {sql_rs_ = sql_rs;}; + std::vector AllSqlResultSet() {return sql_rs_;}; }; class TxnResultSet { @@ -34,46 +36,66 @@ class TestResultSet { private: std::string test_case_type_; std::vector txn_result_set_list_; - // key:sql_id value:[[read set1], [read set2], ...] - std::unordered_map> sql_read_result_set_; + // key:1 value:[["0 0", "1 1", "2 2"], []] + std::unordered_map>> sql_result_set_map_; std::string result_type_; + std::string isolation_; public: - std::string TesCaseType() {return test_case_type_;}; + TestResultSet() {}; + TestResultSet(std::string test_case_type) {test_case_type_ = test_case_type;}; + std::string TestCaseType() {return test_case_type_;}; std::vector TxnResultSetList() {return txn_result_set_list_;}; - std::unordered_map> SQLReadResultSet() {return sql_read_result_set_;}; + std::unordered_map>> SqlResultSetMap() {return sql_result_set_map_;}; bool IsExpectedResult(); std::string ResultType() {return result_type_;}; void SetResultType(std::string result_type) {result_type_ = result_type;}; + void SetIsolation(std::string isolation) {isolation_ = isolation;}; + std::string Isolation() {return isolation_;}; + void AddSqlResultSet(int sql_id, std::vector sql_result_set) { + std::vector> multi_result_set; + if (sql_result_set_map_.count(sql_id) == 1) { + multi_result_set = sql_result_set_map_[sql_id]; + multi_result_set.push_back(sql_result_set); + } else { + multi_result_set.push_back(sql_result_set); + sql_result_set_map_[sql_id] = multi_result_set; + } + }; }; // The sql with txn_id in test case -class TxnSQL { +class TxnSql { private: + int sql_id_; std::string sql_; int txn_id_; std::string test_case_type_; public: - TxnSQL(int txn_id, std::string sql, std::string test_case_id) { + TxnSql(int sql_id, int txn_id, std::string sql, std::string test_case_type) { + sql_id_ = sql_id; sql_ = sql; txn_id_ = txn_id; - test_case_type_ = test_case_id; + test_case_type_ = test_case_type; }; + int SqlId() {return sql_id_;}; std::string Sql() {return sql_;}; int TxnId() {return txn_id_;}; std::string TestCaseType() {return test_case_type_;}; }; -// TestSequence->exception test case, include a series of TxnSQL +// TestSequence->exception test case, include a series of TxnSql class TestSequence { private: + // such as mysql_dirty-read std::string test_case_type_; - std::vector txn_sql_list_; + std::vector txn_sql_list_; int table_type_; public: + TestSequence() {}; TestSequence(std::string test_case_type) { test_case_type_ = test_case_type; }; - void AddTxnSql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; - std::vector TxnSqlList() {return txn_sql_list_;}; + void AddTxnSql(TxnSql txn_sql) {txn_sql_list_.push_back(txn_sql);}; + std::vector TxnSqlList() {return txn_sql_list_;}; std::string TestCaseType() {return test_case_type_;}; void SetTableType(int table_type) {table_type_ = table_type;}; int TableType() {return table_type_;}; @@ -83,25 +105,25 @@ class TestSequence { class SQLReader { private: std::vector test_sequence_list_; - std::vector test_result_list_; + std::vector test_result_set_list_; public: - bool InitTestSequenceList(std::string& test_path); - void InitTestResultList(std::string& result_path); + bool InitTestSequenceAndTestResultSetList(std::string& test_path); void AddTestSequence(TestSequence test_sequence) { test_sequence_list_.push_back(test_sequence); }; - void AddTestResult(TestResultSet test_case_expected_result) { - test_result_list_.push_back(test_case_expected_result); + void AddTestResultSet(TestResultSet test_result_set) { + test_result_set_list_.push_back(test_result_set); }; - TestSequence TestSequenceFromFile(std::string& test_file); - TestResultSet TestTesultFromFile(std::string& result_path); + std::pair TestSequenceAndTestResultSetFromFile(std::string& test_file); - std::pair TxnIdAndSql(std::string line); + std::vector TxnIdAndSql(std::string line); + std::pair SqlIdAndResult(std::string line); + std::string Isolation(std::string line); std::vector TestSequenceList() {return test_sequence_list_;}; - std::vector TestResultList() {return test_result_list_;}; + std::vector TestResultSetList() {return test_result_set_list_;}; }; //db connector @@ -147,17 +169,18 @@ class DBConnector { void Begin(); void Rollback(); void Commit(); - bool ExecReadSql2Int(const std::string& sql, TestResultSet& test_rs, int conn_id); - bool ExecWriteSql(const std::string& sql, TestResultSet& test_rs, int conn_id); - void ErrInfoWithStmt(SQLHANDLE& m_hStatement, SQLCHAR ErrInfo[]); + bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id); + bool ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id); + void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[]); std::vector DBConnPool() {return conn_pool_;}; - bool IsSqlExecuteErr(const std::string& sql, SQLHSTMT& m_hStatement, SQLRETURN ret); + bool IsSqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret); + std::string IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN ret); void ReleaseConn() { for (int i = 0; i < (int)conn_pool_.size(); i++) { SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); } }; - bool SQLEndTnx(std::string opt, int conn_id); + bool SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set); bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt); void ReleaseEnv(); void Release() { @@ -168,7 +191,7 @@ class DBConnector { class JobExecutor { public: bool ExecAllTestSequence(std::vector test_sequence_list); - bool ExecTestSequence(TestSequence& test_sequence, DBConnector db_connector); + bool ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector); void handle_result(TestResultSet& rs); }; From d4bbec33dfb10f7e9180111560533ac8a2d9dcf2 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Wed, 17 Feb 2021 12:19:13 +0800 Subject: [PATCH 10/81] Fix multi database test --- src/dbtest/src/db_test.cc | 622 ++++++++++++++++++++-------- src/dbtest/src/db_test.h | 47 +-- src/dbtest/src/total_permutation.cc | 22 + src/dbtest/test.cc | 7 - 4 files changed, 485 insertions(+), 213 deletions(-) create mode 100644 src/dbtest/src/total_permutation.cc delete mode 100644 src/dbtest/test.cc diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc index 02cd4aad..4045698c 100644 --- a/src/dbtest/src/db_test.cc +++ b/src/dbtest/src/db_test.cc @@ -7,14 +7,135 @@ #include -DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini"); +DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); DEFINE_string(db_name, "test", "create database name"); -DEFINE_int32(conn_pool_size, 3, "db_conn pool size"); +DEFINE_int32(conn_pool_size, 4, "db_conn pool size"); DEFINE_string(isolation, "serializable", "transation isolation level"); +DEFINE_string(case_dir, "mysql", "test case dir name"); +DEFINE_string(timeout, "5", "timeout"); std::string dash(10, '-'); +std::string SQLCHARToStr(SQLCHAR* ch) { + char* ch_char = (char*)ch; + std::string ch_str = ch_char; + return ch_str; +} + +void split(const std::string& str, + std::vector& tokens, + const std::string delim = " ") { + tokens.clear(); + auto start = str.find_first_not_of(delim, 0); + auto position = str.find_first_of(delim, start); + while (position != std::string::npos || start != std::string::npos) { + tokens.emplace_back(std::move(str.substr(start, position - start))); + start = str.find_first_not_of(delim, position); + position = str.find_first_of(delim, start); + } +} + +bool PrintAndWriteTxnSqlResult(std::vector cur_result, + std::vector>> expected_result_set_list, + int sql_id, std::string sql, int txn_id) { + std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; + std::ofstream out(sql_result_file, std::ios::app); + if (out) { + std::cout << " cur_result: " << std::endl; + std::cout << " "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + + out << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(txn_id) + " sql: " + sql << std::endl; + out << " cur_result: " << std::endl; + out << " "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (out, " ")); + out << "" << std::endl; + int idx = 1; + for (auto& expected_result_set : expected_result_set_list) { + std::vector sql_expected_result = expected_result_set[sql_id]; + std::cout << " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + std::cout << " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + out << " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + out << " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (out, " ")); + out << "" << std::endl; + idx++; + } + out << "" << std::endl; + return true; + } else { + std::cerr << sql_result_file + "has not found" << std::endl; + return false; + } +} + +bool WriteTestCaseTypeToFile(std::string test_case_type) { + std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; + std::ofstream out(sql_result_file, std::ios::app); + if (out) { + out << dash + test_case_type + dash << std::endl; + return true; + } else { + std::cerr << sql_result_file + "has not found" << std::endl; + return false; + } +} + +bool WriteResultType(std::string result_type) { + std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; + std::ofstream out(sql_result_file, std::ios::app); + if (out) { + out << "result_type: " + result_type << std::endl; + out << "" << std::endl; + return true; + } else { + std::cerr << sql_result_file + "has not found" << std::endl; + return false; + } + +} + +bool IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, int sql_id, std::string sql) { + if (cur_result.size() != expected_result.size()) { + std::cerr << "number of cur_result_row != number of expected_result_row" << std::endl; + return false; + } + int len = cur_result.size(); + for (int i = 0; i < len; i++) { + std::string cur = cur_result[i]; + std::string expected = expected_result[i]; + if (cur != expected) { + return false; + } + } + return true; +} + +bool IsTestExpectedResult(std::unordered_map>& cur_result, + std::vector>> expected_result_set_list, + std::unordered_map sql_map) { + for (auto expected_result_set : expected_result_set_list) { + bool is_all_expected = true; + for (auto& result_map : expected_result_set) { + int sql_id = result_map.first; + std::vector sql_expected_result = result_map.second; + std::vector sql_cur_result = cur_result[sql_id]; + if (!IsSqlExpectedResult(sql_cur_result, sql_expected_result, sql_id, sql_map[sql_id])) { + is_all_expected = false; + break; + } + } + if (is_all_expected) { + return true; + } + } + return false; +} + std::vector SQLReader::TxnIdAndSql(std::string line) { std::vector txn_id_and_sql; const auto index_first = line.find("-"); @@ -48,19 +169,6 @@ std::string SQLReader::Isolation(std::string line) { return line.substr(0, index - 1); } -void split(const std::string& str, - std::vector& tokens, - const std::string delim = " ") { - tokens.clear(); - auto start = str.find_first_not_of(delim, 0); - auto position = str.find_first_of(delim, start); - while (position != std::string::npos || start != std::string::npos) { - tokens.emplace_back(std::move(str.substr(start, position - start))); - start = str.find_first_not_of(delim, position); - position = str.find_first_of(delim, start); - } -} - std::pair SQLReader::TestSequenceAndTestResultSetFromFile(std::string& test_file) { std::pair test_sequence_and_result_set; std::ifstream test_stream(test_file); @@ -74,30 +182,44 @@ std::pair SQLReader::TestSequenceAndTestResultSetFr TestSequence test_sequence(test_case_type); TestResultSet test_result_set(test_case_type); bool is_result_row = false; + int first_sql_id = -1; + std::unordered_map> sql_result_set; if (test_stream) { while (getline(test_stream, line)) { if (line != "") { - auto index_table_type = line.find("TableType"); + auto index_table_type = line.find("ParamNum"); auto index_left = line.find("{"); auto index_right = line.find("}"); if (index_table_type != line.npos) { auto start = line.find(":"); - std::string table_type_str = line.substr(start + 1); - int table_type = std::stoi(table_type_str); - test_sequence.SetTableType(table_type); + std::string param_num_str = line.substr(start + 1); + int param_num = std::stoi(param_num_str); + test_sequence.SetParamNum(param_num); } else if (index_left != line.npos) { std::string isolation = SQLReader::Isolation(line); test_result_set.SetIsolation(isolation); is_result_row = true; } else if (index_right != line.npos) { + std::pair sql_id_and_result = SQLReader::SqlIdAndResult(line); + std::vector ret_list; + std::string result_str = sql_id_and_result.second; + split(result_str, ret_list, " "); + sql_result_set[sql_id_and_result.first] = ret_list; + test_result_set.AddSqlResultSet(sql_result_set); is_result_row = false; } else if (is_result_row) { std::pair sql_id_and_result = SQLReader::SqlIdAndResult(line); + if (first_sql_id == -1) { + first_sql_id = sql_id_and_result.first; + } else if (first_sql_id == sql_id_and_result.first) { + test_result_set.AddSqlResultSet(sql_result_set); + sql_result_set.clear(); + } std::vector ret_list; std::string result_str = sql_id_and_result.second; - split(result_str, ret_list, ","); - test_result_set.AddSqlResultSet(sql_id_and_result.first, ret_list); - } else if (!is_result_row){ + split(result_str, ret_list, " "); + sql_result_set[sql_id_and_result.first] = ret_list; + } else if (!is_result_row) { std::vector txn_id_and_sql = SQLReader::TxnIdAndSql(line); TxnSql txn_sql(std::stoi(txn_id_and_sql[0]), std::stoi(txn_id_and_sql[1]), txn_id_and_sql[2], test_case_type); test_sequence.AddTxnSql(txn_sql); @@ -108,7 +230,7 @@ std::pair SQLReader::TestSequenceAndTestResultSetFr test_sequence_and_result_set.second = test_result_set; } else { //throw "test file not found"; - std::cerr << "test file not found" << std::endl; + std::cerr << "test file: " + test_file + " not found" << std::endl; } return test_sequence_and_result_set; } @@ -121,6 +243,10 @@ bool SQLReader::InitTestSequenceAndTestResultSetList(std::string& test_path) { std::string test_case; if (do_test_stream) { while (getline(do_test_stream, test_case)) { + auto index = test_case.find("#"); + if (index != test_case.npos) { + continue; + } std::string test_file_name = test_case + ".txt"; std::string test_file = test_path + "/" + test_file_name; std::pair test_sequence_and_result_set = SQLReader::TestSequenceAndTestResultSetFromFile(test_file); @@ -139,8 +265,7 @@ bool SQLReader::InitTestSequenceAndTestResultSetList(std::string& test_path) { } // handle_type: stmt and dbc -void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[]) { - SQLCHAR SQLState[256]; +void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { SQLINTEGER NativeErrorPtr = 0; SQLSMALLINT TextLengthPtr = 0; if ("stmt" == handle_type) { @@ -151,32 +276,34 @@ void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQ } } -bool DBConnector::IsSqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret) { +std::string DBConnector::SqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret) { if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { - return false; + return ""; } else if (ret == SQL_ERROR) { SQLCHAR ErrInfo[256]; - DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo); - std::cerr << "execute sql: '" + sql + "' failed, reason: " << ErrInfo << std::endl; - return true; + SQLCHAR SQLState[256]; + DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); + std::cerr << "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + std::string err_info = SQLCHARToStr(ErrInfo); + return err_info; } else if (ret == SQL_NEED_DATA) { std::cout << "SQL_NEED_DATA" << std::endl; - return true; + return "SQL_NEED_DATA"; } else if (ret == SQL_STILL_EXECUTING) { - std::cout << "SQL_NEED_DATA" << std::endl; - return true; + std::cout << "SQL_STILL_EXECUTING" << std::endl; + return "SQL_STILL_EXECUTING"; } else if (ret == SQL_NO_DATA) { - std::cout << "SQL_NEED_DATA" << std::endl; - return true; + std::cout << "SQL_NO_DATA" << std::endl; + return "SQL_NO_DATA"; } else if (ret == SQL_INVALID_HANDLE) { - std::cout << "SQL_NEED_DATA" << std::endl; - return true; + std::cout << "SQL_INVALID_HANDLE" << std::endl; + return "SQL_INVALID_HANDLE"; } else if (ret == SQL_PARAM_DATA_AVAILABLE) { - std::cout << "SQL_NEED_DATA" << std::endl; - return true; + std::cout << "SQL_PARAM_DATA_AVAILABLE" << std::endl; + return "SQL_PARAM_DATA_AVAILABLE"; } else { std::cerr << "execute sql: '" + sql + "' failed, unknow error" << std::endl; - return true; + return "unknow error"; } } @@ -186,91 +313,95 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - if (DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { + std::string err_info_stmt = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); + if (err_info_stmt != "") { return false; } // execute sql - std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'"<< std::endl; + std::cout << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'"<< std::endl; ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); - if (DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { - return false; - } - // get error info - return true; -} - -bool IsExpectedResult(std::vector cur_result,std::vector expected_result) { - if (cur_result.size() != expected_result.size()) { - std::cerr << "number of cur_result_row != number of expected_result_row" << std::endl; - std::cout << "cur_result: " << std::endl; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "expected_result: " << std::endl; - std::copy(expected_result.begin(), expected_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "\n" << std::endl; - return false; - } - int len = cur_result.size(); - for (int i = 0; i < len; i++) { - std::string cur = cur_result[i]; - std::string expected = expected_result[i]; - if (cur != expected) { - return false; + std::string err_info_sql = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); + if (err_info_sql != "") { + /* + auto index_lock_wait = err_info_sql.find("Lock wait timeout exceeded"); + auto index_lock_wait_1 = err_info_sql.find(""); + if (index_lock_wait != err_info_sql.npos) { + test_result_set.SetResultType("timeout"); + return true; } + auto index_serialize = err_info_sql.find("can't serialize access"); + if (index_serialize != err_info_sql.npos) { + test_result_set.SetResultType("can't serialize access"); + return true; + }*/ + test_result_set.SetResultType(err_info_sql); + //return false; } + // get error info return true; } -std::string SQLCHARToStr(SQLCHAR* ch) { - char* ch_char = (char*)ch; - std::string ch_str = ch_char; - return ch_str; -} -bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id) { +bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, + int conn_id, int param_num) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - std::unordered_map>> sql_result_set_map = test_result_set.SqlResultSetMap(); - std::vector> expected_sql_result_set_multi = sql_result_set_map[sql_id]; - std::vector cur_sql_result_set; + std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "get stmt failed" << std::endl; + std::string err_info_stmt = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); + if (err_info_stmt != "") { return false; } SQLLEN length; - SQLCHAR k[20]={0}, v[20]={0}; + SQLCHAR value[param_num][20] = {{0}}; // execute sql - std::cout << "txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'" << std::endl; + std::cout << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'" << std::endl; ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); // parse result - if(!DBConnector::IsSqlExecuteErr(sql, "stmt", m_hStatement, ret)) { + std::string err_info_sql = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); + if(err_info_sql == "") { // bind column data - SQLBindCol(m_hStatement, 1, SQL_C_CHAR, (void*)k, sizeof(k), &length); - SQLBindCol(m_hStatement, 2, SQL_C_CHAR, (void*)v, sizeof(v), &length); + for (int i = 0; i < param_num; i++) { + SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); + } // get next row, and fill cur_sql_result_set + bool is_no_data = true; while(SQL_NO_DATA != SQLFetch(m_hStatement)) { - std::string k_str = SQLCHARToStr(k); - std::string v_str = SQLCHARToStr(v); - std::string row = k_str + " " + v_str; - std::cout << "row: " + row << std::endl; - cur_sql_result_set.push_back(row); - } - if (SQL_NO_DATA == SQLFetch(m_hStatement)) { - cur_sql_result_set.push_back("null"); - } - // check result - for (auto expected_sql_result_set : expected_sql_result_set_multi) { - if (IsExpectedResult(cur_sql_result_set, expected_sql_result_set)) { - test_result_set.SetResultType("avoid"); - return true; + std::string row = ""; + for (int i = 0; i < param_num; i++) { + std::string v_str = SQLCHARToStr(value[i]); + if (i == (param_num - 1)) { + row += v_str; + } else { + row += v_str + ","; + } + } + if (cur_result_set.find(sql_id) != cur_result_set.end()) { + cur_result_set[sql_id].push_back(row); + } else { + std::vector sql_result; + sql_result.push_back(row); + cur_result_set[sql_id] = sql_result; } + is_no_data = false; + } + if (is_no_data) { + cur_result_set[sql_id].push_back("null"); } - test_result_set.SetResultType("exception"); + PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, conn_id); return true; } else { - return false; + auto index_lock_wait = err_info_sql.find("Lock wait timeout exceeded"); + if (index_lock_wait != err_info_sql.npos) { + test_result_set.SetResultType("timeout"); + return true; + } + test_result_set.SetResultType(err_info_sql); + //return false; + return true; } } @@ -293,23 +424,41 @@ std::string DBConnector::IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN } bool DBConnector::SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set) { - SQLRETURN ret; - SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - std::cout << "txn_id: " + std::to_string(conn_id) + " execute opt: '" + opt + "'" << std::endl; - if ("commit" == opt) { - ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); - } else if ("rollback" == opt) { - ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + if (FLAGS_db_type != "oracle") { + SQLRETURN ret; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + std::cout << "txn_id: " + std::to_string(conn_id) + " execute opt: '" + opt + "'" << std::endl; + if ("commit" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); + } else if ("rollback" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + } else { + std::cerr << "unknow txn opt" << std::endl; + } + std::string result_type = DBConnector::IsTxnRollback(m_hDatabaseConnection, ret); + if (result_type != "") { + test_result_set.SetResultType(result_type); + } } else { - std::cerr << "unknow txn opt" << std::endl; - } - std::string result_type = DBConnector::IsTxnRollback(m_hDatabaseConnection, ret); - if (result_type != "") { - test_result_set.SetResultType(result_type); + TestResultSet test_result_set; + if (!DBConnector::ExecWriteSql(0, opt, test_result_set, conn_id)) { + return false; + } } return true; } +bool DBConnector::SQLStartTxn(int conn_id) { + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; + if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { + std::cerr << "txn_id: " + std::to_string(conn_id) + " start txn failed" << std::endl; + return false; + } else { + std::cout << "txn_id: " + std::to_string(conn_id) + " start txn success" << std::endl; + return true; + } +} + bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { SQLRETURN ret; SQLUINTEGER autoCommit; @@ -326,69 +475,126 @@ bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { return true; } -bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt) { +bool DBConnector::SetTimeout(SQLHDBC m_hDatabaseConnection, int timeout) { SQLRETURN ret; - if (opt == "read-uncommitted") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); - } else if (opt == "read-committed") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); - } else if (opt == "repeatable-read") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); - } else if (opt == "serializable") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); - } else { - std::cerr << "unknow isolation level" << std::endl; - return false; - } - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "set TXN_ISOLATION = " + opt + " failed" << std::endl; + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); + std::string err_info_stmt = DBConnector::SqlExecuteErr("set timeout", "dbc", m_hDatabaseConnection, ret); + if (err_info_stmt != "") { return false; } - return true; + return true; } -bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { - std::vector txn_sql_list = test_sequence.TxnSqlList(); - // set TXN_ISOLATION - std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; - for (auto hdbc : db_connector.DBConnPool()) { - if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation)) { +bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id) { + if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { + SQLRETURN ret; + if (opt == "read-uncommitted") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); + } else if (opt == "read-committed") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + } else if (opt == "repeatable-read") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); + } else if (opt == "serializable") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); + } else { + std::cerr << "unknow isolation level" << std::endl; return false; } - } - std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; - - // set AutoCommit - std::cout << dash + "set AutoCommit = 0" + dash << std::endl; - for (auto hdbc : db_connector.DBConnPool()) { - if(!db_connector.SetAutoCommit(hdbc, 0)) { + std::string err_info_stmt = DBConnector::SqlExecuteErr("set isolation", "dbc", m_hDatabaseConnection, ret); + if (err_info_stmt != "") { + return false; + } + } else { + std::string iso; + if (opt == "read-committed") { + iso = "read committed"; + } else if (opt == "serializable") { + iso = "serializable"; + } else { + std::cerr << "unknow isolation level" << std::endl; return false; } + TestResultSet test_result_set; + std::string sql; + if (FLAGS_db_type == "oracle") { + sql = "alter session set isolation_level =" + iso; + } else if (FLAGS_db_type == "ob") { + sql = "set session transaction isolation level " + iso + ";"; + } + if (!DBConnector::ExecWriteSql(0, sql, test_result_set, conn_id)) { + return false; + } } - std::cout << "set AutoCommit = 0 success" << std::endl; + //if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + // std::cerr << "set TXN_ISOLATION = " + opt + " failed" << std::endl; + // return false; + //} + return true; +} +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + std::vector txn_sql_list = test_sequence.TxnSqlList(); std::cout << dash + test_sequence.TestCaseType() + " test start" + dash << std::endl; - for (auto txn_sql : txn_sql_list) { + if (!WriteTestCaseTypeToFile(test_sequence.TestCaseType())) { + return false; + } + //int i = 0; + std::unordered_map> cur_result_set; + std::unordered_map sql_map; + std::string table_name; + for (auto& txn_sql : txn_sql_list) { + if (test_result_set.ResultType() == "timeout") { + if (test_result_set.ResultType() == "timeout") { + for (int i = 0; i < FLAGS_conn_pool_size; i++) { + db_connector.SQLEndTnx("rollback", i + 1, test_result_set); + } + } + WriteResultType(test_result_set.ResultType()); + break; + } int sql_id = txn_sql.SqlId(); int txn_id = txn_sql.TxnId(); std::string sql = txn_sql.Sql(); + sql_map[sql_id] = sql; auto index_read = sql.find("SELECT"); + auto index_read_1 = sql.find("select"); + auto index_begin = sql.find("BEGIN"); + auto index_begin_1 = sql.find("begin"); auto index_commit = sql.find("COMMIT"); + auto index_commit_1 = sql.find("commit"); auto index_rollback = sql.find("ROLLBACK"); - if (index_read != sql.npos) { - if (test_sequence.TableType() == 1) { - if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, txn_id)) { - return false; - } - } else { - std::cerr << "unsupported table type" << std::endl; - return false; - } - } else if (index_commit != sql.npos) { - if (!db_connector.SQLEndTnx("commit", txn_id, test_result_set)) { + auto index_rollback_1 = sql.find("rollback"); + if (index_read != sql.npos || index_read_1 != sql.npos) { + if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, cur_result_set, txn_id, test_sequence.ParamNum())) { return false; } - } else if (index_rollback != sql.npos) { + } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { + if (!db_connector.SQLStartTxn(txn_id)) { + return false; + } + /* + if (FLAGS_db_type == "crdb") { + if (!db_connector.ExecWriteSql(0, "set transaction isolation level serializable;", test_result_set, txn_id)) { + return false; + } + }*/ + } else { + if (!db_connector.ExecWriteSql(0, "BEGIN;", test_result_set, txn_id)) { + return false; + } + } + } else if (index_commit != sql.npos || index_commit_1 != sql.npos) { + if (FLAGS_db_type != "crdb") { + if (!db_connector.SQLEndTnx("commit", txn_id, test_result_set)) { + return false; + } + } else { + if (!db_connector.ExecWriteSql(0, "COMMIT;", test_result_set, txn_id)) { + return false; + } + } + } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { if (!db_connector.SQLEndTnx("rollback", txn_id, test_result_set)) { return false; } @@ -397,70 +603,124 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t return false; } } + //i++; + //if (i == (int)txn_sql_list.size()) { + // if(!WriteResultType(test_result_set.ResultType())) { + // return false; + // } + //} + } + if (test_result_set.ResultType() == "") { + if (IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), sql_map)) { + test_result_set.SetResultType("avoid"); + } else { + test_result_set.SetResultType("exception"); + } + } + if(!WriteResultType(test_result_set.ResultType())) { + return false; } return true; } +void Outputter::WriteResultSet(std::vector test_result_set_list) { + std::string ret_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + ".txt"; + std::ofstream out(ret_file); + for (auto& test_result_set : test_result_set_list) { + out << test_result_set.TestCaseType() + ": " << test_result_set.ResultType() << std::endl; + } + out.close(); +} + int main(int argc, char* argv[]) { // parse gflags args google::ParseCommandLineFlags(&argc, &argv, true); + std::cout << "input param-> " << std::endl; + std::cout << " db_type: " + FLAGS_db_type << std::endl; + std::cout << " user: " + FLAGS_user << std::endl; + std::cout << " passwd: " + FLAGS_passwd << std::endl; + std::cout << " isolation: " + FLAGS_isolation << std::endl; // read test sequence SQLReader sql_reader; std::string test_path_base = "t/"; - std::string test_path = test_path_base + "mysql"; + std::string test_path = test_path_base + FLAGS_case_dir; if (!sql_reader.InitTestSequenceAndTestResultSetList(test_path)) { std::cerr << "init test sequence and test result set failed" << std::endl; } std::vector test_sequence_list = sql_reader.TestSequenceList(); std::vector test_result_set_list = sql_reader.TestResultSetList(); -/* - for (auto test_sequence : test_sequence_list) { - std::vector txn_sql_list = test_sequence.TxnSqlList(); - for (auto txn_sql : txn_sql_list) { - std::cout << txn_sql.SqlId() << txn_sql.TxnId() << txn_sql.Sql() << std::endl; - } - } - for (auto test_result_set : test_result_set_list) { - std::unordered_map>> sql_result_set_map = test_result_set.SqlResultSetMap(); - for (auto map : sql_result_set_map) { - int sql_id = map.first; - std::vector> result = map.second; - for (auto ret : result) { - for (auto row : ret) { - std::cout << test_result_set.TestCaseType() << test_result_set.Isolation() << sql_id << row << std::endl; - } + /* + std::cout << "begin" << std::endl; + for (auto& test_result_set : test_result_set_list) { + std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + for (auto& expected_result_set : expected_result_set_list) { + for (auto& k : expected_result_set) { + int sql_id = k.first; + std::vector cur_result = k.second; + std::cout << sql_id << std::endl; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + } } - } -*/ + }*/ + // init db_connector std::cout << dash + "init db_connector start" + dash << std::endl; DBConnector db_connector; if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { std::cerr << "init db_connector failed" << std::endl; } + if (FLAGS_db_type != "crdb") { // init database - std::cout << dash + "init database start" + dash << std::endl; - TestResultSet test_rs__; - db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); - db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); - - //TestResultSet test_rs; - //db_connector.ExecReadSql2Int("select * from sbtest1", test_rs, 1); - + if (FLAGS_db_type != "oracle") { + std::cout << dash + "init database start" + dash << std::endl; + TestResultSet test_rs__; + db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); + db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); + } + } + if (FLAGS_db_type != "crdb") { + std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + int idx = 1; + for (auto hdbc : db_connector.DBConnPool()) { + /*// set timeout + if (!db_connector.SetTimeout(hdbc, std::stoi(FLAGS_timeout))) { + return false; + }*/ + // set TXN_ISOLATION + if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx)) { + return false; + } + idx++; + } + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + } + + // clear result file + std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; + std::ifstream sql_result(sql_result_file); + if (sql_result) { + std::remove(sql_result_file.c_str()); + std::cout << "delete" << std::endl; + } // send sql JobExecutor job_executor; + Outputter outputter; int len = test_sequence_list.size(); for (int i = 0; i < len; i++) { if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { - std::cerr << "test sequence" + test_sequence_list[i].TestCaseType() + "execute failed" << std::endl; - return 0; + std::cerr << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + //return 0; } else { std::string result_type = test_result_set_list[i].ResultType(); std::cout << "result_type:" << result_type + "\n" << std::endl; } } + outputter.WriteResultSet(test_result_set_list); + db_connector.ReleaseConn(); return 0; } diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h index b7d2f372..95ac2619 100644 --- a/src/dbtest/src/db_test.h +++ b/src/dbtest/src/db_test.h @@ -36,8 +36,8 @@ class TestResultSet { private: std::string test_case_type_; std::vector txn_result_set_list_; - // key:1 value:[["0 0", "1 1", "2 2"], []] - std::unordered_map>> sql_result_set_map_; + // [map1, map2, ...] + std::vector>> expected_result_set_list_; std::string result_type_; std::string isolation_; public: @@ -45,21 +45,14 @@ class TestResultSet { TestResultSet(std::string test_case_type) {test_case_type_ = test_case_type;}; std::string TestCaseType() {return test_case_type_;}; std::vector TxnResultSetList() {return txn_result_set_list_;}; - std::unordered_map>> SqlResultSetMap() {return sql_result_set_map_;}; + std::vector>> ExpectedResultSetList() {return expected_result_set_list_;}; bool IsExpectedResult(); std::string ResultType() {return result_type_;}; void SetResultType(std::string result_type) {result_type_ = result_type;}; void SetIsolation(std::string isolation) {isolation_ = isolation;}; std::string Isolation() {return isolation_;}; - void AddSqlResultSet(int sql_id, std::vector sql_result_set) { - std::vector> multi_result_set; - if (sql_result_set_map_.count(sql_id) == 1) { - multi_result_set = sql_result_set_map_[sql_id]; - multi_result_set.push_back(sql_result_set); - } else { - multi_result_set.push_back(sql_result_set); - sql_result_set_map_[sql_id] = multi_result_set; - } + void AddSqlResultSet(std::unordered_map> sql_result_set) { + expected_result_set_list_.push_back(sql_result_set); }; }; @@ -88,7 +81,7 @@ class TestSequence { // such as mysql_dirty-read std::string test_case_type_; std::vector txn_sql_list_; - int table_type_; + int param_num_; public: TestSequence() {}; TestSequence(std::string test_case_type) { @@ -97,8 +90,8 @@ class TestSequence { void AddTxnSql(TxnSql txn_sql) {txn_sql_list_.push_back(txn_sql);}; std::vector TxnSqlList() {return txn_sql_list_;}; std::string TestCaseType() {return test_case_type_;}; - void SetTableType(int table_type) {table_type_ = table_type;}; - int TableType() {return table_type_;}; + void SetParamNum(int param_num) {param_num_ = param_num;}; + int ParamNum() {return param_num_;}; }; //read and parse sql from file @@ -156,24 +149,27 @@ class DBConnector { (SQLCHAR*)user.c_str(), SQL_NTS, (SQLCHAR*)passwd.c_str(), SQL_NTS); + std::string err_info_stmt = DBConnector::SqlExecuteErr("connnected", "dbc", m_hDatabaseConnection, ret); + if (err_info_stmt != "") { + return false; + } + /* if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { std::cerr << "connected failed" << std::endl; - return false; - } + return false; + }*/ conn_pool_.push_back(m_hDatabaseConnection); } std::cerr << "init db_connector success" << std::endl; return true; }; bool SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt); - void Begin(); - void Rollback(); - void Commit(); - bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id); + bool SetTimeout(SQLHDBC m_hDatabaseConnection, int timeout); + bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int conn_id, int param_num); bool ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id); - void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[]); + void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]); std::vector DBConnPool() {return conn_pool_;}; - bool IsSqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret); + std::string SqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret); std::string IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN ret); void ReleaseConn() { for (int i = 0; i < (int)conn_pool_.size(); i++) { @@ -181,7 +177,8 @@ class DBConnector { } }; bool SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set); - bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt); + bool SQLStartTxn(int conn_id); + bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id=1); void ReleaseEnv(); void Release() { ReleaseConn(); @@ -197,5 +194,5 @@ class JobExecutor { class Outputter { public: - void WriteResultSet(); + void WriteResultSet(std::vector test_result_set_list); }; diff --git a/src/dbtest/src/total_permutation.cc b/src/dbtest/src/total_permutation.cc new file mode 100644 index 00000000..c9f1f42a --- /dev/null +++ b/src/dbtest/src/total_permutation.cc @@ -0,0 +1,22 @@ +#include +#include +#include +#include +std::string file_name = "./long-fork-anomaly.log"; + +int main() { + std::vector txn_sequence; + txn_sequence.push_back("1;BEGIN;select * from t1 where k=0;select * from t1 where k=1;commit;"); + txn_sequence.push_back("2;BEGIN;select * from t1 where k=1;select * from t1 where k=0;commit;"); + txn_sequence.push_back("3;BEGIN;update t1 set v=1 where k=0;commit;"); + txn_sequence.push_back("4;BEGIN;update t1 set v=1 where k=1;commit;"); + while (next_permutation(txn_sequence.begin(), txn_sequence.end())) { + std::ofstream out(file_name, std::ios::app); + out << txn_sequence[0] << std::endl; + out << txn_sequence[1] << std::endl; + out << txn_sequence[2] << std::endl; + out << txn_sequence[3] << std::endl; + out << "" << std::endl; + } + return 0; +} diff --git a/src/dbtest/test.cc b/src/dbtest/test.cc deleted file mode 100644 index c0c9ff14..00000000 --- a/src/dbtest/test.cc +++ /dev/null @@ -1,7 +0,0 @@ -#include -int main() { - std::string s = "select * from sbtest"; - auto index = s.find("select"); - std::cout << index << std::endl; - return 0; -} From f9d6a58cf6fcd8b85f4f51f9a4173fd3f14ea64d Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Tue, 23 Mar 2021 12:03:20 +0800 Subject: [PATCH 11/81] Support mongodb test --- src/dbtest/3ts_kvtest | Bin 0 -> 3777664 bytes .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 20784 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 20800 bytes .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 +++++ src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 0 -> 20880 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 +++++ .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 0 -> 20888 bytes .../3ts_dbtest.dir/CXX.includecache | 94 + .../CMakeFiles/3ts_dbtest.dir/build.make | 195 ++ .../CMakeFiles/3ts_dbtest.dir/depend.internal | 24 + .../CMakeFiles/3ts_dbtest.dir/depend.make | 24 + .../CMakeFiles/3ts_dbtest.dir/flags.make | 8 + .../CMakeFiles/3ts_dbtest.dir/progress.make | 6 + .../3ts_dbtest.dir/src/case_cntl.cc.gcda | Bin 0 -> 56460 bytes .../3ts_dbtest.dir/src/case_cntl.cc.gcno | Bin 0 -> 628520 bytes .../3ts_dbtest.dir/src/common.cc.gcda | Bin 0 -> 12592 bytes .../3ts_dbtest.dir/src/common.cc.gcno | Bin 0 -> 99800 bytes .../3ts_dbtest.dir/src/db_test.cc.gcda | Bin 0 -> 88584 bytes .../3ts_dbtest.dir/src/db_test.cc.gcno | Bin 0 -> 984144 bytes .../3ts_dbtest.dir/src/sql_cntl.cc.gcda | Bin 0 -> 35700 bytes .../3ts_dbtest.dir/src/sql_cntl.cc.gcno | Bin 0 -> 369668 bytes .../3ts_dbtest.dir/src/sql_connector.cc.gcno | Bin 0 -> 374312 bytes .../3ts_dbtest.dir/src/sqltest.cc.gcda | Bin 0 -> 47856 bytes .../3ts_dbtest.dir/src/sqltest.cc.gcno | Bin 0 -> 492420 bytes .../3ts_kvtest.dir/CXX.includecache | 1974 +++++++++++++++++ .../CMakeFiles/3ts_kvtest.dir/build.make | 197 ++ .../CMakeFiles/3ts_kvtest.dir/depend.internal | 286 +++ .../CMakeFiles/3ts_kvtest.dir/depend.make | 286 +++ .../CMakeFiles/3ts_kvtest.dir/flags.make | 8 + .../CMakeFiles/3ts_kvtest.dir/progress.make | 6 + .../3ts_kvtest.dir/src/case_cntl.cc.gcda | Bin 0 -> 91936 bytes .../3ts_kvtest.dir/src/case_cntl.cc.gcno | Bin 0 -> 628520 bytes .../3ts_kvtest.dir/src/common.cc.gcda | Bin 0 -> 121172 bytes .../3ts_kvtest.dir/src/common.cc.gcno | Bin 0 -> 99800 bytes .../3ts_kvtest.dir/src/db_test.cc.gcno | Bin 0 -> 984144 bytes .../3ts_kvtest.dir/src/kv_cntl.cc.gcda | Bin 0 -> 70320 bytes .../3ts_kvtest.dir/src/kv_cntl.cc.gcno | Bin 0 -> 642356 bytes .../3ts_kvtest.dir/src/kv_connector.cc.gcno | Bin 0 -> 376760 bytes .../3ts_kvtest.dir/src/kvtest.cc.gcda | Bin 0 -> 69908 bytes .../3ts_kvtest.dir/src/kvtest.cc.gcno | Bin 0 -> 517908 bytes .../3ts_kvtest.dir/src/mongo_test.cc.gcda | Bin 0 -> 25256 bytes .../3ts_kvtest.dir/src/mongo_test.cc.gcno | Bin 0 -> 397004 bytes src/dbtest/CMakeFiles/CMakeOutput.log | 570 +++++ src/dbtest/CMakeFiles/Makefile2 | 145 ++ src/dbtest/CMakeFiles/cmake.check_cache | 1 + src/dbtest/CMakeFiles/feature_tests.bin | Bin 0 -> 20744 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 + src/dbtest/CMakeFiles/feature_tests.cxx | 405 ++++ src/dbtest/CMakeFiles/progress.marks | 1 + src/dbtest/auto_test.sh | 30 + src/dbtest/auto_test_all.sh | 29 + src/dbtest/config/gflags.conf | 5 - src/dbtest/src/case_cntl.cc | 315 +++ src/dbtest/src/case_cntl.h | 120 + src/dbtest/src/common.cc | 33 + src/dbtest/src/common.h | 34 + src/dbtest/src/db_test.cc | 726 ------ src/dbtest/src/db_test.h | 198 -- src/dbtest/src/kv_cntl.cc | 500 +++++ src/dbtest/src/kv_cntl.h | 145 ++ src/dbtest/src/kvtest.cc | 241 ++ src/dbtest/src/kvtest.h | 20 + src/dbtest/src/mongodb_test.cc | 81 + src/dbtest/src/odbc.cc | 36 +- src/dbtest/src/sql_cntl.cc | 336 +++ src/dbtest/src/sql_cntl.h | 84 + src/dbtest/src/sqltest.cc | 259 +++ src/dbtest/src/sqltest.h | 16 + src/dbtest/src/total_permutation.cc | 22 - 69 files changed, 7543 insertions(+), 957 deletions(-) create mode 100755 src/dbtest/3ts_kvtest create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/common.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/common.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_connector.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcda create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno create mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log create mode 100644 src/dbtest/CMakeFiles/Makefile2 create mode 100644 src/dbtest/CMakeFiles/cmake.check_cache create mode 100755 src/dbtest/CMakeFiles/feature_tests.bin create mode 100644 src/dbtest/CMakeFiles/feature_tests.c create mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx create mode 100644 src/dbtest/CMakeFiles/progress.marks create mode 100755 src/dbtest/auto_test.sh create mode 100755 src/dbtest/auto_test_all.sh delete mode 100644 src/dbtest/config/gflags.conf create mode 100644 src/dbtest/src/case_cntl.cc create mode 100644 src/dbtest/src/case_cntl.h create mode 100644 src/dbtest/src/common.cc create mode 100644 src/dbtest/src/common.h delete mode 100644 src/dbtest/src/db_test.cc delete mode 100644 src/dbtest/src/db_test.h create mode 100644 src/dbtest/src/kv_cntl.cc create mode 100644 src/dbtest/src/kv_cntl.h create mode 100644 src/dbtest/src/kvtest.cc create mode 100644 src/dbtest/src/kvtest.h create mode 100644 src/dbtest/src/mongodb_test.cc create mode 100644 src/dbtest/src/sql_cntl.cc create mode 100644 src/dbtest/src/sql_cntl.h create mode 100644 src/dbtest/src/sqltest.cc create mode 100644 src/dbtest/src/sqltest.h delete mode 100644 src/dbtest/src/total_permutation.cc diff --git a/src/dbtest/3ts_kvtest b/src/dbtest/3ts_kvtest new file mode 100755 index 0000000000000000000000000000000000000000..3048a821362b189acd8e2621a0bb3e6deb91ad24 GIT binary patch literal 3777664 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%0AGL5(Vohke&$;Y#7~4LyP^O3pN#O{i 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%0AfU`NU)e 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 z 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

`w59n{el~n`rPfa9J#pz&C@-+F%O!7ZT26kpTbB zgX^&vER@kD7AcUM@=k;8p4a;XIpKZtmB{NnWMr|Z1Mj+29*gi@xL*QX7K>Q$h2XNX zjso8*;Z~G22KgTWpNeDc0kI6W&FFA^p9dR#m$@HzI4?2yP#in!+j-w^75HfAztDu+ z79d=oVewZ8?yf$0eH?|4C&AM+_&7@Nk@w|So#!hFu+x84gY+KEvET*Z?L>!umt z>m=L?on(|FAAA{(wNC{7x`tZ zm$$EC@O%%v68sZzcXi9-Q3rkzTvjLHCFnok&q3A^4`r-ltcV4VD`=4ZX6q>MrQou) z%Ovpkz-9d_7rX{s=6^AGtM}yoSAvIv%lxkce*!#%;m`gIg)-GqzVJP`=N(+;e=PVh zaGC$3z(Y4QNUy_B0v`c>o0z{aZ{&hc0Do5G${2@##o&9u-JM@qp;HNd4t&0-&&N^Q ztj|2B~e_uRgE^lgZd%d397!BUx{f4I3in$;E)Qh6~kpY=k zAtM{7^1%;)b9;`u68h$TgWoA~;r_lF@C(piDRScC1{w?zMUI0D?+$!n|F(@;*yYWdM|G+KqsO zTqC?kybyLqY?a&LaZCl*?bOKa)WMElk-Yzfe~h&wxNLlk1@8uaZ=W6x93Xm7TZ0nf4~#KW#>HM`>_{TyDNO^C<52O1i0@l6N9Xyg2J#a9S~%>^CR>%{>ObUg#1{$yuNO|hs(zYS)Z}Xvq;EQ zLM{t(iCodPzBS|?^Ro-y0mov1EoHC^*&K)L07F(8=MawfkH_)txR4qOzPTA=fWJM_v8RU}Se^-zd-1bS&FZ>Yl`>3JuKCV9~D0r$e9y#9O z&wc3!HX5v@gWVHk!7*pU!N!8McCcYO<8_w;HV%v*bDQZ(0*~|HAnQ<5rYbEyOpr9skEW78;)5*Q1Jcm z{&xStx-Xp9ftLt;1o%LMCxD0JLRdNYVg(=I!yH~;vw3~Z(gp@aX40KO(dp&^LH(xs z#0Mp-CdDtPAF2?}K*Ujfclqi-KE|^)y?QS*O$;`*#aNJK;!0C}(#@GPOPj6EK}>kNi^9Lkm_HhcE8tJB z|Ie{+QrTepolp2bRT<%kc?#G$uvuI?39IS6TH^7ql;;PXe{dbWo(A!H8pP{q5U-~M9)kp4Pj>{xJ@2lP^s)q$ zL;pM6^TzEMe|QO4@HpD7uxSb{RoHf=3uE{$WV?xWDr}}gs}y!bfd&_>GT~r_LI+ir zrrEyZ-}_HDQJ#q%;}jqHKfjykyvk-7LQOx}Wq2A=ZKA6R`$VD76t-D~0sJ+px0-I~ zw-7yJg-XjbQ;tSc&8Eq8GnRN}`pCjI`_OhD_PY-?_^>q=DzM;IL8$Vs#QzK*Ed6L0 z8)x$=WSNP6Rav@1H42---Qsd;M^md?DOE9*D0D$#Un^9puy?r^c2nF|v&Zqp7be=M zuo@#0{vVj=un9NZ+N=lNi}W?hHnGD-3NK{UXpeCfhDt`C(oXC*$gwmJLRhbD)xvljX#gw6A%?IG+}U%Kqes{Cm|3pO`^J`7+* z0aPErE(g%gKvoz?Uj?$oL6jH7rnaX^{9+nUJA1L^CYsud%~$Ac zg?*1k(38zoX>kPi=6nyfR-+v~Se-^EqS*UH-xE7Zw8+eM`%*;&+u}!ay0BmUX;uK+ z6-d*%vYJ3T(1l$NqWU1Vs~N56%039DE!VO&A#^2@eGx+6c4gJgsU(tZZb9YUSal1^ z>BbI+Qbr`Z5=xDs?DJOi^>u80Ybw8%T@9l@yR)^|(8t%XOKqvHE&DW_%EMV!JNl?Q z+u4q0c4w12P(}w<)`7n4z}8x6la-yfQb82U=|~r^V>>$1o{sGIUbZL%U61rpnr33V zjUZfO`(__Hg^6YDla6YV3GZl?9k*bXyY z2x5zT>F4IWDmOQ0^}e*EIa}pN`62AEA6*D$Tl}digni{tmHsR@fIbdjy94O^09Me# zmR(FDO+lwsXpIl6RCo(dQ)!2phh>Y(&Zsoa%w}pdPh zok8qyGpcWfdoO8cFe?nEhG6!4FcpWe4?^fj2<{c6mCe}?&1u<9EVl*y*pJN)r3Inv zcqr|-g=My+DYvlVmUQ4|cCIDOyP3^vMaOSqg{^33EB0;}6@;-L!|2j2yy`uRQXIrkL`SI-3 zb@a{cY(W&Qyq$dwNbQXAe+~N7WZINd(n(u>_9I%7|$}Ur>TS3hU@9;>sk5r z^xO69_uiCu16zCp?YM!Z#?bT__F)XA4`wG~s3wLL_q~E?7o+Y?iL}Uvy-Y{U40BNl zx|)g35nH3sHe#PDRIae2Dt)iAMH(%Kj7B9In`g9~+Y%{* zUuDZx+N-kJ8ZFS+A&pj;*{>R1*4TW*M61V?wJOU%UpKL>XnG1e$tMOrXQe92S(W{& z5Cl%CwzkSaU>^uPMB~|e#+bpswEqiRV49^e_72f{3oFJnhH>6!3g#KeG~@HfhYB54 z_>ii9)p7*VB_{e&VIL{{An!n^>Xoo!vf9L%Uy#9SbT`*cRxin8<8CNb`1C3HYxxQL%}AZG_`5@$pYL z(J~V|>Ly&i57Eo4fCH3T9bmdiUk~g+D9k2|8*4Sw3XQg#O&N3-Zc6Z>dJ8+}Ll=D5 z`xYv)uoD(KZDAYvL~5JLjhYb6{%7nueA}c@s@ddNv1FS~4H{M~m(28;h3)d8QXe+O zLT_Opw9qySOBH-`*!Ulp&t7|fT~`?au*LIwQ@1FbH7ru-H^qcZk1M8ie5u90ROz_N zrfQU-vBP|sWM2q1s@Ix2K8`QGGtm(;ZO70{CM;U6n%TEzI%#I>eH_xrsulnJ&_h_h zsO*Y~)~IZwQly(|RJ)kk-ULys8P}LhKbiQdbBaRK6;{q$pfkV!u$-+YI_qEVB#8fh z6P+-zI-_AWSxN3O(OVijjRD2PRv8OiQNV8^&DA@V-d(-?^gmzos_jfIA3^|Us=Hc zyY)kxIi+CSG}&_bQ>9vs2VuR&Dl|H#u@%&$4*!qx^c_QQvbT-U|8?OGZ$hvzUPgQ^ zy-s60c$WOjzbx_j`o8sQEFnBB@V$~jgTSH=%e`5~An8)8FVpWPhW>9Gpi!4?OwIbx zFm_mXAO7&Xzwp{<#7;9@MICVvTpTn08 z({XO8vE9y2ug{(TmQBB=P1zU$g80JbQCeVPpBXLTuiu2fN;u`f`EP~Bu-eMi*t-h- zsIt@c?m5{+>r_71S19bXvC6UBLc`e$Fpi8`z0S8GzB2Ju5PC(bu@=(HP-ZgiHZ8_^ zRREu}HU_EN67ZFH zHB+XKI?ac^@KF!?(0q%Ui4y~hddNb*S=5Vuv^`Kg#_R3dX7p)mwmg_-wqYLy({I7- zY%pyMVfi8SX$U*eoQlKPrRFp_j4f(GAGct;ThP={R@Z{w31!<_((ab*QcF4##^$xA z<89c&YhV)nn>U4|Ywtw8m6%MMO^ZyF9>5kTv>-^`rqJXd6(>j2RJ8${2CBMSrBqG5 zs$v{h3pM&eQ*q9i5vcx2^htnRvO=@KLAwP`Qu#sSnMys530|g+)DRp`Yn{s;9RA(YZ)p{rgB~6Ahug&DqZ8RN0(;+kz^?Sw<)=4`=H_>1Zh5Dp=T( z&1p%STC()kG`&6htTnygj?D|BtKsa2HgvWPTXhY6*q&`{OCNP$jUDVIwAE3DV)}!Z z@2gPuqlq@RQLC_83R9PN1TEX(|SW*`!X#!k*MhGyPyzi?AotT0P~1 z)t-9BLhtyh3w`OhuR7U}*7>O`{ixPYJ>y63`>X5x>Ab)ClRwP~P!9!A1!^`BZmTnc zXj*IaXb>G}rPc@0oL1_wW>nEqoy&J=aDG_Xg>7j|KS#2!+S1f;R@avHgtHyt^i4QB z(vH69$|kp`MP1p-_H?*CJJ6oybYK}BXe~-K}$F=?{ zPP{+!Q!o0^xBhCrh3fs)YQEOJ8c2m9Y*!F1ZO*h~5}8v*jXzKP=5}f^3LksKq~8?E<&Ak zR!f7ZqLYfRK?4qDZ+V9K(p`RnZ(4 zc2$qJr4wz{y=Vws)Ux&n<9pZA<`{PITH1FbTiBgSyR%*0Y07o%&+e3a9h(_N`F+^d zDEc{u9gU*&9;`8nN_((fJ?Oh0Y*8;d(wCj;MfH8y>S+474|}^eE$_{~=}oh5WPjd3 z3;MCc{aorwEijq#OjzAlTKFmZCw}U3g|_&q`>^q&;8&C|38*WveSPWprw9Bk+HPdmk`k@c)^HJ-4=#sCxfVZMc{`6r8+ZsS+&DqfaN)Kd> z0T@j9rs8*j>{Jlnp_AegNT;hSp}j@D)C=lVD{-$a)J z_!4e*kotu}4T}0Z#xzyMmh@Fs#YS17roN}qubNt;Q97wJ%ycnO{lH9H0@bh0G}T9~ zGvf?T#d+Qgi#pXp2Q6x;g))8BX}+}9SKaMLAN#3AaNb|N=#P0!T^PVewheq_D{n?; zTeGdfRM3VU4W{%E))-8s=qn-gT?jkXoW2cXSuJQq7~cx5YQc`RprxT~Q79FKvM*ZF zv6gIMEBZZ*ZD~z^wqe^GvyEQ9M$_<0blL#E!&eu`8Z??l>=&Ywfvna{YXaE@ANs(D zo%f-uK5VOnc3D`aFU|L5v-~LAkNxaN7yZ~Ff2#0j?*~v(09z5bgs*@aO}Aj0U*X3P zkh8ulm*@juz7|jQ6PstI#b#E9%}q1Q^5L5~=uqGL@Qq7d{cdb{Wcsr!3RU>A z%^EH9W91s*w?^g?w>>SxPGI}Oqx@2FPDBHqLE8M%^ zRccV#hZRgj%2L>?blJr6P4qoZ_KYR4N7%JDRjBNK zTBx!&s1DZ|Oms@&3o2asz=`HIg?+Bt@)$ONR{OHYsK&yufie$e#uWfFOI7F!PI_>* z?!!J-D8q-H!;EC+g*jW?s}4K5UOh`!%-Q_y3~N|AS33`wj(9|I>S7 zF56GC?XADr6%#$=$I{&{QPA&ETIsx45OhCU$pn6hXok@=?6OVentpO>Z8klkw>CE$ zWd3VSwAaM`Fc#u=yG=GW{3g&G6I&;UNcLk;I=cbsj*&!FUzgkW<^BhIU)%$4_k^$x zaBK?-uJgsUbB_?q(3NJ>dX@4u({hcrnN8FA9^rBy`oqG`_)x76+hCy&EbKd6WwEdV zKC9R^JYZ7X$O-Yd)1&8ktEu;d?zl-x!Ai*Vf$|LQXI5#InPI_Rjg2vlO3^WiZ#^F- zY@6Y&Hvh0^rtAMN?Wz3l?cFrp7}3kv$JE39wOrd(T&xrS^kJ(kwAR9}b=kv%x@c<4 z&GwGh8$r4sUhD^%-e?zWxeQ!3%|NUk#y|K{GY=Q3a~uIav$%g3ghOHDud zufSamCU(I-FdFURKeCtP+FqOPqT=c!oF2$6D}KQ zbkWS#XjFvt6jpJ>&hw4}wcFxowjXx++II_k4@=-^wiQc?Xtr3RnbB+~ zMl_9&Xbrg5O4QJk&B4m97ppeYl3wh%AI*$mKloGm4QwB_ziwbP0W>#|%?PCRfoxe2 zExDeZ3!(D5o`>+nP4F zW{s^WJ&c_Rqx=|F)Rw-yk?jemoEzDyc2w1u?Q2JPSihznz15yowx=K3v%C(J-P zpxQoca%Y-$3;VD$)!xW1MNnM?`@ReP(2uR@O6&Wvk0a^O&1}}S^!rWht83}Qo7jr$ z=-_p%^g5ay#imD5SrosvIj0B9=s|~iuzfvfW>1#Zliuyg_T17%58hAe19b9ken-I0 zTiH(Rh1|-{nCM_ETddIhSauK>t8Za{VnV_NUX^~jnH|F=@0-~aGcCWHU#$MZ%nq9A zoSD7vLq$FeW8s-Z_J@Tg`?6iW^gfP#X{8^_^`l*WtkI9s{njK%Yfwbl}yatJW?a#Ia(e5Bt(u_W7#!dv&)w|g75IPaURyU`&uD9swcE``!pacogbTH2DWXhmyVv0qwI>Ohv=n)VN1TU*nv)@)B0 z?GIzK+R%l8Y)c#3IgowThAP{z$!%%F?X0#fow=QD3#Yuh*s*Y`3TI2&QE5B2s~vsU zjxB9ZpR{Ks?de2&w!8x!=)gYeK-C@C+gAF>%8IS@t(D)4v8N-y7vr0bY;Gso(TQ#8 zL{~bo-#XFO&TM06oME%92wD`uKI}$SgW1_`^zL9bHpv>~i9n$oXl`>v-C?qF%XseUk9dIRMruupHG+B?|U7+P{C zThNDoNMLn+Xlh@!w=b37$$r0ertPBifCdw8X2%8{?$yBx19$IW3cw}33o8Ag;@Sze zcNk7z&-gNIDqtag(oBWEEDgKGKDZcZoHv!52Gib->?y*#8Q;v)#?}SX`@!tDU|Q6Hy&po~ zw`XTUs1~Qr&1pwFyh?+nwPQ0{(4lZv)Pfd-vziw4ZCkdnC9P@Cj?p8%N$#$ z{1o3=cj#&IZ2rV3o^O5H z#`hRF*dTV?KCLB_{@@RaSJp)Pi%gte$>YJoHc2Pe$>|Z zY^xQ#``!3_)ZqO2U;f9Rx8;AAjMu_g)HwY!t{>=sRe#3msoD0CW!z-@>}PzQX!ysU zU*&)N`B(m@KNoE~)c<#!%%$4=gO(yd0i z&q$9L>1iXqY^3I~M*c?H)kymq>0l!rVWeY>bb^t(jvKC@?c=}e_x8^vX}0ml8rQpJ z*mduQ_20a+gfsj2T|4e>yQtgr-W&Q25W(_3dh%+dE^_eZ(kow^iqFZ_@RH)1{_Y=e*1;VTwmk=;V;!o{cR(^>e+btt|Zs| z^Sspm%&+ZjOU6%Gcy-8@NjzVB{crM8zu$=W?g&`Z;+$*#C0^>^_()IFZ(lVZm>7#2 z!0~5a|5SOY|K5+gdi=iVt#+>YCp_<6{l^@Nx^I4b`Ax3+NnYxIe8V5N56YiRuKg$3 zOZ}w!xK3{u?p9s%Pw`U!jikNZSdW&KuKA~Wsjq#IaNneq5xZObW9~(<{RwQz2IH@oA`<~Q9dvWbW1W_XyYcCwr-XbnV3#XZ~J%%r$_4B>dpV~3^r8B2bH*?kBc2Sh_$vW> zqc*sXA1uYY{xg1?8t~{nv)2|)jb6pa5BvNZ?4^Fex{*Qebvv=yHGiv@`q|12!=7FH z*ksrGkM>euEi6pv)2qYK1+(CbD#?W&*rqIdP@Ta@|Wi{=v@UE?43l6U$gd2?Snb@kWE zIYFnc^7z@u-()ZK>6@o|B*rHlbsaxbz0{u)lch#YOE@xSRr}9){>HWt%kxryPId4D zt>1k8vTOd)FMC)1Q7PB-YX94jW3KHl!At%Am!~Iu)?vUE*Y=a-rM|L!SkjSeze;x1 zPxey3#=GjLc&Xp^!AEag{?Mi(*Yc-&segF=P?lK#+5@ibFUw1P^WoH% zds2>A2d;`ud{1J?Z%>>B@IFZG9YJDGIRI-+#u{*n|iepWB_zy0m` zsJBjjdYfziiSttb>du+|+v+-;a4mnbm--8ORo~sdqxHz(;laOh|Lyy^sb1>mO?!Fp z@lOKRyUt%#Ug}r389g>)kxy^e^GEhi@9Hn_;nrbGZ#lAL%bG9r*Q(mvkJU^4C$?qZ zKcMUFue-M2I4|`}KDaOB&f|yDUE5ERm-^SAIq~AB^TPZ8rT)Csw_I#L@|%!#16|us zikJE~HoW#oSa6qvuJxDUrT)Gt6WEpkV=S)oSDu&p??rxcO=HU3uU+F;;-&tuW~U!) zTrzrwtNwm3^*`F%FmOp#&xx-3fKAYfO z`@i)0`E9CuW!ytBfZogbs)RhjEZS5y7u2>FZH8S(_@s{>U&+=Z>pF2ef||6)cm)!SALCdpc6>oUufaf8~^31&;I3I z`}=dpM+4uOo?78re-8|-lda2+3k##r5 zJh9q8GcvCXyr=6R`Karb?LuXf$*>$-j`@lt>Pnf()2)x28r^(^yR z9>4bdKm1jBt3ROm!^7e_H@ME9A)j{|_VQ%?Cj{*4mt-&XFE{(V%Qa)tKf9qTy}9gkDx}cQn+pnjWc&YzJ*r9ur4o}UUf8EknT;J|Ld)2%0-?Jns^tZ{M zZ|a*j7VoNJ%zl4?)l2=Kre)mJY<8=*uJxbirG7=pnzr>j@}F~U|C_wjzj4=3!(!h{ z8(;R}F+KG9B!F^Md8t3^vupcb{mt6Rwg1Mw=3V^y7H#bD%_A{2uKp)`sekP9WmDwM z+pcldPxVqi?wJo>`(g2`kGPJXIbP~NHD=PtcT(@a*0uigywpGb>ePXiPrp9X)qm?G z@8Y-rp2?vDUh2NU)&G88>d#w0<@%uBUw`2`f5v&KA9#La>!B@L9X&ArZhim9-hPt3 z)b|T7etJ)6!5&xt^S#s`GThwvh{FT2J+&rAI;Vh?xm{qgq;3&PID@%-)McZrw!`)-*1V${crGhFj$Z+I8~ z&i|Yj_)WqO<6QMEUh3cVexHzIOKz@poj-%U)SqB5#!pv`q7R* z&93^%Ug|H+y8QH|vc&sc+fS;O`u`tmZyr}u*FOHQLNuRbXrd!UBAq6s8y!SZ5uuXd zm_utAyb4InjSmJ(3+* zb9_^HTiflr<41q~q9OWr&K>(Ux7sJU|5rrxd;M+e8Q4!Q`TbQ(^w(sZaWQ)q@(3S4 zB}BjSm8#L-j-J?n$6v;2GpML(66aDbV$5IoDJ)7bALrL^I z{hHr2(^YHqBzi~rqn#GIO8oh#h<@x)Q}+fTt6THN7s`iTfBmf``n9f^wVznYE_mV4%DTK`So;;$_IKJu%>qe;hfzW(`>OrrmM^lB5A(8ZUquOa$frWP8=7T^Af z{T!knwaIPt)@tkSVP6pa`sR`0C7W{>pZ@1^`J=x2{LvEqF*hE?)LMI}8a{twf7AMZ z-}DDnTIWaI$N5+7fAKjyKc@V%xPtD(fda^;|L1>K0y$6s*$jvSIZyyu8pMGdD1dAx z#DN?rfGi#2Kn@f@HVfiF4irE(8{$9?6hM{%aUcf@Ae#emAO{K{n+tIu2MQp|ggB4` z1(3~yIFJJckj;lUkOKvfEr2+X0|k&RggB4`1&}R*IFJJckS&HdkOKvfErB?Y0|k&R zg*cD{1&}R+IFJJckS&KekOKvft$;X?0|k(+ggB4`1(2md&0KmlYMAP(d}0c0B?4&*=qWSbxkbZp z^}dhe=-A=8&&J{TKaS{kaDG&Ckoo5k*jE$%p-Y~oez)%%hx?xs{feI7%_RC2J-@q| z=#MGeXM7=M@d8}`9HRg6+Gg2;P0gO+{u4yszw;FJy~_K}WB&}%SGHZ=_jq;NXoDU% z%kMwx@1JOiel6P@Ch4nHv1Cvu{{sD#(s|KNc$&VNqy zQ-UA=Wh1j)i~UTZ-@xhRn8985IN<)%5Pko9ZAXOl@0Wr5FOTRO7%ebJINvG(`-15A zwy0w}sowLqHfe85b>F}LbNxp2t4?kew)EGoAE73-o9TT0{L7}%^5;U%IIvzJJ1r{++KT;SJjzJBr6&L-dC|cCfK@Oe_j-k&vxxzy3W>LG&A( zE2}3TGe0VOnd+#{*FS&Br_=h+wI%Oam#X0TUrzMjiy6HJ zf6EQWTq;^yM|D~bM|RtsxIcii6<`w>L{uWyy@te>d*;`XbE{+*}& z`e&p~Sc&~OqMxZQO5X7HST^?6M8D_7k?!fMk|fXHO(6P9BNIEzPd7}#<#VF%ESunT z?bPNy*iR$+6}>;EA^H`)KUQrfE&og3yzHJiW&c}A{u2EvzhxtwVlpP<_A810;oXMg z4I-^pU_XTD$Lt#8HPpg89sm9xLG)cG))_Hp#GFC6{VJlbzSzKelV*?;u0JRGkAL17 zW)s{i4Et$BpSRyXvFoh`n{oRyiGISyJkvt9H4e95L-b!&(uBYIuQ*%qF>UcpxgRUx2NO&Dx#xcmNSRr_A7|~=vuz=nG;M8W8a_X$8?KKRycoXhWk%R^v6$n z&^IC}s0g<|g6N+#iHmMoxPA%tRYd=i-%N{%7dLIk?N<~1aYggZ7qvetdH;bE{nUU% zm1aL{)CHHHN%ZSEzh@iUPLd72U=yJ`f7CyJs3H3G!zS2eU1_hy{U?aN#h&R&hgO}O ziv1#@zrCPMM2EF?ui*A;iN15gyA$_^G?Y9){(|VgZ~avs_5OhCj1j8_>H1Iq`~{mu zJAPOBrjDG_^T9b>eiVzzChi|jdA}8qW^bk;iS&JJSF$vwM2hsj(y#`vtJIy{Z~TtO|AYK zWfb+{BKFIO{;Vn;t6x|>P>$cfXLD%BpR4cN8hN|sx5w{~%ZdIapIUYAW*^&%?_Vg0 z{vF3pgYF%^qrtvE(QlG+u5()ME6MXWN}?ZpG$tk9@!E2ne-T7~o$8xGRPJ-h`G<<= z*A8qNywiQ&1YEwF=vTCU1}FLztzVHz^jn-B>XB2)DjBc8q9OXlZEcK>9*`BN6+`pb!agtxrcxjw#<_ovf{zP;}N+p3@MKF0OW zB>HbHT-@qSY4jM^Uqke@w>BrHb}4nhSaMN5f(0ejcMTC>_ZGt<0KcmAed ze?mj_uQgxNqr1_b4Y>ZBiT+_Pt(BeCp`8w`-S>lpnEcBYyr`N%YOv%xMs8n2?I=uOj-EtNXhx*ld0f*I!NaQ>+@tEqvc` zDt>;O6aCrlv8fhM4M*Yn=Meo<`&11k?rNgOejd^H+<3BQ%Ifoy_iqHzA8UKxVO<;F zKKS~zi0Gg9Z<;Xuw0tk_Kem9Dzpb(??X$M_l8nEC=%0Jz(ED|RjK92{Z>-TBzxw-6 zN}}(iR7RZsXHFpYRYZT$1AmjI!7U`~A914puxf4Zi;EN2|2o0U`r-c9 z5dDsye{`&G*jn=YRT0teb1+Nx@yR(2?msQjzmd>n%+g!!mf`l75q(G5=;Y#GhZy$R zLR$VAzA|n)?%yiTIR9ltKVjsY#Hl^KIBvg!=wDaN7;n;k^k7_m1kr!>dg5Q%OX4Nx zA8|xKT`4`bIe6=q4^189flJh5`ue|ooZPz~!$Kmhq5~5#yVex>fRXZ2q^AEO| z*8gjKC#CFsHdb=~RZjF3b|r)EELz(T|Nf{T`VRJ;|GK!S$Q-vng6J>wnljWg`}k7q ztBAha!Od09pWD#}|9++>`p@hq$2JO4*x>x*ME~b$gP`+;{t`cp=np>p+3s+UEXnnI zCeb%(v^i+U;7y_U`e!N8ujg?i;Mb|;3Aq0?ME~j6Z@yalVvhYBqMvf}nA^Jaa~aqd zL|-|?X;@_0#k$xpBKpPZT)Q<_e*eV2mgtXOm_1@^kvszXB}CuCBi(sG$k9P~{MZuO z@n6yUn=+zb(fXTmqF>San+l>|;rf?EzryvGiT;xtR=$3Y2t-}&0_L_4F(!TA1xhUnL5dr1}B*3$^jpE*Ro<(W?n(uU61 zjj#U&(Vy5TEMU{dalW|yTB84H{}2B<`B|a3{Ut>I%&-3K=df{RxczJ??f8pdv37jp zvL5wt`{hJ`|BjEXUysdygWInp`b`!$2^-VAlQXV=1krEj)!6V(s#hyqe-+X1{7Y0m zk*ckS>(7aPgYg%FY&%Z&#pmxDqCd_5TtAN+c0cg@4%ZdKqQOzn}@AFae`*9A@4^izIaC^YYJlubIM8B5H+N86OI<&<3D~Nud zX&bsXFW&tH=g&=|f86`x*f+JE{BZtiiN0r&PjHoSaqe`Mb-YhK0?=`Ewv|(mb z-Th1b^Is~WU(x;n8lqp({sB2ezoPvE1ktZ(|9~?@zoPvEiirM|xpO9#eHk|SNSz+# z>qqFv{xT=}+v?Dqta@!pH?f8-E-R%gn@k!xg<^=pcV zekJSW4Q|99@+_MceCEIVUrY3l#2O~YBo++7^M`yTZTuQp?yc@8FYA?-mh|$!`(H`) zFUx}5ha2~PkIPpR{nqtoMpxc?rx!kdoJ5I?}+ zs;>Pex<7wD8lwL`D5cKS73xx)KP5!JUz3_04PQUsj_WU5MH{~+VGdQJ9}hHf^jyDQ zS8sFOpFbZt(RUoUy+z9_Yg^&tCynTj)iyU<@A5MRKfk9T`aKf6x&+-04Z+{Pg6J=H zNO5Y@c=uXdzLw};`+78Gc7~_q`AfE%*8i$Y4()dpel2j8FFCL4cYXfIiT<#ywN}lJi$i^pn!R^$%TgWT9mIiGGLWQNvdi4>*VG zuO<5ZAOC7t+;;I~?3WPzA^#+|h~9jD81|WlHvWw+wir97a$*a~_!Ir#J%n2Ld+n2q zKhaN0e_UyDR4vKmOTHjCi?18W>HoN*vX+`C3yV^LG%lz6ii$;$Llpd|Ejj0)_+b$tNgp{TisJKe-i!i z%NE$Cg=|}o@1Mzue$47GgQE(o+T;F@Ao}6CRbyjQy?S6@Mf9_>>RA?7j@g9oKXRh~ zPGt^ij}!gn7E?O!h&1-W6$IgYREyi2gB$4}-sac5a6IPZ0f`2QE5o zHC)yQ`$a^5a9;=GP03p_ar?DIfAPr{wN`v~O2PeKLiBs2H}@$FZ{UZ^XIZr4=kU88 zomV;tU)=vPqCZMljGW@C?S}hLLG&$`Ozq_9u0Dk8uO#}PR;C9H8uUT3{#69g-+9YC zF<_7V4P3s8=(q5{J=x{+2+96KYNGGBxqJVeUk+#D`==VBzk~lae*8L2a{ejXOdJ1B zk6gx#S+jYmWd0=jZ?9Oow>=x3~~(!9^vtX(*NB8a}aL^W`|{anfUql)NX zsCC-wa3_NxJpO8;pKJK^U2SSzq;wT2j0I}N%Z$`ifCb%^;@$4 zVG+?^m!)tWF{Se>uf8n|0>#lT}Je`#42iJWxrS= zIsS=$xYtd~MQIb?;Pxwt{<16U{H|H`xFtFMiGH`zV~rnl4C^%h?4H%S-w*WrhpUMG zmGx(br#G>7@7}yh`Ti~CKSKZcca+;`{a?}k-CCkw(f-|RJFWbR_V3Ol`W5Zpy_x7& zw10OF(J$Is->YH4od(xbs$shE`=9rRiGI?^Z9OOco&OQ%kCx~^e6qQ1@a@2rc>XOR z`W5Xz%68DkFQD`KPJTm&F2nVg6aBFJEyv|--YYr(RSFWixaQ#^hE&mVqe`f2uO!UF^w;}qA>jgBqn;R|1`7bB>fwc?FT~c4iSUaSb zZ=I@t{!B^qS)KNk%>A25?q9_b{UN1af<9_yrs3m9P4wS>ncCvu%stun&pX!8&0qTG z|2Wal%aC_}sEoA5{hvehZ^wRgNPMkk%7cGAiC&v#MJIJ>l&L26^KiaUFS&3LJd4E2H=qK0nsQJ;iN4>OgdSlIX?Zw*SS~I9qU|3A zPVe_~3O;^aiT)(Fv{pr9cxBvw3ZlQi`3q&~!ajC5f0RUja)wEp-mh{W;`*zJewT)i zB0kD{oS1b+sQ>%?jT8Oq#$RgYUA^om$v>h$KD>+Pw8bN1u&*Kd{R@W%U0Lm=!Tp~@ z^efswToC=Vk$zP)E4^Fc^0h?2dfBc1>nAv^#n&%vH!Xjog1VZo?Yv*|{N-k%Uwzmf z)r#aZ8}RjuAo?>WT{PG+?2%;su(&<6`uC`$ib&k}^SC5`iT<36X@jkOeJ@~t0?{`a zUgkS0et9)~{lbafWQAVMF01chM`_>pRU8_e>p^d`;X#)6>E;a#O*&r z^ux^dwBLAiMn2BpBBJkq;&E!y_u>!u_|+2q#C(fM1-sq^ zziclp|0b2bbxZAd-5dA+pB0UC(_w`l{r+!hgT`7nDxCNgm#-xHy;!>K0hxVwoIepn zzna?9NYm@2Wc^GP(XX}j?0^q3CX)Tb)I@(+Q}dA)egUU&|8b&!&Z~9Ajo$a7aQ-eO z`csGWHX2pi^fm5(4bk5_(5B|`gckR)pF{L7hrV<%E!f!^?_VT{{=G`$!*drjTZQjm zYl(jB+U)LU=IoU`zsmN}@^|~!Ssk4^x;Fd}vh9X0+4c8tWJKS0e2_);(y2-RDy++w z?$bZNuO#}#;gRjXHaKRC*Kg4f{WCAmOxW-uS=`7l+M=s}UEQBQA3^lz+k{0N?&JG3A7!VTviC;B1kp}jM#m7nnZts(mNC#1CQv#I+KeEyw7^joaz zJhqOrMF4*PxQOUqne;^dJGiS>5{~bF(%fI+t584iSINJ|Df2tz-gQsLh zhPZWd!{eVx^gS278#TMp=RJ7*bBO+e*WZ#;!gnpg<1dJQeWPB+lRa*C#^bLg`rF&h zY#I_YHW7dSl@R^D176nYdCFrA&L4J=Hh%VY9gH8``gs)RkDTaFDm>FD{GS^2aQl@+ zU;Dj(pg0;#rdNl`cDm3w@j`#S&s9E9iolj!|_Ia-e@MB z!TBR6`hNvxPF6mNEyUv&LG)cC&W@io-&eB!l8Wg6cy+C%bIn=SIDged-_0+qM(YeS z$@8C_=!d!$bd_8EZh-qgljslpadq;QZEq#lKN_NM6zSvS8J*k@w?BvIPgt_TqDQ{Z z2kZ-?AD3U*BINrSFYFf){Ti`XMxTqDEtx;GMBnnlV6zLyPNw4gV~1(^f3oe7PCZQm zy5ZwrM)dRB8@FB6F0m3m{uM;O=Lesze-AZ=}9od2wV*8fEp9{VmIx2p!u9~sdfT{k&;W?s4@_T@zXeYd$5 zRXZ(~-2YV&{k8%B_T2Yu;7eS-lIYhz^?1Z<`yWGA5^=rJH5G1u1ktZKr)6SFc;p!DtBC&Yb*V|_R<1VKR}+2DT7$ixPqLJ(AHs?L z_tF~O7BsF@h|j+?M8At=yQVvSEckZe)$H>1FHHY4{7ex2Rw7{Rny($|e15&#T&L>q zAIJr5{Efn=HZvZZX^Qh-N%UvV7~nNzX|D#j|5Zf)X_KF=eg|!Sb+Soy4_*EB>mP8U z-)q79B=>zMd*b}hBl88!tGZO{gVanysgLmx}q%g_0`p1fBmi``Yr!@96q6V z!7Kdzr6Ky`ue!Qva~u9O`-Y8NSHAxF4?*;8GFx=~oy&&d{3{{)j~n%_T{r%~MeMU< zwEoY%=i0&On6>o!jp(o4^|AFxmmoV_zMSYM6!hq_Fu&&s-2V!qZ>g%4bSPFHgU_Fo zM1TH7;q01oTk`u^G|~51(LQOlZ^%uYzbc}C*zM_nnz9k1xBHg+y8O`}f1K#I86+S7 z;`t{V{QkR^=)ZVx6WsRLfTlin>F@swqJOx4Kv?B% z%4vB1mYtyWe}cxu`u*UMlJj3V(f`%5`PdP)9XsIrj|!rn74Ra?{e45p?|%_Qzs=Jv zHk~(xPR8w55q-nOC9x}CY+iup4>i%>GA?Goynr36@c470Z~y3&-@AijpW*z|5dAx@ z%dK0zb$^4)7es$`W4Bs=_o*=ow_i*2&1N}`@b0#89?oBOl9qoxPG-nQS}z)a$1j5D zFM8WF{MNl7$@6VJ?=p#g_3a}DE?S(t1h-#9 z^gp`Gn@)(a_4$+SZ^Kkz23yy~*e~A9+OD-dQa_8FO{M8cuW6>UUx_TP@z~!@3 zwEP*h|5wY|kCr{g`6nm(VQEE8jyYLM-oH~5{YB$Tx>jAd%MJHGC;CG>Jg(VpmAz#D zu}q@x?*DI0qva)%{Yy1O-{>;0c~pH}j`Kf<=&#QFJoM9rFvdd0Y3j{r)l}O?L*JnkA64*S91PF^lzEg?^df? z>mq#osENLFpC5y3UtT78evT9UC-Y`EbE&n?I=n?fw(k7HM)&8>M?>_F7QP;Dy0}y{ z2|rrCeyaZcIn^0j{{@|S-}#8Yh2;6GGNK=_=eXiP{>o_Ff9x!+{D&)xhOQaeT=M>v zjOeTEo!xVOM!dlJCnx$5b9;M)TfV=5>#rdC{hFBeJ>PJpJ$`;jN%UtmYi{rKQvMy+ zKbq*DsD5eW`R6W@^|Mt(fAZ-WcK2GuSI6yF6aAvapKUhxXz&^PoanFlk>$7jymbG^ zOrkF|^F}@W`tRMj7EjCXf9UT&X^4Kp)Kl({YYdx(>o17DL7`K1?_;}`V84jy$Au2J z7ctI@aQfXw@;gI!}X6N`rpsaXO)88 zGw}TjHPPR-t%X;eDR$j#obJrgwf}$Sf1-b-#bp=c=U+Z7vU#J_`TG7-ou`f8DepOn zO-?RL!~Lfr`kjXwH2gAf*qmmK5?<=c*WbSrM1N7I7B&`Emz=tco)W0@^~bOL0T@;T9Ob=0<@MXjeU*iR$+^Bcab9CRR0a{ix5 z^n0#IFcEz1JN*2shUm9x+N|Yn%fCW#{%2mK<-fy+VLrxPw++Va-%RvhdV5C&wmtF^ z*Iy9*4l91wo@~^9E53fsxkRgfoq9%=%e&9@!R;4B-*>}9pHZuA4RHH!68&cL@6?+g z)me$#uO<3@Ze~Z`eDcu_x4)=}*8Z90Y(puclE&`1da*(OkJmzf0q)A08O-2a^DFY}%5oBHs)|1Em$fZ5*hO|h>f`rW* zyCZo06D83vTF}v=+tcwj zz9IW@{k25jrRB7c?}axc`=6E&{fvu^T74~*JK_9e*J#JzW1stde6=&1_uQ(x|D=C^Peb%g91aaVT4VcB+<$pQf0j#QSC2MjV{rWi(Qjdt9&$Nb zaYB;6M88_y9Z_#)zL|&p5~4r7Y`5?8gwNwCO@inr?>p%7*-Jp%%+iQM)_#cXGCFw; z_9KY?&%2$*8lH1^!}V7Y{o)??`?OxUU$TB*9MP}sTs-#suYH#I{7p^tCswjD3R$&n z93H<+qA#o#nY{1s@e}(RqHkuATdUn|VS)V|qW>m9+vJi<{cZUCM-csQqq+=AYFI28 zznet=#W9=ur{8*?!{uv<{)PCdlRuo^G#BSj8PPXw_HT5vO5q;dsoxIWaoEcWL#XRCl*QqQ7%B>}!dBs}pCFMrGDl zCAhFPP##>CUC(nt1-= zMBnx9#qiZf798sJW930z+WYDL{P}2ze(-Kp;N0HNpW*8-)dO1lcMg7?@bp0NdHnss ziT=UxYPB2<>qzduWD@-rA$$5BDCxEY*Iz^QJ9aZ_Hag>?+1p`r%YS;;zyBwQ{><&q zhU6M4TH^duYH9tq(9pZf@GX5M>la24{gJLK`o+&lm+b$mBKl@+8nl0%eP|i3KPUS3 zF@5~j_RPt{$8RRlSNob4beZ-x_WFEWqrx|m4fJh z&7Wnu|A(XG{ox{_?`(W=VA2D>CyH(<<(J<2_h+<3|8sY1r*)lgba|Rwwfy+k&p*nC zwESB$>9wiT?4gq9_cTPmY=2}#voS_0JbrmZKXjL`)vXl)CHVY75PjoIQxmSWaf`(H zt0nsLZmsC%z3k*TTz(1B-!#5{`}m+oD(uT1(fYqn*of}0re~eO^Out7cN~(@^qt$A zLwNpG5&Z|nMe^dV<~w%Y8{w||-uR#EccNe0c1w>X+s`LrUl9FCp$&reY`M@C`|L5T z|GKy9sV)nSNypcJN}}I;rJ-MtFMEsoUl9Ec`yYn2?y*<${b9wpQ0-9SU|sp2)i zU-?Sa=x;|)NZwx&MBle@XTv$3Encol**j0y@A~I2wM4&h!z+qrb6TZen02_B&ez|+ zlE0w!|F1LyuQ~y>UT<3%Qhw^Mzki=e^tXD<>U-${JNRX1$MUUD40V>GQDHUy|RSiirNQ+tIGekDR)bt66qIS8x6Evs$7b{`gpGLa}Ev zJpZtlwEjO^YkT{ov`rVx8zq;Ydg=RLM)V(D2^yYdpLI32`k?ah)6XADqW{u*eqU{m zVUpip)I`76+29eW&o52Rn~*z3*MIu`t2ohjEJ*kJH7%#d;p(-@*H6*=s#moBdwD!1 zXogkN3BUT^b;UE2^1HZy_WyZJ^N*Z&w7xXwUhcA+1}${Hqwde2kLCl-UvnVC^rgwp z>#N!%h3dRu-Jd@n%}1L5Br&CpPqEtMp*Fg<&eOktr2S0uy<~ESN3w+_F_Vsd(D_|- zfBt;<7n+~4Ufq6D!5PDtA??c_o!6iL%fHe5AJrfApXg;d9zXxWiT+x{*j6(lH*5}W za=5(yo@Ocej@5;VTWn>{98@*9UAAg ztlNxz#rqFvi2my3Znm}uPtV5JpG8D}PhMxUxQqF#aQ`y{TKkvV%gmPY7OQdl6-58% zthOrm)z>A@FGLW1<8WcRvB`{ElJh5`UuSTA^?)NQFJWIz^dp!46EykKT|a#O#EJgL zi+e|Q9I?AAE?-0RwNHE0FphpFS-(1m=vSMmu+Cf5*c+EGh`z(Rt8w%Htt$$%b6}qu+I!>`D^Z&oA7;KPZd7?A6XUszx02ff%Wt6)LGNI8fEr##=e~B`y9#knLVvhKivNc zqQA8Dy!v}KcC*L6Kha;@!mRhWapsdY>>Bk&*HUL_u9D~*uGrJ(eEKKp`qf6X{wuS4 zUOhBBr4aX@n&_W4c{s4!y;*JW`8Ox}ZR`8GnkFrf>>rRx^i4YcwkxReNiu(Ei2jMh zoc1?&oobKsUl9GOFPDezpERQ>{{GYw{Xt)<^!D3yq!jnRtSW8%wwUfTH;MXgf_*vB zZ+YvlQ8D#*J;c6(=zH8c5ZllnAy(X{gd}<3W-<9ZFC{62ax$iD{ z{#HTsEpONBCmi=i;PU;6{^?aEo$kA*OZG2U68%owFF3vFmCW(+6G8NA>{{3L=(yMR z`21Z(^sAq)HnLY)v-|k_X9CfGK6)UGQ4DS?&8z`T(;F6zxw+xg6L~Pwl=NQIdJT{7qR6Rtor*WTB3hwUhToI z^~S{D@|iL1_#boQQB1A1ha~r}bjdLbN)jP6hO8M;y?}*K$Z(}AO{K{+YNCb2MQqD192b+3Lx7HaUcf@AlnCVAO{K{ z+YfOd2MQp|gE)`_1&|$pIFJJckR60LkOKvf}6hL+c;y?}*Kz0`5Kn@f@b`Ih|4irFk9^ya_6hL+X;y?}*KvoEG zAO{K{y9jY02MQp&1aTk-3Lqg*cD{1&|d(9LRwJ z$gV*g$bkaLu0tHifda^GKpe<{0?2Mc9LRwJ$ZkO#$bkaLZbKZ%fda_xKpe<{0?6({ z9LRwJ$nHTL$bkaL?n4~Nfda@LKpe<{0?4!w2XdeQvWE}{a-aaRM-T^cpa8PR5C?Lg z0J0|#2XdeQvZoLSa-aaRXAlQ+pa8Px5C?Lg0J0Yl2XdeQvX>ACa-aaRR}cqspa8Ph z5C?Lg0J1j_2XdeQvbPWia-aaRcMu11pa8OeAr9m~0c0f*2XdeQvQmfxIZy!Edx!%$ zPypEnhyyuL0NF=~136Ft*(ZntIZy!EXNUtiPypE%hyyuL09hHtfgC7+>?_29e>T`D zKVK3+_6_1d4irH49pXR^6hQU^;y?}*K=u>jKn@f@_6y=b4irH48{$9?6hOwxf39Lm zAO{K{Gk`dd0|k&7LLA6}0>~;s9LRwJ$SOk|$bkaLsz4mbfda^kAP(d}0c2Gn4&*=q zWYr)J6JD1fXc#DN?rfUFk8fgC7+ ztTx1f94LUy2I4>t6hLMRaUcf@AhUxwkOKvf*+U%2fda@JAP(d}0c3R`4&*=qWOX49 z;kPypHA5C?Lg0J47|4&*=qWK$syc-OKD$I{QIx?Uw%L9>h0h9zyH}jSIm0r{(G5ghw}efQ4;ds z;s4M7IRt*t6l22vkAFj7e^0aO(PB^QQ4=%EHtPNl`u+E`|4aS#{+VcpaVH&G=iujO z{zqtiS9}^fT2($s67t%f`QdD~bNBDjlm|SUpgV_rFvT{lLIi zDQ{nW;`sM_PW0eoXi1N_TShjKTevNA&+L zEu7T3m*)aW{uBLlO_^KG`s3|FO=_3FfAT-?pAvnygPW_IKewX|e*aQoO3S~Lo5$SN zrJu{d^;Z)8!G}NF9qy6kfcr0k=$ka!9JFKbrcnI*eKgTe&-iy}^%}<6`1xZM(I5MK zs>P-kS2yAMbE4lO(6jZfFB3G_Pb2ytFD+Dmu-~x{k6$Lyk9Q~>RAP2njoYsw`un4= zHU0fLGy>OO5dDiL_JJ$L{Jj|0zli8N%O*HoJGFTaE?-OZU5gib2fk1Lh1<`}X!##- z%EHV%EN(8&e>u_L(`sR@=#Kj(&#xE}(NFQQsZlp?jUV>aM8DIdJELD~4)?(GCnx$p zDrY(M9vNqWpP$qc{pT0&Ra^LNv1I=ynK>>0M!)Q6{QBKx$@>d(qOVSAX6z^5oH6)< zO@!|JMgRPkg6N;kN^HJy*xhTm|3iqr^^bh-74Kq9asEaS{oBJ|^$r}f?*T49j_A*p zDP@kS`7N-oCi>bM0rlK|4azg3R=K zaQu^=GosAeaCS;O_A`n8`pnd!QRmN(#Qmos`lk;^_bt1+by--8x7Bs|W3K!2 z=Oc*z^`)c!Qrhx0xO`Vj+V~mfd{6patZ0CJ1r~$iqH>=<$G)8C`_3DdAlq+x z2cLf_iGH08NtGK^-tCXuuOj+$JS*8fe`)TC{Wzi@HZHI7`Q`op#qC!U{b%-*V;hAi zY;gIU=>I%z5OluKU*e|`{TIIyn|e;pFPt%A)gaxxqhJ3(L-ZZ&JO6cYQIR=rzn18) zn$j%b;<&tf*e@aaD=pUb4GwZN#`(jnX!-Bz`?f~juKDe)2hIDaYrp>e6*R}kiGKXB@iu49_W6m=Updil#r{pU5C08pS2i~7 zke_yc6+VB>A^KN*oK1?{m(0fbt0nqkYGG~5A&REB|5$Ze{&%{%-l*QG<&yPtWJEtd z%A)042KD5u&&Imh%1o^w%GP=$l&o zHOeUJ!$sWx)vRgxlYJ__eX#1aU)lAx1-kiDU%s5^FZ9kExVu^X;kf_QM88o{V$T&{ zy&7Vl6Mge->8elhttI>SWfFbIDG&X(O}Mxm_n(I9cN)|^^tp06{{G1!`fkHg!)vJ4 z-#a>MSB9?t^}jy|qW{w{JvFzT-&x#$tOjlTkI21~j@*9lg75#!iT=W}1edUn{nfbt zltlkfV0O&qm{BvaA42pmhrV<%E!f%FChcvhuK)D!zp04+y-MT5a~CvQRX1d|{eSzM z==+~|oSO8#_yhj_*AV^Kwb|Xz%-K5*w|_IyPt3QNRIuw!F#i6`A^MX_-@2uCyzY(X z-y))4YwOtoA7V@-@2{5-{b5bbM_Tv=oWkX^nza0_X#ZgwqJPe-b;OO{_o8tB%ZdKf zA-#=8)i#yfzf%zXhgEBPUtFBH9+$5q`u;t31e;}9zrlV8(LdVUBsQvM$1*&BL=gSS zH3FLZTB?TQ@>N8C(c{@p;l;oDU_XxNXEb;i5nX4?Z~Xg%n&@{}e5C2J-Q5lF{Ktv@ zsnF=!PfzWW+`rZk{WCRo4}26l*$nr84$;56JHl*9so8xz{|KUg^-NalkokMx;PQ)z z{>@(ZYgBvgeG4DITB2XT-gU6nthUa~G%wW6zp(rmDhqJ4x=}WfFbcO7~MuCe~@;?R;a6Zv6GXUucMaMeA4R z5&eqRuNFk#{&6p-UIkhCxc*wA?|;}XK)LTt6+Hiy5&e_i-`cj@Jf#Xgepzi={y({4 zGI|H_GeQm@M9UCwH&;rUld^mqF>^f#_tCRx8!Mf8i+ zxpr%={QimiPfhekFU%gXwMZU;eNObp_B;|1T<4#=*v};T!)HAU&mUH_0AIgph`y82 zD*rC~R`f zRXZ0+_HQHl+kX@XtXOmWC9c1g=r8n|GSoBs_)^^eB}9LX@1&HS&&Jlpv`M=_;qTz^!GQS|McrO zU#)$ybp0Kozifur$cc}+5w5?A=qraf4T~(hDA_+mP4sIg^=vmYE>x2LoakS+4ELU~ zWkEEqe~o@ToAD|>WunOfJpXElzQw1) z#D%>|&f)n(5dEFAZu_jf`=~pve-Y958dczV@qK(vJpXEmetzG=9!+Phi^JtJd)oN# z%(1U~clOJnxcxGspUxij{%B`B8~ZjyKY8k|(I*tilKZ!EqJORLsJNbr>^`{t3Zh@T zMu=&0=dDL@{gqVTHzdCIjQd{lDtnvju0QnqZ>WfV_Ql`;`!!Ww;q&J-qHlgYE$Kv9 z%iOYQ!Dn>k>+k<+h(4RY-Xrz9#RJLpH_>0b^Sfb^c=i+5zl`X2(Af4-HyPs_KfvIs zuKp&vKe~?tEq}WoR}H+j^{r(7i6HuYJ8F^|{g`iv^G8MWXKlYwx!Ag!^!X*CpZ}}W zwr^3>yEy+i(a$vz4Z6uE9l`a_B>K;$#xO_qMPyXs! zlaFUs`1-Gi=(}!h*6g1vYiHx~wM4(i%4zO5=f{QP?+;domVX9?PSw4S?UMX{EGPPL zp~LM(jPoLV{3(e3lX_6WCpe*ur5Ao~59nD#y2aHVAbt0JO5t66h< zrn_ECqH`2MGg==Yhnp?mY< z-Cywc*94+}-239#H?^H4TtxKqUXQ9< zss8*{xc*wApS9~yWTU~83b0>7^lxtYm^kapA<6y=OinxgyM^0@Ha%+d7?&?2`jrl8 zhmEVWr~v1WoakpfnHJb>pp_x^U5Wlb^;V90`Rth`_7z0GQNw4xw~QQ`;`S?vzWaL5 zs68z+ZSeU=1kqo0>vR7ZOD@~s`9nqY+4o+4CworbfXi1C{aM1a?n71QSloY{=r6Ra zIp~XaR3JY8$RzrMogWNc5`RU8`#*>1AKzxAC>s&D3%@@ji2kX+$Fbe52UnYG@${?i z)J6aN2CGLqe#V=H1^K;Z)t5HRY^wA1&%ervev>eVs?m=JnmBr{U$67^&+n^wUqbXZy1Ay7CLcSBeO8|~ewFuzL{3uo zD8S#}GNQj{*$V^lD0De~eo9XC&GH|3&d`=h-d|7>{kTR+hN(XX^;Pl&IFV<*Y{PxSjwKVcp) zpz|j;=g9I)M}7VaqVKD05|ec@pas5v#++&SceZQRh_07U{=(nCu0;Qd(V|Xw9OP$l z`xQk0>E#D)y46xk-v5Xo`sz_;QC11rUGV)o718hgbY{Eb8;-5Q`KuxNbte57diZA( zcggoJ(N7yR*1A#Q#ILyg5~AOWrQ05m*>}hJ%Uo#VUrp_4r0I21^8S>J=sOPF-lFA| zwXJae$ccVGzeDB=kN=&H?_Vm3zDui-$yWoaOZGp_B>La@XX6^77SiXxi2jG9)IN2K z|1rk%uORv}pNPQBwroEhe=X5Jvvl|PevMwP!2MrB^n08x?O%0#?P>V^Th@SLa-t(HUq$rq49x1jYgPJgeEz)Nslw$^1|BM||q;QM1pkdy@ITA#MEX=KPwJ=IA1Me%h7j z&rIV7^)Dj&3k;UEt2=thEByYGmguuLe*G@*j?TdC zmo=j0PyX8~)wVZ^8-wewAo?%w#Z~2`mcNw?mtu#{pue=hJ2`%aRC4R z&)jJBcYL%v>O}VSB0T@giGFOao|9bP)ZQ&=KhfWFt97+GMUS4^)mw60*M9x;w@RWP zweVh4-=mvq;_nX?(cg7BXHbU&L8tNfYl!}x!Ap{^D|_$6?H5FUXY$m zKh9?iJDRg+hWT9IG+qDI(Ea)I(GvaV4XX?*vw3KQ>(3k0^5?FlQ=>gC$3MY-CeaVH zbc`^FXd_uaK|}P7E7*THhv>W6cWgc+yGs@P{UL~c@NQM$+}_Wh;rmxwqVH$EBl!3n zS*3&tUgh_%O#d@{j5VS4|AHz0lkQwft||Hbis)Cg|1l@}742V~N%TkURhkW2wy`C? z|EVGRV+URj^Lv*!7U!SLoz{Oo`PuPTHy!sFyrJ$zUDsPd|I3N~{!I}r?6Q7e!~LH_ z^w(u6Tt|#5IfUomGeke)r_yQpo`Oo)FCzLLZ=1T*S@PZ#-+$8*{p;Hgj(s)2qXzE( z5~9B)R#77>`^6G`{m7cq#xLCKrsblviIVrvfz87b0iO1zf5d9l#SM>FWc&)*{is<*vJ(*a^f5sqOe>Kr>+GR`cw}%~G z;qp1rzq0=9@bo6u?%kVLxuZMu^v{oIh<=qjL)^oHB5va2Pw7F+pTB)FD>a!GavdN4 zDxyF4i7cvi>g3P3{1T$yOKs;-xAgig-2c@SwEDODJR{_yV{6I#lQN<|#QSdJONx$? z=Qrg%qJO{IJ>O*+ z8z$rWbE1F7=EbDt$^yyyKbb^7OYBrGe_r}())}GJ<-h*?S3~q?ZQo?O?)sL0asCOS z?>%yIkKGqK|BKtNCHjMF8uyvu;5fE@H`%|s`kU$g=supb{GFooGp=_xs0O}&q$2uX zjdNVXMtaP_&mVE3-^(Rj{^RP7{%{MkLLb;IVM`}5}`C;HpJ&g$sY(Y4`+kZm_~ zo<4t>H?91hpQgyY45l5y`6nm(a?5QFsZl}Mxc?PI|3y{h=!*^Nti!&N=$HI>-zh0y zH4NuZ1kwK|=NTykq&LyMFy1=1c3p$r&bX zdcVqji0iK)`qhoU)Xckj*%9ZjKhYl_-o8p?>lK@n;y!UjgNmp^fSDc7%Z-F`6534v_$`$^|6@NTVKm?{*@5@E)5?=e3bV% zfzN+fGg|)ND;?2f=A*NL`20ss^cQ(N39nmEejT5`D2cvi+UWMTPn&PU`L7}R9#xL_ z8gMBj4WGXVqM!T!koF!xQM6guc7sS%7{!1f*nkQKBujWf#*8331SKk?C<2NMiejeC zsHm6|YKsXo=8UbF17bwQ(1JOR83Xz`?3u0oPuKf>r|O@o<=WbNFQ2EM&^bJC?4f_k zT=M*wn&@YzdDZ6g+$Hy~GG4UyuU~a{;QBFk>+tz&mgq-z39GxV_d&_~H_sFO`YHRA ztHzz*Q2a@`QnUWoog@XTi@eWg`%r^0H*3tay~qMz08U3a^tYbEaw5Qx6<&??Un!&VyN^Y^7h|JO~QPNu)! z9LDP(HPQbw*&*2N?bCd`|H1gs`fvXri-yIieh+c`vqV33+NSW1DF%}JS6zty7yZ>1 z3od-n>9oObnr8fJ_n+lNe}tJ|{W}q{lIy2RqR+=RwpjDe?Nxg>Ur*PRuibufMBjy* z;i0R35{B=e<%zy$W*5`?AEu3c?_yr_>IUuon*!0Fo|j?dyZCJ|e*YTlOY8rVF>KbI zVuc#}a-u(JUUAR7m;J5r`Aa3y@6hgEtG+9qJjL^uBl-hJSD7sMeM^nUZ!Xa{f6Xe| zzA5jIeV*u7zBRFVRC`|l_6v#r7V|K}QS#abc>5s`{dCTt(|gl*9=QFI{-O21*G~7; zH-E0|!`lyz=+Bx^qO&8VViqpn(T`TX{q6%s1*!n)`_qa3yprrhb5GC9xO{J-A9>C^ z_?bb)G2DN0qJOgSf`96+tIo#0g6KE2_~X#o*lIF)w@XGbT+aDFt@0lUA zDQOetgttGrMBnfD$iB8+3(E2KhbQ_?>sODgQ>bc+*B=7WuNd5^QTNwn0l5D~qCahu zS!lz|r&nfc23 z=kJdr`Y(;sJy*ZXRN?ju>_BV(Go4TLiZS+$z{g(-qF+6yv(jnJ?LBz>sEB_5;L0BN z<|RGG?avW?w;!=qgT=;1`1mWA=$Bru^jtZ5x8(XIPxMFHjEkCeXm&Ha{DnmSW5j$@ zgI-G|=U)V(-`V$l%zE)asTr~e`edR`p#D0n&ap9 z1){IJE>v;5)h#7nel^i=IL|+QQb@Su{xL>QYrnnuS!3(gbF{$a%ZUDOf1gpq8#n8L zk3U$VKcn7;;D?>>^uXoIiGI)B51sjkdPlIYAo>H>2Fv>$t|d8sRucVHiZo`&Z0hGZWl~ERSo6+n*)+S4QX>9sA`fdHTC1zBjeuS@gop@Q*LL<@vatIar>7N{bINN zBh^!Vvhe=T3!?w|#RZiPU)%tnKUNd{*p^lH4o}%?+mTcmmHncoC2zntiw zigLCNbJhQa%U2Tp??>mD9Q@Txdi+B4M;!d^pHs1-a+YJ{6ixeU&wuhnzh`!7+f#OC zlKYp{M1M)9I?Q14?$(n2>qhIplhzs5B@sk+VL{a+WNzb5x<@|Vj!CD-2+ME_OMW-tC%-yXRAlth0{YeW4I z!{3tUH!I=Ki{!_Y^dB`a{o(dciQ|r zC5#RI=y*o*{x^~6Z@Hvv_VrBYBl!nUPtE%0zxVG2(#qfVDW-A7AD{Pl|3yjk@0!?0 zG&1a1irZgB^qcqpmDu>&3d!|rj_9Wr^$lHoH0Cs3|K$>WgZ*reVdMN%%Z4xW)wG}X z{RKSHFJ1c8qM&cfuXy=IqCfjbRKk;7FHhY5YNEgP*JiKnmp)6@-&I6k;1`T|`u+WV zeEpBzc1)}ytTk?bInlp-Y}BMK zx_XlPw-rR+;E7?rUgy#7-X{mj%;DMs(~B;P;ch<@*69fxm&Qs%X9mHP63=RZ&M zm-O5u>XSSPi>TuSvh`=iDUW0MS$ho8D}1h=0+^xK^aF+OB5Uh@1;Dbatl z$RJ_Q;E~Po_z{VIFRM+uGqb}^;q|AQ=)dbaFnmhWZ(`!smpwJ}*HrW8?~e_k^`BZS z=>K()j^6ChJHs`e_V}MC`u7i*y80{5Zo|u8O7xS9&C)L$@A{1QzeS?Y^?7T$s%q>s zJbu+gzrpreEm!RhKZbp#7p?u2&AN4ByP4=?Uq{qHna?Hel7@f^)e2l|W$xtrK`A^Phb#{0*_3_OVUALT@UhU}A{ z`?b!J`xlf%e{mA{&}K5x1?2v z?;lt@JbnbCU+M8M{`Xk-8+iLG68+e9ZuLi7Tg}AnS4H&qh8(x8a(^^@($S+e&!1_J zzZnH>{C_MfYgri{(h!&LP4vt5O|7+HeSqZqFLI*qy=XvIP@mahxc?MHKR@}Yb7fwt zHW{z~N{RmB z=1qFM9qc-2=|6GZHSMpx{>FsS`mb<73cEkC&7hg?rZxSiJ^qjrePx3I5rXU5F1Y?G zqW{{eMZ}9lkL$R6p6DCCZZTxk{JrP!_$?*+&G#Sbm{nc<6Tg2>B>DrBmSikC?(+ec zFAJx&fA0@rwLA2_zY+HzOZ1=X>7+jyE6c>~rzHB_1_X_MFw`an_g^m25BqLg|98W- zL$F^+^n)Vw+mD=EQs-^T{F+sV_WnJQ==aE})6AvQ)hfLGQAW_(zfPx?-CplHwgUSq zqQ5oHzVoi#dEIdTb3}j3rH(^0a}6ftZjY$>bhN2v694`2M1Sps*Cuv3$&&BS$okNh zzv^JPqJ4(G60g4;iT=s8zB)sj*J;7o4cMWnw}a---=Cc5-+Zt*q*0;CGhF_dzO?#J zu-U7V?%muF`yA2l-*b4MS2H%B$NR55(GMCjx81weZzRt@2t?o7B`D;Sm1CQo4~Ey= zKcij$ibTJ|=?h~=9}!`3s2zoV~PHsL66&5JZF00@$W+PRjU@) zO)FbyfPFd9cf4N`vgX91V{yOoj%dc6m*&skpOWbN1@4PKtd3ZQ`=5=bwO^X!ssY31 z&0dFnInnnF@$7OYXlw;uekIY*Gqnlmysu;tet!W+^v}A_OK*E-h2;3NfavdLt*og2mG+$hBLuOj-UiP7na z6Q)Ye-!Uo`=mpk^4j9@&k_9xQ$G%$*L0%f{4Y=R zjjm2hz1698INp8~68&V)9(~<=RM*GzMW4Fj*A{QW$A2QxUy$CQ-rn&t9o&9w z9IgNEWY24$r*lDa|B{^OUtXV@w$<&mFaya3lI~_xy!u$A4`tE z1foAQ&vroTYpeF*@n1^x6Fhdu{)k@t2>T+@U)iTJ!uC{DK^XWsqP5e z{w&eolHbGOp5F@--2N^^U;g^)NJa0=HhBFfC;ABk7rUMO7WNe%|0s$6aBoM8J>F*a zdUuc3y#HEz|Cvbi^@oLz2$gv!1!kILYW5rLG=Kj7d-!5`Qy_V^@Yw-0e8PT71pkhG%c4aPj{IW!U$bcXN$A&#V;qmK2 z^hXA5nP6?4A^CntAkp_(vnfjdNzfR){0gG)G$lCBzvU-ATz@6e_t{e5@Z-+3jf`7elm!^+y^@-2w|qn!iwx~}Yb5c@3Aca9hpy@8SA868#+~MkLnWA0v5xtP9b% zY#tQvQ}2Kb@4v{2e%zEMt^otst$6#ZAo^?Po^Mg-S)k%5<7cb$ocODcm?PhI2GzW}PW%26711x!OKLvRJJ=A9KaS`-tMfb_ z$NeMu{#q{4UvV$Wapj4#<$L%Qmo@FCy?)FS{gBF2S*bT&+vD*o5d8~{ws#wwz3Fn@ zR^w_;J!#v&l;~Gn?=p0=)#e*}>JP5zKkfcEGl}V-})KMUZ>YW-n8cWm-hKZ`4E~vXy2vL4Sr5ugngdqhy5vyJ!hsXdHz>T^d~qP zD}2Vqw!-TlCW%)6O+WQw_7+Dw9B~zsHSMQ8{$z>%%@T7T*NV|zzvk}9(fHc;|HzYR z<=d{VtUDEi?laCtTS@Y-bk4>TZOn_(X+Gzo?Z7ZraYdr1sKYl39AJ8q+y7YZ@ z%IW;*4;tS?^XKnR97gjOooU`Z$?a)|nccXq8ZS}v=kJdjPV*1s*g2)`ays>CjC0MZ zv*sr5zrK)8^KUml-1N$v%V*ydPHL+u_loAv-yfSn^ZipD2U@M2)>MAygS*Dlet(G{ zNAn|9<{ggj$)AnyUzU$2`nQjC_np^fwvRIOtfu^Knm>Pk9MRVc7@9I{@{i$o|FLi) zt^8g^Jac)=>lMpKgvV*htvLztmm<+0sk=RSdwHqk{ttc%t^6$k8$w1uyOV(DZz0j& zsbb<+Mk_+_@(V=YwqTC)u@j1&W5b%(ynmtQB$Q_PiT*^pyQxWKJ+9*V^D}76|H~yd z)BdI+^c|aRt7-oz&7Z$Nf#_G>IXK|e!tVRduX*JM z=s*7$=rFC{ z?@74+N}~Vi?zXt#)gwA$Uq$qHZ#><4ZtJ!qu+I_wjq@BrEoXby#(pl*pL567S-e!W z4*NXOU;F7)#LlTrB;W5WB>JaEyc#-TPEJ$Ye*)3>5CYmyduU;a>n{?0_VxXc?(=W? zVqZ=4SJ{LG3_QJ9^86Sxk2Zhid+zQMq#E-RmoFpwQx@3Pw^nv&mtDZstUBw!`imv{ z=G~_xJo|Y@a{oI=^b40+kErLEVS?XZ$`k!i59{dlIb2u#{x5;(KWTHEtv!DF#%PZZ zM>UIX3d=7N{bQr9w(0n4_0X8NZ?iON%|{siQaPX2f5#7n`Wk0lxhUzsT$=xFuT9|I zgn8q!&l3GlS!+x$S2@~Y--YP^^iX-l&W;bxNn5r{v;5lQM>)~=II+tkXL_pv`1n^v z^p|&BV83r;gcbJ35dDV7ZTu64#T~)*=ZJpSp_$$pTbw2LpBEDS?G3M|>TOym=|6$! zuTA@Ad$^OU7vxOh= z_)`-7{RNR-qv|l9u&*Ned-8SrE&rIG9^P$Kf@b_`@1Nm_{-#-vTjt#DI6LoS46E_A z$3G&`_iFtUbDs z50z|xiT>2i<1$&hp}E)>iGJmbC2iNeJS4e)g;_*vzpTpELy8Tj3Ap`bME~{m30+?I z>UJ3WEYV*O{31T~nR^-bU5Ne{y90WECr=CP%ZdK{qjt@DKX}v@`wF7pb4cf4pPhM; z*jEz$%8$WadM%EToWD{L{S`wW#Se39FTH<==<9^{kLm0;lEd}SCHgmW*Nj>EXRl=Y z$rJtBq_qJRFLaj&sm&+6gw zTZB^56Z{lpQuORxJW7S;`H;!F{eI?PiO}ri8v8dZ>?5l|WqjOCI2lX^8$Il;g zMBlnrnQfiQ36lGdmlJ)V(SW#XUoZON{Xd@Q&)DKE|L`;Id((;ur!?E|nv< z$e}6&r&#hMXdgwH}J}zHP^hb={)w1UVXK(!cDzk*P{^+&+vfZ1wagy~v zOY|G;&JQ~|`n44v|1Lz|Vy;o0immzq`2I@;(XW5bFfFdC{X^XUN}~UKGq0_GD$d=x##y&^%BR91kxz#ZL0rqo=zJ1;B5Ou+xrRSzztGRUa-|MeLpAX#H zu2%1WQTZ=oLp1YWd;L@(`o|VDPIR=*h{olML_edfBD&GKW0LFF%u?F;jR|u1C_A|F z1fD;JME}5yN3}a1jg*WZ+5f|r=Lc(=i(%IPhjJhX6oAYI$blSC05TgP2Xa6G$ZUcf z$N>c)vl((A2NZxz0pvgqC;*u)kOMiO0A#j84&;CWkl6+~kOK-pW;^6S4k!Sb9gqV# zpa5icLJs7B0+87SIgkSiK&B9KAO{qH%x=hm98drc) za}07I2NZzJamaxjPyjMTkOMiO0Ax-;4&;CWkP#pUazFvdoP-?60R^zn3P9!oc)^B!^_2NZye8gd{96oAYJ$blSC05TsT2Xa6G$b5nv$N>c)^BHm=2NZzJ7s!De zPyjMtAqR3m0myuV9LNC$AX5c7kOK-p<~!s-4k!SbACLn%pa5ikLJs7B0+9IyIgkSi zK&BdUAO{qH%x}nn98drc)qYF8Z0}4Q<7UVz< zC;%Bf$blSC05Y{92Xa6G$ml~3c)(+qMT2NZw|3ptPj z3P8pdav%p3fQ%jFKn^GX8GFcq98dr<%^?SJKmo|KfE>sH1t8NBav%p3fQ$p=Kn^GX z8Ar&098drkOMiO0AxHN2Xa6G$h3zX z$N>c);{`d80}4RK8*(5A6o8Bm^zn z3P7d<4DazFvdbb}no0Rc)6Ad|#0}4PU267+= z6o5=D^zn3P45)IgkSiKxP2sKn^GX znSqc4IiLV!5+Db1Kmo`Mf*i;J1t2pRav%p3fJ`FfKn^GXnIVt^IiLV!k{}0iKmo`k zLk{GC0+3089LNC$ATtzlAO{qH%rMA-98drc)lMXqM0}4Q91mr*tC;*v}kOMiO0Aw;C2Xa8obvn&|Y95-?Tt`Ab<^2D6jY2=A zR^1pDg6~gIF8{w@9}9E$u6dqN`_GOmuhUQS-z{8v)cj8_>OgJu|BJ?O!H^BBxqSHF ze@k2cb(?P3om%_jp!1bwKANx{{6Dz=NByi@KEh;Oo2U7613;*ZSVaEq&z& z-qgl^7119Xr&l-hf@p}p56-Nll|QLoo211bgQns4W3fd4>;YxV@w?lqaQziT-*w}e zm`Q6cNuE!QBKo76JZzfZ$+JJczON+u+qXuU?r?a#2VdXkh`y=w?B)r9CkNx}ySYUF zjQfwyT?-~lp6}p^zTW=8@CmBEMdpJSeAW!z|K1-%^xO7qY7kX9$hev7`t=&WuIA6* zpFs3O9V!%`*}kXeoEKCYPkVjdWfg7w*)M81zrNA8hKFuk zYlg>PA<<{ewl&R)?6M0lzd-a~7|2JKw6xC0eksvc|N7W#>`|rU{U{>Q{~4L(7(CO` z6PK?h`jhXSjC@&o=>_(gJlgpEx9_vci2jrhS0?n1b6teXcOm-!_I+qM(f_ya^D2n` zzkQ!qN%a5i`_vrK|F`c`7ZUw{`#!Be^#ASq)}=)M-@Y#_68(SsKCYVR|J(O*nboxM z|8L*Nl@a}a`@XFU(Z4qQdAiZtD?Rb{UrzK}Y^UoDUK-P{!W-bCNHRY8{>iJOA)_ES#udo-_TIJoZD;kf)jq90R| z<}`ctSjqRP6-58?=BdVd!v{XV&*vzKzVBJnI(2&{&By)E5&eA~7B`9tIv9riT%!Na z4?RosC(3x-emv1He>z~`-0U%V*e@XZI{J%rQZIE##eN~tUml*`n?2_+3HyhL{=a=6 zKp^_htR}{`3UraoACc%cmyNNzb+%w1uKx?7Kgq+Qfz6?{Uf5R?{R^AZeKw}tzlHrO zqJMAbt9}6)2OeRcSxZ}gr1ZGg>_)5fEIfZ$q8~AlX`x%RNBVs&qJQ2w+pWdnr1p6K zUqSR={7!G@I`Qb0nZs8P)*Sz6-!G;l`gYSF$DOl%tPVDAT=RZ0?emp9(a&75s7ZF< zw)Ob@0mIYUKYGo##K%m$?c4xO^qiFCSiI zuA4Jy81_{}e|>INa^$5;X?Xl{MBggnbBmXjza;Nx$R+x7Y6sQ7yk-!K+m9#uSG{JL zjxX7?9oJtV`u07?SZ==FP4awNDbe>_kdi7pXi|>nuSoQ*H;mP5skhe~*PmHO8^7~h zYgs;jS=SZ&hD5*T=tFv!Rt|iR$B&HYU-}e~A|JTJ82c>IA5wQ=Si`E^Uby|_L_c%F zqj<&GE~U79CDAwCH)HIv)n}$*Uq$rK7$-&fUs=Bl`yA1C^nBak(C&rZ@cFY`qJPz+ zkC*{zkh{Y!~{zVe4o9k-BE?-9Uhwlio`CK)02=-Z`?`?i3c*z%2$@dLhh<;uhlO9L2AFjs7uX3V) zG}6?6a66+4+ovGf@N@YLJpXv2U#&YkYfo3N3%LA3qQAH*wMEa*10~mQ1fu^> zeu8Jav~krv{odBs?0;&nABaRh(3Umi)h2In{|Bz8&A+ij^fSMH-8u{V3Zg$I>(Z!! zH%yviKZ@wLUo~VzPI6H%>??_W;Hy4umOa?uhW#X>Z{?ZL#Ng}wO6;qMKKFX#z&&>} zCD$*;5dBxL$N#fy*)YlT;T+LF7O*S&TJ#7>|78>Xo^|$h+jw&3Q9S;0iN5#g%B-#LE^6&G^?||0*Q<6F$6cofUN39j|{&iGCb2yUAghRUdr( zs3!W2wq8j16m1-i+mG2mn|~?o>ZX}``JTn~ml6GoZXFe6{T@W(@#{$Rrw!?+Kccb8 zYg~U9qW{>Sv3tqV^!2!WInnp-yQ6!Z&F0ee7tufIV;mdVFi7%#6a~?r*udAv(@Z%O z*I!BWi6BKoQTHeyL~v;Np0L-ZFr zhBvnCxAG$%e;m>8um9V&a?blCJbrkh-}*>F?MoMTbi(tmkmzqO>ZItg&PMWn2!ZG~ zcep?PV4y=8?*H>d-=o>c*r9u#jmCZ{(Rc1~fyw=q6N>xq4$*(y$Y8MP7|WH|7m5DR z+pf(#lD9Cp|I|c3TBmnby4w*FHc_-T~)^1Lv))5+5R^_4_l ze(PQ9-BTZr#`P~G`j%Z&#~xMe-iY6?ArO7DH3M5ODyVw|moF0iwVo3u?R+-M29F;# z(NEw0+;`FWKGN;aCR+PPEzI}6^V3=Kek&Q#|LNV{VeUM=`*`_TqHpV5=KK5X%2e#T z5dEj$e|U;kHzn^kkrVw%cTTm=pM7yIE?+_PABs{eDkpbuHd-O8R~x zqJLAh$8zoUKa%%raYR3R@F??ESH?@;FPuyC4OOoCeB2qy@jFlSM=stqd}}Ey`95kP z(RYw1>s+kpCV4-wK=hyAtLr`LlG!qR{8&o#8;_0YIx8tyvi~d+{cC0+?lZS6io)Yh zP4rDt=0(;0WBeP}pV>^C|HeByW+a^R+>gtb5q;AySJD^9sU_EMSfanP(8}h1&dX%H z{&OVyeTtQXZf$)#2iM<)=*I`~V_W@NsEd6$(Leh8LzDQ@cK31p6-0lJvCuMtop1t| zuO#|%L#5k~dSl;WUq$pCx3+IT_4>LT>~lmvzeBbBr^@sz-hay_`pPX+yGPHyvrKaR zgy`S#@9sQzt~egIzd-bdfA#V^^Jrf(Uj9;|eYh^Z(QmA>-0(TOVA18PVTZzg9@3bI5&s{gNg65kv2fSnhJ8 z3+_J!(QmRW6ZF>-SPZmw$SE}|M@R1vy*4;#p^GY=zlr* z%iH?s=3rdDoahf*wJx(wRbN|NzLMy7b!($rp5@j7`yA14nR&TOlc0&7lJQ6Mr+Z%< z;9O?;3y+^tqTl*PALlRbv(94w4$+Tnl+}LnK6OLM_#^u3U(Pq1P`Afv$@nAsonB3f zH61YFHlF{?R@(S$RpK{lo?f~i9zQao-#2f%)18G$A-MlpqW@$;PWu*(^36m1QfuCi zZ=pGe|ND~@{gYQ-XPPYiAhZoRS@Zmm`G0hV*+yIbF6Te?KH+Wp68HadqVKz}*yZri zJjwnyPxK$>l_sxE^I3uWuaM{~t(rR(Rx4iM`U^x~F~6U4h}p->xcpM0KcKBi{3VAx zD}4S>B>HpO`&ik%WPjrNR}uZw^{=K~dfvhd*Pq!=>;H-8W?DY*8&)6tGNSJkV%B3} zx3ngB{lyafDUt2@O$!lN6^M z7^jAk^H)64H~;cWl^$L@5s$w@qCYZc%%moBcAUfOZ-MCdZ}Y)=eXsG7?@N^u{X?%u z*wnIL*a6pHB>HEkjAr(BOf;Nt`t-YI)vbMgjM+h(znOJ$8wWJ7-KaS|neKI{DVo*I@>}M1G zskV6|UOszfhW%WkZysuJ zZ!ob#&*i^&|HAj*GCOJGuV`}7_!aZqUgP!)B>KN}bcYudIQZlFt04N(dk%OEIh3*i zZ-10Te|(4P)`x?gKj8MyCHlWFDjV&d`+&thPxOQ1-G>Hm{CE)WKMF+OW%keUFJ^q+ ziQ8W!`pL_lX8p8^mt22T6aD@R_r+XV&_HtjoY_SiKdCFm47X|JDfvE}jOh1Rm(z3p zyR4aP?fo_TzuNDsvqXQJ^`TLz`#%@s?ROy2AGh~h<0<9t`|k4(I|)Sp^jlS}J9!rm4@=Ow zp($7UePgDO*8d;7OtPM~O7%g~enfvj+lE29ub*$1v>(xzcU~D^T)#<_PTxBvvYD<;Q4o+=sRXq2D7%yXW{Q-i9}y);A`9Z_uxag{_JjA`yXDkz@ut) zWKUfGB%(iX#_77g3BAAI`g25o`>&h6tJW4vjz13({ZC`F`rF)`YJ{J^7l{6>Cqh7O zXXYRtKO)gTzkF}zfL1S8;q`}_=ocnF_Uk#h)&<=DRYZT!yF;=Mx|3Jq_Gk9c`hU%v z0hYtdCl%u5mlOSHqwXDI=IV~bzJlnhOFy(QzIXC8_LW3Ga`A)6_>-F&;^pUvzSob~ zPUHFxb;9KfM898fc|$HVRTp2sDJA-EmTV5)e=t^#$B#(#qxjI#k&WeTaQSMYA34l+ z_?c&W0`T}__R_}B+}geRP9N}2a{rTz=*!wIZWeX2VG^Fda-zTBd(&t)L)W9Y{z{_% zcm!k7dR@8X{R=9hf7sQ;WWe?#CvpFAM1O3HuATacd6M%lxkP_WSbp;Uv!xAi`|(6S zP_Ik${$A6r;`S4WzIWJ6pWpY6j>GS75sAL(pICj*9&_j6`KQ=N8-MPL&ava(PJD)! zUrF@&?@!ssCsqx^%g+&gn`I5+zpn2294|jl^u5K{i7oKr<#6B{PwkZd))sV(Jze&_kS2x ztb_L-bBTW6**+duLRxy^`WF)Yl~%Gk%Q?R_xO{==@4Q<#-FKf=87^NW`ppXZ4BYwc zcrG4)%mLc?*}?rWs(js3^8Blc==Z8VGA{_#Y={_)@A z?U%iD!Q-cp=(n~C@)@!#v^H*kf#`eH-O;^xo~%~t7`IEB;~x{vpT9qm=r5Y=J)!*S zILY-h`9WI$jo2@*GkC>Df875{qCaZT?Veum4voU?S4#9fj_w+EV^gtn;s%=%&2rb% z{Q3J6iT=S&3O~!ue{SLP@2W$z<G!oT^elO^*F3I2OZ4OS zoJp_cJ##RwzYEci_;9MtqoAI>GB4~~qnS5NHGls85X_<5Rm_<7uz| zvPWp`SG#AdNYvNa2zUnBg{&6ZxXPXbV z@8b5)Ci)$|&I~MR)=~2OOD@qL{7g5bmO~H8^*f&EFF0t)xUhR;@%Sqw`gPaNYuQ~l zH487lK=iLHcQgEy>d_sSUrO}H`Za2BW#;qU`1nU8`nJtKG8;Qjkm2Xo)I|S8tnRqz z^r8e@f7vnG_!*RIKE8LjV_Urc#uEK&vMx?Tjrx7W<;#hFNBdb(dRxom@cxH_=#NO> znRM64=Q=K5N%UuCv`EbtN>tca5q*=DWut%eE;xtVk0bj3sJ;*C?3H{RkKg4)zsb=$ zBNi2Ple|BLC;Gm<*Z1;DPL|$(LiBq+^dDVVuwQcgA`pEek2g&&-08gYLxsx&&HB5c z=Fi`sNc6X#j|{!jCUh}wzwG0*@xR!#o0sRX_P>fhDOYOB)t1i_{l2x7iu8@u#kl;y zB3k*DqjNeNwXjxM+Ab^Bl&^h$RYCN*CYin|2IHUO`J*EGGcUOsPP(buEg8Q=zn`gf zlL@xZ-&$n9{h+D8_WC_f^q*a+)9-8AWH-tF8`015Jyt8{S*uXo{vy%87W}e>Nzu;U zxcUQTx@n{w&dtUAL>x`FZ;#&;QAZ{{BH04U1F#9^&d^&DYcaxBrwx-!rp|Y5fn=#=dtkueo%jz5c}!{n%-n!aJrI$Z-8jiT)S;)fNjb ze9-B%!Ec(T{@VE?68#Zoe)aD}#7fTJGXkyuw|}1#WEbS<@F{Rx+5eU=Bl?r(75B`0 z+20zEA34$Q(C%KVzAK(Q#p7Q|^k+>d(bsCw3C@$;)9(JvFqCmg<)@DbOaIZ2y8LCHm( z7t2c|*N@Ux4xSeS1CFEAo?!xCmaXXo8XDxKgOJ*_22o4 z6_)R6AKin;A4~MN547tV^E=@#UVpm~{Z!LUKG(|E48Y|pi2nMFhXdVwgL`6MN%TJk z$x^TSRjaYDBKpBA9F?=DZMVboha>t??PdNyX4Kz?`#+cHi+_fXvpjQq7Op=}^rK9c z*KU@4WH0s$iGKHW3mkf_Zk>kfFA)7^1sOJHE1G%W@=J++R`>3PX+x(>$G%APhx}MG zX7{5LGTeV^qW_O$a2J(qq#7?jQ%swGA7|N*OJe2EaQ$UO|G@VO+Y8fwxnZ9r`hyx2 zJ8x{P8;|SnLiAH+bq>>C_aqdTFDLpL-yVeLd6-kkFde>i4R$Nro848hwE715ux zUe#?v(RtnIA>C>oUD00u;E8_X^IBYgmgxVgUomjJ zn^|T~nFXua?r85HloS0i;Uk+f9gXMX@>N8C-=W@hl1h%Q#^v)w|DS-|iSj40SMdBR zCHjtv3z>5kdM4xXD-!)*uWtD_Z#YMC|FW9sxAyAUpyS*+lIMq+GqnB>Ze0|{*89^E z*I!2T2mQJ+@%py6WAOZAiN1cghn;KGILY?ch3F?$BsNGkO*n?fzntiw>3pJBjInP7 z9)C)rUp=R@(rL|Y$^HvR^!o=__P94M=`kLExkTUXN37Lgv9S^EKc489Uas_9IeNGB z`Wew5X)`Wr)}h(WaQ_QL|6{~_Q-fYhCEvd(CHkFx-^UzyHs~cTUnKhWXDf%lw)!<> z)t)BnHR~_!@xPkr2L;Ww@>w@c^8BRiEN%W3&A;4kc&EIqE6!iTH08@QfBybhqJO67 zr{nxae=H^aPxNQD?W*r=^{u(&{&}LWyDn65yVWfvZhtk=Z#d6CeNsqx2KJeAwD#MZ zpEb5_Jx2@d%ZUDOf1gpq8#n8L*B>m=pHXi^@Wak`df@WqM8D_mhtB*%J<0o<6hwdE z+F*IV!?h&m-<3rF=Z6Lni`vw>f{))hq91D3wcUaJ-dpqPQSJF(<~*(c^+Tq$HyV{|g6A(w^k>aXa2v8buBD{^i2msx@qRC7-jm$_ zp&v*uodWOw|_R?-TF|o-P5i=ltlkb(K~nZ(Z8?DKX`g-eC_!!f#`4h z6w|okkI#F&{bVoE`v0zpeMBR}j-`0{U5I}3{=X6%Ut1x0{#8!&eS}R`>!TYy!u_ux z`cHM%_>Z%l$l~RXBKo6C7uH?U?Ska}?@FTophLq^eY)BSc>Jq~ey2u{9Ll#0>VWH? zP4xTv`^6cn6Fy)+m+0$Uv8(TXYWFhS|2)x83La`DL^of8m%otchn{kFA5u2h0oVUL z(eL{5a-e0eu;bV-CHkdHzgiUZZTS^1zex0F|AlI!J(%U2WqwZArdZNDUaezS_` z3;co+PrtvvFL{3aGHw2+PCM&V*&s#o{x_EB_fFPv_%m~_}b^+1)~4+!a}B2cc;1d`Ui7`)_%LU z`MFt7wv4c_E1#z+U;F+Rmgo;^W;-TU5!PBV{)qnNW1}W@(bbdO|E4DT22Tu=4haW0 z;`z&z(3U?l^;C+{JH2pRf0pQn&&+l=HdS6dPkBGJ!1sSN6* zqm0JqUrMji`Y*2Ys&U&^%=gF3FA{xm#lD7(%o|Fc-(yN?^yjgPO3>(3JXhT&I?QfIxYhsUp+=pT&tZ*pRkQu6$$g6Ox5Ebne)lqLCohmz>e zn>yX?QP8^-Pxx2`|Fs=Mw#eVT%nf<>^{rpC|gI z*N%0cRC!?x?*BrfpI%@n%WoaE5}$t;ss5G6?N1*}lDt1fc8xav4I1=s`*v!CH6DK~ z(XWcR=P+jXRLS#?E=2!_a;5u-xhcDG`EsIf`JtYUv!zV({&)q^SI6o(PY+9!+<&Yj z`XS}|i3Tn1I^yx8BKoJM`}Vh-<0`p-h$H%g?05EA-*jgpEnR!kM1OkT_wh~iGIrqcBfCx;|3m68ANFj2-A>qN ziGGKZO&m-cJ(b))<3jXX_FZijJbGgUE?-Xcn|@01Fbdn2h__z~qVKukvB!utO?0py zMfAOwwKY2PrGFgul|;Yi*7pNGEYG=*$DfMmPvT;S$L&l@!ahgzqj$QFHEQKD3j4W4 z-?)##fZy#ROY!*SiT;X%&pO#0J0W?0RVmT8ml+34b@;OZx4%gAS9s3w%zAuD^8Ob! z(Vsg$V94Ql0oJ&D<_2y4b!|MXY25P4S9tu(h<@20vzV#BhJD55vqXQUM{4lqq}h`F zZx^CJ?AVx5l^@1Pt{*6fesZx{`eox?pK<+_M4#*P)^t_X*lBqDs)&Ar?X_C2+8urj z`yA0%HtW`j?Pj8n{am8Y{d$tvG~b|~Wd0ESx!*hXWHRix;PF#R^o>^A2CN!fAo+fm zNc3H2?HW=&^{nLnB{k9CK5RjkI_hZ2`Df-PZT=Lm>|j}D`R)l`ei_mK5w$KM$9-5k z?6X8a!hLhUEd7laaR0jyeXo6un|8K6FZuq4oaoyQxiu=jj@2N1{!2mhjSl5Rr|Unq z#r0Pb{j3#d8|<6vm5Iw&5&btw)`@SIcRhjc|Kx~%>7pRhpy~l0c>Tc>eVcw;y*vi) z48wi_(f@g*xYMMW+)eBk68-fKhS#oYlp{=oak42JdFQ6 z*8K*qzmn+3u5+tD+S*ET{$vc%U$eQ&!tC&iGJO94NA&lG9Jj48m3(W5obe`w!7 z#}oaJWo0cZ!$TV4{=Y-?%l1vJwP1aKxl7ct939E?3v!}gbue7fK0{xL+h0lai*6Uxi|TbY z9iRW?h<;j27uC?}b9b&^irK0;@2S0ii6{ETO^+p?Y_R<#uKyvT9~7bAe&pPeI&V|v z*Iatg-oGRe{W&e#I68N#%D~GnFQfIppZ@H?Yr9+|=TDVH-_T}9Fs8={}FbG1{4rxud;zX(LXrTwY^HnLX` zu74@fA2hg;we`vKgRn0W{mCIs&GkaRTj24hCi=xD3tS@{2JORs713Yl@KUeK;X|d^ zXYSC(pUK=KZKlR-^TY42VTu0Vdv{IW?t1wP?>}%vzfPx?-CplHwgT_}@kD=9rhT_z zT`H7#`&mfzr>r^evh8%mNnCy@(JxDFo3Z?E*A=+^MWWwKHgep}-^Up2zaaX$uZ-G_ zeqXyeZhtk=?|)}k_?;)8E%EZp?$XB3nl`N)P3hlY1ol~?ziiy_jQHBG_Dc4jh<@2M zw?S1wXC(KpDT#jZk891AuFIc>=f8^Rci*cFnBVXDGhBa;=KUK*IIJ?R!H<6@0WzEIkD(i+^@VNn)SDr=Fi`sK=gxmd)B+V%2$o&A6HHrKivid zjeaoHCI-esXr#~IYLpZ5MQ z=00utcTLX^Ub?zO^8UprqTf_F+qCF*^8>j4N}_N6)45S>&W%F6{^5weX<~GG;)JP^ z^EcTNkT*E1>(n_|sMu0N@X z{>n`~Q~KRGFWG-$9?<$f$0;_;^r`L$-2O76-$LDO=(>4hr!TR1BiAgt_Wl=^=-)52 zZnm|<7s>Y*l|*0u`szqU@60y%_)$glBZRhw%XT|_#^-OciT*v6lg@z|$3yY>=ZStv zY{|H|VuPu8{VNcCH^VVq^!2{(#N~@bKP*(%>1gJoKDpZ?YCe5#3gee~NE<(@USATQ zAMRy^%jbyx!S#oF-}}~KEiRuY`hB{_sH*;cffD=dBU=6Y<>`8L@nqiO`tw9TVc=r7 zli$L=;_?NeKiu2VVvo0(z24oUHSgci-hV3>Y4z717Cs_W=A9InX_BewIy>k;p6D-3 z3NR^53?~M^@XD6%OW*Z*N6IxME^2oo49X? z`MRP|^89`-(J!t)y3@_qp3}{4hi%t1ea%B8e<=|Cqbtorz7~{9o_}_!q_w|cPN?_U zTX~Y_pXEeg&G7n@CHnDwyVjcMJu(K@UqSRe%#|H=1Gd^*$b6P-)*ssQ z?@FSd`@z%Zd({%j`A44Uw~HK6uVs4f8eIQEqVF^%IL^Q2Cq3N$0?|*@o#WD}NO1=H zBGI3rz8G=0@WFC?{K-6}^}p|g1t}^0PjANMvqazQWNxOJE+3A|mlOS2$=2;Xs+T^w z`J}3YrvJ6?FHjQw9o-w7Uf-hay` z`f*d5xCRVhCF{>zqQ7?T`4)Aa1yjqIjPM+R?w;ux0cUI?lJdXQEa{qHF z(O+>d%5mk1v*mmE6_+*buf2XC68(_MQ(37uUEAaKXP(pg??R*P-Nt5bx?H!_xSCTp z+Urj;qF-^n%h1hMn{Vu?Ke*=9nRfqKPV`@zFN_!arbw<|sfhmT5i0$K`wy1XElbMK zwBHoXpT9qj=wCeWE9F@2*-?1>J_w0UXT4kqTfSyWB6#VUsJ-njjEY{ z+VeLe(f{Y0nd8~Hi;BFt!8Na5Z26zXXXI~a_4l$~IqrLPM!PMaC)T|Gv_;KP_}}(> zOY=kAwF}N=kz_iW&1c>KJ$&X{MLC%PUETu#9&`W^hbKmOqu<@;|c7uM1P3QpnCbSJ9c8< zh3FfF2qqib&XnB$FDLreiT0|56M0v0`3j;RzI$+{m&))(}ITYmE8Zp z5qmb7ulK2P+U=HEzK_`Z?k{S}2of1ve@b|#}E4*QO6 zUi1C+o3Q>6h`w3;O6TeRkG}snak5&Y{&)ZDH*NgC{p``d{qNX~*yoAvUK`$ zZ5H1DbR_!WKN90RcQ3V`@+qxm`>#EJE+_h@4D)&igf=$7?avYYj(?i=FV?k`+`pVl z^vmwVbv5|$FdWZ+p6DlREHNlzkFKaaO8H7Nezn_Af#^F={i^D_aoI<_{A#AR=AZl5 zpK^ZBn(Uu~h9;fnWk}B7F*-E=_@Pi=IZ`g0EkJC1T z3vG`-P1P)rEiAE|=!X~;hPAJ1Dd~TOE^YbOHZd{dZ~l?of2}0?K0oW3-S3_u{eCLZ z&l@tewrj>&$@-fk`nz`=vDuzgZHC)Fm*}rC4Yz1{?n5r#|L2K*RGkYAd`AtE+<#F( z^uO)33EZ17Z#=GlA<^Grva_yn!FCx*m`5`DATK|}e*FS76+W0lTX5YqLr^y)X%ZdJ?^m4oG>YI}DpGulPD9P~YWAs9@|H|mm=1=9v;4Zxu$9UuZlM(%xjr}qP zUah!<_rF-8FK<&~Z`oj@h|8A~{ik0Od}o;k^vAw}=+D1b=x8+9UNZibM89*ay6fS_ zv1@SoDxz`wzK9U%}sM)-a^J9`<>n z|5@eKYs$;~e7yf$Nc4xEn-E;lxj^##_aUM`u_A6_e($qeaQOn!H%Zh7b=d4A?R z(Lc9Z-Rq&#?E1L;Qljs8<)JDhqelQfe=ZXJ`sWPO;;Py|#OuE*q8~c#ijHjQy=vV5 zOl{iwBXU#gky{P(A7Ecb^zG}0ho}qoEIl{%S`*FC)t#8N%S+yDxw>$J7$RcpCkG)LGB)92UniJem2oRFym3}jz=RU z{h#~)@L4#15`k>)e~zb=KprRp*#(dTd7ubn7eWr?fg+Gy1UZlgia>TTy z19_kbWS2q?$Zmuj$OABf$ToWfjm$Ivil(i@<0*D9)KLk14STv5ON?76oKp^$bmdi1hR)A z2l7A>$R2?l$OA{ZBtJWvF(rH})8pa^8IK@Q}BB9OffIgkg6K=uaYKprRp*_)69d7ubnZ$S>^fg+H- z4LOhpia@puav%>Bf$SZ~fjm$IvUec|@<0*D-h&*-14STP4mpqqia_>0f|*Dl^YJF~UyEKwv0OYagyl7M7Ukt`x086+c7vVf?l2ofYn z5D`g^fQX2Qiin7q5D^i15m8ZbL_|bHM8$;oKUL>BwL1lVd%60)_q+f5?e8~x=IQ6D zs?$}ctE+pex?`|$*x)npurb&;Y!C+z8-tC*2A_k6jlsrYgM;8E4UjlsrYgWTX@W3X}9AP;!h7;GFi$O|4e1{;SB@_~nq!Ny^O{NQ0@uyNR+0C?CK zY#cVY06c6AHVzvU1P>d7jl%{Pf`^U4#$kg(;9+C1aoC_Rc-Rd7jl%||z{AF1#$e;HK_&38 zG1xe4P#HXI3^ooMTnZjG1{;SBs(^=$!Ny^Os^DQ`uyNR+8hF?kY#cVY3_NTMHVzw9 z2M-&Ajl%{tz{AF1=f`^U4#$khI z;9+C1aoFG*@USu1IBd`yJZua$4jWtx9ySIWhYebQhmFC;VT0?y!^U9aut7`kurb&; zY|sikYz#II8?*)w8-tC*2G@g!jlsrY+gw)rYW@3*{55UZux?PUY0LJP1hp$)R=H|W ztxDB8RjXF38kB3(_r{=EuTi|cQjJSIJ@MK+H;Lv>H@&*Ff7yWAb*j*|Ndp?0?8Kg> z>%+S7(1|@uck};ZetrKJb^p!$({m0J>aSN-Z#L@WW!Q6RgcEyKy$$F35MFFa(<=0j z+bc41^w6OLhxQNp_vzy_w&%IpUPFft>pgI&qpeb-3ax(7<(of~Z~3OJI(p?B(*~JS z#O0MYKXK=Ul($v5c~q}HH}&Wdl1`xC%{MT+^Uor%pYtZriposamycOT6Qc(!V*%yj}JuLsz$(*RUZ2 zNA>78ve%HlJ%$e(ICNCsk)%n}LjA}4oLqpu=BKUs%|_Xt!TUF|Z?C}v`w!LBU$xaM zXzw>*-TMEZw))SvmBgFRZG6snWA5DXcCKSr+E?tkG+s~cKMTR0OEb2>H73%=!=6jC z8?iKIAm?{3O_dYPOg63KA|8$@97jd4j5C2u1|K0Rw^@-woR9a?=E(NEI>42I`vX4#Twnz2djO9B?hCxn;cJX! zz05Sa2lz7RHv&Hn-1}zMUj@7jxEruHih2I;d5wTegC79=C2-5ptTZQ7+O`?^A@J?T zFh3f22XJfPVz)5AnEG}7w_$9ezT&NnxwrGYF~Eyh?iIL=dBJOe?*(7$cIE@%jt(9R zd^yTrKaTaKp#Knf5^(oB68%{P+!=i6PUg*vm}y%(;EEh1-uUs%mxg`?a4VGmdzWXHR&4Y4i+dkk2!4I9xd{_9hV+vzQ-(V_Z zX^-i^QvQl*%&$UzEv7R*3S4sr;|%2AX(r=G!Jh%%0)F!>=7)i=IGgcxz_$V49p(+E z=P`dD_-PL?9s>Leu*Bz_`OG&4zYq9k;N}l99{>+>@HF5t;JpQj`T)2h_!hvGfNyi~ zD&YIE|CcZ1{N_Wy2Uw1u%tg%0JIm?=i$5EHrM)XJW_>l}*ArOy4}s-)ZMlT?ay*Ox z4v>DXgP#GO3%=1(PA~gE99aB24BQd=D<5XP|ta)Ncb| z@oze?^e3MJOT1=2#_4VQ151Cr7C1lphgTkF{Q#6-ZZ%_RuT8-1z~^~_`KOb3!^>+E z@$hFD%l>Wx?v3=tpJm>>SeLe44=nkw1eW;N1AGJ0S662mil-dSn4C?Io3CU zz9nz~JQTPz@Lb?>z?*=jKfhoD=g0p&uM_ZW=#KzP|Jd_+RtDh515X4_+L)MMGhopV z0G5t%mbjMT2EAgIZAR~8tmA5kU zE5SbpJQ?`!j=$<%%K4W@em#Nj1U>*PQFYW~YDEN`pIR9~I|Kpc2mj1V1b;ff3od$e8(tiRh`tmhcZyxMN znv|N1dqF=4crfrjU`b!P7VFD{ZwV~@%>rQ29|kS~eNt^sFE{`e|AzuMg#KwqzsteL zfW`lobvXY=k^VIUav;aP7-kFZ@^sZv@_g^2XFl)NgR`DPXCu`d6^N zFVe3BJ_tPZO6I2m=evsWUf@H(lYj@+XZ~Nn^{!^T130+>YUb?k8=l2rI zt9dQsS5e;2Ef`CGKjS*a??T_TC1Z()#lSPbmutnm#CH?m;b9hRXv_Q(l-I63W7*#Z z9T~rm{EBp9Eai0qmhuh(OZq)s64S4`Arar%H4(S#mYDxMV97t|&b*92=Q}v92lGwg zuY0}M7JLAH6mWmwkAd$*eRS!?`PBz@$A|9q#=_pLm+^9eK8)r3=Z@zZftT~;JYX4b zx#Odk% z|J#7Yzqf!T{ti1hJe!p2$0?YV&Be0w=B9mAz?LQ7!_Gc}yjCb|`OaD}8GN%{Z1z67a_W?J6 z|GR-D-iu7(^m6bKd}|*%OF4ZeusNM!oA*e?@xS< z{AB!4eJ=Ye@pQL?cLBFS`N93HZvxy8SkkWt4#4jPmij9=kJE1izZ19}aPR>0?SV%F z%k|Q3-~jvy;9YhY==rNFZPhk#}Ot1U@P z-v(I9p9?Je-+U?SW&f7~%l`iWEc@T`;l%uh0?Ym%02Y5L##k@)@zsjN^y*Q@l70-Z zq~8iW1NGT@bz=JAz>+==EafeJiuEG`d$ev>9;xfu#>*} z)105w|0oBq2c8K3a=Kqt`x(wJ8RN+-*E4R7^J`A`KXbZYecyAOU(+OZXx~Q0;-7mz z%)Ou0#OH!DoS`|8Va&{Q4=HQxdFkcb=_6GhM_3z#fy7o=hmx12>J;c4gI2?K@e-p4APbYw-|7f(G^Oyc( zA+X&4KlK*#i%|ZY9gO98`wUq4+umkg`k(iK%OL%4z%o8*w3GF6fAlF}@&7kqIiBmk z!+P;=@h--a-sXe;)=Ge~$u-zg70I zUi_W$9%Cv0;=PQ;ztO}z_LG;KW1LyzsRSI#ouPY;;;LA z*#L*13M}Qn37m%d$m#cB+DkkkEq_kQv; zq|ZQpYk;ewzxnhK=P&hL{!7O4d({$P;g14K|DAG}^+S;V7+|^Ia|T%IztUH%m-d

~GAAe`QZImipQNEcI3959X!(p}LA!mO9;y>Y-3kpCIrGQg!HtnUOo z4!9I>40tGTo@CZ{1s()^5Abo|K=g|Bf-5_?CGcJ7Pv6Ovs6P%Y55YN}#=M*l-T4jf z?~yffvtIh|4#1bfKlk_LN#MobM}fbDep(*RPvUzou;_mT-VFV^ysVf0D=i=67r?&( zEbUb|f1o}i+(`SM15K@#^PTG zU^!k_0L%I6HDEbkRk?`M-+}U<1eW$qDbBncFJpk^c-aFi$4iG2tQY^s0Lyr3gM&{2 zugCGSI!H{v16Yoi9i^C;JD;T^_(tFt0ZaWH0e%$xKRy59zB26JtJuHR zT04(`E0WAH|8DOc;o^=!b zT@Nhz$AKmPdY7|a^1lmM^8XjG)aUoWQlF#haeCqB0SjN`3g)GKa+-hQ&X;oMN4fK% z&Ue0(JHM$D{F8WC2K)o!bN-d=e{JAhz(sLAapWrIC4IH}jHN%h1z7550q|1fSM%yb z{W#$6;P(T|_;h^(*7JYQ`wdv~FV>KmdhoA9BgSQc$2Ddw{=Ei#E6S_ag!$Rf?`+C= z8~C}+7@q{b=NiV6-wxn@;Hxxez6@{&;1|fiI%MA|DIQ~6@QcRZgcP!V9Bp&Yt~EozX416#ja;w^rL~L{OxU+ z=l`CUr!9Yz^4mCgKCtBXJ+PF&ryZx4@=pSb{<`+eOZl-5iTYQ7m!tmrbWG$Y0t;WZ z6Z6u)v;mg>G~9)GiI3*M5^r09CEnU~P1HXGEdAwiU>Wb%?8f?S@b@&Z^j|HzGcWO4 zzei&JlY#po{V`yP*8)9RFY(&F7h^fzR{=|Zv8XrmN0Hw@J-=^qAI`rp;@6$ey7Wfo zWxVzxu=Ky~e7xVlmxjOTeK~zO;3mMGfn&fKz^?+!@3po2ar$cD2LYD?o(cRuaPR)C zmv~i~wv}IgTUf%WDutpfA<56zv(wI zFaB-@7XJzlW?uANf#+fWPXLR)#Sqr>f6to>Ea~?FOL?P)vQpCT2A1@NhVeJ4kM<6p z2Q2a8&c}4;%bxFi*k_Qx)cW zI>!53Zb{7V0I>Mu&c`i1Hc{UQcsj~|*TG$GP1N58Eb-p@wnTn7@M7ebc02QeR{_iM z6^vtEj;}Vra(s;jmh}1WNGz`^u=taFXChw~Sgyxz2A2Ht-j(Rz6Tkude;ZixkBw)& z_+R91#^Qf-VDWzlu;e!rSn}&VfzwNStpb+xJAoxWMonbB+<)2$EcqV;UIPE8-IJLA zZeWS00+X5N|1>`wSmJBU)Wr0gf#rOD#NjL5%X*35vB2Wr0^mjPulh9B3*Qb{>eHRS zJsEsiq+bIp_4O{Wj4#H|;QU3u5?J(a0gL{&`x5mrV9~!0Ec#Ki6ZH#$MgJ18=-v7A z?)>vA@4K`11P`_2Yr1zh3I#&A^jB1txBCw~8u=Am!1>Aj z>uJD4l3DQcQs!lU=0D6>_U97^XT+Ene;NSG_0)hzm@kX+?*kV7T3~74lfbgS^_Ow_ z2}u7MaB1Mfz%pN<*78JuIs%LTi-D!Q&wyJazbY#@y&QkNfyLhmz;b-=1eW{#H$2Me zCBHSmlHUPf$?pvCLn!~jm7HGkEBjbteq(?ozg57J-*#Y0-*Hu9`c=S^em}6J{|#8u z=d`}$-p4tAN&mQmcL0~g{+)36e5*Nq4e*VDCBMGF(tfKQd;)k5(%=0A=T`=JC9t&D z31FG;vHB_2OMF#a$G9HS4*-_)=LX>B7=L)rvR?Arw1Khs>pjo7AM)!5EdKriEcYX- zzrcF=y=W_Nfb@rerT%SYX-T*BqSoBI}F5|I#lpmi(FmOMV+2{$q!4u_ZD6 zFknf4zUz(RNH62l(94{^T+cQKminCyEXVU+V7VWa_6n!pi~5NJOMQB;GA}p)ZUKEx z>z@WgFaA93r{=2W2DtZ(DQqU25l+*gD;m|(- zy}O?3eAiF4uF5rE3Hjx;UMez}{SBZm_+|8OEOe_-@uO}U@YUm z784oE_1soq;p^VR{3A&J$t1>7Uh&C^xT}K~JNOgeE%1Ngl*IJ=9b9Z`BHzWq3mv@Q z!Nu<7^itl3z~XHUUdKUO7Ecf2V`DIQWc%ubjc@CI5$k<@|BT!R2Qr z>SqA2gn!lUV_wdGV}QGW|9@@0-frx_+z%``E3v)W0e3_FJmcVevso|K_w|6+LVpxk z#)oC+uzoQ3xxkYD31B&%`psp%@LPeUyb}&Cet)7r&44BSN{8R$;4_ZC>%7GLrUFYm z9tD>Cn>~=IALZbfgLeW;`ttJ=(|2(21Yps}f#vuN9!yN%0$BRn`M|%T{@wML|MYsx z*$dbo@%K2e_~YL1s{Ih_7r?*Wz^#CTh0F^c?%-E|C7#2JSYI9KYXeJtjdk!w;M<|E zzL?XCew2gP1B>2WKUQT4r zIQcbsIC1|b150^d00;0dDaLxapWv=XEeC!E^y`5y2X@zYoB+Qb{E9~s{c+ciy6ZvR z^__>1Ug9IC^@r~I&g#p!{P*EcyKa1@k@}klEcp^o`uj{UNOkK|Y$noN?uWbij z_SaoMy8^t7hl{P?`~=Si-hut?@+k9#Fn$@nl5somTY;Ye9`hLUQa>AjCBN~jnC}by zVPN6cJ)T(Jw$+LH3QsT&kiG@*Up>F-|MYrGcYWp5HSE9iM>~OK{8He_M7{&C?C%(0 zIo=imr=orS?t0DtS)a)*A@{5P)9W)=tmXD^gZMrLya9O4Q_Lsf`efbHj2{Ny`WeR3 zKP+_cAz&FV<$IR(vi{_^^^7k>JmuTKnE&hN|L`{{?-$?_D8JD2%nPm#EZ19;9e#y_ zUvu>CdKY&+VNUD+a#~+la3lLG{Z%{QdDx#LzyWZ|3#^yx$qv9$pXa;Y&s}fmuK$~W z{G~nI^+|tsz1@SGcz=dr|J>(2B)`bKtY@wMbmIAMl!Mm;%XlTH^`ZatdO!Dh5`TC7 zpZh$Fzq=mLecs~VT|YMWWo{qoFWmL4hrlmG`%Zp^^__8iyU!zxzskJCbJ}Z+TOfTW zU|C=CI&c8~5U`9Vy1dTm<@j0%EcqPXg>m)!Mmuc3Yv!%1FY6JieZcvNz74RfM`*L3dH(Nt3xOp*)nfdl#D7llC~@^;GV9;vccUA0cD+`2{)6S9jM}xz9T|-}&rab66kvch`gc zyVrlY>lLNF`s4iIJ}>v5UZ3QycXZd+ymNr#U5?-5z%rj<>SxUNhT}(p<$PHv&b-9S z3E)ei4?bsJ)|>7+$XM2s7XE^KZk$9!R~qzcfH`4saq-=ih)HuzWYXXfR4p&#%`@ST21%zr7c)OYw-=Bq+q6Ij+SO!$p?X^%0# zGnW2p8L%Ax+kj=h$r<1}xIU@<2d5W)IIygbns$bHx!>>@uF-7X%lUgBFpnZVuei^8Iev!&%ki=p_y*+v3vff= ze|r7T_xW1x^Rm!P9=~zS^W5iU<@Ee8 zcfC@9ByJz6|Bk>CKWl(l<#|5>FN7oag_)85(Ov%$2QT@Ti6oXc2w2Xi>w)F`)JU;j z;&(XkT`2zqu$*rWrm$YlCk1mcmh(x^RK@|)j|Ue2wgJoj6p1G4-TCLW!Atr(fmb2_ zvT2-N?ho7vEafi+UJ8A^+^m=UCICzQ>;#te5_$5nUXK5Ez_MOqWd6kbo_FwRV9DQI z&(x#OP+#r}e3ScfFOn-Ylo}SMGW>cYT_>J}am7H2qND(*JA#miYJtSla(jU|C`X%hI#BWF75%Aw#kLj)#bJvq?M|$b+kc~Ah zs_6AKNx4(K6tk^-c`pC@8(H#ydVP)i{-JUAv44ZH2mk5yF*&Vw`Mc{^-1R2zdXDp5 zUy;*#iX*5`Ip3F?#q}$AfP+^#_=tnc&34iQPeFT~aBxoRIo$Uzx$8T|&f)Shk^e$q zIexYP%lxE#b6GF*3AzIdzs}*$IDG5-Ila7(anFN^`|GYZDX@Tfxt{9^EaQb3aP&UbyqfBJn+Ti~z6-x&vA`AA}Y z-09#gz_OlY+_FUdW(S`JmiB3~ob{DZpQBbVmi}{}ga6&@NB-0AXUb_kh`Zk7eAjol z>oeT-5a+v|q4uNPKJt6$0N}TA{8V4bd{5wcz@py@Eb$h8jP-&WIrtt2Z*_2Zm6P7V z_c(Z~gTs$I=^cEJgSP^|j(DB=MB@G)0hawOvL-SAPQXv1ev+R|O#km*FOt*yxB9`K zD z+`;a8j!Mt5UdF3At-r`=y@k6TB&YQh?)m_CeTTc=BBd{1S;+C>-cNUbPreiTC;BZ8 zJ_9W4Y25c6xbJT{-{%9l?~iiV&$#O=Zri}^A@dtg0L%Nr-1oP0jfnr*FLHhpfeUVCEWZy90B#T7 zeV^1z;N^aMPVbj0@=~Jz?)#?tffxT*I`}ZK_`h@u=Qj`jReL$n|H;7OzxzI`kHL%o z?)$B3zQXy5KVuxc0a)sucQk{C{`7N>1x#-1PuCt)Ka)*Sq}P_ic@Rlj~Q0Z<_Dm^}r9Kz1-(tx$ie|-&buuck`?%|u+HOybml&|zpZyXzfWOIavA#dB`@E#{eZIZ>{IQ|PU*7Mv>uoMip3gM( zUB+_!Yn8U+907~4O zz*638z*A9P^Y;?VyA@cy7kqD|ueq1g%ken|Sk_Z~4lMVxD!$M9`;qp7@TY(!{Z${aemVGqz}CP0%=ZI77q}GgS?hgr zSkL3Gw{h3ksQ?MG46U8cYTXHUm&OX0q*l1H=w>|p}ySbrMV&TmO*L`UZDBgZqA{zx%!y_x&#Qui*1}U&N35zLsOPnU~)a z-1o7#?_X(IhxLylKllAABN1=XpKb=0`3^a~e`V-r9IujoBe0~;>HRE&KIimuK3WYd z=fgLFW&UQ-gRBp*KXriRdTcYW96#w_u)YTLZGq)_cNMVQzugNg=hG^OIDJE;ch{4+ z>n+^%74CWpcm0FA-r>C0D@2+Y&*XgP&hP)L`6IG^!hL^)`+QIAwkPW;&i8#9?)x$R z-S5K~h4zwobe|u3zRxq?g8aIpB8q>>@$eC_`+ReEK9BqSS@-$Pr;wk-f6c?3zu0g`+gAjeIV}pKgJ-Q zGjO~-2rSRT%<~n;yZru9A6WXcKEUrIz570q+DACOw{z2sj8Sn_w@ zPx2dhIUf}{%IUe+^}O!Da=b19mifyEfdlv-`i9fX{mc2la=vlbZ@B9`#y}5h!=@>_xaa3y$`^hZ|J^nz++x;tOponP+G_jcc>Qh?3XG2&7*GgF7rNH>|&rezc|U1(EBb+X)o=>1NMM ziA>M4hZ5GCRe}DO)te%7Lf0<#Jbjsoikx`(~1Lt#auy%KTnmg>R+Jk)>%r5m*2H zzMhxY8=Wumh|+J=yngg4;+EC;lJdVkm3{+?EWg0KX|rU3LlH01sajK=Nvhs7&HwZm z@qN=v6Yz80-^BMKBdU#U<9S88R;BOb)Xn5xEh4*Vf&Sv<{_{mjvZ$cxjB_vigTUef zIH*$gT;@|Y^u&-doi_9gTQ{UlZ6mAzvl(NCx*$)2YNAe$|%Gw~{z)K95K zpLw3Hl)bcZzm|CVZb^li)yb`A)wH{rJxRm6k2OX|hfSyCe8 zd8O#X8I_IrBz;r8`xWgUZEc_#0Y_o$n1@VrS> z9k&vFmzJ=TLn(G5AE-O%`b_V_gTy>$Gle80hMaC|pdKpDw7`eb#+X{JJe)6>^3HnJkpbPuzyI!7GnCQER znxtt{3$4kWDMtEyE!?{yM8oc$zRB`?Qu=hHn-V!oQ?s@1q(|9Cn)vFCAGm>vk*JInnqn(2znnC!eD%vn z-)lmg|2x%`DTr&i^72foicY>to8)==QC?>W9@07V^3{{O=-9Oa?LS%C2Y1mn*FL4qq+3 zmo`SkJF^e^pU2tV?W+Z!Qg>wqdf&M=^SyS6Qcm{OXU9EHcQZ}2$arrmvC3$Aoa233KBN}e9l*9i#0(3&;H}Cw|UX_ZA^RZt7o(&?lS6 zEO^aVNAi%MGLa1v1ibU6?`G-0eDx|F#C~Uz4Lyg{)DufT_tiu?j{SQ`w)8Kg+1>oX zS1B_|zn-*jS-oi;Q+wIGC=pTf;y&?5s8B&cT#RRL;-&j>F zgVwI(i%iV3nKt#%ATlW$8svM+39r=&uGTr$qC?xu{m673hiL|Q1vlylm>p6R=+O1| zkn~e6*IhH83nS5V5-bR*@mEu)rgQmO3sNBRO>DC0<&bK68$`uPaIqDc9)LwVLaOCK zh^{6<3oA0mFpEA3sl4=ShbgWf2}W3vX$BTul%)1kk6=X8Nig4vbW?bd0s8b>B}q-D z;fdZ^e;o-nXp!kKBgONFy-3|8wU7oFrjOW7+&;;~W4=L>3NAtaaDuo~HhqJ>LvQpV z&6Ct}dXBzHpD&l^6{3%+J&*Y|Nvh&BkNcM@#MRWiDZgYd`u!@>yUOe1$hFAJUlX_? zNewB^8owI}`)DzrYH!fuUNyF7iEm6&7yrx}e;NsAYcck$3+?%kB=z7{WVV{PbvCm| zam|lOQa?Y4^gD>#ot1tnMSbM1Bo%)Wo*yOdL>B+RN#ds@seIIsroT*0r6YkpD1Xb> z#LrGrnO`9P^2Ali;xE$WKSVXZ1blPiT4(WF^{H%Gl1ia*k~umD5jQ-GAFqcrtCCcc zB=FOSo1MkK@LZY~c``|@d6rLw{%YdZS-#-JF4XcbCaF{%^V?|qKF!(T2%phewVk}A zft7!Z6h9}Zyn=sBAUAd;sjvHxAa~UBE}##$S0qJ`cRo*2XQ-n$yHJU^%QSDAsNi+_ zjQMMl+Ss04xQ4d3leBy`Ecg{Y{Xg<&lFCb?WPcEm!$sgl>fA{Cr^4#~{=OLx`O}D- zt$B{DTy#Q;+)%5BKFvk$evd$*u&S5l8;$=w311U2msYaJ>J%^1rCQsp6c>lpfsVcr z`d^d!N1eh}k=LNtC@)ektSZuoOPB2DPNV*xKE?&k)o88{s|o$NK))*S^|U4{pGXbr z#Us7Ks&h{i)`0|FMMMJ?%?}Q%mfxYEF~p72JjePwn!hEi7SYp%^j`V%iCdhN-tZH` zYC(YA-$2~vtn|lcQ2NhR_PF47-HMGP>fkhL!A?Z>u>!8Qv3hXSE~35| zgDu_B#Q_Ifk&=@GSX0pzDh znoI>`H9czBC>KT42Q{D!NL3+0=|zlaO+@7?2vK7aw6`MDRb<=a?GbfZFDQqR>Ncz7 zNZC&j68R&dCcT1l*gO(EZbhbZ&dRf(kzbpvdNiX>Popnl&twUD@{gwKj*4AzW%s8Usv zAb*RbNB%;dl^W$tQK}T3w@o>r0`#;)`ZznE?J|UYiz)SSNu;Ss`fL9p4T{*PR8mdU zZ(ow$bq;y9mNfgbL#dPjNb?Zs*V;6uCCxt$S|dN8)W&z<(RPv^Jcm466q+;LSbOzl;XRp6^3~@^lGTp2Ue#yTcT&_%WjM*}B!AB)$r45`+@I`44y35XPhtG_tyWz~ zA3f~gTNBnFui)$N(5=2BDeBALi7Z00Qd(+85V~EwNLw1-L{6rt=5!5hin)RW4JAJ> zQkpKfB4<)m>PcIOX-VR5sj6+EtWT=eR;k+*rI#H{l{F-nn)otGA4IC#tTJ2aMmZ~&iqjy- z?AAO|J#Lk@^z0cg$)&dTg$u8f^u4p?Uc_X)HkX?D9WwrwRDW1yHfOJ)z=&+lrGBQC z;fN?qm%jAj3drWHQGS+7RrwLht4YSNFIByr4;8SLRC}#5o3loFS*rT+O5}N*R7pi-w_In9{OVM-l5T?< z7fO({(%EtvYik$Ur>d?;ka1H|b+pQC&Q3f`%08*;j;TAyY(Zf!bPPPvN@YypP!#gRiBCr>7=S` zmD!v%$`4c32)Yq!s;U{Ox>=>`tdSp1Rq+y#-$K$UXUpmE*Dm~$sy^z7-Fk#nPg`X+ zXA9M!noWtSUUjGwqVB_gn^YfLC5N#Y#k_Hdlov(S9WG9Gux4 zRVnQtdW-~{ttiWxZ1NAHs>nt-vyY@F{zA^(NZIYwiAQ&-c?0Nf+C`q1Ngws;uiUY7 zr*9h3{2P}^PL=IGhdeuyt9(<>yNcB9bc)aD%3e#{6qQU0T}I?|t{<+TyI-Wf`@cxx z6?}-CkK_-jX7oda{~$@%(1-Ii`)ius+?!M-=t54zs+}AA-m6qp)u$)|%#UoTIuvqs z{ydLYsCkC|p85`Dbt+5Y8-!^uB^q{d1M!z$5LA20%ozFwjdd4n{b~biV zbds@)qmLN7G`i8)SaiR!k3@eqc3Jd-=XClN(YnSy7QMmP)zQ0+T@zhq?AquSW7kFZ z8~b!Ld4o>(Of~qnP#%_qtH1_%E4bN-+#^?xRUx>~zc2o3eV_%H^ z%h=7)Ka71Ts>3X~@XOJ<#=aWuVC-wrF~+_gU2g2w=vHIjh#oR_Tl9Bh-;5T2L8spy zy~5bHqTP+%5xvXUx1$dlyEFO}>@H*9iGB;4wn?Yo6|Df<+}L-c17W8cyF2@)LT;hLYJ8@Mf^N^Un&;9h`vxIRxF(E=h3xXv2cc;M^|sf!e#tC zoV=``hm&9I=h4Y$`1L6QRm!EhXK9Lo-F% z<{L*x<4crkyUw*g_M$a8xDNX0j&&FzKqZ_eWT zs>S1pA4J?}%TEbx`hlupDav{paSvGjR-Hag-?uL^Mzxwp*H5&;UrYQ8R%6Ow&28!% z>WPeI5AmN`jmf9zEp#)t$la=!_VXlhe+bXN4;0ly-y-*@r)Xg57a-3{(1$BkXX(xK z2hv@+BD3>#e~o_|^lOpe3N12Kbe}(=0r3y12{ekIqaAH)IWKhk#C{`z}V20qsbRUiV)ZKNpOh=SQW6bhW(8gkFsMnPmgxP&3)LmJ$j5WUnokKlB8Jfg4IL(?nXEARkNoxL)kHF+|Zer8qi;;24W=XeY`DYIw)7}-a`u0 zmyNk{kLg2>`Nf;37MpMld2msS)Eg+9o*G=#qC$w~8~E*XzQ5{Hz0{iYz0dj%zIRcp z8f(dDvF{~~X->C;{Jfo0icRZbg?`$TrD@Qn@6muD_@Vdv{?O zXgPst_y>LU0-bnu!>Fx#1W2D&H&~cXrl%FI}Gbm#yJf`>M?c-0-7BgodXd-)~$= zXFp2zkWk$4#%XT&t-d-$Ka}++(H1SzU$Pfs8h)p*j@?W1E{OZ$Tq4u(dwul*UA1XZ z3e^|qWEx&q2pawqU;Qwb>#vj+4Iwoe{$4*rj~i3swpO&0v9+T&8e2CSH@eHC$BeBP{l(ZTqG7{d72RlT{b5@?R)3qtBP8b|0OyNu>P(aFufY_XgkQa^vm zv0Pt7h~GVz9Q|A(y zSZ)wf*OX+@UMn)OtSbbu+&rW{8p!qcofaLTED_6oC_}eOs@~4A+%ly01-_>@6sH#8 zs^dqW4HWuXeq87OqjA>sTfIUV-|Dv3q-pEHA@ycDJM@lDptYR9wDs_iIx?Eu z`dA{(Z9OWaIvoWqKMGeQ$y;pt2|GqxLzo3YvVMx z^_-B(-;s8f`iC)Eq`zb@#I*Iokctzfxkcv^nYLaYQd4WO=oKq6ZLKQ=ZT&<@tv$u{ z_pufwQ{cK2eY`}F_PE$G`&Wzjo`H;#- zGtNw2rr&xoq$a=3d9{-S+}66yyyTKKqG^;za><&}Hm_(~D>{U1@CnUpDLN&k_=7Y$ z$Tj~b8uwgVNe}(1zcZ6c3C4-b$+*i;+j=S8*ECgow_n~|9r?wF3>@lZ z+~cdw*I{Toq}Nz4V~Ve?p)OdTCQ?S9pzNmm>Ya+bA#9psrhkd9bKeh}_PCEB?U!kg z*?w_uk+5lzxm+Bvrb+IX(!-`r=2>VO0%a|wp(UBGmW?0LeqFFEHsVxs9!sK<2@#93SC2Z88n2O zcsm@uT1Ns+tNbMm8}8Dvu+CS_@5P3cC~bJwSNGEoC3@e&CIFt3EW;)MHZY`0HUaRw zWlaEVwyX(&mn>@nV2fXi1HfKBdg-@Np?=0zKW!IX<8mZylT0`g-tyIn)qL}?xQPTB zGu9o$8#oen`|4nQ$Dz2BH;_$xF!+~S!g2ROAAdT9JbIz!VxZ;V$?*!*A|*cIBKDZgl`ff z;ag!j5>EJOcNK-BCK703>N@Ha_4Q8ZI@G^;nT%5{BpO6+(KTe_9 zLlm1F2{bk=(Uv!GB+y{6H0^{|a3mB8nLa@xp)f;;!nwK|lBy}=eXNt_>~N!$&S!_d z7Me)tCs}bM45SLK;v3&M5@^sHPlYQc5{BBwHIXpPLK6wYEi{oZ!a@@XH(Sq4pD@Zo z6A7a&G?6eSF%rfK%aL$99X-|HsEGs`Iln>ki*&7WpD;0`o}&}F*Jy41t>8#F!fl-ok?=LcFe2e-VkCUS#Zi5mKH->@ z&V9nS7Me&n&S@nQz7MG-{kUZA6Mm!{3Ut0Ru9!$TWeYQr@Uw*`5`MAJM8dBYnn?KF zdS?2B(-xXY_`^aI31>nTvX2=56qX|)l%!%m!BGhjP|Q6A70{=^P2=Ei{o(fzwJPR8CUG=(f0V#qZ0KI4jsgv)GUCK9S! zXdW6!9+qcTKYiO#b#GbBs7;SITEgAD3Q>@LK6usEi{qP%BD4u&^jR!bP-;9 zo-1{q&><-;l^o@9LZ_sJt4Lbe@+Mt>zi%Un@AWW#c`i-lZEE&FxWy92}3w5iG<-vswb`Y(!Oz@aC4FxM^kC^2EK|M z%?T*%OeBo4&_u#57Me&HYoUpR+qi5>Ya-!x3r!@9v(QAs9Z3lz#=C^&NSKhMN(QJi z6A6=OiOqOyFp)4dNwsf{T``d`JxM*h8MSI6VWwosk#HYFiG*2}HIXpKvL+JdTGm9u z{Ylxc9dvDZ=|gJkKH;IHw1V{|5*A4&+$SteQV)#qy)Dm3pYTYM%5{itNYMt4gh!Lq zca>Sek+6zuRL%~o8A>EPnHULAStm`Ouue+nKH+H#O(Z3M_uZCxMKQ*jY(?K zXS{(UVUulK6A3R`Xd+>=g(ebSvd~1r%hod!39ndaBH>jFO(eXQ7zta2%(n~LOwT^^?NonbHGnD&;Ly`$c!dFS^9-4-zZyWO2;b@X-zMtRBFmac zC}CL>3F($Kkx(+6y-(0(dg)~v>PRRPPAk_)BH?1mgd?Fmt%tga?*H0Is1#Nk>5@}# z;7F(%R^_OZ&>J`ss&kFXIH4v(iG(`gg!>7XTPIDQP)|zdKH&-rO(a~&SxF>Z9acTt z`0R>_ghpXio$k*XS4<={v5jjYp{a!?5}H|PBH0@waR=(m^a&lpDrqY=m`LanR<+AuS4<>y53793uq!4KdP$ZX3B4IgB=oV+ zL_%K+O(gWQX-y>bPlyCvTVDFs5jqlvgwv|gJp=9&hDjzI2_wU*`Am9*!$#>7Mu*j- z9eD#s!mVNT3Z1RBf+JxZ*XUIkC)~lX0InVGN{ocNr8w>rCRk|tgozfKNVtcyl1P{m zR_})4iiw12VO0~p@!4U9ZCn!xGc7ccaG!-H5@uOwB4G}fE#ri_7Me)7-$D}!^AaOr zzOWn#v`}#%&7;v(#C^izu=7ZJu`j62Ns%0_|QTV z2_Gd!!pFjLBpe8<%5-)xb!PemS^#?0T5K?pa5${`(*>AOm`FGpR@*CMS4^Mqtz^lO zaGaq;!gm&$Nci4D6A346S`!IBBt(KP(@X!8?#=oczlPJAG?z&DT{7WFI1^UaclW)D z_S(UZsM>UAQg7f$h(y$$o9S0(JzzJ#K&3>?$yxe@REE+gsg(ea*EHsgj8A%u?lopmF;o^vDLL){~XC@NLN7Q#TWzB3bkx(h3UKoX4F_BO; zqAJ{pS~ZbynPkb4P@SPfLJiBBNT_956A85~Ya*deB>Ol)JK?22xm!oVRgtvTEhG}I zmP|Mj8bwrh>OR`pNN5^S?@#6p90}J()Z28n)(VbZIk%xtZOC|dRk~gp_hdw6nZC{PJvp+%qh50 z9OqCNKnt1a2-mg91BIKCRlUL3U_xPNvT9F1R~m&0g%QbW3tidi4Lne|*%oMSGLE*; z{47023JjZ27;B*kgTV$=@fk5{4A}D@X}wS=~sTnq~x@LttAwuNDWla7qSM8oD}brt=vqBn3fY_SEJXn4g!6AiCQfgBC5TWF$TtA!>Swk1S^ zF2YNnx>9!xyOY!OGxPWYVviKT(eOS!Dc~)N1d?+!e3-26@93Ki91Wi&tFK;V1xLeY zT%~e~h%=PI!a;@?A{xGw;y4-(Tc1rdd}X1Dh9jI-qT!ol)s2oF?Hdmkjwh>K-|z;G zh7+7%;&|y9zUK`ubw)UxWbD;PIQ+o45uMOXIQ(SYGvRQ`LK6-@TWG@Jm&9=RO`PX& zIFqb~?Sr=_9DJo3((EVWz6po0QhDhoKeNGvgHq~Ax?QF>a5&^rGPE+`5Vg>RLmETs zRZZuR$3hbhc`Y>IkY8o*9CQ(0^^11Ue7wx2(O++%r?u&)EoOEoX{Pn1PNMi||0&%O z%j}dnm%jUc(K%}fbyFEMyUgE2n_i($Xwz=Wr-Pw-<*z}%TKWDy+Wxt4{wrF*Y5U~g zb`c3q5$Cr>T7I+}^8?kl^voW=5OHM_cwc+tb<_)TGKZ?3J?MFpl&kO8C)Kr9X-YEB zoXc!e!7Lq2(@&_%yjfMdpLPBS65pZ|?9^UesUJX8xyBhQ~ z=%5}@lsmylQo}sGs)AZA+GAF9izp=#sjdUK}WnxFt z^z)=Lr>F(jfG$c@$t+qw4k~lHIqkLlE>SPjln_I&Cu&m`t)HZnxk9~5 zfuv_z`R@_+Q5LPAos_v+?V?MQTGVIwCyDw)Xl~Xk=|M=DdFdasdO*xvI3`k1O= zNt%9!QRZfKv=g$aL;O{u@zV4oiZZvVk7%Bx$)Xcc-Lq)@Xn@R}YTk2ra=hB@$Q_Jfp z_0se-+sv<3Nt#D$YVZ{C(GIeM=2--0yZ+~;>6OKqKdJl|(*#f5TBS)@-Kw(*^}?6T zKU9T2^tz*vPe{nDLN5G@jPp`>m!uEZM>c2mvlKF`(+s^I zpsYixYpgPxvqo9VSC7&l)Rf+bRAa5ub=Ju1`f54tu943r>9Vuso_Rt-COye?$&*lS zCe==>%;v0qmO^F&Uk#%`HhCT<)hVmY=B!cD(yMCQq0HBrmOjvjE5LQu$glC$%pQSrlrw((V+DNx=|s^wOh%~_-D;H%!(pj}@g z)gG&Koi*|U!t*tVfvqss^SJmmjGs;1vy2~nEXN`Q2ucqo=Tz5JTk@WGi<@|(%%n`KOZV{BP zlj=RI%vQ7dSqho7_N-W0D8D7uA6A*oS);twSAW)mvM`-8E7IrOVPNF+9NCAjg}ez# zJDe@|BKm>8nUj2VjfBB)QjNDtv!}W$yhsn~k}_vgB)*S47m{jqqEgE}^9FW-~@^#G`ij|=6SwpdRt|!!(HeE}f(8v00BSW!o=|aT!d(rm6!ug+Tfegjw(ka2e zo46U4ANH)}2dbZPQQnUb_jCg9Yj5mOtVk!{`-*b){kLiJKC3h($xuvZ>&sBACQWD2 zI{&m5ccag@+AA4~&3Xv*MMPy-T83iF=wjQXu1i$?EE+?x;dJBB(4C3uVQCqP-Ah$# zhhlf{WQjkCbknU?hGM7of?h$?>MR;Vv64f5Q-J?EQEz3@7>acg`XEt9vSH!`*n;}RcO!0q<#m+W zq1flQqJr-xe!kY|AoR=VKs6O_f?S4Tk5g?W>DGFRlrLL#HX(*$_tE{~pVpD^LlS*q zg*t84P%LExM1PQ=Ku;;#=H_RU(@?A+wWi6lB1y0P3wbuD?NIDG`VGP)>`RG;+l1yA zXAup>8uy228VMe@qAX{!$!RDS$$7Ju0{Wz(T=!C$#hsavR+-IN8Hzo9Bb19swazMCXJsfhp(R|{ zLDKza%d>`JEAt@ZA4wJNBejstSs98otPW*5sVZA#HfLohHlJ<;m4Ix9o5 z3ut1Ok>5hnDQC;GhGHEiz=cOh^|V!Hb5@38eZGM5ZBl(~mD!w?p;-B2Q2s=!RI284 zhk*>mO0|Z(G)b$UEzcT?O{fHAOHy^W%52WcQ0&AqD94g&s#RulR)%8v>E{enRm({A zyj8k2D?_mdhoffyMbgjDmS+vc_R_3MlkxAQiqiR*Yr$+v9E$z!!-X=Ws*$MF@~oj) zuT|VDwI@-wp71Y*VtOBVD5m$@48=B;rtDI6h1Iw}Kh<`{QItCk#q!djn0Qxg5fveK z#a8L!>|L=(>E46Cn>OvEPv|tAPV7+ZR$7$l`^RYe&%*g3>g()K?3ebGQ(8ZI<`{iU zT0bR=AE+X<(9o|)T)hO|*WTEnSUEZv@=z*z`VXmkS*0mShGIHfI~42n2kZPPB%Y}g z6x5~4P^@!f&?|{rV`&+Rm8Su)F2#R?{=J<=V<;A)`Rax~MAT7B%TTN!RjnP0eXx%u zem*)K6`~J2B15s#G?>vj_?Hq@Ba6mR>`odz8@eS??XqYL#mbHbJ%p&6vuF&(9&AeQ zx}kdXXAm_vi^fpwg@bf6Ow&&g^>h}Ep;$Ninaa>Rh}xY+V<=XiTHXxBz9#CsEE+?x zIrV+7m~N32x@fq7K4!nUSuqqlDUu3A*G!biP^{)wTH&j+X+?Z{(b%C_lvW=bdMHt& zvS))NwCC^s1#D7yD|Zpq%{ z=H{l6goHpKgx(>P&_YLQkY0pP4ZVt>^e#mWq98^=lc3-Cd;a%%?(Ug6@0@98X3osc&Yu6&O3Y;hy6yy&Htv{W*YYgsC19;o z!9S!7T4o_QOtAwUEO=``2mT9OSCwOm?Y(T3^)%p@IANqfrI;O4Y!e16DTa+eJ?|j- z+CpKOFvYH8X-bf91NE7M6peBUGGvMks%*ip1L_}b=hA_POtIdTEMx{ynGUj0Vr^3_ ze}ym=Ynx&XVctpX6@Y5&Ad4r~HpTAoSb}>3I{apM$P^on z;Y|e32I@WsStzl#DfZoW7IG_4dmUt<#M-7gn_`oXTX5G{OoH&& z%I?5Jrr7u_s}!mM)x<#-N~~>)y|~Si*$b!<4zf^UZBuMyq=lRV)PoMviQQ5I+Z3ya zp4f+pebYR6b@Q|z5Ii(MP61`gXc z#mcm?*g0VJ3b8Fy%nS31iBRLgy2D}Hrr3HEtz(LPiOC5e>JeNXbFj84c4mpiehI8s zLu|_wn?F?P&}YE_w$?6+1H zWH;Ea6@}QQ*kLTHikP$DU$8NbDfTMNMPdIA){PL`GR2neMn``FiAb7+ts40203O-2pOe$P_cfEE6eiGFJWY z*Ks@2R3SJ_u^gDiBC{o+gZ~9C>D7sLOtBmJRy=nj&>|@rMbfxipr*Z%^y(qTWKtp1Qy)@}^Oaro=}N`Xr0Ii}bfSdx;Ms{_^4LGr!9 z!ZKlsO~ssBau(p~TvzSovElnI6o~O5(2zpm<_!Q*1r@bV)*8KwI4m51C?rVV|WSZv$$q zgDjL-+Z1a!)52)4-vQT1eQ!J{zg&YXfWCvM1v9>8z3HvTY@Cra5y%`=d z#lC*i68s`iZ#u|AC2N~vPdBoVp8@rggDjL-+Z2m$Z^iDv(=gKT|7SI@O|gW=7CZ~k z4mZO?rr3OJVwP+T18RzcER&7E_FeAmS)o2+izv9A(JHUv8o+{zC{Hz6*2Va+6*0op{+npRHhfYbVEd z;^h#0j7~&v1{Ib*+dmf(gr(2%zaaNT{!%CDzQ^BK?#unXQU64_Z}2}L_f7sSa(~>vOYTqj-<10n z|5tK<((n6#a<=*_$$gu@x!j-j=gR$Z!q<}SUlZCrM%-@+GsOQ|!Wy~%p74X*|47&_ z_v;Do$oakbtp7W?PxPA~QO+cPb-7RRcb5Ad{&8}j>c3y^)BIcHKHYyn?z8;Iby#UU;X1HTrEN(&+|Vf_mTb=aqqmLlrlCTo`2Y;(Rn1wcE8Ol z`rM#%^Ie8<+U8MBLfbn^A5KRGDzA4(UIsumM(Mm*WV-T`?#NQJFqdIyV+Ida zue{wlIwFMaTw#l0Gz3i2RW$C>_gAyz=KvsK&Wrr7pvWSB2IVvKKgkzt_?PFg-ng_Z zv-f}+iW3VHvhoMq7PtbSmwD7yg6rYYzmN;Hj4!0lo1nkHe?D$y)94mWX6#By1Q z=CNaNqdWW(1wWt8EH;hD;!KH_aY5Wpk=KZFUr1+pH*E*HM60-#xcx-zz34wmw2r$6 zH*r^c0PZ$%6>+0`m8y0P9vw=43Ec{-+QfhVtGqY$&z5^L|K8nnXZx?CD8j0?@SA6O zZ|N^5_g4O9a&PVLC-*k~336}iUoQ7{{*AaN??Yo%!RI5-%tmUP8p;Uns>0LI!xJzd z26tDTidG-a9xwP}Rd#sc`~YZhPu1GcNOLZ#ot{Q=CiFoCUye+hV~csEkeJsBi8&}+ zmbI8eRk@8-#K`cU++jGx-~|4MAjUp{|K{`Ob5jswvlt%!n+4!N{D9MxE@q=RvW0ICLM+Met5b3lx{>k z0($2BKHv^kWoF?{JPw*qJ~JBk>NO(NTpZ3$NA(&RH!x3De*oZ0(4o(R9(rbgGOE|A z`95w0Bk)6NS3?jra>F7bO2TVq0-gia7!_7C2KVwBGbHdW43n)Ykj&HhRm~<5OTk#J zzU~i$M9x&L*(!Q0yt32rPOo9CQN-13oAgkBWz2%VYbw&9x`RSC+Tu1erZZmX>`*!q zH_Adn>MhB|9Y?}O%|oF!-wLR6By6}3j$^=`z~A*LGh`nL8wOQUm*D-A%~D^GZyyP} zb0zpLh?HRVk+2&9E}bzEERLmwH zjL;rVndlmM*dP_Sq+IpzB3mZ%A2q1w1pS>Q$)6Vv#}x)O>eCt8 z51%Ybwu**flzhNc25UxRBp=6dfl0n@k+&>@<4PMh9DSndEkK_s{J?G4S?}u~K_4Tq z;}C}D0pjol;vm|0n>eB?Fr;sg%bTE#_Yv(G{9WPb{S3_+>Us_;@;!X7*&G!NvGZKJ z2P-2IaU|j|0aXdIA6A#}u*f&gyn=0Zl^k9QdAjrQ^$I_?4fN68!1X8*`7|m#8^Efc zRENj+X7lE#V!%hjZ#)H5WLVAp$*ctnpXpc(&I)qtkQ+|Z%=b-#Xb-)s^3!;}U(M8R z8nzpL`yF_NvKSA1*UTo}@dOmUACe={XwG%>bXBYc!1q_1qna`v&HmeLi6^k(3o+{B zF9GEoYonIPbt$toDy}kkjf(KK3=P5t_l|c$y8!6xfTRR9KSG&Rr{ggoc+(wzE2cs7 zqj2v1a6DK9Z(R|-6-gR%n4-*$*onRqfCDy2H`s=2uYg}p#V34{e_6K|py?q-iRdnxrDg)nV2vb9pUz-GEPU zu_aHDvI24{;G3$F#X624LnmaLGJkB2!J#31Iu{Mt4>4MyX|nsqs6-ZxiXcvhKB~-d zW#BaxK69PWxlF1C;KK_)>;zynm>V6yh!6lDTZpNN`1gQ$!~sx(j#`WP2F2xv*C#;y z;Gig`Fv{&R8)J^BJSf?C{H0LU2-KK``hZ2B=`w4Wh_MO~nKnwRoqT&J;w5k0)>!SM z@Gju@wJ}Qa<>f0=z8)^~Rt)U|nhd}!2PApZARP92eSig81Hh&b2x&6nc@Dg9hRakP z5!GHW-*Ny_bF2UhwH0SBmP4XH1>zeA#jF|S69X;-TOgZOLszA|d_T+glFN*%q>(E2 z9z6fRU#nR8acCdD$=LC}-9h7o$9GdSNM!@rmgq^0yd_`f^5HngO-(Inx!{d(q-p*s zlzUw({2cHWIpNC>hBfWGL)9A1O7QZPE#D_D^K(r42vXZ|*+sOde|f&&<(r~1Cxp;n zy39|IFM`y0TrLtVY4h?8FW+UCS+kCgQvFHZQd^ql|L!tZAtMsL6nN#x*Wvjtn$PVv z-y3A5y$N_NLwr8#@kP4LT0JfP0Pu!{_@}2GyQLkRK{{_g1}!AXqCftR^-d5XcV-o zESS}b0$SpAIUmjbl{Q2@r{uiKY=(ASslF+asnA)gGc!2y+gsZROgy|0eP?Aa3<#WRn3 z+F>nSIl=_C^qB8oh49f}PIUk?rL*D}!F_!^=C8v5SPte&8(>88Tj&u}y)#=V>B7`D zu=d$(#V$(6B40uG;e4R4V=Uw;puQ-Il;||_8IQRc(Xv}qH-HM>YuB8}lulA34|~kR zXtaW?3{s3*HCNp+(?^24#CqewR>W&IDjZ5s+j{e~Q`H+iU(h z5e2&mi0uxFLx>UoCEn8Yjr5vVv0|cL2lJ>6Fyfb^arxfxnzwrJC8-PWzijjL0I!?z zk?KIb>oq4}s^<#34_^YuzmNi#T;xXa|LUEJO;N52;PJH)%@>!&*DKv zL_6hu_HJE#uKnP>ZS%E4=xQ!kA9))RX1=$_LS6#uw|_#WZ3hxZNK8V1z*M-R@5e+4 z|4@IRUyqLOJ_^XGVP^f(NPc}FS`Z}-o|I9ZD-pi2sEDPso!uQ?zwY35gjG!0r4W+q|H6~u7I;h0 zYIGzR$)^L*ajXNK0_LCAe%N!_Yd`!@xh&eq{Iv8G6s<~LZbts($X{V5afQ%G{yZ0P zN8KG+V@NL(CY1iRD;Fk`3 z!b~joMh*f}XJU!B1lOb`69|sdoHjfGC91K{Awg8YV1eg2${_UW3#UAny&KSs&(Kw(N^&x@NM+ zTzy!B)NUa6J817l3~6R*kGbr5Y_maZ>O=6(lP_7({0xt|aR0A+2E#jl4E;eAU;WANJAd`rkY=BtUv+=029#FPubXo6S@ij+~F z>zC$rcY`g^9_8hjY-W4RS3k4jeE^_!48p|gAl~Ja+YZN?Jz>e+1Hd7ILUO$yF$Wzz z=5H>gi{WDczA7e(MiYhx^PY-U$-7V?0sIR|3bmjJW}BD-Vwa_fZO7=qCYBGD-Nd+>YB#YBNbq3r7UQq3Ah)`S5n|X)tSxxS$3F)k zdU)j9aI94iUc#c*$nf940)E6=%XASf6ty;zJC{McvF#&M9ztBpaEa{{K5>8s2H`Xp z|Eh~I6kIAxE+XR*)v}5SikpIF6b&j)9W;Z*wbXkZ%FW_>fkCOWMT^TwTAK*7<+yj_6%6;lohI%eT8H4i zILpFZ%)(si{pdGcnAZW3VkuOZyUU?4Yb)>L)pZ4CW002USes6%n3o|!){*EfI;AgC zn9-e4nC3x`cLvr%u(6P;7$#tsab|yMBUZ4)qqK0eu;3zjm6aL|T)Qq?Xou4}Y&^)j*LK75opiWF+0& zP740y5X0Dw%ywfa7Q86Jf{QHpS0|z1hk9TB1?QyTKLrrU9_;}oMnUw6CQz;cZtt7% zTD!JU49nub<|_K02cTF8wl!KKFWwaFAJg0&#f1d*or*1>e`3IU#7Yot4V-bk%(>CCBm#{f*ZxF@?b21MYb124M zIzq}PWhEEszM^MiT`%l0w|6Y&HuTb?_88Rxt|@4`#A=d1|$ z98J+B7woE1PqfD~p>;Uo37p}RFhG>t;A_!|m+uizSmHIm{=B0nT`3UPO!Q4gL`PU2D!G4FYKJ zP(SdKm8(*M9!3^`e;@vix@j=8uDccqmb~;O#`#604+#hyJpmbC2Bp9To!JY=H|CJu z_{Lbb{5c<>#nUT zVl{297Ch_VlYpctZ|besCP9hp2box%Q6qU(D#l+|v&iuX94?@ z?&=-caXq>N`M_naIb;wX8X|~lupgJExESH`>Ce86*jq)AH-ew49%hb(<-j@OVZw>j z@DbQ^>B=*YRMvy(=S8_m+z#tn<(+gZ1`P=GtwXq03@jH}(NB`^R6pho^C|i2XE_^V zB*|y0pZ2arPeFWJo1;JaDalQeuT;P2{TjyAEx?Q-hD6~Qgsh67fVTcz=^0m)<&D>5}QVSbjsBXhzszouGVKLRC z_>8{ZTPq+mCd+?l1DfE>=P}FZYR;((6`6_9^YM3;p#7p*-ON+aCbb6Mn{1X!6aEYa z?PZonJ5zhWJ7n|qYJ3?^8e*C!bB3lOUxl$2)7N|+je|J#H7>s}Kn3>wq>M6LPK;@h zETcgg?ktMQ)*E_s=-bQ^Fai})tt#SD2Y(%!lu?E&i!m*e+1OMhH(SLFHIv&|(e(i& zj{%r9MM`mxl-_j|(^NlKDajpEF;mRvGQeI6%vvXeq?y5tNUrO~%r&QDbQU=~;k%bW z<|Ndg8WH`GspQNBkX5TeWbiS}UdCU>!a!CE5BV>fjJ~T@V@+R50^Pjia3b{7&Fy1NUWBKSv=3ry z4~#3<2)!k=X(uJNXU^M>`5K(TG5x;8=j7-c8d)13`T?wADbL`kExU=v=P?-9zCESW z(^}0N{}BuRsFbGfTJA5Jz&$qQ+5cGX2Qd28o{%!Tr4Ap?2U@kWGPx@)qBPPjvzgkB zGr74foSIX+N#+(X!};8-cGFDmZj&{M+S!>$FyMz%S!%b)d<%f5qmhLj>pEfXEjJv$sHq*vxt3WLQ?*W@% zct&2!ZT{zeOUN?-?6g7FjJ$!{oCZD>N*xF9w9U7K$b7en+dPdmYRT6X0JugX`BJ2; z8M*0hxJ@#rXXI}4Ai7COdt^@djD9RTP_5X;K~$&4IdGOF~d zC22eWcNLQ)b9+2?d2pa5X%ztLi%F8@l^lG5=oR#Pj9@PST=uc5hx?;Uue;HD=0Jvc zs))(u(N@TzAuX=U6Rj;}x@AitW#ViB51MUd`m7B^Bs~su2Y=UD*1n@m;SIp62mj_a zPsudHQKpDF065BYzNSX1+W{ZTAm37)td*KjroW3Q(`a-U1gQscdBj0G%CtLxRb1x% z1@QKfFNt%MX-7k4e1RfSr@*^l^NT6dmssx>A%6g1JmCnDU?Vx=I8)Ogaz`OCw7qRHLjN~0G=`1j;T|pKS|Ks#_l3j={olmM z*RGNi7HcuwP-kaq-JXybq5qp0`4~pM1-TFd8!xcUHsrdRchXQB47s=C?>cl2skUvr zftb3e8Sq|gv(!7nw`{y#?|@$b-WHo*)W(w~2;0Vsn5J>+IKZbF-~-4~q#PTM%TUU; z@#I;iZR4$hDewiL%KsFOzQA9HCgs?8sSIt~c=a$zX0lWhKsqr1v!+P>7aMOw2`JAv zU}iZXLF8x)r6f1x#VmGJ zp@IK1KyFlr1C(V*`s!uKP&mCQ&slsiBB%_>Z_a@b*l64*LR)R@JbkZW-Pc=pZbxhq zhl^vYjmpt0MS~E#-fd~yY6B}^{G%@yjr1~{ZL77!R?ot=+AAB1+G?$_NFsd8R*ORS zDsIbGJB*HuZrfJlF2{(Yh|9Ls%EH68$^Jt0woT?np(pplqcz%O<&at1CUeiXY%&=^ zLtDJM48F}8Mn|BR)z4I5lSvJPhSB?=m1+>g4aeWL9g&2F(aCp!cQ^bO**vwE0B0C| zB_9B17`@yJ`(J=m+i}^&Ag>78w#jx1+P29iEY%=&9>|Lh+8IWdVkA0>@aj+Up0N|> z45M|L8iwo*Dg|Cen_p}geG`L_2x$R8I~x?T$u^a=gbW66jLk1Lj6R7SFOsiC0OS+I zd?`|)VYKj55`6!ysuk~EfL>=1maGoq45MGPup<8ifUgM($#sU&4X}$P2X0hi6#j)J z*~2JL)seEO1VCMa3Q4ku(LeiRLdH~d2B5nQ(hDtA3K<;v_|uTKl=($R!-zgR3yi~V z?>#w6%+ZYqceCB5ILyk$NO}_MM)7OB7v9!-{ssd)qV&3ren=gi)jDww}t*{*Potf4U!t5pM68(mF){{~6-`QLs&s)rDRq z#?lHqL=npY$FCw)ycp5H|BW~XVTJRUj^hYJxKXPTA__zi>sAL9i)7YYcLMqnl82c% zho=8qFr#vs`vVkg3A^2`~bEvF4Z=G-d7{sCN%I z@!kS(JVtw33;cIwTHQuv6?XqXXd=BfDvx*MxGC7?0Y~^LM3-5@eIMzMK-Ui|;o1RY z6fWUo&|@|5maGao`7JyVKHadkk1x~(T3{KgVO=ZcR#^FMSU;SV;|ru^!qGq+(SZO) zl!gt(krarB`P{IPIMM<)*29q{j!J=3_ruXx9JK<25NE?C;%JDi=x{U@M|Pk+I=qJ2 z;%Fau=V>@vh$AO(7!}p9r8xQo?y3ey>x2=f3?n!2Z8nnAHhv5od4Y~DIND39Cj@$? zz;TN>rUbT*Mwkx%91OM70%`BT(K(i1gPari>L)n51o>I{d4Z7_Z5nosn*?d|13NKz zH0&0f2gj1YGZfG_FaQGX546MrUc>&0E5KP3XhF_^l561D5D1_@Xn30>=gB~Y!Eg)= zr*=FSs9GJ4K@sV2>)ee?*%`BEx4A3k5gLwCKg?_#YY>m!$V|4naR5U>m?Hr9iU8Ck!$Vt5LtoWv;? zDu)f@%TJX(-bpCf2-2~4r6Zazv^*}vEBb15><;p-yCNw-&aIP+6=5BQo|OwkQ;o>C z16nCnP{FL$nz!BIQN%4qYzFvR-E}B^LSdP>7vavZoh(Z&H6-p$9BeZ)U3KH z$Wo5RlLP(ykuF6iN`z`3yR9+8RMM~}gh`38fK><^n*mcitGtqob|;D#h)AZ0uc7%_ z-L#0=jtHSbBK$t7w7Xeimvj;zBeqa!o~;Ppcbd1y=Ak4o-OB2sOX92}UL;#(bs0lb z)}0!0l?bOUP>_|OHd$`B=tJBKV9s}HJJw(g^wI(AktYfxq3J{h8v`8Mj&<>vhV}mk zSZq5cai|8&B|r+%Num;Au|G1I&uG*}qMT$}fGbx37^ndU9Doj-*ap0GsuPL4< zWmVS|z@ACTMM~DHYW9T@^iA1c71+Vj0Lr5C)+uE|j1&`%JZqHHaTBtfMa5%6%)7>Pye#^i3YAH8Y=dK-;teGZsF~8f`v+qeklH4FJh5gO&N`=PUH9v+;bAW_D@eko+8n=+G{5wR28w0;t@es zn38NXC7`(A(%}I3H9)5J#Q}}$A?Bb4%yuM58`Md2O$VT(ZosSUG@yUFg`LY3?f-1Z zKdCy5i>${|d1FG~v02h%8k)U6k!&XAd$J`>jM7N@6)W&rZ=~|Z(2*|{&a}lolt?xM zRVCZWk&*OA1BBj|${Ry>a6)V0!rq$58v~7WLTmQRw>8yJ_wT8^(c_pCI#iZPg1MT=8%6NBb|~{QZW*z6w1AvBDxND_eBK>WJR|l` z^7g6(KDUu)H;hRYQOb%?%2*yTmG!DB(*rpELo)Ob4kP&pOxw+>I;J6h-z}Ih_XEgWKU2pJ8kR0e5^^xPPpM(>FjUNTPdY6~lN2 z1o#Q%&|Z{pF|1n{x%cqq@-BtyMsTI8vMYK;Kgi}eXO%tCm#~Nv!GkvZzWNB4lZ(sX z^0|hQ+R$HeKNcxcvy%3}52^eXx1jGDu72yPeHxUfKcB@0eVcIgTUYIKdL8{g7tBw% z`hEJUeQH&JO}*tZ7Ea2Spg|e_Kpg0d#5YM#>!OS%6_T0i@Nt-pG^tqX0J_ugJoMU4 zD#f#7h}eWQhWFh9kID(04utn?0=jBRb`;@@5VLuW6`*P5AVGqggHOY#9oAhAP z?P4X~<9P1hq`i(e1*1xnhje-h+Jj!5BAAVhK(E#G$^_uoC5!)76h_k|ozA;Z08LBk zw7vPR-)New)6+jM0`I`14$Z43 zoo1SIkoV@*N?s43a9ua{hn^h;PAZl0AOmDzI;FiqklUuo!*n>W>T8??mc%{0B2_;yKB;XR1I zMVDI{;yY-%HSrxao$iN!ZymNA>3-UODAO>!L_?9WWp&yR|ry0xx%iqm4My0uNI_TX9qhyhQ=+#8E4-mjc?0qhX-&D{$N*j_kk; zG~4VB;%FcEYauuteYDbY0t)k{>`vn77U)U=UBq!~;6LaFvU9}IJ#a1tj$6giBanyw zC%cC@dIlm!Ky-g`^a}i8!ZAP`y#pO7ZIC$n1U{v-!Q$u}_=wVmilbj(7^MvtNB=+= zrHv8CfWU8*HdY+B87YA$fV(S-X2)0*r1Xh;ohGmAmtf6Im=15hFA^CKUxlX7!i=4Q zs*9Kn@9@oNCoRpmJb1LHh^OHxQ+T|G{2ba!tMyR@@T%0}Y0w+QOsX^_Lm90e6Jw&% z^Ta%%F|CN%t}(-ic~&qZW4gmXNe}$t)4D06by|SEi{BUb8ut35kL8wv2yS5r`VMU% zgV%@(;=%d|%8V0zaaDLX74PdHgFa60+!tYXjjaYEWh)K|A#ojZuzN_%`wa#Ui5asI z6NxW}4uK^|Y)rxC zH4>jgBkPbDI|)m#B+g+WDu=|t8#tzx#Dy_n@lYzB3zN7n3@`PPXp5%* zAc@2njE*EmCgQbb5(hAoI7nhsv@%YRsQEpfWs=xdP8mOvsE!`uZxScaumUwfT48<2l4jIbP}7B;wR3$8SlHlQN zOGr$GimoP+ii&%J#5%}$fkdq^WxP&e--|e9ox~Yb-E@oIOd7Kz)hLbXV=fi>jDXy7jY zBPMGkf~eE7B>KlLbXVAHIz}6L>_c3i^RTbSmh&eI9nM7B-)}R zxESa5LHS=I(Fz6r7KugZ%ukajhXVhSL>THT3bNb_TSK)-JpKoIEfPB>K($B=9)b>^ z#BFHZ%Sqh11|2?$-@e6{XGr9sy3dhVcMz&YV#idd775oBs8&-DAEW3JNj#5aR3LF; zE>w%e?-;*Y3kI{L?j%OFg=&$=LD&5PiOi=kmnU&N8+o#hVc`LJM3YmqpLO`|--#C;bQ_q&j2@EX4LLSj%nREtC<%otxG zk=zBUMIx;nRExwC^pM|?_`Q-cu9N816bBb(gUCU`hLO06o@6qKZPTGzB!)o`^GTd5 z0o5Wg0qx>h5|=A0;{b{3(1agJoPdt~O=8L%K9B(M%s!|ViP*c*Yms>EF{l=aoxPx1 zB$lP)*)549e`1FMi3gCvmq@fN4b>u%e;b~3ka+P!s1}I>(3amwT>98Bye&Z-L48#t zu?%f_9Ene1%grRwvkH1G65TsMwMf)Lr94F|0ViIhtOcGa7DXmF7g3{DsrPGU2ZWC)38u%tDSM32YuK#atAbd~p! zIGG65B2lmoszqW68npq{asLc6BS<3rAPh4S7g3efN#voW^dQlt19~kIQ=zMmlW3TN zUW>%^XP{an5>TfnNyI2+d`2P=r;N)a-W>&73)$S81)X22ty4YC$a27s1}Jo^DwCqOo}r85EhKL zswh4;_xUs?aS|O-2NIK>#R)ScjzC}@iJbu7Nun$4%ta)=c?`$Ik+@XeFgBC8?QQG@ zAkhvA5QaY5UE?oImq=WE9eXWE^z$mCE{X5A7)DDH^-y0UNhGYs;7g*;GZ=hH+%*e5 zB#8&FWAG($;tQxTi6>iPdm@RE4?vC4THGta=7f>l}Nt{}UrE(G%GO$OS#OB#( zAS6;p;E_Lxcgibc6$#&EJmnw}AB8s|NHl=isc6R8tO#fhd4GN$f#`-buh5GH#m6r`LGkhXxNz#el7uJF z0^_N~K_5Q~;rIO_LFnTbpP=~oeOzDd=WEm0U3vn}dpd!^`PDKwFQ!SjJlhyGY4}*9 zO;d4rjPNqRv}xw;3s}GCHm%&zdtiM#VOmFVHO;gQSQH#R#TzO~&^+#A3Xm_zB(PoVkuME#1)7+VxyzG&0U9mS&NDb0GxNeVmm z){2mGr%RTjcyhBP{%eenZMwUIEa^BXq+&74#fYtT3PD!8C7nFnS%O&458h~ta2xd# z${h0eq@ggN;0OY*)q!~uba6n(jp!$!8i5DMWbTUR=SkI^1v|zS;K|YYk;3ikp{Z@& z&`VYw*U|B&3h*Rp#Z_=4Hg`yYU!<=*swai&k|(_N(dOGcC#B2-r$Yc8LCSNO zq_){5&)9enb#Z=d9cpku=Zhy)3&4oo9uM!wb$Rf>YW=iP9-Qb0TwHi=vrdQO8#SS) z&_?W6tc2d~(tKlvZ`l-jVPn#>n(baW}P72tbBp3v|$oZ_iWS&6pa=D0kW z;p;g!@jqoT-7SwS`Pxp1Z=^&}^elNWRK6%HxnL$XOSFxM?galppS|eJBW0tE5y%KC zqirDQ+5ywm2p@?howiYK2H&dg8;8v?Rij3KxSe${7=C^qw-L4H`XRT>$f_oN`@k`} z`EMkbkZd-ZuowW{;%am)J=*i7v{(=y($y%j0soMjQ)ivhEAQ|BS&TGiMMSn+)@4uIdJILwdW zD~*H~BX-$*u$H^z88QzvFWxeBrmI6%yFWz$Pdg6@u+lgO_G-K5bsEPJz+k#-(Y?`9 z=x4i28nDy>kU}P2VkZ8B{;J)JE@`M+Y=jY;%)EW43xx-%>j-cEr9Zr{SlvPzM#gpl zcYp`0OVW&#xK;34DJA?%$oIA*0i)e2@#UfGp==l(e}R?PZoex~j{cJAju&CZw5z28 zJda&xh#iU%`z7Wq?ds{cbBpkF|10f3Z^#gYenyHcz1T|!hkF&K0Wp@Tl2l^*onkSiDAgTB%md98x0-Wm1YzKpcMi1@%xUXfaK2jpbx9jxK?)aT3@bY))#cpx}JfL-*@b8UJuORb)Ly9 zkAx2YBO9iF1^s|(b`IVWua!I;lKsAC(F>+Lgt=XZ^-}CS23&7B;z8j?%6%KKiq=4O zBk^Q#&Ei?&IH-uMda-oyuyCtl*HG3YF$~Rfy|r)9$D_2}i=amy7;8Zv55RVh*^1=` z5ZhGs*+?VS{$UW}m-pih(`eN``uH7}(njPF)=i|-!C*YD$-ZxQqe`qXZUxUd->d+(=hRwyLGA<)iGx35#8CQ@a>c}#5l+}(()mq~~ z(DIU>N>3~XT}LXoQY2(LQy#n5FckY4?27i7ZUt5Ua%NRi)-$U`sHG;2D z_7##X^v)L~Hd)YwnZ;RG;+Y8}_16Evg;$m|Z-_hZZlHG51)^ppoc&6zW6 z?9abo`#tCzv&Ss=V>*YbW5n`9e7UXh#tZzc=w@$M`=A)Fjc?7GHX6wlEu-LBRq}Qy z)i~`x1u5iD74Sfw#9RM@ijEjcy(+g-+& zD0x?Yo{_-ggD&pZ5#HzEUIGqp;1oJA=u!CSH+9Ml8Z-e13zcA65dFC54rQzGs0~*> z$~%JxVVwc?IZI|8N9H9v?(=rsJeDZe!Xd2uR6*5GZ_4agJF|H@v*YZ{<{CA5Mp3pU zB+U^r2two)qRY=222wl;X96W~saP_721R|}OFGj#oLV}{h!_8gB?PFca|%r2FjRbO zrwa6R<+o3qi)EhJPR+D4J28DJxSf+(81DQ%vs*X7ie+q9yKsz*aVU?kA$W`xU8pX8 zgKv?#$l%LZB`&~_wXhYO?39DAV9%oakSy@XCDXz+cW}LcbKaavJiH$k^58gKQF%tj z+6~yg55(ttb=E^^nFn8yU(GHep4qg{!nHBdxVBEX z-{C9r-_q$99g3Nf%$Lqw`MFi(#kKrCMuK;>Vf?vAC$GN~eCTKYUNe&`>Z<6YYi4qD z?aa|NGbKgmzJ2TY)lgA$Vwdk@jN^^ebR>2j}0lvi&I}XPwB~Ix(v>!)Ea0><ZOgqs?cy?B#(~y1*2<-E9HgzO?N}>&M{J(Z@|(Y zn0+jX_d61+{KqQv6e-<2Bu5H84ln^35IvBN@ae4ja&aNMuEAi7Uv;|K5nyix7O}HMope8w$hSS$&vLvWI0EP zNzV~Cq=F8UCzTR6q>Uv~KKtRqpj(qKTaB|sm3Ksy{T!kmQTmOl#33k^_%)?1QASOk zS=Pl0ljel!i7-;3oXy%5T3Z*Wk$T4l!x1HRnliuG6 ze-Pns?(>~S5htC08C6wxDtU3z`)Jq;vchLN;rT&5DZXh|{iPlRb|ZXW zdR~{=5C{8gaclw)yqjR*Iyks1z!mGEW|z?gr5i)^>_$%YB(A|$lkGaH9d0c{6%6~* zYEPV3I49gm!wQ>_K~Lz1G_0@*t+g{Jv7j7|?wS}!`xFDV-OgH9Dv75JQ(OmE(i@f! zPtS|mRy@WJZ;Fv7@Bb}EBL7>AJXhwWr*w>=s*C-qP}T8^Xu3)0s^ifuQtcTY%tEZN z$btM+!9X2$7#?k?M62(D8ce3Uiq+9bbAr1OC(_cK?vKDm7KD6tt4>RvBX22uMGeBN zQ6TklG9D1Xcl#ENjd9s={{mn0g84s+)Tu&!@JPaJD;6vX$xjtD_!_a$C}VKlqb^O=qO2ZuX{L5!n0o;t%2^_0 zOok9B5k(wCnux2yBPOK&c|PICPv~5=apGG8aIr3QX}sNqCbU9zEVIJg>V)|mVRYj| zrxvO~-Kp_Vp2D4)u2FPqUX-N!8$8{z?6jg-&K$-WW+!)9dD|K0dn!K%vKpvPR@l)_*w^i_)pa}wJAt1p zNv*dals~vD^RO*ySwi%D5SE+{j-2ps3w7AK&@QRuP>+Q|yQC~T2E83mh#a(8XJnHj zWDbP6X??qda7En85w*v`(t2#+oTho<|OwZ$*7gnwrki!3Z2 zTgguq@Rex6hDv-KKO`fkb+Jzf`Z&!_kXNs*(6gP;cOkShWpv*8b}TdsM=d!Pns!42 zt}VesXD|P9VvVKO!>Hg&O9pXxlQAO>Pwm2i;(bQj{)18C4)MNTN_&v-uF zjHNi-FKp1MsHqcyR1AP`y2!u)nhXa^EtQY4AAqBih381jpDNf7U&ok`^C^havtFqQ zJ$vZ`TL-qqVmV_0v)*wri&L!`aC^M6aT=r7IfQ$9y-v>tkxuzZKUk%rd)Gd3d}`rs zrjm6Zm=pJHJ8@Ul?)G(4uvp>ERsnm`lE8CJ2U>EwIC958t~1a&wu^L@(Z`C8xX0`f z*RoXl7#ZCbpihH@W|rJENA4Osy_N~ zU&K32mlO5qj3&)9Rwr2Dr#j&q{8%V_v5|g#NgY^s_+jg-S+evH8SfcOrRh zAjs7p7tt9eVgg@5kNhT$^HifhBg%LOyGC(uZ6%|clZ^Y|n=T@tGF{-1!MCjkgW#h& z%PSr1Ik2I~7<~H_8+`i|8+`kO2Hy-GfAj}JuC(N(Ir7ZQR>}Qj4N>)dD-l~w9xprb zCUgs+rLH+RK_jQ&IMrx-pvo}NS>^)K#R`Xtk)J9UYsd1g6-(+6l-h&vJzb!4c!z_1 z9==5@b)8gdpE#-1WM$QAj*-B_9da!JcRB)$pDY3YFi)J~&Mq=fyu;ndo+oDT@U}7t zTf>rA$B|eKzM@_S>~WljMC^V8S02)G2b4FIf1A0W?Rxi+Ih;BM$HrL z3|WQ$OFOkyh$&-@wWugdbjUh!U4cYeClp;pmq4CTy#*>I8Z1{uTtt;w^aE(y;#k*I zuFM+E8TJfxsRQmO*Xkn3af+%xeA7h+bh#uPqRY2?u#3mSVvR?Bs$dJ)T9*f_k|9HK zoZ%g;D(UVh7yO}g*W>Kcl|R6kuV%Yo!!7V0Md&Bj==dLS27zDUD^+FNg{`s1;{7Pb ze}=(x5_@C)()&@W)!7*tk0NCJ&v@I-l2qMET`l+)l9ZQt1yJv{6f0pyMmo~b6`)Qx z1sz>Hs3hV|D^|>jWp}ydWVnLT9U_4q#k+P^SXzSAMEs1bmA`ey|4$ z`?FG7YhddPM$m--EwzGrriT&eNfm5?cu|aXlMr9TR@09eIU>^2p8!M*{2L}EkK2yP?dNh+5j=8PUw*q zW+J+-lPa2ZJ^p!h(ho!Gl!~UJp=~j36MR_z#r^LUI^_p|8PYlP*~z2U6wS360*T2wgaQP8?$W$YSH;8|P)tzdUL!Ma>W2Hh>JoJN882WxVWyG4;K z=eo0OYchccc3oOfyZ|5nzleRwon1uizL2Syv3@gNX@HQ!mgqDm#V6n^rD)sO3ES3U zLO4$+A*5{CeS#N6XNVi8j^O_id9 z6<6Ok7Nc&^M|Vwr#Ub4ikmd+@0RqH!;0GFP+krG~hw41;`4Amvagk1%Ho7xomvf%` zQ^buKIP@6zU*_rpsp&)z^%tTQ88BHpqa8{ExvbeOJ=$_|8YA(gc{ zl4w=hQY)w|%+_dCO`ENqjEtNJtbZcZ97|StC;p|jEZfMb{uV}_HSl#ki%YSQC)JfM z--Y~O+Nhp~a3$b$mBGacXWT}}3#0LJ1@86nA4rgqx&=kv z6V&M$Ix7pEtPFu~ktAj8NAl;wcbA1lM=C#6aIcNEbs&|WrP~kRX?JV6jS-eVmh-9<06Kng!V=Ree)rxCO>u3+me(fawv(PFL9P`bkpk4kmA|2>g$mF0!o9M zLUy=0|j*{3L1;qBdblPFp$xjtL1Yao=olk2(_W6^F49Grzb-Q~`{VM^* zj!?0dEF{O0b+M?dK5=51?GLX^%M9wShmrl^Sz1&Kmi{!F z9?#7dn*tsUwa1gQ>xxBN%PgsfRo1 z?ku~U#5&sOj?A7^yHN|ZRA|a>V5`Eni-jHMU>g?2q6eIt zg55Llb=`@JlnaYn&jw;#G9ti%;ULCUg~I_Hm~zLsn(F?L0=LvQjJ3GuP0>mF!ijDl zeA7ib`th!CK(W&Y$h}kgNV#Vl)jz3EQ(MKYj z@*tca7bl!?8zC#2;h8PG%i%weAR}V}#;_KkT3g91?4(fl2U9m+%mnzz^W;nWQ6y&dE;|%m)Tt=46~7 zoYHDPI~;9Vx}K?~pGM_?I~d%S{LBny$df*?WX!N+?7{qCB*yq8jmPw$=97;a#sUjg z*NN(7M3p%65Tp!C(Zcc)=ZUk9cIFzBo4tjNeo0|GD!Azwoz`f_7^oSBv`(Hf35YT^ z(K)*FpPZfecm?bQOlmgfJlz{+C$7X&iYKWLcQt#kDiGE>w;uq>a=V5C^i z9Ak1Byl(4>59{0ymiH(f;}BFgf2v@J6JvY|X~qaM?>K}{o`7M`6Ab$S3nNoU>VU(Y zfKNFAgQ+?o_P4cRN}}Zh4wx1jHThkvOskl>>L?NC_XsMZ8BcwZ!grsG=NGUrn!z~) zFLsvKPINWjAQ2x<)Ugk8L^Q(DCo*Sr4O1nnO1*KX$T*a|%FxxsX)&sGn5y?}If@>D zhhdO4(ULXXk+l%A;=bZgG(aU7tA@PiOz(QrN8fE7aWQSr&B?;j%7r7Eps;o_trw0$5vcFTvmSI97WV zG0Jle%BeA{Tt9TgX$L@<msqFY4ke{9Q}<{ zeq_hfr_O8&@zLvL_3?M$4=-IF4i)!6TS%Q)=aJrqkv5<<=o#i@q^<#&w-G?XD1Boe zf;;Xk9Z*b9bd9p;H9cF*N+WQj2K>2L?mBFjj8S7Ix?0aRvn{48 zJHXoSuqni-BcY!)TYrj43fv#SlLox&1WT*Vih4-aPIKv8&86Qpaw*?PWX@cr6S*238vI(od6tBZvo))`5o56v zmHFdfY`g?}HdtIZ)TK~uZx4j7ijV3%h3zm%(K@iU+ib~*8ud0)TC*2`naZpUd*%=T zd@L<8G>Bm}vf7{~KsHn6P8ekL{s~Csxe0Alo3$Ijw#wu)4^~hzKp75DqOHHFF)&?~ zd2JHjx&u!=_AY9MJYCB5H;4(Y|Tc4-GYVA^9%~j@_kI{iS0Lh;eK#7B&L);=|e)$H zVKjIn@Yfpj18Uo-_y*dJ=OJZsCGl?XxL#LC!$eZ3I4ce-3;0@PwnD%D6reBN3^!u- zrUSGYiAG1L-UH%88)ak*?-^y*Oa$*c_+Pboy1UhZUr^>fNdN@Uza-&bD8(9ZP?=w0 z7*I99zlWJ@cbp zhSw%VmuI2hH45jp!Q)wmi2WJi8z2ux>Bp8)5hKN6#O$F8-0w2yq3x>o0sVw7QAdzUSXSzLAg&cb z88LsMGCc46Kia-K%!(R(H<>xJIqV!(b`e1z{QWPoD1?g4n zbOjMm1PiDLND;6jU_n$wPy|#21-IAd-JfL;?T0 z>K1s(asa?#hJe?s-H-OEkXnF;%IJ72X9Al?xK(YV^PVB=+6vM)Mnj#-FNx;J2&u2{kxZ0l!2W}B*e()PdORpXHA5;3UL%*96oKP| zjZM&{GN*M&P3)s9l;wffB2Kg%w-ToDP>+!6*gdF>P9(Y*5?*LR_`r~&d#<>mQNYF$ zuC;!U@KGW4WQ!pG5@1h9^D{m%q?Q&An!gp;_Go_kjACeRNSzoGOeIHvog|!%)YBW2 zo(QR-*#pv55ELSsq^CC~Ef1;nMFUbg2w9e-r#B|O98zih0#YLoT3eEyxpwu2O}j&C zKzc9-4gg`KC25y8OzGZTYllRgnHuTiV z84zekfcIO1?zhqPushuCsqY>PN*M>jW0s`5gh}^%D(jYjv;u?;mZXmzOd8{<)#U@y zUJ$;rBq}Mk-Z&Q`v3}NR2>f zZ%I5=#I$&?rz-Ram_xxDW0_hh$DokVHBU`>Cpd;J0^vnV;>kH$W-`;8C#Y^s(8zZ{ z`_NMP2o_Ulw*>V|n_z6ufc2MUa(TMLxxA4Hs&2=?##?jXJRDn$3a;-^&NC}POsVTxM=dP&)?&1wRkgYw^rzUugRN1XZVc&~+bz zdcxA_pH^_rfd?SYfrY3u-9G8~pP*C%PCD6~1e}}Z#un3Jsw80MRch3-p!~96)v!z| zKOki(^<1sMhiC^vuQ-xqW^$tpjC5_K9{C-1jRE6P!xHY(_rRzQO6|wI&qh57Y@@-W zYLmyRHpPkLC{QnWj_`9Jje1H-*+YZp;`neq7meN*zxN^3ZFs zTKq?zpo(ouxs`+d?G5ULo6uuMlB?LSRJd=DXBqe}+dMpy{1emsua(+%FtBJJsNda$ zetj!`SE|vOAkQ`MQ*xS?N2{PbK`XL_)tD~>dKRdSZbHAl74^cZA`VF0x!u8k_$GOx zC!KoW?+mNid4rZO1b@R#@^DjPZ0itK$2SM{>;<3Rb*D!^+7zA<=qG4T&#=nYI;iI= z__;BKU7v?19Qq0JJQB{8gX09 zode6wg%*?Bq0j!UJtFzNgIMc39aca5jlDB3Xhn(29t5==@79ES6S^2y&2SRU)!YF> z15=)Gi+%ya{t2tZ0aD{#f!%){o-Lc2dO-*lz&K!&38zYgJ8BQ|CudX7_S9=n@)=+& zqxturg@c!#P0?8`+r0zWCkBtM!vx1NrkBa4I-U#Yzkqtp((RlsTxPb)rk<)4_~Lo6 ze3gMscT`N5GP8R&RjzHotP56a%cL<4YA-$zoi!+%n)G&1`v9=USY}M^%$$==oq!X> z%~}N3iP^k7-O447@@basXs9? zTxMz>ocdzZ9S~zIGr!5E%KjcO>w$HTWnOPA(|^gPetsvQ4+Hhl8|lJjrc6}d!AD^e zo&;;1WyTmgw;_zpk*E&fm8i_z4c2Ft8DlInDAK*y#cD0k9@oW{k1SoSLX^Gkfb( zU~RI@>y2gl!bDYNNl@?sP>G-@QQGI1hNCT^k zWyToG%r6qvum^%Nn}XHVGOst5>8BFaiGl%rG^o>WqzjjsmlM^|dxB;y2Wzus#u%Hs z5_&f5s~*)b31PC9AAt3xW%78_58gWaJ(&4@H5N`4ty;=UV99)@1E^U6X|%6inii1q zgHYCzY;l4A!DY_()noSs^k$&a_rmoa6HkxzKRDw`U!5)^wK0>BX|~NsJr@}BmaoEh z2c)$iY`3In=`r*pzDnH|7;^;F3;#ja(@4SGL(nN5tIVXc9G7=AF=2TYEe)uD4xJ3?2peK*Dtr@_8#a@?d2 z-2{+-tA)#jShgyLjSad<@gjLx0~{fHJJ~M(>q>du%+ErC68^*{`6}To>HLlhpNVHz4ww1=a`>d5d5Fq+%5Ti! zGk#YNpYtbh_`Lr#hs*ufIb7+V;BbvEA>ovwFZvlAuJ@a8xWT`l!;Ss~4mbJhIo#~O z&*3ZnNe*B2uW`7=PyLX}dCjlD;Z|RMMDcBY9u8mkt8n;+e-DRm`lC2}%U{9ac7F$l zZ~G@WeAmCq;ZDE6$5hUHep3#2`TaTE?a$zFkN-S}@B2GB-0OeG;XXg~3FX`G7vu1N zUyH*J{B}Y3AcqJ21wpu(!$bZ@L3p0S!~QL}W|~s;uwR`Fxo$t3FKN=4IU5_NB-qQzvA&R$$5>FgOYiL$>f z>)a-U3ctD!l53k({MPNzrEH)0B2KerOOAC+ns@?letLklCM4j zVy~1lu)tZYV)j+(SfqU%|HH*v`AZNfl>2Aw)vdD^fnsr4fuLe-b3B4c61im7pe8R5cvQVHn1pttR|55kw3Gr0*ch?7Ac?A3PpCvo;VU0i&04%ARP$J zN#^F|3cIVTaEaw0BoDV4HFTeLBEyrX_X0gtL4 zWM^4mH4LsVuH>cjhGLV|%kawOUBEgUTvCzZ9oY}duEpl&=(#w^WanH9iSP#)q?BS!bG(E!{Hd0Y65f^d(TrjZ!=u{cCUqc^QblTNWn8wL z5iTfEN|Q$CvWf6V0E&WJorVQL_{+KbJpP94`MI z$?I{Z_Xl$21vw3y(-@#Ae+cedM*RXmm%}15&?-P`S=8%>$L6V!mfgCI5Z?uo;O3Arq94ALMjwPM=say1-UKs{yHPQ8t4L;U1tr z=z*_5TP4r6MXCL>WnU!+!THYEmMwc)k7YQ%WwcIAyo3VgNQ!2(N%Y>S=ZU#USxm(~ zOO?)%J2$%`qiv!$x3VMFBYmsEwDy9`cPDx;JmQLj0KYHN{rgKN=~HSSPv}7EUt_^z+oZ;&0xe zx%b9#+g!(8#@z1j!(BkR)8n|~uH!CX?!=}Ts>BwF8-UK16iaN8=~Tp6twD;jjv6Jx zRMK4eYJ0pWzg49T2#Aim--`cG2VI-^dg7mmSEtsA_avnyzL8W5-F%kHcnxKk4tO64 zODSZ|aG$mvC1m3h}x%ZORd^TPyuX5)}Orxz?|BIot4SE;Iiz z*`5F~nvG(Tf2aVF>*!>iZEsFb{C*7wEldVn8$~!9{gLrMBG>+$A+BxQ5S?wH$(H_4 zY&MEX{-FXyt_>p`&Q^7$Curqkg~>({u8kL6;(tW0v#Yg{ZgYpT9W&WzH7A;l*LL`a z3J|ko132{5m7}(MA~zPzxnZ^{N|Dj3D2kbH8oXBNrllB%tP@1SFJ zJdqol>u0&5_tJTjeJ(lCL&dJPlKZBiX>tS{{Krwqi^8F~$TP&mb`_4`yIegG*aLG&lK5?VgPJ(KDoG?TEZHzRS^+%MJI*7%qdNL?(6 ztD_DPx$>@oxdWv-fkQQ=j3&}qutjQhcrZ??OsA%XDLq#eN_jx4%Izf+R}q=}I@bem zPn?ms|LCOdyWOT7U0AhVLwXD6VW~PV)pg`*0=L5%Csjur8L99KCWEl25hC?jTns8c zHJp#8?J!xLHsTFb=}eW8D<#e7&ylLezc}!f0CLOc=%`%y2}XaqO#cv$ewaWWecS<* zKUJI9mogAnXW-FaBGv1!Yj|2btVjPzsdCKGXR_-F&rjL;hpY=m|3#_V9MPlyz99vp zkNbJZEr~~;IwTnVFQxizzV5$~M9M&s!RS9G)9HLFOzC>`Pe^s|+qhbagcU^AX7lKO zFI6k0`|dqcjxJ1({%NUtOxIcU=>IHLEmTZp{c1Ak(Wf!PXX(rO)sMjYFHz2K#9?{A z4Tlx{t{hhK|KhN+pMY2XrGl1Q95(PLa@f$H&0%A|B=eg1l{swc*W<96-;%=?{(k1&>3_~)OaCN?t^9Kw zw)V#{uZ`auVcMG3=s@Qm8QERRXjwU`ZZeLR@a5$UaO7P41X>nO`ZVmAVFFppzN6Y= z`lG3;B4r@1&cIr}#ZiNv)8o-L9@bjU>8OX{T+{A7n()PxoquAqT*y&>{-CwIz>oqh zXE>@mL_|5Z8AxlHjn-N&>!`j3alptVe6Cekj!!<0@pC$b5vA^ND* z*HL$NhV+TPmbzsF8_P$n9!~lK8fyZ1tOq*k{X*KH!ljXcxHFcBNRm#pkF=IX6QR$doDP_DN1!FzkQEO`BsXb()Zm0S=lJ39K zM0y8B24j7nlTLeHn9}uFzYMW%!I~WsIun`uS|7DuanwEabl;6J<>al*)QB!fvn#x*ZGU&0UF%u~zEBSk1OG?Sge&iU1Rs0Nusb7Y1NB*>Mfm$Equ)Y{e za~aJ`(FswxgR@{!%0RzmSs^OShkJ>OT&3OYB4v_F2%!&sq$gu@uAmrvYnGrXYB%-< zSscmb45Zify8lrhmCjT(aGaC%3>MsbAEwo~;!{7yB3kZJiLU`IKC22G^V}7Z9!DhS z>-|F_cct2Chl5j!rHANGyP=}xAEnT`R7GbhxjT{NHgM6=rbK$IZt#qp5 ze(X+5y2FA_A0I`lMED$8o>2+^GxsMxSRM--r%+Vpq1);7S;!8Hi=*C8GM1xy#AF*_ zpPN|UuMj()FThTdJMfLkSK@KRPMX-frxE+n#D>C0$~5o#bnwV^Y*uO!Us@5pPTxp_X(h*fQdU7bDiLx?vgOKX|(}*Tnv;%rLGsQ-i z;ZhRb4`7N~pB>S{Hv0N=h!(NY4l5BYZlisvs7zUj#tGe%yAiSDj8sK;oLIZdjjnCU5@$cXbOZl+WRvvh*u;g}^$P@hYw zcsyq7DB8sXGFKMRBcgaj=IiQ!@{lYrwJRQzg*M8AvPc)@$Rb-mLCs5H3Pi@HMCb?! zx2B@rh*rWrsm|lrLT6c8 z32;rTkJJfT2_H&zrjJh0O87+gs0x(usg62<5FB18J{;Wl$C&6>NjFqWXo9zm!zVb899NKa7Dt~4w}MB_}dhzm2g!@ zjS{X|l$G$WMOg{L;k}!7Mw$ww6RQNOQ=}cmWGFM06PaJtC?T89C4)I3;;7%J;c-_x zC%^?Qh($I^&`N;MSrm<+1g(VJ4$lcj33+tXC?TH{HzyP@)oCRZv{6<jG0)2^l&Ax`35%yN$9EO4ukXp`?wn60&sNMhT^Cl$B80 zMp+4EoVYomoI$k`DmrSx=Ru#b5~|?ofkadQO1CG?0_LQiWXA06&Dwd0eHOdT~! zc-%%=3A1gKl`zNVWhKmwQv%f~(zbLVB`kI#t7{r1EH#B_B|PbPJ z9QA5)U<%I(ui_l@0jW)4CA?+_mzA*9Mp+5lY?PJox{b0D-qdxQIpHlEWhHF4QC7l^ zcqP1JP_2ab95o*&3e-i~PuPP;mW~7otb~1zD)wWLz)JW44@kis<6dPY95O{}B^=gK zql6DF%1ZdyqO62ZEXqpwG)@Urg-H8}PE<0FJCTiWL$#mql~XX*V>|&R)WiqM?VRwP zqpEv4K`Y^uqrR+y+mFG}N;s{@8V`Q5$M}YNM=# zYc|SC_{YhN^%(y(s8)jGs^@UhM0RN-qi7MIJKS!KWF?d^ zwQD7mv{6<yc!!YCVMC5*OF zR>H%&ZscVpjImKx!Xq}yN*L?Ld5q%?s+BO&RcVETK4T?J!LxxAf&^B=bXT>zD`*NU zVWz8|eJkiyR>CY(q*lUg9W_drV^LPZJd3gt=3A7Nu)vKycc9+FoKThKgeTm{p$0|? zPntsXobZgR77df4r}Yz_cU89U1t(}Fta8<_r8PqwO@bqVb;o^e&PV|wvgE8(20K7m$fZBZ-Xg6>h{F<#VBb9DGUUI~{>b$U+t z(?)qtxNM`Wge$rzqlBxjS~D{+g_VFuNDpEmkWJyEgADQXWab3NMp+52jj|F#Hp)s! z2$_>`R)VroRzlcDSqa%fadU!iP_2Zdkh%s3k?hh+NDirecLxcqgj+-E4O|3d1}h;C zo&v2KG=-Ir*A%IhkWWXA67pM=l~B;4tb{@qWhJDAV&?>^Q=}EEPf92jik!rXs8< zDMTxwBp&1(AOyW1Mk}FINNua66SNY_h1BhsB#5DvP*L}2;o#^{Sx1c$s)gd#6KYr^ zc}}QlYS(i@EgNMe+@XsyN~jxB-P=g6Ssxu5gj7YW&$213ghqC7c}{3-qpXA`Hp)t9 zYNM=#=GHP+LJJ#ZCERJFtb~^FO1R6QS_y4K>btQ)pYhS5eMq^xf&^AVr;w^zENBWV zp=(IxSROQmmC(Z!sg-b_jv6KOv{6<b`2vX3<^blZf2A) z#1x{H@IXj4n}r+OaOFfRVMIu+x<@ByB|H>T@8D=n46TGmbdS~!lrUCDQ-X7c@$pJ{ z)KsVEgo!rFbHXGWWhG43MHwYb3#r4Qz!aVnW`tDbz&3q!c-#&yD`A$6vJz(7C@W!( zjj|Hv>AH=dFyBU52@7nLm9Q{g35yM?m4GL#`{8yi>LNWSJQY%ZRSPUC&k1{Nl$Eeg7iE<2K}co$Sl6uQgu@|qn-`eEbHYbCi)NUel(I%<^gtBtY}F4!n5;iApUO86~K2~>qh`xk4o zGV@9(B3c>scY6sNW~NJMYU~uPROS-7(XGu zjj|F7*eENZppCK;(sbQsPAF`ntb}wMWhLC^#rX+E4XTxp;i*RO7`e|_2_-%CD{hbD z1Xe;RPrd$N&=gieIZtJd3wo86P{9g6rz>Tz*Akf;fYhLgvOrwY^qMsN@(t>18wl+t5rfv-J@nsxJyUP zoX|F23GJ+rJSVg_wd*=a^a$q_84m>#H}aPPEccUDoi&l>!U-x1a+=DmOSjyp;3a$iEG-Fpy!092|OpH z21kcxI+_q19a<#toB#)s*ArTq>hzp&myTjbgboSn zhgI5?L9B#MI>V&#au7?QvyOL`iluO`j!uw@rO-u3al8L#Znk< zE96DS5jM(~rAL|y6-!~Xjj|LTvQd`8m;{~_q~y!eRHsPW*^ic%rX)m)wKGzfW~$JW z!i)s znd-C@p0qZz6rQqCmcrAzC?f^DaAP@E>)8~R!iogd0&nD^1TBSCI>V&VffQEj_`$Jq zf@CqQ(Fr1i1eU{Eolp^D%6fRw+Q)iWXQQl#^)||Scqv{FFB|K%9$raMYs&{c$9i}z zLA`e&u%GqtdV*??yPLQ{tcSM}RBc>Zp#-gm9kxQ&!#g(0dU)4VsP*ukjj|qg*(mE_ zPn;g83XwK_HBAj4CPc{d)>FgBrV6cx&+w9yeRv!abghRk64Ziw@O&o{v>v`pP(Qw_ z8CnnD=q@z}i4!_%+=Y`mnk&%552iY;hf~&O*29lB%6d4h^BO&zO;BC1_pm9fhjR() z&{>_J^>AKim^8u64HtC6_Krpn7j=TDV+8S=PH2FG8VlkNYak2al8v$;{B-g2<+fd&PqAZIlHO z(NWB-JV7McC=22i8)ZQxtJn#Gs=(*FR(p6mSNTYL=pmG{*I~~!^f+D)%Bv5>*D2h{ z<}P#>1Fue^(N9t#rOM?H-vjw55+BFr3_63khI8=*#Q(xnZn^yX@sx2^W4}-jdQr>w zp2%vS#f!K!;VyxW`_ zC3}H3)Ka-BelcfOn@oPLHxIqVFKf7>?`9KEF2>JOlwkpx)s|k;mo-Wi>L0*c0KIA9 zJoKi!tTC$prU3pF(6J~?FS^SbuRi%GfPVvY#li*YrF>a;H!soy_2!{B_+?E}MgP(i znTG2{#jt5Z^3Xf?vZkq}O#}E2KnUYD2kw0awNpD=tB&^J+- z-Zq!DQXPhr=q@jL8PGpbnBFg!^`bh2m66|$0nXD&h}*DnyY;xX#mnNdHmmn=!!lE< z18x{k$wTjX%X&+lLF1Xz75M#zBl6H|+_HA5quGKY#sZoYh3WMvSs$o{TY|T%JOyaE zh4U`Nu`KIjm6I+3Z$f=JlfzPxb7Mb!xJYR17q5PI_N*> zfgSXWQr2x!q4RWKPXm96&BGna-OO*M$%6BF=JkNN39NT5lkORdEwcm;lY0W@aj?!? zCQmfhcA*Q-lImNm>Tq&m7d-QfO%J!F>$k{cm4yjcf`Ti8)xa`ij4eJ8J9tIh4ES5X z>repfs)giUuqjIqqb6J_Q12FyxeHM7j?jb(aMsb+Nx==X#A z;EiR)n7O`GP4F)%`G#=SZ4N=Y5?x6WM(h0Mp$Ny zvCQl(RmIH#a}HQ5E%SO~nciQj>6pd2;2oeIx{pACl_dDgm=5SgkGddSjW6mu)}WJfIH%bu~ zY9oV1V6C!DZYh;6TzZ*#)?6s@v!Kkk!8#nzB)Z@ib!R<+S!t%8#C`>dcP70@)veVR zC9RMt{9sDmVfP`nQs$ys!uH8P`+^Y>rVeZ3z|L}MSTQ7LY#p4DcxS9qj~HjH9wJd^ z>|kre1|Vq|HfK2R~LO|`Ib#x|mJtuyxM2bv<+gSXjojWc%X(*QmI z=%XkcIAdvpC08KN06HIq181y*fwT3*Cn2!uR^|zuv5#@OK^-Y?2UI!=2hP|*=#b&Y zfbNXKfirf@4|4YgG%yMW&e*oyfipG*(99?tIAixhX^F=%A}ayCY+yaEfipI`Xh3-% z@W=5KyxgYx}SEOq* z&e#j@;z@cMt^DVkvLb84C{!NJT-YW=Xa*8AFFN zb}L4ceYdutKJXv(7^AH-b|)@)aK^`xX^G9qJGphn8ukfDn?TrONl{~B=y1lo^niW> z)W80Nt~*bALU6`r;#k4u-P#+kKE$T`nmd%z1D^@bSVf#lG4l?vT3ROEq8VEzoUzXN zf<2%wSYs`d6=iLYI%89?-*fU3P}kf@k2+&BpADGwGRTiCGsalsj8*zNV4el*Z_A7^ z);MFIHVK%y(Ag!i=?=KwSmTTp9}>_TfO_|h^r$m7zF*J_gTWeSnK8y1XKe9_pvxL(qI|QuBmU+FgOoua;6L*m@{TWa<+(_52^do1i{lvh8 zy2q|Bk3P(&Ua#h9|qjIe?*5jJy$&DbtMj4J%wZ<9i*f4+(1NzLu#u+O)Gl0(l`aKE<&X|MS z*6=V1}Kv$x0 z;EdJ5(DTYz${;-7jZJq#p1>KKS4WC(X++8as%c<7u7NXl(NOLN+%2ABoUzKggf3<@ z@NtG?oiQKJRC6s$06iUr17~dNPdM8lBVGgamW7Qo*4;tlKSJ`C1d*_{ea0DET^;xZ zU{|lh181yUG2qFAaZ469ou5={ov~>hgAT3)ycuywgz`sIk*>`+WBahqwuOeHCz!)6 zn}>jYgmK1Jk2U@eNJ}h{@Wo!99+>bqSpG263o*tTXYAETz$^wZ=^?^u>Vd}6Z4RI4+xqmUu(aP9v z%;)jWSSwUvow0kVKI@DPz+$4Df~1+)oJ*+1I%8*B5%GDXuQ!;yN(AGKeNq5~cY%Fi zap$bX`>9gc&E&VhF2v!I%!xW;!Qu|tIe_+CKwS=cyZY4Fvk7C8n#k4E9Z8S~&^F}w`Wa~3wv*nV`bb;f?gY7SB4 z9{hY@xyBhgIz51Y0CYAA2hP}}o>J!yjl|&qn{Gy)z!@uaA;?_>P>CoUIAhoFwF>G; zSr1T?C>%Ir*`LFj5WzhF^@+k}WekU8h9>};8ifOAY%_+Qov~*Dt%|~dGxi{y)mv#q zb^zLEU_GvZGj^$dK=~H%&+!!FjO}TFwJj>f8-*hQwx9zJR>W%XF7*x^Muv+5Dj9_X zXKco6$UwR418Qnv+vA?k}%ZpKYK`LsA zlsD>(sf55ux&wr^mSjtlF?2X%cfm2{G6#YB_x{jI zk>=75fN;W+qQ=C~;f$S!lg#wLK)n^qi`VspCRWCF zV_Ax8?f_O_%cKVt_3-O5;f#&M!YVT-g0;jlZSApiIAh(h-!pv^sPEoLk2+(OaEi~& z<6xb&%ot;hGxm@Q%Jd$_aRHm|iWp;!Ggh=|P-Yph8d&D_#xfnw*t1oFg1dq`_(pov z8M}rXJK5OjU@f)G7-NkyR&`Lo+zi%E%ZxGBIAag53TpontP7TTy|Km_8(TUk*dK%I zpV)LSSbEeMD*=CkjjaS$L(7aY);MDlXA#Wo2G$VEj4{?YV@XW{=3`(zW0|)0KnBJc zyFD{7b{nXBZ=^?^v7g=#3O)(eMazsa);MG9s|Cymobv+MZjga-#%^sA)Lt2^=9YQA zvBnw8T_d3P0(HcV^r$m733p9%f6W2wS<8$u);MDy3=WvDgSF2xV|vy&WA*O{n)Mx6 zmo4*pV~sPm>xqD#f<5gvY&Xcjtc=yg6+1SzCRi;jlau0|u>$u6%-&#)jAs%(>Wn?+ z=~-zpNHH_ve>h{*2JMVdyV)6|mpkIEgDA8~YdGxB%Z>P(HO#p+gbQ)=@yT3V@yx$CUq?DTAPvCH>e}==y{A@o{`s034 z4rlq*Ih^g^#o-*kH;425c^oeEH*mPv-_79@{mT9p1^-VD*ZE23sGRkF84l0qevR$@Blo!3lzu69b56gU zyAOv~a&PDGuiRrf{5$v49A3@+1%;*W^Y8h9!k+%vUn%V6|IT4=U!A9TAHN`nef^3Y z_Vb%_*x&EL;Q)U$hXeg(91il|<1`a3tyEvTUf5YK4|00Le{ltq@-b}wNhqL@z9M19EB1}8f6!OYFK}HfD z#Uj_Q!V^H9hD@?N{)trj?0N18q>=sNqmxHaLV&VD}_(d?3BseBV=A-a{IOpTnSfP_o$?=MA}JCb|itf(^*24Hg%enSED zPZCFele|n7U2a~^P%pXJ_tZGR3rr5d*PzQZR&Cx8f-=hW_}NTw1O*DdPG6?Es#Qr> zBM$)j$ijR!Ql^!rI_2*W~-|N@p zcrX7R4*U8KaM;hEj&Q(p1*G^IHQnU?jRF18y?+@j{&K>A+OI+ilWv+XZBG$2p~ACn zq%;V8U+#;jN~HBoL9;8Ybt9dTUY&A_Ns>OTP+>#x{)#AhK=Cy~i~@xXi?2LwZdOpi z988@NfSYV*D`4y$VqcxfvuS|1?HshCl}b3 z`3sB)Jz4|@Q6!4ul{Qi_+auj=F>l8d^KMKrJNa&AUCeu#bOS6G!#+XrX1!1hKEm-i ziuvzPP;}2P=p!7xFr_{W;xpJ*Vsj3oLG~jY`7UYnEg(BB%7UY(8to@291$j?i;t>` z_plaT6In48)B0_jJW+T{wwA3z;u-Yntw;;)EF2Q_R?N`*_|pJVlUF?l-0z;p^tvTm zqhyDFt<4G4R=A5yJb(=QB}EH&l}QimNAfNtIiFE4i7>Tuot)GGa1WU_4k2Zr zuR|Qg!hx(@I?ALW*-j=l=ohx$@|}I7pQ(^9cf?Bm4Mor{MZt z<@$-mhrXYHKMfN{11R2N9lE!2u$N<$x3&sLZn{Q_=wsyKzw@h(a%y z4T;K)D_5t8Xt3uBo)F0Qu$?RP#52VcnT?NusIi~j6cb^9`9n@@=b76 zX`IJOxdZ4f!w`4ZoZ(__dYeitoGvqt16eP{OY+sKus>h-gv2lol%DLY(|(Ya~-g!hunOAbI5eHzExD7{Vn98n5r zTWmckf5$&CZ1hhK#g9l`G#4)~UZ-=VcI$-3uh$U~COcn}6H8IAzabODlMqi^{;w-? zcspd`PctwpP|Vwjr;kU6#A|@x#pc{kRq(TFSx+uU!}dt;k?bLUV(u956T}$;j>!7^ z1!O-Uy+wGnGMRk^PzdER%r8_ISrK?T-eKv@z#tN*An@C-|)N(Whmha0%q8yOg@(jEr!{)E(0a*ja5uScDg#;l)3D zAN}U-jpUn&DQ0_Lk5?N-sb8ORf`5ypt5+aJS{m|8uT?1WEXWl|UczlSXE>^86H=o_ z0c;4MIX34VvNl(tSAgMl7hN!Q?LkU!K={}TK^^fm7Y{GKs3sioF;X5S=nH~cc569^ z7pC-nMb(sQaZQ_pvpq62ZR>MnH7ubAge%aqK{1x3Ls0TCXrEzozUJzTC7}zh_#P?e zsk$=^8B6|oDkRP$#Yd6y5<%7y{Ujt+6KlyzvLx3dq*Pe)3Ryzxjj`mn<^Vea=!VU? z%GDW5lHc;M8Y;!ZR9zTml0(vJ<`&;@#n5~)lpT%N_m*8cdM>jcPq9m7i14+fuoQ7!50;H_48JAH;sz)SW zz)*W7JXHXv&d%##?2Bhn9U}Q1Jm%x!bpo4qqO5PgI72MzHu)S8+%cs=sN|`E_#PB> zmJ@;@iDV3SyvD0~>e3r{K>^`Kft4hj``&%(D#opbr!M~!;+@KA0IXRwKjU|J>WLlL z;VA$8!1_n?FQ@!<(XoqwVRW3yz-C1AGme)Hv`%+e&LHB>M|{0H9*nocf4}c0bO7#J78*GLmXiGI4}8Bs!CdFpX~7 zo8#!H`FlcQ!TG3y>J=4eUlDGPlD}aTZdYE3A|&r=C~OuLxSGe1!4k^*#C3(U0_i&q zb~AZP+Kq*K&lr?gMtK{%>XtfRBGU!RxSj@|R4pkgw^ALcyh~(LwMkp4tjR=Go7Kn) zs;0cf?_hA!aSb918(Su~vw}wdgkGwnyg_FionpEvL5JrNr#G;H zrVx>uV-a@kzY=oObqHRt@cvFnrIF+{74KR?K{|S-=E;s~l2rO_=)Bay2QaKDDyomwZlD{r9+|*(jPFG ze1-@cC3kuQS#u?d3cIOv`sKBf#RuXxudLApVOvK$5w|`hCL-fnY#XS6m6Vs4uDlkq z=v~A;38{Hqz&(v;9KiV$+cC?{S`NW^J*3(S2kK?yrq2*vA(-vda9=zV2j`x8It8sO zh>csA<7q3_|qRS;py)q2GVDOx|UJS19I5+RW`ye}#L4KHyQipsUG5V~o* z=OyMq?6hH1=?JvIiR4;@KFZ@`x?Jrv z>IW%=KSqsNbotbK)A4@Z>WKHC)N4o#FGN%KAtFB|?P_hVbZU@X!vyMFpE};a);d=O zB;H|j9iv=RWRC}h_lx6oZ|ic&_W-}oa=2v85w6$hGf$jAt}(!;66chyJ%9ZIu=yFM z{Ly3Bjr39LIj1h|wXQyHJnz)~hhjI;Hm%}i9EzC^|3@NsHp5+}nbN4eRMhng)8M5& zmqbH}H_dilj3X&qSkO%;3mtdWKQ!mKYUmIv#=`>>hd;KZW4q*L2dPm&Iuc)&U z{W$>x_|FUG&;9sQJs;Wizh_C*y%%Xy;DAdHuLaz?1QO?Sr_v#H%GKvixsg}^oAVEi zNe07}LhA4DT~Q9nH3i7tDe_;1ooX>*(_gaKcH=#?@#tk4J zc#(?qT8hRL#o4&GQhDWlJwts5YtE5HiDYpOI%21?il0!tpM?qh-?K4xe|ifwr49L# zW+|LI+y$4T0)6^NM9-)4EXU5a2+epBo70PowdYe=IBDyKl-B^sp$r+1z22OV7>SgR z2zrE|c65ez_lA%-iKJglVe-=y96mCZzJ#M>yO8tVLY(-(irm;jgRx9T)^M$I<17%{ z&89+dI+FoHd2Ed7RqX3d2`FdmDM5c!IaPN1Qj(K(Dw47c`aT37O-z&jzKYty16{2%Rf{jtozXF z$3Y;UMDsFw1@CkZ30iPD3*>^$+iq!7M|?IiBpg^4#-=N@hdLbe!A&bYo%WNnD$?UA z3>Gy?xD6NG3zPp*%5MhU)kEGUlz%;$q_KaM+Oi*5SETndnA{pAh_L!=K1v=BaE2vp zCqn8ZS|+)mGO0(y1ZI8tFlO0sSlxXjB;EsO3liTnxdJ#6Rx7W%Vjtj70UaawFqN0_ zEBs}zM%X*J!4bbA`7e`G9wU4(yCLUQbw$U?j1$GsrH#Vgwl=OP_$1apuyNBgJM~mI zwEc=IaRPZ$KRyleWmS;|Hfsk(+JwDLU0iVrXlLZ?ZFBQXkdd4WC}t;&zQh*E!Qiu#I&)iUV`vUfjne1k2s!<~X7MeA2^MA4U9N!+f3 zwY;D>N|Y57@zWIlMAlUZh>H1boaAB@hBE~l7ekSvB#|I9|IK)_BIXe{>>R>+Vp%Y1 zVBnTsEBP&(QWv-Gax_B5yzgD$6}2xq#uS^Uto> zi_D+c0v1!=(oazNBUIyGUGXEJiw4%FZIU7%3R_r!Y7_1znLxhmqI^_u*wqV}4?B}9 zdx8k%U~o-r{B9TOALskrFp_&Jrjfl-N80$#KxiT0ciav1|F95n`je0tj5-!#TZYX^ z!kiFY2>5D0PKM+r09y&nOQ2l{_ybEt&OxOAXt0}|DgD<%K#pD^o$;1uuriE|tG;d_ z;LJ?Da_Ce9p=lgRQmxl51WfQfy>8GG)Zvz16lPzy5O4+EBhfR}*1V)MrzvUgU%Qr7?DLO^r$=F9Tx$Brn=3jrOU!$IoWT6D2p z2w47iNNh!K-43WUHs=%SI$j8vlIe)rNNPyQ#1VY(AVXpo0%&y8j&G!00t*4fm!k@* z_lAXlM{8rfM$ScHi>biMRA91M2&j?Jxn|1eC`tM~e_nD-hZdiE0XP zEChUt8J!jsogu(Rm_q(zA%HsY<_iIt%VD8e2xz(j5wj4`k|Jgype;qrLcpBL&_&z{ zWt>v}N9Rc9)JTN8qTAA1*TD=)3jqyKQT1Eb3mjz4LO`2=uDBa!cEaYg#%vw45b#6& zkQj>eF$RSqNy@I%XkYME;PNiHw`DZKVS4qr7$@pagNvLO@1OmpNa7 z_nqb1g@9gfz;d``yAUw=f)qoMYclXT#2IO8w+jJ>VRLjLfcDzxLV$v0*DVCFwrL??P^FmZ z@P8!o|LZ~k4PILQsx*{X2;h%vn}qHEmW^={=r~bqR%_DT?hx7l-sFTnCe}V!0XS4Y;2!E;e~Qg{%! z6R=(uzsW+t|4*%oFm-9#x2A1eTISEN=1;O{8Cm=swa6|6kcz_u z-sD*E|7rYV7Xo&prnK*{8p;a+mtk!M`n0czE(GkwVy=7!z)Eb+c{0{61T6noiZe)g z8<4!jkXZ;=_YvlGq#Ps2QOI@Oc{)`Sd!9ZV#Hn)MIY~aysmL2IKz{M(>F3^yJx|{@ z!WG}(=7ee>*2d;EqDstpx;x4fmw?^_qzj>~84b?U`;GJj-Oexq$e3u};5_{?Tu-9g zDHZ^E!sg}k^whbyPYy{NZ6@n#i7+{AX{%b&u7&gTd00%ZK#f9Qn)CFo-(kGZAn$p~ z-C7~&eKaBK*<>Z%Ui-jM6l=S)T3bn?Rk11Tqzh2P8THh zG`XVZ>AQD1VhZ3#08J!#CY5K;(-*%h#S$bhH#y}z!tHtbog~!^bDo|u(-XVF{4kzv z&(oJ6@6FHC&y;b+(?DJHSQ0kf`1tem!WBJHgnHECl;gVd^y7Gl!JelNej+5u-UpCl z8a6(`rpOKF=`;@Vy7P2CmE=7k{5HlatwVtVdRCEFjgDzBius0(SeDd`+U)}P#Ii` zOFZJ!MV4^GZ&MK|Ba=h*FkL!eXUFC|^9N>}`S=lou#^Z{ej$|o zuvBkvz_Ax8je)nZoNgOnfac(}W<79=2yq4gA89#bh?7ANdnK-ws%t$*%mlXB;*^7K zHYmsK$Di{0Hn=d|bW?6nI@+GNqjU?D(jptyKN5F(*V19^hbZ84Dr5rXZxJTwJ+JsS z?89e~e91t14Mb<%<(0>!X6d7>+}Jp)oJ#peayxgY+=5lW$B|GPaJ6^}zQ%4$Y-dcQ z0Z1$U1m#kOSru_E;>&U0Xc&ZJ4>M)J!}G=&<~$GkSr) z?_Q;Tj*Up_RHPyd6CXb3`*3Y9OCWADC z%IQffQ5u?}s{ID&StP$`AUT-vKkDNq*qQ2^dr<1z!1fzlk7?dK2ON>|m{YAV@YBG4 z!^XFG@;VFEA?e^Ly8ntBtw0?0K2oy7HYV|18BC(3b~K?gvZoFG2!+vu1O6rqrg?Cn zAj+~24xC%yiY%1U5t}SRwG6<&=z{}PPME-(KR7U@KHkm>^y#?llA{0d;J{EU-XE}R z%ByR%4-VYjJtWA6Qv{WOMbQTbHa+WUL(v=!@yaIID9R=6m7;2-w?FSqEC;P#>xoF; zdW*3ZTZmQ&BmGiRkx6tJft%$bvy`(FyN+y(q&u-WV=tl8rb`BwsEy~)Z9S1b)?kwU z$!1p}n7inwJ%04_1d&I}lsFEoAl)Psc_5Q+36kL%pcgFjRY*jJmwxJNN_mP>=xL0| zgB4nRMJXGQqRrW&iuQtT<>yHG78{!*SCUPduuWxFhe`5J0yi7Ny<|jS^xLX%R}_&7 zu!tqFm3g^Qd(|aeRFPGIHL*C=pqrveAFH~!vLL&FFvyaqmRQnB)hYp`i6A_0Npvyt zrhTLfKBF$SM}NNt{vMl$yEMkcbE-l)kdA|JKAyz=&dg+P4Bld&{t~Q8cm-!y*mQqI zZHS@b?Y#N+q11AqHNOcpTJ&Rl4{!u8^sj_l%ob4B$UeyNfX&4N643D8^sTsxqiM52 zdBW0oSX`QdBk58-SJ2h0S3uZdNqqIz9kmA}JXN}Ka!8OI7nijzDQ6#&1J31)K{T*Y(ai{7AJxyJLey9G+q_h9Tw+DWg=rs zFZ>2oyYx2iNCT;!$6bfSk-hLUfXKXe@H6$1aTRt($#@5B<0TGr}dpz9&6d6)#*|#VpOkly4i?K^jYr2suqO0|hEmHNyJsgh$m22_yiY=or zmEkh!4XKV_@^sS=g7B3kku@@gS>I6uCx*m5hmrgzv2fK|+dY^~q6LS@&@w;#NG1`e zD`@Jd)YYEORvM|*Y_XEQ7ayl+TO8X&5CDonaSL; zIgZNMg2TuPFg940)_b3Hj9RLzPT|~)CAJrYPb^6f1e5R;;D%>In)C|@mo16%371Lu z9Ph?HA+79`tr!e!x@&l}G^viOJlsRZ)l~tZu_bXExz6Mt6ESejT$LB&E4zTv)3Ef- z{gDo?`V{wQ$%l|W*k-9U>_%^0cGb7xKxkutO*J?l^Mrd5&q72bK1kU+DC9X1)>#r;TaXt0 zBjYQq{}#QaCtE+HzOU{vQGN{eSCoT0iYyTY>B>N4LbcFInA9=OqjpPrLa-YCjC2(qst`D#nxa+*%Cx#o%ESGE%k#p(Bx^b!$@DkZJ${a7n{K7#ClX zo`oxhR3@%DGifOZE3P9wi`)7mxXq?4JWaZ_Uv3BCJwp;ME#5`yh19GjIP4Ps6|nCt zp3Hc&kgBy2ZpRg*hv498Q~61O z?vjfM5T_2#TiE@Y;|LKwb@=8us(Bk#?51j7qzS~FI`ljN=opfJFp%6rc=zDcVaDGm z^^(D~bt1eN32A$9V*)$+1GnQaXdHbSPV4C3evc<|!Jc~9?F z={-!(_i`j$C@18R)P*BCN>k3HZcbx(F7Kn-gV>y-WTQrUI`8A8`&*>`Y!LZ<6z=P6 zKkCAh#H(+xaYlKD;Zyxk$zXMMfQQE`aO=B;&lCLc1yoz^qARMH^guxTEM-#rY(Fl= zvy}Ux>ZH4Kr9Of6mR2B^|GE?seo-myLgEsN8I81YRKQg#Q==Eu;suT%6Bh${ics|@ z(42I(lXNCG3yYG=le?Srhq@gLOcdXZ?SQ41PCo+lvO4gnC%!@I4}@?v8u?rGZRv_D zNDaLmATovO(eOX2ApEIRKt(L97X`Uo2cO+2;)<%kn#AF{j0`5>WT9?xPjmsHuO)Hk zYCKV@v6(oG0Gn>{RI)+iNqD(#c~3kI?4>w7sH8Bp5Vz^KnB$0@ARII#Jrs49;Xs>o zo4oZQ47|uX_$y+?q}tUcBuG=ggZ;0`q1Q4q_Iv;i-ZS&`Ay?cASr)~{ohB)VCMAFQ z1xPqcD6<7?Db>MfXj$AtJh9RK64iQ`=8*<>oD4zZZKXfr0Iv7YpW~>X|Bxa4huXk@ zNEZC3yZQ4H{#2lXgp>T)H?U!vRH>IR1@A!pyU2z@)OU3ln~zsk!xI9V!f{gU8gQSr%A2m~k3DAbDlWO}ZOty`Y za&LUbGN>`gO`dhqK$(Z9k}&af?)_4I-wD-DLCRd4yAqkI313Rp&p|s^1KeZ@HKK$Q zSn$mY!utS^SOS%xtJcMwk?QvONcshgYnDaD#IjsRRlSI|jg|Ca1P`-Fs@h@7sD4- zlZMG!RWVg*cPi-(wDDGlnKJ!7TBbD;%TL!*lZHz*>PgFf&rv03IZTqRz-&kC##A}` zK1m-qswNf~sa`n**a%yi#y@k^)^@JWKL^+%n?HY#EYvnamVE$wr*!G#R7qdMwyAhX z4kWo9KkpHn<)6PZu^*I`Mn%~_Ix39gEs^9|{9GV5+vd`@tdh<xXdLKjqH^R*rC;pFG4Q*Ht6$4cguuSnK~o+MCDQRQ+$@YwdHkb9Jxb#?9;= z;!?-=ev*p#P&u-yl&Pl)pry8IdF;eYQN`A-9TKE!zp zUH;OM*!RN%|IY+AH^iy3$X`AZ%jy!9GOO1D+Z5tdS>(SQ+sA814E_tS;|@=M65BfS z*N((Knv9GQLpR`JJYm6ChHzaZb_r%ybVY!*lL*@6uk*v;jr-w^lPJhHfYHvfR3t?s z2oFVK4Xy~h@F1}M#7z`ZE0h26NbKojW|l)g3+yF_7h`v`P-8#iMR?#{7|$ofw3ez# zmEew<{JnII6R$8cax|2GY9!VgV`4J(4|pBQWhE~L{`q_BEB^_t%#Xy*c)l=o0W_?| z@rVbFE9vK$kV_-6(_OHvp&Gz?$pns`@^6mBDvt`>Z3p~Lazd{P=RhR(-Q8GdNWTpP z{$#S82yYL|e=HI!_)5eC;B^qDSwYI+=OVG%#RA_h1@?s%q9W^QKTkCF_p-qLPGI{& z`+}!OW8XFmJaHaaWR*(}9_*JtGa9?(Lkzyq3(=*3T}oWaS48kjF>op$Q5=x#`oOMn z_S09>{Tk8Oo>$R_?f~tNdTu< zf+|9tNTC7#$UH$+@-d*VEUZ~Y8COKjk{_3@@57|AR66^?I+@HA=L~Z;E>S#*{t&CD z{HxLa;V~&EGNqC<%#|1pqWdPy+F)Iu%nU1C(U;`Me$J<|0(uWn`zFzqAvN@4bsq4I z%&{Q6mPC?Z8O2HdTm0D1ST&_T1Y@aVv7J$(b;*B^AJY{Pv6}&Iw*-|w_Ex0I3O_az ziahTq%>S{NY2ZyUUd`_520!-vt6*iUQ7VonAp;j18A0@)^1tqfg{ifGUF&e^6BsGq zFpYL;|1xY8@j8Oh+p#3p!YE3=q&uihJpbt~aBw7O&pRqvDsmPTOQFX-|BCs+cE*_? z%(Wya=bA%6GwpBgZ4%F03v7qQO@=VZTs8+`yDLxZnqN$Y@J@l{e`Uib$!wT$%yZ?( zy}Zxn+q#;D(p4}`=5-$T`qa#U| zW=mB_Go)AY#8#}1sskXLN+xY83sU4^OuOdq=X<5^_DukaqIs`^C)#}?&g?-OA7%k9 zO+H^L{klh@s?h6Dr@szHTk!9~W5$2@FylXCQ<7cAgRXNdV|*FtrQE&@O{zZ+$2{Q7 zsRz((+cT%6da-9tje^VzpE)%Jh&yxYkNHux0S3GAcvoVHy5^TA$DKJPa_yN@_jf>( zrQvD}kJxZ$POVw)DO%KVKv{(AL!dizs!l&Ff+5@h(6tV>XHH%9P}IP80P5;so;k%X zuu5U2(tNMVqnb~sgDtd+CTJDM?0s1%K5Fhc42GM%=dm=(&fZgJ63*VA!(4@42I*_* z0{70C<@j#)zC>dX_5eKM2zQ)=I5&GAuM$<vhG8r^ToWw++K4hW>eCr?IGG7wn&~ z^0zzrBFl&vT@ES6jUrk$inK3#Cl+gz^HdbkUI34^sU>v;Wx8UPf`?17+-2ZC;-C#c^;iKklM<6L2D;FA#(EJPskKysku?)De^5Rm! z@@zzI#Uq%mN`f0J5C0j26rygdJhmE)>cXU@v%{~zV)9s-fEz0xZGd#{2b0ms7Hh%9 zz_uMLH$ez=3VCj<{9q=G=ECF?XS*J~>c+~yVM0@X18}D!Gztkn>R5VJxN`zvWRndn zB^amOSh-Lt#1sSLGRLBrL>9)%^}YqG0T`_vtJP5$N$jQDvGNr$SnLKyZ_7#^E7wFg zn^E{vz+bW)E#Y!w<+dLLr1wEs>_`$eH&#B^DIoEp<6VwKKZRpu-3mTD2{8JNjQ~kG zCO|k=-c}YKDh@_@#}YAateia^1eto^Sh-L|!_?P4?4s*zKWxJ67I!XW;jT zfej9EJ65jNKEPiF_Iilhv2x+!f&4|lmWH?;E7z_X;9G(13~@VFt~1`0S$!JV`4G2b z<=4^Yl>ATxnY$Do6Mi>V-dhhTSrg`06Jyvl>ET%U@1Y2MJAhr22-@T?J68UXRmvk^ z46&?mti0}tzzY+BO(rhcLsl?wtXv7*d0D~mF|cJ0w`1jV&=TtJVEiMY(1&iUd~_N! zqa7Uw z%AKGIWmM_BTa+q*M?4aYr7>2%=b6A0mjSCv+}O8c#6zAMnd3uF_Sr@F9$xNvv-B@`gI#D@7}u15c_oWU{-M_m3wyrs}UI2C9#wpD-Y-i zybG{C4wtdAsSNB`c?^{M-Y76$b1VsA7)5TZe7+h4ehAu9N0sWwjg_xP!^O(M+X})? zOA5!za~?I(=bZ)?+kSy$wqxau9|g=ZU{${m(~gz2n|a&`3Gv>hvNFK#lLHw~Qkoejo~8!NwAC*Z6CzBP%Xg=mJs7%MNnTB{=< z{N+f}rAZzu7X_G(US}CRrT_>@#>(jfE=5g(F>m9M0GonwGaec9@=rPT*8)qDd?!)p zRpb?{T;u?I&}UH->OtT>i$@07>=+n#B(bHRz?UjAs5~6&5_|jEpmtgaE1%;L_xLB# zJ#k8g*Yt!8ui0tEGGKIftJfQe*}Bx(sr!FI$Cw8hDP5E2y5NTgy5NUrXyE6Qm-$nd zd&_b1Ed~&&8=G?Xf1@Ese3jZvXB}brDZ%b->Xo|w$mhXsG@=RqHP=~Ox|vdl=K-W{ zXk3f7P9XwPTj;{q0x8&N{Sr^5wlut=jn4GLzgGGZ9y}9o^b@pJsW<7%3V>Oya$(FR zq~gxZ8iUMIy{RyrjmP_)&5ZcLaIom@*QZQ=UkQAj<)}j3C7-(H28N_^zm4z`ZpwTV zo88Yt!g0_}lN#ab7&){cm4_o0!2vda3;uv0;t^OgR7wslNPR%ZcHz9%YQP#goHi0k zxJUe!HJ)k@LPtwdV`LA1>dNb7+d>L~%Byg~Wa{*Ye;$gL{P4&q7`{Lo5=e2jaxp9; zOnpMf(rQ9U1I|p~b1laxcv7E?`Wshb_cn~T5MrQoVZOqgojNV*Uo|nRegWZJGD&iF z1s*(^+BfQ7S{{cJ?8JHiJSKW7aP@EMb2|3TSt#LP+}c99PT14j{cE-)7l-R+fo|$| zB{+oDDYVr^M7@H^$>Ct?fiQa93RCF<&W-q=F9!G$%$HhBqW6EeW~}dw`U|IGB)S<^ zcRA~EddCn>MEyG+gBIZ=z<(Tpu@w*s`TmVnF;vaig~|_)iB3w;5-KC6A`TMl2zTm% z(aNzT(uLJf0y9U)ZtVe97clO3tOUY*9UHL`z8MCPE1Sa{XF{9hoR#&@sar~Lfeh9^ zgKIppQpc{}4HdwbFxlrM$m(6@pxk0)q?Ecp;+M{h;y?@p>O3r^U{W&-r!u6?I<~v7 zXGmp1sNzTxTZV-3WY$J3TBoFDAhdNPS)-W#7V}Pf-|y7`(a;lMKT9w}KsoF;^)BDv zg}OmM1(3^UjbA9#?DtHqtL5M)Gu%r3UB}Mc8WE=c1avN<6)R@Am0C|X<9Sa3`wty! zTFMua{u#_;WV48w;a2Kd9ebf-)JVJNN7Pezj5HZ;rT(pB2eDU1R_b03tQv8#FAKy{ zJukKlE0+Xs3GBuY=a42fj~B~$J#hbCV7){9%XYvo@?wuKg>H?hH3rzY5a--jYJM-4 z{#7tH_8zbgLYzxLQZM#mQ!n$SRO+vQZ47Y^X;LroVx6PDk^eKWV& z$$t8xJqSM@8$MR-Wxd!}&7#Ks<-n?iIG6jSW?_k{AK)#4-5BCr?w5MG7wb|haQ|Ll z4_Vw)nzGz4^$IW6^>fcS@*D_U6Kv|i8q5WyxKucGb1}KJD1~4NE&xoeuba&dQ@Vy1 zd-9fuk~M+fg0q`Kq&Aew)FfveFLqsps3DyJf$ISiNF}&TFtvd$`Ee+>z88y@^o5DL zACPZoC9I^4+$LVEbP?zgf$27QbxJ0gyn=Pazcr5<(f|;K<|0XkxzUTAofJ4X34|HB zNL&J#iq!*ER+)pk^fC}uT9S&a!DMeLt|b`oWJI-OmHZ>HgAPv@{BAGy{ZW+3zhEBQ zXQP00CD${hj`#hqv5=3&QI`RsvLi`~7}8rP+0BBy-4uj2BuUH|5|_}XF7W-Qu_aV8 z_6s<83qV+wOA?Q3O&#RLwm)Z_ z^S%e+fFrR1RdPsc>R>On;%}4RynjF_us_k`ntyS+KPGBZk2RK)_g*W9?|gaup*=lS z8*;o_ptN+hByjYpu^K6V7w98#HN?lJZTGr@I_SUX=?`K3O6p~K{8mq4digof-Xzs! zT`fLO-;3iPQk&=Tv#Nr%0F1Bx%?b+DKJ*|{JLmCrb>Db*Kd2{@=?sR7y!9oR^YZvR ziZ9eJk-`{2k%MSL!1%zvP)9 z#`}Oe)X~{X(I%CJ`9jS9d{~fxlfatknCz+~GVh4_-LdIWnv4}-eeal(9t>dMg&y=m z%b5Sl(4gHo3F<$N&dS>iFjKMG&-9?h@R}k=j@{eO|0oS%(~j zh5y+Hd{fd>4}pWnSP_4UJ=xHa+9(q1u~&;sT??#+Nlax(w?|?tzKIypZ6I`WB$?}} z@Jn8JvsQ}#a63;u0&I-KB|1%?RY*7^Y%5Cin;^_dCYe6#bjDBV6#uE?p867mZ<9$) z7~n#E3V^idDxQ&^LW0b0q<&k16Aij(?@d6puEsN~D*U_|KI7WyJ)SCskx~^r(Q0qN z2U#d^QW~Wnn2uAgLiWgOaqKIY9WDDz`6PC8bRJZNc{`C*ko{Agh#CauQcr>QrI7@e&{kdk1fMbU}$W&40qZN zvj`0G;_-%Y2F-36?)wR#(lEZvLZ;Vhw+y$;K*78kSPP5m(X?;3498!Ns%K%)1@QgJ z6xlM&iCuiy$wkikRv+CNfxukfG4N|Pn*wQWqio(3{Fx2&d6e}5U9yvld624lHH2(DlQkKZji17+>LP zcgjg2c;VIV`Ol!<1lm8zy5`^iSnXa3O0KDnO}oZLx7z*09awu0tpkwQynRMz@5PH47CYkD+cwL4W^bp^Mp-D%=hyYr7*?an`LwYz@_ z&VPinOYnHR8G5_g{R3o?4KV%QBKqeL?&&S;g43)4opJCnfrHiVzu&4=J~&hqkI2=3 z5SG>MRrW*8X3c{PWLLZI!{mTn?Ou2~R=d{+(XMuH&;S}Yi0KY9PStuI$6j`|d$r4O zI6cteK*kWwN7Sx%myAVYyV|`}8$+81v&D{XSG!+z6Exs3-AqKBv8&y;Rl+nlOnOegqs~nBG;{UuQUid zK!FW#cxn2CG14sK!QlY1dn^yo7l@h4o1F%C927 zqJ_EoSlGhI9Ee@eb1MX0xP|Ep#I-O_K?gY*1|QJfdTe3%rO9zEjL5Yu%<$>pd;@r! zwc%QrT8n%|i~2ZTrwKPoY+-)$eQ`z?gr6_LV_@6D45}Y7a8*FH9LyGm5uj2y^U=Iz zQCuQ-^$n<3i$4!7QiZXxw0pocDqVa(r|W zSe-xGA*v3-SgLdB=}BO?K1$_`m=KlfeDJSPRTEL+NK%~_gGugVYD`qf>Z)94)#QAD zaUt7=CvNuC{r?iyiNfT3)C3Xcywo|@V2k(Hh?qhxAB3l`YyChqjGxOw-`i#`lxA&s z_DJ()gHW-~>4t66wW>?Utu-_$>>cDkfuh*qJp{+~4u0Z>y|r*~6CSU|-@t6|;F}gm z`GYV%ZXsQtxa}RhF%h^2kz&pE4yJ;f+2mE^RA!oiClfNw$@2-B=FC2=%E0msc=R=p zt2^T>%rumfLh!uGEMh}zM>y?5Ng4Yx=d38 zmn6|Ie>lkX4#r}<;Ccu2bk1d$B5{$OZdu`}S_r@76w*vE84D`s*V!fq%zsy_2NOw> zo$i21xytlHXh+L`sWIt{$~yF@*$db8bVBc-^(piY1h>5dnz-Hp|G3@(|G3^kS*V;h z!`bb4ye@Rw_6{!U?WdxDfxy}&;YNn*9h|BhRri3<-;pG8UGHF2ji`DG*h>zd zOh35Z!BU)E^)9f*NqFFh?H$zrz*Ap?u-%e!^$tcL;ltiR9P1t>Pa)f-;xR!tVY9u1 z_mMT@z^XZ%Hgfe28onJ-k)~j@ajdX+!15C2^%T}4P3C;U43G7FLp^QwxgCO!Wy2di zA|DKcd@x(c$NlzWF+OTiP{R7Y9_>&weg(@L>4zDNJGZ`X=Y!}I9EACCi|M%}xb=O^ zNjin7Ti-VgT2x*9Pi+0fBl0xA0*lG(`v|!8eJ_5G8uKQY^h~z62rdS;?fO2cN>a#k z>-#S153fEClh>T>rSz&>-`Ars!ucVub8zPj z7AWfwHgFjnP60PtdU5ufb}gDV%!T?18twa7K|G$%Vayd7w-9Eo?1iU z_Wng|dvZhc=lMgc4I7g}08 zCS#BuuJ3Es7BxdQz$QrqZSt30-&b%iiq36dbhfN;ec#oS0xvuQYzT1^g?2C8!RyS) z$a*5M$qu*c`>M2p4;R3A86l>%R88StI4xP%uJ5~~61q!Z>YwmBk;{r*-9te4F~>Q zvK+U*@1{fA2znQUIaW}(zHji_K*$ALlOZ@w4^ z?g#4QNpv%_k{|2)p7=13`3eZ{B#|Uo;rhOx)}s#p6pS^F#nvHQ-}fP=5A<$;2P`4n z3-|6&>|#3y^HhcDJeM_X(o`|)`}~nm&zAwCauUm}@7vNCd%qe1YvXWseF77c+9aR*1{-q>-)-Mdx!S|XsgTHUL^{m5#^6LPCbH>-)wc7U&DF5?J-fWQAoqM9J&>Rz8FHY6C_m zCy!s@`abDC+Vy>nQO}4Eo&@JvXM;v=eP7c?0q1Sti;_56h!r9YkycpWHw$g>IuL$v zB71E}%a56Hzv)Kzb=eZyN<-n?gN0#cbjZerZ(&Y1{ z()X^#b;(#4xV&ZYbXD>qLg;i&>fjHG!^F2|u0|vj~@%kwg6@F=Qoa#*ETGiRdbx>OJ!PP=| z#D-Iyb;Rs2E$YgEY7ia-fo^i9BK8Q0@K%7@IM}MrM!Xro_X6teV5-g-0V;)+O7m^k zc&hn5<25$ek4M`HEyqbvYkoNw45#IoupQx;3-d)3^C3N9wH)oR0Zgxh@m34zkBD0> z#|X^E=$|ZRwH%{ikl7Wt_lTC`4j(!Id*V+|*mkP1F&G@jqFQC+(Vqg*P4N|KIVdNE z;DxmuFHiQw`oJXXnt%UG%ds%3W;iyTHZD3XN91)+(GQ;!`jR1aT8=)qd*aa_9OSed zKce6|EeAcFvk8-8)N+)^$f5+oFIo=LOfVS>DrXjQHuYS;|EyKJM3Ut4CNL>Ci^R~5 zmj5#HqcbWiHh>49v`MR)f{Q}zi9f~jXjNBmtL31H({k{S({k{S({en!I-(ZC+0XEJ zKhSBbN0cUB~sxo#Wwdjurfb=8kYoJz@A-RXfR+TaON*of6 z|F7Yh>gZOL(eE7YKZofjM8p}Z%BV0*tBo+-VG&)B?pRgExHD086wp}*C#y1+P4iWO z7)k^l5iBEpBg3gOUSAwh*&sA14pbX zqwo=}UIk&gCFN3O+=t`~RT&ST!7fvTX)V}Wtc_q2$Eq@ZABb8A*g1#OMlMxGIn)G^ zbmY*Ic)}P!p}<533q_crQ&?Fv$tV}7G71+8R2d&azUV9H5&2*kOjjVmsWO<8bP7?Y%9xBCtq;KDl(WOH zz+$p0gMd?IWXEB#bYA!nk9b6j#VT+yux(WtQeUKy=TsTv_QQ=%FzMlJ*Q8gSDr43= zAPfdL+7ar61gJ7DTZf2v1K|6PKnccar^DmuYD(ruA}Qs~zrC871L=y$j}t zi81U_enVA8=N8C0{{SqIFOi^Gz*V|cWjv4ktjmK@$+ALKMyI)f7p?`?invJvtIBw5 zcyQQqH(>WU+^RCtFUq6z5EwsADD{ zSMi0Z4}yN2R_MVX9_&`duRnw;BbFa$%Hv5OSXIVPO9FQ*0nZ^P^r}^5Y=usnUec|B z-P^ikd4=s!cc?sA=DVt+ock3;)bmC*tzF803# z_I+sIsxof4!Bgze>65_DhW71N#VMErpF+HF0i3FU$0VmyWgNzde!3dW>k*SkFnPtQ zGG2g&R<{Az$q{ap%w$y=d%B`Z>kDw8B{)^axh+vsl{^n<`S^h zCNsr3r^*<0KB(*tfORUFDV3yCWemXyn^G+nD2UE19uquqJ*;${Dx=uXf#9n_ZIMJ* zZmZ(%auFl*ZV>t2X=t)9>5PQAyj3I{Sm5+l`!98 zv9O(1>GoKk*((sHBVe3PVmVdDrcRKOhE1R)@tDAiD#IkORb@0-fgx@UFq%1*#9A0d zPL;9!7Eo^ot*4`s6&~xeu3K=d&oB^1Tat3e`V7E`P};Pqz&^CN$q*))tt#V8S%jWqLQJd5@UHMoKj;sz@?4CNy80m3R>iW- z08R&IgWh+ljBC3DoW8(^C2_P6D?|cS#=s?>dKrYb9Z9-0$*PQf$D-;J5Y{D=M3s^L z>lNmBo@jR@!f`M(dKNNR;~z6vGl7!ilfjzn9X(rP!6MTC1q!n$q=qLRng`P(vV2B~iFFZg+*j<9NJRA`rkYO^#DZh+M0Z zsB;l={bay1tPQ78SXik{AVQ&8myRa4LzLQN`#cFmFjQPqEZml|=Ks z@ZX&haqH;>l>|MV^G8p!@Z#kO5%oSSh)RMq<4?wd${G49PAY~@o`@HuP+ zF{hGPyChUe{Dtq7#UNUhM5lSaS_}GKnEgZnn`qamB)<2Q_@fAFLOk9NM6F6fau1EI zN+SRIh|sFStd^r&mBbg%L{$rzwk9IZSe3+2ZG3e%Odqs}K16q{N@Bs-s2T?783!k; zB)&rhHWk>1Nw|^WR1#nA^3^I3zHuapL8p=^hn;SRfc@_9U+D*@l9)9E+C5}~B6!62 znt0%dRY`pDI7UDqTxm(UR1$w9%Y`b5H&EF#d)xu`J=R7pmBfmFu=)kqvks??Tq=q8 zp|FZf2V;(7NeoGC%|a1o=oD5KO&&{QuEy$$w=WIU4cEe^=pE=0qkym<%obwumHjA! zII2lO2`Y)mDtN16G2DKI$2-Beb1I2q@Sko1^VSyAf0N);63j{101VWrB#M?r?KTi5 zqn#ao1s0Q45(Jz|q9_-@&4tOzWQ$P`o-oc@m4wt6DdahoMD~qf9fiqRXZs>p3{?_; z^@R9>#WDWJBjMBqLjqJ1v8Unj>Hr%#0woxyol0WUX9&wJVDxY-ib-TaC9w?Yqz8lX zjAPA0iUlmIk{JCGdeqavc;B*;RT2X>qZ*{}RlvWo94+B;Dv5(PLw!rq5fDy0l7!8v zB-(GmVtA6$OP~{o$3y`A6sja%y$If^0kE+nNXjt*LY2h&!-%F^!MNM8M2u5Ol>7t% zb*Cq_e#sN2ej4=Wt(8zE(eYEqhDzdc#Jfsl6W^{LnU$Z9T6ev_F#4- zTVy+x#3oerbW%SA>`^DpsU&vx@{RrRz$S(Etx94J&L0rJF95bA#H~u=y+tMh^>@H_ zgt%2n{IcEzLZ1S5F2t=$;%RJ%Vjy)!DHH-cf&Z;aqAt46lHRp|)eCW}lKAwjDbu<= zu#OIQDv1)9NYZ^^{unW)i>A0xB{BAW5MBT{HHn~2{<12GljV`WJ_6%Y%L-Kz1AY&@ zunpKQ;wA~KO5y`(73K7#KY{)2aI2Cyl7T9qP-(47<4N$LQ%P)H!t7yH5(BYBkxbnb zuQs`?Se3-S&l}xZIiA`&9JSiakDPC*H z2_w_0B$}TO9NG)~S8_s!oJ!&#a*POyWn%XS9+STfj+2HfH1>>dD*&rP+(f56J*fdy zreePtuRwePmYdDGE3<5F=*fXJhtCIK!=Rgi*K6xA1Y-iu8 zB(A8B4D$udzqWRRykb=nt0qDCet<_Ep@LLaRwXeH<0$RNu|W@y34M{^q~Y!DgQ}z) zpll0kDS?tBol4@lLs3)d+yK@c$xLz1sU)7v7swn4*63uWRFY05p>~)GR8IwKQ8F{E zbe&4#<#mDJO`!geL=ROGEk_6b`~!qMWr6^k5HVPxN@5#sBhw|psNh&^9YU4F^Dm*K z)CYKtC4?%85vT{f4luvRVv@gY(gdq32E2{I=@Vd#Nn$ybM8EGL=PQyEy5 z#N??6#R@Q(Xr>rQ^&du&Q%TfCW9l6P?VO`Z_2X7oR5%`}Br?jP{=*ZL27A)*o+Bpu zyjsAnwYZ5slgw5nQU8~SY5nd5tJj5?Rwa@8sHs!Er@(rZOjk^EsU)^^L!~eWjE|i> zeuXLt={{PO#19CIw7+}6IpS>4$f+d0L<|eZM=PI!Cn5fX=u{H7q1wD0gu0F-U7BQ- z#Ii#X)f$95lSxJ;(R+g@t0d~FJXmWC#!Gl)u*N@Tu$JJw4AxvHS5y)*Doa^~zH9ZT zUdG4^Dv3AI{MuC#QcYNu#A3+2uu5Vx5T}x;SpbC}GScyQ)2Wi+mnO%lBt))NNu2o+ z^-WE1>R202CDA(7SG1_x0=kv(dxsKfPkHp$57hv}ofs@C40~cQEjM)c{buKZ_kV}<^K@Y$ zcT~N{T~O}C;Cbs1A%!5bG#*3vfCP79@D#LopTp!z;Ef&Um74H?J2Cj~Pol!<2)w)F z%qPd47~Bmp|0uAL4yRNlNAj+RD)?oXPqmoo^IkCrJ8myJP`p$HU#$l8HJ%Qn zM-7Q7@ib>_jX6Gyxk`B-Va|H7wx=p0-ilQ~yltwU7;kc6t&KPC>IzR%V! zSHgb0l-@ZElaqMFJGwO8uvfx*-@uB#s3IysJcdw?1a~EDo`LXJC4f1OAilI$!j>J7pWN1`iAk259Yns4&7m6c$CG5I45x_Oz zZ+CWtp5VpbVsBHY_!|h3%WN1!nZk5e!nVM&23-uaD;zcSLjo1IJe8OXY7@}zxByj> zRQTbQu+JXFYC?uuKLQ&goGnR^@JiUiRigoI3MjK2O_D_ht-KO;>2hsYD?!-gNc60V z*ehWREJJmKgx9}-aGa!SOj~y)>=E>wWJr*DIa&fd0nSlR8ZLXfx3n*LRaXL5J;XWc z;gzt(|MCpp3RoM5OS^v58$bl59l=Y?ck340rkvLQ#m zh1X1yjn6qA<8GkK#p#U*X<&}S23zX(&I6qrad!UNW;l68=ehvet8h8 zIg+H73_Q{rMq+sn1evTQ2)8+sgi+jdSHj+h)grn#7y~TJj5l~C?7B2GpkrbFvc)uO z3FWSY?TlG?R{VM{2#ZKEWx-wvJHCmp*bL}Rz_y0Cy%P5H%D|h)f&E2XvZo1)y%M%x zSIiqR>Mpqg+gkC6BifMcm9RB;Mof9H2SU?aBpy}8D`6KrjP=)OA9ZIC?jtF|IU(Un z*yq2Csv{(g0AXCRBzq<7j%jT22#VH$SHgBp!8TSzj{XFut7t7jHdPa8xDs|zd(V*e zfN;c-+A&h8BH)#wBU8I^;W$~EMiVb%q?5YW#AzcMR zvt*K~TX7|9@zsIbT|l^>q|j|c!j-U}4>SJKBSCmRSyFf}l*I(P`-16~SY?ntUbfr_)hDs{pL+2ofvq zO4y;*AmIjp9g+#|JR=#+u}k?Mx4u453(1mF8i|wnhzD7 z?crV;d+v3|;-#L{zpsg@+GD&@HNFEFlB-u9jQ=?Arx!ZV_Pn2&`(Sng_Riq(nz8F_ z&--aP8v)D@ZZSLpneMYa?`K_p_~{B@bu6y0r+s_g&))-mbrTHQ0Pd7b!3<_~WqQ>Z zrI=ndLy%daE$VV!oG}g-+{GC(w8*@E1KcAvD-n}XMb@@_2u8^d(>U-ebV)CzN-nIl zrfM)RSaMM%9$iz2m!p;ZsM1+{M~7Z&PAON_KY1HYB34FVIA&udtu)N?!k_>i@0G+@ z$-*R}E(hbP7D|ql=11X^Ccs)-T)&YRE9W2b)N~m10Ngj3BC*1;8$Rq9jRDI1?oXry zLp}o*T&&1IHM3-~AjXy_Vlqa}s{DIY#&$iCk!m)VK49tY?<#fCmei?VA*)@F( z!RZD35y#26792OWdnY5Jo&z?~;j|InqH{G?kw^9bJcmba(fJG?xo*+f45JI*q9Z~3 zKX1`laxkLGA@b_r5&4<;F!IeUIwImix9IG}(z2Eyx5p!KXmSZkW5O*uCgU^Vs>iX4 zoGU7}gI{yvGQ@&gQSsw6r0@iozeZVJ9>joMQ8D;4q{Lhpe_|n>Lfo#XDE|^N<9dr3 zFQ^pOE7f1$iByJzkD;emGlpS9=->k-AvFf`e0aS5i4I*&V7uD7^x)ZU_V=1sWs;s3rxXBWJfc{dK5lWfm!rOWpGquLCa4V}-KXF$L$IvZeQ zZ_#0#=DJ0P5v-~o!EQUA`h7LBVa+=xgQjb)M_&RzU1!M8pXO)9+x%DeGZYkMPyOEb zo>K1A?`h2J?$qz+rhx5E{pRT0o%+3#w(P0j^?-z@ev|iKr+)ju!c)JmIfA_RomQ{F zbQ&J-T{y4B5AM|O`UZ}c5tRij$KkY*NW!V#H>XEbD-haPl5(ehGZUn^1HX@A z`|k?a9|+=;Bun_jMR(x$)^VP2UIRYWa>4_@+qU-AA{ehC#PH~~e1*zb9{9Z=UsU}7 z!jWW>C}Z7$-<$IyM?qf_!((E`9r(TeJztfCG1V!?k^QGoy1YN|D$ZAU;P)oD?hgEB zY11jRViL3eec-pa<_`Q`x*oN~m$16Q zS>H?+>t~UN3;jw@!lS zW-cT~^dvm+JF~v8_EGw8uyn>*l$bIk9Qa+?$HAQ>6@n6?G#=wWi7i9=QO6D*3MADA z;TlJh5vV)xdpGwIb^zGb5=^z|4*Z^mP22hrfK-kcXXtWx;P-2+Wuza^1HTVH7Zs+S z4LVgMV#TZw;DO)ohHM=8z4oK1kn|2P_mIsZ79RNBJ?3ERbIPiPMPf*kV(?8?I z(Ov?{9r*o4C>IBQf4(RxOkL_~Z2iDvJeMFB2Y$CZjkUy-+ZcrFlS%Ht@5@>Tq#hvj z%|((7g9E>JwhEjZ3&P8}NcO<*+QowdzvqIm$dbYXzpr}>YfxD)ZvwW};qJiix*lqt zUt#_yF^MPA!vnuxLez_{^5O>2yx}nNU{fhXY7j@1<4E$=H`-Q5BxriBQBUU-dYg0I1(FK zew?}9%Eq>G?s&cI_*g3bga9QeIqW>Du<1);7ZncOPQ z;lS_sLDQh=b|7?hBxy^;O?Tk;%pc&_N5B|jS>b`-(SqnhOn^DH-eIl?5BxsPQsWN% z-h2y|2ZO2C;6;tRv2u#Z?GF6@L#)^Xzh^haieol#e}SF`)wZ!B{uF!e!0(OQq9Rjg zfmJ<;X>|IjIPm-PZ;ivc6$m#w(iS@Rtj zlT@$DL%g71If#LmRj{mGjmr0481%;DrO>NZ?KHU$`@b+AXCc#9vTCQBu~1*X1?&Th z>-@BD)lRbyM^s@LtOmR}nIZ}nYCc54Vn*Loi)8+at%q^~X$<;@T&I(6;K-aOmtLBP znbS#Iq4>$^q>lkJr;}Ec(@A^a|G!Tsjl)~v>7*tcJYySO@{SJfPz=Z`Y zH{uwbHZHpT4l}S@oPKCR(p^jwx8LEO&KRKqy3;{9gK$n44_cV<1eX257-`a5@}QAV z&5FvIi?cYntKoqW5w$6iBnxF0!Q@}3lZx*|FO%zZQpwwl6?e$!1RgS)M`3noD%OFu zS&elh&G$c#WjVniqs+ru>$t=hs>R05F05J{j8219Exw5FC{>FzRGCE|N6p2oa|i6Y zY}NVO?2$xFZi&9{YplDT0OM$>e7GA8`L%ur#9e_3P)KBM;fhddg5L*0l)Fa? zL|{H=5^?}F!8>4Hm$omc2^MnJ*msaZ2-79aFB~SWK(t}%t8tGD!zBAms`qGv%}<3V zrrz2DYLu4csVXV85zAN$PrYLKF#IWfBj#ue&&c=@lOn40(n(qsemjGw;-nO7eaKUV zXT}~Ij1Y8(%YE>82RV6ioMeN46uSw-0X-7fge2T7{xYObVk0Ue`euT#(2-74h@7%l zczJB)dr@_sqBj8Nay8@7Z_xd!A_Ge)Rd{_Y`)c2CP5?h+IjYFiv4A(ls+Y$7XcTcV zf?5=hhzQ{CVq2jl6Sz8{t1PT#(Tt=E>zDffPQesLdgk(_5L{uDpEiubd8~1T(S8Q4 zh+XQaRaW~`AeCI2wiFzr)&4v|tG&Du?`}8A^hKrVHtW$)WgTe5T)Q;w&;PJm=I_ud z4`7uPrlHEZ|5KCUYqqqmChO99_?OKbC9G9B{WYsQ)|xY4J@_A1x!KlQorG_3m4+%S z&tJ54-moirO|A$pBShLZ@WprYdhAK1PE@hG-Z>xl4 z*o!WiB*Tl63@w%$`AxvNP%`kuZ7ZJ{Oytv0WuC_ZcS+`Z66Nz?BatuXb7g*9msJ7s z!n28_+m{8TMyDyMKeRPcm%QglI6#|~gUZ_98KEflXxbrqkmvOjd%WChonHW8ARf45K=Pdasq|1cn7$yY?rm3xu5laR{Lu_ zl~R0Q+U+-BRgt&FQ^g-iKk}7U+( z*j^0mONXDNb%PI0f9yQ)?ZEas{A?(GR4g5#_!CeHJR=V410xaZRYsvcikEDQ(_|*c ze!!+NI$9PSt#F@YfJ}=Op5_U16%lc_^kaWVRq?m-i6^TZz)dndbsg>~a{d#^YT~=tV79Po3VOlCO5b{IJDLBwj0cZ=HVV9P-CM055`f#B!qWemYj= z9}IecUGDHwbV25{ioc^{d-_BbeR>V>8yrVGXgIh6ancFw8w95Z@V<^Ca?+QrM@+BL zv4S6BVe@E!FFJxmKp2yY^i^XpH6`(@QtpDEo80$n6p>lkOMUxBL?(@t?(%tSq{B;I z`kAq4N%RhgJ4lh2!UOsW`rR-lc~kLzo5#YdbMALVE0nlndohSb6_Ek^0pi~ir2kVc3DhpfwK=sd#tmZ zYzWovrLxB#MDe*N@0p))!iGO4(ihHT-TPBL1OMH!G z50)b*XtVC(Vde#}|Y-pSdFw!Iq*EbIDA5Q;QUyS_av zKRp3m!|U?)>10+0WZi@~7=^R7U+5e}hQt;BX?gLlil6_|r>&M)@634WWNj_#lo*Bl zr{zVGif^wSp{>p6Vlw7lu(ocwEwCl=$$wg2{Hx-dZWp(%SYl3KU2ScBb4y@LVwnH5 zyrfeW?=(Q%`fhPlh9!SnTMTp<_xz{jC1aQPHgt~R!@tHx%cZlVxQchgfitkx3zZbTJlWdfAF(CjN`9&MuM@9H{DCcw>;_5t>(>49Huc67%m=N8M@_8v($7|#S5<%x6Z#Fk#IG( zwjRd#CJYzH=3#yULhspsIDZUw9jaS4jSu@daXF`kl~b|0_-7B?fO$ap$Z zB^o=E7i&K#WE=<+EJ+zWI~x1o!$8Ofz?N7%5HgJ6x+)s`9u2Cv^c@I4lEhfh{8A;j zOepF4c!>T{KFs&OO_<#2+1NTbS!h`Wyl`vS1tt4HFBwQ zgZ7Kc2bK8?7I%XbOJfZXkYYtTL6NAMY{OY+k_ppMvA9eqIXujS3qC@0__tyaEFNzX z;w#LAMYnTad9vZm& z3`nog3O#SExJWnk|YyK z7D=IFnS-~%Bg};Lz;l_92iHm`iV6Xhx#Mmj#nRY#xlA}7VNgxd(RxWHoPajbWkPA- z!b~{pDs-a8!16fyW+^SYnsDm?^w4I&e6Gbbzrsu?ZKunGg`jFCuD9d0n^sm+oXdpo zvT1giuuGaRBpvIB^-p*Lw#|e_w#|emyLm#=wZN?B*e(-(b{<>cm~!obbtEo9ahY&9 zaB1Hk0yf0rxiaC;E1<}xkcl8nwxqBoycM_z`54#=i|5LOyM_j&-5~r-5@SL0E6juq zlQQAavw^!8BZf-h5ziYdE)xzs6v(|2gvKO=a$P1|0#&bspc4o^a!In8umse8OddTH zgt5tzBoj&&NnuDcr{fe9spQzDa`|f!)3wQiP>@Rg`s0p-{3YG4Fn_&)9It!~~CEnqOi5lK!yEU$y68A0u#G2d@US@-xM`{FV34#Qb%xktZbG z1I!0Pw#{Egw#{E>aZC_NdOTi}9NXouT2OnOVmdAWwuHC@#pSOkaOrh^2kb|S=gMEj zv8GRioCQH4(gGp2lIwyVp9m=qth~i@<*y(6MGUC{2rWrsENFg(`Rk{omUbBOt+?A4 zq`|a8&l@W)e>KDwT5r=knKfrfcRcT?F&ft_m?fNduvD5fVRCX6?6vMt`OwK~c(K#GiaoWiat;P+8Y64hAJo+3X zM21$Rgle#Z5S)@Z=SRi?T8eJqx|V{ojN)@MBCd!nn)EqGRR4$1WeI1KKMP>tAUn~U z?n)@y?A)ucXb-LopRItnwRk+83Xi#>{Z|gKJup9FG0m^AXv;vs7417;P{P!OyFj~y z$4jF)SG4!T8)4H?0a<_~-59UtA=?&hBik13msjF`M6!G1HNdf5(SG_vPG%r-#sQl^ zT!P|?_EdEHWElDZuq77HRkUY(8wmLhgdLU?HXSR`3l$-!fGLDV9LZI*=RO&bii1#| zB*uc~S6H+c*I-oGPV}-pfxFj(bStgU^TvuR+N);-a{GcXn50myE82f}7*Nvg%OFf8 zDM6Ag+D}yoV*V2lR*@7+lAZ->Rr%}DN|l+ZV=KQlx9gmSX$-K}pRr9zX2MO}6U|8q-N_t;YE*ny z4`k>4l_i7vNG8}a``|D-9WSFRTnExD*gEq}V5?7}t)8`l@W}px%wL~o&5HVPf+L~Q zbmJR-sLZx+z-J^aNhG=cr`({B`TLoG^kX8)Y^?}RE?1dqa6t0A*^t0Fo(~{lmQw~Y zr{O#)3GU^NgzC4*#2~mk^C2NJ%EU03>k{=Z!6nNa@81Nj%Xc~(9C<-mR6n8$-0k-~ z;i;`K9RQxVMKM}r#dqLLj`&{x`{lmya7%yvd0ckZU7W8jf@DJdZ&)oy zvC1e0rC4M{GZDN8qJGCbW+i$J*t<~hG79I-Bk`~fX~cNwXo=FRSy2#yxL{}EvT{fL`bf@zLhF{&(H z*7qw-HCARPS*b+L|JyJ!+J7yY^Z1NUJqBwlQh-&?M(Z6`UiubRLh%(iga(v7LowG3 zubr?I@o{~6Hv9Fvu)w6HKjo~ivU&!YgXKUnM+umelTx82J*7JouLjk0ftLQN6WDBz z?m!D;t+yOKp=+07+I%qtiHQ93(hjqZw=X!Z$0a$!WQ*)3n8JYb6WaOeE$ciBtvElC z&hsCp4iu78di(LyE24CMiMJA`P>Dg1q;R)|NSXZDHs>u8)WFPV8ma=smpNgyS2Vzja|!9 z_(ykya!JMa7|H@@?>OmltEKRdo>h^QH(E;#SKw<;t-s7u&w}z_HQZAh5RUs%nXC9a z%;01EmVZVigU_{s6EgTJX7Dk74{Ru52LIMl!VDfCofjRGetr@BuupK&eMpP{t>bS~ z1gmeV`t6`$W=mKFwxq0cHbS5Hp5Bvcdz;_=316!1yFvM{KuNVNz2EHCuVOl-rGL#e zQ8mE`O{k2YhDkYTPfcYkpYifg4IvE*uf*N;2*G0O7yi+UY9WHNAI9Mx$h zuY^fC(fydxA)oQrk(c1tS>K{-g!0(UO64DYvNolvhs3Y*Fa~|aN@WCz)MqGFmcp1A zkk5E2cmz@><3uSMEU{AgN55UqWwCAkn{i*V*l|$)D>WpG$tWu00W1b7lBxY-^-S)_ zdEi31LsDMSP4RoJj@>GN@4_8W{VmKoRjO2# zy&6>{;QhZN9V{$W8S5$(9W?LAzIS4^EUVx()`J|h$~1&j%rah<7yqjGv4vvm$#pn; z9Af^lwx~)GTT&5<3Q1nZt*3fnqNJZ+GV05uOsxll$emVUpDY#0PTM14F4`@kMj0zX{V5XTx9-K{P(Qy1)GVyBmRf&M zB_2+_h&EncB&qB^4@t?YiuUlB^@l412j~x3%wo!be8!{Gpys;EAM^~41{sb`7rh|A z{kKRaZ~lX<@0D#fR}rYr>7Y z{OfxwRbzxwW36+p>uoyW#<>v~te^(k27l2LbF4hB|Ixp)2Fe}_&1Hdw{-C#U-?fFM zj^|)O%ZMQ!iJ(B< zzvZhJU|QeuLQ2ND1K30Ou=cw@Xp-%5aH_nHPAxlUh^iJXBsKjzTbmD)5aM5no{Vh^ zARt5gO&&EK~)@|IpJ`nE4E z?c*Tl3O_4E@tV}0$uE_$xx5K~=jY7y?o{iVBdUydUpA3E_=l)CvhUxHa2a0c2>)q$ zQ3|?-J4}%BJm@JJ7wi{=pMNAs(mZgMTg9hh5mm95{i%=m(gUdpt`vFcfyg*NV_{je zAl0@1Ruy!{AYvfpv46ooQd!BzFYBTubE zY;@|6Z5U`xXjjEM_rfKuRsBydHV&>%gAtE@r5z5Q5oa6KWrM6 z2ds>+J>i#%H~$g4i`V-bKExylD*18bEytoA;k|Z}l$%}?FV~z4Z5d?GvtAa*O*gJQ z+mtc>IjAStrtGk;CATRmKCuW+$XM_5n$0Zm{+*Xk~C{;P}=Psr)~t1{Nt^QDe!UD5~`2?0{a3)^t&Z#G5r6b2T| z^7AZ5N)oGRDWY8Kq~eRw>Y!`5>kAxOgE7e#>uLVc?FTWd$I(GSDXuvmlNucVTZ#;G zM2#JuY)Rf=J_s_y$SY9H?)LZH z2tC&mo_feqm?eXJ8GBE9JO5m3TC|zgZKinG+u^^k#Z(z@H9%!KUHko&v33O3a-{^V zNJW@zSEQ(nEtqdDF-`l|VLcWJ1qTKx;n*tscW5{>p70B2;l4w{-I2@OQnjFsoQ1XH z^vIA|o?s7wn9Czt5OO{|e3cF20f5mio$5-5C#%`f+& zd-F&To2(fmN9y{_nt!d+C(Oqsxacq@+H@c#T&F?4RN+H6GO}G3}7DB3w9haMAEr!kb z#L^%Amq%E_#Uo-jT-+wLOU6Irj7M6n#ciZu)`9@>h$E_;Q%y{4zBU!Te&WoV($=$a z*Gu>^vH8>>)E6!NTQK_J@N*c*QeW_oJ~x_m)qB`>4T?YBS1oFK>Mcv*%%EQO6e-(K z20%%HhL~$?S6d2a81-49s5T;{1x|J3#Shl_WC5QI5DQAM8z)C=72p@#f2PIgW2c7azT; z-4~gu@DmUs@yuR|^rpg*a>l~Tjf=PcX8I?!2L~?FSK^|4&_%gf)OpsZBu)S1SM-nR zV%wi0vM!?=goumm(uj-UC_Ce7OvW;d^-7t#<~{2oYYA~tKIo#9N&X9~8q;WGEbNO# ze{eC5X#{q3wpth2{}C5m_eaI+>_oSwpZ^=Wu@si?@gRt-5}bqDRS@Es%I@`rq}LA5 zSJi3b-<7AzDAyLXEyB`&j_EKBu%g+BhzTx5&%% za4O=ID^}7Pt3PQxmM*b=b3~O<7>ZtYoWIy)dO@4WVNqb!Bi=G~C?>Z!O30IuzXHj}|^FeGq|e_SNER0(?` zi3yp3o=l!kwSQLyBV+)C{O@spc3mve&sgh!fKKQ;be2)hu0iNp*yk`g=9fHq#G#9} zMufTBI>aQGXunWTBWLOg)OncY*+o}|;`w(k0&^x;Mmfu~dWo6ksSIA|5$R~~r7|iF zFzM6ec2kV|P~g9M8e&z(Bo{2k^UzyijNOP``Xsy~u0d16KN65!*7#RtUs(y6bglmz z=5D^Hvy3q||DkKrH;|VMeliB3A)`b2FilJ2^kHPfA(nb^NXTIwz`rWz?XS$d*vY>< zl>;jhW63=Q6+gEM_l8dQuY%T&s-8PUG_s`xTRIbbsf+^q%uui$R8q{l(YF(X4isU7)JIjLnZ>741M z4;t#LrXc02M`iP5d`SawZ}A3nwh{UFSYeW=<3EFY*}YmqQM%S2)D>&oD25r>B%qCj zFcl@;v(GFP8z(UbyWZMh>n{oD)aeP`fb5TU5whT_o2TNTFM`> zdWQAF`&cl@*1RLEO1)sJ6I4JKZ1NXlr%QB05&yTork0%W|Jud)IW%er&;2cNo5^n6 zSSSvnoN$-0maW3^Puq){VG?E){{ZC&OW|%~EnALFkb4&K=g&3ENQ#X9zk|%8D?NlD zw#F9mU#l9C*lPR##wry{Dx(^DFVW>i{9RX=U_bLetV%>1t4yPUBcgttr;UeK{|~F8 z$&%hod=1V=L5$^V?5pTujDKKLvWv_Yii*@k$B-iaJH>qoQ`S@ecXWt!vp7aFPyZtR zUwuq;bon1vB_2gm0DQ*%5`VZH+c*YT5a)eP7A_ zxcN6xOn7oc{HA$I<=Nq%n6K0$r?B4_G>Hdp&DAuKmx^zm3ANrA{@R5R;l;;XnD>pI z300bR$Y&ejii=q^rry^xnnSnvMoQ`kNPj{1&BSiI$tjH<;;R)TUR>_a)bZb93|&s^ z)VcEE>D2A`n4!PC1%t~=Q?p(w1wVOLr%eaHP~CA@Kjo^_6?tWh7K)$(ph8#Wg4 zF|aYJvCgr(?o?_WtmxzLm_Ch{Dpc}q*zQn=)kzAm@w!_d<#mlc0R18T{}=hB8vb~F ze}ComjIF-RG=U|aPJ-hr_CwrDe&4oAPBCsk_&jaPOYWnL4}sUbDSn<5Y%i&(R0qpZ zaUQPj&GIMysucNyEh0Bv8V|&0ltow;`G>KxF|q|mACbe4L>Dr?$IU^@{q-fWXA97Z z3vnb)*7>b4<|5~?ja*wz#8-w+P}==LI>4^xNt@3t9?|<5w~jhQ%gj z!%6(Vf>ep&c;6#HM#f$*WFqu>E5u0Jth@EH=$9Iti8t{z^1;0JN(aMUQIb81&LS0&+`Rr8APfC zPnJ$-lEeqGMv1c+$0RgPk~TtX_wg6Sn}AsmHTohL?r0OK68tV+Ler#Qs2zXu3L=C2 zNzJX~7C~eK6<9Qb$T$Y1KL?Z0AW5!c;xX(8PnhW6RTd?B12U%^4aqarR6Nf^Oql7P zT3K5(E`xfNf-H${3wVPlb1BN1R`WsFs#`mlvk)(KjJ>K<-MYoO^{{CY9!u1%r}3o( z;6{l&X}sz3G;A(yoFLm1J8sr@hAL9|XvE&{alcnS7t#7B{{J#!sQmvb;y(HRb;LUP z|4qbx`TuRiIs9K?3?4p7RX*e0T}3GxSicY@e;@6G1S;(<3{Z?h)dHU^f>Hc$Gy{%; z|H}G*m-T-s{@49_x`Lm-at3=I`^J{8qi6fy)1r)IYmE91oB=UCzd;KLd+w^2YWU_) zU=1$5vxja88h(QDM4_R@+w9PO-ta~d@JAGH@SYX_x<2Bgi$D9N6<_ud;^T@>N87}P zCYB%2C{(xRQDn>PhO}faaiMxOe?b;w={kk#*E|DeEI<2Ns6owY#C%n;P{W#E5YyKR zHLm$6dgNGoPN60>Hvp&Y%R$BqO)UIAjphsiJ+( z@us($7tfUp{aRJB*I%!_mNfc8d@xlWr@7*?H@=X!+I2dcSN6uIc>SFbqmZ!x!BR(B z?|o18`n_Y6+6sMR2YAnuFPYQ)ie7)pXr<^E#&PgIwE21W#%Fr{U!o}!BR@mnx-Dew zjj!$XPXS+y#4N%0U-6SfEF-e>yuR0euB%n9S`cVLA(qP^vi8RNy;T+R0S4`o@2FNDCO6msqAz45tTfBFH-(ryU6R=|?Hs@lfuU(wgH zbPfVv7O*653wQAPkGzi22XpZ^1iWwweR+Ibg`!i)qws8nKa*9Gy#-j@r|a@O?js{L z*L^NFN3q+%SQi?62IgJ&DO4N05uo2~^9*_H=(ta-eD3o}h7w6*9mJoY%F8t8xKBfo zw%upsDJ4S2JCHo(NIUMcH&UqsEbaH;{Y<`O&T*gTvhcDe$VS969DT3Yn_s|v_TYIfYrwc00y8MYav4Of`|wGw>pqo6S?O+t&~B$|PqM1v8U+3>V99o$$ z@4IFM|CgBt5LQ*Md9fgZfm`Bgci@(l0NQBSoq(Tb)bEh92X4PbVlVt$keAskW3uqA zfm@+pQPo?)+immn58Px8z#h0gi>^uP~_dZEpRN|&P@rC;Zo+fyRXB+|fef;D!MJ~$d4XyFlbod>|TMe!8SG(d`-yVNmMvlz0NXs676$QZ_Tb)4i_SotJ;IvOFvak~i zS3zOzvDI}bxRoMfD?Zgy*{AN~DGL}|jmJ`re!(4ME4c!0=a?7|iz8v~F8n3p$g-tGv{=U4W{A53#b|C;8nNz1v*DRwoZwWwh-uS3%Q+R z#g8l_qrsbE^9yv2CN?BUxt2m;9fepfgUIb1^B&&e^;a(H(doVgp_5c$&1w~=bNsfS z-kV}vhQMzWa_u^u;}SfdmJ&qaA|~ON*OJ{iuEJReQWrHK(1=2LEZLpoUCq3Tm(REZ z0{v_uC7mOkLORDj2Y6%AR`%J=mis)nE|2@LQNl~E_RxGtINaxH7~4gIUOc9B-6w7` zc!xnhW%G=}6mZ<jeW>~<{3P>Q#c`kR?R+}% z@(`#&A=j?sK8ba3QXG?O2Z1{ZShC$`++oYo1PI(;z>@7gz5l>|Oj=qEf%UeKcAtD3 zkCn+Psd}2HtD>t7;n{?}MiRopw{Z@-pHaWrpX>`{`J|)&&!!On1>}EhmeEr9R#$s% zG5U(w_4xh;exjPctL0&~hTYXxn&A^UBOAi)snC;bBB!gB?Jag!JH*xQgAYjJEhdN> zvk*MuXcIYItvu_pyV|Y~hUw&XL*z{=uxJL+e{{8n9zuz}hRkn{2FoUDPFK6>xiGP4 z6h<}1;U^{0?Y+E3Z|+5XRh@&kkyzPHH@TI)%0xHZ94f7;R_sQe%Dy-f*P%biBW;#Z zO88b~_v0{W26*#re*Vhl6FjG~hkx%8IpaA9ze49vNxSzPQHf!=z8Kfsy9u?j0pzFgli>=lfKFb{QciqmrH|v9`9rub_-; zNG*6$v}?gAa8h*Qu2eDj`Ukj_>A1F8_&F(yK~hucjd?Pn-&B(^0Ux+3vkZz_^}+ra zLc>RjKH>VvWUf38hl#QHd6r9QtsAoMOJF?+@*0HB0*hu4{fCciEDH7{$jo*$ST<2}eB_T$lvp%2Kx_rpTF>iY;5%Yhv^?#=I|8e}U``cw$wAUU-bkMs2haz>^4Cst~`=%*1 zi&Q@0*1Hbuv2WA1`PUv_-4o2S8tF^Ng7ka0V}@sv$ehy5iMtTGH4H@mHxbN2Kk+%UdFC z4_?O2QzB%11{_hqaZZ&^LTf;@wdEbmpAFOSJ~prmR%(GHiZ;Pq5-$sZ zObWSn9rxMwsAZ`Y1iBWmWV_Gt%3f`0EClW;V99o$J9lAQ7xT0n0&8p`?LPV5&{8II zHQTs8!lP2mP|x7fZFm;-5FT2oImWF$IL4uG{bh)ms?DrU9u?~EkHkF0_#P&IrrC)% zQ8877HOTM1!>7WaAB~@Ij6%L5DA;x;}^%{0INoQkqJ^}0~$=msau4sMfB;*|Ss;z6H?lB@Nx5FI~ z{lEjWrlCkP@$=mJ8#%D2DDNGD_)3sB*(@XQ5Bb)Js2KKH8+*Zf!{+B75y_q>dqgxc zB~0XuZy0>>#MhvP(>Yf4Q;TJo}q=98Z z5bP0AR}|PD5%mI2`|w3%3L~QWD6Bmq@?w9P+^JG2;_NJy%03GJml4s7XY+Jvas}KG z(SiP`zNs)b9Y0SCG<{bC=5avnS~objI4pcMq9{r zpZ&8fBQJyZmd!8VK1F}P##ol?a|m3f5X)r{x$g6}6wV$IeY(`A(=CFkFM*$AUaL6n zvkb!tDM4)rG^LPh*Kwb{SFIBChQQDQmTdQFj3Y_K(o6^}C}7EUpCIajm(SP&fgQGx zb{{%L9`~WGst0iD54+l>yWOsK0uN8U1l=E~KV88Y?5=iwA+Y#;?jU}`GUf^2>S_n# zeH)_`c$I8^{;pQ`P}^N?9W207&gg`o4;2=}mO;D$~uluJLdiMBl(HM`sw)Pd$ zGWIcJ_Jg;Mhp;W4RBnCOui4vO?I;|;nzyT6RxN*5TjZ1cUG0hc@^`fl;$>&*+gs_KFDe-zu%ju zt&}U^cD3#QL0kD1%w5LMGaUDl+g2`n2R!ux=0Ere&zML7r>*RfudAJiUYn9ebp&;& za*s&cZDpH$UF~uVwxR%Fa(aA;e6)2e?E&x(lP{Tb+@~?-j#p6$#s%=cxA_I!ry}3Ibgz#Bv!#uKP@r!r5KzR=iOr>D~vS zxm021wTk0DpPjQx@Hhl^QpmOIbhXEhStU3Ef%hqt$CB+nXZl*j_yGdf3s|z|ny z&gp8ie#SQ_sC^SbII^#`iJY!h-g>gT+8foa^#Mg*_3 z;h4+3g3{HJn#%Iz(K942y$TH~GXqtTHXZLEv#U*hRd=zM;`INgtp5o`b-WJ#*IfXj z)75UlXLI;Ydiz(9jYUk$?rPJY#?lX|n^g!ugc!YKx$-c2|2ZEVz{- zT`fzcve)3Tv9y)lUdz)~$`x?C+U<|yj%W{aUGek0hCL8&TiFSpQZq(^KFQ`8$0*>m zl`0o?o6~U`YzGTjEpV%W_ z)r;r0rSl@9VuHXQV^8Iu$PS z0T+?e)yi>G_5$+nWZSdaV&gojF+`0a2<~#UiJY!hPSdr!+U&Mga;qTn6ct!BgXllH z+NIp^a||*cIT|dRs5xEju=jmp(YOZI9~5LsbbBw~TQJw4PO3iosUFvS_oiFfi}3Qk zQ69CQfuCnfc%I5W@-&jp2D!b>GM*E@RoR`qxORiV8*B6PS2mB}a>g}FGJGOutbp)F zDjX!6$f<0e+3k#LK5(`B_^*E!rglQq_yECYjy91~*`JAmwZ~;_rbj2|Ls{eSlcE_! z|54dV_!5;-3o<#52FoUDPGxs}6Q9VYoqh=Jq##S868RN$EFpaT0$2}#ybwPb*YFDH z%0a3!ex6J}%3(h{8!!iJW}vpQIr*QRox~A}e0DY% z>=Cwz^X%-=m@s*EHVd4&C;UA1c!;{a zP*(UEh*to)rp+>Pgl~EIoDdRf1zuO1pWn-QT%_aWK0H^ZoG}f-Y$~)No5=BU9^vkI zd4{Xq$3JD1M=hiFO9&1*+C+|*_Ynol%QNs8T9UgAksDNC(F~&h@N$Fu3X@SgmGILV zVuWgrm%la&XEM`Ha|pGjAWNc~6dseQOxAqSG6v3Mn&=Iy*;Nl<7eG?xRrwz38ZB!f zTMSgufADaU8V7MGF)!F_wnn}+b0fAcG#IF&KP2GXb7(Z(s5P$I8l})9Im@KRw3g6d zpo&)Lt~G)ab*@Suv2vAfo2AjP4Kx_2ls$K1v+L@xzIYPHOf{#%V<;tG!H~m(acp@p ze6wP8*ahrZqsTB@WCca!g{h(`UGTcyVQ*N^)_SYQ8av&5J0y&ALy#^5Rdl<;cNU;A zVGk*7%=k?8jMr)F^B{0{p|)_+Pb~vJx-8M-B=ra#f!NkZ}wJUw;v! zRNGG1%}zMu<^lErS3=Ual_Xz z#ybe;-qiV+cyTxdJT(us}X+)+$g;0Q^4kK5=LP=S>v$8lfY@mYC*M0 zRkJ%PI@BZ?&nv52DK~3|NUcJA)6op2)I_AVM505H+mvdOC6R58wKyUzB{DIzZ6tJBMFc*?Qer6O zBqD8#3_?L?gucZ-kS6V-CgT2@6&jAMfKA%RHi5MVLc1HnK*y+#h|CS`q=7pki^0I+ zP}AQL=@s7_oYkQw?$R6U%15dSc!NjXy&ID%xTvL2c^`8;^=Li8JoOi>=MR z*7p9O3aMH;<2mwfdV(|%cLHPytOP%#_Wk`K(LhVoqJ(5g=hT1;Hp|w$&JK?zhNz5O zT+C*pHFI1+=1G?EoX*o6o2gbB*HE#|KGXD!wp}1p-H2i}@1+oH&0x%66jegM&)8lM zI_X;M3yMjV6p+m*>w{FPAtn8jQVd|?b(;7NuHUSqHc|Fn+k~LJ$60BoA{=Le)_txL_u&?GDC z)rycEAa}qKib_tI5tZe~UEXYjT;ngC6f|pUELaZ+>+b@rgr;D17lR2W^Bde&AFNlz z1FMtelvib({u9M%<`v!@j+$Fzq@nu%!oQDiiZWL5T!IaoEk99Vrns)M$aT3ri#})D7)yw(eFELNjR~S~$re&x?q} zNF*gxqAwDS3$l++4~;quPSGg3bEY!;A%|JJ$D%Z!NnzqoSp`*DuRH?kol-NkNp-4P z?n0II06K2+giGgSPv>IhPP&K(VzS;`Wbafg5O1n(hq_6kz_I%)sv@? zVj&}g{2fLN>yAHNKuJfM!M0{trEzdh@-nKohr>K)BysdH;$MWbd~~)sQjB@z7pT&V z1Lz%_rRa8Q69ss)tBkixLCvGd2OYcOj#AYb>(U?)Zb&h{{5Qj)LJ)}10=^IaCFOcG zkaCn3DC-EwJ*boLu&rsWZ(tr(E){|HsU;hiiJIQkrKeQJ=%U%C68y)EPPAFlVk*tv z5KlHMVOhQ;RmyKU(0;1~|55vSN1HK={boGb)IQ~CYxa%W(B58x|46v%XtO*jMcCWo z`H$LBr|tUC?EOPg(vv0lkJ?qpCXhg-2>ac5{-btVM_Z>|C4{v9EWv*y+~sJyb(tbE z*W>w*CU`uQb_G`^WREk?Ny^PeYd9$eStJNRuq z(U0_m?K#B0=u3@2Unc2{f?mM<9bwR%o2u00-3Wr_5rmtKR18tlvm!o#;{mZDWU_C2yV{$Hv0!a~6ac6K~)rQ&QmV*gwKT)jwT%Ez^Yu^O>;h}-o5t{K~$xYu`(sTJ3ec-wox zwPVHpl!3rmabrmTxdm{Y*n5a`n?tv5+-%|j#4USb+*_k)X>m z4wcj*QRlxG>ZC=I&huQMFNt;(FpfsGr zf_6H$fyT{W2EC!iFHyclf?V(}ly9l)tt91JX`D^@)*6?I0KL1`Elu20(+4pRcNV?I zJiLec&mB_iAK-xL#lSsaMk5Sbp{BIQ&^TaTk?=2s7+OfEDfKdNg2mDAmFnNJx*0r= zS>L*m*qx&1b}DqD0wQ{DXNLA4SE^-0nSe!y6nwm8wnP#_`#U1iTp}r^TlOr~14kx0i-dm3mb zkxrp6(R8%zAd$|Yk7E$&B#|zmVQ7U zb6Oi9kvl>k(%K-2^b8HAwL2x!D-=#^qa@Nh^gFGMmPj9!6}bg+_Y~$(q#PBzWnjQo9Lq6O?*`;3f>dNAP%Yr9LJ23O@M*!RYZy-6Z&U1oB-Cpzkd#OcPuf zg+`y?)v9u2)dxL z`?1gZTk8nHlFdpbVcZqI0)1V1g7sT5ZYJoBTd4)XV_3)NMzHoL zrS2qnzZMn@2)_MNsdot;f(v{~@bVE<9YJ5Tl{X2V3Zm+;o)y0NTT~svS}!I61e2oh z!al(#k0~{bp!^B+tpsxiC^ehliK9xbAc)VxZUln>7pAVKzirA`rqjaMqQ z7Ql)mJTN5KjGL(`!Ghgz8-mhR&`1%?=&00Kf^vQF)o+3!F-n~yC|(KQ?;se13jdwp zjVH0RUK`-a{uosej73Sy5G;8B4^9YPgWw>7UvUeKC#X3HI}He8hv7Rz1cza81Hlz! z;~9eQu;jC!p!r=`T_$(}ciqPXrORRLmjzHXgoQtXQay1K5=6sAdl5Vkhp*xh>`2Co z9RyJr!fYfcaZIT%2)h3a*COcpCR_{cLwF*3uPB1rP2gGtSKH$m6F~xQ$od4$18^;Z z%4mDSa1(bS#;PB&0Jxvgp3fCfNkPX)&*s%u<2Bvu7O9$Xd z5le}eV!gs}vf;W%xA;FTAZdW7I3T*^HJ z+y7STcYib=LxPehcL#zU$i_^9>}zl>f&-o5 zS_DI{!?g&SV?4B0?$Oa7Qv^e zx>E$tBO4b8PR)dC5&Vh%>mPzoF^7t53NRuEu0_xRP4`%WnoncxpWx#)a4mwVA1k$% z;M+Tt+D?$PT&ed7h7W;jH3K-(1Fl8TH3hCk@G9!C3Bji|4b_358x}|V5!`jJQez0p zqU;+8K7yTR2<|9{R*T?i-1x@{W}s{PSXj8qmkHjk0oNk92W$Q&Dm1+I8+d+6&@T?I zMUakpz%5TE82u{Jr_7O~+fmVxP=PPh6f+FzDuL<7R1lJ4b0*9nf| zdR-!zk9#@21;FPR%+)67S^=#VLFZO*ErLv3l)(gzpTn0(2y)?Lvj`qQ*>@A1gy$Y4 zm|hjGMX(U&FA$8c2-hOGj*IdS!DFb6$XtNC;A6=IZBW391k=zv+)uC_&h`jFS(KEs zvG65>;aUV`s^b`70=AdO2-e(*bq<0Dam!R|31A@eO$e3*&}tEE@?gwH&=;eWF$Cp5 zz^U>CGjMSi5Oi1!*CLpM%XFL|4nv5K2@V~DYZ1KRgKH6-{0GBFBoiJ&3mH%F9R^fs z1osZd(2*bt{mxv1niv(VBAC`1u0;^{tx_)#e3y%X8NvM+*L^?`!eH_S!Kb_6T2Kfd zwi2#I5c@h@i{PzoN)0Di`;}5t2sT&1Rt^Ejlv+vfsu!&m!QA$6ErNY$(D?R!_ytt> zuLK{$>%46M24%vv2$JrBYY~h^^PWjC3j?Y~1lKFVwFoBu2-hNL(;Kcuuw)Wki=f8_ z49o~JObpBjs#d}iRopG%kCumP5lnaju0?Qt1X?YE#b_!g5Y$A2HjCg=Ev1$aJh~Bs z3W5jsz_kcw{sGq_C^iAEMes4&v405Kj8rNT_jCAWI7u?W&e}LOgP_Zkcqx@&?Dv?- z5WF7`*CJTE9u#|NsY)9$M#fVWuVm} zIQ+CyzY)BThRD|mVEnUKIwCj}L%1qIdyF$16I@1H*Ph@~s#1Lk`W#p4If52& zfCB_o{>F5P;EO{_eMZnT%uqiP{P>hoe-YHc^(xaDpx7#Oz68~9EhZA&b3a;0f)zK> z`4XJ^8g5LmwW(6O2!=0%8xt%&qSRG_7jRKj7l1PlDHTm{p)76?g3Z&>+7Of&g4TxM z-Bh>)fq50J4MALCxCBA%BAE0MtbzNTB-n)(>vMudxPm_s+zYM032xys1-k+ z*oWryZh{6LoGnAJpt@4a2;#OX^*BNM*HB{wf8gRCAgGy$8YAe0vMb#4;R&!DLr@j> zS1E!VrAO_8J zVQt6#5)d3TiNjAcQtC87(0oBySrdsDp5Z*7l%Pop=KP=pWo0$|S^^3rVoinh)_oLP zBPyf>O;Q3v3CaR2c007I=M9Zhs@3-xR30d)RJ;0xx8n><0 zUSiO?A42Uqge`zp!iN`t%X*{ULnLUPLAXX%ZY~4KRxiEZD`OTsuw4iJu)_EOJOuCE_E5HBW1B>h(pb2 zyad#$-oo5Ou!Lluo}mMI+$F(5WLSMFN5Z%3=q=0&e}=Nmjb7W&=u{4NCVOOw>Mhs& zcjz(Ob@oQFwl9**s+K@yR5}BdRbI*G-?oZ=ikIR&S zNdYd6t1PUqsdjfujXy^!Yuq5h^^!-y+%MN|msInI`2=(dS-Wb2zegU%UH=z;Mm0Ke zq%K(DpR5#A#xrpsKdCDugJgLuDGz}3ldyBILSVht<4OPS<7$=hEw4g%Z-@u^^Ys5b z2l;26VS3|I>CE>z$z>Hu1NEpp%2{VqrI=PJmbQV#6Y>aW|G)7+XEjZeXPf+-K%Q#K z3efcZ@&xIZ{H(OKxW}X02cnB#!5!V>C3HMN*;1oIWuvgl6&WQvi&X4ztn#!k?4|nW z#-cHptW+%A@$56a2ANO|n%rrU8kB;i0nk-g8Bjm4%e z*ijN&WLCUhnjIP4hjCP zn~WMR`J)mb-_qpP4ms=MN3d~TYz%Oy8Hw9L{a(BJ6qo!MhEW|ZY8%UKvO$EBvo12a zQL(PR*I%K8_@ZtMB+sYEK;U<&jpV7~0M&HcBKL8|JosmaOIqL#M}P>0c$kIw5)D>|7d>*LPO>Fb zMiR^RgRYcE9P&!z*IuAsv)Y9ebden*y^+sQK+2UByBwsYQpJZ{YM-N#s>5=jer{8> z!h~P_TORew-|X825oe@ZyZPh4geMy)p*V{o0OpIc4ufa4A`lWP6KM24Tm#*CGi z@O9oG_1+y+Lv|;HfK=9^jTkl7mW@l}9aaTlEg`E$5k}^crLXL2+IlR8+Up%^zAX?g}kLXdBWc+Q^Mm$2AhDtN=z_Z8}AfQj9DHD4%SNx$=FuYSUVH)yQK29%Zw-qo-&y zUoKud@?_Ib)*YlS6zX7789*b48Vzyj+f0sS0y7+5R#yzq+e{PcN{1Sh4^RZmr{I`D zlV2|h2qkFp%K`zD4PMafx}2Dl@NfRWgP4by)L99in2jaZlL&(5*M!k?B;yiJK^QO@ zPW~RjYNG`D%C03nQS4t=8zmVlrDHjj;3M5qwYzSCaJOo5wR3`)|8%RZ@gryryVVmM zG~b;I=i?^$pm{&~ee({1%LoSx{B9oLSipeEZv_O+XHWqFvkkhHfQ7e#l4-uSgIQ)6 zu<*l>nf$)=Kix2;GG7pbN%JXj4Cw~U4T1{`COv3w77B;mxDOUE>?WA>pjkyI%xJ*e zEx4p$O-cB;qJGirQ>V=f* zo@~_)&y+WLQhvbXM*@N-kD52Rt2-zJlZW;Pgc>xLyaFC~uDu89K4atNc+htPmB- z#49fTXo;kRF5tWfe~d&Lhhp$zg}+EP&Gt{E0e@WB!H;npJp;RY@bk#Kx0+Qn?3KxQ zJ>?k4r)?JA^~3#^IM;xk_`vK3!2b@sUkmUjPeu+B0$<*NH(v_hmpj8?ZXL?2F}~ogA}01}~h zeGbNDhxt*!qts(YL`bQb*sd?{$Q!sWLHu;NMSZPteX>U#$5AFmahs!G=usx$7l)G| zGdw

LK)Drq<64`MpuM)O38tuauD9>N`dH5=m9>L1oflZ{<&P7C`t*KTh=X3ook5Lqo#qkpr75~!~ zSgT%W%O#I2h!{1%s_U>jcfMBb7TsXB%GP7bNu0q%>Agq+MM>Zi7#B*(xwou9eZh{BY0N@KMCU)mhI z9pk};L6f1$dI`$GjwX+*446Er6Ri_MlZQ+OL=24sm?qz+!yYVA;gN@CH6awnOfq1$ zldzYBWWs4+1g(P@eCSt*4-oO8zwwIqLKrYf#vm3rXilNXgAfUtgRcWF66rl6O&-SE zBySP&Ex>>|=?{i8J-pS(3`iIhiuoP{GtFTTse0_9p&I+^_y;MR>niTxN!TZ7C%XD=VGv6W&_r^b96hehaq4WV{!mP8D zeIFQU4)aCVA)lUsXBc1@4G`oy5^{doT4Oq1jN7mq`rU1g?Q=ZVENC(`S&2b&Hm+LG zoa$xB)6Ptu;TAA?d>tA@geFg3L$e}^ymICyArN94EEEIguM*b45=X#nBB7@9)G_!K z!k{@4&j$i#wQzbv8p41@Ar6{-!8LD)Nj|JH!we=mU8KninmjkkOcwInfJg|>MgnGB zEDe$wkT56|vpEDa&FT;d%E>Y&&&vszJSr$Cp~+Kj0@hf914EPN9^l549-U{d1k5=S z9+B|0gqqG1UIOM}ghBJ4qQq|%V=i7o7_cbBLGx#D%~LQOG!G^Kej;fUiKjGq*gQ<~ zFGB8x;%0jF0kod&O0pVMsAyfd zUi%a(C&U-VHT8E4bVWPO&CA5B20m(RWK?-JNjg&VeoPOJgYn);U7F^eV9x z-m>&}3w(J1YR`kW-{H&oJ@LEV!R^$uQto)KdL|V%&Vql*k;&82FGxi8dWX)`^eJ}N z#w`d1kQp~eDt--)$Mg3om4?s#Tq+A=Wx%geKt_hXePhPWvfBI>;CCt@Q+*^d)xYGk zWj%^@V~hmKHW;-lgnaaqQ$y&mE2u>C>gK&YMxdYcBXl_6e ztCq&swGIDZe~Qne;@{>}Vo0FTM*V33<193<(jK{nlvDzz<5TxNdmg168b~;Asf0mN zi!Z}G$mqi%c?eJC^c6y?yI{|xy{ccKKQ#QK{NEvxSiKvP9us&a6WM7CLLb^8$BJkWkY}37WattdUC+5@$+H$=IETU&z?K9OQV!gh>h(dkz8e_zE=duwmv1e0dvS zN5FvjVsqL&gb=S=k~~bvOSZE*NI>WGG{Z&+vEl)G(0p9*rxKo&FswEWG(@J%ZDQb{ z5Z*(1%$Ft2j#~%k&na&IZXMKgwqEgI@vR z1x+5aYw}cMbk;H`;X%zN4*|wN7Cg)xcY?t4qOndZqhy{0Zu0bMyom!|P>!E8d0=M1 z93z8{@ApE2hhqkWhdDL~So9PokEg^48Wc>*P^N%+zjWz5OAEsrP~ggJGx+rhtYS+e z!VhYg{8&RkcxX6UQ@UbXO7}%*ekaU6?Rb?)z%47`Ku~b~+f$I(EP`=grof>2EXZaV z5Rf@6f@caLAR#W+4ql-+gk}yz(9W_^=qPX+AlByD5DXM`@{rk1Or~vDSe+_z3%Ub7 zC=#S*S~HLLNq$TuVtN8@5eZT=t+8QulJ|?m%HDuSMS|2!Ynb&S$)AhF?|lI;iv+3g znEuSiQiP^~6HL&E4+IPXVlXN^uH>Q-*~MHBK^Qc<2&MHPYVw#9lgFxHA?7d%3{4(} zf;o}MQ5x6pSyaFvAt#EFn8A>n2tv>t!uk4ifvW%m<`xNa(D;5~T)P*$S?~m4ov~&N z3@yaUIsT@6X|zKlo`C4BTeqgaWc2N>RC$b-5Rx~LEuu%iBhOyrG ztOLeWEATpO?D#exV2u&5@%Xw?_zD%!^mRt-DtIRkaK?=L*BifJ-gOp{TVO1RP%37n zPMtZJfkgYGfhhr+mFD!Xj1+XMYq%#8e|03pSYqwhM&eLRpDg-nhrS``Q4yW~M(OJr z((QYejEZ;>!yPw1Or`Vupw}Sz{u?=>nd0cb18Si;NU{l9K+lq4s=~JqVgJi*awaDE zzJn?F{s1b{cLX3CHsU@{@Tim*s__^uDo1ZYLggSj$}*sf!2;9(HD5w#IN>Kz74F2u zeLsyUb(e&cp3dZEmQjiiqYC%yH$}w^@MY45XGsslr>dBNzVbTWL8ae-o2>_Pyk!WA z@@K5wZYNs=&LLUc`7z$Q1U1FVVjD;HLtFL_tm;rU(~L##@Bj=;KovRzs@v)%zOYBh z$w{9=xm3S?6IIlpXkzN8pF>);AaUV9!Fq27s#HgzzjRvBh0$^k1T|>Mo_6x}tSvi6 zu2GMOYmbDfu)b#QI*E5ceT+dS%s3vg;#rcLJn#+dNFQhhd2$l+kz98g;)BfM)sci} z$xxL(9o^TvuzH&NSn-$Tr1ia>*0b6lB&~>UMx`et-d~k|8@Hh+3Wj44h)Zw~QH(w` z9O)UCF=9|*|eIjOYEs~RcRmJExGpw%V)QQ_lpJ)jOf}?6KOQq>32) zWt=M7swkZte%-QYt5Qk)h?-{!nwa!S1Mu}C$nLUiR𗍹*Xx12hv&=5oQx8$HJ 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̘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%0AVZx;VUz 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

?mv5}{(5*W`CIT5T=yG8KMt<_=b?Tw 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 00000000..444e4093 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,508 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} +#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..df37a0ba458edea0f27a40f4181672bcb68fb975 GIT binary patch literal 20880 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 ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..721698c5 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,498 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..aaa835926005b38fe76e6a9c5f496cc4477ea6ef GIT binary patch literal 20888 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 Dtgk7t literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache new file mode 100644 index 00000000..e6cc50cc --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache @@ -0,0 +1,94 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS/src/dbtest/src/case_cntl.cc +case_cntl.h +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h +common.h +/data1/farrisli/3TS/src/dbtest/src/common.h + +/data1/farrisli/3TS/src/dbtest/src/common.cc +common.h +/data1/farrisli/3TS/src/dbtest/src/common.h + +/data1/farrisli/3TS/src/dbtest/src/common.h +iostream +- +fstream +- +iomanip +- +algorithm +- +cstdlib +- +cassert +- +unistd.h +- +sys/types.h +- +sys/stat.h +- +string +- +vector +- +unordered_map +- +iterator +- + +/data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc +sql_cntl.h +/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h +sql.h +- +sqlext.h +- +sqltypes.h +- +case_cntl.h +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/sqltest.cc +gflags/gflags.h +/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h +sqltest.h +/data1/farrisli/3TS/src/dbtest/src/sqltest.h + +/data1/farrisli/3TS/src/dbtest/src/sqltest.h +sql_cntl.h +/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h + +/usr/local/include/gflags/gflags.h +string +- +vector +- +gflags/gflags_declare.h +/usr/local/include/gflags/gflags/gflags_declare.h +gflags_gflags.h +/usr/local/include/gflags/gflags_gflags.h + +/usr/local/include/gflags/gflags_declare.h +string +- +stdint.h +- +sys/types.h +- +inttypes.h +- + +/usr/local/include/gflags/gflags_gflags.h + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make new file mode 100644 index 00000000..0d8fd949 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make @@ -0,0 +1,195 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest + +# Include any dependencies generated for this target. +include CMakeFiles/3ts_dbtest.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/3ts_dbtest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/3ts_dbtest.dir/flags.make + +CMakeFiles/3ts_dbtest.dir/src/common.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make +CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/common.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/common.cc.o -c /data1/farrisli/3TS/src/dbtest/src/common.cc + +CMakeFiles/3ts_dbtest.dir/src/common.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/common.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/common.cc > CMakeFiles/3ts_dbtest.dir/src/common.cc.i + +CMakeFiles/3ts_dbtest.dir/src/common.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/common.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/common.cc -o CMakeFiles/3ts_dbtest.dir/src/common.cc.s + +CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires: + +.PHONY : CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires + +CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides.build +.PHONY : CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides + +CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/common.cc.o + + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc > CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires: + +.PHONY : CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides.build +.PHONY : CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o + + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc > CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc -o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires: + +.PHONY : CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides.build +.PHONY : CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o + + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o -c /data1/farrisli/3TS/src/dbtest/src/sqltest.cc + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/sqltest.cc > CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/sqltest.cc -o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires: + +.PHONY : CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides.build +.PHONY : CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o + + +# Object files for target 3ts_dbtest +3ts_dbtest_OBJECTS = \ +"CMakeFiles/3ts_dbtest.dir/src/common.cc.o" \ +"CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o" \ +"CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o" \ +"CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o" + +# External object files for target 3ts_dbtest +3ts_dbtest_EXTERNAL_OBJECTS = + +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/common.cc.o +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/build.make +3ts_dbtest: /usr/local/lib/libgflags.so.2.2.2 +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable 3ts_dbtest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_dbtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/3ts_dbtest.dir/build: 3ts_dbtest + +.PHONY : CMakeFiles/3ts_dbtest.dir/build + +CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires +CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires +CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires +CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires + +.PHONY : CMakeFiles/3ts_dbtest.dir/requires + +CMakeFiles/3ts_dbtest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/3ts_dbtest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/3ts_dbtest.dir/clean + +CMakeFiles/3ts_dbtest.dir/depend: + cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/3ts_dbtest.dir/depend + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal new file mode 100644 index 00000000..69bbbd6a --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal @@ -0,0 +1,24 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h +CMakeFiles/3ts_dbtest.dir/src/common.cc.o + /data1/farrisli/3TS/src/dbtest/src/common.cc + /data1/farrisli/3TS/src/dbtest/src/common.h +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h + /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc + /data1/farrisli/3TS/src/dbtest/src/sql_cntl.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h + /data1/farrisli/3TS/src/dbtest/src/sql_cntl.h + /data1/farrisli/3TS/src/dbtest/src/sqltest.cc + /data1/farrisli/3TS/src/dbtest/src/sqltest.h + /usr/local/include/gflags/gflags.h + /usr/local/include/gflags/gflags_declare.h + /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make new file mode 100644 index 00000000..6f51b0f2 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make @@ -0,0 +1,24 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.cc +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.h +CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/common.h + +CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.cc +CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.h + +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/case_cntl.h +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/common.h +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.cc +CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.h + +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/case_cntl.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/common.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sql_cntl.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.cc +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags_declare.h +CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags_gflags.h + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make new file mode 100644 index 00000000..a72c49ae --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make new file mode 100644 index 00000000..33e6bffb --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make @@ -0,0 +1,6 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 +CMAKE_PROGRESS_3 = 3 +CMAKE_PROGRESS_4 = 4 +CMAKE_PROGRESS_5 = 5 + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..ffb3d27ae7cdfde81fe7e9c973da88ee82320be0 GIT binary patch literal 56460 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℞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 DpD@dJ literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..918db01e46c4abeac6b82772030653acba029849 GIT binary patch literal 88584 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..a16c10f14e940a6b01c34c20ff9d028ef3273143 GIT binary patch literal 984144 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

7};WA8UJb*ulr%$sTNp-t%$0!^x|&L^>S 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..66a8feb8fdd1eafae2a5d9e89419348a85dfff43 GIT binary patch literal 369668 zcmeF437lM2mH(?`ksSnN3rmRXThg5!S(6k=cM{U1!@d-q>Pphm8{L(VAd9%M%Q$X- z_YKE!MFqD}5y2fnR76L{8F4{znGu~)a9sZ9d(S&n@4ejWdbg?);*k64_p0B0_x|3w z_ndp~x%oxY-X>iAe`YX8bgdA#EO9lw0ASQ@Sjo=_^~ay=4}xcugFr|0?EmVa~e^V_)J zT<$sYYku3w|2*>!Kf-G`4bT7hIk;RQzo-09cwDpeX>9I_XLPlWm&+e2sQ+=wFHc{0 z``SN#dFh;^!7N@dqeC*i(pMQM6$gd~Dg%9k16Rt^$Z)Z5xWCvhIXSkr@fbJo1yUP5X<&(Fgb;|Y98zr&9(X`bQ7MfmhP@C@hggP(=`u2DMVCr4gR zT{}KDbzrzOxVFDMwRG&UQ|C+_7!mfB`-XDe1gbiXOJ3kY<09we6|PxX(Ae&tpDaKB zulMq0lfQE0HNSY`;zxIv=i&vul@5{2zW)BP^7#13s;-_hdnUdGBp8BUSB6+ zk+YY|)y}+ro}gJ?hti|8ID+I>$nPO{%kvPdBu*~hDLDTy`p}iP|K{F1$onbsEO{>i zJ*`+A?Hd>?t}a))mJCfR6cF*!$nbc@c`Y93t;||iF2N27K3m>V>veRBgo}EXqC7CX zx~oLVD6Q!mD^|w(M4r1!h2B2775M3$Ta%9 zr#||RXY5se^?&az&%%@Di$lk>{&G}!%7q?LJVTDq5V@&H4AOCpi>dh>*DH9FU({7r zPx4G2SU7%pCXBC6Ge4`-ka6QdD6JATa?O{Os|`Yb^M}aqao2o(*$p52|y$zCpg-ELRp?L|Dsr%TJZV_UM1;QCgq}7q0)4@m2rdyj}O6-*{X9y$|UH!tsVs=_|hvsi0@5cw%ds*v?jk{8+D=opi0{)@}{M0p;UdH&}z+tA7a&v70R z#_T@6Y0uE)<0<~g65)(Sp24-U)NI{DUXvqeOS5$85Y1oDmNW zd5LQtCzn4=;(v3-J_rBX9rwQfQ!kr#J9*!d{$9}8lpS-9e3$g_YjPZyGkoK6%sZar za?`91)^G9!=UkpVddUBjfB3ma-_e#lncrNVEE96b6Mi>$p6EB-hq>jCk=u43{Fjrj z9_$;xx_iYR_LXPqlk(-xzzsI33M(6i#$X$rVzq^R=9X_d$Szd;!J(X`N^O?o&}8hlLB!VRh4?X^;;)mq~|tv3xj6 zb6uU08He=Z>gb*fIJx{$694?O&)eqFkK9$ko`1eP)0Wy;E@-2Mi`Wd;fSs^T_0qYg zWD@0WFPB;Ev(q!wYjx>ST7)R)nwNO0}cy zG@G{5^2M~&rdQUE4wj4M!SYafxYBhVB|d6RNmFV?hlHF_*)Up`;Jt-N6Tk~kd$`)J z`mwx69)BX2>B)H6#5Z1d5SC{v-%=+y6>_}4GL zX$byAWkhmvR<(=4+N;t`ZPb}lNHnkL*Xil)jG9;zmSy*`=tJn+2PA{w%Y#ngH7+Be zd7ibb_~=raqU_Js|KQ498Y_vTw*P6Xr@W~5sRs{+7m@8RyqGaMGB7Nam~o<~5g$6H zRbz}4mJ17v+KKe(XvIDN2XeVv<$?#V;$ai?yJzKrk1nOj5hl0n`YMf;#8Dm`^DqCr z-Thzx(7dO+@4TwUgXYRZt@%Y^n6R(GD0PZIncT>-0nc{aG|^67(4^-J|TIT zl`m;|hE}Chz?{p@mo%0SM|JMRHo?R=x%@#w*Uz5*)65@DdiW)jF*k-KeSD2oTdm^H+`0dwWy9+k;3@(HwjlsQ;2LqYFHHVSQ&y~2>eE;5K-gVR0 zZzWHUlxO-)8|Uf#PU$Z#O807YP@v0d>vq@$3$P28td#y*XCDYbVh)hf>}kDG!ji}Q zZVDaP3=fqSN08i_<6#m*?X*>&`@;dBJLkOzVk=J;WNhVF$I~ns)fpUEJzVZDu3Won zRayF{Bg?8Cywd*f*~O)9=qO7YKS_*~w?Uzq@-`w@7G5FuW~asVA^w5-kg*dlJ;RVv zb(!>`7b}UQWp1aV|9QcOR{hgr`VfwgZ%o*)BF1rT6mC-$xOuSxC!G>vV=s&>k2-dT zcg*Q5Neg`B*Z8P9%3tRhALBf0wy#FN=|0RYf3(~N4}75f+g-jj`sw+cordvK>or@p!J(${0_Tc6`_dCTZ?9FlY+Ya=m!sO5GWlA(j5|^nzvYH3JxK`F1ef#B}@2YOoe4QxoHP4k|x#tg++lgP^ zZI@k_thtRgEPBxChEADyRjw4*lm|zp#e=XcUpyefvRpVX@*)#~R=6JLfuYes*WKJL zy=@{rNK6FZC>{F>(a^o0BffFHORz?IK3@NZ@Do~;j)?d`ekSAQ@>2xnu2WvS&w1US zTu#1X3ncpgyCpj%H|zG@#|oq?YEkcf?<`fAjq-Miq=)=^0k=)ihZ&N$(4ure3ofjz zB;)4tFBF7n2mH4D=)xAb~tETmNF7_XEDyJ}O*+M!5YB~~ab zSWz0(;hX{KX(Zf%BcrCC1YoZ41q4~63SuuM<3 zhNWXbAO6Usga7T8Ck7I2k*XMVcDNooWlnkJNL3vQ$F&2mDrM5&)=?sag2C)WA!W*?sR;?X&3o_7aB@sw4`<=3BpKOP;-_rCbEkcxYVSO)gtRzk@zd-PQ zwD*aJ9`o1or}F1~f1hdcEO{C4ken6MFK!5@OFHW}<JrBbQCWaT$f!UjXU&GnMPh@i%=G=ea?UAFQ@LJxsImK@IzFz{+ORf zcK9Ee!|^^HhHv3#zv=k+J5uBqQ`#3Ff4-G|$G7nZ(}{3IFL*o3gJLMi*(^aY4c%`|F}@Beh*#N6bi-i(FI>|p;#){8rSmPNDakG z(v{1X1oqRfdG(B^-g@p5^zm8ptok?_J#@B7mn_6+Uq`_l*R+?l88WPq&{ormHFGCf z<;v%=Vx{suQ@Rd1<`kEX^cTnahF6!1_{%a7_o8!JaY1=i-`c^7zU+5z?N!g%z)-n3 zRwhPd3M<^~n3jyzkTANbmsni|)nseO%j2@*XLz+((yGdwCKGx#T7Bi1MY(KflS`#_ zjucd6<6KvO+gE4B$7(`oQ94`_rhYf7|LL(r4lEvuFNC)>>&p zkmoC0emgLShux;w;d32bry3ytWU8rVoPKj&Z(5~f!-Ne#)s2$+uk7G zgLiLs32dLf&f3QC(eoxpi`}xfG16E`oLv4?fxP04ui5{GMIU(g()s&;@HlxEy&apr zl3F&Ks?Zlv*Rm?Pt&>{f^C9L|hq}9D=CO2p%3W&g)C_<+ZAkAtiR&ee=;9mXvi5|E zbNKima)SOrZ=`ji>1->vgiVJbF8*mfOB{>OJJoSDU0w6bH1=3GA2bi-1I}fVD=(H0 z$8>23Z+tl953W@l<3sZ}x%@Fg$N6vjyuNeuZ3{f>#;p8_KemE~Uv4 zCb!IbVI!<0j_wuk=6CS<~1yKzG&ai}IDPtZlk9O-hd=N^aT9SR5ybk;~5(q}dmrkbm;Kd(K;O(r@;B zfjm21C(ZEU+TrT%IWn=eG%~uO%jIjwbbF_s?V6e8HhPe;V=?OH7i)_VC$crs9|y#7N!|J?C^e8Y_g(XY_%b? zt)lALfz>(J@p+s3h?1ZT?dz09W19j!n68uX z?r%f2kso#GQCb{9a?8XIFIEyKmp@6+7JlLUYX%Sb?whd3kCx{xtN&-V+mdl)1HC`m z?PIwR!qZzM5@mtkEIg&IB|N-^_cfbCWguPF&{2fPh0>+5xHr#NO;;7k?H{o3sV6M_ z@bRx+4_~LqEBa7l`%GiK&5$mVO`Bw^sg&2nuDo>4~`&$7~^v^av~ z*809xQw8O{x8J<2k>FZ%Ehd3J5AjrY!*>1Nb+wPOZiv}qnYNJitn@h$VveIDLa z_jUMyyvMfspj=t_l2t!um=l_yLBH>akXxoXq1E`wxVii+K^VyGzkcw=SA3fCa)dlP zKD51G&*sldA9io0vtx9iTq<8NFkY@L=_*#z^XWzPx#{%GP&%~>0d`*LrJThRBt6F_A~EaXR1qY+cKN*Ct(}O@3>?-Vb+rQThJQK5V(?MOezzxC^}}1mEGQ9V`W+C zULG#Vz@RMd(bWg;>)L-+uPj;J-z{OGcd?7pSbt@$W8&o}OPvoLN`oUrZsB!)GJY;U zNl;$ZvCRQLe`41T@^fc-wmN@NxlgtU=o>HFk{Q>j%JTj-@}{;WO(Pz@Lof-$ua%#6 zv|;FPFqlG-PdWp-1)+Ol?Utzo6^H&!H+9mzT-AXGqed@vgkEd~n^T zeuzvkSJW>Py1>;nTiUvkq)y!xU#!_mO-6;)cx?zZUHS4zctZJeng|Z^!0(nOJ4zFD z;aZcOBvvlJP!Qj;+q;Sj7aX!9{X^5`S!5?}_DnAp+?v~Hi-^rFI77}hnJWvf-NMvy z=3Ab@Au=K=5hycdpbf9~%eq)ok#U?%0e{@VXeS(WBDy0`8D5Yj$KuRW)J z`s}H9od2!!$8Llt$0<)HXg4!CaqaNPSif{t_7{ixMrnGrdLk9eA8WNzYMrC3ima`) z)Qv#4wxu(+rAxxkZ!Lb}@SX4e@Us1G_|22FtzDVhx|Ef=%qfp(DQlfY`M#yB+Bl~j z(Xi~v{MjKfTrp)B+ps#!nKm+a6}uMKOq(3N%;jJsEcCv$yRDs081o~nepA1VKYog# z{c+ZA4oTmL0tgZ=`*>Nk4@2_FhhgkCI2K;!Ytf-o5t*?{s>$e3^UH$_3z3`oP zoc+~TeS94@;Uak!eaBfw+P2%e|AkCMD#(T##g*mN1H;xwmbHGlRu~7*U*Z_pzH$2a ze9917ln!Nnvvqe8BbUEe;4c5nZdcv?(O)lI^^N^{7OM9lhw;s$Kp@jpmmL|ud;gD!m4gk8BClfOCU+U`fDv#;jy@~rJM?-@Xe&cH-R zTdjrMa$`I`|F{s}N??K8O2D0TvTnI_{K@3x_<;h9GuCSlxiyoqGq-*qc}YF?sLNB; zfhKP%Tg|nJeDZ02%0BID^ejjouI}ACAdm^Ef&ucc1rvt@Qizcj{&Q zVT#bFb$4~LL)6LUcAzM(>l<7vTl+A1D%Q!;vIyy9X|@lN55yOHhuWG?3jOG^-^pcd zXU(VZwljRv|;LWQOT9E_jK1YR8#h}Ihd>@v< zhn64B%ZMxy`#JLOS@%wzzWRIRBWbH0F3%!Uv3YG9FD0vLj?FSn%4U$))y>{HM66px zPw4u^=Gswl8>Nm8uKR8Iv^lpw(APUp@A=-vKRlQA)3Neq%PqI@?UU^UrSSfRXXF0K z^MtQ2Uw!fRWBcy>E9zR-B{@F(&okZpw%hdC<8DLt;>a*7Wh#9G!*Z@?)T0p{C^axL ztfROpzIEi@t=UN1a8F4kN|}4wRi=&GvDkO$cj{pD8PU{s(z-ldH`7N&cw8u5N|VNI z#ZF7&@r_Dty>VHA8n%Q3Gp-w9@XkK6e8BLhx+qB=7Rztd~4p+{*EFz2${AU}|yEVgad zd<ot<`b*m6^~>mUAM*9VXn%84{G2Fv5)QX)!nd_$qP zqbPsTXD2G-@F~9U_Xk91!2F04p2oJ~M0tlUip!rO>U{i^%5=6k$Pb4st^C%-4s|qqGQ7&V|WdJZ(uF-jj}Dw03w zs4HAPY1vX;(^`FE^@3)ooc_`6NL>9EqGFO=zHiuM|)$zI3CeN4d$yr5fA&W?nt4!z#~8s;mYulY3_ zB`yc}V(-P}fM;aD>j<9Xx*@dv4IOE@V7~~}N!j*(NXFN3!2P%R z_iJ~0@j)j|KkR#Ne}Ujh{V$C~>9}w`fb>GR?Pr+>E4%8Jr6i?y&0EKD6_SwGF!K=_O?zl zdd=S&jWu-|rXz0GJsaCPzdhj1+dlf%!;h@n)@dJGGBkB+<7kcKFV45EZJqI{>Hhd+ z+d_3)A;^xoFBocfa>DZLMdUYMb};vXDx5d|$w(@4-57YdyQQ zo}D^ps@DeFRP}6!Na>u<9dP1lpZN85)UyZ6^XBdMjgN#jwi)93;Mp`5dbsfAOVj@} zzwpo3ZO42E>_6IcbBYVf_2_xGt=l zty9YD*e>3Ftz{Ago10(bM?8P=CI90*;yIq@&GxD3H~E5ddGyJJhdw;?rjvT^c)I(} zt8^Smn!a-qC!4q?t;~AunC>=Tv{Kz%6SvSS{SR94o?evpZbZw3b0D#G5)?^8cU&SO ztJgb##^c&q?AkRg-jwA|t! zD06k`Qkn$NxlA(W#Y*Dn`4JC~e(Zp^fBSELfj7+O(Z1PwyxH_KuoG*3YR5;g*2k9m zxLgR~?c>4-c=huwjJMFGG`S?nt$E%iadaQj@z>rl{Qid~_rTjD1zmYNV{~L-xFYj! zqtn!7Iq_yVyf4nzj%igAMr2pyXm^0R`pU_2`YhaAB|VhaSIK4dlGPDfe`K$h2;XdZ z_0gp?Il|U9(4JH{)z zC5+4oD++gOdxuYC7gzT%iS5IBi4+R*q38-n<9dy9VD%b&G8-ygKH~F@nxRSQaUYOd zc01jd#w1oQzfuq{yZP~@pLx+kuX*Z``FHoov+BOB+XmG38j{04mlns$WN5K(?fSxy z*krS*8CH+Uk^$HL?~`J`(k-fUjLNz`d8QcL$j;erU{qy}HnqtT{~=?huP3slc!%r} zmj9{3c{VKb=N*3ha-j!sS=$c8p`2LTA^siS;ZOScpEE+7DG_}Sf9w%xp)A-t=)@mC z;u+06?<$w2pKxHN{dgvx#pRcD?JgH_<1~VSKYsdst#?cphVX8#>X?4(Zf9$&Pcf2gBM)S<`f?2LqYGWyLtngJE7-F;2G#?#sIG3UP5+ zG3E=#0=WuuvHwub>7H50EiNnGLJtOVj?0RX-Wv#=LAk(X#bB?Zr72p#p)BFD;w%#k zpUjwE$%?Z)MGJio$S*D{Mz3J3kW2Nc#+AD}|8L6nZ=G}2C*F3!UgcN+_tD}h_1uL0 zuvJrJv#g=*m{!{jO!fggqc~*L*J;0b`xGh?iE?(0i`=*`5?z?KVbB-&qknw5)BJq8 zGn7{OMC6jXGX&>qgV5jnV)=dGm+xBmt#_@x^169nc!>4WTNbb58*~)h1|5x0NL$`J zLs}8NOXP$!S@obNM8heW-B7n{{UoLz&q#GAfzI-_F2iGc&*%htgAP=}!agZ5Yt2ic`t>Tzn&?=7E z2Cd?lZO}YUF3;M6)4uzk$9(i>{{N_95w)A7qz3{?oJI^7n z4w2_%T{f#&OrEr~2{r|qCC%U3jzAOeK1qp;jgASuDNT+rxn!TxMAs zE?*&~cW|WCR~Z>&&b$w&nL2w_jTre)>1n2}9r55$o^ccCfsN9Y#L<1S9^2#dSKhzo zsn^l}dyL?@I-pt*ChGs)-1}tJx|VI0F!i#hK62wPzJAwdW8X66V#zLdo$;P8T>lyB zuCtWKTlb`O9m~~?>^n9-V(v^ioF&=mFfTe{PO{KB?8}DoCkkbQ7%i07D>so{M1PUl zMIkgPJuWG7Yi{rPBt|ZOks$5)+J{TeeeSY{uDJff-!GD9(J3NtRiz?%y+}Io|4*Oe z#14*j)K8`ZenNHGR1qlJf3sXgpnXhQCxqMD;7}J+$8pu#(Ar+dk1$;Ecf`TZ`VMTo zfakc~-pbe;>71bn6I5JlV{bkztJ_0)kj5gNew{*)%@!nGz3NvvG{2tj=N%&V^X@Z)O_rYxg(vfAw(vE!mP zIst6DPDKn&>$7nW%hM#!&w0x$j{p8Yu31X|!tu(3`eRwlmw)Du|JpjgTKKesTyfnW zFXtic>5|}-<*K=@eGciqlysj1=Ue0-n6l^edq4UH>axZ1>~z=GBT_P)tENjLvbOQo ziI7u2UV*S@u$4mV$7b4{(4_Q06Rx>-XA&cqKVOj6EWT{gJ?9_xI`({DD9>Bvs=7}} zbY9=g(qOr7%q*^~a`dza5wej-aYk~)v)R)8hh3%ZC~Y&=v$KeYokdum4Q75$WJNZb zkum7~3xZ#D&B<6A13OF8n0+qHUxkjpL5t*_=3kYl{2KZ9r?0+c*5UiSYphy#fM#Q-YDNq>G;rxKk@jE@sekY2VR^f_#Y^j4-5ZV_~bZTNVz#fz!&m?s%uX7 zF7jZQS5|s_7@Akv_4g9{s7sHg#rov3(y`Qo0grK6G0yT}xav3nV|faLvcmUqS?K_y z*Mozez-7f*AsC$hQgbSE=oDO595Bw4>--cJI>P4LWX1Af*j$^e7|CU}3HP-q?;zzoQO=MqfPqA>H>5e`F&4jyU+EFZq_wo+J$Zrc-@( zCH6|(t~8q)T@Egn`GI4))$E^ob|c@WoSV);|M=1n*GuTQbQtUhvm@o-jq)6P?8bDw zxIL*hS!?GHBV$K7`GN{uYhw&)EYd+5aG~-K*3ll?%=QY!JI;e;Hds5bkPTcY*6|*? z%&Q$(lqXy}u*^Pd2NoE(P^@W|IWD%!tJ!Gnz%pGBiq+|%%j~RBtQj6Gv$xuTWp-C6 z7HeEzgzbCIlH;J1ykfXxo0)U7rBM_?O5^8R*mksOtzqXLp4@jRURu3m*hNF>H3N7XsvZwz53hEle zF}v1T4|KQ=d0J>kU;jz2EPR4D#wTB$oaPs0!uS74ey<906I zf8<*xF~)JEe8cq@*QVAzvo`g{N7)9~5!*;1A^*2?`l|8T$%**OJNOIVeY`h6wJBS( z$Dn&#N3(p)xz>2^!-8I1s9b7ZYFxRywGlVZnmcLA6O;e9Ht$=Gv{^MWc17P!3JDyo(-Qgxa-j>8?)yH7;ut>1^`7opmy_ zDP02WTx)tciIsC_R$u*<>ks(hNrQXB=i}rX!spmLuoh9-K<+# zu`UP93%`4d@pFwwH!zSIEvBJ;=+UXHkB(D+!Ws#8iCpw?X!ltA`Ar+g%5W%MQJ0+{ z;4;t0+9-`l94*hsFWtTCAI})spYx`U5p>!(GHq#o_3Y41GRKb%&ZPOof~Kwk`EQO} zS5T~s@FWK?)>>9hG1H0JB~jMN!Md@n3F_pdTPww0vhn?syCrSuy3-YH8NW5X2!E_T zov1wXjyQzn!q!rZt!I&H{?%Q>=jDysGm?qUseF^ixDX!uaI8>0PBCl-}|w_&rtm z{rAZ3>ajr~yneQw8FYs5cb~)Gx#4R+?mC$>gXsH9*gNig)J;+m((jk8B6RIaS$5ae z+wIOM?#2|#aQsj-;1|OGt!EGY{hd8@ipcCGuekl}xewp@N6v#dHZ8;Hz3jIHagNSy zT^t#vb!61LpV3*8KH6veTASN!FrPh#ANF0mADc0Z3^w^jdk*L~C9=9aeU|r4e{k)u z_nqR}#f*!K{s=!$S+)c1)x#A_Yx>5<3q2({w^jb457o&ZXH&`9hy$gfoV+qHyqfy@ zYDp;hbB*f=d`8+cb?H)?qC{nD&v>ztIJrFabjOAn3%9$Vvxj<{xr9-Brr19)Ug={b zrKeO7&UDN)va@o>%>IE@(TGd2vSGAb5Pi$vga=}3IvBV2v^A^tZuN5M)r@xaJCZ+Q?SEn#E0G=JK5Jbnka= zyrh5IPyZ0U(N~kGf2EmU92hSSuN@qeDJgE}^sbUre$pH?+Uk@IbO)S_xa_h#_x~gk zdG|&axqW$_v5oJgM`^LtWNzbcgq6g}<(YeRP0zhY=8k{9+pip*K$)1^*WW)TXSRMbXNJcL2?Xb+;LBiCNWgA<(Ny3naH_K)E*V@h|AIP8i5te7(rQ6K-am96Wyw5W$ zJxYrJITt?0n2evx&lQ}#{^!r5m-lYBihi&ok0BQsb^CAXKfPp2AceZ)c&pATla7E=q9g?nBKpY@r%c= z9bCKbUN6`k8~K>O3;xS~h3iy`C#d5#vQd{w6m&hmrk_|_7=LsGLR4ilPY^-`VmI~yzA+5K!hONe&JilqlE zKH&@d{e*mOV>_g0aY+ufbL^bBPd42Sxh`slyle|=hd`Io6eX&Kc1RLO+acS0_D3&T zx6SMBuHOz3vn!w>A}vGtYupfN)+VQ}#729zw?l6I=_^iM(f_>XWNwED8{-X;Iy!1= zJ49sbWrx0H?1{%8-<`a*c1TBu3?)~aB2h~u()d~I{;84NGA3j7oV7W$zSDXw?q}@~ z%yr^ZCQl}RJR`rpc=$u3?;ZZ=CE|k{ms|Y#9`DE#m&9m(0si!BfoW+aOxllU z>|-!29M51WUh^_f-uupN*EEF5m=8zO7KYQMi6XJ$vXA|z?Mxqz>ZjJ}f#;t(I#3J&@gnZUpYGtXzLH09oOtLYnl@uw{N^dEkN;etn6 ze4AgJN!j8u9Y-1Qeb;nr`W>{AW_~RV{10tD-3q-%GvWBI)<5!3v{wnwth-8o3p(+q zUj(~lnYc*|=*@}FXn23)9| z`mmID;aI&&LUdQUOz(%%<-;=F-wrI(|DjmE{IWWr9axkVTqxEGjTYTC@4>*e1Ix-~ zDAqYjLUdQUvaF-@$^CgAEXp@7l&9f^j0QO`LX3u4 zO#O;YLZ)r*!Lw~1Cp`Mr2hPkb`OAyXeY*S3t2R52h6W0QLIW;@M@vLFDMw44 zkZK!Q>&NEH5#=k6VdYJ2A=O1zwnAxDI!Pridp}BAHhnm%Kf>}aiKAupr~CJ>IqVJ3 z?fmro-(MHWL2N#6YTUP(Qd)?gy*R7bt)(=zVxew2yyKVGOK!rG8_3pZk4m*|!sP(o zBTnR}@m_V{Ch2pln;uPz5aC=VS@B}|a2m);W*jXiVZ2JxlgoEX`u=v#J)`%`>HNfD zlizSZbDVJg>^V~?}vH)S9`KSIldU(fQ+^lVxO zp-Z^%k7HOkbPV>{o^sD>>!oSENZPq!*)&Ammodsh4 zrYvidj!Y2%X{r_*=>6W)v9JmSm)J(~5%24KRFoQJ{NJ3C+p_!7pjGKi^3;(oULooB z;bfJKc>X1Ea`{<8$9s-B>e?r-y!Q*p#tY=xCmT(vgJy+eUQ9Rw^J%MmNQOmrUpwUE zctP9tdJZG`fn`<~Zi`%**8|t&T4d}DE)mECgjcj%qI#lIb?Qwg?FKz=kje5A``}z%& zpSSXmlmC`z=O^ZrH)EUXg4kJ6-#PZQr;NF_u&sxkDq+YQ#vH9(XflWF;H=$cvct2< zmHF`;mnZt%35Ux{hti;N(C_pw8x2`7lJRr-DH4B|&-_Qn^*?&@)66Z{L!QwS&Ce}Z z=ZK@-TrXea^9o)j;VAF?X31OlV0oJ^ z#xFnb2OD;|_qY#Z`%adZ*uI_8E?PT0Al-@seS-s6mix75nLX?}rlTCHvoD(LZJ#)abf zu&i!u4J(&FO6aM4a+_T)S@x>;vA&oyeAJ$5izLWGV37n8Ev`}$14;}f~$0$oRyK`1m?c262%~mpn zIT2L3uv~JjYC24mZ!Sh`r;s}(1IV|#He*@In$JF3l}^j%OuEm>OB&0EV`U^H|B^Vl z{Lw<%Hh0~%Xy(*I&SbCmedJlnhpa=gS@F%-YSxidTQjcKMdLD}Q}K0Am}5lf;q|eu zV6>(e(XYUeXIzMngN@b#nV%D@z<%~L%}TF)z`5)^r*4R2`EauEd}5qjo_)zyzVeH^ zo>*G;KgS%_yVo)D>~!LmvcG@F9G0||Onxhld32a|m>03Eij-8YBLNT!6 z|2z!sXwDWkrP=rVhi=up4I3Yd%MsrI!+z86@TZMsvS#vU{>ZxT9sZD>en))#`HsnL z)_T2OKAqz7NC2J7Ua$M`PW51s23#l)eOTlht{qs`_6@~4-IGT6g=+_v!G~h0tScRI z&-cr1=4r>B|K2a1c+%wUK0cTEHEIXxp$o3ebPdFId2YD^aOdYx6UYwXQi;@*i%iWZ z56Y6Oj`2!*pXuuU)9%1!Q3E6W#j(EO)#V}rCj00K(t@I_8Cy_Z)wg!AqA&a1TYJ?r zHZW8!j+KcKX#w|2b}U;|)ee=hzJbbk`V44kIV>#>43C$`D#ev+OP7`9r@VS#xG*IB zYxPcmc9}d;8?{*9N`4Ax%Ol$ zwgcbSZwnFX-1$F0-TrlFK6>Efuf@)hik}A-&*aiz*YbAOKW=wsIXY%VX>j`La;0m@ zz_dc4G*~@-NOl)pHOgrBGMjWHbcg2qMG}X6zr>|^^R`i1;TLo(&5m%nwPx%2uuRW} z=4lcum+unle)g^Zn73k|(f^_kmUHG(?Ulbvl`u_=4e96{>yv#utbH7sS979r&#$#@ z;`K4US=%<$uUzr^JKp!v3~hX0U2F2C=`*Zcp7r#jW4oODyrDbJdg>Jmzlw}(wP(}z z>|BvBHG~U8%NJXRTh_YyU@-^~tK*$vpt=niFx!*=;)q!VPd+?a;KLlIT=qWHbQ+U5x%^_mJLsxE z4}9(~#~pve4I7@ABhOnDZ{tf=7Zf>VtJ2vqI#4c^uNaVB>Z@}vik05V%*xu)!E#sk za@mJc&Ma9{?CKVCR_4(=naF%DS31vrAo2j;9*xO`mhEu4KxRx{(lWz4{Op&{5f=TA z9~XKl9gi?pFE|nd`s;mZ)pQD|bIr?|4+q+DA@c9TAun*P;+URq9!KY#-cVk<*U=BW z_-XXx6rn3=k8i$Xp0RM&^$m_z>`+OeCDcy+jl@B||5L6_p$A)Or$L+2<%pA8Yj$)J zOV8-ND0kETpWb8A*^K)hC12R0^kIC=_>8S%#v$c4Io7Lstr>lk#L+VXEa-x?u;gFVPJ4^Tdn8@Xj8fb(7D!hLlP^O zKT$9b>HpwKCx82$r_dLBgghtpe8=44ne@Wi>=NycZD%K*>y33CqcYW|ey6EReW>0) zQkVd5k8;e|{C%c;U%&0h=a#4Mt8eyacYW=BFTH87l>g2Wd6qmED=_LU-a1f+g)4%$ zw76;(4_nyEJYjjJ9OK8O zWm)wB{(H%#_L}+;hG+A$|M{fFC!X28_#>BuL+!-z@duxH7M?J>$VE8P9e>9&b%yUd z_)}*14sqi&;14G6c9knm1OCikw(k&+FmXTP@ofDQj046o@JII%&eA~`8=s5Q13vzQ zwea{6Kb_Y+6IZ{LY=ef##9qRLy`4-5m~+|Z6UWCOpYOrYe9PWXvabh2^C3IN0UiwV z%9<}e4CE1)6=RZp)Wy;~byaHs#z7tozK_dFhYy4DfNKSVa)WCHgYt!I1%vX4YXyVy zi)#gga*oT2ad3*a=maiYR*XXgW4{y*bf80US#f;wj?Tel#W*xUM=rla;vRm=$d%tY zanBz!CK~lWCB{VmE(fz_N`)LvnUQL_yk4gGb{2=UGL|%l+GYocf!)EDU8bUkSP@j9awn;g28X8D+Nt=Z&0EUQ04^E8Q-%P$i8{`8VR?6~*h z-FBfJH$$G))~q$;{vKr!QC!ne9a0UJy%!1(kv)DlMSoB$W2#CMbm3Z)tt6KA>+QJo zo}J%w-1Y8EuouV|v@dA-+ToG0{_>bCr5WlQWtw2Cv%}dhHQOQEZW`eN4qT&*PSpRA zAX4Vqt&;GR5q>uXAE}pU3*bWO(pcQH_c!~}SHsEWPm_mZCUwtUeaBhb(U*6;JS+da z<5rvGB*oB!G81b;8lR)+T^q4=O$buZzWzP-l3RG^rKjF@@y{P;Z`L!aa@XBe0 zB`Z7Vf^aH{jL&Qfo-OqWRmz32dPU8{@V-PK%yvoJG`z#le&eFxciWa(VVZoW1LZ7T))&J+>KI-+BK+c~)JzwG7nC zfb_}A0QItH0c6&^{-H1!{`|%BC6Jr>x;$D{DHg4L#TkzVP^Cvk=GnAnh4E^W(eL#<%`6o~;iqPAl>7ulZ?R zVYW*M-+l_wRhP6~vf_a8ixdw0H?OQXJ`8w?YZe3BTy=67#^atefrX6VveNVO20aCULD`g!Xf#^8}f(GSD0yx-RN9*Uh==(QjV) z{HwcH{9(CZ7B7&EG`5bnh@n$8cIMAeMPE2`@!5ktvYA-D#ZZM}X|T|Hwk?UzEFZrT zS)D9-&#$%B+F=`^4{CZZIUb`$O#LhzVXa*qsvn^p8U3{aJ0vS}s=Kq77axYfW|egx zMyP&FV(31y|NY>{N4kgaTuz_S;gU*c7uC9qp4qYg$SjAC=%{*gA**9Fv30_~5@n4} z;@4zQ^E})xf!|!v;ghLmXcMT&wbt*W=`$>y@4CZ{)Ast*>yDicPmhvUNuEaYxpZN5 zdF4oPO?hy%Jm!|vxZNO9Yne9D#8=nyQU*7}-(|u~_{;B>#$Tlgx^S)WH;I+Y_X^_J z$4}d({Kog3%-M^l%CqBdThCtHB;84}bU0%-;R052$?m0Hy-VFbrb~I2O#}GVje5>5 z_SW`QnyCEw_UKt6d4}HIdXA&EUC6(r`J-*33R@)J8$&(nhhdK5GwvsdcBe zo$$9X>38^Jb3<4B9r5w6`6c(;Z$=iD30}=*FRwn?!se_w#nQZ;xDLyTWp#dNI?)?7 zr*v7{s2y0=Hfjf!wT(ite0fhf$F&2C_B<{W%Xel87`S#|S-A|wI!8%}?kW>DPaqVF ze&(7}EXp@76w7yJiRp<@tYjK<`Po9x+WtqD%>K_$t&Q8fx}jWRROT5N8jH?_?9wLJ zL~R4N_TgE0F60TqzZsvoWAHowbl=ofw;%jqw1;E({`hiM#?smfoUWdd9$6u~0aiMv z$uz_(`o{Web73oetC8f1WjS$XdZkn%{DX3#8=v4IT9?JVHtYN2KiZ~N|DxY{rk+dJ zeY`V&-l4y#2dzHFk1*+X#K9jr__c2nKkjE?(7#|He{p>LnNNYM)xY!eU=Y^c`T9e_ zw*FAC(KCike9E=O$JQWB{2RnK8^rgnUVka^_*NquB#jA8=p3V|ku73rA+L#3qdmKQ zQcr%qBX~8Zx|Q$XCenvKJRcTm$F&2C{KmBdD~o-SHI48S*ABX}*e5=^9##^fyYi88 zgA1kWdm1getBhr_PkeNN^{**BmBrri(dEO+V(<8{e&L}DUgAR2sCAacm3#h3xqb4VdQLjvy?^^I{p;Ye zNAH~ef$>V;a7m8*DzQ6Q$IR*)l4xr#*`B3iX8*vdRWj{J!WAnUM#}}6Qz(BCJUp$} zzen4siYSRL7gwzvE{)5qpj_@IxzIVc$z}Dc>W%PzK5*joYfXnM7J8B}s^ip;{|U!M zUk~dItgpG1G`-5<*{zVrW-y)KEbgra=YAE_bbqs$J~}mjw7;Mko+dGK`D29McfEJo zQNv@u{cK_%dO7)`Di@``N_q9j*oFyZaP~&Q8458W49f##SY_}5p^r2_=<-#^z%^g} zG6)~d#*51m{_T;aByCEUBTjCu$WjeAiJ8kEEXX~7Ic>_D?z(#$c!aKze#!WG?Wsec zONI1~veaK5dGYQaew~D+PJgLfR_@!8=jb#mzoGOfEsh|$CCAf4u#z~r{2_ui^*1LR ze$X3!w=?IyP?t*H)<5^9R7mV9(Nh|7M1{~$kr?FfH7;i3Iom#&Mz-;XFI>nr&({7h zKhvGmdClZKwANhn`JO(%1(|;2ga5Mjm!+wD(^nA5v{Z02Mn?vQIp{K~-+C64LjICpmdEM*#UDS*-wd){moBAAz?{pJ z$6l-?PA-3%;Jxp{X?wr-j$gciGjfiXXE&bF;4I6YO)^Bm3e{{gnHkIw$0?Uf&4!tX z*Vr)C{XWEU8IW{h`)kQmUc-AU8~g`vO{W>JtxaS+x3<4MTbbh7-r+}luC$C8F2D9| zzR`@__|kZp!?jy>xk+OU8ie~*9L*c;SMbyuPX4msXxhVYeCaaYgvf#NznZxGT={ot z=l6Gi-3>4PHTCFG^6bulOPsm0NrXRiy0@Hcvb?uD5`Nmm^?2}XIK$_3N&ij%vH$!- zF8P-c>WUK_-)IbN!SnSKRsy{2>FwIO_mtBc>Ai*0dr!?0{=V_s@0$JH=bhu$*Bln{ zd&?O|&|N60W9pU5_!z>=Bpme*zgg^Qt2eCPN!Kg*$LkRKM$EPgp$Tf#WuKFtPM0Cb zZyr9qC21Llwd)`X@43rgbT@6a86HQ(XPm1E2Qc2;b{89X!7A?u@$n= z17C0k51_^&(jr2Te#-Z!V5HGbWxjDyez&|KLnttpo-lg;`Um!Jz5 zLff$-1LRGolLfV}HI4p08TeYSEyX+2bNp}iaoWB{#`v7dZL)tb?niuRv+~G0o{8(o zjpX0-WoWvOR}ewNWw*K0^5(;7rW~E%p@)3Lg`~}g(@Z()@X*stIZEQ>@<&K|zWwg6 zU3SxPdmVrF-0dEXft9zWDJnfqmdej`ofOgR<+3hd<%@ zM*O=xUX9AjJE&?LnE`H(18bi;?8 za@G1=bx-RyE!n3!Td~l$=t$MONn2L4TH9#N*r=pK(;y#ku6Y~Phhud`NZ$Hztd3|N zCzq!m@TD{UVVmP#vFMSu&R3KXCpY>qXW|Kqp|by=(2I;c;rOC5rnX6IG6qkORh1p> zgNVym{2g*g-b07-K)+3xxSxeF+mQMxj*q|TfVg~vL0EeSf1xEF25kJvKi;8#4V(D* zTl_4xVj8;{TM?Sj+ddl+n(#N8(4*-zk+1kei=_oW;?(GC%^pO4z9U!7CHrzh<u>KCMv#LUyKT`g^ z?WcR3yYIDE|Dk5LCFUziEgCRkae7e>=TLm~cfGzC#+<7Y&7@;y>wLxL^6J(qEBWW| zYrf(|qX$eq_{m59HN$+xiDb|}VKEZIFd3}P-FrZClX{Q3+Qy!=PW9V(*a+4)uJxsc z!@p)rv@-WKNt@CIZMaP{UvWP{KIISBFM9Bh)1P9zp8A$~7IXXh`^U=T<0GqNjL*$* zh$eE$d+O18W!~mE+$3ShqnqW*lDCAly!F{@={&~%vo=>&dXyIE!4>k@vf$#fU?k(` zoL*h=nWf!wUBHBah{p83YO(NGH8BjeEbiQEB$To@t-Ug-!}Zo@*fyn=n?YY zbP@7YPdEC;rYNuPQy{>^wboAjKne@mG#|os$p;1N!znyuR`Vhp&xh4)Tk#_)x{&i` z+lpX)OfL3ZtvTfbItLfZS07fhZN`s#=t8IALh15hfq@If`hysWVbSy3u z>r);qt1m*aKIg$ghvV9T)$EwT-5$Cqo48QAKJURoZ{XU2McKrKV%_7Ri#iJziuDB# z7Ihph6ze_@7Ih*n6zhu~Eb35PDAt!eSk$?=P^>Sfu#gApXj~}P*97b9DLiDAdL0*v zcfSYAY|K!sZ+oz?2XLWS4|}k%A8?^q-}PWkc1W#a=^1Dj{LgihJM*vjJbS7iA-HaC z{hYPK1H%KAfxbZ*n(LQ!8lxM!;>)X~T_bzu5B1f$b-LI$F?hMP-w= z&9m5m_2_+x;J;F?n#*nn`Y?T1S?s{ZSh@W1LgeJ#KXBl+=PtN|K7;DsBeGWMoN}o$ zGNxzdH6 zDhrwq{yrXf3?Gf>@R$G1_UC{6jPK|%<9jGwvlT=TaLN9i5G-)!$Te540MjYR4x^!&mJ!iiUKK) z46{(N(l;szS`YwH#VMuu50pGC&g>t~*lOd&s?cA4|c=_4OqN|O-hT=uyrX{;np zE`OBZJ-oE{jHi#dcgHKPzwr0i-HvZ&1T@1btOhEI87uo_di*-2S^EI9)(zW>(87zI zobW0ycs5^SxWQ zf8XJP*EV@|hK<-YgM%Zb;=u5Dd92da?IgLdu92-R!JMVMV04-7`bwWtJ$aAhz|Dex zs|XUZ{R1aZD(l*23b%vcRTf!CHuzk;9K>Zk{SMwiV>%vwT-GN+pIkZ&xbg9UG{A2I}Up#9UmI-r_X@z*!SY&1M&2LY2yQgCSDqoF!7D=fx%00c6DiTeE8Q1JnyhcWSqyk>eexj~={`1S;lgFbNn?<| z(1Xj0LH`_M?CE|wbS!wdtXSU@obSu^uX1Vqtntwuq|J18Ry_J!Yfdq&-#jZux{sCo zvHtR`7!L>?-|*04{o7e_zUjfRe(hE;tUo&|#zP)DtPeXY#v0({_D24i|1B%?V;Ue7VC0p1k3Co4AR>CpowhnbXyU5r(N@?%NMmv z&0f%YxIJw!u*{xN7HA(%mNu1-W~Em^oy*>)N@MwOpc5C8k4c=pYuyEquDc{%7PiYWBP1YsiCh3>w=)gw#^rkDP9 zDUg(TY+dVPRQv6jX`4a|q^SN;8scqJYfoXT63&qw*hiC2f4a>;eQWwJBrkn9CQGg2 zSbL!r9BdGQWuLEBk0zx@ z0G&&Yg@mRtiIvOG5X`HNx#5(DDlgfVKK?`HnR;tZaY1>!GB(n9K)R{A%s(FO78WkB zs%^sh7@bzNkVL6nD|Ewyo8-#EJHi_8;4!??^6%#%v8*H_r?Rxj`$ys@%65pQ`1p9!1hJMZwb-?&WR$AvES#k2Z~F!6YN3!O>* zN<5>PXTovO?hKKybl&*tAeH5bZQ8V5;KNaxTgM?^a3S?Znx1ynWneX1m!;{#c2N5% zEPd&EahBj*ed|v1F8<}m9;05IBG0ZoC+o${S(2$v3sz`D>zZd{ecB;B+jGZ1KL1nS z`PL!KEr|LCVtZz9ib-9w+@vmPAQqyNoaPwM8kIL&FG#y!cTpOYi9MY1(7plHBNN*{ z&FZoAxAnV1fI8RDa>dfKI$rVmk@IVLDf=RFPV9&@X&BOT(*|VToI64^d}f?%X0TlL zlU+<@Rq2?`?%J!zWWt@ZE&7HlT`Os*6&ytq2`VOyz?(0SWAqhZtLrT5$JyHQR` zHNzaTl@AOo`1ad6-;tb`)W*3SseN6gt4g}AbQW1i-qDYV96snON6ou<-ASrQp81i_ zJR__45iKsa{NId>rt=lLlqLamF1sz4#!BL7zri*8J+SOKhpc|}YmR-}KH6^}wskw^ zY;??&$$jN9Rs{D|isj*cnfW6aem?tmhqo=hOPKv_Eb8J>s|T;)Vb_DPUqK)Jvd5pV>=;E)0G|^ z@&FgYzpFer<`sgY{MYZxJ%5DUuKU3k&VAyc`+tFMVf-Z7hHS1W&nEZQmTyGgv%M`y z|MPhtpF4lQUk(hx1IAi(Orknj)OD&f)mpbX!d0kf-f1)otPyYGvW(V2SNF;FOt;h1 zbY1FbvRksBB_xgDX!;CG>)&~=d3R;$mnk-+l>*jPClQ_BjbbC%^ySnr@6 z_yenCWkz{@sXSUK_BGd2Da^4sl{&05mk#~q(ph4uo2b1-U6Y_o40!g1rCyjD<6B7m zOf;)!!P%7cGvoHi7_OOgrswk0o>$t#@qAcTPlwW$#v+|oS2u&jI)j>1on&=(C|(jP zm+utdTRY#7fBoLydXO>8s?5{h(05sRV^OyjTUS%nNTp-C8~v)HV1-Ke;53G`qeM=m zr;vGzOMCTRVG?)9nWC646Mu;`Y?xl8Nx+XjgEQAKFKnt!%;*Eps|=7QP_kRvvk_zI6Q1 ziE%#if7*{{Xo`p9xmkXv(|eQ>EQq);e#fzVI9bbgBOFb8Si8|jkJUjTGU3A^|8dRZ zWHX7lOUR(%|lJuxH7RVQ?EAflV4)5af zlYU2d!tiT4!@h%mIy_;Z&G#MrsY874@Mlce_YQyZ$M+6@=2k-o_B3Ij588Ncv<8K6 z%&R88#RHFd#Od^rPw}-UmJftw4AH(#IG({&+_18j=Jkte883)oWiO89!%>|w2EWvBwEEm7vP%5(YD*_6STzZ=DV(NDHT~zw!q8paZ-~WTG>rB|29jPP7o2l{(@dW_0 zirsGgyNvIzOHTirUcW zeEbP#^(6i^zf5&v-F(nIaNu&wR400|d^ip2#LPGi>cq@A#)lADNv2EZiGJ*dM|Ev~ z?_Os!elb~c&5bWH7o#k@HVk%l6c_c4uaRa^f4R7>Z*Xl{r}4_U)}ws`V_k~}YMP;$ z0zqdv=VZ$k1kyFJF4}@%qCU_yLQbV`8HeaC~cD}6FX)U&xC)be!JSv zJ*LyRDK(=N+eIRjhZjp`!^2BlrZ?{Eqa4+1zqFf&(57^?hlfe5T)r%@dp`BAE8o3- z$~&L@@w6ZI%CnC1PIJZ2$$OU+we}UdITSidpPW4}1-B+EvI50z-O@2$ksZe7lrLW^ z6Q?R8T?4VR?9c37P?Y&vOGo;PV|~M`%S8lrV0g74Ehu(QD=sLn>RUTl(U<-1t-b0Q z8yG6fHqFF{O0at+mdc`P$*zp`4OGV6Y8sWS4m5=5qNUMh4~&vsF1iS{#HogkAk8c1 zN3xteR=2yFa2;v2oQX2IQxq$*^=+qMRStEnWw!8$ z=ZTNM*@}>qj!zi;Eey};Fks-nL!Ec{``X#W!5?gBqOJjp|4EnC;rK&0-?jEK&yCvI zK02}YvDJOwsn^bi9?LW6f?nUYhyQW<>{;_r?G$twj{L5-7fD)9Kka1HMUz|7-pPss#=oR+XycF;TvnWWJQ(B+ zE-S{p9t`u!igBMsa9`GS+wd6I3I=5a*9r!4ajjrb)^M$0P&RQ{F~01{Q)}O6#rRqZ zgEDGu`>YsW7mWK;ILNBC?X%+eFsxnQ3Wn*NtQZe?(t<9+WyScW2LoM&%Zl-k2g7t- zR*Ym?bneZ$3zqNt&SjsR6JPf*d)3I;6@6p#6@?o>h1Ua{?a!w-j;0pb($LK)0RK8+BCO%guh!!iom6?^bql4wH?&Wf> zlGwIOie259jWR8|;PzI~u{v~Lz5K4$ud%k}5yBwqkJ+vQP#I8rF5DhOCXfZ{*0im_ zJN)c7ZDZh1G4;j69~yn{@P~BYJNzl%zIXUj*ZAJW?Y%gie2e@=m*VfU{|JM>>09c6 z^f$<(xE*MACVIYBjx_(lG27Q{J+uGPxO^KOZMyB5vIlE<)>_{JvU!w~OG%V-+J8p= z;X-9Sjb-`MEY{H;+K}UB@Q(9fS+y0KP9GMs(F|S3d+0K+P`Z3rl*4w>Wwv8G=mMi% zbeS#L4!X>y48@veOmnHya%6U8JFrYgg<^Gj=rTJq6l;bD%k0f|V42++iZ#P;X+c7AJv-vrU_VZg^q;fM zr9GFw=P&n>ugGMbd|keHVB)Nuk<40WuRNRc_HfC|S3P*cs=a2;{04bTSxDsV1a|O5 zA}n@sq7n3Lm*Gyy*Awr$Z`!9n^Oo}%JE`vZ7Vi$RPi)HGPJa%g>O1AA8F~18*Oh`^MOqS8Nz#^Nm|Z>}!gD zk4rk>AHQ1~|CA<2nA}?9UlJ>qpCyQwPCD%PkNlMM5|(z&o8`*FN7`pu`ibJ@FO;4)Ia=(N92*G1 zO5*6bN7r8bp9`lP`1T&k-VySNRKL;Y8*Y}uCu4u94ypOk(4VF~RBxRvx|FuyIh#nQ zVsAIAQ=v`i(zLZ&E|XZf{KW#h(`8T192V!f26}1ndwSGnP5SJ5Q8T&-n&=0nK^lN=- zgu#zr^W&L#8n?M|Nz!$r2{_PAj!S}ZQwoQ^KGK5An$I_TFf`5CF>Xmx^GS?czFVmI+jU1S?)=Tq z-o@V5*k7vGYxdPl9n&c>QOs>B(bnlkuDPQ%b$oi!3`SgJY7uYz^NH$BCvr_Er-*@& zfuR1fNLOcbV?29`Fd$?5I-zJy#(*#xGr5Y(pZS@rwPFuI_dbqh`KWWP+37wklf6(o zDv6cLA13sDynnyv-#2v9zhgIAe^GkhFZ#|HXDsO^UcyqbKKxsF$*eF<^+fh;dXI>G zrJVBZ{ZJCm;Q4qyx|AkOQ@Y*^Nn;Wxmp@z}r@iErGoJI?pDw>`x1T+Y%sHD~7Ce^L zukYyS=#(NqP?AF;$7C8`S4pzGqqL^aS~7daiXW z^fz*ZgU|K)seEaCwS<2S5vxwqiR|G*@qAdwDlQc3wHhtDD_zJot{qrl;6kz9sL`Uk z(nT4#0Cec*dd+YHim)GPM+&}iQn zbM;+9Wpe%|WAG2IwK&us~u zT>ezar7z9@{FxW*bm9v3&^bN7Lr2Wp>1&5a#`QjkXeCWT^eDM?Yp`y)0gopwo+8y^Gzxn~Qmt3E%Ro+i&(3dzUxv6QukkQZI5b zF8NLwzTV}3Ykh*~CN6Y~>V;&xQme5-p80boD-+p*_2_+x#DAq+HK(?!>Bdk@AC~FI z*06H<`9fsppDvtK{?WcWvUkNac@|w#+uzH(cg3a=I5bE$fpfD3q))P|x7!I^Hv*@+ zXNk&LBmHWNu;~li()PeOU3l=&H-0knP3u0oH~Req<%tyX>L$_Bbdc`ZO;PHbwV!5J z`;w&la%8M;wX`yXZd@Z?#P=_nDTR=F;6zs#wY;mWXKP~+P0N{v=YRYhTtNR~x-N&V z^!~Hx2`kefX#|J;V%bYr(#0@CHVP*%2yB z8BC9VJtY|pf1W18x1e!3=u(=X3zyv%Pp2`7lgraT@q#b^WcXK;{=E9lAKU-k)$<)f z$K~8w$to9$eQVcu^)P_y&f0L*cX3tUpe&eV39L&*y|S}XHr|+;=pPh2Ar5pHKXxyQG+ugQzW=w|F1$1?ZmxZ!O-#sP1YaHf3@6{B7Q0`W^n{bs7`;j0Z*oe&j_B zBRM`WQF}U}kD~E!WF)WP@*gg#-$L=W@nC7*hL1~a>%k%~aiMf=pTeRXAbYq_tQ`bv zM-LuyiVMX9Yo`<*JVvH*p?EucuqXq#P^?`%SYY5nv3B=hQJ!$2SbKP|D1W$iU^P4b z>7$GCjSHn~Pfr@r2e?oytphZ!-1CRa?Mrw6?@_ny^S1-&H`BUGY&@oNdd|;`=Fv%Y z)KPyXogIcL*deyUmUbTIAwvK4#}&4pI_Zyx?Z53=ry!#fwr5L)InMrZ$6@p=UMJyk zb@IU5wkt_^^v5U>qjrmyS%13{JxJY6eUPp zqo0Up_5{y-N57TH=B}F;Wnil=Q(MW4<-@W1D1<+&s(C$vd9ovVk7M4;T7v zjpgq7$@24@cb?Vr$kE@uly(nwz{KsI)Iqdzz*K2SB8jU*hiez6+c(d~b7&8jJbM1C zPQLt_rM(sMI%?m@U`lXD!*prk$O+A|Cuo0Pr7zm-b)x)F*sg1Gxz7nL$lw>{G8xoz z9j-5tPp-IpVt+M|Pj7z#bloFY&1KSEUaWg+ApDm>)H*wKJTdg$p0hdnf0!7 ziVLE%9ecKjK0f-37H8}~ul6>{K-RUA9_o{uhsUM;Yd9O5->DuUC)o zjxtGErL1$gsIfWxaeu-YmW9>unQRkRCVezdRS<`6wt#+X;yNUaHO+$qow$i~VH!vC zPvglwf12Dn_E|Ok=U46ie)Pog@~m}Yb)ZYs=@vHrS|x4k`N305#~wR%&Q!1bT`Iin zlPl)()XV?-EpTUXtFoH za%D&N(w2om9nHEQ!ZS(a&zht%=-#;Q`DC9z!ejN6-%#Ra?7?mIl%ws#nIHaEPf3H; zO^pXmH6vck3C?=k^8<&=^W*%~2hR_@UOaHy6Ax`6owg@VT5P;!9Y#1!Pq95}%IXXy z;shefr+J)xFAT1(h>!U`d4iDEhMp-%_s~5q&5P_@-Hu(>{<7ND<8WEGRR$OJ3@L-l z+C^5bUMG#zW26i&IFPJd{f=FE_qta*T(mDFt6jBRO_g!NvHv}LufE|gt-Ji`mv?Te z?}+1FEt%K!Gq{7!zCXFFe>q>&IJ`ZvGTRtr_t0^FS($SP+9Z_q`etiq)`!L6iANYX zv`89XN5tc-cRwC`V%Dc+8MEX2`rxs?tSFE5V_A5(H*ioI+ADSE5L*5NOqD(4=ddF# zn7QHVD>g3uK9|GO8(n5|c|%?x7TxHQCH+4WJL%7UotXaeeJ(aX&Qm9UmE_^TzY6bG zy!gWQsmrc8X)J47`afOUPG8y6+1)SqlBJ*hkvo@~rwm{{EsLxx8gf1yzmx4U;b+Xe zT-5p^O-J^5B5fPZ(|>q&sZH30G`=SlbJg-RRYnWjZ+x|o28@26Fg7-n zH4c!*8#uv$G+vHzetA49%X0ztP)D+t&U3QI2;{$dexSsHc3ol*cf+6_%%l#3euV!J$K|iw~(T65l1w z)fOw_q2_Gt?bW0~_QiLT3Q7Ktpkk(bDq0@d+X402+Cj)+Z6Y~Ey1uf#kv#UQt=Nk+ zeov8?evixQbynMIxtc1}owFVvKjFuBjN9kZC$=BXH`=_t(p)t}D#Z+`6mp?;h1@tX z)9&LNs_w^oyX#4T(C6vBP{sN{c&tB@pKf1hb%T1KbwT$cs4Lb7f)g(83l(d8PVA*M zzJILIIdRMt-#gamoVXDlZ8t;rsWDG&x|%8@CHJRdMBM#_N7epZC5=GCt}`6rJW%fp6?tKstvE6)x- zZC$6`bKgp60gv=Gog$jt!!5@bqkI~;zFpTY>&Ft)8k={zT(vw+l|6;<8~c8J%!beX z&+~8F{#OU?B<`dywt+TJ(_mz#6K&Feht-rZ2oBTPudUd&&FZxOKbO!>38D37Yv)N?OH#bj2TgQ z{J`0_^UecqT;X}_9Ms=99(ICnv3;;#9=MV|g*s1ILA4)8iZ8CU76bv-4!bF*GvPrZcKQ{$u#96x{Z=v#I^WHNh4dObnjijcerByR-> zOJ7bPQfDqTaL+_r*RmejAL(E+^#vK6=)b?pAoYLbo&?qxaT*^;(nlJR#`lq8E|15? z&@A~L^DyVMaWpH>SDdujc$$T)mPfxK^1!2GdZyp;mK|6hj1n7b@2L#e3bFwz@B3OI zx2@XyH(K*mX@BpCeIst3oU2{jlyu8zUFi$&ReUhb<45IabzRFY|6UPUui2k%Z6Dk9 zNMe)y%T_-_E=`;9G*x)_(0#{E-epnqu)ovij1f0wsC~}5%J1-8gOXo>N6OPNt;r7H z!E6TVm^E+kYcMbUev7(7S=;)9BW;$prfpa2k*#0y)QkUZ{TAz)JpEQ}U!(QCj6Q3; z*z=dqUb69Bf8Q;6_tvY#UD`T%#%UePI=j<5^4DEo!*}0&MizanPd=M0{?>inlRPCT zbk}G`u6{VaSB`2&ZJo7U;c5*LbUj_N);ywFfRFf7`9)(KdJWdee?N^Mlp%DT{LZ*6Dqn=XB&MhcS|7 z%3&-SneMffQ4S4UuN>I>3&(8iQCqMF$zKMwJWZ7e!nWt^-yXmFJAd~9_Kx)45xISI zhFwzb>DF0w-pl$eYZfi3%B>@_Y>GW(9gHs`Zy*(yeA_gs!0T=kv;%7sl-c0i(r+7$ zmWgNACf2CrJd_DsNtKb~Q0*+{f=AN_Pa?^6T^~ zk6liF!85S37)lKo%KrGike8ojZ2GWUG<6@Tjd?}z3eP1`JYkEFe; zqpder|JW&wjQ;VAWYGEdwaK_1Vwc)v<&nRitmSE{j1kITeBtI<@A>;Nt&COrZoBZkG%`;svjgNo%w_UP)+H-#8>wfoNetPC$93=b zVlQpt529t3Nu%SFXOG&F7$pDlw}o0BokO2?*VRYQ8GG=#^h-L2u6c(?u3<^8kn3w& zlben0%F)ncDd`Tct2`(vrEUBtT|45QvwJ?Vc+1xBJ^Uux%8N2r7^10UnJfHSY^9z2 zM)al7POwL9Neq&I`P)e?kG7Mx?{Bv0Tetk>?R;xEU2B%wg$=#|eBJFNTvO~M6JyGO z`|_Qm2B9y4S0U)hn<>Hfpe z&$|$Qm?$<{-)!-~Q2J!@0mMOq^%n+)o?F!(Q;g z@Y<)?cG^(u;JBULq!}e_NbNgS8s&lG7SRui-Wu^)U4gw(zL+m6say=m&-x2+;sE*GXpT2{%S)bh~pWcsM%Ryg`G|KT{lrHjzJ|Ah6gLnBp6!DNA z#sH*Io<|)H#tNhe2V)7+D92-t9gHvyb}2_%FSUeH-4_qU%NXn`C+RI$K)y8rZeu z+0Mb0$s&1HXyKCNfzI@kMMJJ3<7g;N8m|*Em&emcofw)&_Yf}K^TgL}_UwASgV!VEQLxi{de3U>UD~=R*FE?{J*g)j z0}P+k(=}JU>qGwu&+45Zb>o8%uDAK0zI4=+2mXG>j6=kov`fDC(IH>q>yl0Cww3a5 zw7eKtK4U+9Wm{)&>)|DQ(0<@E_3}u>k&CO%Q>u%T4*)jz^~*a{W_PSwEsxXm_q28f z-_9l6?CKFcORK$Y-ODvcXlr$zTCGwx8wA-)m{DSw>0rgeHQk1uIP}R3&K}d z_H=c&pPig@R&|~r{cWdp$+zoz+vMYPt@BTt(xTcdn;P>^lmDG-<$3U_x@EyUwqAXK zUAgoWJY&Ya+qC&d=s?oFL7l7l_a70Kpw>sw4_N;&RNsLgZIUAz#{*-XLl~QjGj1`) zf!iDuxAj4GUNF?=yG8adV%s*_MN;6So+)y~s&4r=S`GPtbI$jar_ z3+tnbaWz#~^L*&}6SjN$pL_i__$H2AL!45b*U`3A2fO(zrpP;5IvERiQu{O-o1 zmTbGhoX5C6L%r4cc5`(JhE{o>ek+NTd2(k>64!OUr6V<^6yp3l6GuSJ2c^} zeHaTYpVyU^+PF;>*5#v5`TObHef`?~$v66sB;RHv#mnW6B(qxABvXTdYO${KoGOLM zK1f?qsQ=zP!xpte3`!(hp4G-}svIvIE52~dQCENVgfFswKUCaW*Q7n!oT%K%BOmo{ z;T1jyF?p0P-K3M%24|6T>rEr))}KcvUj9T<=+-%tY^i-NWvIQ9fw_iEApa`$o4WP4 zpsj`T9*U1DrSk*5CW4##AJ5~!3=cUhTylzZ?;xqB5zsX8zN7mcd(RX1%k?u_>9kBgy;B~XS`>_Pjpp~;q%u*T-knq` z?b~#2^Y2^Z&}LM$O)x*Lw{9UUewa@i(6K{p2PYq_ec^|ja7Ee+dG^jEzl11}+WnbE z^BxY~6+0-(leNvj@h*qQphoS1<9dsfri*!-tq&UI@i?qZi*Qh$ND&U=BKbI)Dx)Os zV{iY{_O~1}_D{?)*bhkhqpa^yp3(UI=J7j$|0xwY$?Qn_1qjfbKkCsuIEXj86QCV@p zm-l>Tn=>vMT$jqyJA5{djd$L+ntoi`_FjjoBk{F{-K2q09;1^^=-=1Bd3KFTY_dGb z|BM?vnm*%ds*IMOfBWiHO|Lj~&&$p|Y{{RPHobZejS|_yc2O|u}FdlKh3D42S1KiZ>I6Ps%ZH>V_5#f2j zDPu6^6~s4A-1xykdsR{Uz{x-FeBkWWdVY3|#Pef+j6F8b51jeB=Lb%m@ch7ctm8+T zm@jzo?4C~ih#%%zqxW`(Cw}1EzvJ0b@7_-0u`kG;suvF&+X)xiLLCC9 zE)dV^uhk7rt6q<>At6s&*;$E_GtfVg-<%uC%I9&Z?b*5FXG*Y(JVLVC<#FkpFFRN5 zvn85ev|S{tUBjKcw>4%~u8|HGeFKt}Ym~!9UxH-i8WVBRX5m2caE*=ls27b~bMnRt zkBj~d$!eR&MSqB77Nwq`%SH{S{ zi%xrP)t>A9`kyy`_tqcL24tO-^ZhcwGA`bq4757m)v|1CKZ7jS z@qTbW11dNfi?m2yIN!DL)8-|FXB^~cn9X-Xj4-qT!#Hvto7dVr*EqoA@b%`kq=T|$ zJP7%5TN|c-*Exx%sge0CT=bci7o3Ow7`s9)!cZ5$;(P_Ce}jv@DdYkV(+EFd!gPR< zhBzE<`T?eaqwF|bSXA$vRWxU7zsVOQQc zqGwm$IpS?je&wAbemLTy4(FXC-Y#4pjrgel_M)7eC{0<()5n!QsL-Bx{*^T;v;)mFw=vE_m|J7w-`+uWs0Q zlhwBSYHVw&j1}89{lo3s9l7b_oZ$4I z-uc3LNX!Wj{aYLldu`4_9L7iLQ{Fup^7nVp3`nu@_74L*{7^2^fMl(k9vAtKWaWBZ zqox1VF3Jtb%JnCWmi||+yyNZvI9z$hTaU}?W7ahO#jz{zc&lx9fUq(~elEW7qG=m# zcIu;F+V_}?>7(DweKi;ApgeiQ8?_{v~ej zm=*Rf@%h63g|gN@LHjf7U*HJiVPn|8SX#^MSIF1Pl021@C8GTl=SH%Y6I_=&e0lp8 zxZdLM8I;vNxUR6sNeYYgF)ynqFFO_@tYriG0{Y)ccs+X6w zTuqg|r4DX$+bhOi_p!yFqfU-X>SXw?eXpCT=6azn&sWH&O&hFS1CM0PlPEP0I}Fvg z#_z0q`5PQkpt8nezsBlJmi&vq!9jgFb+>Gc)_Fr*x3RVM+Zm1DOBQo^JbCI%El*Qrf60^c{{EBG zcYfdcCtv!+_QNNNJGp-_dat9`%lxY+GxSfb(%Hzq_FVCN;k>JUC$$Ykb}s*BR3K3O%W?A^Gc{ z=9jV<54Iy&^55gJ{L8{qo35tHOtIs#zs#B6)IaKj+-E#m+|*;H#4o}$JmWCgGVqFF z)_C>S9pU}>mq`MKfs zBM!K(nGW!u@;kkCD zG1pz@l(UsNb%Qpn<)M8+jT-EHUpiGA5<$>$~0Za(>S!*2X4YwX;6;xpU&`Z||&GmK16 zJIp$H@79MUGB7ZAI4+q8Xq^w|1mcy98#bS4WE>%E$YJA+%^Mq?SH$fTTaQs<%o54p z4vuwrG>vt~VK@J3d73J`Uw+odx7+#P5ntJr_C#5*r(g4|V)AutnU|!`DoW8=v#B=+ zNX{Kk0{&CK$u~ywbi}f6t*&me(^9S{aZN7Y*wM_rG4`p@6+)9pmiF_2#Gw6rC5fr+ zC!ALSGw-tYgCB0%LeciXx%IsAL#48t95?*brN^%t_S6Xa74CaW@}}8+XR6e|+3Aw8 zL*C;trJ?T*#`W+{NeFqM?>2vF^&y_EYNuvcmOdor@^~8QLx$#Qs*D!XUU%)6xB2)R zW}Q{&dMTgYSlZU#CeO`VYO~bsn=^nH1{@5f9_JlbpOV;`mV_wbYIMCGkI^0vX+W~%vByJtk^DURK99%Vde~-%{lB*9 ztRX2k#%K9{WTE$Yd_Z`x?UDOeqJ#A&u^_VT;<4M3aB{ z_StGV^q$mRPrh~5^wU1Fh`dYoA96ka(mYcdARl~8x()hmPhmcZ=bpUpx0h_-Zz81&wdY0{jAT_uC`9|ew&v_-eZs2qB&nA z?`wIQDr1E5{o`J}-w7w2b{Fr*Nave5p8INM!r9qZ?doZ7>#{1JDc`>#wovCEPm-x) zGJTl!AN-=fu)c>r$@&>EiirmHj0Co3?m<-)Ubz_zu>D6U5D!GrKxh=OC>My^YI%`K3|0F3Q%~ z;d(32%in#SJbQAo?&g~4z!Ma5ug;@Xh(W2$k>5AJ>&e;cZ9MWK`sPXE)-~6_#|UMb zByT5rF|HzJyqV9ge-Cx}X{fp$UmxbV1^T1ki2ggqV9y@4B{4|;HQukpT(vyfj_<7u z+ho}DJ*V?M5^cvX{GRAbshkHc8cR-ODc7B(gQr~ey%)vS^x-%Yk3lxhFrL_$!uV=) z-mEtNZ}=`Pyg|qvqsELBukn6Sz=I+^f?x-N8x+|!bayS z)D<+WD~-<8I4Q?Kl6AplkLPe6x**4zY?>?!`eZp=`*6ch?JVARc~A_a zo$1`9ymdj`U(=U^*^#zLo3!-@c%Js@rRU*<*Zws=j>lY&7)5ea9_@pM9uwEaL*GMs zkt}6}J@FiJoM6vP|55cHXHR>axkZud;d8oVeOX=JDG!ZEx4p1^f!w~2jYt+dua@xi z&2J-Oy3eWU_4l;!Yh^ zt2MjqbRp}7&BRXDgVU3Dm@d)_gA14s%vcXC}1wD*_hyq5kY$x!;>FU!&L7`OF}{AzTrL!Of-P@!Qz ziys(AH1s157<)pA8R@%CafjuWw|$XDO`i}ZlD~a0{q%V9)X!QTt)D$(r>s2l|2^=XZ#;Oyt!e+6V}E=0z|9o4Sj z^3+w2N7J6I5A=BQ)YYFj`J;VSHhXG$nku6tzcQ zH}8|Qk(T!-X_%Umt6Ew2!%D%*64N5BhU|u`zJ)9rI>o zmOkdU(kRID|4tgm|IIOwH2%RFf09XhZ%9(j#GNI-;CVjcqOBN|h3k(NDYXfnJbjDD zlc#T~oPn`p8Y4@lTJBou%hOaDBYbcA^PMxEyZWdvP!7fRHywF1_Ah__*YfChZ`!`oQ+fR4rW?5rl>5JAUn6+dZCZE7S%ddb$sKG1m;37EEze)n z#Nm76#|STZ%hBq#jun30#*exk)?fN^FeK}_HCFOJ`PR?s=Px~H?bz#|Z7|IPm!`6u zcY&OaG;{n{r&-ULoS1*f{=l8n_v?S-`xcyg{F=qTPS;;Kt|KJ(wRZNc?CI-BFW1${ z6Zct$?};(w$&awAiT38LA|Grkz^8?XA$=^0T9-Gc&$>Sdm z8Y92d9@2|s;n6bEc=A8#tGAf8%PW6->x2`IICzKKa`)8-PnBor*0i)F&(IBymRW2& zT{;5#s?MZCC~qAfkE7I8Fq``|R-d%~*}6XFq;G?FuukT$f8@h*>lB64%3J%^Y~}6o znnmby}#F6|5ZKXUz^`#-yVAM5h8FU+wnA9(m-jiok=UAIdl z>cK~o$m^bO*qF#s^Hax8+|;F_eHr$sE%GCg{C!z1Pg7;2@U>pL$!=2)di2jcGqkz5 zb6r1aTRiXr&@6dN-}xSt=J5o7<@|1BcPg7;Q znD)U3=bU-g73;tDirbb{UM23N&DyIF>X&AFy*fZukm5~VjwB<$JwiX^yd=Iy=4;Zx zXv^P78k&|feYowr^Q+OeOntGoZ0#5Ky5^9apSbqUf5s&*e!V#WapB%!3R#?ifk+zhaqj?WS#a?+SieeO+~%%;M_l8;o&fMm{**aHJZl(PJ9jD_p?fJTs*VIiU3)iC#5A_%+ z%0qml2oGx++69u8=MhPp_C*@s>ZJ7zS@^ssu+pQouZLF~BUHNV_=o%w`1jth zcje5{n~XVcWZQ>Jor}quDx8baFW1ZKH688pB<-Z+i^%MglW)Hlwfvr({Py#ku;H4D zd)Bq>=p4k_6lDgk`K5kf#OKIbBa8>$$oz}`IE+U>L3w)T17Fwti}S{I(#9A^@C(mJ zTEK0NWpmYV-eq%6n{QzkV|QpX^@#fD*$mD+E4GVsgTqBUI}dKgJ&y}~>pFhmlz|ry zoVw}xfp04s+lL#Rv4nWLimGVYgY(@-j}v@{I)32vQ(io9`~GoUhTuEbi3iU6cj7dV z$KZR2az4vr(!%>vJR87=r+&2Wu$;k1q<*n|;3Mn!fsd-=2R^!vANZI$e&A#4_<>uR zV>?OH_&V{xcdz3I&OF1*GjPTt&kr11ys`nOzagHrJ=~K-32zu~(t+AM&iei={o?17 z`1Y^ycO!)T>%A5|IVy+RKlFPV*2SUeZJgu&$PW4vTbDGNCvbc*;-SBy4@Mg0@i^$K zks=(#MT&6H_aj9(7$cA(9GfUbZVt+qF$l?GM_f-RU&bq>QJx1hc=}(zBLol9D92YM z>{msi+$ z$Kx72{jX_Zj7J*f_@)L=|0@S`0i*~Aa|WbQj&E!5^uOA{+yW`W!5jq1%Ryabu7YIY z_^w7t|7&{e8`X{Sd?(_do-+SI8s+$&g#ErK*S7gRD7waF&V)3|_d^L=dtF-7W^=|y zd49}E2ShoTk0C`kh9?Y-b3BuV*Mr(IA|uDs4hQoR*m98HzU68D=wy!wc3Kf3Wx*(amF zti7Mkd3SuS-7`LcByW6OEcfP})pmAYwPV%lb-(Y)eK+z7v5~Q%Th#V(be-Yvz$QVvqx`0`OxRT zc;z#dck!?6?OEBjtgXMpUdLZeU#Gk#O&(+-XU()>y>uAqzS}&ABq&{6jVW#)PYMy1UPt*&vjCz4x zY7=%L4Yg}GjkP>Yl?lSO%ap^8xNoQN6F>69?mb_uYlw19W8g-jEcIrp6aZzie^L?L+hzyIy$oOA3|cQc0_BkrV* z%&y8C$NSqlyW~yN!55YbzvMIdMDzU9rpOnjl6yF-@@B^)dzN-oJNr9&d9$+Ivmx)E zTv9zw?&0J!RP)kWqSri~d4Doa@Nww=w$r*gsw;cCI@{0YIicB7h?MI-6lMeCA$7s# zS7Chs59-n8e5 ztJbF+2ioPozwe%YdT002p!*(jjEd8FjbuJ$d2Lc4>t1vItI86))TZKPSAb!u-52Qhm@7o0VJ|{_P z_O$_J0u5~o<@#RIG}rO09Pv<_kH+!9u`zD5!~tjC?41vsJvJ{MIOC(|2Tp$rKlUeC zlcoWjYoGXqb`l1BGf_Bg?oF5wBOY$9HxiC(YGEFMQx815!0D4bKXAq$&kvmQcz)pQ zd3b){>$=azi^sJ!)>~fwfpg7^c*8|ibWH-zwJeVloNHA0aUCYiGjR5+ym;X3k9vOK zTpRNIz&VfS2hN_J=Lf!j9lzm%kEr7ZK3-d3>6ZOguob%zgyC}R?*TE-pl+-VbM;?Q-my2C?9^xAohX=iB`rtm6mH8qUijaOMc`$L9lQUQfJzL{+ryf$uHqaf0tF>T$w@UmTD81Glzd`A2yh z7TX7YfT+g>exN8eSlv2Me!+n<$D$9E;VcpQ@OtxaZw!3WA||nG=iXVk;CU+Ivi=10zLw zm@gwmd6-)xMR|5rnoK;ubMl8dJCem7k7szol8xsNjy)rC@chx?8JUCUd54EJ29hOz zJf6`?lZnSm*O-!cSmz*F(&gF1ng}V%!}LcqwBny|v!w6>%&jt<;djUumo{bzH z_6?9MJR3VawpWpbXETR~y$2)<&z24k`xHnPo~;}n_B4~y#M6!Bv~N5S?WeDPg8~Y#Gj7ddgS{SJaN>s=dAx3)_*)tzp|^f?xm#qw+Tlt zPm)5mC+FGYXlSo3d7`_i>5Y;&$|Njj-QOsF&55$rCZhYAK zxP>8(7Y5wIu#Xjo!5(n-roy_2d$2C5z3`Bq9tZef8uYm}8@BV5!6lqzK$K7OZs>a| zYU*!Vrf^*v@iFf+D64&!S;WLX-H+A0%Wj*;W&595?Yi8ti}FXZa=pdjqMjgGx#*7u zMf1z{LW^Z18xjsI%l>El*QroS4=#{<^lV%isLo!Ta8ej|~fCR0vV85LIx)SNpvx*YI&L}qa}$qoi*x^ zuDMU2$~(ZAOUQa8$C#tHrOCG|R#>iOspku15M|t1oD8PL#vSs7{)K!-2j_CyzZnKz zwnw5({CZerk* z7@2I_QYO)q@z%*?TFY4HVdaiHoP)fxxhM6(%3RAv&j&s@{^+`ZI2J#yH{gR<{_%=@ z*vb|Z!kOj1)p!o%@#LvDS|*7x1NM+VNS6BN@mM)z;i*lRj(d09`op6>Km89=8h%Id z!o!zThk8%3)MI;5v8FUzT0fbNd!Gu%J$>YgW z=W2O${d3roVKe(Kdt{SepYfJg=H45VFMQ;^Pj{EJk7^G3D80WRdzn&>R;E^t*8kuK zX2-#PMf)Le+Km^_`Y6K0@#v%IQ;9b?G$|)I`#&BhVQHV9A2@4U&kwvFCph=Pc=5ow zx5e`V=Ux@h51e}8`GMPBNSH6=IXD{?Ra?eUNuG(^Ms&L;-`)OBCz4w0>{fTelj1zaw_$wd2nO5@vZENS^YHR&V z_jN~_#L2TKyYG$Sn?e6c-_{u=b*X#y`0ekQz4@qDe)qFKq+REntLDDX?-P>e)aOsp zp``cu>3Y1_95wDwX~ST49PGau-^=tkvEAmVF(AdRn&V=j+}{6L19Lo~wENT1yZPa}Qyx_BDxvppVd7n&zFf6p_|^?35k zb3Go)3dvGt9#5YAMUThYP8NG=>!M!g8P>J9_oyvqFQ0eT#%Ja38}(a9x$c3!M%I!^ z-q3^?P8_Ai=$HWxOGc!Xi@3pQLdOl!S4G4ZG$v~%L|Ol%kroP8ktVw=Hv zrq}ZW=RR%E51eNey?o&OJWuPz181wx^8@F(*VvD81RpDk@JwqQ20OsnFZTSvdG^%v z1Lt|t*pKsq+j)6bG!Dag!Fm2O_M_avEuZXN5x9qo65iH3!{yfq(U=2%@R4==z-dcf zJn+$uA9jI{5ryCE!cF}^%`VbDPBi9+1AM%wg$FY?zl&T$r0=;d>30&Mgo`?^yxIDC zkB9UiS^DVfBYS99nt$1O-W_p~Hu^H8h)wWNZ;_%rdB%A!U3tcNkB9UiS<>b45c$HO>)6iF9#QP(ZmdE$Ca9kP9&EH=H*snc*FMR`acl7;63jy-yxN;aMw9iBYz z!SHw(N0BV)y2-I8&wDU#b$If;2jfEyPjWdgW4b(^JnzByaAXg4C(nB@;Q2_zMSW&2 zfn+JO+Z~=f@51<~!;|M-7$0+Z^1KVfE3@HA?qtiKk304-??JNUv&S=1X$td<%E5D& zlP>07NS1VYJj~aSqC7Ug&B9Y#?oAbJxoY_V8-H}gd5?3SMta?OuWEH!_v&i<+O^Hj zcVOCE+FKg?WJtX|s2Q-$Z_@7d_QL!P^)c_GibP?j&f>vMx29~r8S#n%j8{`N@yYXvX$Z;wzf zzd53PzmK0Y`>(tk`lVSf<+|~jq(Ro}U)<|7|B2r)VGO-qIN=lX z3%nnce7H$TgbitEEJ^BdoTna-j+5Eu6dn)xgbdZ+ugf0h?c^zvl}GD|#M{ZWr6&)%rVlV@+VmZzyQPRjhod5>;(!vnWh#@zS8_Ojlq zl)UF4czH&adNp6_0_}cLQYVVd)o8EuYu5hho8S)nUHlE#zDvhG3#a|<&|?uCoNJJ` zq4mByuOj^moc55Xe_rVDa?s2a=aU1 zW>-h|vi{}if-FmYyG1gVvio3?!CK$KdLUlOoF~L=4y1XId%wpmf9z3PI5U!ej$X^7 z`F+yscW6GKZTPLMtMljg^rdb6ZMOW)G;aJu20!xqpUEJ&?))Z?Ex##)!8TTIzGIi# zBqvEEf4zOg|hI< z!!YeP^Y??;toF)@63Jg49uIaRS^A1vo~FteiT}!Ptbg2J@BQKjXiw?B_2T}l-@R&{ zTAkC?)ze;G-nq1+Hz{TEFN55dUEaL!&#!;&C$8ka7#TZ)YX(!R^5{o(ZC`(HXZNyP50$jHv@EGE zJfw4>yu@OK%xC0{V9nF2)irI^uFk&xYJc0ZmKBQ+s-9z3G52-e1IJ#xT2XE9>0Z;( z+t=CC-6tP#Y?tt~r~ZUM`$C=f`ejBNrVKa_V(pMJ;krNyhXF&G zGsS-J*m|5WwyuVEu&(G_iF2?%@i=T9u60Y(N}VEIA!cs1zoo+b)aqcKyzZ3vD@1!l z2c@OLK8&72ZOBrFaIF&U8zhup+V7EeB&)3+m*#glTs9vr!!F7mDTB-EWf@%5C!`ox zQ)QHJO#a=wrayJkK6e$HGtFqPN-toOrYwEvA0%VQ=jW3Qdg;uWuuE+sr;+^qdo52> zg?k^b{oZlo-+A|!zkkPju6>AdtnJ^M+n2ZXR{ML~I{W)t+gk=-kG5#>)OGKL29f!c zZqsd|w6QxyZT!?a+b9@_00#hMrr*JRcpfg&%5<=23AT>m!G1 zr?EXBbL_GHF$<5EKUSx*@Z3>jPg8|^bdGrDzSphzX7fze+i(rprlxkRl82+(?R9in z&b?H)NqdK=wI?m(#@iEh8ZD##VvpJ)KN87be`|TPulnk?w;gi!MK?XP>F(!jyw1ML zwkzcQ2xd)|ynU}kqMqN9MAq>@>qp~xOMLQ{GC|}12#hc&Z2^Dld&0Pe5r*={&oJC& zlpX2)0JH;=zwB-t;NXYykX9s18N@v7qifo;@!TZwVlLKNdHSE5CElQD+9(4gOWJCA znkuZVp8m$%GjHDM=Ev{Ys$&*wlp*_#S?xV5R<`wav`7V)&VxBOlEsFrB|Q0gJrUDA z3*F1lUdL&V2<5D0U3@$y4?-^TnKlR(w$ErG+Obw|@i7}{otk%l-N?lRgJ zdHoL2LCN2~JRZ%bY~_E=pfU1G?a}-w&XcEYUF+DBr)|B{;nBW3Te>_R>JpNron5C< z(*K&z#7DC5c;#;GE(_1Q^wjo0nX~+S>#M3iKIV*j8=JFq_2-?lESIxVrk%;z*S*f7 zjmB#LFtm(zi9KqI{758!yR7ADs!S5T{>RryO&LBBPbD+tY#PjBn( z?dmrz?UR?D*5A=5`(^U8Z&g>dy}Q3_QhU2RZzdT^yIq)co?15NC2an9 zKwn{Ho_0R(xl+yt9-a?7;jwr; z>k->Y7;p>2z2Ojo_o|_<@hE;|D&bjvx5gI)32e>iB_=7salMD0y#f1AKQ;{3eLv zZ|xd9b3p_JKuON3MciM zFr0s$sCORl*3^%9q=R_mC%D;pnEa0869&9b6ggZp4#WAu=hyKAKcbEw_>rPsI>Ezq zVhe7wccJ`_Z6OS}-N$~E6NYnvFRJ4QzF3rSOGGWd$b0akMLDnaC4>PZyp;#;V?<;7 z2m^kcD7?ptT0Ho1A1@m66Bf+Eam0OssK*a}k|_KqidsDQanm+Je!|A>1@|dwICzL_ zX#+o16uc@L^5bq34f#(Mci6AOMVJ`F4JT^nYL{P2MdNhB0p1~M;lXg99$?spdzq-m z0lr)`T!T~i-sJydjbp&+$%*r4)9f?AqVc> z2s1bNW%*3|?iclV!B>lhytrwHhG83R?krJ{1AMKhh3DM3V-DQsh%`3f@y`JF6CZc)PS!30pgoC}8t>l;T=i~JF$PXls zjUFF)jg-YVOzBGFqu)o$vTp;WD~)f%0(|40`m#~Ud>a?w+ugB`azOHwhsU?6(&gft z;MliW$$Xm^;G5{!w?)Z(TNdEk!?BM(3&~Ty9^ckVmy2&t$G&Y!=6h8EzDbUK+m_6? zT>-wyj(yvg%(p`UzGlb19ZTlhsQ}+p$G)8l@J)C4b}5-}*OK{mE17S2$$TS9<{MQq z-{_M0#+1xAwnRSq`f&yMW;ktRd;w06Z}$RxGadUT72xywn8^kB_Hyi-Qh;x7hp)M0 zzNrQH_Hpc+UVv|3hi^v7d@~F1?dRAxy8z$*4&PoS^X*-L?*PZXeGBl-arpKtnQ#9B zdYjy17x(JeI4ear84FxHSZ@$u%#>cf9q%8Z6RJzjm78Kw++$rCMCG#CsGT)+- z`M9=)kXlbGzfR7Y~lX?I~m=J>l_b5^C+~8wG;TiP z6oVVvj2E1J#gGFx;ZUp7^c(b<@WveAd!)GW;+_*=@Y8lDiFzF1>>t`Wu@N_Yf?;sr zZWi@8z}b_t@NnR!O&JCU?T5WKj{}^2GYby~?wEr*HcQmw0B3J2*D4;1w{z~_jD9Oj0P`$gz))=PfpALm}B zCrDX}--8nKVI%p4(AQ_ZPX@ki9UB?4*8sG2&e7id3%lsb6liraIA8P|74_`dTqA%SeVJnZ1H3O2z zK5st6ngS_{kM#&r79Z;sq%1zxI!GQqZ@gqJgp|c+YxO*QUjN5B3n`1w_8ZFLV-1It z#mD*&$;0Q3N2~>rJbbnNfxai_*84`E^6(pO|HC&getIEmhZpRzPLn;>Ijj474(?g8 zqO)I~H}A}S{#Q!>#(He4q@UCMQk`!%wqI)NU)#fAeao6r*Nw_Sm=LqyoY&&(x>)y9 z!CBMc$J#`@VD$rMedhUrlV2VuIO`_P4WFHlBRFM8JWB`X1q;)Go49IE@ijbozrKB?6>H*)wiPxA3?67ezjr@WCo?FYV1BTmNDB6|WJUy(h5%^drvk4T<0 zdwfOq1U7fDXU=Z;!S`tbbn6r!_A=YX0K>w%-0FYr9)I zb6q(~GBjtN{zl?a57$d<*M9Jrgs`!GkZ9JYQ1|$KbP`|tmAFr`{%vs@hBg(40Yj~y zWZk1#`@()QK0o~I?IPA+hGF2X*IyEs`f1}Dbt|@wFyQRDBGeZz3^;qc2zA{H1I`{Y z!q^js!B%kgZ9G44_Fz0eaQ0JTKkNr*zZYST#0vv%Vdz)9FyI!3{wxlI{ow3N;KzF1 z$`L!jEk1hk0babQQ{dFZq}YL7vaHKN7}i; zaKme9#g9Ia^`XZBK26lZ!-0EFfWblE#2U`y0G}xua^R-VGYk>g}20aMnx~9y@T; zw;BcqZq`B`2RQ2*3l9fw`f$VGpbz1Cmd61ehsS+jo$%muM2(+w;$9qJoRfaxU{UX! z;B!So4%~|Z42~AjLqt6e@IysI4&3wuhQWcmRn+4EKTOoZlNQ|cH-^E1d%md00e*z2 zg@*$-{hDEL(5@DUdK};V?J9%eY?o8)5lv z!e#$z-zmR|z*(;^!uLC)OOCpJB8^BM&fja)^uO{^W=L6l!;~%;-yhPrdQki5(~&&( z#e7=}&xQ$Ge!l0^_zFj6J?>lr9(FpVGK`(ENKT?UcF|`faKwf z`x?rZH3gD~@2?s){jYh*Is_?$k33{ug5>4Mum@KMI23-bLvjjsnS<1qy|JwDcaNS-|We;PIYul9{gU1jmHrbP1a{X?Us z|J6R$pGX;elrig4Bo7}GW3S!qp_I8ey}pa}E|SMaZyr2N>2mRTeKqS^B#(X1Yt;0= zmN9Ewq%1zxyGU7ltd)_n_*hFLdHB5Yn5%TT_`LeZni4;$t0- zl*Pw79m&JzmB(VG%f(mQA2d~_2-jXe+hp`zPk#KAw;ldJr|%^0_!`V!atWrTd+Czy zwJmub-0AFG)I4p8yqSDaN8jqMez``SJj!EF^W@8yuZo?lmwzQHyGs@JD9%ZKH+Efy z`J3%)u#RUxgZ%*%T=zG0Ulfe}9fYuP7%&ujVn5d4;HQZqxV*VZH2y0T0_j9ES8#pEq^l;|I=K*NX?vy4CXo-=dBmIBUr` z9(f0Tswl$x!3zU^swl$PABVwiaMo|0A2@3<{B{(z`osCbt0}gv9OL+e0Y6z3VGZVm z0k<%$sp2r$2+nnw*pE63j%|dq{c_y2>o`1Nz;_nqcUbS?0;io2&$w{2PVuxWfLj>idttyW4D;4F4EBTX;rMY5@a3Y& zo}zJl!hm;(B9lbpFq{K?aveW##uP6ecyk>;@TqnDz^A2t%;mx|0beDGOc(Xe3qGTc zA2{<@(giPNX!QhqmMEP2h=%6{UzuXFixO_G zsO2m6g13mmX=x@57~w6=xDOHa&J8|K6y8HcEgt;1$&Zkqu!o6;;Rq9BxZyN=34gfg ze9_nr&INvisD%f^y)?k!I8t#{nLn6L))^@Zd{D!*iOOdSUgtLw=nu>YWpOnP|v?n?Btz(vG`R z)Z+j@L)5}^Zro=E7#z5}L_H4h6`~;r?!EwngTAjv)Z+lR{?pnyZtKe}KXCWf;Q$ZM zNm|Su<|%#E>N*_YYed7e;HD2WjI`ihE9#{M{A^JR&$-R5b`-xS^sB=8HPJ!Qy%Ocm zw}yIfkW79lAL&Cj5zTttHRjt|IEFzcl9%rxjh_Bj8`n==c{n}34NB(Quw=fCO6J?R zWWG&H=G&}fzRgSK+oD81+Q^m#`5sQ=>p|PdRs}dcKI}yDw7Ew#YWiR8+a`6D#rLWL ze2+TzZCilvF^6xvlKHkTz~`lR#{zs_pSn{4zIYs=F0=1|hF4E17S6 z0lx1$_U&FW--H5uKXUAwSTf%pCG+iBGT-Eq`KFY}M<3W+knhPfz8|>7{$zz{a|JeUV^6+{6DSP2a zS$r#$t~5UO)R8>)dE=4ox98#W@{hfCBoCiAeymZt()ifNNAlQLJ6<+b*yGrAw>wt+ z?UN^*deKE^|D3&U?wzW=*=g?77D+^<@pHDf^>tL+yZgH)$%ULvCEog+N7U|f!fn?~ z__dy>?%V5iE8JWch_6*}9m8ZL6e$6vl)^@Zn>S$ZK zcvaWb)^2%8_oBn|-0k;*d;J#oH&0vL-P60Yqqk#ebw%6C*3QNKGuL#q_xJR+%1wZa z+xXwovbcZx^0vO^t)22~cE_sKZC%y=9$ezzKYe9eXK(A_or~v6NO=v!z|DgV=1#y7ij;ZWdi=JD8luXn47!;w=nFF#$hN|@QXz`zxBDCi|ZGJx9ilnw-v<( zu0@z19Jui}4vvK7nm~L`>;k`56k(q~4nutK9UMR6gFhpRu&*D-Ck*&4q6p)d7Y6)B z0*LG^>V*M+9|1(zqxZsq-#`G7T}8bx;O`=U$Zn!>7}5+rypA9Eh&q1YBkTBqkE-Jb zKHBjk|G=LTMaGE6_7Vo%!i;sokS6ePb^O4`r+$0Nu_8)+gB$$AqF}p=dgllKkSH=i z)C&V{VJ13Zun~L@$B()Vj%|dqwt#z*sCPba%M-yMK5~rD$9ciwz>j!f@a-pR7UETXdDJRzz=f#uowJbQL~pL?juE!xuS4l3+Kaqw_KUFle8+V&%Y!l(Z_Y)1npC;~hQNo`g z8s;zflcLB{(U=n+@D9h1d;))16ggcqj!ziyuZbedMB^}=1AKWMKk!ab!i8l|dcjE( zoYv3awltk7zvJ^^6ZqqzNSCM=2He7|s1pYKF;S#jH0Hr(@SZw;;44MFw1K}VjYrxD z!`RfDVqsq32i{l554^vQANX0K@U2e6*!ggq-I$T^~M7|sd)>NqR{d@OO)b9Jp@?FgS3(N7Um0f3IlBf%|;{1_$oWaNihUaNxd4)Z+lZSv2IpeM^ABf%}7^9tZfXq9F(FX95h44~gC;>T!U7STy9o z{gkMR*7c8w<91Px1N@_+AqVb{1sHbVzC+aG0KZc-O#4$7e)8E9!B8e@-;y!2S6Eg9G;$L_H4hyG26|+z*JV zXt~@Yj(bHt4)FU#Lk`?g~$EVI^n^ei^Ajn zS)K6UKM%rFH_gp&u5WE4|JO@?H+;S41=llZcju=ZdMN%LMfhGHac(7U@*UYkH0v`$ z7bG$5pV~;7B6<1VsL|8^dcAO1>dM3E@vUDn-v%Y~ZCEnj#wGJn4oF$$v8mFP!nd_> zZB~%)O=)~RXdT?V0H?>dMFGAG9s9N{nUB5!$y3G`Y1H(;<{#yPM+E>Gj@L2cZz0H?>dQ^|Zgm&~_I$$Yz( z%s0Gbz7Zw!jVzgOREd1Fk?}zQUSh?ID99U%y&uwzBvDAbEg*I`>4eA=0xX$AQ1NaN~3>r8tAzB?Vh zr6u!ql+1T}$$ZO7=38DeUuVgDXB6Q3L>gBQTK~>0nXjv4z7-|&b(hT7Qz9RI;L3u0 zpG@QHLCbhm0nSf3e7yzuKJD=J72x}f!`EMc@3Riy>XP}^l+1Tl0lv>U>0Mhg-`OSe zol`R3t4rjg4Zo%!-{;f#deAm}ZUN4_9lqC=%=fyI`OYhu@B9LM_oQ+4pyl!U0(|#6 zd~YbgcaOvO#sYj_a`^0Cl00j#w>x}xFG(K0%N@Rp3Z(ZkhwtJ7e3ti0q4nj>1^BG4 zg?x5BHc$R}_FYxLK9BEhCG%ZVGT(It_`LdJYsEa};nio`b1aMR0|nCS*>`ive6~MR zR(d~Fz&`I^`QCpKmk6l{(Y?gpS9J{zK2TY zd$?r2M@!~=tN@?4@AQq5`5rHs?^`AFeY*gk^>s?2?c+No^L@8uzVDaJ_k#j__oQ+4 zp!xS?0X}a$f2shVH@|wO0G~HMeYOCfH@|~retz=z zHy5|OTW+svby@f7YWv!?&C{#Zwyv(8_G*7`TW5b?tGv&xy`{aSS>F669%r?k-B(TC z_QqQhRW_2tlRLZHyH+plnA|>b;^f(rJJ$A34w-m8V)7lTo#fb^MAh%WzB2i( z&zSRbJ<$-u{R+|l61C^LaaU61n&6i5n{Y^0d(;+<3)dF%6MiHMS1nIdWsJnXX3mwP zK7QkpoyhC0#NAL{Pn{)sy|TAwW!tj0{*G!-cXdV2nvQB)Utj04?tJ;aOwLWd>ou2u zf4*an+9E#^$)E4FJo=5~w|?zM3m@3<_U*R)+t|;M?iaj2aVqamJhr#9ze8T2Sk}uE zi@oQN`!t4$>K?9^k?uYCZG-k;ZG-kgd(e72_?|=S@9>Yq5FgBraeVL-MG@@s;)Ad6 z_<^BEiy|9{#_{n7UnGibC>n>s25{P;=Lf!V9Y1i^1YSJwP3!o9ZzjsQ!#u$aPM--U z?O8?h8~oA~p%01AOM1aA41HD{hVlbnAjI02u?d8o^j!xBpP#(2jJE&C)WuBZegZ4VXyMLEyDX&5U*+~&7m)L?6LEL zUn~mNDjJ^`+rTdrMGg~gvZU;=$#XMq2mWX z_)((aIdPLtOFw>#L>G(3{BVFT5w-AOxQ`AnIB*{$>T!S{D;jd(J}$uEz_er822l&aNAqVcu0}PH+M60462l%O?AqVcW0t}8e(bGgd4)Au-kOTM9 z0D}W}hp5K^e!6JLfqPki!GU|ZsK)``DH?L%J|n>3zk0QTw(^fjssx*BTV%qnwdEe9Y4ZMftW# zfin28ZQFu;%ohhmZQL#e^4RF{ZC^6q4kh#LSTf&ECG+i4GT*Kx^X*nL-|!OoXd@#E z@|~K-*Mqi^kp(zCzEK7E+S0gsQ2R!g%r~Y0-)WA0V+-)LJAC6x<{Mvt&r9!w0(@Sd zIG17SfUnEp+qY!C z{YvKBzX0C~C%p%h%y(ePd~-_XJE%lH`h2^`LEJZUIjAcn3xKT2dfS8}|4P zDVguklKJKp;A0%2Yf@xd>53= z_okBhE-b+3jlXX$z~|M!OAGMXSe8;$*yp(FcKP!AL(h_FV08H?eP1QJpjB{mlO(Zo4OeU+anL^;Ny^3HP7y z5P5|tewFk$@wjekcBl463%Sl{Nyd+*~`FQ{5T)@?Knj?6OB0u1O7HqWOLCt z4Ceyh!to2wHz-DxP{rdP8e_t!!?|k zhr9#dwT>S+?bVA1KHTvmKfx`}M>t_PFZjsRk3Os-YIPOd;*XNw@%cFi_|2loXi+Z= z_y-6eGDg%31O8qDh>R8W!hla=_0p+|xwK6EOT}ds9Tcd;-5!6loTX!w?^Qs^f-iw|yguvh7Y0l!le*-z9918!mVcfw!?_yKkNzz=l%NF(?sMUgq8@%iBfKgjW; zY{28Pp*-fM;TOs=EE{mkla@40TsGjJ7DWybjcvkia0_#&69&7%=Q)1F2RA!f>x2RS zoG5absAmVbg*n^_gB{@W>-d2m;rL-A_}!w&k)rYW;Rave_)#|CaoJEFN2TFUmSb2p z;Fc$g(lBw^fZr#IEEbJz!ftR2v&0F5-QY(%e#8eiJC3On2K-B+$g!fH9pDz`I42Bt zfFEDS5Bvnj4;#V1B8r?S8lN9-@RJ-r$_6|x8_MI9H2fKI49f=G@}!!EiOUB3K~dyX z(by*J2DdP6P8jS4Kh5zYKDgP@UMCFrBcjMsQO^!=3)A6*!4B}#>-d2$bNsLo{Oh8~ za?$wwaD#U`ey>RJxNInoGt=;A$uTS&aLbdfG)!DJ;NKKQR*1$nVK=yi>2|_kH+YZZ zM|^OzV`ZH%;7^Dmt3*9Jz%5L#69zlL`|9|C_d9;r2>v}$WVL8~ez?KcIDV83cvv=Y zQXZD>wemaWBn_?4m-9t`&%1B`QDCHhuTj|2Q_(U1c-b;&R|-X{8XQI7-s z9ikQdU~u5RLDb^_e~)O$ zf&0S&2FH6v-zVyEfWKcfIr z`=35k#NI<&s>zKWXlTKT4|= zOR06*v174gM+T{5fuYucskH+m*0zI1ZEOEAm4XyU3k4M_t#+JFyWjVFo4j{fuJ?9- z&d5x6*!S-3z5VQOe}8uO?OhJYf$P7CtYV=2gvee7u1|W(z`*reBC8lEe_LcP1K0U| zc}J9;5?RGS`Du~83|!|kaQ&{xDhA5Wh%6b98`u93S#>|k|0%M(e~{-IuQ~qyaDt$e z0o9l2`!>Ya`#gMN9}6#thyEd5By!NdJR##au2S%ZG4n2FO_31=99AUt` zM!_3tz?-Vzq2EY4Hl9XR-6Qq)68DOWH_Culu8?muGj9wt?^0&oSZ3a3%)HB)dE=OQ zS1|L&GxM+>LDGr0{P@6FPzIPty1eOB-96HnAlD;0OchVA9dvjV3i;&Pfr}^SQZC+= zuFPD#Pcif4T+bz+oJYBMS2Ool&dXf#$$6QJH;uW!a-86jPsX$kPu8U_()c1{T8CHZ z>dMQTVW2-1FU-u7ZE*Fs%0Rvvw=SK?9@Pds8T($|Oaq>*>*dWd;K{mPUM(|kHZ$+j zj6AFnK4Zv}`XUVZ%(Vtg74Ngmyz3Zw(BT|Ip7asIkPhn%m@3{}X5KtzUcCWN#sncq zfAbA^GA6vd2s7_`X5I~qJoxkiL!KN12tzh$Fkq^9H!|}Y8F|p*LPMS$_XtBeTx7sh z@tT-vzoSAp40Z*=72toS0&44G@E?%C+%)6bL7h~kXr&k#A zF*8$o?MfA zc`0UInwghj z>zH}>G4sB{%v;aMgAabykSF(^2tz)&!GNjaeT|uSKQr&^2E2)GT{@Be9x&jQDR>VW z@Ko}B%YZjoA>TvHyl)%uu2RVNFf;Ev2E1~Ge2*~mzRS#el$p1QnYWpl_m}}se%FBz zG#-49nfEv|?+Iq!_nCRyn0ea`c=Ed)gdqFwVCMb6fH%dh>y_^*1D@*p6g!!Dy9{`$ z?-u-snfJ5-PxZO|Gt9i781Ph|i|=OU?J?k~J|ljXnYY(~r~3T$r_8+P4S1^0H-FB| z`-K6o&aF!)8c+8z^IkCE%~i;^pPBcf0k2*m-^%)GxF@KpPMXAF2{Ze8~j!hY7=v5o22 zjgpnrFNiKuhF$X7TB`rT`A z zb&*Fn42o^)2mQ7(ii?eH$Oxa5c7i|U$FGcOdG3!FY7gb!*ai>RxKG9!?m-(ert=vn zN6gCm!I0M!Gm#L+G?Unb&W4G6vB>?&JTCKj_^cBBMbfb^c*C9A@?ajDDjxKUq$?xU zc8;M*;`H9G@e6jvzj4=fJ9j?^U1M&nYE9(qmPD>MWk(ZsWjM0BI}x`N?R`ZHlR4WB ziirEAnIh$h$8rfPp0QKYMKB>2=Zic+WHC#J;72qz29F8&8!{N=kC6~;8qoI!$Twav z`jeL5`IvrQNeF%4Hsr~ngWEnB3>#of7-)m=4AOn;n(l;O@j80Pn1^u)=MO{gBL&q& z?yg3d8VD|B8ZoWEb~k(NfCRiW&Kj-4PE{DIaG z{PAIGC)L`9#{HtlCtqy%c_kst{bQ?_j86UM_}&d0)*Q$DG|*1Un(Ar<9dFe;z2)1I&q}pL8nOO zypqsZ!CAkpw(j%?*?)~Yy7qbU)2LmQj;(G;i-DunidN#E(;~%mMQ^UBBAJP&dfO8f z@u^cQYAaTV$H|JEow8!7&a8OoOkj>YDC(f^uRC>V3?SKy^H1qdcz%N~AxnRgWw@2J zam2KkC!%((Wwj^lSTa>P!)oqHrW00AqAQl`vbwXWWPDAnwMZ1?5_TjlYS6yI+58&S z?AVG_!mW$gd_x2XZ2P9O;3V6UU#nvi?;(b~apj$Zv9A%deQH}&q!gMc&Ufrv+jz8o z>u--8zxANIrf)1t896&9{`WU`MIT%rhg^Le_UMD+v#>s(7wA!rN4VzF5o98HoCd@p z62e$Ub_(7{Ka1Ay!|H}i+;+IU1^R{!h3|Rw9Tt9;ZMS-2na+d-KN9 z*|#tZs$V(h;w;yM6B(7U0HajZrxV9>u=Sjc<`&*8;+iHYpLoy;l)Kz97`*rkY;&w8diKU#-hB}@9^8osM$PxR0Keypt z_zKR2#zC(hb!2kHaSp}D=Gpq!&!Rolzvea#zOr%Sud#mWi_QE`N@m7#xnyT1(i~66 zT|gl}^?c0Y=(Sx07koeI1ldP_Ev1sbg9Zq<_r?2jKC4r~DP}F4&*}1U$d*g)dpR_G zghTgIIB&plg0{@Z-I)3>Fi;ON-$b{~gq+4jUW zx$UJ}4i&a#I=eEVZ_8HEE^N8fY5&}_CFH-!r#pRHwkbF|w!GQLAzMx!8eMd1>&}h) z*1a5kMK~%Ox!?fcNBrdNP?ZTEzoc76gr`?5UavBZT?zN&_^t;|^pJIvRFZ>(a~9GyeLxG3W2#73QhqZ1n{j!taM z^T|WcwR;{M(=lbDy%gg*{95UYv*OuwcdSQD(~WVlm8`Sonl9Rgt!Fzj{C{lEUkgJ& z{YigpuM(Va9!qy@uU2q${8z=%@!y#WdEiq>LB`}+3Xaa$UhCt~*lr&X6WGT z$3DIOwe#lgZgcixz_6BOR;8P1E4mPCtGE~658CFiNN$=Zil1YlD`c;2po?Pqg7&Fx U@xn=w5cEL4K=bX{^x&=cUlOnItpET3 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..99827ce4255ff113948e71ac8f307142d6e12f33 GIT binary patch literal 374312 zcmeF42b>&7mH%gOz&Yb22U$2LX;;}eOJiwQk|k^99LA&Bk+gV|cSo{h95Bfljw2m8 zA4fE2n{*t;*kog4z!(l6_s0Z-54gi{$Jrd=|GxG5&2+bFcDiOpvN)?g+dbRWRlj~! z@71eUd1Sb}dinG@XDqq%l2h|J=kkZi&)s{ze%f9aT>j9hcYgNXo#nZ>VDZv3&sbb6 zj;~!=>?sy6>gw)0XYss+XDnYa(pMcjb7pz{`mU~JYd`>JSGlJ4m#U?%sjEt3V*}%Z z15>B3=$kq|R-W3wvRWChx_`&794wYchKDQV>d4rM<#Mhdk%`Z5E_X(rpKbX!H!r`9 z`_1K^C%@*mo&3);@9-nMhSTu;kDr4R)V<|@!sFVZQ4zQ+rqR|J%v^qoAWuH&drPjq z<-3(HFPU@9F7jNwXhxSXpjxU9l#2ty1J!}j;K0@LG%{Q)4fhxOC0EDRmfiETfdQB1 zcIY9`;(U0%JZI&@_7YO_d|nUA!&i;R)%%k*8DF zj*m?p7%mU4?XOHNA9vi;Ia3Elgq4-jP_Ea7vYW;wPjI1ek$v(E*N$8$g1hG@%g^8S zUAc7fSB|>w7f)XL*zWRNyr{3*C6Zd|?;op-kB_YCS$1|`bxu(Pv|1V%?3!6zSQ=kb z93JVf6jzqUD}}w>BE()ilxE9k#b2CXVd(hGgMk%93Qy4QdlQgxSizk$nPO{%kvPdBu*~hEjWKO`ta57`}KWykoQyMS@K>4dRnnK zS{fKDuC7#j77tA;6cBN#yT+@|YtcYob=EppkM&6K+47DWv8!7oT-3D`=YiqXJ!MKp zc};1oSRE^gJol6feI>aS`01Nllz$4#7fESY)K{Is=X(0)6<16v7K9Av8kG69)q%l* z>V{nI6B24ixjyMaH?KdlmJ4Lsc$I|){k|hYZmPG8Kh5GN&2ZBEOdBahd0TE|qWPhmS{uF&mI?+A}oy z!sCxD5zc7jneSLxYPIemFDi1?UF+q^heLXBA^cgTQKGxjV|HE$&WHzxyu`JRlgl42 z@xM7^-$VZOj{83J>6cG?A9>%F{+{36k{xrNe3$g_YjSLIslR@m9haL{b+CTZeVCie zlgAGI@5&E9_t?8Sk|*<8%af%-40*!u=FSuSru#6r{IPP|?j!$n%C&=~@oRfm{C+=q zraq}$=?vUpld7;1GpcJkZHD4NwKC>xfZ@f8n_oZ1dR1@2+Cczd)X8OKmI{v{A!FY=&#VPFSaU>D)^) ziE_8M%dF1X=^5&^hV&>cLX>l@%R~|Tx(bT zSl%O#KatDyWV~$ROIbHR!Zs@Vlyk0ly%N&Cf)=Gi{&6m>eU*%>W#q7_-#h8gUw+FF z{E5nlH3Q41zBYIfd7}jD+TS z*0SQGOKFO-KU@EUD|czEB#zqtr>~y!;=ZRJIs{%sw!iRV#^}hvuvB8kiDk|B&^4_V zW2CTLSYXsnq)$hy_5nDM%iS&)Ja{z^o1i~FD-V2hDNT+rxn zTAra*=@c;MvhyX4<-<|^Ie$(c8Ix7K)=#85kJ)#rYH;OEZ!z(Lr`lLZ-DIo9zsOGb4D2UZVP`im>qu3A-* z{^`iF>IAQ}|9f_Ei5oh~(#B5`Bjs&SXr{c4$d!dx$i3NVaeat?pgv^m#7oaGq|{s{ zedxtX;%J%M>6m|*|It-{zlc7BBjpvH39+#kM3zSbyTd!? zbdID2KJsgPR2}87^Nf#ip0(Onqu+EN=9WK3Zi5FsSozH^-x~eQyx-lhuROak&S}MY zjQ=p^-qM&)Z{JMGtaUQ_Ie&DiG)?%LxCZ%DYqz;UCq63j-Yeme+eJi-?6XevNtiug zdCoV?W=Ovy4DaK4pVfY#k0qTRO^X0Jm#MsX^Tvmh#ePWB;(g_gsNae@!fy(&>O47CKnJ-@L5Ev3xkti3^dRBu*|r zL*gI4$NDMX{qjHDO__V4JUd;Un6I)~D#|lr6{VX1b5>LV>>xBXYFj)P=D(aG=|B3B z*H1s~x3~P6`t}6JBjJh8i0Fi+>3R#L<*6)9p$&^3bh@EiCSFyl#Wj_|QEBlYEXx-Sh_Ead&WpUrM4%O}$9Z6AbkKD- z_eyV@NDmSd!8c3CenK>K@9&6jUhfjDnVyf=zajjD7NsL1K9HZuxViikfw}wC*YA5l z@28fNuh;^K{{LRdPRY%NefO~f>55v^d*3%p6=t)%og(QWzh1~~6ZBz*!-72)hG&aX{{NU+gWJzluKvBuaTLd)zV5Cz8M`E z94K$VCcQ+$!{f{3GX6PMwlF80c-SN87p}B@WPWA~#qHKs=vJELL(ZvfW%f`go)63P zWP4aT2K2FyPdemZZ+mhe(H5zRQFoW?p;P8mR*uxvp>SL~@M=;f{cT-^!t7#Su`GI% zE`ZwLLnxgWNdn>h#V(=E^&)v|dND2|_{a5OJA8#ErN=Q;HI zwdE@+)$szuti_F&Ea)g+F1RkcOd5CSr3#I_$QGe2TKk;;&|gm7MROfZpW%n7X#FuS zkL>V2GKb@RIt<^!&wkVK@pq)iFQ&9FKK^_w{f=+r52h30h+gn^l*<<$f9SRFMt_~I zLcSf{O#ZI41j%>W)y-uO7U{x;>QEmR`Hu_5>i5uPO`%XMA6@Vj7mB5Ft#K{yjnq)A zBwe|DSztf&y4TKl`t9d0MjxLe&#I53(L-mO^vFVt&UF;baZP(!n<2v*32im4ST}c) zRjzy=NPlsxG`zY}#9x+yxEI~iit{V0N^1wJ`m*1>wO7l=28Jrd zu?jIFQ&{0<$FyX$hJ?{gy~OG&s3u!GUKy7aKf|lVl2%pbG?~z|(dsM5EXrk5n_Mcb z^Q5368|S+M+_^d{K2{S#i_+neAh+z}ptW{}q$!D!%bzMpQ(pP_C0{x0@!u@kX}?*= z%JUXgS9Q&0h*Vd98GFYIRwV_O+2v9|(L)!xf~q`ay=kL53I0st9#t}9h20yN5brNCfb%*wegHKYxv^4NcI48DIJ!N%K`rB3~kv%0_Qq?3Hch3asy&QIado@uqNx`2l{4Y86Qs1ZF`e^ z58l1iC9re)I%^xlN6%XvEq2S^#zOXeN$k>llA^mc6e zN^03`szP5#UCXNEj!tTc&xe>>8|vv?0CoByN;6qKj{m%i0qv z&f(*O$O-xfy^+?5rn9Zw5;h%%xcH~_EO9J8?^MUtb#>h@)7WFfe9%0Q4>*@euDn=2 z9Mh#Cyz$|XKe%>rj1R5jz?T!nJR*Tp5fPITlo+!+sGUjP!2A#6)8KoiEPd^O&WuHc6+lihR(a2_NgN; zd{g(mr@)8Ff=s(6rnol8yt`RqREmnNO}m>&MmL)0#tIn9_*HUk3SMQXZz#)Nx|AkI znA|e!g^jS1IJ#HBW5ZAH{k+?*8;tSI^;&I)iFR(bWHhr?C)!1eStgR@sMX-+Ccjd0 z1D?IgWleM20NvH7FUnWGvbO2cG$}ofD7j@XV{x1$MlL^FkY-+G z2J`pT{k+3}2f2Ll@F#7Ai(`U~Kfm#GK@<5$cuPOe#5G!pLppbj`4OIH#&FYgKp+0d zF%H{39ftV$TbMYlyu%;em5v83_}9Z{Z%;Oog{6X5ciG3Je0a<2K=PkrX?{=K2F!}3 zd z|9R7v#L4B46SNr*9^d!6`47*92T}VeZntmT;Sj#We51{~8l>Obmc2n}gdZ=H%WMSI z&E9;L+*B)3fb@M0x#a`}@5ZNV2Vyl(K&@4f|l{1|!Ovig5!yDb_=HqiT{ z-9DBJAw0cJB2gCj&B9aaTEfFycwe_UR0h&z4IM>zTqs={i+k&Q)pXU6-2MUkop$1a zkDc(^_3(9yyrK^^w$IdN>B)=F7l=>Trk-!4k8Hm7EfNMk+$z_m;2Cw4@hmGnN{b^% zZtd?|HC0eP@V;A@y!|^f??WFRD$lNswejA0Gu@2Zo=(g_j5f_<2gzvMH@;;ay3fO# z+P)4SmiO3JACW5yU$W}Q40A#gH0bvo5pv5kC$ttn88?@oB?tq#1J)0|)HHy>BH`;c6W^qRLYgB2F5G(C0)g8dOp3VJ~y47nY^0b20W_G53h=WPnfHn zq2Ju52-SBPc$J`KgEcrD`I&fCi?3@e-gHt{Ekbe6J{-$zXh$)43T@%p!AalT$tSZ;;J3m zJpX)gku_Yiyidl>xjicne&2>|kKFdIIn+_)0k%YK!a7S4mP%zJ7Dd;rv5MO}Y^)+H z-7CXo85oqsJ-Yh9eO>#n8kHrh`+FrU^e%F7n(MEubxgecWU2F^Luqh?$Su6iPsY#X zCke`{yS6#-=TGk1MSkuq&sOIztdwM%fYNxymdvqGOmu5Ju&Ipi;r12ZGYr#vLK4QZRVk}jkc(msGYRYIMOPi8F?F! zD+_P3>VsCt$e?G9qs4BS+in}BEs2xMpCpif`bvKO0}sw|{5ndWggnRMOLp(q>p)rP9Q87DxPN>bHk4?zIXW3eDS@*9~yn{@W;mR zy~7{-J^c=v@P|HE4Tu3N*H*znEF8FC93Dhr#%uq(WmTHr=-#>qKuG%_z4n~? z>7P%#P#`>kJvcEV~8l~yg?uk?^f2`L^sdbLBDzd)P zQa1wG+Lq4PmM#lFzqRPeBX+*$V@vnH>DN!uwsvK1>rz(gGN(MErK}AW<@=VhYU7-C zMANb-^Jj;|aK)5iY{Tj>XWGczRqR?^D{XT0GM9smu+aO~?zVP1Va$)P`c3^d{`e_| z_QzSfIV61}3Lr?h?Biv%J`BkxABNRqS!o&d&|&pgR*bO(hOX27;Wk$-x$||i-hRl! z+a?_=DNNQ|UC-{G5^kMtOng~eCOb;V2)N@$XuW-wG`7jJvt6TG$C0wgtMwfqU)I(G z$DZ*cYfb)mhabOO@ppv54_V~b`mfUR+KwGYIu}~Ug8PQ{8!3I^_D-*0ElT0hPBj@0 z<-=kRmgYq`ZRvDEm+>o&d z^C?4UQ96|Qt=8R1j9mUwfxGgvyIph7KmKaLs&DMSY>~>)RuM{Up)&CX8(Dc+isb3V zF?q^TU!zN?o2*{8Iu?KG2CZv!eU;VI7FKnW+K_~chqw5U<46*Fuoc-PUF=;}cggYM ztoc(Bj8!Qd=CqI&TvnU`4~FJZs~EZb>GJ(+p8EB%*Y`d;oqaV=kY{b5dCve!bOt6m z+UhOjwj1N|`NxI$Rs!?gRs!y%lXc6b<4-0h#}5=>oUu`R$gP=-ow@Y`$xG_7$6TJO z4m5dF*=ns#W!1zf%XJ&xoeBlh)t61&o@>2z^gq zZ&3^bxl0E|t7l3t6Gp-Ja~$)U^POPE_qdIZKQiFNC#o~E@H@Ts8hVr#0dp?9U7p5D z;^guN2;Q9YKDuC+5A6Lb_)V9r+gC4fj?bcU!7bG6GSkP+VQkbEvh^D13-SXQ%3|AQ z&BxI78qlFMI6~wWzFs34U)MU_llzaJz2EhYz5nKKc6|_ep`1t~W3VzlE+wKY$2S!E zx{C4_eRiTU4xi%tet%em2F#B;;c0FwPLy}(qPSd|ZZf&tL*8eV%QTHq(&Q&hCgV7F zC?N)wKSut$ZqMV^y#BYnuVDW{ok!ui*5@thRcj4!p#24xJdS7;+I>F+a{ z)?tkB_8K_w4SpC;c&48U-s5Lu7=%rSAuRr6pJw62dj%05T*B&iviB7rpXq$iJP>>o~bQI^@fry!^(~gX_L)mHlB{dBOV>yVIIZ%4MJoFdXALqC`V8Gd`jZz`Gac@ z__u@JbLPy;uI*j%`@`fDQkLp`;^0YHebT9tQ&_p&t!43We?`$9T-UcSYds(5TUGK0 z9d(t;F)ne^dgtq5`VX;w;Wzx_=O66OwnEgb=m9MxQ{7VffsZu%Gr@nHK5nqU&DL_^fkX` zqr~L^U+lfO9Po?`m>guV2^)S}V9YsNZsC_7xZ-m=ZByv5E$1`kn({Snck~LC$ir4! z&ho(67FKrSdFr#lvXq$l9skD1)Kv!s9YaPLJTsMTazo8>77wi|IIw{-U56SpC4tT&e z|91UOFFE++>4$&soi7wTssE*sC>hU}aaGS#oqt|Hx3WR4z*cz1DYC ztd>^GRF^1DYll_G_MttqSl^(#fzGb&4^tXkJ;KN&HuhaNB(TF*}U$t6=Rx#t6)?PxvQQrmo49}B5;$M^Yc`W~zUx7M>; z>)EMurh09#O;yi!iImRy+<_;Z{>fi$M?HIpJa689-}p#qbDJTq51vb7p+^W`zBK(0 z^9uiP!*WtiGF}~%?S@;aWZkJ$g48_UANI)5TTWhf$1}Zm zU8Cbj()68^IN8KCX=T=H*L1h}qLu2_nz)5N>3`6Q_l%;ncOzORoCArilb}c%y5kZN zS-sH#G#}T_BG=?O;jGF;t|X4i`CT&(TDjx4 zPk)HII+AnIc8%7Rgpa@!>bo$=#F1Gwo!21!-Z_N-DFQ-zf8zwQ`Pez~g$$WIr{xy^ zK$&Yum(nDF&SjE0FIEyq&yRRy^v(m{`R%{_3EnWDNBd?Q@n+M{z)r0BsUIJ~S|3~L z<8mQ{w@(No;MLE!Fy2C!(&UmPx7K-^#L<07$6tTP@P{6rybRtRCFsiA8KWZu!&RAo z8=a;u%ZWF`;eBzwc1^31Fe1AmN4oE>^x0lC2@2w;I$Whe%XS9U;eM~^o4>>yJ!09O4V&S-HGER+zF;`H}L6h z6aS*j+#ae7S9>m4QDkczHkI$e!0eJDsRLax7CN4I?6%t34c`}<(VhPy*QVeb<5gC- zBOlFZQ97Unmuau&T3V8Eb9u_xXaD@v0mX+;{8#!9uxDMFtEtV2)=B9isXjMRzH7Xy zTf)eku%d9czIXUUc5!VFlh{72mr0=@ABwJUG_Thv2Uf4aC$pi_rEE#a^|B@8@m2Od;V^r4l$uq^^Mt0711EVT)w5d&&_zxK~eLaya#XDq= zu>4OI&a+{eKkxA4mkT|B%i4Az4&}t!4)O2s4u8_m|C|xxOo`}w_+yVi3uVFHK_~wB z5zlDmc~`kC{e%NE?Z-3mEH1yKYj?Sb8>bNr{PEN8YrSK-Fobt=9p41Vxn%v76$gxy zJUE)>?CaEDBp4^Ba7d@-Np_r5JQ&ta%9^IrJQ&CfE-S|A9t`u!igAWTa9`GaSBQ(t ziZM?x=F3%(i~Wb{PWQ}0ZgE-h7I-j_b6i%8^xi<|49W#AD+YTNElJS=4rK|K6=$hn z_+-ZPN>-fZDO%`zKz?yqG5Q2!gV6qR`S;ZlvzCruV+ow>KNR+edT;%3`k?6v-4THYGAN}Lgo#yA$ zouRbKCnA^Bogp~a8ifAl7s>B~|Nfo@-+Is5t8X~-3lFn?dduQvkh9u$>mvFaQb)uF zjiRiu7x*=Orm`Nc&nV+ub={$T9S&Ojv(O^JBA2P3B#{n_DZlw{xh=W#`4?Y&efN3f z)uHm7tjlHMqv!wZ3-w|j6-X|%MvC%Q1m;7RkbW`vpldNgUlL>+wB4fAs@v zo_+)UzsCxms{?8UVWR%u&Am@ny=&QK2~#h7>LWM);_G*PF7_=`E*9@{_gU}%!i}G$ z?m9<#yme1n*RfpN$i8diBj(PQ!&#D@4rfM3%t;nHhke;p{zRc{5Tk|idi5rjZmsP-pTx-JFA=1@UjIn>`Ojba@KrZn{JVwnEILKxt)^5YuNO)u{{QK7 zoY=w9j{3=Tz)z?yn<@fD`)`)32(*t$>x6Jy8yxCl>Nu`?8(Q1z_z{LH{*E~KS>J(; z7w{an+uIp?Bb_reVSQ4O!qf zi!2b#WFf8RkcYHP#M`x@r}+hv_2R2usmJz{Jgil@`UgI?V2U@FPxw}Xgrq1eEDbp_^++=tA$TH$Q9T9 z@p2y0o-PYcMXtKr+UJn&OG)=RaK1(U!6|!9zwaO4L|wK>o}KR6dPGWwbJcW7MAkOm zIuUZ}$Ey(b47O5e{n$#o6PlDBXu`GD?o49j@)ruynnhPky7$7v-@u;l3*>pLT-Ej| ziO%brSstvE#?0c%Do4+V5Fs0R6lWwyJew`ef7n&pj?y+`BRh+D*ja@2*4O zCd0BT9J94=g|(1b<=vH)D0~)qCkz+(_P_P1K!=tE?bpGddD`*tk$7!Xp3Hxr2!r%n z`JxQk_wdK=@x8;J_JHpl{)}lu3pBcC zK4117_=f)^xo`)_m5vX6_!E!s7%zFYc;Ll(g8xBs`LOV>hfj{fg_N7K1bhJ>sJYg3 z??MlTd1a-?hoO0uU4JjOkGk||TC7hlD;-Nb81NXE72_NahO3SPFqWq zlJE5>RM26`Wt6=RJDgE|106=T4IVRcAWjAWkX@@L5RzwqEMuiE*I zPu+X`k}u4S`p4qKfY0*T&&;Q??l5ooRn$3oB++V-e_euI;rV6Z)^?Qk)oK< z@3WnPR{K%yolQ432Mg=<_r`W)`WntqZj|TXV>hPb z#qCM8$=W-A7#Ta-$rn`M+8bj?W04NhfD4s>u#WN2X0}%--titRv%xxng>2wLu}<*N zWnP`YqCDX`fo1ktC$PZ4g+F&s>)bpxGd+fO4mwyl}A~l?ot%ijyo0~+-N$?LQ=76q zdkng_bu`PzoNJHwJ}l_Ph03MorN))JTN`ofthtk>JURJ)>+`tm~aIrOv7EO-EY9<4{( zTwJS9=PMLyhYnBFPY_>RajVdd{^oa6=x^*c)88R9Ida@h>umG}t~HEY{uGJ(#l5~c z^1#oJm<^APk>^yM+x6@!>n=ALbELmwy&xktFdV91c98-JPj_|tuX$OUNN1Dpovf3g zP3aO~=i1ZDNvxbZv-;Yv+<4#*PafP0J|8dN5I)D|fz4oTpsX&k{mV92F+CGA+0D9@ z73*@qyzslP7(dr|bOQsa(PA3fhaR2E`sg_IC$5ojm&rvRhjx#3p5L@_tPF?J6?NGO z0xt7>tc}u`#L@D6!jj#4{`Rbq12}K$SV5QeJrZS|9IPALnxH{Gy0ud5B^%#AxmVJbt~*`PmhoHDi}1(l z(}~J6?}$TKE^IBu*m@SJ=3m1#d|uwDJtLXuoXR(Oj0@qh56Ak{TF23IzF&6!tZg5? z?7tquwwxw(QSZeRqUWf?E%Ti3{z|=_+AL3O7i<*dbLm{uGljnkFTcC|gYw%x4Zo)< zzyBK9T{|`?gxAltGlR|&{_cCkyElC8$33TTW)OXU346z#kGe@JLi+u(RfMixDa-D9 z`g+|N#l4t98IB){2K++!zxC{)zrM4FP8FHG?3M33ckUy1{SW6s9G8~i^j`K`f;dO# zwl0bc(*`o?-OuP8NgwSqeyz=IHki+z!w>r|-jB@~Mh2UFqdf=on-W=Fo<7U_r$4mz zSNlzI?PA8oMSp~!r!3on_UYk@pau(Gpq*UbKbRndq`vASWjQV@O1--HKZYC0IV_p~)@_HONS9Aa5q zwRX5X?%JIzB_6i!fP-nyCzE4-)kgM@(IA5++wIUs+qmuudD_TUzFNgiV&?Lk@pRvJ zZoaI4+t2(EzR_2csDGuIUmO@O4zC>?lqo50=k%VkRDRMNG};=J4Ri;bjJWKwJok4J ziM)HWi`=<9&)CNI(xbFkYBIO+H^NHd_jOrj?jT_r$+C?t-XdYh!&~Jt{cCM!lMm$2{0Pf4@6v5%{J7$}Io{`) zl^&%v~{-v9l_(JTA5TSY(Ek@8I5)z7%vB$a4j=g8JGv*Kse#ru5F ztug23?~UKK{<;Hh{peTNtMx>Anbb3>{j)X+djn1WLTdlk-mUw$dUTW5MojPD%J{_- z*AK4UZ|@iGj*WcmUj_eVzruAY#S_$V8`-E!B?`KpU(?U3m;L>nyhA_7b#SZpv3`^9 zI+s6Ge!l;~|GM(l|M};CL60&&%Gt;M^M|BnPaGyR&FZBF>323(y0iPac$N_DkQGY~ zTy)|W_Wud_+`)FpvPES%)XuSU;y&4QJLHC_9rE%mtQ`VfN>h}mHrgRc9Bqee^Upte z@w#o^a8KiQh?rdg4H0P>%3t$_NUJtEbtN|1bG;pM`%hna+KT=?pO?8EB5aH|L>lO* zt?dwzt(PD6wy`Ilcw%?**4iOmT{4thYl=iIkx1ibvHPb+a?6;E)pOS7(E3j6wYZ

)E`NleeEDVTa(A7vYKPbC_OoZ0$JbK75~Jia+@wQE z6#0-**g#gjeJvM6di=7O9@nuozdey|?^&DA)-;gcgfV~Rm9Fu?&-c#aK!PJf@;F1A zyJ31RQV>DIWomPKu`c%DsJw;Mm6v*O$Ol{quarj`Pwq~RuG(es{Mo+ z1pdBv_%YXsPnkTK{PB$Z`r_dajlOsIqnC&eZd`8h=X<;(Ph1kC`33mXuLY*1l`v^P zp0SU?uy8zsrFgB&JbCXsw_Vc^CSyJvO z5AuO)7YA9wwTnZ1Tst`EUt|^+isO?ZWE~fZrLo*Sf4ck}zxbf%U+|Ouoeu4K?|YAz zXIF1_Pb(%5+16vf-Gnk3dx_quXMDPwcXme$<2y3cJ8NB~EL(E-$g$u|baK<1WNjwD zdSZA_v2S72&>~+weI2e2@|~5vSi&P47t3X~kgkXE*U^-F)2*g&_{E>H?9+ev5rzvM zY4L4+Z6;-l%XA!N#P?m(t?75rN}Bn#H1I#P`E)Dv8qI{`yITLqKha(#JhSd9{VnLk zpMDYC?sBEWKm-03hHvp5!^WR7la5Ci{OjSf&)sh%3rhvB?y}Dj_2DhA1Id4iMH+CS za_YlU-i2fJDGAYC=`y_^N|z7IbblwXO#g>s`SQ!^fKFghR&b$MD>Pbk*SrS<*9j~u zm!VkaDGAYC>B_Q>(kJ&9c(5qnxKO$-)M(LN=`uYLij_=bF8@M7opQhxlgs;`{s#K~ z&?VG)rJh#msc2$GH1hyiYg7-pe%I)biC0QE%FCl>Q4{oUvv1I zp5OhMdB3|Ml7rZM-qg5nE2Xp$KYMXju~$oJYQ;jsba=-vZUbw?UV+B8YuVFwnN-8AWMWYEFmR7rwTn+C6^RLzb*AH$7uAXEwCSp0$N| zCQMo$36DQ@Jo*Wl=egcCQX25*yS%f$GUDzaSKN>1x*ef$!8W_s=;4`s^3j98*`u@> z(_#2tye%20m3NKWl+cfDS`Yt!x83J!Un!r$ZD}8t>c(&^U;D~rHniOM+C<17t`k@$ zv!PhY_CkAYHD8+u*~f*_cU47+| z(G6})tXOiJ^R}jH#S&l9RTO0_N;lj52yC9x;OY^k0b`G|=Qm{_K0iXsgkR6{&h%_r z2cb*2@Q-6yICKp5*UaTaJ&YL}S@=p8z<=y}Bst-;-cf*l_?ra}n!2F7=Q5e}!EUjJd%3VRM@P75{ zY1ZZ5k~QS-ahJ8k!pO7KIBLen_?*%KNei~akX&Yy^KAA9|53J7j>E<;%}z0U#LBUi zU&^+oRr~fc-!4FP*8+@N4pKvx)2kOpP zN2V-mla5Rg0BNcgo9O+%GqA7<1((=n@)7Urd`y%YW&B^AlH0QT(V$i7O!Cx`E?yz& z_Tglejd=bgadP=tLdW}$J^K2muDv|Z^*qpbo^IF(lclqPx|GVG(i~PMm zUi6kj7Tz}L0C~=0r?=K{au&CBM>f@GaU0NQbE~a1aU0p}GIXfQx7y?Oj9=Uarmnz` zU#|E&;^2op%&*z|e1mXXlFjV1b+eZ5c)t5^H0{mnqd1PwMm63vtJmTVnu=QQtZCw5N=@wy>>-oho6-8^#>1U1&0g?BJ~3WwOJw z$(8x>9G55h+zE%vN{7;*anSGdFB=V6Fp}|e`6&{Am(Tvct{Z>!)MuDmu!lUOCt9Cd zu+9-jySY)m#^)8hT*6V_`OT8I@WJvnUB<}=u10wrLX*HmuC+M@njXW*<*7f{9JAqh z*WdEgrR4LbsXu31cZ(aLWPs8rXiyftb;)fKi9F_aQ}6^CGr13?%aP=6nfe_Xrmv2p zXN_NZ!4Ed~EBA zWf&D3&|5AAPkNmTj=Y`a-lz=u<})2Cf=~H4%vD&Mr%e>^Z*GNNrPU=@ZrU$J8ODX; z`LL{RY!54!KU(OierlUtE?fHQ53;_PGknyZ>WC!BLST^u5-qMlnW**8#@lf_N&?ZJ zJGq1^&o%%2_7m?YdvP5Z(ifQiwtiOt)j7NKBOkh8w~rq6_??ucy4^XeruJ=HmR2j7 z!kh@IQdlmzRx=$Y$~PAywo}Mmk^$t~-J7wjWX)$EtxBh5b0*#Acm#ZJWFAUO02=p=Yz#`@Zrl!NuX(W&^lC(N-T^ziyP zS1{Vsi|AKi$TKd)$H7Kxfy~c|RbW4Rnr5X}KHyw-o>Mo(v3xjLcs?;sF3-MXD_`}+ zT~8`6{qJKB@7w!Wd3HK+OWEJQYYt1=DyA*msafu@EX~o0>IAm0t(H~}R$}L5y+{mf z_Su^ zf3498&@PiFYNOW5hE!|Eh@c_2XE=e=I*s}}t1dDfVBygLd|S)H#`8vzAJq-|&UB68 z_;e6q;<}44ri1J|rhE9dmg)K&zPLV$w;4n7=maZ}f^YrdN~@-~QTr;M*Ik0qox;JE zQ+l)G%oU82 zjU)H`GP!+i`3HuVf9p$sroDEuJgYrg*B>)oIhIDfoGIaE4Rus)x#gc{_Z4Nw{kWR4 zjq!Qo*GrAmk}YLjB3pruj8z=n1<@yb0fnT8g7(cT>LCi+EDF{4M~EOI14lZ6Y^^=n zj_ttr_1i*(I(PohPq%-=*^eDG`D?Lrq~hm+#WT4)*t5Ko^^e<~S&oibQ68MWx>D^~ zJTR?LC=b?7AClcgSB)~-z0@Wh3EiRjeu=~(-!F4%-n?y;cK8L|O0y$eZtdB6J}lF- zp?R9b%H?~6x}SaP|DCyF-_if150-Q0Qtg$$N|i88j1B4N94pDb9o9Y$&8s<4x#!o~ zHu3rx->hvL>Q}CK{T=W7XoWVuudY4$()1ZtF3)=U(Xn05-*f1WbDn-K12)x#OefR7^rST2F&*4zqo9n2kX!E{+6^YnUpcL88$2BkI`OZE*S;LmhzrTb!(AR~yjJa5 zFq9W{9BeM=#$}}^O$!)i%4NmiTdLvRtdax3UsSm(nC3axQxxYC4TcoLqj9;2nI; z9|u17r{hn!>81@&&XMOWinsA4tMiMTvQ_Qw8Xc&VD_0H3F7>s!7sYB{b!K(#=wPL% zce(6CDQA`}F81__IV~Ld$lzTp%+hFKLq>*8RXbEtXbH7be=Tv4@Bff%Q|Q5V+G)_HbUEVW)}9@m z#L_c*FUj3`QdRj?T{1Hjw6FcwI=n#YLTE^;SE&0os%<0d%fC-H^n} zNCAcs9MTHoHW-V>{W2=XzsZ$EZxTY20b*QXi`K zj}j)p+oK&bHh-Tf-`8(D^10>d`zp=;=Urca|I2O}Ea$(oSe_-%#R`mii?mBTU?ncsyJG1ml2l4E)i3gtK%I#>VI3^ni~) zVJ$p<#82ln&&1VlCEK7OGO@QXVILh8mbgcpI&$@Q zPTK3ojEP45Pl++nzskX^nNlG~Q)Z-EuB?|SzTL$kt&Anjp|;t9qTtXilboW{dO5E9 z<<*4sa=iW^9`yx!H(d{!f4t6U$0mnvrCC1aTzfXT56kM0&^%3Ix(zIJ$ItiLiQOKFBmqf8TQcXl}YrDi*1+f5^!&w*={(TVy$ z5=6>eyHygNGQ#hs;3M@CZ2?>;T^fsf_WovH`sz5j{OR&=?4;hgtM52xJNoiYkZ0we zcid`|oTM0fP-bFHNb_?Py=x=3t_eX3I@iC)UUCcWy8N`)T>A4T*qimNnjCGNE4*@A zVe!f?x*(iNBI7gLg6B$oLX~oHtX@&`FuX4j2(w+%HVyCav){NaL>&C%_D)=nWwmQb z%Y^{dTx;#)i#!-+-(;ml^V0}XIt;coj9i{Q5NGfD(FOOvdXH^})^|U!K%P~XZY=}# zG9Z1jGC;jFS^$|fuYV{EhCjb{j8@xT+liem2iS0Y0=jT~ljnGOz>kY^=zE91;l$(N z$3Agm#jEo{33+||II5ajt>J~;#$SPHdmb-hVg_aO<*A-xUBU2Ji_^R z%M2G=^EtGi3=Az}4n%IM8=(c4l_p<4Ba^sxFhcve(s_c+SQ%)I4qX@Zx*O(P^Vm19 ze!;c9D}KLRFpC$-MjBhkTg1?*89Vc4sG={Nz3AM*WwM!Aqs35#VtKI8cdjjo&nzFm z6j_}tdC#x4)jDAtp%3bMFF78gMNIuH9AT|p9jYIp9U1+V0y`utbE>OQ1d+8E`i@%(BYG*R%jEb$hFt+qv?$cJ$*~uKBh}}mQ4fr)s1@2 zE%w#-Rhp>$`S$2pEP00B-Fl9rwq3}-xNhXRuIp4^Qr65qYt}|V<^|FzI*rV{=1S{2lS}ulptU+iyh{mI_|oWiPKj*}~?mJH^txowyFmie+_vXgbjw zb*FS$+o%&*);8({mbHySv3z+?ImdMZi}pM&6w7yJ2^hFeU|G2g#X3((i0&#AHcucF zi+<+1Q!L6iE)>gmW{K&EP^@GcbNSgq&)WV+7tj8WPp^&Jyt<)WVpQf?7#fSth3wHL z*F;_ov zo+i@}uPTl8*XP1kORJIOiDfx)W_q<;Cj3Kkp&Os%AzGKkyf*9m<3HM_R{x^kd8VFA z*L}P*f8L?LsRyk-#*Z-Rcf`RTI{3A36F=@}VbH%|Ab)Xu{FzUItJlBt@?a3w-ue1N z!M6TTu+cMyO?=9=#mCklO#BshKTeX(6wPQ>Q(< zebPvNz9V>br@EEz;3m?CK0F^5X~%T}i~PoQ0xOGsk~NL+6W0m4ve+j+x*kyyqPy~u za)S${>w6k4x~q(3u}^$-f%PvbJmejkaG|t4rqQCirjxRZ>jYL7d&if~e^nBqyV8Yj zz=hKFxJHZaij~FQ@zLeO%3|;Muzum83tr+v)2MZp#+7^iD7k&=@0Xo?;0ONlUHaF- zWslxD{R89G(r{Uh{3^3MSl7(j8j@&hF4>-?Yi9qzs#P-WNWvAX8%8SynNui#5j;F? z)W1jDsD>zst`t|T9WIZ{te{-(7P-(luaV2@SJfNg{e0lW>({ytS1j}-VN}PdAO91M zi@qM#8(3d+J862g!?RlKSYq1{ps{6Z@K%PZQv2QM*1b==e4H} zfi4%)JIYdjdE~{rfA|d&mOA}qa#^|WM4qG5to(-3qqI1J}|N`7OxwqaXRFwf|n8x(|H?kxWYkH)C{UV3>n0qxx;xBC@>Z zIU*D0r)kaBAkW?0M_K3|+YLLHyIsCVo~!FdSdHj5i^2p!}~TEy3n;HgO{!JQvRJIYZKa%l|uI z-l3QM(+G9NiH>hHhPL4O`UxumUM}nF*}C_X(;Ml%h0=RZ%@Y2;`P=WA{oOs!bL(pk zkNCaij3ekSl+-be%4K{E;pGyJ`iI{v_O#U-R_~@qU$_vJ~O2@|u#FYCYwG z%#xAO0?suU92gp?7HnnYM0!7tNyo*hk~!q}nPgH2&oO{6Tn;vN9tPji`ZC*oT!hzp zQQNRQqvPX#JjZ#Q)xPxQ#pz10AmX$?4H?3P}bop>J{b4luaI)A6 zS?GZ;xR5;Z(E~4Wt>fhKM@alPoPF~CyY2bSDd&vea2n$v^Z~S1w#sWNf{zYZz z!iCUwoX7xq)9qwI?Q2b=zfT6fHfl@p&h#Arn|++NuaPl6r*fO@AB_7EAKI)u@{VWX zI&vfVH+>nJ?h_P5&~Vvp?zFu5a9SxxCwk~1A8{dR^Wn5oj=DVbv{H_eIJx|hlAdqB z_iI<&a{S&WoI7{B$0GR;7k@Uy8CqMF9!;rRqyR*X1o|Hu)#VA^MPtviB%S1QuS>6% z0s5z{oyUK^Hm1os(M)dRWgso*yu;6a{B_J*%Z@L8yi8ypIFh5iBf+5T`r_eF zc)k(;F3llSNYTqsr{g@ufvKX9#J%}?Qx|L7cCDBc1O7P<)+inY*#1#P%c ztR4>*`GyO{()v>4$~}L$+_rmc^$CmTFZ+Id+`A>acBr(zI4;N7);2T=v41`)N)_Gk zF{fO$K3Cn-zD-N^sm@j`^esA4^={IZ)vVSwS}Qgx>CiOD2b^o&M)l!XT@jMEJ{+qf zTF1%d=?8q-jKA6D_*X7`w4?JCWyHyiKFpbT!eXfGKP2=bV^2E1sEny?(w>aL6J%9o zNBbb+G8TV_9Fq6Yp*+xU6DICwVazt9ev0GcZ#p0@-(V2d-oamJiH89jfAWua=wHJo zKK>Rzi>;W(ZpBuFCiJ$?MuaB(jVAPHI!)v&{?KA+!H+m~`r5Mxk)Q9#Rd>n0oKSi6 zVUaFeC$Ln$I)kOUxHDMr6W56}wrT@Dq9jCjKKi>+Ukqc;wTWiZF|&2PVrzMIdySR+ z^Vcl@el zQp4e2w4G-grkSs}zaXFb`x_TNbm$pRGhR=9%RGy@rT+f0%J}%mDjDN* zGaRCcT=JfJv{9M2IS#i-81m>=xw7OfVJ&Zc_F6iRvHz^im6aZ)1$uCWJhm*jxGWgS z_&KLnS3Gs!asRJ(@!3~>?e2HbK5%okLWfXg8+^{R8yzf_lRe$xb>;g-5Xs9&onfo( zmcvM3GzQ9llUm73(L*+_;8+`mH%f+`1f3o}s1{ZpS z{5M^MJT=mdzOgCF>jxDGFmdg*6F;27f;P>Ea9#2d!TMMV51G}x2*>kbwc1wvc#1CM zyw$cMSa-_Bo~w1Id_d>mLiy^$YPHSy2@hT9G+ZcMJ}fYBp;({v(1k9=g<^fmgN2U8 zg<^f$gJtzaDAwmZSm#rm3HeLaPTtWvMz zLh&B(V3~~>iuG*|7WM!x6zdTW7WM-!6zjVltjP|kT`WBV?V|s_VRCo=m7ix%^& z&8?rac6eZTpgK?*l%ctPS*J0&p(nn)O4>EDXZ}#B-mTNazKOw8MrCb@?X}-08%@Yu zVdmVkvz7en##Rf8as+UO^wP(apjsxCj!Qgjlp9@qZ3D&aH@vg9fv^F&u%Y4@W-BV2 zv~8Zn25dy{O9lT`a@AdSJJ5&e!^&a@Hpj~4PY@y}@BZO~u0MbN9rPL0_8yV7O6OI| z)sZnhGp{Ad5Mh`p!q7FFZAr!|GWV-EE{LVo(lU-R2ivESjScFGAIh9 zI5Nya#cF9_Sk|{v71q}+4vY-5UOtPAr`OLsEtx`oKI1ay+0#cpx|Aj%&bjP!QPNmR zoLv5B!Fyy$-&xNbdEbs#-FWfuu)7`K%m`?OQ&I@sPYX%2L%Ef`<@yb}Wr`JhxVO=v@TY@=DdH(29+x3+`rAG1|$$^^% z|8@~1WcvqBpj6hi%@l42!K*B?j%@I`csYp6diou_gT{0`{J5-7fz@dEN2yOi);rq7_m z`eN_{pJ)11e00Uf2jXJ@uy&i-CAozII)t^>%51I9nd#n`}yQg}AD1bSAy zGzPMxd0tRCXcc;tE#3`dQ z`D6X%Suq|II=E>K^Ua<`9Txe-s!d?@=m+vF_$lD zmzuqx^>Am}U|^X&p)AlooGfiBAI(ayfI64GO_j#-;Xo%YBp;JFx%}}Gzx=~p&-vsN zg+J5BPkCwB$G@zl2Dlt|t9|vd^kVkbzItotOgui*ynkKg(qv$waiiu~x%_d$_u20p zI&bkoH+_2VgKpWqCI>TQn-4m*n6OtYb@y;ER_k)mRTNR^iwVL+vJ2g%!PO&738t6+ zeNrGP^Vqu9$Efz(v(q+(7D!S3qcp_Zrq-UqRwbMxJFt%?o&I#2f%?|;Ur1j1a7>ok z#j*B6J2==z)?Nt3p*>W0s&lQq5Q3G&(f-K`CjI!dSC#&BLt>tCcd;n@+DP{=lG@W! z=_ts?c%~dDD$C{3QMVg#d?Up7N_xq2%7>K;<)yz|ATQKs{3@?B9M3>#_GO>1)`%vh zM*y8mj)jD#F^QGS&k)ROj=kyBhpR8$mOlQ&=;A>}BG?c$^BW{F#O*=?6JmZq(S zls{Si{nXrFoc`47FFWwx9yoNLW8~S{9KO1ySzl)-=M|jY*H!FcazWob<{7Ne+G=63 zZ$W0>ru8-aiq}`z?p81GAH1=$IuUPq2cHR><~#53v){N(;Kzk7^~JOLiZJnbd<&gP z{YpHenPL8WniEY}nUEsq}n%l=AUvMGyMw*^Z)@5L|T9>8i!gf&m zDJ*^IdU2NETzmUYXI}d6cRo(NI7Oaac}~`go3kWSoffRnhSoLD#rm{Mc(&J$|MP-R zf9G3=GPfY=8;I?hy(uPj&2p2vq=8t7PI8)KJZo0oY`q}ug55=FP$u?p%0v4GRF6z- z|Fo*d(%;ta3IXa|Kg(51&gpvP8%Hjz=cVk6$T_hi(xhQX&rKVUd2{Xv(eRmZvYEkh z*-v&6l~uKCHoI%D9+L@o&bBBGS9?~{P%Ai!Cd$inKf|_CA))iOb4J6a%}ejM-FKs$ zlxl`KWGf#WnE&l}biXS(FR6obIa2$&N>`P1UFj^cki4TG6FGdyRgRi>@w$^#kv#Jw zpLs@B@grJXZu!3z8BOOabSX^&=v;PNE{&DM(SC#L_J45c^A278+SeWTj(xS?Ky2$y z%-QIgDUQ#Hgye8E15&uv&IMh<+r-ZdzdFItEC^+TF3L~|^S z#zKu>X`T@eKUaRDIB|aB50>$tcZRL_VfIuyjq6?d1k}0gJWl7=OFTGAb8|Z(PSe#M z9P$7c!oO=gIOY|Cqx{$J%RPUj+-~^67tVk3;Rk+!Zejc+*@kSbDbFVN)|PKZ-*de! zNdNN%pO`yu|9>ACf(MMX=$J%pvZ(7+X{ohtbA)S9(Y(`W7FaXh#AO++gRU;g^=!A( z({x?#XtGu+hOHN5n+*r|YIC zM2W(qpF3r`<r8HT-X4lQ>G$wI!`RM}rZ&QAB@rnQZ@!Oa)d8j<2!=_7LN@Bf( zcHj@Jl9d^i_2tTFwODGcr&5?>b1HRMXD%K3%cZl#Qa4e1i@GL3ml*Ku3roE)H^#S+ z`k81}&w{fl>u1L8kuh8==}gb%r#-K`=TU zRxaNyz_)k5DgVZOzV#4emNl8DzoB$RWn)pd7F$nC)kw8#x*Pqfp!w4+2$ zq^FR1i%Wa;K4B7hd%t6r>M70ZZ1!ke-jN-X_c#X7gi|(z*_CNpl}-V3F1zkZr`v~P z@*0wVNgSQm@b$g#yYP$;{c;cbpQ65t_*rVc&WqM$!P+&E8gzXZGPiuZzC~qI+cuuR z%Y=F8x^tWoXkKR#%-W1`e&gQ>enXGa;+QSB*7=>p(YE3_NBwx&e@#B`i?@FD-qBiH zv6Jh;x}?eIDowW=xJyJc*^1j!M@S~Zk7HcHQGRG2X|}QnPqfVGyjl2yj9Yo++4|D) zLnp@h$p2|So}nooj^|eSolfu3O0Xc}!uTD>^5JAH-_39|?P2XkA3atFg~)^thy2I2 zj+4vJk@!D+YWVn@fBd!6*l+C!d6u?Mz0Y-MphXj{*839IQnGVfQC1afv@~}Gb22>V z%}VEDq1d-jYq)0VjO(;7i;%;wuQ_4YGNk#QtqdWKR!+d-f8>b&)Lf4bz5!zMp^)`~s;Gt$j+7Kv4O zEmfEG7Pzd^<$#jnU}ZRdNJ%rA<9cC@2odFO#0iti751~~Q~slFG+7{Dtggf_E<3!7 z%TM|p;R(a9=?wc0{^{_9fi~ZF@TU&(y~Cd|Vc$Fa$sgZ4{Fz$~9oW-^fj(&Cx!D>N z!ZEL!_!bX5<`JjUM?S^Zo>)E*mN7*8HsN>%Q*pz}UYgf0u4lX;hLycImJdg1ZeC`Z z;gDCj5IMfWlP>cL!5Okhjsne}R_Y}mj@mq7=}O~JHgIL@#qZR8CuB#(SJln-3H zIJQ2bT^!0Cu3a2kC($mBt&?aM2VH<`9Y@=C?|S9><(z4^`460fVbv~lTa!i%Zf-G52>n+tDRGVg$ou&y&W&C2YGB@YP(2;^6*m0Y65ePrQp_OMOL7=ty{XrtFpt`oXVAJ zW#UwIq-P*@mi^g%^NTWHYspA|ajZ1Fx>7_?2ZmP*()?ogwBr2As?yrQs=n-ZZ|&8x zv4NqAY|~7Ps06!LVyP^wmF((RX`njpR@10tb)g|d7cGf4dtj98O3_8AB~CST1ZiG5 zKa%C-v9{gSgzHFa&hXDis9U8pD-`CD24*p<66Lk$({7<^94#yw5`L4B>d2ZIu z_R)#GkFDr@u)W@wc_T%yUVHffoENOg#O(!=H7% z>3GnBKm3o=XV034YNw#faO8KRy-3n>`WYvqE}Gnu_D)tDF#aipLmP**;IiV}>%kyz za9J_#^I(`)R*d^Cg8Q9%Cv9M> zMV3|vjnXqPO4V+Y%}Zy+2CMa3^p{k-yG92p<;qn9GV!@KL9|%ytIn*h9UZLn^e&fk zmBhAPTzVzR#^u}SXwz-amOWU{v-bKHkj8vv0eAv6I@KZ}IN%P1DqIgI=zwBZKJcgbr-NP+hmb zM56BGcT?I_wlzqJn+tuxo?h*dBuh?Hs82q#J-mJ z_k^Sa{_(q|@lR=TgvqTv{w1+;`B{Q^`J}^7`1qfe{Q~{=LU~5N$y9e4YAQyjrm`Mo z(-*{epM%W8sO@Hht=y;%8m*4Sx0uSkNy5^ud8=Gm_(=OKOFvP({Dso<7DtQSl4AoQ zSVBGqrS`G%XN@X6R;szYjCH1wxw57k@eiY}!sc-|(` zso2}C>Qrb`x-@O=mdhkoE`O=O?sUb|GsgzsvcrLgz3Ki%@+`cSPPeGbZ|gub9g3o+ zmK0YF4EIOl&&y?JtRdq_*8cKWi4Y)Xw>x3benstrXs=%pJ;de2SH?ckHS~jRAN^Wi z8e#C`*Zg=Up2lr$T#|I%Yyu8+i{p}D+>*kfuaC6gvgY%x9t=%$c8uE+7+OyL_{iKd zcl+b7KEoQzt>wf!VZ-fEvT|+tib_@HZS+^x7h)wPEB~&Qyr*1T=XjvyBrdba0vj8TrjF^9nJDHqmFVbnBiG!~nmRtcXa*xLGPQ^|{`o|WrW3iQlT*Y% z$UsnkMWm~{wK1N(L>Q2<{hUy=Cu2aEjG0`;<YmdReI z9hJn&gtvvKTwuKBFAJJUr$-GysNyXWUU-whH^x9vnZCv#|Ksq7nYTW%0}r#w8ep$ zt6LJmr>w1Z1whLhc8BR_{)06tcN^<-D?fxs^eJ2Xn!lAb^Rr(*XYVWyevXW&ed|O* z{6f=HRuGAa%ih*X=S{x{NAn?!rd1vs@&Ol;Hsz7Vle?3nnODu- z=Q5ib+AX~KBjaGD-{DWcEAP^n_+uCO;^7bP((#}Pf4;-Ftz7U--%>g}Ven_1jQ`^_ zfQ3KfUc|F9nH+b|K4#sBZ#O$^yJfGle0V-ArG4W5R3FwYMw0tgx-?J2v0mfBQa#r` z7Wx}G!olZ8{Zzg*zE;A&j)*m<=|uK$p?E$lWEB^R^?HpK-IXq68`lXeFmRz*Z`Nqh zUFo6>;W~junZtDgE6bR*PcD*a%;k>|dOq^Zt-Vuvk3Q;m3qSn5mTd;Z z#$0`uP`Sa^OmZtW!>dF|A@6_Vl&tD{mDg;#-gKbpGxQvITDH}WAPmp^T0e+|$3GsP z_=HLO@eGNMOtAyvwtZ-NZxWDO6i5(pt=kp1dT>lfhR}7J2S@WTjGwoAa7;Ib(DRxE zPA-3%DGCdpYV=H@1zZXxZr8|>U?ox@33se$t`8mrRW*<<4Kfz zX^?(G(m>wuyD9num~WJ&UFoCCk>qaKb^pXTI`8|kML+5J!K>FiPT#f8`xcEjC$aOS z)Y!8Bdb6zr7#Zq3>(P(dSTBngCFt~GPv0W9@8%+&Wx}`o>h_y`#lGdu`vfUJiPVc+ zj7z>#hHrHF-(H^}x`_+jqIx0OuGDI*kZ1m!$;w2wU?X~8D)C<>SKXFad@*NecZ z?pdsI)=a)F~EMALGn;rSmw2N%%4n6AsA zE4}|Ldcw+dNE*RmzgYGX)^rMxy8IdPJATO37u@{mTMqrJ;eAakqrJ;zUSzKp!yw+5 zCGF_lipz^FhxgFc?`X1HQlE$L9vn@dVde6t$iKf`@tWP9fA$;Qxi-hjb5aMV_Pp67 z1wT;x7Ut`ONujkt`n`LooG0Na-~5`Lr)9`rzIlgCNKvVk;S9E1!*2_Wx%>k8Z{A7& zdC@1I=zo&3#(YM#qrK<0Y?53LRJVn~^x5NXV+cK*XIOTJ8J0sG-SMZjWq1Q4!|Vu^ zr3|LWzn+$ihCk1c;akwS9CRs7(1puxi>K3=#L4C9pLpSye=_{bNq=1Z);kY)Z|!`C z&~Z7pRq(5L%r z7qz)93?C^wW-C&b_#f8B%N+mX=U5(_t5grC`p#_P2IajW&A$@ty34LR)9D9C({5-g z1D3uJx{@^I@<$3}Z}07s=DzzCkD?2x+b7Tk!qtF+7#$}*5q)VHeJ++mcyP~azH#F4 znQy!P!KuGr-f~|zAnvDJK5gM`39187Ac$f5v}tJg2eow)J36wohSE4v;-uDAo>w zwW9|QImLzIfwfZ#4;~}axKO;EJy?_hTqxEq9xO0$p;)_nuqaQsP^>*XSd>3pC$L%_ z|MbyC`NoCPwU;N2=mT6Rmev6pSMK>EFIDcB*l!j^U(=AlCWjmHZ1_;tg6w%KT40)A0ap+9vrJTTF1%d z*=P9PZ=SsSZ5Qr*8s!Tenu%Ve>lT~EM`sm3_o1x zw>6f#=O@e0^WJ^VvPX~k?&Y+5r~@W$_oNP@l>?^ALlQ|`13Fy0Fx|d+E}lbsgyhi+ zUVX}y*DdL*lGjoDMg~)YI~t}-3r9|9mOVlHOVv`e+3Q64pRirm-=?jJ%=oFLCyC)NhKM4fJ73Fj@w(%-d64sIqk1{KTAn>t867N@-Co#>%qp5#7Sr|ejZ&Z~)3CGIv|~2J{+YvEZ==NoaT4-M_u}@2uU+X?uS1Z}0i*!@s=fJGtv< zvNyhbd1ue!mia*)&AK1LGfCvn>ZCI0-nj1hWS>96WA&8ZP~v9n!EN=FqwT|)AO2QP zNrTo+jR#IOBVNo2&U)MP1Bc7=NF+d1R~0(d7OPO46g2okNG}%f{@m_o+(K8&^<2Ai|kxIj$PLNvf9<_a9Oui1{d`V zDTB+}MOLmpCymr&qzo=NkgQz&j$L{8x>q?|v@ay9UDaGom2twc|6O~p`ru#Y?)37n zZrfPj5y!h)GOy{UaR;4!e{xCxQog8hSVv-IwlT==q2vCtGUpJqNhoXe&DPGW4~xSS zk1%j(k<`DAh{sv)emwTXtWV1_X2O<$oX*mPPU7M zpE2_iQR|B|9ogrJv~4s`|KZuCHenZ1|DIILRn5~>87*wT{pG|3U-<0LA7eeq+$hQ8 ztV6_kP{3@{pA?vm&cpuT=G*N96F?}_29Mz z;=8c9t;LFXs5u*ZdsS(WeeqqSLX!U@sF>-Vik3(Ac0hf$b`Ww{n@CQPuCHuwB#*sn zEA}Gw-&5qJ-{Z1+oz=E#uBHlg=Zx=+-}NWAj@##=C$=5VH`=_t(p)t}D#bLZ6mp?; zncO%r-R|QXs_w^oyX#1S(C6vBP{sN{c&tB@pKf1hb%T1KbwT$cs4Lb7f)g(83l*z> zPVA*MzJILVIdRMt-#b?CoVXqyZ8t;rsWDG=x|%8@CHJRdMBM# z_N7epZ{qMbt z(`5{DtW1)B&rEp3HamBJ@e%Tw`y?cvgXaUMwzY*9_x0mMnODE^zww^<#-?_02n7u481B>`|AUC5O>lS+d!MAX)rR=2{%vfT$Wtikk=A+oIdx^1eACEO$$EiB&Feht-rZ2oBTPudUd&&FZxORM*f>38D37Yv)N?OH#b zj2TgQ{J`0_^UecqT;X}_9Ms=99(ICTP2%1^ z<&qVv~Fd=VrXRo_YnZr^ZPgIR5a7qi@{t;EC)V>GcG8D?;)j zkh~QjEPXkFNR7GFz&#V~-Aj69f25Pi)EzQ7(SLuPLF)g=JqfHY;xs;xq>nTr_3tCa zTpo{&p;_`h=3&lh<7if%2c5Lpc$$T)nn%AO^1!2GdZ*s{?(J9~j1n8G@2L#e3bFwz z@B3ONx2@XyH|FN6(*E8N`$pV6Ia|B9N$Hl++R_)^tN2iw$B)X<>bjO){=FiyUb8>j z+CH}Hk;EqZm#uz=T$(oHX{zwVSl5~86$4WQ2U&+Q!oCv^;@iG^7LEPeT~-l zGWx9XV$WZ`eBp+-|81A#-CM5{cWLY7X^T3SboHcnX=vW3=iv_h09a#Vq4WtIe8-4`lFD`WdJj$ZnzIE!#uCqFG zmBScGGvzRrj7<01$|#3Au2&B1{e@#T_NXn`gXAxRYM!RbuEMs*%-hRCEqqqD)8Fd1nt1u1Z6fj zxAfaay=CIrwUIR{IS*w5S5jrV2F z7$g7czvm(3spe>^>?uqa?z;Z4Bi8?)$H?#WJ{p;)mDvIEAm$SJB@z|YjU%(T{#+hEG6CHb(M!CrL>KIr)x*tb9UF~S~s8jj|Jlam$f4IrU@7erUxA3jubgfxx7dH3?@U^#-a80p; zOpGZ9?#s7wpxxAa?_W5tCLZ%%<~-h<+py$RlD~P^qu9K&=uS!`XG8Lrm!@4=j0anh zEOok?N6UTH3%^-C;ccHgZm@qWckV9tz{k5 zOuD&`x@Gm+Zm5u8+{n^0d-=SDb4S0U)hn< z>Hfpe&$|$Qm?$<{-)!-~Q2J!@0mMOq^%n+)o?F z!(Q;g@Y<)?cG^(u;JBS#uNft5NcB5a>g9psM$wOp-W2g!U4gw`zLREErHlNb&qwOz;9b5C zM?9p5F#xHT=TV1)u>vW=!B~RS%kh|F2V)IVFUPkW4jZfL<)|*-rph=u|AVu(IPs_h zM*R=>3Fxx{vbHPvc91Od^M_^Nq%Z$wGJxuQ)8+v>uhTUgW8`R^4;gnMb`i{%h}L--h?K=z7upCRv`n&X$(F z26ioZwsUZ0vOt~{n!hl4pfmks(U5D%_*x=;8fE*#q@aq`1mK}} zp45|%0ftZN>6)w7^`U=k*#gbliFI74*)i=?3Z__%LUCTOU z=YsHU%X_=KI?hbaIiqckApPx&y5-w-eeLpby19ohn$)7&ESnmKFOvUVYvg(G$+~61 zJhoPSfnB-u6g*?bz1y_;N9aJ(y+NI;`S%|YmY~*0&<|MuFjU`xA8nE&8pi`;okJL# zi!*L9#(~=$6u0$3c3v>l=DS7qFJjv`2jjBsKiF7WYrlfP5s}*u2r^oNnzccl&ugaQoUZzT3_J0$KkX7HY*=o+(S4hYMV;gf^BrBiCW$WrPxZpsta#hdMbPj6k>oT~k z&&bN<)eGyRig7hnSo3`1r4zP!`tN)FF8C&nTtl4HHm9?Fu?}{JFPkLqXz5}s;7v{P z1YeTD@{juIw3+@@%ey-XbB-u&;!QZxKHvIMJyx$Bz^H12{Z~tce6#9T&-wIR5=o`P z+VBS(j#{|&`m-M6`V93}=iAL~3o*2f_vz0ikup#2s!HP8&bL$yC4F5<$6EfqN?Fp5 zEoz4*oV5>Qf#vhs(o!9_slvK^^vQoab(?QpwLker|B>X|w4`{s+>vC~+||j{V4zy8 z?L4PQVX_a>o)qf8HqWp{?GS?!$(Co;ahoc~3&*lMjydXzFQ0H9>-R&%t#wV>lg)|B zojmeU?-pL+b0CvP`O-}~S*>#xIlI<0a(3-`Wa8ydB!zCRGs%|f=Te5+D;bz;$OQ7Q zQopHN{~ffoaNa}lQKfW#pw~ojQ~%?69GKxDhlNW{k?tKN)l|Y~u~Ti7NQu;c&svyX zkHh9Z_1aR+(NtlLv)<>1&+R^I-{tS?dEef1#Qkdhj8-}=Q%~)Z2d5SU<6OP@{a&d| z)Ta+5l}h_Io!k8D);P2o6>SsDPiw7P2#X))(*|_xP}{-D2WwyW;U-*>_ClUro#dAg zB~raVQ*YkG!MkDyMR~He893hW@EBCDJ#buWkV9W8@5k593Q{!rzc>}|I9 zC-;tDDLhp9t3_?TANCiZ;TTOHVq>&6742)l^YkmREouj6Md}}iL!N4mrpg#$y6Z!i z^*#HS-~H&_n>_m$*4DY|EN{Z(jRGz6JHqeuWGUBql1bFvqmvF;>#p`M^^G@_jrQF- zHjwX>gW{55;V~#n-g-QF z+GaJ6)}7CMV&BO-owxnMZAbp_lHBtW`Cg#h8@gJ)7ntPOQ2TXN`JH|@Yg;Ka(la?J zJgqzQ8@AWaFPe~*H(_yGT?p$3eufjCaYE~a_WfXl;TXmv4mjaC+IWDQdL4%+47jZ^ zxF;e!4>)BE#=L^~#)%t0IB2gbY9BcH=baCny;{%Du90|t?2oa>=J|m$U-$gLsS}0DCn zkpGo2^6#CCe!gOlb$;{r>wa+4f6)eHos{GImb!1wUWU$gv#0Z;GQct}-kS`xI^Wf@ ztZzSqEZ6aVa6bboI2ntyNd9rYYvZTQO9;<6$k8yH?}iv*Xak0EqWy^RF^5eEPO#iNP5=~P*^I5p)Gc7MT5B)KAgr6%x=|A;j7YIL;!O^hL0Q}7CoE!Mm*zwEcI0tc z9WTSKymLg)uDo-^o1Og1J4gIv#6=y>J4d`lxIP{6QUA$zBy0YEM!0Sjy)ELT4d$II ze$L^_J6HTd#6{laoh!oi#fXn|=AAEo$>GX7U%bQN!ZsvpnR;C08cq4wA4Q*G>nhw+Lequ{vV!Vk=ju^%{G9AiIl`di{# z|7M)v^q=1O!g)x{2@m~S91nYK&O#ilv>!!y= z{v%nrUeajkf3=HpL$Y$ctkKf{%9VG#{gcC$cf9qutUhK<<6j)R@{YIKb_WP6W8`P+ z`R| z87+DCuD>4F@v}>3Oyl19w4cfT{Wjix*4^2&qKDqD$re{j}_E zPU?mBG1?CNJrn#G&uO#Tp0zI77*GCWIk%oyBB@jkkYm@qo342HwYU6%XBj7oyXu>R z@|v9f<|(V>Gf|5>`#Kl5Eo)!SEzw0Eapr|O@>CwT&?ZmHRXsN+_eT#tu$Me-s$p8e`?$!kAT z&zS1vWi?k*WpAm2Tiv|w*lRx1`W5QrxTH>o@7njenYLUn)aCgK`Lt=Bm22RUj5!je z>S2eW`qucJb+3MdLkd*Zc)OJ+bZZ-Nc>TKN!8&(d%XY*^?Rir@7ME$kUn2WO{X|-M5{k{;VT~ zO8t3FQn*@wbWM=G{t%D)W7BWS!|D#WtqBd&`lRbh;;<$)zc4&FVHK-?-Wt~#(z>pm zRM?RG^-uFlS&RqUku3S|@mT(4;i*nnQ)Rl?aq(Yf9p2PG>f_vJJX+k;W2VFnn1*K@ zCR+wxG0YmT*199SAOAuLNB!bxd$yY2+3P9w2&F1$boi@YU0S?clcB|PP<`?T604OPyRqm5_bm=%{V z>vSvMtoFov#>`FNN3w8L^E6dvOZ?^wZdvmG-g^JrX`{{JmNvRqTicSJRc#$>)-+GG z59XvVXK7UPW$s$v5^9!&l(2`kwa6pCt!*olSJt$p-}9081;|2*Y^jwmooo6h#*YLv zoh;$GcBL`bUgngul{s~THmv2LeL;@0uW6T!sd5UDy2cBatC~mGF*kQ#HhZHNj{hU= ze4McBezon0c>VN0eH~Nv!K*BF{om<(SCrkoSMR_56WjmxXS8FknCIj5Rq)oZ|me}=o(Lt%JO}Sj@;B8cuQS$4r$9=ft zqAA^bQV#UfYwb@vS~_ZVW%kCC8u{+F^MA*_Y_#O_!YMbr;myOY`#Njv+rpjW;%Ltan}!w@++6 zMu{;?B!4?N*5T1K)*Of3{Hx|^s_=gK8K2!|$Ad;ZxHIjEvS3fY>RH9)>)0|cNuO1e zqO)dGYYvc{JDvpmyMB{zjO6KvCEs1uw$ToYxt_!|xqM?sGxx^Wr$UzrO(I#^&jS*J z_VZv8Q`=8CuL5S?W$gz)+_Z(F?SXUadF6*nWfwVa@P&(xUoq^bBj{JS?=8ujX7`<` zQUhnEOU6!lkH@6CzB?G#!`mbw-Bhy_IOAGk|mEl9@2~C=h63hJocVL zH#zkGwNGUYNx3mT%l9J-z0c!g!h?O+i&~w~bo+IJ@>@sL%F*_Daff9}IS>x1caIHQ z)Q%*Y{L8n`R?VUJr0)ENn`TU1^r;2pU9$g>>-m@F>CyoC;A7Gi@=6r@idL4g-9|Es zcF42eW#)O_c7#1@3-%!S=cm;?n)m~Z;qj1OBul?k&C^ubPvXC0vzPXr@~wkzWlgxNxEXV1w$0W#$lUqf#^pc# z(x_Y)W$WxPy_M(H@4il)IWbvxb4_&M2@1Ja=TR!epj2kb?;GC#Np6Dy7oChu%OHO1d*BzvTr(E^D7sb}};W!hIK{n1X zp4gbe_-b?BtTz8|_%1Eu!FP9k_Ka<(&AEMWJa}c-Be`E@wV0hqmNNOX#GoGOb1Yhq z!ubS*_0CtQD`;3(>Yb~{Z5zAdXKU(R^Tu4&JWZ7YgnP_>Z=dtu-+W>O<-3QtU-9F? zz);0I-e3K0u6)*IVqDJ0NjV0RtP3uFWWxS``Tg*b>_?^Rf*fnIDY7hBDa+yNhZ}}! zXYszvLt+^1Oy?%$tqbD*n!X&&jN`t?O*-lc+B;PQ6xv@(LQMC zF>!4?^gW~($x>F>6VD;X3HHp?|7!c6GpBrqxkZud;j_ABec86OOCB1LZhL;mJh^=z z8<8w_ULoP>o8L>sbe~hx>+fmdSI=5Au2a+>!)y*vZ@(Uw5jLy6@*|P_^~U4LQ*Wwy znv!cYCw_SH7OQvK;e6H$n~0sP2d5_QFkPS*2Iny!nBLb3CSRdCRUQE9>FAuh&>px6 z3Uz&nU+aEA`yN?`grR&Ei&|M~TKux4Osp)!G6xUa_oit$IV8_l*JFp;Knz5`TLLdq zPg<(uH&sSUys78SKJI-NRqj9I{1acI?&P{2Xzwr0c`f~GlA-j$_sh}p7`OF}{Hk}Z zL!Of-P@!Qziys(AH1s157<)pA8R@%CafjuWw|$XDO`i}ZlD~aSr~N*3aItla`nKb6jl`uJ=z7-;=uJSf_KlGiBxpK(!+^3+w2N7J6I5A=BQ)YYFk`J;VSHhZdhnku6tzhArKSGw-r>gKzdgQfR9 z=BV>kxBF%qZ$2VvBP}0I(zy1$5rWk-C(ApwV~^UBR7Uxizdly;XdiRonBB%tJn+x` z#m2zFcg&lWS^AjYNuwao|Clt6|C?hVX?)Qdf09XhZ%9(j#GNI-;CU(HqOBN|h3gL% zDYXfnJbjDDlc#T~=4q;o6MOa@_O3bKx@FRR?AsMtg9q>2nkz5G(VNm|>M}e_p8Y%C zlTJCTzw;-L{q+UEzN~0D#Cst!a~{|X$x;rNiB0sqmy6okPOG!Oex_bqUro4pjYeB6 zV-A5`YLom(B!8b>&C^sFBYf}p^KH|9e#KFDP!7fRH+^|C_Ah__SM%t1Z`!}#Tlvl#ny%wMQ11VdeU0E*w<$fHXAIs$C3mn5 zT<)upw>*DQ6^HMQA0xcvEk~={I#&2~8$arHSbyou!H}%y)>z5^ZldivVTt`UmYwcRO zymw`1dbzGfp1994JSoPIC;x?2CEwRdd!)Xw{^B=%q8;PD(ZXu@{P(qzo*#)0O8&O# z@z``GOCCQpXpH<)dq^*mg-6RscpRm!g4x`!zWSu~&(`%ZCw&{dgLN{0{UaZiTBj(S zR^HmTW-D)xCr|y;GD(aXuqRLb^LVTrvecF8bZKAM|EX*D*#FsWSF$co`@$US@_~mR zR$FSb*ma9Uq8@xYiM;mthK-3FH9vLi#7$i)+LvLE+9E#^$={b%^E6dP3g6s|Hri#< zfsg)~XNEQvcdqLv?X3eZ0L_xucS;)}ukT9Qisp5gha?v-t?$}?ag(=R`!zh|uy94o z0bA8hIe8-a%faKx)26F=nkwVPu8%)7>+~}&UGGho-n_8#I&mlEX^+XvrNyj|StlP( zpQbO)kx{`OuO4#DitnHJhGahF{OzO=w47<*wkON4ddr!zwQ{zy#l5!q1?MNOy$_x~ z%Zp!Yd>}3y>`Qy`z#02IKXBSb><1q>?GD*cG!8@Bz{xtT!`co=$Ht;wcyO*QTX;Ck z9p)A1W&ZAQfD>QC*FP3|W&f}mB5X+g?Iz~(c(5HAs^6)HNBfN8JoSu)YqN*8LES*I zrt4cyUQ;)bEL@K|Jk(>PC=cIX)Aj$BU(ygEP;H?c&_v za1qbWgPU>B;{xBZh95X(;Kc){ZhC&;TZ_i_;Ra_cA>PiSDq8m7d=t>)1mCWPA2|J# z7Z2RNjT@IC_>MK=f%9&bI1S`6`0k>d&+?eG@GcF{2JqpjAMHCVXYdiJUu+-v$Qpj& zqiXnpkFMbdKBk5r_}ChL;FjjtPSP~KMm+EdHT=MtXLxxA&RFF6fn$qTHsJI(#Iv@C zdrwiq8-|;7pf-=QzCTO9_|+u7{j2}E`LKVz+oC5&oNESQddP4a! zULp1JJfOkT|N4y?c#wKI9+a?O7yX7PzXwI<=%f#+m+v77`>^OYi8LVE9vMTCdbu9e z;OT$mV5~)oa4;q#MK~C{k$O44qrubvnij@*q+X84HF)}8IhYF|ML3uMC;;Bn!t6G)nqk(_`N+u9xTg5eM~@`43Vr$CDEFhoW5f&Tgp&@4axfo5if{~180zPECJnC#wPQp^j;9?C=7C7P zY4JElDMcZU(Is#&|3r$Ug?TDcgoF7kQZL8PHF)}8%a(aBQiNlIQq;}y>omL`bPQx3 zjnr$$^Ah%#q8tZB)5N?R$-<>E_^%wy&yjjLeyhRL|H{F99;uh(1r475R}SX?NIs6H z%0!9#_)}LLvGu1ne2#rG`pfEjt(^CY=h{8v^EmQ0&{nx`>x}j@SGIMoShee>%=xvF`Z zDwBonjXU2~Suu0;`jiiSe&fn#GVf_$-q*XleMx(Nr@gAZEq&GQ>NI&-@@BEbp{zQS zxVpdnuPiIs^-x>&yx@DIr^9HxZy#bi)VgX+O>v(I~;4)&4G9Jr0eOW zq;Q&4Xx6NICly=sU)REZTcLeeTcMn2AG8zOAL2K-=Lbgo*w5Ns#qx>{6Ss3#qGJyJ@WEX{zihY&%Ul^oV3({wx`9)Q?a*EqH?xZ-QcjFNroH8;lFwUj*Tlc&9 zO`j5nH=OXXADrN2ls)O6$_WM}f7#D)cnr!?CVN?=#3r>z^DJARu%E+Ydzo46@p#C8 zBnyw$F^wnxD>LNZ{`Y)0yUo=U+KD21TVMn&M z$y@)9>|Na1*45wH$6I&ho(*{~;lj4#qG(Q9OZ1wjGw)Bv2|gU$-@d53vu$~A zcUQ-mJVP>53XyW%hr+C5Jftqz{3@&u;9-4W@5-hp?6GIHN$rt{iRc>I>TXuPYA$W_ ze_#C5-M0OC(~-OPc0do}(fjYV*-J9ym6}ZI(FT%$vRQ zfwRZv#RF%2^!&i-Z{f%OBx}+%fOG8=ztB#?fNvrSr_H?y6Jo@}&GkmYaZN4EBXH`0 zXBRkqlII7`_~ZG3a~{tRoIMZE4}5L+*?94|w#ItP%Rg|gc@b~8sEV#hz`2&?ae{M= z3O}yHgn0(eew7ywoc&SH51ea5o*y{p@%+Hq)ARhm_pjkMT<{S!{J_VHlCF_y7~8+W zJu1cU59=ei#T%W5v3R)0q*xped~6Lr@NuGE`GIpj{3eLPYjqubS5flCFv5fw@o?`Z zO1S+*jRQY$_UZA9Z3f>X^_!CVTUx>QO#R|`;Ov>h*(@5K4}4PU7sexx!P(2jE;|qL z4U5BrW0$3$c(|vgSQs8Z@M$&tz^B*n17{8AIZbEva&CFZ0y!K3Lf&cm3BWU=QbPP!O>k)k~7D@`UIFP|CL zku3IjJj6$e@-SaOit;eGK#KA(A3=)n(9W2{AX$0hc1E3M&Vyv(`k7M~;X<Bp%i|NS1VY_OK>Git@02LW=UR=0b|_ zFb3|Luw>_n>oi=f>yRuq{YmQLU!3~LIuOairIwTKIDes0OF!zS&=Jprtxa$Sp9emKwhPHoF!)1|WU!+yeLYycJf zh6mY%LKW^A;Vxs(2wT-oAxxzHYxwd0lgE=}f$(Oj8`V5b73LE!AHC(skIZ}GsAtbw z?@O%zc%FWF_uLNoU`KPu()PZ#{=RnkevrJ5Q9tET`!?Z)ZF1p#VY6I&pU*u{Qpon? zJbN57Kk6Ac`HQe0=7j;bFvRh~ zfLj>$vEne;1J2%5SQl{*)Xxru#n@o|Nau>${YY{TPpvn1MO}&6P2I1nA6eSebdPNMP#^9~ zHh*4O_j^^fkJMJR(^8s$tnhfO=(FTsHIJ5Y@AzxlyDxdyhX?P2FFsbxlTjiWFVduE zvGJm`j4uhwSljJCZ=9e%q@E4-)A_G6kseJ;@p|C#(jn-KHK)i z7Z$#+?D`Z;Ju=OYmZtUTwErXZiS%e%iq|KPCr^Fyc=FVzYM!RbXi4JrXN)?yd-l_( z@J=x17P3Cc@vc?9O-;UYu*`BTOFf?_gDT^FYcjYN8+XVT`WNyU9h}=~|7I9?k?Y&o zyuc;{DHrQIo9ksszsG}}NPeEC${30N<1Jd7zWBj=uP^#eX!&YFOUtqj=_Up~pODG6 z&1F(e8E=_PuCnn7M|*K>9}|6O-~*5)u}H|s(Y?H|FDI! zp02(0mU?V!Z%t{ow0=Gv_r4H}dzxq2>ofJz`mB({>TS`!3R~4qOKJYOvd5FB&Q>Icq#kjF__+Nb9S&RW;=1Fyvi&V4anJaF!H z@%+HKcg6Dqr(Sq|;I=ms<_mca4py`sQ9pJrsqgl9NEec&uk?7R8%R-}Jbm|YCx57y zNEUlM9-S{_;~DALV{IdgJ>wi6;v+?QXh%pEp7D-7y5F0PXHSQR_K9S%$K%O!Kifpd zo;>%mc|7zHNS1U>a_pf$L9+1Zn4Q<*n_-(KuFVsfkDA-K7#}$w=h7yt=>i|@3$kBZ zqu;ddG;4mZYY~N`$eP*X$x}bI>=R=K?9n{VHZFKPdFEXn59Nwv$!m`%&%Ddy$usZr zc&wggNmq5bH&wWgreo0+lkfi1f|vP5&Ny*bjlXg+e@fK@wR5{#+ve8ZPpCQ4Bwx;v zcYd|Vll?q7KetPM%}n0<)z;sOOUC*Bsmt5D`sNcG_jR?_w1l@ct@Y1f%zwi^l>VXC8kX?PPY1)- zzsKm6z4tv5&Vgj9M;=c-{bg*E$5T&#Sr1P={pH$t7@O+pFFl@DzqPZtb7IGCyG@)q z(S45;-w^tD`qs`UsY^XG$8US<%uPqV<_BMXigulIuA2M4zt2gYQ=h*;hmzj+r|a=z zbJVy$r457Gaj^f=`60MBH#Hm^Jx*|&qsE-z-W(N9aQe5H6FzX;BPp}rAGELjK097h zP+qq~G$8e_k7F*6hx|Z>>ig^AA&-%wJoWV1YqO``KHKBbcA;sp^+cX|uE&#Sp6l_D z$4HjE_IUE_FM2%IcCy%0T^IE_&#>;+zN0pqxpdAM8=jH7Z`5xe<+>;O%5?qyg<$Do>g^kuKZfyWANBN&alAZzBW;>8rJnE`J9Mt7X#l6}@e9vK7;wfF z?O!ziY%XjV@d(4*7i_p_nATczV&YLhXy?S^8QCx%IQu~O#WsWUjIZYh&i$62A2`o0 zdilWldA`<*2hLWX=LgPnu(2QI3qDp9;ThLB40eFCU+npT^DL_82hQ`Qu^;CJxAXGs zXdH&~g7Z9R>_@qSTRz#lBXAEFCA?kd94@~`h{hc7gO9A?2Toh^;(?EL{ICmrj41qO z7jEhYYIc$KaiTFl9N^)FIpV$zsz-oH`8`Qj~}EAz64n=Gde6sbu51&f&@PUJQ?iaTLjtuIn9p z^1K)0CWj}_doe!Y@FbV>GN#Mp$@5-}Pe%4ock;X!1D;PsT-0ag5=fRZyT#$j^KOh! zJ3M*bjqw?WC(pYvyfPb}+blfQ<=#}mmdlsEe#1{MJNG->r;%QF-m9%`Nzbabjx}qVo$tbQv~;x8_X&|& zX>`AdvRG`PZFP#;o}SM4{Bj{QD+*37^1 zuIN{0y_D<5tCI#>p2vI9 zACr!lb?ptwW<%qii=qE#tgs`eV;r#k5OCJ%go*vYu`%`|J~-hM^9#H$lzg~eNrVll zYb;6Xah#_fkB*bs<`f=Oc=I!Jul9fm6iN>`&%Cj$0&C^t&ADeK}@aa1r z_#eyG|H_I}SqGN!UJIU8Zrw|7V9Ao!epzUd*KbS~T-q*lt?bWr2y1hlxSrxiT?P02 zzzBm<1#7hn_ItF7>b`ibb^#A%!aftf!+3CmlNX%V_9zJxV#LGEo(|!{eRuq9Pu@!p z`!}}N9;YYVn~(j%J^I+M)*e0SVeLqGw8-8lWqyV&uv0F$wLG%5m6(URqxqekXN_YM zWq@R<(`Pz7dHMm5Cr=;X@#NVX^?35^jmA8b8TpH3$!E&zY$vbt?2n%1@Z{Ma^?35^ zk9z6Kvp?$b>O`@*8ts*S&DuYG6Wn3Hi@)L8cj?$?;k3UUdMtv2a}Dy=wcdB^`1ku-3P*9*9>m=Ls>J18E-Q-tTeCAA8gm&Wz-rqgV52exLM~?V4ZT zKKv%u)%o*#>f-kPc3b{t8aMt&20!xq@5vyz_WUM~Ex##)!8TTIzGIi#BqvEEf4*1q zG*wvte(>T4$87Z6oTqsQNbdFT;8s|sJik;jkUYPPj4b$mLdt`tLRom_VVL%t`TId^ zR(s_{iR3R2j|V%EEPX{aPg7-##DC4V*E{a7ci;Ch+Eco3-CFDQVKpCLXrA0QtGm0m zqit!|;?BOLl*zv=wp}RUnWJ#DGS)O^U&~RxC^lF*(pMzaM~+$Tk|?RP_D!F=jQe6_>CZ>?wT(z zu~;Va8F?dE^OUx>)$MKFT`T+B`rDVZENeZm?JTp3xv%pcIQHVzinfm4p4FXwE4zAo zR>}t*J0v{qsXrmmzEJ1AewopRDFe=fSUaSQ_-*@4hFe=SKjMSg`h#=FVZc!4OtBw4 zwjL*pt*hZ3tSdTK;vB3`JPuojYu(bcQm05)h?!gMZ>capwK|w5ue&7vGSObqL20S5 z52NQ$8?uxkTq{IZ4id^Q?e|DKlGRp^OY^%NE}IXRVHahOl)+{7vJ5Wj6H<(;sWM79 zCcg0gsXskwpWBPgnWlBLNiSfNrYwEvi;^+q^Gitvy>jME*rhg+(@6gQy_%<~!o81I zJ$c;ttM9!3hqr#{s)s4Z>i#`?4e;RW(H68$Ui)5X@D5=j+G%XhXB>O1f6T(;<&V{= zEIhYX+0#_v9-Skex#!Kx9&et`dK<1G+tlRF74mRYhrNz2%efZ|H)-z_wf3ZCTz`9_ zPNQYiU+hs^u)uW_Elfs`sRbreCPEKZ#?0w4cFRN*>;7zAHl52lD8k0NYwKi zlgK(AX#J=^Z;4OdQYL8JAAu1Dr7hrZeNPzIFv3vY_!)+~jItxWAA@#4@|WFp104KN z9@2_rDTA1YeRNHGHlFJxUd+W>D^LG(gTxyYO&eu^WJy~!Pg8}p)zjaeefkYM-0+=S zx9FU~8fD0SV@5~svgPf4o$|(gIuGXDNEREeknrT^wM0z!EOakFdmX1eB9yb1b@B0- zJP5hSXWAfG+?K#?TqX~~wge8B)*Ve7VQ8BnMjGO9xXWl?|@_00#vX%dp zgT}}&wMX-#I8UCob(LdJp0;(h!=rt7wsd(s)FmWKJG(}sr2jRaiH~IA@ygxWT^64A z>#6O3GG}>y%gft-a?ELW*EeVB?$0}CSt@6xOuLe^uYH|G8;#chU}zcb5_{AZ`H@Ke zc3I8SRGBDz$DMZJ>p$?oRtxrd`R#jikGu5g&CRn9JgB#)r?aEKx376dYiIx5mA&2V z{jy_qc<1WQ?w0wh^Sqv=OD+jcZUcXE^ffJ5$PiW;` zO}GvB;^B`SaXk3IY0tz9=RqMxJlwQb!ci9Cxxr~O-nqePSNM^S77zQubuUrJia0*@ zF=lYjKQ>?=M|jvfj>F>@-mk(OCp_P#;uH;==> z4Zf$Sl@;+gm&Ic}7sn$kxc5vc@xi-A5$1JXeDL9pAMwFY6-7pf#_V-7ZQz<0tGQQ47bBeq@rU#}D2tO1L;};FCp(H&s+c z-&qI#<`kJC$C#Tu0)M?|XbU{kMC0&;0iT}w&6FedkS@vs+|D;ce#h}SA9#E|c=mF_ zb3X9BQ@?%X7@iN@&bLn*Cd?ns2OgdeJK?c-`^oRvPQrj&nEjnFaD%@=G|W5Bb%1Eh zNf_{1HT=L26eV1k2HfBWiNbk^sEXz}_}M8kTaMm&!CPwhfgdaypO^H3&l81{GA0b? zpCjs>2YhboM?BJDbpzb&JXC(i@yT=WRiemYqH!3`4}N$JKky@J_<ZKDrOeePB zHhbsG@7NZ?fUglnjuMT-a4zr#HT=L^MG3c1)bfkG2R~XAPVx|pFkpnY^1ywJsCRDg z<3!;-R@CCbh5LBXke{$%7LFtC6GT0J@RLO0KT*`;!H=7^5%Lo@ZZEh`PQ$@NTuU4H zDWc$Qq9H%-cF~ak6mc&S4Z{&8#&E-l+POO9*J9B)o!A53DQe-taGx4roD=sFQI7+B zsc6W7yDPxpzv57!q)blo9VwG@m{OL?$=HFEY3KS%St{oS1vz(e>e6c)z`0>T&Yc}QH);SU<&ESm z_gx%2H&Mz`IX5lHIoz>xvj%W(UXXKyW9JqP;M}qx=SauSts21jx`Lde96Pse0OvLZ zIY&EoZrcFP?Fw>^b?n@}0h~J&l|TOanN_mdr^XKduDMU7fZxz96s1IiVouZjPOM7UcB$rileP_jK%>RFHF`!`a*b z&dCKiCpmUbEy&sIa87Fg=k$V{lN~!}7UZ1baPHLr&bkD%31%M<99Eu^#6^N|~E;U&qeb4d85P0O!FC;5?)t z=YCFp&S?PW+=86@J9cs%3CUYOJx;DWA!TxMy$UIl^9ZFZmGj63aLy~pd4N;y^Bcf< zR0BAIiAb58T#rQZa(Z(`u2~{^IlVb8 z*ENy6oYiaXrpoTZb^b{sXFa%y*OoxQ92Te|Yx^D4Kz zPHV&L+;(pueIM5jw@vy$z28;m&DrmF<$594d3O~>xOR#{t=E6E-S-;D!%oftr(OHu z`a2kEYaOmJ#^=Q!-1a}XX6S_h-$NAP8eklTYq#KB%k%uexhCiNfm6RcKX9&*!5^lZ zd;{lN0`csA1Jcj6Dvt}CYfktPFDcqIpTI4jxP}zRC!fHlh$37Qio;+dIQxE{A2`=& zJU?*Sf|pM4FrC4&2mT!>|K4dutvC_&%Z*9y@TeZ)O-AxY_seIKbJzvhZ-=j?;qs08x(ve3od) zVQ%=i&xgKco#c11G4Hi{l9Z{O`-fsqY$e|i`u9BdI>EW2V=H4Jl9$)xq~AmGa&F|< z$(W0j$;lXvl*!4Mj+DvCTmUJPlQ{%ZCMR4-nVig7kTN-K&X<>SW2b&HS3=6nv#vn$rhOZSlXVG_ zmouK*(RZ@$K+5FYLn(7}dUG(=Hb`DOJx=93qJ>prb`g;%RUAC;NU*3(-g$cQB_>074?YLgjN9ukr>9M^ZezCr0eQx_P zxLJRL*}C1rgR{ofb*}D35hld!H|MqZx}Mkl;KZKPk2RBa-|EMjlr<#rVn1;5%;N-S zO~<+6v-5ETXB|a6O9$LwVLEUVSM4ch?}7aPo9LjFv-j}-1_|Yta%%eW*Ok9JoSHxR zIV+l(DYND&<&WfTS8%Qq@iIOa-Ounii|%Kv>)1(MMe?TK<1D(L@fyd@qWc-csyOu; z*%vD-MtZ*S~O0PfJ&>t7J*$7RcXcBrbLIPYIFs zna3o*^Is!7I*G4+P~3k}Z^2sAFtoWi3>a#CD(f%J-hb>X%iQ^Ln+``a?;xLpw zINY4i#&z86FT~*q1I|7Hzr!+t3!G~x#4|4HAM5p)3;Vzi6h&Bn$6+`J_)d-=@xkYd zBCLz!_=EvJOcY^W<%I#CLjaNCqFxyA7Exq`XdDJx!AI8c10Pkx4}7%ahyCD3iXvk~ z*+`^2l5eD4CjB~90Jr!Pk0bb=qQo;U+^lP3F2aMeKDBd$;fB}JiXVL-Yfg^?e2S=rhXePl z0E2_RiS?kz0X|(cB9|! zgFb|7b{+?K93J-pHNu0>5;cC#iMutxI4AwWL89I{!Dowx9Jm(*7#uC42a9?f;D?BY z9JuKR41)vrTv3k${7_K~Pg-!(-xvl5?!!er4)7yHEj%2!>DLT{gLXAf)Z+k;!{a`x zMtJZruQ(^}xD0SF6!p#tezd6B2#2}(UDh?(XN2iz37`GbwSk@^|J)ePXN@vBma{f` z&f%o|kc~z2T!H!Ycyvfr!(&gWAOJ!si8zee)bQ;%~CrOeIw%QU_o)Xps%z)8L$dDH$Y zjh_BjJ71T&%HqUE)(}Wu&fiE}uZ^<)K=Sg&eH3NH8U@MA`8$oC{?|NZZG)7>NuILa zL5gs`pcLtUwUspzl9$)xWKD&X$vHe>ESHmY8B(U5qm;5VPRf3C37o%AIrN}qKc*nB z$2qnj=ZlV=;~Ky@z98pIj-3-q=A`U*E6DjriSM;h*49Ygy6^RStiO@GoZg&#ic;q0 z^!j|(+eltJy|Ib)H&P}i>v5z^PS*2CnVhWok-VH<8O>J8+?-zhJft9}*N#~8BYD&A zaUP+RrE;=|fRt(He5K6I>6KAyLC)$vq^Z&@e0%+3qtP3_aig=Jn*Q{<%+2EKNqfoV zq?Vq=3wzeI!tW&IU=~dFyJQQdK3vp`2R=eHwgERdYZBs(7FE&q3BD#pM#(YeCJo@bio#`SfM<+o9G)=X z%-8W_K5S{A{J`ye295@bx{ou@FV?WLT zewrw7?usV z#h;pn!Jjg*atEI#>T!clui*#IwI|{+R}9Y!zAD9L$}#39ZQv_K5$42R81Ur;5ZPNa z4nz9E_o?9r&fJ)AVY*2_ICkSlUVz~y4>^zJ5AN5C#^)wH_+g^P!SMjmS)y@x(hUAa zQRF~TFAVsZ1Q0n$G!DZ#z-QO+18)%}+`*z&F4zlxh$x(vX2O6G-qMVFj;MET@Iyu6 zohxeb;KxmVg#3g(Tr>9zir`b#RBSeoBjqTuE;PXT+JQ(g%0}PJ&qDP5(9N-H? zLk`@n0R{)|g`yq@_|c*v2kv763=Z7Kih3O2$BBjT!UdC>nC$J}JQ9 z!2JeMj|2Q<(U1f8;sArAP4pB|j|042G~~d&NK{4dF~Z#;>T!U_=fvGvBRqIm?$iZy z^V{n668W`M)H^45muP4=ZpH?~NIUM+MLiDiZcz)*xp6NGFgS4chPc-DfO@C_`9Ju>MJq~c|!>zBty;@X7%Mte(q8ogzxSFPJXDZ>!ny;TRqP88^F0i12|vX0L~2?z)9I4WtPz< zN?9uBrVZfStYprugm3c_IPXb0^q_5Ni-No!=avOI?{(}X50Jd|$>V&TQs(BoFO9DU z&Cjh1a(>O>+@=AX+ZN>X(!PB`POo3yp&;j7X?#6s8SPY%^FfDm=LT@@Qjqf-k)5=m z;U#cB6!FsDM-=4sI7b%beAuybR0B9i7v%h=W9OI#aE>j=`G{lZxCU^JFUa|rW9Nhh zaPC@=^E-~6yETAw_Xcq8(E!eg4d9$qGADg#a|xV}ryP3FacOcvUXOE1LC)_wc1~>o z=d=cJPHzC`jDnosOXKT7%Y9}+&Lu}Ih+d$a(e5pqZ`0^ zTmv{yYyjuU4dCQj2a;Ts;w=VnR0nd$n=R41Qewetqudw2d zbuR-q*5+-?^w;F^S46E{{VDmKy!Ds4@XOLLT;GhtU^n=NHT=M-vtB%K%FFWu=bB>dhuz>WiXvPi#D+NC z;9Tn?zFnWQdmF$n7S%SYH6(Q$O~VsbkbF>;V6aDA+hr&kpcgL=pDny)fVwW`Yw2JHXj1kK@ySfnyutu#F?` z-9_W@*bQ#!-lIksa0|1i6NYnuPjvh^2l(eikx8PS9pJYTK%`kT4#PRXC)e-;pHjmQ zd}<9p@M)s(Q+DK`K0_2cEj(`9(_;_P{Kx~`zZON0lz~OnIjs9fe(DH6;7<}j~k++L_VZfgwfXF*U<1pj{`1v*bz~3qAd}d)#3j z;)nY}QSaQ~7uE0szqp1U_$4*`z~3$E*$jSZ8qaLTO+H)x6Ynz7%SB_GNhA1sL@hiR z?kfTe4&3h*^*F%)Q#9nj{k{N$1NW7p9tZeUq9F(Fs{;%U+}DVD9N_O44LNZCA;93c zR`dg+9tZdbMMDnUF9sMK9}@krsK){R5z&wX_eTQ^4%{CT^*F$<6Ad|VUmsv_;J!iB z;{d-=G~~ej@c@GZ_f4W62lyvMLk`?G2N)cQfPYFf@~z^yP1NH6|Ey@pf%|g-h8?&+FY0lC-!2+*;Qm5@!GZgWq8x3-(=6j|2RBq9F(F zCjtyRaDQLa;{gAGXvl&4$pC``_YXxq4)7m|h8(z`3NScu|Cgx80sdprkOOy|A3qW7 zr=lJQ_|u{x2kvJA3_EcDOw{85e^xZ)z#ZH1oM1l}^*F$PAsTYvem=mk1NSdQJr3|+ ziH01wu|q}M3+~^DdK}j+U)(8*& zvZ&cZJ2N-Gxi0rQ`M*x`JO4G`K8a7?d`8NnhjQLQ3+I}McS~`TpUB3dbzCoAxuUzR zqqnCgxuUjbM@OoHMO!dQ&+jVXs7w2p3Ckk{kftRUw(j-8tq-eV+(S=!?AN* zLC*6X&hZW4oKTR{OZ#pGIWKV1zI(}>w52^t;JnbWb(98^C#VLCz1R@%5njc}xR1k1NReVaLwn3vzzM;XI)r z=SLmR6C1#JQbEo*KWU#Q7v#K7;$M++=t1jKTR~oLE_zBq&KuJBdQdyt3v%A*a4u>9 zXGa4#7dL>jvjLo^Hh^GKY!UAHZh)2=g?#Yw%lYpg{$ zy*#z+mw9==JRb>uF0kJI}8GVT0oK|8NVfzc1v%q=@GXV!p@N)V{d}Y#r}e)|qvifs z1316c0M73;fb;Q!oZkNG_Zq&r0L~vbfb%B>IlcXxryIce zOanNdZ2;$U1v$NafnPL$^ZA0D-unI51v$NW-ERwWdTWFi3UYeuqZbQudTZD}6y&U4 zYd2L!3g6T_Z<%`0+b6XD;`ulHa8q&1`&svDYg^K@s;y(qn&zo(ZSCFNy&Y}+eeGTS zE9c5PQ9D{XTAJnUsp4@)`#|Xwy>8(Szbkl-*g8y9ucK=FxLn*;@A(zB588ya z56YAFpmkT@JIL?LL=pVsFvJJ5V;mp+L{S90y!hbjIeuX1(W1!uqH%ou!54@k8;HhX zumPO5==p(fSi=u|qZ)qT>=neE*aZG=QDhTQYzXrPH#q$#@#!;Ev>yYXCrUVbrwC!_ zrwG5BsPq6$D@BpvqOnbc0k<$CYJ>r|Fe9BXq#Jxx>Nj4F6;bLK=K${$1sg5u*#W*>6d5Dx zg#ouPW1TSA0Y1+0qt5}yHo{r`$2~zbJ|AJgcNOI~w!>k49yslVc*cc$chQ)OJOH=0 zyGM;M;1*_2Ck%FgPjvh^2l&~d$RttE4se@)F($=fI0yLT8h+qYYWRUqb^Ndm{9;jL znrNJ-xWT83V$%_#R)_EdpCRhm3qG@kANXE1{J{4WA8!1x>p)Qz z?K8pm6OHX855V6hitI1yg#ka003xp!jl*zG@B?c2fzJ{p9O(+{EclV4aFR}J!hS24 zgXFh&KJeK!{J>jk_<ekC2r~_=P?X-n6HG#Jx|oL2YkNc2S4~xqTxAllTVg^_$?4^ z6^;4f0ADC-;lXep9bj@Hp?xmt02Y8og$btK`0D}Yf>7pJ7c(-WCfqPki!GXI+)Z+l}6%9FXuL>|YmW!?s z^*F$7USMqr_exO}?Nf30i+UX3@i}p?t`QzQEO*)l?stn?TCjVK=$WG4Il<2oweWD@ zK0CnR!2L#1j|2Q1(U1f8n*t0D+;0~3IKa;p4LNYfX*o}@w}^Ti;BOTTIdH!%z_0`N z+eJMN@OOxY9JntIFgWO^-zn;GfL|aQa^QYffWd+LLQ#(c{36ki12=Z4Xnn$ciKxc` z9_JtKOKXG&5BnnOg1Pz49>P}gf1Tua{(B1MNc_W64n36f4mLQCaCpfZWMk1h_oKpj zBm@JZ*W4&WBrmVWIZP=_mD_H!aA?yl_y|&dpLFubs>j2SqtIPl3Fg3kM11mvU}VGACt^B1P+4b= zFR#bBbptrJX#nT84dC3a0h~KDfOE$NaPHIq&Yerx_VI5&e185H$PdA4~lY*Nr5ss#}?%D(muW*r`In}D9GuJ zb-NYhWWQrjw2XF7fxKlDbJFJbD1noGm_bon_e_DjwtAcs8^AfK0i2T?z&WL4PRf32 z37qV=4T_fiv=qo&_8#Z-f}HIA4T{=1BL(u>dCDN6{8G-D1v%Rt&be;86A=WdHc|%gM{)+Ioabx%H*7@l%;V}?+-13)63H%3i9@(@%5m2YWt;m z^VFM<+5T2uPO~Yrb78@>dz`k`E7MM{Um|64S{|3lc}iksemku^lt$~4jj4I<^wwb3 zSC`4zRWR+Io!t%K>}>$&@`9Y++S{(jmRUxt3fk$_Pp-itdF`}zs4QCN&rwIIoaZ)x z^Spwb*0z;K)Be^5aK5bpobPA==lKOWz4;B-vyr^@)8piNIFgssn}=Mil({**cJ%Io zoYmudQ-wXD%Wr9(_I&eiFWcy`=g#6f!#~_lKZV=q<(B$Y{hcj+eR*%FZ=Ke*VE*cr zawwPvt^-j{Iv>~j=>L>(`p=oHCw|;F@NyDH@8x@q{H}$9|+0{6bN} z+4(p>c}sZqjIb9!&If)APLWMSV@|?=zgHC5R5T95xxl&R8v79+oO5tquA#BHM_1VZg5;fXKF@UKsEz z2_QmS^umB!nC)wX0k<$*=ks{LEezM~yfEMvW+x{Mc?Z684L@+Mi^bf;10U}Ak)Pm} z=Odgj#0Te^6Wn`>Rz$6?f?NDi@;g31=K#M!6d5h*g#rH<0Yt`#dSSpnOaPIwqFxwq z3p1`p7;poPZc#AIC6flI6Qvf(;Ppzz~lar zK5<4G{vbJ$2Uh36UrgNoee|Snrs${BFzidmHW3Eg!tCvY!ESK&i@o^ZW(WJfUKsG( zM3MbOy)fVwhW*(%40eFC&+7SsAK>_rM)1#zBC|xj_}~XRev}P(TsD-)>@@s*Ifi8e zZh6v@hQS{$D?jirCho!e?c*>92VoA8-=5vza~wa?4Q_VKtq}(NE27AuqVYN40k<%R zIbkRp@WX5Pfgj=c!3}<=C~~A|e15pW=Q)1lCwN>ol*dtN_&3NgEE{mklLcv*IN!nV z5k*=>W1FxW+`=q$!eBS}(T*SS!Of0iYJ>s*nkaItsAmVbg*na%gB{?<*YE>B!STaJ z@CQYa6Gh|m!wr6t<44(m$7Mr#oScR~O^#vNfLorlrD5W-0e?soIYl(K3A@29OuG{X zyTKPZe#8eiJ34BF0e?gkSuE<=0d8SBoiNw|ergRr@Fk8PHiCak6j>@7pC4}UF2`@( z6pzb>@;E&We}){xvH`a|=}yDMWdr`WD6&j6wh6nzEliIS2D`y~9Y5lOn;pw*gaLm- z6j>qa*#T~0`kXM>0lu<^A9%mxhmGJ*iXy8-#&%;9_`4iG>K}Mm{|Jx!B2kYE{9;kUg?$2C;FpLJ&*tg435VJ|{oV5G zQqhMMv^*F%q6Ad|V#~fc1?0!*?1N;HekOOzj@t|N|7xg&6zabiO;Ep*S66|47 zj|2Rhq9F(FnBx(_9u@UCz#kJ0IsSip=K~y7amVqTRE;1AC?LvzwG}CZO9F%zA%JHS z10m!h2%_h4xg=NbPnvt-kEN{@OR06HW5;60RtKqL31ij4skH-BTWAN0wJrXmg8VTQ zghCZs`foa&>F@h~Z^^sI67zQ7PI0C??0dI+Z$JCn-=E!m?~V(~UdC>!d!4e3f%-Qn zyBR2Z8E;bETa;xC)W1#H%|O}9*h6)Hpe$pc{vFD02FhN>UaH$iS;j#9yOiAwl)a4o zRCj=~jDh-tl-&%J54q|v7oz+gWf=qYos``Sln=Y=z(Dzrlw}OmAEE4KpzIyXQL1~N zvW$WHW0c(tl#jdWAP35SqAX*e{sd(=1Lc#hIxtZFGi4bA^&e1nGf?)92FhLr%73LSW1#*FWx;^lDF2PJ?0VGyowB&Tm#d7|`2N*ZbiBxZt^Qf!U}`_a zVepARN9I1%xmQb=7$;I+$}0aq)yu^AF9DE}4s$3YoFk9_Qm3TKl`)Gonb%0K_1eq{HA7kAHwBceI2# zP?I@E!n{(Gd7Xp_y&|dFUd9~6NM+{rPJ2GFjj#?Nsmdv1ighJOrdR`lWQw^uNT!&p zgJg>NDoExqHhZ9UA8vpt=G7p_F6OGBn27aJ0gU|yhruU~Pca9o$|_@uIZ&1PNr{|d zz6z2l=9VCtLLWggg+790eoE7ygiLN zCSWG^BA*R_DdL+^>`&7)xiaR>2AIeeInw}hmI3B$O{SRJ z8N>R#MUyG!b~iI(fO)F{=H~)t!tbjBV2ZVkQEaDbO|Fc2n*nA`z)a|LP5{huhruV- z>0C{&j9F`dInMyIPLnywY0oFt=X_13*eki2^#+(x1I&hinehAD17M21BBR(&3pBYh z=0XF^I|61xr;7q$ioG(USf`6MxiaRR2AE3>Fz?c2iu(k{us-kBWQzL)H#25{d5-~R zJYXjLerW(qai7E}wo^irD`PeqU?u}*LZ?juFvUG0qgbcSnp_#P#Q-y9fcbe%rno<5 z4D0h=O{Ta%b~Dokm>C1iY`{$TeJ%i|cs{@=wo|JnSH}E;0cKmkOz1Qp0JG9z@QHP5 zX>w)Eb_2|12AIn=nc^7^V_2Un3@}$3VBTkd`9%ZFRR)+}GQj+Dz)ZyaR{~&)XM&7k zAH83bD`S4u0P_I@%+&^%4;o;8%>Z*vz)bk)*8^aRXUvRZA6=`-l`+3zfccOC<~KE& zS3B+b#QJ<#lQ~4fd_(N1Du$5;PMrtI_NUm9TkN|QOoY0oFt=MDqRotn%FiJZF(FkjVV%0Byh%>eVa znoQYeU%xlN+^xx!eV+7&0p^>U%;`>hK5-nqZGgE)lPUY0;vECby_(EQr#+uopYIxA z?$>0>p3@&Rz&vDt*=c}z*Z}j00p?LnrtCTOF$2uw2AC%dFi#p_eqez4p(a!I?Dw<* z=3g|Kvge;?G?|6ZX^TR*r=2;pCNr;LPTjY5_1cU+&-tzRN%RZx)!C-p!j#n#wK7(u zHfl|Y#S$x4gu~&|rSW_!5zAX`scds~B5H-hiI#X<%xa6LtbBDM5{=U#5~1ITuWN}` z#CQOG>7?@86n&`OC6uqSG5kC6m)o!9zY~8ky>}7iUX(vUIpn++zY!(s@gBH%AMagC zN7SJ|Byha#(H8Y+hqGX!EZTefLwzx2uzFK=_lJ7X-(}7mJ{|tQe_U{=FX9suq#rK zO!xzmDsvz=caAJ4d<99B$#KUFI);YRAvuKzRC*}|li)f2J zAhVZ`>rs!G7T2Rrl<^wBKQxGry0I(9A$;FPJAYe_`%(7^FB3k(^OGJ^*v2iZ=u6dy zWK8HANtG#NVoFhH9KG27{Xx@)Pu@Oi`sOV^$J~oGwX7kTx9XGm_OumETH!J}aH(Ns zYf@=VfF1o!G=OE)$!WO;zMW*o&WLTh^m`sF1Q^!N4%Y@^U`o+MQbu)B^%F% z%A8c*DpbGyH+B5_JoW;&Q06_sg{Ob-UPV{`g}kEBwKVpjW8OMf z|FcUS7gy3T`~-6a&cere&h$ zinC8=y8-QJiiNsJp;Qc<#$Za+)%Ryr0>H|OXkHHmd^AGN{Q58G{d z4q(}P=AXi!#5xIo68ybn#vngkCX6 z_?aJ>Itw^#zq<8rjT|(0-+)51lS z3OGffQB*$DI==RS;~O@-yn5o(h-q3UqE?`TjKeaSZgkw zO02Ai&83Qb(u!oL1wVs0pI@Vy65uOB;p*FI;@Qqv=4FK$U#m{YaJaMY_!1#v- zBF1qKTo~iwNwF%#b~e|TjA8jayD{{uU$N%mtQyzu^-`sOyK6p#@EzdVXMZ#1TMyk2z%h?aq74km;Hq>eVJrT(G zs4ezK-?!mftP41IHxIh?s3Masj(zBPY@Tm?U96(eFe<#Cf3o)tHS2zd{nOdl^nS83 zIiAm_nzNC*L?+KnG6YRmBdx!t>`gMPY_ z`rKYdoUn(5XWlAvd%1+8;=eMEivLcQ$OE53@-rt-k#JPz_KE@y&+XQp&P9Wt+FD%j zoamgn-MJU7Pt=Rq-H-eus9%hGq}@Nq66V*B+9%<17Fm6sMc>@7-60P4_ZJr5R#v{} zCy&2^aYL5a;>L8{vZ(mj$)5Wq&zG~w<@~oR@vQhc&=j9#yQ^${@yJKynYw8E0`bs&$& zTX%!{@3YN_r5XA>o&Z(;ty??le;%)@6C(ejU#TNa;~THJ|MisqlY6TDH<|Pqx=bIc zl=yENcsyIdZ@lvqVNUa6nUkL>9&?)amN_|-;&u4egtwT%B~f)DhIfYHDN}V}hPQ{I zxfB&)%C8y0xd1_R>3&TrdcotM$li>w2wnS2O1BQ27=3BvyBBl(lgVeWzK1FO8o~7uwf-Xh+ zGQ4Vr=R?(L8|lMP^&1tZNa(jBZz|&#I+TeFuapK*M>pzUIx6va5ln|@^@R*CfN`W8 zRj*)pj~V-9srp@p_ndJW-EDC?;i$uo@qq$Wc4K%BjD6Y^FNfjvU^+=xFETu!w7V6V z_`hWWNOxy5!@JGcN8>ygeX>ljX!lHKc($5Ug*xbN_hkIh*$lBzjs`LbxPs{iEp{*y z>k9jCINCJ!_@P*6tWA6H$DYMhz-Y`%lW)ddXT}=Pmd2WKGh?lavY&AYk1o?kb7QTN z;xngtk&JJ?Qaq-syhi5aOp5m-$J!=J9*i|bVX8tMVbnhuYo{0kCQ&>XYfl-!rcpe` z-Mq!jSQ||7V615|ILfX68f#aWe$e9##+nPm>p}4}sDJcvn6YIzRfe&a!zlBkc&0Rn zI{cXNN9Qt(H3Plk=`r*#mKSygGV9q7Dh_UnpIm4iUz=bk4(A6Js1i z&jsl;h&uK##^YlxlEKloR3H?OC(7uh$KPFs*Nz5I2i}mr=d1G@x*|zVV=NR>P+{`P9?8nDpjnI?`?A(nZ++{wOhZvvnv}ndyaJn;*?bHavI}G2q?Fk$DSe zC1%0cg1MX-%CugDU661gW&Mkz#aw;}e3!0aE->rRN2guX(EB!4n=u^8lNEj6Y47EW z>U(FHuICpY4XLeN()=8X@v+ZO-Y35_1Lq87D-x{k`M9Vf3vZppvCwaz(C>B9bClmW zEX&9Ht@v*vP+z9MuAJf?Y_pnhZ-iU_%ie7S)81#5>e_qz`3tQNDc zio`FA+gW&y*&LG2CGXL&I*IpD^}cw%LY@MpY(Tn|hrV%Is4>tFm&YtSXfqKewU3go z=7F*Wa$Pd1EAKZyK>S;xAj3$gqJw=xo#4%trEh2%^w@{|U{h#gs{AUvW=VlQ-iA8I z??AS8QE~58wd8^Xi7y+b)r-nIOLio|E;dh(GAlloM}pmaw%?ef1;VKdw)s#ii~<2z zlkqeBC-IR#KA#kDI9q9>h{qSxhcFQb>Xi@p7Iopmh;`lMusvdxI}#% zmz=<=c;n1f$+NjI=Za>C3C4}Qy>GyqblQJdK4PZ-M-lbKwnDO_gv;ppBylRWU##Ho zROUs3?bRTtEcYNZgv;)lha*PLn=@%87e+v6kwENO`&ceao_C_V#!3BDF3cm9sX<*G zO*!MLBRxs$YQ?5fE;-u@WOO7V7rWp-fH?vv9@ ze0li%3h@I9*nzW+R4#3F^-9VJLURIro^(FZJr^`6r?jz29>F{U^8fsj*xhXE{>qHF zRpE3VF-vRe^miS|7h1FK1)tQs_sUtUGj)qqAi&&ye3xLXG18H=e38-|$F1vJ2Pkc$ zb%1X$97z$$3RwL}g;X+R?jEc`&-6zV8 zcS!8t@tca;t?VaJT=KFyILV${JxZf3em`$LS8{UI#%)~kwOuAD7hM{3m&9JHh0(Fn zW#Tn$nS)i=CkyHc?y}*sCC9A2^5Z8GW?UGTiF*al=8t?yV(-~EeWLr0+%86fjg-js z>hxiOTU+`jF4JqQkl&jsF1wSa+zIhWcDO)di)88SiB|UAb-<3D&^s zh5X)~xr5}w7rv#(FgBNCss3$VKX0j^cB}a47Orc1jrzOr+Xrgaa$$^8&$!PidAgp& zJ}seDHlBM{2a?z~_((u%jQZ7l61jz;4FY~8j~|m@T}y<6g3`==NwD{%52c(P{b31L z+&lN_K6r=m!bv3Zq$Y+7?dg;ohOen1MlDe)fM|{ywmZzG-Z*+MZWH?&+kI=})a6$i zX5rUkxQ+k?d292Qq$nwwC*tzxy)))OIwz%_oiOsUxDJlNuB!;sV@2fH?5KloIEHPP zrG7+G>7iSvH@>9fhbikHQll0RK}!!=$K_e)MWxbykoh;xe6_9@wZ$duPF4AY#h zS+wS!D43V2v`<=PD4qkDuc3&1uCV2F*qZ<`Z<0PncbABlw6?8ijV)))`*~CkyWQk| z6AXa3&x{-&6o z-v>Kk(J)}(rt}UZcA4Z347Uvl-masu>?|#h-V%nrHJ~sifMR|iEuxqu2MbDgp1v#6 zmUV;RZb$Da3BCtO=3z;bOr0>tBjH>*y+**puROCl2**HwA->+3V}oby+i{Kylh8-Q zXGxU$a4yVZ1Mkkt!}9A|lYhg7zG&XhdO4aThK9dy>TveV_WmT}X4}F39zzP$E^+0U zj{dF5WsdsQTo_CBaY18B9!=!Jm<&11ThN&8iTehw8Q|l43c}%%la%vu43<u|{x7eULN0W_#bsB3fP0$XSmALWt_?Uy=lsvOCra4!Np$6tQ-{<0AGz?e zbo9OYm*LJC_a>6~MR{Os@_vt<8}NHr%+LIa$p2ESM;b2LB=I|mo;6leQg=L>pvL9@ z#BGml7o8ePGCe^lID)M7Vun#{rSlv~*GK~bA zdi|(jVdj~6B-p-@TG8Ggs?f}ImSL9T1%Oq$Qv8fSM;iFdr^EYh4m*;!1n4VZWuIk;a&WC2J-k(XzP6N zwDf1+-=uK=fPA2UJ-X!Z__NP6d*WE?9Q#0h-5}fE)z8HB7QX+$;X@V9E|5X)(0peJA0pc zr#B}mV;7#o0N|jg?Ypu@8`b?q&LnzbRum+4`{1kD7Ci&ayS1xHGq-O`TfL-n4oXf_ zt?;;W^o!pq)ZbY)XGWM*D>veC#~L7v;pL$w?=0q4aAEuu(t4zqzUqX>9h1W@BDw3H z%$J%XG2}QNcMOOy{hy`=NsgFujbuD@t+JbtBbaDM58k$A{i{go=Mxv$FV z(Njh1iN+@`8;;AKk3aiZ*P6tJsV6g(Z`;Mll3DdGj93>f(if06rWe$kFWh<%?6YTG>YN2E&h_*_3xG7*k+Od zVMkU*Ib2$8zLvzFT1sOy!W8>1A;IRXc{oD#O8uWW7VHEH_R94+;HMc=ZcBn4*K=~` zJ*Lm)NU(MNK5F>Y?KAip&#r~1+Pma^+1dCrpIskJKR9`Lj`=gLyl50?7q@AXes7XF zC!l1HW#r!I_4phQ`%7#J`2u{XL(C@Ie>U9bZ1Nh917Lvy_RE=2g`M+mYv5Q+9u!eN zI)_+{ao$i@)|U00Y38TNf6jipgUer0%O0kEQVAj2yBwZd8hCc0e3QKjxSs(EeT-c` zDNe1cRRKvKhZJPH%>OGbL!-lPv^InLad1Qn6!~eZ>fQ;lyWbw;y3VESI@x)8jm7TP ztU-9H>67EvNN*wOM|-(^z3QNHvk$WdpQ7hHcn`k?`}v(l{pu>UTh?0RL-3qA$xmpR zZSl?V7YXgJuROCaCQRTmEd$>B=cl-hd}ME(L#pb`6$!6fwCnK{drPz}j)k!X6tETxR@g5U z$Q^~-iH#Yg+vl&$lxvTlrr~x%Ux0$Vx0@uVtlw*thRb8WceZ7@VE8*3p(YIj+-0}Xv0z7ZnM*qY*^2hdR zUq$afb0K=~)2&u_{P;DS^4c`C-Z zhqc7^!N+o>+s95aNAFr-?=1Zc_aeV8O1GI(b3Ub2d(C5a_w5+Id_(X5WLF43{SUQ(B5d4`*lv6THl(!2PY_-sJ*^+gRAfM^%;&; z>is^D%me8+kN7>gaJI?5U^8igVzu?7;iQT8SH|P(1oqmHYKyR*`n4W!HGGd}ojROA z=N`#-u~lc+Nygh9eT?@Ftj53gdYZn?3p zN;np501CE*KWgXNUVliF{dT|r1?<8yWuB?Vt{@V*5^Hkw2Dgh%!~H0im=Ic3i6d1k9XqtckDeuO`SU4h5=KgTl3!Tp`dmt0f`60NNgCjKyI?T zw}BD9E(IIdl(HY$eNo!Mc#P< z#0{U1arq*rYEFclmDM>ejPk_n0iwF93Cfzwj*;f*G^HflXyM6^Nyc}^Su>H;D+xRC zafro?T|_Y)CaJ14Mf33s#W^ot(>7uIF>E|uM{OTfb{tk8pKgw?>tX)_s1DN#C{;ym z(`?JzXFuxd$>pz$&QEm35AJYpi*2{tC%Kj^>ahy94etP-GO{hGpm^x1oZX!7ZSNkX z*y&iT-5(_LzT8k3#+idA^hsZp z0=YoJ2LFATx(TUco2-|pbL<28;jdtS=fJSXV)%Q$AfF$l1fjNN^Y$mTn{oIS9uwHl z1`60g4eQ+$o}@0q*QsDPn?jp_&QHXPbXRW2*X^*rWm9M~a?Db>BPC}<2Kh+8r1O`y zqZus4{ZBp{M_Q*uA%CcAI+~QKyqb*9hmdz{3T^6~q+`$9eSU@KA#EG$K=PfJ8-!-g z+@^*58}bh*)ed3(dr0?gm@T^%&qJ^QFn7Pkr6`}cHW$|oa)1KXUp%jaderZ`NU(zo z7V5jLGK|M{LySS5`lj(}6}9S?B=XV*4;G0ZGkq40rR1;=)bGfK)suGKIV6qy2-a>u zsfGyK%fQ(oL3-RP+)j4C>*i{wjMnJ;2-gjAfP%a|A8R#F&uTO$!H$wYX0oAkyAWJA zZDXYo*Mi>T)2y1BVBHwRb$0$5c0f142bv8Wcr6KcGk4yKc#>-PLZGA!XO^cAX zrIwk0$_NtOqiZANqa?%1Ta!m81{`t=6tnedO*}tm4G1+}eXWGVrs2-_huq8=eUBt= z<_$qA;deWWa{2DUx%*c66L%8rlaEtN@t?alQ=P=lI-mKH!fs1Be@kqD?aRPDk48Nq zk#}(Zx$bfOSEf~()O*qMhz6D@|HUH8(Gv$h8O&Gss?6o*45NWUCMxfB+VZ|uy8=&- zYhAB~lK81pPVdB2SMTv8*j#RPcHDlq^Yk8kV-P%{;Yej-s zA)k6m4eY+XaZ$s$r`hP;q`%|3VSm_m!kUjmRO_GZqJC1eb@xHq75C$wsWe7Xzm180 zI}p1zH`is}ib zqgtYrEM(JN#RID8M~u$k_XYggLYo_!_Q9$roty0SLL0!WzE|3Jz4QGhzxBYzjHr>6 zSS0hT7+>RKePkDrz1`Jx&Bg_FOT~Q%a)E*kE~{_aOw!)_5XZ8G0`^s7om=w$&?etm zVpyd6LA8vPb?2*`*Lo@8=b}Y^sYZCN82wuilHN2wzyp-k=vM)YjkdV;~4zgCXmOb&_y<% zUmfc&Y6|t1DCqePiu^lNI=N@<;(Z74Z=2YA`faU)ZO|U--$9YhtE|%E(*y6E!E+0f zi720Os(ya?Lxpdcj6m!)dc=QN~?&4WK zW``To4&h^;U#?I_BYTfDT-5%2SLYpW1N$CR?c)Rmt@J4sxD9N%An#`4CF?>X$F3w; z?~FMXVv?cfPuTg+rLTXGr{K^wQq-?GBOfOkw|nt*!;LL}{9X5fCl3B)Avf{MrM|DN ztZ1Fs9#b2;LevcPck7$L&b42AzQpH0tTn>i5ZCrm5b1XTj}3-_BEsqnZ;a@Cak)JS zw&&rED(eE|@8CHE!YGR5Jrr2oJ4JJ<2A6#kFXT!r8FZTH_pNT*cbYJCpw?kL*CB7& z6m00Pa7Vvp^C)}V25jAg?DXwz7cBNF>@|*oTn9M9E#U*b| zW0Cc?v)tct9A3L{?8A>QZ?)z7x!9Q%#`oo;vqN7q>NJ;L8P)|R;0 zDN4$m*YX^f-lw(e_Ij!Fy2=r=t1R?7#Q*3y@6+jAUi-nu^YC>imN)Do%A=iI?aWov zm3-gku;RoG3@O)xFGoZSMu*JIPg*yJGxCYoT9r+xi^sqb^--?%C!%YB?T8LR?idKOy{#5b%JeYOLgcwKU_=a z`LzQ+wEu||`R#g%u>BV8C+qQCfoCjiO4)+iOxJo7H}Pfc2|OOyUI@bI`PB>-6-_h2 zbD^2OAZ*TzS>|t)#)XsQ_Lr?MP3~DO=KS46b8#8TC6V3-N#x~vEfzVuvYjFc_QJ*T z!KwF8Pr`i#@nTc(RpKTQ=|V&Q{O=i8iIw+y94{N)*Im_%JS6@bH?-;tS%Z>;Vd7VA8Bz43l&L_b>NEVTq zb~>lYcNE|oHU)diMpca-O)s2bTwS0tGv}yot6H_1YT26&tJd_bkV*RubUC*eo*= zJ@IaMFc-#U%gYh3^Rk;f&j&wZ6yNAbC}8F|1$a%0LTO}PJh z64ASeQOBeb&xsYk<+5Sg&=-;`J|xd1iLv~)_IfLJdY6-6L)8cM*BB%&M1q~x_#mQ7 zq42Qp$(?y0`?>JOYi}lrjp!=PJ}bgEHQ6r)CsP#p*=%lce8c+~o04h$Sw)|z{| z+0t+9EG`ZpdcIq<@{UbAajiLAHXIQU>L~OkKB6__SGV^p$4`~jnk2EESJl=2<7*AA zw)k0QYo7f8W7$@HH)5IY;J++eprS3$2|tv1d-NDD6w2kVgV#36_`6jkwncuto@v6E z&nK^6Ivco!zJG!1I5y7kA{xVDUCN`5$ZzBP`(#c&LOsUKtLpe7dOo#m`L&*BXX$n` zFzNqcd|Ui=EZ<(aTKTUBBzbn<@{f=&$rhJelgB{?=CTu2RWi8Ztu}0nwdKeiUR;<4 z|AMe=ic3C}M?Ahe`7oJQ^8RgV2%iiN> z6}nFinCSh2&KI~}YzB|BP}}i4RvFtrROI|#Hr=(0oS^5&CV%4x*3*j6|k1l>O}9_40nke`gC^DskY3SODebYc{uchVgZAF4!+p-q0mTJ&PG3uS(IolZ zasM5&jJvP*kzi{>m&A!5Dtv+K#&R6l_r-4afDOS}Q@Ajq!yT;a4Qi+0{f2vSHidp$ z2j!2s?>coIo)e%OC}8tdrpFmns0ET>r@t-Xh1Tln;QeRE0OVGC<_`5+AUjX@=;kmw z2f$Y9JjsFlqo=*1kA|O{6N$c2;R>p%M^23*!HUoOz1xhyt#2WDnzLfL0Fzud-cAxmNgAVQoOb)w<v!E?)>xar|6}ne@K1>lt zIg34?AW+|G2(ni<-^%E2xDw|#a5Br4WOT0Orr`6d-oMo$IZN+&POcZ4Zh-e2<|BTT z5`o%!PN);{-pBhL|J$ql=0V_tdZ@QV*?6d96xq@(^tz?+wjrl>+>SGb^#jZ`?7U(3 zi;{(8+^oz`nJJm!PI4_U7n$TBBv`+rEq?RzlCVt!!EXs}?;;-Wb5p_lK@bz< zud;P}-EY3PUxW99?Q3=&;>PCltF!S?$0)L8=)k~)4}$|Taa%CV-&I7m3|raG+QEwV z0{1C_0jO=*$i?PI-h0*m3jGj@@gD0bZ8O?2Nj!-jQw{{3_qdcZd}!PmG}LP$tp(<1onn4UXp}*PJXC_?~;kI2!}S5*sOP!5jP0Z$SK=?`!FZ zR*g!&WBtI?C$&B8L%5&&L2g1mQr2+_=_#{^^LvKi=}KmOMraT{r&}}cly1jIjpw&9p&SlUFM(?*;cNBf&1e>2HvKsG_E1?ecT9|KK{`jBK2R z^tj$XnihM-tOwUPJ*}{9Q1YCO=OntOh|}_6y?_hD%1CbQC5JIZDn*w|WW%lLHs3Qo zpUCBg-1Uv-+&_OdHbF>gYF^N>Y5G+6skxcDfWkEtZ2MXDw#xl)wFA9C+5X|jXXBtw zN?R+J6c0Ey1-pO`by5oLfI>T{vnl)h_tx3+TdKnzA$$DutMlW7-K6IM$EIvKZ2RFn z@SzTr&F5DKK0gZb*c9-i_RcDz9jP_Un09r$bt?bwu!gE~KZp?z!5 zL%YA5vh4)@z;A86t?k;X2lVlyEy;y;Y#i|0NM~;O zPY!QQn@LZd1>{Ee?{nOW}T+B&pjQ&KsAYl(t< zz>(Gg2eh^A*?5ox^hcj(%WJ6)b^vV&-_m)I1GFW4OXooj(3bEmod-E=%5Fz`p55-B zUWb0O`vH8Q?DMUygB+l(ZU4P^(94g0ul$zU^V8c}KJ1yn^RAXC*af(j>VRWYX!rk( zvi;E7Iy=7LKj8mrb+C&c{n_^N(+hmqw*?CJG_zhrr}**d_uc3N=(ie=#}Ciuv+L0Q z@1|e}=!H5^HXrJL7iHV=cj^66dcc0zhX4xlVV{~!`JHF;*>$!Yb{+6PnzHpk9mXB# zgE~+)pIrwWo3e3G2fge%o6nwy0nd*Q=Yg{AVb|HXmg+yNJ?L$Tf_}j9tGC35^KGS| z|9|v<9{7Lmfp5<~Ew+X=D5;6zdt2`ip7W%ZgiKq3zk9&Ovg@Env@FYa-{x&8xE`ExDkD1c zWxqo>7UTg1xsht4WD0|}@4&JAzy~lVe0u?*0>Lw!LnJX?c1u|@lJ8Oyh!xiedsGM>i^d>60FEvQ@OoMx>=B5yA)m? zo%>Q@2np8mP_bq9tga)tp4aE~Tc};S!AFG)Bj+|hp{#yr$jqnj(ce*^pCv)u2%ak; z-!1c<88hmR!&lsHkO358^l8K~9~;%bK7TY4p_XX{0^>1#fMu`W*mZUQTdK3$v+FIj zhx5>mP5GVwUOvC}Z2kP|&>kq@*mdB8|A7Lo4HV^ttLSfDnfE?qlH|o2C2=W_v>o?I zu$9>%vJEMxX5x9xo{xHdl99S`wZxZ1-pa@s9p(x=Yx1o&yr%+`@&W48&h5Xe-O^T$ z#pO1$o<-QzlHQ8F?(N%z+X+~Z=il+P{33IUCf|CnG4FS&IldiR8-wd?CMHPdX7L>o znnrp=zuWvKZMCGneDq!txwALh^nLv){$rQgDM#sXi}@Qj1=--S_Nsa(*BTiT?Arum zx9Lv`3%S1U9&>VvbM1gloWE%@wKjNap?k$!t;FQ`s`6OZ1nqJLirFl-7= z=f{WhAY1mNNPO^z9)IAu$i@UZSy)z=2q?g|OOcH;; zjfUg4h!ox?!D>r*yS~~~vh?JPi%N73!n}pq*jy3i>OdBIX<8*`o>q+1}GGii}3L!QiuJ17E3)@mEE3QCzHbCK|3~u_CK1>PcB;z zzdE!B3OIHh_%K%i1zZ~_%8TZ%YakmaB^zOzyRHESC}5kru3l*xCBAY@kG)Nk%UHd=&CUeIC literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..28d68f559d4e475c4c8ea159f6bba27273f275d3 GIT binary patch literal 492420 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]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS/src/dbtest/src/case_cntl.cc +case_cntl.h +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h +common.h +/data1/farrisli/3TS/src/dbtest/src/common.h + +/data1/farrisli/3TS/src/dbtest/src/common.cc +common.h +/data1/farrisli/3TS/src/dbtest/src/common.h + +/data1/farrisli/3TS/src/dbtest/src/common.h +iostream +- +fstream +- +iomanip +- +algorithm +- +cstdlib +- +cassert +- +unistd.h +- +sys/types.h +- +sys/stat.h +- +string +- +vector +- +unordered_map +- +iterator +- + +/data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc +kv_cntl.h +/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h +bsoncxx/builder/stream/document.hpp +- +bsoncxx/builder/basic/kvp.hpp +- +bsoncxx/json.hpp +- +mongocxx/client.hpp +- +mongocxx/stdx.hpp +- +mongocxx/instance.hpp +- +mongocxx/uri.hpp +- +mongocxx/exception/exception.hpp +- +case_cntl.h +/data1/farrisli/3TS/src/dbtest/src/case_cntl.h + +/data1/farrisli/3TS/src/dbtest/src/kvtest.cc +kvtest.h +/data1/farrisli/3TS/src/dbtest/src/kvtest.h +gflags/gflags.h +/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h + +/data1/farrisli/3TS/src/dbtest/src/kvtest.h +kv_cntl.h +/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp +cstddef +- +cstdint +- +bsoncxx/document/element.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp +cstdlib +- +memory +- +bsoncxx/array/view.hpp +- +bsoncxx/document/value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp +cstddef +- +cstdint +- +iterator +- +bsoncxx/array/element.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp +bsoncxx/array/value.hpp +- +bsoncxx/array/view.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/view_or_value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp +bsoncxx/array/value.hpp +- +bsoncxx/array/view.hpp +- +bsoncxx/builder/basic/impl.hpp +- +bsoncxx/builder/basic/kvp.hpp +- +bsoncxx/builder/basic/sub_array.hpp +- +bsoncxx/builder/core.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp +bsoncxx/builder/basic/impl.hpp +- +bsoncxx/builder/basic/kvp.hpp +- +bsoncxx/builder/basic/sub_document.hpp +- +bsoncxx/builder/core.hpp +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp +bsoncxx/builder/concatenate.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp +bsoncxx/builder/basic/sub_array.hpp +- +bsoncxx/builder/basic/sub_document.hpp +- +bsoncxx/util/functor.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp +tuple +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp +bsoncxx/builder/basic/helpers.hpp +- +bsoncxx/builder/concatenate.hpp +- +bsoncxx/builder/core.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp +bsoncxx/builder/basic/helpers.hpp +- +bsoncxx/builder/concatenate.hpp +- +bsoncxx/builder/core.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp +memory +- +stdexcept +- +type_traits +- +bsoncxx/array/value.hpp +- +bsoncxx/array/view.hpp +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/types.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp +bsoncxx/array/value.hpp +- +bsoncxx/builder/concatenate.hpp +- +bsoncxx/builder/core.hpp +- +bsoncxx/builder/stream/closed_context.hpp +- +bsoncxx/builder/stream/helpers.hpp +- +bsoncxx/util/functor.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp +bsoncxx/builder/core.hpp +- +bsoncxx/builder/stream/key_context.hpp +- +bsoncxx/builder/stream/single_context.hpp +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp +bsoncxx/builder/concatenate.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp +bsoncxx/builder/core.hpp +- +bsoncxx/builder/stream/closed_context.hpp +- +bsoncxx/builder/stream/value_context.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/util/functor.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp +bsoncxx/builder/core.hpp +- +bsoncxx/builder/stream/array_context.hpp +- +bsoncxx/builder/stream/key_context.hpp +- +bsoncxx/builder/stream/value_context.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp +bsoncxx/builder/core.hpp +- +bsoncxx/builder/stream/array_context.hpp +- +bsoncxx/builder/stream/closed_context.hpp +- +bsoncxx/builder/stream/helpers.hpp +- +bsoncxx/util/functor.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp +bsoncxx/config/compiler.hpp +- +bsoncxx/config/config.hpp +- +bsoncxx/config/export.hpp +- +bsoncxx/config/version.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp +cstdint +- +string +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp +cstddef +- +cstdint +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp +cstdlib +- +memory +- +bsoncxx/document/view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp +cstddef +- +cstdint +- +iterator +- +bsoncxx/document/element.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/view_or_value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp +string +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp +array +- +ctime +- +string +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp +bsoncxx/config/prelude.hpp +- +core/optional.hpp +- +bsoncxx/third_party/mnmlstc/core/optional.hpp +- +boost/none.hpp +- +boost/optional/optional.hpp +- +experimental/optional +- +optional +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp +bsoncxx/config/prelude.hpp +- +core/string.hpp +- +bsoncxx/third_party/mnmlstc/core/string.hpp +- +boost/version.hpp +- +boost/utility/string_view.hpp +- +boost/utility/string_ref.hpp +- +experimental/string_view +- +string_view +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp +string +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/view_or_value.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp +bsoncxx/third_party/mnmlstc/core/type_traits.hpp +- +bsoncxx/third_party/mnmlstc/core/utility.hpp +- +functional +- +tuple +- +array +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp +initializer_list +- +system_error +- +functional +- +exception +- +stdexcept +- +memory +- +cstdint +- +bsoncxx/third_party/mnmlstc/core/type_traits.hpp +- +bsoncxx/third_party/mnmlstc/core/functional.hpp +- +bsoncxx/third_party/mnmlstc/core/utility.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp +initializer_list +- +functional +- +stdexcept +- +algorithm +- +iterator +- +string +- +limits +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp +type_traits +- +utility +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp +functional +- +cstddef +- +bsoncxx/third_party/mnmlstc/core/type_traits.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp +chrono +- +cstring +- +bsoncxx/array/view.hpp +- +bsoncxx/decimal128.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/oid.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/enums/type.hpp +- +bsoncxx/enums/binary_sub_type.hpp +- +bsoncxx/enums/type.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp +cstddef +- +cstdint +- +type_traits +- +bsoncxx/types.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/enums/type.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp +functional +- +type_traits +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp +type_traits +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/config/prelude.hpp +- +bsoncxx/config/postlude.hpp +- + +/usr/local/include/gflags/gflags.h +string +- +vector +- +gflags/gflags_declare.h +/usr/local/include/gflags/gflags/gflags_declare.h +gflags_gflags.h +/usr/local/include/gflags/gflags_gflags.h + +/usr/local/include/gflags/gflags_declare.h +string +- +stdint.h +- +sys/types.h +- +inttypes.h +- + +/usr/local/include/gflags/gflags_gflags.h + +/usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp +mongocxx/client_session.hpp +- +mongocxx/model/write.hpp +- +mongocxx/options/bulk_write.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp +memory +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp +memory +- +mongocxx/client_session.hpp +- +mongocxx/database.hpp +- +mongocxx/options/client.hpp +- +mongocxx/options/client_encryption.hpp +- +mongocxx/options/client_session.hpp +- +mongocxx/read_concern.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/stdx.hpp +- +mongocxx/uri.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp +functional +- +memory +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/options/client_session.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp +algorithm +- +bsoncxx/builder/basic/array.hpp +- +bsoncxx/builder/basic/document.hpp +- +bsoncxx/builder/basic/kvp.hpp +- +bsoncxx/builder/concatenate.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/oid.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/bulk_write.hpp +- +mongocxx/change_stream.hpp +- +mongocxx/client_session.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/cursor.hpp +- +mongocxx/index_view.hpp +- +mongocxx/model/insert_one.hpp +- +mongocxx/options/aggregate.hpp +- +mongocxx/options/bulk_write.hpp +- +mongocxx/options/change_stream.hpp +- +mongocxx/options/count.hpp +- +mongocxx/options/delete.hpp +- +mongocxx/options/distinct.hpp +- +mongocxx/options/estimated_document_count.hpp +- +mongocxx/options/find.hpp +- +mongocxx/options/find_one_and_delete.hpp +- +mongocxx/options/find_one_and_replace.hpp +- +mongocxx/options/find_one_and_update.hpp +- +mongocxx/options/index.hpp +- +mongocxx/options/index_view.hpp +- +mongocxx/options/insert.hpp +- +mongocxx/options/replace.hpp +- +mongocxx/options/update.hpp +- +mongocxx/pipeline.hpp +- +mongocxx/read_concern.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/result/delete.hpp +- +mongocxx/result/insert_many.hpp +- +mongocxx/result/insert_one.hpp +- +mongocxx/result/replace_one.hpp +- +mongocxx/result/update.hpp +- +mongocxx/write_concern.hpp +- +string +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp +mongocxx/config/compiler.hpp +- +mongocxx/config/config.hpp +- +mongocxx/config/export.hpp +- +mongocxx/config/version.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp + +/usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp +memory +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp +memory +- +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/client_session.hpp +- +mongocxx/collection.hpp +- +mongocxx/gridfs/bucket.hpp +- +mongocxx/options/create_collection.hpp +- +mongocxx/options/gridfs/bucket.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp +memory +- +bsoncxx/document/view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp +memory +- +bsoncxx/document/view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp +memory +- +bsoncxx/document/view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp +bsoncxx/stdx/string_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp +bsoncxx/stdx/string_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp +bsoncxx/document/view.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp +bsoncxx/oid.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/events/server_description.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp +bsoncxx/oid.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp +bsoncxx/document/view.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp +bsoncxx/oid.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp +bsoncxx/oid.hpp +- +mongocxx/events/topology_description.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp +bsoncxx/oid.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp +vector +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/events/server_description.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp +bsoncxx/oid.hpp +- +mongocxx/events/topology_description.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp +string +- +system_error +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp +istream +- +memory +- +ostream +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/types/bson_value/view.hpp +- +mongocxx/cursor.hpp +- +mongocxx/gridfs/downloader.hpp +- +mongocxx/gridfs/uploader.hpp +- +mongocxx/options/find.hpp +- +mongocxx/options/gridfs/bucket.hpp +- +mongocxx/options/gridfs/upload.hpp +- +mongocxx/result/gridfs/upload.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp +cstddef +- +cstdint +- +memory +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/types/bson_value/view.hpp +- +mongocxx/cursor.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp +cstddef +- +cstdint +- +memory +- +bsoncxx/document/value.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/stdx/string_view.hpp +- +bsoncxx/types/bson_value/view.hpp +- +bsoncxx/view_or_value.hpp +- +mongocxx/client_session.hpp +- +mongocxx/collection.hpp +- +mongocxx/result/gridfs/upload.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp +bsoncxx/document/value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/string/view_or_value.hpp +- +bsoncxx/types/bson_value/view.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp +bsoncxx/document/value.hpp +- +bsoncxx/document/view_or_value.hpp +- +mongocxx/options/index.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp +string +- +vector +- +bsoncxx/document/value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/client_session.hpp +- +mongocxx/cursor.hpp +- +mongocxx/index_model.hpp +- +mongocxx/options/index_view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp +memory +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp +bsoncxx/document/view_or_value.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/pipeline.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/pipeline.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp +cstdint +- +bsoncxx/stdx/optional.hpp +- +mongocxx/model/delete_many.hpp +- +mongocxx/model/delete_one.hpp +- +mongocxx/model/insert_one.hpp +- +mongocxx/model/replace_one.hpp +- +mongocxx/model/update_many.hpp +- +mongocxx/model/update_one.hpp +- +mongocxx/write_type.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp +chrono +- +cstdint +- +bsoncxx/builder/basic/document.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/read_concern.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp +functional +- +mongocxx/events/command_failed_event.hpp +- +mongocxx/events/command_started_event.hpp +- +mongocxx/events/command_succeeded_event.hpp +- +mongocxx/events/heartbeat_failed_event.hpp +- +mongocxx/events/heartbeat_started_event.hpp +- +mongocxx/events/heartbeat_succeeded_event.hpp +- +mongocxx/events/server_changed_event.hpp +- +mongocxx/events/server_closed_event.hpp +- +mongocxx/events/server_opening_event.hpp +- +mongocxx/events/topology_changed_event.hpp +- +mongocxx/events/topology_closed_event.hpp +- +mongocxx/events/topology_opening_event.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp +bsoncxx/stdx/optional.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp +chrono +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/string/view_or_value.hpp +- +bsoncxx/types.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp +string +- +bsoncxx/stdx/optional.hpp +- +mongocxx/options/apm.hpp +- +mongocxx/options/auto_encryption.hpp +- +mongocxx/options/tls.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp +bsoncxx/stdx/optional.hpp +- +mongocxx/options/transaction.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp +chrono +- +cstdint +- +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/validation_criteria.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp +chrono +- +cstdint +- +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp +chrono +- +bsoncxx/stdx/optional.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp +chrono +- +cstdint +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/cursor.hpp +- +mongocxx/hint.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp +chrono +- +cstdint +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp +chrono +- +cstdint +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/options/find_one_common_options.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp +chrono +- +cstdint +- +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/options/find_one_common_options.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp +string +- +bsoncxx/stdx/optional.hpp +- +mongocxx/read_concern.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp +chrono +- +memory +- +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/stdx.hpp +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view_or_value.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp +chrono +- +bsoncxx/stdx/optional.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp +bsoncxx/document/view.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp +string +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp +chrono +- +memory +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/hint.hpp +- +mongocxx/stdx.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp +cstdint +- +memory +- +string +- +bsoncxx/array/view.hpp +- +bsoncxx/array/view_or_value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/document/view_or_value.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp +memory +- +bsoncxx/document/value.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/options/transaction.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp +chrono +- +cstdint +- +memory +- +string +- +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/options/transaction.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp +cstdint +- +map +- +vector +- +bsoncxx/document/value.hpp +- +bsoncxx/document/view.hpp +- +bsoncxx/types.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp +cstdint +- +mongocxx/result/bulk_write.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp +bsoncxx/array/value.hpp +- +bsoncxx/types/bson_value/view.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp +cstdint +- +map +- +bsoncxx/array/value.hpp +- +bsoncxx/types.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp +bsoncxx/array/value.hpp +- +bsoncxx/types.hpp +- +bsoncxx/types/bson_value/view.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp +cstdint +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/types.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp +cstdint +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/types.hpp +- +mongocxx/result/bulk_write.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp +memory +- +string +- +vector +- +bsoncxx/document/view.hpp +- +bsoncxx/string/view_or_value.hpp +- +mongocxx/read_concern.hpp +- +mongocxx/read_preference.hpp +- +mongocxx/write_concern.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp +bsoncxx/document/view_or_value.hpp +- +bsoncxx/stdx/optional.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp +chrono +- +cstdint +- +memory +- +stdexcept +- +bsoncxx/document/value.hpp +- +bsoncxx/stdx/optional.hpp +- +bsoncxx/stdx/string_view.hpp +- +mongocxx/options/transaction.hpp +- +mongocxx/stdx.hpp +- +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + +/usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp +mongocxx/config/prelude.hpp +- +mongocxx/config/postlude.hpp +- + diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make new file mode 100644 index 00000000..b1588967 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make @@ -0,0 +1,197 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest + +# Include any dependencies generated for this target. +include CMakeFiles/3ts_kvtest.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/3ts_kvtest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/3ts_kvtest.dir/flags.make + +CMakeFiles/3ts_kvtest.dir/src/common.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make +CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/common.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/common.cc.o -c /data1/farrisli/3TS/src/dbtest/src/common.cc + +CMakeFiles/3ts_kvtest.dir/src/common.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/common.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/common.cc > CMakeFiles/3ts_kvtest.dir/src/common.cc.i + +CMakeFiles/3ts_kvtest.dir/src/common.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/common.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/common.cc -o CMakeFiles/3ts_kvtest.dir/src/common.cc.s + +CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires: + +.PHONY : CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires + +CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides.build +.PHONY : CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides + +CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/common.cc.o + + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc > CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires: + +.PHONY : CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides.build +.PHONY : CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o + + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc > CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc -o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires: + +.PHONY : CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides.build +.PHONY : CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o + + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o -c /data1/farrisli/3TS/src/dbtest/src/kvtest.cc + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/kvtest.cc > CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/kvtest.cc -o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires: + +.PHONY : CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides.build +.PHONY : CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o + + +# Object files for target 3ts_kvtest +3ts_kvtest_OBJECTS = \ +"CMakeFiles/3ts_kvtest.dir/src/common.cc.o" \ +"CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o" \ +"CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o" \ +"CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o" + +# External object files for target 3ts_kvtest +3ts_kvtest_EXTERNAL_OBJECTS = + +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/common.cc.o +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/build.make +3ts_kvtest: /usr/local/lib64/libmongocxx.so.3.6.2 +3ts_kvtest: /usr/local/lib/libgflags.so.2.2.2 +3ts_kvtest: /usr/local/lib64/libbsoncxx.so.3.6.2 +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable 3ts_kvtest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_kvtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/3ts_kvtest.dir/build: 3ts_kvtest + +.PHONY : CMakeFiles/3ts_kvtest.dir/build + +CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires +CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires +CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires +CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires + +.PHONY : CMakeFiles/3ts_kvtest.dir/requires + +CMakeFiles/3ts_kvtest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/3ts_kvtest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/3ts_kvtest.dir/clean + +CMakeFiles/3ts_kvtest.dir/depend: + cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_kvtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/3ts_kvtest.dir/depend + diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal new file mode 100644 index 00000000..df5f5b84 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal @@ -0,0 +1,286 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h +CMakeFiles/3ts_kvtest.dir/src/common.cc.o + /data1/farrisli/3TS/src/dbtest/src/common.cc + /data1/farrisli/3TS/src/dbtest/src/common.h +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h + /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc + /data1/farrisli/3TS/src/dbtest/src/kv_cntl.h + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o + /data1/farrisli/3TS/src/dbtest/src/case_cntl.h + /data1/farrisli/3TS/src/dbtest/src/common.h + /data1/farrisli/3TS/src/dbtest/src/kv_cntl.h + /data1/farrisli/3TS/src/dbtest/src/kvtest.cc + /data1/farrisli/3TS/src/dbtest/src/kvtest.h + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp + /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp + /usr/local/include/gflags/gflags.h + /usr/local/include/gflags/gflags_declare.h + /usr/local/include/gflags/gflags_gflags.h + /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp + /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make new file mode 100644 index 00000000..176e579a --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make @@ -0,0 +1,286 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.cc +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.h +CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/common.h + +CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.cc +CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.h + +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/case_cntl.h +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/common.h +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.cc +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.h +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp +CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp + +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/case_cntl.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/common.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kv_cntl.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.cc +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags_declare.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags_gflags.h +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp +CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp + diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make new file mode 100644 index 00000000..6806b272 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include/mongocxx/v_noabi -isystem /usr/local/include/bsoncxx/v_noabi -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -I/usr/local/lib -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make new file mode 100644 index 00000000..a7bea209 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make @@ -0,0 +1,6 @@ +CMAKE_PROGRESS_1 = 6 +CMAKE_PROGRESS_2 = 7 +CMAKE_PROGRESS_3 = 8 +CMAKE_PROGRESS_4 = 9 +CMAKE_PROGRESS_5 = 10 + diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..688565985187a9fe753609cb16431bcd2d83f78e GIT binary patch literal 91936 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 OKe%E5)BRn0qyHaeky)Vt literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..06fcd9eb09b48ae9ca46ecce991e3012ce8c5d9c GIT binary patch literal 628520 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 B(U?+-fPwxJE3n{vY;hxcIy66P&aD4-cQm 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 SP-h-JsP1&UZKj8Cx&H@A6P|Ja literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..5ac3ea8b12a93c6b55a31579db764fa56e652c00 GIT binary patch literal 121172 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 ^rg+stJjgF2 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

qPDTRg zLUuct_M6i<&_r1YA-V%jr-vqZLkPk0;n>(ut2jnt2u_z}awSn-o9>0+%=F-(dxTbT z$WI8tndPC!bwk^LlV_cYkDfg1Op-W-;t^7wXXmY&ecqq8U4)-?h+HS^1{kb=3TG+Knz6$SN^p+Q6R+dlbE_ceyGu6SKRsGen>}h$@=!lGtO)r;wMyln} zo&gyblUmOplx)5l4fFxQJ+*|bip`QC8889a;obUd0k zbW>%b&*r)vehp>R@(G{|+3iD`Up^euqmVYzhhw_bDo!4sCP`1BxS#OpQ=hy1?6oU4 zKNh=3A1s$%&RSJnT^r2x4#KNNZs_9QpdfARhx+u->{nd>EFC(?cu`)znsR6v9FW6; zpRQQ)8zOHXP9FX9;pEZ3Bu=3?MauJ^J9QWS?H|AN&r25WaZB#CbmH&G3dWMW7#Cm4 z7{sd`W$+07*_lD4NPpD7Zm(_Q8OXru9em{4XXEPj?798Ubb4^>aryNRKJ4UpAb>99 zw|_pIJo=|HNz#)?|9m(mhmd-eESK89J@-GZJa5N;-J!L2ux3Xa(KTJW=UvxzV`Tqs zirGKqwO@ZphM4(PUTQk7>w1@8kDy0s5kMF6>roO%`ThC}_vk#bXVT5|rK0vG$2`c) z-k!0ZTYy?xE|%r|(&OJL&;6E4}g{7xLEwAC8ta zjE_kiZHG5|;AJQM@rz&naBFMYyUMY53!IeUVTf(LT+%b%%dfS=T1LMeYbIml$Pt%g ze10I5E-2EFUxr#P!zmQ`R`qp{oOIxOzwnhuZ+riB-`ZNPljB02l{Gyh_W9~cX(nIG zavv{T(cPs3?9Iv%%gnG$;TAdI8Ef>7zvQ>^Vg8HPA^2x?ha|zf70~)i-#WML|Vj9>{U6eKB7##8Wc`Qq zG#kTzar;I+GI=1kw7o(u#QW|MM}CfUKH{K*G*&mv1`@AxntG44c8|2w0pIh??xpXM z2m6OVMnHelX?Or=IN#BDv#Di^RAda%tby@qa&_>(q!yq1eO&*hz zU4w_s+gZ-YiI7(>Sle0;$-V0HV6s-Z9u$xA5%S>iu0%a3p7J#x9`DN4gW{RJ&qJRN z&vZKv9(KAOls>cn?ZTs85ZZ-D9U`;?51ppo5%S{UKh}ft5G+C-%zZR#bXGi@|ICBu z(;2gUdGIEC=rg;Q2hXR2*d9Xbc!lB=!8x_I^*t+s5b5@Sj29~cK z;w6RPMibI<(Z>2?>ObwawT;R7IZ4$=g5t0BukClzFrd-NW*xYyK7@ zAOC0%sAJk^(lJ&oZ+qJav+X7u>_pmDH)|`b4KbW}JHkC{3(}Yt|9rF&@pgl9)@f|L zKV$tVfsI1z?E$_?Jt$r)?ST&u*%0#7Mf1xPLFsFyJ@Db7AB1+%*GhYkrmxlZ06eYN zu84AKy*)_N*lK&=!$TH?)@4#CG6rzTO>>WW>VJlwedXil-i`k7j>U|Dp7o0cWE4=A z&~@?010`T5CR*<$b8uA#*B_O%==YE1F#lThGn?%+TV*~Zz8!d4XB2}p={T;jEoyJF z&)M2~wK)Ah5}bO-K6aSKdaMp2|0#~yk`SIgp1{%le||Q4!^@{Ee%F1-5C6!mHR?>w zlg#cJ9j&b%EG?_pcF9d;nI7Zr6=q@!YL2Pe4!)RW>7&0-6(Ztbc3GyeR(o)=$TE$y zCV``}Tz=6##U0-D$e)_Za%N>{_$-m6e28rzDoryTNxe+Wy&il(mWc!aLG%V57A-I`2RnY4{~x`K(yPQ?@u3`Oz=Z!EDfd3^`C6A$ zSNy&w_s~g_E6LgY#S!i{o|F^8MvFh8357-APFA4j}=^uetjPV{_zwq$UjRHW~r{8Ss$i1v8C{{w1T B$!-7u literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..35bd50a4fb22f00ff18cc88acfaf52ef2f0729e2 GIT binary patch literal 984144 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

JKA8|dgtN4qRADyYj>bYm+6({3>0_Q-7>? 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

  • h2e+P~1epRaP=qj$iS^ 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..cdf7a872112e23fe4fb6d6e8602574f77c3c6fe9 GIT binary patch literal 70320 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..4aa1feaa82b05b9ca97df0e4a8613fdafb42cd7b GIT binary patch literal 642356 zcmeEv2b>(mvG)$i1c{sl0)&K60NtL_i6n%ylI~97&_+fyKjU=vL6 zbHK&{Y;61<4%kGe$0ORtfd>z4cn^cI4YuLK7;KCKPWY>T*VJs!T+i`Dl<{kz$@ z>FKVi?y9b;u1>u@xz$T1H_cl4qhV({DHWW9=yvlDU*G*Nue-aPaOXV_yoa9Mc?%Yw zG;4wD4h(j<&F(pC-M(!9K)xS2kZ%}WlRC4-YL-kAr9#|9jC|t zh*RKF8D~%WAL$X2;>Wr1%kTuR>fxoF!w716*q+NDxO-Or`5%1q-vQHIF(plvT+9{= zIk(VLC>F9^h4bjCx5v%)bh@2Xll_A^_1sV>sIn%-1@)xY{Z8~8x9)eOlw8lV9neK+ z0=k6XAr5K6G(#M&9U|T#9=vDDhj@G^{0?}?_umJiU0UQu&1rM}DNCJ;} zoAcAJb0GbEfB8XczkATE+n>4N?l(|x?utcCt;^b!ESuAqS&P)*8_VylLB4b7LiuqQ zdB(J{muJYQw<+MnvWH;_-`9Z0ecXXHhpJ>_9$~Y3k0dcLxgR<(UZx-p+Ix+EadgaZ&*E(Ny9~C@pAzDP2N)F0YyP zprz?)1w%WCtqD-!Zzgz6j7K#JSxlDVOelobV&v5CV%#zln?vmE_;uL(YxqY^~w86~~ z8Y)D{!NFpot5DpKN_~w|LDzjr~& zy?x7`|NZICLl4;QeDj`Gv zF+O4o*ud#Ez(HLiB!`o7#!&v5Gk>%3)!+Q-;tN}r{u#E4yQ00AKbHjg^p1hv9ughX z*OCCwb`+XAdvk-``JUp`wb`yglI0zc4e80S^<wg}9VOMqlZFWC;_SQ|5M@ zgvIoxZByQ@sa;Q|I=}SwM=w}>M*1W02Oh3y&|aJ@W_~T~`suLim$af6F}XO{*Ohnk zU3uvA=H*b_o~2J_{?at1oKoD-m#5_I8BY>G#v1x+zRmvvy$3)3lCC)YGo+2u;n35# zblcFz_6IJE2mPaho$VjYn{s9ljH_;XbNoJsuRE}H=l!OQp=Z?}D|L6LsqStu+d=iJ z4Etv4OD$@5smJE`gPWz2K?Li*Ss}BaBaN+LG!Ho*2;LPj`fv4ZYGH~0_4M#q1k6U(gG4)_4i_znW-gm=1~1$Yu4 zeuw;s)!)gEaa(d=v2~3SdeZ@Lb|0?yKPYkVoNf0|w$zKI9P? z@{IT5t42K_B&qYIs=hft;KANt*!J*Du(B18D1a5ksSW+^ra!ZDppdeLoAliVJ+E!;tpGZ6|(T z%7iQ9Ngq%lz8xKgWr8E^!>0a%a9A&FeEOmBpS$XZ*FtZPB|M=QDwA?{W3+Opfe&vE zbp3)3@()rVC7x|270)U%dq zVVAMLbvjgfXJ>yL-*^xiqE#2+jCRewqRrX|hOgd;PY>Z!3bER*5mpcmx4E6iePPa5 zR{cloH{aXv`6K8fL@$k8pJerZ)%Yv&sjJtg&vZy-+Y zs8e}|JL2_vMtxMM=g9JKSqOj%vD$_amI)5a=*qqYy^c+AP+kNZS_R>-{WJK|`*!`0 z|M%nnDESts@3X46e_gh}voil=7Sk{kx~$Xs^UB%WpC|d7@5$wx+o!l*FIC|QGcHQ6 zAt&q~6EAUnm2Y1{f9VV0S?2{^m&L^+SXUVb{afZY?!QzjOE7=RIh^tzH#0r!j=!wG z33UxQp!%p`FMSMmY+s+RhAPruy#J`*kyM$GU!zo|)=m$h4-&Vnh4DF*a5;>LOi&Q) z+M5n92q)!?A!vX6pX>VG81a>_!@id>l%D+NA4BP;GNR4)YIVU2;I)7~E5i>tky!2y`+cJ)( zwk@P^E7piBCPTt8;H4>>M69{FlzzXA`&K>?*7d;2w* zKjj=xP>y`^y2&&DaMfGTw@1;ll8Zb8trngZH3CMSx0WUCG?}eM&7W(@w7^ByUYx4N z#F|^?^pUHKBIda2e~g7u_oLBm?&-|0cfCZ*2l_A{j$SRKWO!=Clhg)mV1xaxG9%5! zq^yzVGNrV)oIY)gF}6S%-pfV@ibNsS7@MEplvmn%rTTlH;k(S=T(9Nop6i@3reEhU z`Z?y|U55={u;$<3!}a|fjWp3UUv$^xyZXrE2WDB)S|DawLX;a{zE{q2OQNfO$!MrJF z6v4RrgzNTQ-tvtls8{J5`D5BGRGn0t=-eB}qqPR9nwmEv-9C*4W~I6vMdd+#9gd$( zu=d5KZh;Hq0bCI5>Nc1+w@{@IUyb}Z)EkELgll{EKCS77ZlzMm_m2a36_ zW=z+sogh_8ER&hDG}p!CEYL_puFH4pkOW=T2Z6ZQcY|7w9iBmD0*zPFCG=CIOt5wd z`Or4dW=!oy;?QCvMB1JDBZqi@nX>&NyPG4a2?zLOZl|_5 zuAst!?x(9lR+fozZJcUo3Y-`p)H*_SG!4Sybu-WYI@@vWmFsT+9Z-I+J!>_b>w*R% zC8IE?)W2Ib*rOJ)!7rC1#s+OPSqa~XdU}Aqi5Hw%^v|LTo*j7QrhAuRzM9{c^5uGZ z)6Z9nNx1T}+3a;(eLmaJegSj^^f22u>?@FG=+A0x9@Keo?o)O8(F7~0%~PMxR+?*R zYl{WxkaA8WPWi`nw~RWocg?O>Ub*3A_;7R|&8Cp=?5~-&#rbPsPl-Pb|Dj*bJj&xH zQT_CCeG$9^47sDda{FYMh==O~Y4mqUgLuSo8|S%EzySfc8u~E4F9!Z7_*6_j8UB7{ z7$%>LwAo7EH|0fH5t8IZT_9A-8}QUz?OC07@rG8ss~3$8?wtIp>|j@sUv{du@~W-B(4BYt^T^@y z>IeomU2}kV%jMDKz~ox5>rr+&hFa%fki9|w5p~kDB)B23&Q=1P`{;O%t7AkbNP5u; zEJx#wfaCN7+U0fy+B zWH3?=?4Tdqa_)?OKl`Uop?@s03Y#<7j4vjUXa2Gv)dLnuRrgtpC7SH@k9#J6>b28$ zfsfo<*XX;!lhrj@qXlmEOK2d1CMPPkF2^@m>yAA%;D^f)@4*i_SMeaXalO3(SS{>G zv|W)0%)>)t))$H)qZ)e*NcYb0g@P`Xbsq z@G{f(lMz1?o}?e)gEh`$Uq$#qo)_qn@eHnm>c;M4_+TUPA(qraP%hh)EeI#&Oe3h* z?0(|zhg@{eaiGoN^bCKtMjY!&`pHPjpq+6qB*sM{ zL_e`(0;M^F^7$REB{Sr+0*;_ef*L+X6HMs!RiWq(oBYiq!!X9Q{Gyo z()!mn^69%nx1I8q#oCXR?Z~!Jp6)_(_)o;X!hevb(uN_&@vO^U{EzhD9sG|rg@8P` zAe$u(@*_^}`a9%Dyh4TUu+vQW5s$RtclZY40TUN+5_r&Eru2vhzLH+>FX2_)IO$3% zOotSRz5^bHEaUpH_xt7yuuv`pTfdhH7U~PZ7FMSLFVG3W7M2Mw&=tWJ7V|admAV&H zZD9rRN;x?K`>l_BXv&*6p1J_?|73dR@ytMHkt9Ry<|I&`k@qj7rC6jZO42H-^GIDy zuj^Q#40ED7j&t0|j-z^I?l=-SW5*GlM!(~zB-!9Vet>qx>sd`32k=t<3?vx=7_x(& zB33zDQ}1^zqlOCJI8`;^+Ku@p=>q~6#zPf>e&XAadYOVSQqBnkY1C!UpYgrJp8q|@ zxyIA8@<*4b|Mu#t@~#2vHd`Ot3hGSJNsw2H&Aqun^31xVIz3e%+oH;)V5<|}X?rz{ zqB7oh$$jU4;scGZKxg^$M#%SH>=ido#XTCx3)4Qua~DVTF_iDGuPEDZ!ZVOcT~8Nm zj8EYq#(YKaw%D6&n{Yo8@n{R&9@wTrI)sQmT_irAgCz4p47Wr>q;y_SSGO9iYa+0qHo{tqHkFvhiK*8UMX|m%DHN_)DKy zaNMhV^4t~jgpm8f9qjQ>I-yOBa=m>UniW5$C(ApI#9Ex-p3X6Li)e@LphZz+`Ob3v z4WP^Q7a(H;D3J-gfXadPaJniF^Ek%JqWrBUdZ4}$51v7Q4hq{opdI4m4!x|@mgf^i zJao1xAL8*1(>uh&o-@5eJjw>x_!e-Kav>hi$R}~Y3H68c5+{9H!Bxr$ev>$)$1~O@ zh4BD>h(}vTkg;|wPV@B)t^*tQ=NEYKXG7O=p>2)3|Hbq}6Ls0A#v6$D#YOF5hO%RB)X z2(^HPc8FjLYZ+(rei<*cTLfEJ%Q>6(%dpVC5o}?d#@W1Ih9z>s7FMu~Dd%v4`oACV zKla1}F8&O3KH$QxPNa@HE1oZ-d=zNg`u;Ebl0ZOv*-r_E$~G2cUL1QMhCLjK592}~ zQX!T-Y=jkrlX8wAc-!3m_YMDgvf&8Sx3}(3@5h84FcnXP2oJHNT^j5!V?X{9N{hO` zl&)IZVlnDI5+BAzAw)m1>fQ(|2#4+4h1q=;&A$EmZuCWB*|#+9h}QkldRlM75n+V- zGSshc-@cFDgRYm+6{k+2!-SvF1WLNxZ0ABIAw5DITo?~dkNSjsL>oe=ls}j^tFOBKYgb>J(*8Y?B;QwFy7#ERT>t)qVUN}N3>M8KjvCMK+tt=;6Hg!- zOnG!-`$y(HJ_9uH##qYP#7V4$u$df152G!)HQC9>5k2NTc-qFUL!SC1?BsFuOg5f2 z)DrHZ1SfrM8dttPMm${|72Uf5Bg8y3Oem^g)AzZCa=?zpeN))!=u3;8Zi|;fN&O`6 z|8Ti{NNT_R{bn9L@2f|BXg%mUie6!j<{m|LnyMJSsXR(hcbRNsCz=n<3&yjZ^q!IbWvZ)rOt;D|rK|2S3)X&fyGK6R@jJ-;Qk_M}o1s-!k?&n< z;aE|{0+)4e$2!qdmiZ`dFFb|^t4e$)DRn`1g%cvWxN zIiEx3)2$+$L7M_yacC3Q=8QRZWyEKV!bN^!_uYoT3c^V_#}LSWe$Scn$fHe)USsK* z=vCfFQd*0%IS${d`&XJK8GT2W3On%KIhpSN@2zu>PG5M>qgV9Yn8*I>pr!6b@m8Sa zXhI}UyQ6-0?YbSRug6E^>f5{Ub}m?x7quiWYDFGTX`4zai5Jqj1?<_LX`|zIL+9|$ zc6mBxH&+H^c9ae6uRrs4g~4i#ktATz=CR+8w0YQ>GJb{sAb;5=;<@!v@)#hJ*nr4~ z3$~}pc0@dIG`&MSYz)&o#KV3MzXOhl*KJPB&qKKolGGvBALoZIfy~2q5NzR@V4(~M zwSc8aT_afBU#JaUpd~^r$_Uyc)B+ZG1)(}vDW{oW95iC_v5$T9@!_zqrqc7fLQXZ1 zoFYlxpUo9zCckZ6O(muT{c#sL#5`}`7e%|nrMGY021$Y&u;Nf%+vf5KtdxVX-WxBO zcFbdIzxf<^0_(}lJi(`(t107~LwD&LqU)>6Z8aGbR^|2M&~*88J?62c&xyo1U>n@G zG~QvHfEPk_yc2|#a^?}l8+QGiJ8#Y*JHbCRnVyMvbhC$!ELHp3dq;n4ZpP_Ww#f|I zN?&dMK7ch@b6xtGLtgPlw_ELV60oJkoI!0N*z&@?#0cPp`!zYjI?7&-00iU+iEb6i)F2SeVbsR>usMm?~T(+E&=fBy$7|B1c6p`%nEDX@K85;FMyW7@8} z(g88FJfD_R#M{hm=uY69X+yWzJAuO=7Nv)MA2T_Z>-&HQz0bEBJWv#W1*h zcJ(G$&|R&6{n3=sJ3oHZ_1C}$xGzPrelyM4NYZLE88xk}$yJ|4-?AJ(*5{PTd^%NK z^uzN?gwB=fuaH&B0QAj&CwSB~eeQ1corMGLFxj#2i-cqoe`*Tw%BmQ$x&x?M1^A3kS{K>yTSC;Cz zc5P6bY9-ZNv7XvL|%*`40pWE!T{`L=U0PV)pGtsW9 zc~_f)q*13Wl&Qxde)CJHY@q9yWLSUvgo{ov9OavEPS*Kk2!n4n zDubBEH8z)RT+KKo@MfF|c@?S~r!>J5JIZ!!F$gQ=EF}CMzqf7vH$Fc49_VcJci)x# zT7$VcAM*GS_c(G4$;4g*y+TPNTg49wQCALl=jgd2DS_brW|7$@L` zP#r%7VWpf_g1FDZ{vyfsOHA+iJiLAFSL5y^B}vm-r2-XJ~RLDnE`SPtPG;^eN&D8%8y zydm7f?+_2x#XJ3b_!i>fQxg0Thcw|hJj0d*3@IC)@h!$b{=SpGPg$GSje6ud1bl?* zc-aJt%Vo{?+~hkm2xnj`QGur z&h4{%&jV*3^~Il!qGya*=g)11tc&;pEqDe`-in3Ko*csb6=|#ZubdnT%Z#{k2sGgK&+-d6fS*nBOXQI0 z9rzafW_l;`2(ZI=>T*fP1^A=>;Irp;&-2}oCLD)n_~N)tb2>cZTU<7lMW{anTe^Hn z(S-BH?86#qY=XmOv%~4j27I{e)x!~4W>ZHdd_;~_3rA#FwQxj!RSO6C5vqj)K1Qe( z4tO8I1`f*@&L{kg_JWWcPRbci`FGjl*!~?(ed96s+WfI0e;p$o+cuxh3E=KazN42G zKzH@!`VP_Et;V>yH)G*ua;kt43FO{|v|=vGsJ>f_PoF zRO7<{PK*x$RiQe&DF`d&U=;1Phr8y^JL{F{Z~pJ>`{0LAeSn(IM|nq{JwKT|Yu>5# z*}?UhZqn(~3q8gB>i%pOZ`_jYDK>W~{!^5J3^9x|4Vh;#m4p`f{Wh zn7aNH9gle7Px+s1hmtOr{z)7i9{vuVbsY|w!+Mo%2GQYYRwf;eIKdA%;~DZsHA8RT zQqkdh9MVX61b>tZ*JPbrU8cN`M5AnG{BIkxG-i(21OC>w<0e>To|(n#vHmbbj=OH zL;XSzBE*F^&j3Sod|VjwLomR;B zBE*H!PB50z#qyN%(y!Xf`nt*A?7VB*;pf0#I+`L$w?(fD3Any$HZQ$E2kF2Cl_||U z$6kjx@Q!hfu&In|Os=6UusLv-exNQB5gWH32$_W|N+#Okg>Q36K90xb5;!RbG#mH$ zxhp>P*T%7+A#5pSpHwmLuaMyxVkmbx9;-Aztd{i-o|pco4NjEJ3$>U7#(NVE|MFF5 z{i$o#B-A&bb!54RWD+;A-%8X>{@GsBPO|>=c899Nde8?rwH+^~iW1mFd3HwQj zonFJa{Dn+#w*Cy4PM^wn90px(poPD`;+N??c=uM7zIOd5=oD!iad6=8DMdbpNe}Dor+86y-`~XpNbple=*t$S5TSIZmy(DYz4H>YWtbcdwSmreGSCP zU4Mu6ig?@+(5DFJhYf=Gk{!bRM&u#0&X^wYrSHV@-$vFE*AD?yA-U~hf`hUm*tAa* z9MmB~wQ!_QS1lZ&XL2|x=V&U=KexH+qB}Fwe*jy<(`lN0UgLR_)S|)%yq3X#$lSqx z!WZQppi9~l)7QM#9yCMy1Am)%K5TpI^GVw~thD#YgDA!Q80;XRV?KXmej`=9y4 zm;<&u`Gms>{@W=ho4f-~^O^3pR&POinYtP>PcTRLgNA*op4djIg-iskaX}`Dd^OP= zX+#E!&kE1L$&?=Pkafr>aPeG{mC0ov>LL%Yeu&LCL+aH8huemo%v$B+f`1sFBr>bl z00(u6V8bs#IJ{5eb#Hc$S@6e>KG@+$5Ikjv#~8zCz!30|4fCp5^6qzTEuVxGcI59p_s_Mo-g0ND~Oal8~GjBWX ziPQSu51LLy`OD4$$LWcKJ-z*%`F=X|w>#U{T!Uj1n#d_6v*l>Oq*$6q$HOPWCD3>Ak#bI;yw7dBZsDCDnResI`PYmXPtQTUm!77L z-771txtzMIfxy(ynaQMQ1lbpiO3W*Bt!(um#(Yp`i(qVd^R43WtJo^SpJL<5GiZsb z#k0H%^Rc|c9XOy5!Sv&{66V)xbSugk9#;Z9#=+ixXd!s5s?G?A3aqPzhi&PA@v2f_ zSi;M;u)^g;e@p0P3yb-}$4u?{-1MDaUbNxwPriZuw%#>+J~vXc%Juebpr6isCVGR! zw$}Dm&+4?T%W*_dw5{=quxxYcZ2+~5Ho!c@Z2-?`M=YkQo12X9^S22g2WJJ{Pyg&~ zr+ohdUt0^Ca6Uc5CafC`0i&UbxT7P#y3iw=!^PDv7ZKq=^NSS$YuC?6qPu|$%p4k=!G6Ki zzgxS6HV>xZ>N$OjX_S9atC_sSxpAAZBt#JC~RXwmr9)a zl(+T<-$t;-nepYk;-eFL(FT?Yj@XIG;jqto-!J_j_r_^Ew_{vk6rswx+vgi^qOsx| zUfaQ^aMY58_`pSUOK9;(U$I|Qq_t1(b;2LI@(-%YE9*+|5NNB@UAL$3Klng+p_={! zaAUma9~G+e%>`j`zw_*)hxhI}{g{U#8^+T&g8k0uIpgL1tu^j|DlZD{7)Bx?gM-n$ z+OV~SPoV|?+MTKz0@HeP$%Jb70C+Ex##;kEFu@Y=wsp#N=@Eq3zKQ-l`JqXZSN~sr zEc$9==$Uv*8+Q!t|hotn~h`H%cvZX6S#}dLT~qo1#fXZn)^|@{Tv~K zBfky!UQj;uA2!Zv`@b`vI~Dz>3G`yiZMXXJk$KW|t>yIAxPIg$qU-xspSeT-e!IK^ zT{}tWoZdogx5?87@?Cj4V7Ipii#CecLQlS5JQ_W;z>*H%E%f&ANf6Av5qxj7;oc-A ziZ=IGrA%wDo8hBEn?dnY#;lf%*UsiO$mX6Jkv|t5QAg=H)~FxOgxQ z$bn#g=4&v2$~lOjJUCnTy+<0{Ysr6DPa|?W4i4(`>L=EGWuNvpl``T#b!P5Ie|gQQg-^b<(z4E4 z+r3JwgzwGtA*8|m?W!~WwnBh@?CLC-H|1cy$F)a1-?seVFaGPVEq7hO`(=`RYZ~k+ z^c0E(nk9E0&GW!82sxS3lOeo(ZP47dXnMy$Z%=Oh`sr&)>t#C%O`W~D!R~xdaVl>c zk-;A7&HMQ2fj{92XpfvE3cqS>Rs0*h}C5!-igkEOog7=mM)n` zhW`<-!;o~!oS}N%i{1+#C&Bk(%6~asr4ZjgV5$QXEY=t0$0{qsN;zW*$>xvUfAlBr zI>o_U$BO4WRVKV?x?+?aXY5zy2q(0)K2?EiXVm8_s>-0BST>HaUh@J%-5HMXQG^|6 zgtN*3N5+(G-~{IxGCrU?LUK4MXB_2!xOMq{zkc}Z)1eQ%Jr`h$H@eHHUqr5Tb%tX_ zUWUnx?Q7I{4NWt2m-e~7d*1hLM&Rn(nQPT2VL_)-wth{>E0Jfq%tCxp8#;_n(Ek{V zzl>!I!eQC+{k`w%e4+KiVXy@~*+OJ6_meBC6m9w+jYmuool>s;!{ZOXqe=sh{ay+C z%6*tP`XmV*On5O)gq#ZT=@5n$gp+bc6TF|^)i&(<*N6Qq*12dE+Xc3x=ZWYMb#Ig# ziwO_ZJ?^5*!N;PT@t>~Ch4=OP-Q7!rw6@6t(6^a^3*(`Xp&vW@F_@Qa?x)ZA+1@+8H2EhO zqbSv1bUzOx1&vw_R;oYDFGT(IXl)hkF^XUCPGlwY8nOw0;T`@*eE6Nj>wIQYx4@He zB;YF8)vYNna73t7N5Q-)2WO4kmwK&vubV!-*9Sj1{88kGpNa2Bn%X%9lB7l@#v2l+HYp(l4%lj72KHyfiD@dI+xU+jbw<<>Jtxxg8=sNY5 z!Ydyum6=?-?8_y>v=El4%T|Rg%NqEAYTZ^qd(cVjJ$zH>2AazE5RdBPD&)0|$Rqg? zuct?RDUSO~acLi}2d)DGsDd5+byy}i(k^XiV}iqcU%Bm7!bj+k9G{c}AKt@XKkJC| z@0h68_Z&>maeUiJSiQYCjm^(y+8i0?HEoxi$#jZ4I!dSe?OgXqA4CiUzByPiQf2*$ zWTGFq{&_qQ@g-ih#C@+EyF9-2SIpZn+ zu9L1Botyt)9{oIQi5lR&^w2pT*0u_|eq^qQLpK6nWB>1D!Uysicd;FHK0qwwv(5*2 z)@5_j{vUr6Ur<5Wa`PX4`CgAtm^Gwm+kLtUXn!j!0CaE z>1q9WH4xOFUq#D+dvY`ZdAggKqP7QDM2a)+Y~pXd%>$504nS6LU7PJT+wpJU5#|f@ z`$adzDN8Uv&%-@n+n-&u^Z5rKH+l5`edch2M>3eIjwTMMHASeuW(?ipYA-fU>(BOd z_IA73T#h>Ez7lqe+0_}EyUTfKz%4<)vK`ZLc?|9(msU^{E(j4a+iy47uGPKpkE6do zlY}p5(X144<$fjV4(WATfo6CX{sygu-gt-qamR(vAg$hy)L{u6=ne)nn^ER5}BARxN z+wSe;S&0XAT~XJwcD^#b?o9eDF0blvwl+PRCOzGB?}5jh`1Rjz4?WBK-d3K|Tsx7j z&qS_lGwAYQYnqEZhUoO&$$y)j`NAdJW2_qXALb%AxpVR~0Mxr7(V$alGww=qO7FL3 z>D!Rs9dwBghufOHUl6uDE|`&QO4|AP!gw)G1WW}xd7{G#!r}QuzxuyDrcU4QsRI0J z-h85xPq$WnHJ(xtWpf&RYFpBr3dobw4|}rvlgG8)hB>7?MnPTQxN}Mqba6BAKX4a! zmP`FzkN9QRF`4E?*5{e7G0s^PJ-Q23tYNN;?=uL`+r3-}!FM&^c*7an4L|t@zt|D; zOtHSA_P%N3)KjbWlq0;*hwW2%v%jN0_f%B|{lt=~Mmd!i5b7SQKVgKk$^fT=@4^VD z*8r!2?;-{qo>za@l!H2U+V0ISL05Zx4%ewaanwH`QSIwsKLQh+206`_dFAwYc#h!K zI1lnTqWP13cOLkeAN}i}pbh2;vu`$vHvZlTn`h6B(qSpsYeTl$P@HN*+ZV~0f)Dm3 zWmHw37Xf0ygO-Xk0S7vE}98!gOpz>9HG!09KJJW)C(3@ZqS_oyAX?zWyUJ$`5# zXgijmGi|5z_2L9Ge>W9)(l;+%(+xffy_qGlJ74+!4(*+x?V3Vsb*Ma$PamM`?XV>_Ol@Kk4_gUUa8w8GqHmG!%zF#fQ!>pgFIAOx1rb$EUrhcYk zXMR%7TsQSI70vasDbG|yzhTr4H#VL8^-r(Bd01Y*p{)OJ(_5JO-btYovgXPOS&=rT zu`gRcBP->!60INo&FAJl@wvhCE;;GJ$FXl#B|p{XrM12>V@7SvSZqx974o_Ky23!7 z<_md?Lfm3|ajG(Do9Sq+DP+C2FL0Y%$l4vU(1gku(Z4kE$rY3y`tC})#HNM56upc8 z@Lu#T^eLX9r^EUb?KXe-g>Baug)4~2I!HYEp5=j@P2?10gR$t5r%LE7YgkZxfCODuQ zLbY&``29@yfFBU5#b-wbQ#Bmn&1&%h{~=Th2Rw^VEgbMULUK4M2Xop_eCoCFcf9xc zweSgmcB;?mi@H`i@r>rEFQ%oY_!tGGG1%n(+SregaN2{?;4bovdA&AcnkcsdP4_ss z01FPW`saaiNKU#tjr6nd&i9;t`bCY)P*;c0b5NI+Icu&4t`*)4HhB768QKpym#v@h zMSWpxZd1?&G#9$q;>9>A#ONosoE=ieARIoU^Ojo<+wIBiPWumxlO0LWgESkuhGX;E zAN4V|q4q&?ot-24=7o*aJvJ|Gwdc{{T%PB5zyG{P*1Y*q%v%~y&q@dQ4Pi^#AGvfw zoy<;!UN-2XpdVx_Kc5cmV!^Px=l=VHSKI^Lbu!bqein(haKt;njE*Ry!$<~m=g{6n zg`Up*dYo26Czr7U-a8`TBvd11U%7-}5$+U8Jw&v%!h+@d`t_7yekt zWQ4eIf-q9f8I*U=>z>TL=RJ!bUw6gnZ_KA>k}1S*zEJUwgHxj#ynhtgNVPjYPgzTR zQf9l_y*E8j44;Uo9hc{(=^UEgPM1~>tS7 zK;Ljb9dIPx^bT=IgR9iPW}6;y;yaK&Jf4w``{vc1uY__=QDr26DzJ?pd}>>7CRp4@ zDZdAxKjxt6lQ1lOJy8<8rW(pAeRErQL0G(={?>mydCaFi^X-?R>kp;647baGu&Z^8 z^fy`UAwP+~1wz^Rg{C?mK}>~eI!G~B6IxxB)8;)$s$DPhh2-Bk14HOub;^S6>_)iMGu1*!Af+(RO=UJ1bV{ zD*gBZZ`WwsvTluM7aT@37<*#D`QZz5`_U%hw-2o)sJIQ|TH5nms2brnQGFTAv-XE0 zXfbh?GJ)kgROZSu5NSmQhV?t-U|1IFd~b^v#x`_|Gwe#g@3*tw}s@3*k zyPwa^Qb#9{f4R12+AnJA?(JFKt8J&9Zpig^;S3L)(?MGWq}8|`ZM>3grg>?EIE8Y3 z9e=VhwY&FITC^kFH-)}I{|oRDY;fWn_>JF(3zw?|gWK9+lm73Rw;ujvH|XiLwWzt* z!HJ+l&ibZZe;Z0igHv~CvfG9(5q~kFttpuho~!yO*;&x{kI{Wo)PG#LXTpnd;xgID zy)djGoRovLKfnI#-=_Xz#FH0;7SPQk_lSKfReR|isJOgzHNi&x;=U>BHwk|;E(#&~ zNygtn7%68eLHfiMjlJjp^5Pv(r-##XygIG5yedRUB)j&%HOM5`yeF<6b$0ukkBtP) z_VQ>}Ob?ltUa4V(rjh%@n^EJbN*0CZSYJ!uM_c&-U7Mn<#Fa%Rycj2i82!Yz!NRbD za8l}Aw*5A&$h?0|tMVmJBFii7g=`*@SHxI91+eU&7=WR3oSL0~rF_t;egDmP*TYsTD@Al^b%k#T4 zIO70JTI~cU1A5l0MatV;zAu{kfmm|@pUNq87u}CBIPopxKiFjAi!A4V!8`b0kQV== zYlCNjCGmKNINWi;--Lki0sT98hFyX<9TxH+9w_7g@H@n#pMZDzTuVG79x@d$ccDvl zzX%uLiFm{zo#2dT%+(USkWS`n>TyVee3BP;lnecYF#dpnczm0`&vs3m{&JXh_4Oj= zx&QU`BK7qmB3H`!4D|N2Dc6h4q_)1x*&kRw{9il21)s0i-zekr4eF=)P#ZloB1Q-A zdGiaBD9TF8Q8bS3V6(a1>x<8o?5X0W67fMC(-C0EU%b&YuUFI_jUc=gv zW9hlPumA0&d$M&Tv+Ce7Vnqw0Y4yA3kN)dP%Rwc&1&JmE=H&p4s2~CMo11P<&38MpE&s0 zrk_oH!+xu{4h3`U54iR>T^rBe`6F0|GGPe)tk@=Qb?}1gK$#LECRagpB_E;x-)+NL(FYEik_7|@g0xR zbKB?`2&{M+I6 zDM@6W-|2sMI=JJmSiy`ZuI#uzovmrT%2`x3js5qfANxbsK3K1^fSyU-lwYq>9XC#^ zINZWAEMj23JK_5aH97Eh ztY0zt70~xZzm@yIJf?x?lCNRwS-*n*llTH`=^0#a!Zwrm1FD0Sa?mF4aUWfF^wpnR z10CV*C1Yr#G)-F8KWzRs>J51&YLm)>sCGTXjYK^7PH>lTNmjRS|9S|<33wq?w;m!0 zi|4C;_4W}Xe|pW!1=x(f4JzJJKS1z+GL{l zetXZ~<-EmTx*u}%5T<`DIa*rdm&6F-De1Zbtjo~Q-l|$ZCM-jU1whLv&KWW z|JsbjLbsaE*DJu&g|pI#z`l_~U(g$FNs|tpkvA)<&p0c()2LpVXXFvM$}{pB8)><3 zp=Ti9UzD9TI`XRvJsE6{Ko9~m#G7b$1ixomb=48cMFk@02REBXV-2$?}Jj-l(=5G>5~ zjVP~iHch;6AaJ?p&A&VCqi5pGX-&#i`P9NFG5@x+zvPo{W=Tj=eEb@9W&xH z+y4gVZ_S|Rccx9D_JSXv=|kA3wKI>+dO`wZh9^K|5|*vqaS1UW=zghULY5_Zo26F) zS%PP zp3&STPM+}{lP*C#P&K_nyvPY1AHYOB^kFz3@I-tmeKOsGdK|6lkbtR>Ot%0A)1m|i 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..70c8b7cd89bef0b19b0b63eea2b47504d1141c93 GIT binary patch literal 69908 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..a172dd07074c68caa2107cb7f82e492d5631c69f GIT binary patch literal 517908 zcmeF42b?5TweY*iX%{5J5_T6hu!ISlX35KL12eN>*cn)Y(9HDo?lw$fre^~Ph)R&4 zsPHf#V#EOQBq%&gh#5i5KG3J=Q$)m1PHb zoO91P_uMo%kXgNAcFV#GpV;Z_WWuE66#3cnlt1^s_=CQs$KLh8mv@ru^hryWpRjOA zIz2MllWt9?&s;Wp)soJp*(WYpcv5G&w|H

    W4v6gmdtH7 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%0DVa`hXsH!NUEvo+p)yf_pvTc{)F(* zSIvA2kE1De;W2Q9=S?@KzDwokIHo!3+x#l0v;RxRHRD@F?AVqXE$f}O`LOq~8-;ApW(mmZ79SdPEAw0z$?`3vQb$y$jSoTKG1_%0%3b{F$Qi zFBtZwS0}-N;RCEalr-s2zG26vBL|+4(L1Z$zkWOGXWC z>053o({Vep>1zJ@O~(ZPtELwaGR>x%aj-zf!yH(#sb!=w4_DQ(q@1fdmgmMtXE#m~ zlEcTz=Pm6xu@1@%6YHSNDA5i|21yAG;%*FdV7`oG6M%6M-YC8!mpv4}C<*mXLe-N{ zYxU_5OKnUbY4hdFthLLMA!XT@MPLsRbh5_;cZlv#7hOYiSF-k+A?lG#=IsR~^bz-7 z;1u78ZDlx5UDaZ>hQEr%FzMUsQv+GuGDM#MVam zTze*qKG(*KB3$Sm(q`g;9+~J4cGv$<-^zvF-NQ(F{4?qK4~P z(?&-yb{>5;xN7Z^>QSq<Om@mW11OFSI_NPb7Mg%)ja6bBvE z` zZtwFA#+_6@#C@9<4U(Po;AwU7JzpgC&iA~eh3I9aFj%U-FgBeZJ^O{TzSas`i*Cr4 zI-#8%|LwwT>D(@&Eg{;~)|@}R+18vtebm+rjnCVfq48B)J0cPv=UQ)Nt`k<%vT#iW zku~{-wbU9UQtOlLu3BqUtN5I&?J%izYJ27z)!x`rr+t_$ZQEa^)~JH2_3n12*6*}4 zwLa9&)cROEUF-j*Tk!fq`z!Vs`5h(|G5uC*U!7xW9rNSM(OW6>$p4e}9$-}+QM>S- zeGYJr2NgvT3yK|4L_h=;5k&>NSh0(UiXtLbOzge)-ZhCDV`8F7OiVF}={+%~njVd& zS55VQ-?hsrn(zPay*v+RX3ctM&6+iB%`UTj=<(WFb%2L%S=nlMvp=QgW@=i>QGO^> zftpx1Nb5I(M-Y-~y+_mf-NxgkvitjGA;o)7*{|v$}|`uApSI~g?<0NIrk^}S zde%&f4!eVN|Lj7Ot|fGt&5sv)wn?8;ABJdJlMsofV$OT82K0DV{c%LoMnJ@T{LOk! z1s}zPQ(Mz++_*9CoO0c(Y2TD+TBGMxUqm}~#G0?3SGy6fj_rS^@N?=CA@FH4&Z!6} zyrh<<&3jh$L$q8GrOtg`jRFxK1esv$L44cQ=O3QfiY6@<0)X$ zUeBpl5N$(~zqGUMId!8I9PcW^7zRexEQ9f!a!^Kz1*-~5>mnL-MKrujqPd73=p)hY z+t9u4lxRHmob}QbqjTZYy*!FrsXGqxK;F`>Je__ZWH~=MqO|IWL^soJ`m4JP6|4<2 zRBXTx^Ey=U7tu)h+>Mlm{7#TV51I*0^>oy(Vj~VBr!%Oqc$%ia*bpf({EU#p6_m*> zVHD-GSS)f}pHa?dl#{SkG- zee`U!Ma7O(MBjw|STR$EaS|5oik(@sUPf#WmZ@hE+mnUq8;R}3QuIV(`^Yz!-e|-} zdPQzMbkB;zM8aF;5gjhkZ-*i}LZYt|J5J=*CALr`yh-c?iGD-uM2X%HuczWn$##O# z*^;`lGNMZ*bp@l#BsC3o42zLk6om4F4FVXBZXUMAuw}^ad;qm$O&(+}%qpD_-OOl^ zD_Fk5hGx1-^Pbohq*Xd^m@X)tcLc(mj}~iM$m^~7RpZK|e;cc5aq#=y4be1}^I5D` zuC!p1R(XsxrKbN5MCAe(k1r0ZJmH;iO&f0GCzg8gMU1;N{Q?k`C#4$r89zETZH6+Bnh5dBEj>AC3xXQ310k0f|tq3zp$cX>QY~(Z#<*crv z8u5S__I}j_%oa8Pyt~kmBKkJKgr+(py@!`qLp8?8jOhPTgz1bFfLBC*FX7iTN*$uq zTqG{>W;7YYl-h>GLtb_GIY)~-QmF^QdCJQ@9pdHYEA=)wpLn@Ln75XC7=A-UiOyRp zOjdsY5ftKIf{B`TKGs6j0itP$zpR?-cxRw)Q>q;}-E3|o=N4t2NgOeE>_`e21$L2F zz$l{_eitlaEh$K@>JV6;Pi``TvR|k0w-QD8;{Q?jj`9@#HEP-!I8}(B5(=ODAHw0&Hv_-H zUvLhUyGO&0l~AJ=(G{_ds_Iwdc+8QQr>lP>%Rom=E7iZH#T%*39nc?t4ncW}-+c|+ z4QXKqsjr7$fNiV_rfAiFzip6d?LS>6+rTtdMbotEf1Zsq+11^C>=-qqHpKrMGQj-m zR66-b23kKHRxt4kbt0)sxypOu);hj{ER%4P)v-Pnu8xmqw!Q`=8^#Kz3G(5=8j12%!5T^O$-o-P@}iO=HB#go zgEdm+1A;Z$JSC8}@}Op%~tnIvY)R}5=(l1~)Y=q%qK ztdS+3J*<%}-!!bzRX$i)qnmt5)_P* zVC*aj#;uoN{9y?SpOj$2=MqeG4rVa9t^_675|mDmVCrfKrk#>t#w!xc{8EBhKTA+n zZU}?9wI!IBEW!L72^JPeuxPFXOYf9m*#iWtgl=7v}xJ%d~y`;sJLG)rh?s7{qom#WJFsd_7!(a#5X{2~?+3cdGM73e|aH0@c|y$jmsYJ2S3}W5&PX-fD5rwPJQ>HD=${li6dO zCisD=1V7lH;LoNI9NLiJ8GOevZuEEq);u50qrQhZ;!C+_jH;@uCy}MaKo~A6N^d~6 zYViu3@~GOnu@WRGLZdL1s9k^_5{ApTLHH*$jew($eY0>jjQfjik7Okn2nP~l} zdUk@IG8FwFs*#=GOgVra5!J*_aHZ5n6Gk<&6T(tHLNAGmw-cgM3ejDnlI(dAZ2OQHr^v@`hz+hMRpYpwE1O0=jVHO&&j&d@4vT7ecd*-F$~6&7nzGcD59YVveg zbGAi?B|pXHoMX|^twtA&)1p?Z7tAs|uTW!rqBdHzu7%g`dyQkb zcE4{W=r8+#+QZ5ZWl+#Wg7KXtC>(~MdFxbUO~c?ywO-XuwO-ZM8eYU4AD!9kV_=*i zgNFeX*S0N3#k892ozb(?9q>qoR;$FXC!m{$jLPH%7kx4oppfBnAm6O*9GN!B5Q zwHr=f$h7w3%v?9@T&)e(ZLc>ma~U}_4=WS>=_IN$Y6F%$_pDExn!A8HYwmd!mF6DH zxT}qt5bx03MJflC%*B7?3VOzxnO>p_kv7{-4_k*{`LPi5)GBbdc@aB(nDf;UFiv@y z`^l^!?y7t5Q#^&0$*%(Net-lMbQhne70}NB{2L&ty73*2r%O2Hg`=8vD%*g&3_Th* zgOv5EBN+WEn`Z;IE;65jWW0ldKkjdnyNQ6ieB z7IbW|pe}%Q8@DY&c2zIh>7oA;UcXlvxBm5eZx% zVqe^n%o%zY{m8g8m_8hF2l{hTf2$imK3b(=dFP8Lw@SkbPQJdJ_W3YPTOQu%DYXpq zLc83_{49$)Tv-NC%Co#=`K3jc=qlx;nC|+w{fkcr`gU=7oP#%Phe&uYER0Ul8N4`6nt;h;! z9n?vR3eunAzC#TJdvpM#qnd=Ntx-k24$_86iAc(ur8SDspDVVKI;bbHwl<2=o%KoX zgOFohLA=DHWvc#|AR0yM6V$qNoCIS)j_4$bu2JBZO0-TF-o|F^lM}8TNS-c)2gze3#*4~Go+?C07ao|#*!+Rb z_SEN%ClVEroNwHm(w_SP$wfj`M)FvR6|4v;(jqEx3s-K~cj$CkcXwiksj1#Tk101r zse6!k6919G{JyVdGNvl^EE3TQQTqQc z;A!rUB0mT^Xbbo(s8s~VH}`}T(5f4L?{tB8IVV*`N z7ajFcA3Lzq<{mZT6t9MtZ}txWJzm8SDc{=IqpDP%EJ6cFzVYY`TExFi#OnE2&$HZJ z{HkiDJL@K#c)|!BkCg2{_qH%Wz z)Ob?>{lFaJ1@u((J{tFKmSO>>fq9!3P;X>sV_bM>l<=4|e!)0Arrk*i(sOvxE+%6| zK7$ThCFuBo1evc((CJ$VIy=WO=+an%taJ&o2Oy{#4ClT{+doiduaN^2wI=8E-uVAI zl7s&VdNz@*bE?}HGiGshvMy$n${N}{j~6qd;n-IOPPM{MJN!r9Hb%29W|V5?#f(yE zZVyX~er3D}zyE&}J~NKO%cGl2rtnSp*-7CG{DpV1g!7h<<{1b`*Y+MjVnfv5Ao>(f zpQOcBP|LZPvAM19BbBy z{)C^p4=sI)TBhY16KiTmE0Ppz&X3Vg$|bzZA<&~g)keqSIvIL(ONKd_ev8z9SiqxF zbU%z5`SG4jrg>OQ^i?;U<&Z_IDT)rT=I)NVhb)!FvW@BhCn98}>IU{e{14zmAVP?+ z$g{R|xPTM|>{TNd@cPk462Yv)KfyF!<7qpR8eJD`XMa&A!ih^F}Z5s2vCnJ^&>=I!++%O(k>?B zX{Fr2)rhhfVY~zort`9s33)-OW?;7qfXKJkI;b}2uOV-!xW>HA)*qOmHclI?2Jj0$ zY9f+m*~w=6rWT5G^Mw18_g{meN6e3Im5sSN{f)dmS8S9g7>rEP&jNJwnJK^-&E% zYJ%N30FtRj!#xc-rc$d|<#Yt3mlx)#EwH1#0lTQuxDnvNt*Q`^k~%(>7Q|=jCpe|g zil9~CZmi=|rTd|2$XD2!Su&1;d&*aaAg-u)##l052ls-njB^kl@|{Www`BYT?sZ=o zg7`^Im}toekH$!d_K|TE;zNE@|0Y;fP6jtE+P5x5{Gnb#l~{jW4FY$BuZ%C#fY9{y zg_ex6XkOj(ks%1D9vf=O*ahxEuZ*FpCdaxLVW}FFl5Y>HC~k>3@)UI?BteqE~8a6&!(0XV|j_lh-LjBK1a@R?eil-kid$r4RI2 zIs5qJ6m6sRPb*v6PV!-jwhi=$`diwr^kK>cj2QhMw8&}6dDy2+VK&o4D_hNV&L^i_ z#Au<%xvZR@`Q#L4OZ|gQ2|icT#Q#u_UYbANgihq7l@UCqs|l?ESfl#> z!+)51hMlFY^Ns07e^41fz?s5TkJUG4Tzsl?hqzJTS_X{~fT72LCNz@cW%38<_H= z5J_tAU-A>wc`i50b)~uh)YBGhaaMve3aL}PMar6)D4mJ(xCvYf;0l1Yc!8*G4t;nZCHk3AtOp*2T1>N(HxlL!aqO5clh=XPUNCL%_}R$`~%&ppesg!ycB5 z+reGrm0=`D&%|a>9=wGmOL7YYGd0#yQ@w~nhP2EEfpM!hFSH@-f z1uyF%<187@Mre*kJ~9OHy1p^NlFkf7{xV?Q5+%|^1t8eI_ zX>`GqngH$;UqsWl*f@Hx6brE$+)Z9Y2e~L2@}2XWM&#a&--m21!`Pk}Wc$-uncz=( zKk*fC-)rPIZ&--;gHLgH@;$gW{1FB$Q`O*TZRnU8Z?#Sh_;QUJ`%5!nEgYAvSweLH zq^B3w&PHXG-Kl{$tDunOG+$WgB}6V{lc zb%x{ax|XzafV^>&G=a@_tV^<_eFMm~o1}e*?SIGv&gY^2O8Tp+G8V4dO#%%fus5C6 zTWH#PfwcytbCbZD9vjPE6f&y6H7-U0GOmeFuYasL9r2*e?KEv4uePgI;BLczDv#Ep z82^I59jS=_d$cm~XMla)!qcBO@v?~;rtafH{;Q+6GOcqJP%ZXm@!qA0AU<68w}l_>cT% zBAc|Dk$$gIJ&>4dGs3Dhl}-5an(Sb6;CTGbZPOH_&LZe1$z4Njg*zMaP%TbRNLCy0 zv)z|Jnm5eOTpEtf%ar@UJMAsq*=CY{O(_ktWoVqm2z$AiX6O1-MS;=8%Y0C3_+T^E@Gj0S{}#d< zB(1W5>P6%kkw466b%%f%o*J8Kim8ldsNFnJjI@2M ziVQQGG!=+W%`J7qo)^*htzTy}Hf5^LCy=i^ThWLks`4W7 zh&%Y)SHxeKTUrDS>41H?ex!n?1(g!w4u={+Qx8I@){>Vwg2u^(4Y?E-G~S3miPa>i zQ2e=;b09rvf)VEhji8BgJwvXk2hEe^L9Ukv%{St_nh~@>d>^^&7qm#0w~=aU!89#s zl~O73?4YPqH<{K)8H~-m?26RUHpg&y`-sDP1?rj-o>Hm|m?d7^KtfFJD@ttx=a82> z%!m7dQV)XjvX{%t<~{`(Pca5v;j=}f#q0eF*q;K*GEvtLmRKkc*0yRb{L3_4=%DiI z<0=*`5s>s2eubMZbWnBmFtm76*2lqsj3R8jx$u=>YZ(-!TJyCDLEHxJLSFN3VcdOd>Y-FO|`3%&@t;X%_?H2Oky zk?|9_*L@Lm!-Hn4tTGD`o`?x9(MA|BsytLeh~ z>?#+KF30bq{UIMe42TC5+PZk75BxUVN!?PZi| zc<@16_4_JY1zrW@_W==0V5wv9^Iz0qN8-P@2H*)5rC) zq>Th*;!V=%ng^ZHpX+W(TMEd=o1_WsNj<->CG9vMkK81Uu6fXT{g*<^H9rr?r#DFx z*n9fr<`#_4Y=k8HOUqNQHy}?%g3&P9l3`t}xBbtXy-m+n2#x+HMV=H|-^zYch#rac zq!7ob_er7KAbuf>cvV(n`$?fqNV~&M4|{te{cXP|g&qX=DKFyviJH%oLT`cbv6uPD zM9ur8(1$SPS4_SJfTNYa1nWtm7iycJS^&hf@|R>iDdgbWlIHmd=+UvQJSkKJ z#++8>Q$KOmlR^&+wc$()d%%ADhlY~Jf8=(Shopz|gNN>2bi;~b*efZvVVQhu!=6W} zA5twxk)L6|McO}hdYHTDCc{>M_!=oTqGFM+VVi=H;$>DX@-b{8HheXi+y{VR0TL|3 z-sLbs(*alzAjvXpS9CSC70iQPKutrBM=OY7p9SMWifLF{K@3Y1nDDx+SmPqgum;37 zEO(JzC-WJ%$k9QrRO?xa{2(!C*K%zQPCXxvWb8U^j1o?o565ueceB{g0@;UIyG6M( zDeSJpr<47@ItPA#=7y6fwlVG%n#l(lUtNpI zX-%(G{^peXTOhWQ#bv>F=RwAW)5$}hNMruCNW3ksMKWURo)83~jHQP$Z3?9yP<|~BPuL^rPn+psL#fZq0!_Owg6SWa=^xie z`W+AT)U;|(f;UQg1Ss5{0gt^5epal9veP3T9DPK{QNp z+cI_l3&R=DnD%1S^HV9OKsRT-`z(w+vGMyV!F=3U%7UxN>0Z5UVK||MrK~nEgNYdr zK34;E&BAbM3!7zNQVXC@kD0I*tFLON`^>0escQw(DT8tp77jkxtJ+%_dDi#o^@2H= zN6ZV@)bO!hm2Y9>A>TVU05g702drPcr|_M5o{oumpzs7QiFH1P-(`~Q8HEPdw_u8E zw!99e>%tW~l~$qMV*IWaK;d3YyA{%R;MYi)un2xvg>EDGl>T_=V+v#FkqjS1u#1P0Ih;WwvI(yXH@)%*L)MC0z)RIE?AkEK!kY@XB{cgZyh3${2K{ zK}u8yA|4j&^QCJq!YHIf=3H%CQ`)({N{#pLl@mq^<16>_qlH(!ZoEgV%=d_Od5<{U(@dVa_r%cw ziN3-&iJGTOMc%se_-aTSIg(b@eV_-3wkGj5*6!x*jrFANQuLqZ83rfyrC?*MXwkn{ zprkR6Q_{g8K*srIo?vFqtPWzL$qB)H*SyF_(#YAW5DCj{e*sl5+lE zB>hceMwfLKJMGG}?X-BHkDW~7f3}n1Uh^eyNczev>5#9*5B+Z}{)OnYxxGk=?_^7w zI@Cv!N&L@}dWlXKM~I{{ucTSNl4kvHB+2a3Y!3WHXM6%*<%rt?KUa(E!38Al{79?> z+O%s3;*;;>Ly)?M#YLBwx18HJc`yjwPER{|Ihg*cr+u|yjKbCPWLz9=-Z$`c_?l5Z z@aF0G{b+8b9tX_RTm9RKS8(8<|2o>(DN1^dia=UDJ3Z`Az7WwyJx1n0l>|nH%``6! z)KI-Jy?F+AtAwpNl^qO30a2PfYW*&s5D-X{4z<{geE8iW7H_NqS}gxR$Y9|`xjJiO3+38T=9ZBbn!87#RjG%9q8~ZTbZg|0?qp` zR8TQMwDzKyQ=qnaf5Vc*1l1R)!C6+JK2P&|_+~-$ln^oR)7iH&uiSk!%-hpzUb#JK zn75y=c^^Y5&#0t-Q`kMDAF#fff0p>l7@j8#rQ8keD@gI3aL~P0O zF>e{B$dv@8fz0-T_GkH+H+ZZmDUXkOXWPn5%L+8_ae8LUfY|OuF{eOn^L~IikO_*% z=A5<*_1*pRnepg>GsV2mce|B&&w9~aP@%ESCg{Wktcj%@W z=RI;OWr~wa3e{zQ=$Sc?i+V9o^L&xA>0+w+D1bMkv0tk$dqmI79m9DjJ8+NRl$)vM zBLP0S2bq_-%nK+Uc~-wz?V>vy=@2i6Zjq0dQ=%qdajLxMH#sJ)yVv#JKv(}wNv_xZ zR?gq`WB@Mk9W<4BOF$gm$9w3KsF8jExWCSC>k?9#h1^FEK`r!$=x-J(twoD9NR56K z(f1O5uYj)VZUM63$dj5^gXaojxlO zam<4tV$#=D;UjZGv`D``2!t*~YI-iZMuJ0#jP#FNfCv&IJ3S5NO$ZjEPkKH&K|+WS zx#?T6E+@EEdAI|k(%aVo;Zflr#-~4lDkYQ`N4z9`^Ar%3gqW7zqXa~_IsyT+(s|%c zLN&D&ocZa;v2RR>R6J#CVfvf!4HBxW>X5c5{htFMqEr(Q%hUT%KqGY$0@kNbz(7fe zSKJ|NPoF}fg%JDGXOTz{;z;^D5{W{bNMA}KNzvs#oqj(pl`OiQO@EMDr>J<8b57Im zhoM_!uq|A!#C}giV^E_lraKb{c0xF#4xF6CT+ZqXJ{x%Rv)yIQ~?#T74 zrS=Z-bFeGQAIfF7b*k=^L2NACyx;a*du0Zm@&9 zM8y-SjQyhMDY#f|#%7HNTS>a5 z)*RmR>uc`(Z6>qlgFBAg+YD}xo46maN>>e)##mhJQTeIk#2=0HVl}@ls9Dk()#l#5 zyWlXAFab~LDpnuUaFYxiPt^+8G8^Dxbtinf#6n{O{61mt8$v$eQ~8FZq;`O8Hzaxb zSdt{>TP#Hvt5;~(>xQyCx69A2TcW`H*I;(Bm`HzzLtvO;mqNRQtIEeX-(iADTw*|Y z^q0{j7WW?P3KFY2L@-YT3+vX)Tk7q!`WPeYbA5cR9!3(XZ*EHDXOMYywGgjEa$=Ez=${k7#^6zA z-d(=Y4kfBtED*b->)&VVND<(*!>&2;kVt;nPciT&W137nE4<5rybs*qZ4#M0Bh63d z5RCW4zeOP)oaU3SShZk12N@SIy7ax-U`&Jkd-SD`gr8Z{CTXeROL+2{+l_G+zRZ{x zO8^dEK1$}TIXrw~1>-JvHfHAVm5hhFH=_~5SIHQ6AK>|Ms~NB29tewtuVFmW-Hq2Z z)-qnpoeG~Ld>!M_?m-g~-^i_HjGGTfhi_tUZh;yc!UCLF$FTPweZ94=ha8D}#UeZz z&TA3l%1nv62QF0NU1Cn28RydnOu!R-V1BDe7q?bTumQ;w@zdbIR{!AilXJVoohi?FNEp^qFf)h8HoH6Ubm=;PUuB zdwLpA#zKS9-phzl$5X)gl)p?-BQ2gWF*Z@jI@d7?1TcSqZ|xu;b_&-F{tAD8pnxE_ zw274@5WrLZ0-C62;3OxeNg#mBeiE#jJ;Pc3WhEXcuk!h|{R0?CiC-x3fgAZTt+sF9 zl3FTpg0pXd2zK#Qx?mSi8Z0w^nPU7plpbA??3cjs@HRxSi$~N2yLgtIhdrulDjKIw z3eRwxT_<$|&zC84@p!T_*9AcuzeWmAEOY2#)27kG4$B+LJDbpKRI(hs<=%o(p4{f5 z_*aSOamj5B*Etb>RB{Kybw1w|@hsDI#-f&-Ev~bB1M_wj&)MCadAo_@>~7Ay-NkQq zZ@~^ExreyT?x&g{-c!70_f)h|axc0_ecUq{@6C9Qdp*3|3%oaB%6JR&XNw3!#sohZ z7UE(M4P;b-$Fmu#$_*EDl#PI6-lD!ynWHv>F;wQh!Mv6sHS#p2jdYo-Um5Hz;UtYz z#VFxRJAJCE2xN;IMtZSoPJ7HX?7=hO#2#qcp72jv^l~U32xo1Mzv=1JT09^blYNp8 zL;!k9l5>Xm*{f9X<(U@Obj2g&3xJ|Kbp@s6@<2EuJtc$wSh7S~%Fn`-J)ibh(t4oNe^^aFtRX z)rXSj!mnqKV!hs}kL3GA1P{Y9oKT*X1>QP{NVzBuYG<2w&ERby?*kHw$7We(dY9sk zF~6E>CwsW$c}hhszOo+d;sIH~F1`a<=GsDK_|!<5i|0<2naQ;T!kM$o{N>ekJ;j6h zs1}!e-CY~eC^`tuUc5_b&ep&3nt0r_!>Cx?iaV92;szkD$6W^35!W7ZXWV-H2E{#o zgkLgw?GB}d#1$aLg`y~^du5&r-o~xUASsSbfc zG`n3rGAidypQW{{|Ijd|)L)MjEj&GP8~w)iwNFY=M`7TEXG9KW&>G9|oY!xtq;JTF1}PbBDZRf564NibI9rT_4b^$cjd0ZlWYT@C0!1DY?; zhA*ROGb=Xy1be%-HLC6#$&a?2MyXYq(y94oD$ptQ^~wxd8$lZ*Xv<&@tKGNqhG8tW zQ-;CmU<4hFAd|t|X?f$c&Q-OB3$YM(sS=(wPR`BD8vm38g>q76)&x1~GHaroT$xoQ zhg)V9X9_i0PRh(Gk;62zrmPaG^tuF7<^0R6>2msJ)(kmJGi#=tx0y9d4$RCdlk+dL zX3G(oS#!rp;=Io#m@h|iW-X92HM17V5t&(w_qSbDux z(=g)N)jbYFN?N>(C+(AN5Zxp9#?IWK6EBbNl(^S`LY<_u^ zrE7KLrc(_$YPV}tP_Fre^p8Ma!++#)x#LqmbEJ9bg1(oJE>sVNgy^OfL|X6vlJ@Wb zQ(8I@o$()e(oY&jF17MdSc6`iD7r;0P{nzg>JSnA6)&@PZ+d*BRio~4MvWXb)VF+) zrq3Ux=FA2G!Dl4J**obDpyr<-IrEg9>kn=(EF=4;BBlJ6tKsYRd85*f*( z0%hoyjPIwIG8*Ey8U7HBZxX1!u zK}z$yKtU~ek-0~OxIC*`J;KatY0<7y^6GT83+YkUEJTYwCA@?JFE7cos}?L1vq3(Pyb(k8zK9d4&cqNE@++-+EY#p5L)TCGZhT&^kuN z8PP{W6mBU+DhvUYu!I~#*G;g2qXP%_E zI5dM@{pFWEIM~IW6Urr>r@Spuyev6cM|xN|xnD3Zm$EXK@ymo@7jJl$xp*fz*!<7*zdw4W`oLSMqTKMBU1PeY+MV>(ajBNLL=2aLE#gZR*6=yL%!=ERi zUL=n{kix4kC0JyY7JgQkm&m+iFi*;*y((~{!i{VEil=57S8s|{1k+tcdM&2&2f6AY z@GxtMO68jR1B+7WHljrRiOPrnBFO`Mk~fY=@~h%9^QbJtp%ZUeJVo=O5zpQVcJYub z4_Ak(Lov(tocakdG;chmWGkqbH+o)fmK?a zbC-j-V`27S*GKrRGpAWFQ@%#L`KT-xJfH$iTdL$}N4<{vT5^^{S~dJfeooT7bGJ+> z$)Hq2o26;X6=(TokMQFzy*wkpiHpXM7B`yna@^fKJ|^x|2+x>&uM#KQX2&xK4P8WN zc1uG4Vavp2Od>QUTW0m)o#}Vi`3E3(9(E$VV!706<%*^jYrUFsF?G55IB~CLNq~fv zE1W(?>lMf1tGLf~a%sJq6BFq!x&cfJ=8Y~lv7k)rmB93v6-u17UeSYiTHkN14~r5X zjEY5kdBv%v_G-Tp=3J>t^C7$|(>3KD(+(1Qu+lARsj<+uSI02yJE?|JnZS3$f8 z-7CM}+VNo5RzWUl&Xm)V&XZBfTs+sJ%uL@}%lZXgQuq>JnTu~OmYFI14K`EwZd94; zSxM(BL$iCg)E#`u5yPu@f3{t-(=fNQ_it$!LUDZEb8se27cl%7n~gWt#?PTMPZQHhWCHZpS&-3cje^WJ6HC0_*(`UNR`5k1dP(ZnD?By{_G)~@w6yOp6}F;w)W?*qya?Jy!#LsdcD==iDu3zd@V_`kRTdp^R|VSjA+RU#t=aKr`= z^m!_(MWlDeetHvi;Z7}mYx$^dP5op)eh z-wL7%SX(R+H7gEo!x$&;q*(ETbNZ6_f(0~kGWOc+8oQjSzgx*^ieB4a4sQ<^VCrAC zzAWF+92#O|v?J+QUZWVM-H=vn7e$3GD3_4?mF6io2s*g~rBqy;5K6W+&af4ls`b9t zri+Fv+)}C9HQ3zB&IsE{c{kkAd~Tz|b4tDUET2#KICmI*8exAE*Cwec-+;dqVke9- z7=)dC7RT4{hFov)h8q@9g}EHvLr&VYU+Q*m7>mAVl{|>XDu6r+11}U*m>Py{3Hi?X zGtRA6a|NlY1Y4Cs1`dBRR(be9ZvlE-9~C$Og5~AN>UJ*`93&0tS;yB;QIYbB!$aey zRm8b?7Uc=r&c$D#L6tV;I^V_^4eL;M{QER5UNU>kKO~JSlQ{WNb))Lr0k#`}zo)`fLI<9O}xk||W zOP8N~)cAIANvN7%mN?%wU8#yQ_*-tDQ*N|?lW9MkfOu!&3t`IwNw=%8L{#3%>SzA>Z~DB zCC+=vTS_<+HQ~;ufamUK!k-BQ3$+nvx~x>+7Shlx6XII)VmHtwo5YR`lgY{GAHea;Dn<1#- zO|7&YpyLD#8A|O|v!c`(1EE>-TgA>|h3N=0XqQba)|i%VikzM(f51a$1C4Xhsr<`E z(bPt0SCcAGc(21F&7Onnt8-qaCO+BtNh4q@=S zOFY2jBb)lLK}kf~r!$S`a!Bt!|2G9n9_3M)Kf!3i+u%?{NuIR{Z&P%tVeV ziR9dzhLGCvxkT2Bug`uL1^n%l)5$2=9V!Feiu7y8K|EJUOulx~D+Y~R_y8L%mxlI0 zeh%up8=_32)54$rwl<5~Qy*;8oBELgU0hL14L=Xveoa3?FgggZ)0Rs;P?eOlhB|^= zft??4cD+#RK^Bbj1`Bq-+rE=C zk{8qJc6@oQX+qEi#b|4_v`ws{f|}QyvUS#)QV$`iNr@?%Q()i0nYS>m89Y_m>Go*< z;xb^oft~8Lq$c`!{efJDJIvDIPofIKb6ou-9(%`P$Zkmwc~mIJ^NRi*b#m`LFJf1- z9`tAM)j5qfEeuB~N@|)cU;?6_AZ^K!6TJx)&JPE}ue8X*9%z&u-2O)aA$S-pKQ(%n zK`yU}Q*Mm4A^^7M*g?rJ<3PkfHuEp1^9nLCMX3KORDYhL?*yof=|O$IBjhPdt{nK| z>cljkdgyt2-rx^I{%-K|Sid$9k1VJYPP0n>KzK8f!zd^v+W?12TZ{Fqs4p^mN^k8!fJVG2|oq?2`CZ`pO3 zGfjwPrr-3qeBEwqVavIq*%5&Pee)WU-xRvHjPvXLj$Kiy((^4Ux>WoV{V3XD0a>n; z34n8C)F#+4Z}z;)eeVc-i%7sOF+aB_>Zx{GUwTdRx_&+{=x%1Fyl%inhxUPH=}!h~ znI|#*cMiEZ98mzgRddrvB|vJ%P|E|Z8Ji<>9$5E?l1Q#)G!D)ao=$C-4_m<`RBW2a zfe}T@mN@4qmZeJo2;XhK?77-tTcdG{oVoXyRdhnCIDrR7ZaQ>K#Gu7HmkzHh(-FY( z5wDkP(Hnx_t~fo44Sn}nt4h=BLd89oOxnkmHgUq?_T&}kK1sbC)H$EK#3BNkGAp+q zIB#4ynALUZ0})&gZSUi!v#4-3h zhFe5YdJA3pu=WMvviE_XS}18dHWuR)*=|e9ejexUvM}zc7VOU~(ZE+L%Eqdvs0~s) z#(DVS9w9$sd?iW>oi6JooO8T}oWENXQJN)D9wV?yIW88$1#qsHt?KC}i7D8Gx@cld zJm1-|45Q{7jiBbMXONqsCl}~iQ#OsM*kFnL&Onntx(S`H$#Qbr3}Gvf*4D&nI~2sm zyV)pCQnfa}l3z__mjKV6ytgE?xp#&m=%+pgjDlUStZGLL1wz2j-~^t`MxO}*~rJW0u7 zgHK@uD@&G1rUHA}0(+H=0IlL&F6FwzBy#)*co9*lN~Q^Omj1aG38C@s4YRO!i$Kbq zk?txDG>b{JLyFvs)`IwQh6-g;uxTDr3Cwl2EOI23cFL)9I`j*S{lDDJuao>BR%O*AC0!x zko*uJ#Tf6D7-@$m6-rVaD>pgZF*!60Nue_?cORFZtD@nF9XY@Z!rC;BZ8Buz6A9`g?&{+ zp{*v>14WpUztN*?`&p7d!W+?LXcF`7MyV0tmrv=BZoLO^Qm>7Fc+=ArX@91cq+eCE zs~c0iSEcfJ1AZzthQ{WPm>hD@@rigsQLIwS&*0YNr^+CAYIQ{*JgFwdbQI+_{4P4i zKQ6_ld!`q;^Zv16VDd3^QF5FHA_517hIa*U`kns3+ESB0_l|a;)2nC~HKf=G=cHWo zUXtJPhCs%AXBV53?+ErI>#U$uS{lv^Dv>h3bx3uF^&{feA-ib1RWc=?PkzQ1{goD6 zi|i_%)vAFBz3yGDzc}4Jr`qVm9e+*z2wf@qW@!F2Uf!}oB9=*|{x zThajzu0l?R0Zu6P&S-GJ>~AhWYGGb+rTcd&%y&m?20Ug^iS2+`+k441_q zV?)MHtNN)>^+S|lYBCZb=2XQ~Iw^C<2_aNGmuH+7ON6&Zi1ulSxeGk{Pfq99o9av#7gA zf8}e>ih$OPBg1~z@{pUjBKpO~Z;|i6H7ggpLF6kqx<72hZQ~73QXwiWTGFVg8|tZs z(D+>Y=KOYKyPOTp~O#8i=2NOBP*$uGHQzDc`{*u2FZ-0OZj zhd)p$${v-f)4!Krjmze@gs>*_c+Hf9nm?|id|jKq)Yl(ajx^!8F+O`0mi$08R^9;Q z%Q(W*m$>^gPQxJv%sA4{Io#PPgGP%@Y0BuX*?{L1iaE7S?Mq{cHSI9kh3#6rUmVFk zG(m0JJ(Pw=_HA~}QQ2o!}=GH(1n!%bsev)h2In;E&={kZ!pr*&zg z@SE~c0Rnop?w`(2;*XKc8!ohNrGjp#NoeYKblCCG{;lBwl?kgX@^h6o!qJ*tGb0rt zl0`%=O3v^_ zhCeGxVjKr|Fiybg4E4nEN-<+J7%WSo!MSmuT`Fl?s&>CI`i-X^@^25i;rTwLW14#g zu2e~_3&-oP5ZPD(}^|mr1;_TgZ zVaLWP^4~3jUBH2YW|8dQ3I$7>ui5|5W8nzCZ0QUTdgw0g10MwaWGN zkMgam`%XBw^nSYM=CiX+U&h^SX(yN^)VZRc+JcWv@=f7TU?4WfC{6uz-P)L^U$9%}%rXDm7c1mv zA48xFrGo2ci@uxQu+D%SnmU?SPqkUFvs3J%x(K7m`29?M+>NJPgCqQPo))zdnSwVs zbKSs;HM!KYoC~26teP9MPs!^a^b0VLDNa5_?DzO*(>sRX^Z_XN=6;?DU=2f}fr{a` zy&IO-(4W4|q>P7r!8bpWQ4<#WQX{0p^_%xK&TiJscu0NCB)gWL*|K5FOoafxf5%~| z75VUt^IqV2;TC2ib&f?sSB?WCwhSBP=dA7t%X@^#-jAw1`^8{63Zq71c^I`lh~#P; z9q8{hxJ_39GGHz{@rR0 zxM_elK~rCsU5Et$Q~ySroLtzdH<0dUvTDw{5nGDpnr59d(1EVNc0P2dyA2Sgpa_8g zn7xdz6h1Z39Bf&rm7NP%sYlsiCe|H8G!&Z^B!gu@4L{nVUcxoR-+$gl!BNea9IlOz zi$(h^P=vkr*6F`-J0@FMkyYlnN*gELfJX`(Ml*wvnGxOy0MC)>TXQoejM#g@%Z@S} zmexj_gjdRQs&EZ;rkL)T(70Pkb^%FZMeoSJa0I}G069$|b&#SvGc zT3s6!kTIFL1cy6sv52SG>qX^v($$BJNBPW`N~jyYuZKM&ai(~Am;WG4FLcLr&Zd|XX@&d6f~lfoNYV(`Y5%2uV>DfL4iPw)d*7$@YpBXF8PbjOCg>XDX6*|6%! zO!te&EbHzoH8gALwJ?Li=t--(%PH5qHBIF849)j-o$s!P?qB~YolLz*&gMa+Oor4g zC`1YB(Tm&c3AEyS@#s!Oc?~TZk2q)6JlX8%hPxUo&s<@?9u-rJdT$+Y>F+`QM=l)m z@T|W|pPO{4KPfaPF_H>w-(nvO+d6%4Q>I2VUR2gz0Fl;@7HH*Tt~!j47XaHkq@f+C z)1w`9PG~*WCAw%vDfRo-io^9X77EvY|-VAUCJG_Y}F5SsJM0l#hXD z-AwJg|I|X8KFJNYfvCsoaU|1luRjoYNUN0*tvYq}ojc2WO}2u$cAh&MPcDwfLLjr? zqfl`D6uXt%1IF@FpCfzI!s#8qy)a1IpR`O{1@T!o#poXTM4vlzrhL$$ozt68A^D;W zfQn|B4Q#0*OR#0;pVsF<-Wv5?v`j&?ReapkPEmKk9Q`mnwP^Hx@s$S1mEC?mFYnj> z{%xC{7rlgg;R2n4)V#(t^jQqChVF@mnA+&XXS<{i(O)LfPOHgaa$eGvbP{7Kp|O2D zqf%@r+}X}`{VYcICW}<8?>N!LH#c25MR|~JzQB_ie2pntF)4M?7JAWRyPEx1FzuX+ z5EvVbxiEG3C-z{{8ipzLoRKu1VV<=Zlxdz4t)3~W?MBnx0W_SdU-n+bx7a$QVEj6X z^sK9H|e<1YHw8UD83n?s2P{Q3qJBMRycy~A>NSKhIW^VBZ_ zkB-NnCX!g=Yv&hYs0W{2i&ArrU=2DDD z>Z&JG^rlOY(kWUC4tHHOxca|B;g!woor(!_?Q|D;Xf+A+DG$*sQvwy5FmG%bj!d}AWeM9L zz#TWS9+b$o4vOYmV=H{WgcmlWfSxO&*i5}2P<9>zVj27)bD#cD0XKT2OI1m`&WrMk=)7<%VOJ@B_} zO(pLM!Z3Ltw67E%VDdd*v|b9z(Sh&O$ASW}MMLe?q6TtM+Z}%=_y9-4=G07`u-JYk2u#T583B4QrBRX61m+7O7g_1_CN?_Sow$r&~}U0F3hF$G@qhaUH$Bdxj{MCBJHW3LplGt*|{ZA%SRL4 z<9~>PdrsGbr$qXzLnNS`AaOf8mh{gPJ*=#7v!R_Y4lF(mkQ~^)mkcRlRn;dL5P5gElD+;%F4#ZRkWlyUviCeQIRNzsD z#I+YatPVx|_CPdBhm&MLs&4XjvJ^_kXeb3SRmY-Qz)}N=n<00A1)7#cRgjIdbg#oH z;9oFMCGQ_F5Kvl$pIBS{D)mK7c8QvF4JObtp`YmvsCaH$D%*yXRv0{4hqWixegm9K zu!~pZ4VNx!mgxox7*yB1fIF1i?JO!Pq_tBY3Qv2Me>0)Q0ol~v=s8>SBhZ!L_b5-r zD8e>GFJJyFf|*+z1*J~~ZUyPCQ8$;VY8T_# z%AGT}`y~dF{G#`4{T3OcBE}o3UMDPfL?sS=P5sm78%2+>3>SfA9ygNq!~uOpGv_8& z=~|Knm@IXsW};){Z2kd@UxedOOramX-jN4n5a#H$Sxp2rVo%#aQJNx${ydw!_5wDl z(SQti-LWe2Uru_ZyK7H24dH<=GH{_XLcPW@4E&D2^YykV1NCo6$aGEFJSQ&7>D|vl zNo&inpD$pBMJ(tzMLq!p%9Nc*QaA4V3QISRfshM?%9ejGIQ`+>CDM_TyhD1oB!BFX zeimHg9Z&+#BDmWK#zAeeVZQCae+vDX<&NKGe~r`?tXVCvACf%Ip%tV~0KAO;@~N;U zF}=1m8aZ3WnXxs$!E9;`oTd82?X9Wjfrs5mA4b_se)U*vch|7)`B8Oy)dJ5{T`U7HqDy<;R~5^??_ z18>@gk^=!0v+4N}qc0|G5$5HKlaS@VGa~Uh{Ys;S;bCY(kKB~2b7O?lO6UF;7&!EQ z0|QUx@k_#5njOMJ&@tGS4^U|r(xK%3F`L!)9 zO=6Vr^twkGPZgum4SqIBI(7AO22H<3z}UwB6c8+i2nQz-$0iqGlEaRIv0dN~NOFT! zToa!@r1Wp}771u{B{h3$g}6wCB{7VEz#AiBbWDcGdKCY8#3dYL>WnV#LIB%_kes`w z2J7KP9+$mDdVCPqzllaNyh0(Mn~ja8K{k{xE=l{`njS;= z)t;_V$2^&{VM$CGXCVmAv5DI!j3-~?1Jb05?NAK%n;<76rlwecJta!i6{*0E8Z235 zoZc=YELrzYfe}QMB$d-~J&Od0xe!SP!*U2_RS5>mPzd8EDTXI?*h6oU9^e@Y&G(C5 zJq01yl*c%|6+PIL)SqUXdQiB%!-eDwNPB?^@*B^tjIR&RN7&aDnisXe)?Idowg^N~ z`j{ABc>HU1+7H!i!>V1)-terNAvvL4FHrdVQ|v1aw`fnaGFdG1?I)i;275(#b!T%H%0mIRotfbpcVkTaZ7Yy7TZp z`yt93EaTGcQKkmMw3c$gm_8=ETKGq$0NQGj}`0eqQ)b`-JX z(K$1}_3*`o)gryR#6HlvJrzdZ?TrB1JV7+!;B{CrQM0;}`@r<)Z;wRrP0of2;)+3{ zDoe?$FvkeMC9OW0%0)#P!V;)oV&}?^FEa_I2HaxkRBVBgmlJcl0H43Sn|BC|_asLMgEGvK;G>@-XNHoF9 zHl<+p^(aGcos?8AgB&ny9F9h>vP52ZyF9?G-n31GcsG`k_g<#V`?eXU2W&z4!O7s> zWR?|CDWR6Nw!XCfysVq4+@;hfQgkCC{lvFcwynA0c4^pj zd^_o82B2*VXaMbPoC-Bxy}fReEBi{SuF}3VlBswLKGl)1SbJ6f6Xx9AIE>P{p_@i? z>SIjWC`AL}K0=iE1P}F6c5~zJV(P%JrP4$NH&sAr_2k7n+tu8VgAacj0cq|Uv0lN( z9=*@b)-r$@x3#)%<*)R{xMh-R|fb0X_d@Ma`XvyC!1x_b=34Plap(4#c^xHASMin zN2zkfa|6PVNMcj|_3c>pQDsP|h&Z->AxL>%LX%*?DqxKmlB(1a6^d8rgjc(E>f=nG z)bmE0hL%-*`F3Srz8$YPZqR2&UO|+03_~#$Agup{jaZ9L)~EuYMs=F3k7(prS+>!~ zyWz}&w=by~r~|1GuIp0MD8q}obr`J?;@{R(ZurYsqa}pWMEdN52r<3PiKJ8z;3Mw0 z5(AC5TQtY!1=D)}srz^CfMPo^m#*1wDu6c^rKlmEZ*}&2vv$~Pv{FASEa8L2q4peTTSI(xSeJx8&Hi6{^!f1L1Z!Dvn5=O2V&Ds z^>ozb< zZN?>A9EMaXmtX3e=hZ}E?6`le{pt2UbnsV~KxK`0OK?6cWgjs%2T&%@ZZpU+E5U z`5sat!C;UEL3||6V1XEL>M2L@c;u?!vA8Mx`SH~@((_vPZinOJ{e_n#yAEq7cIxJA zihdQholj0c@nHaw^3l}wLG#g6uy6)lQG@4&)B6E3QMjGCW9C*4CAewVl>RI_3D1_= z=c!(2^Ef!F!E&Culwq|7szZVi<&#yF_P(a)Uu|v&=NhgW5a_&p-rQJrWjsjT zNlp++Upc%cNC0JtJtmAN5sHw3AT51k+JV*!OI;kKRhIf!u%%9vvAyjUNxPh&A@%g^ zZM$a(_ncsKgO4XCZSPH$`l9``65f`;x*)&<^1d;R>tGs-c(h`~#EBcp`Za2rWpqw( zL&^Lcbfv>mc5a?v7OGcc13~{`h^1ySlar?FqhI0Kx``lB^j*X&V=0fo$m>CxEHFr%C*>q*_c#@>|4mL!2uMzL1@;Y=4 za=K-YtGOd6ab;etD|R-|7q4begrVkUb$P~z-nt-}Lwq80a8~djRw^oA8us+@NW=p~ zD#z?<2+;~a`b+YV2l?v=8b()m9^{3^{9WB*n24o^6sPBV3a(E|;|K4<^S2^KkrOkr z0#r7D=XU)(U$IVlWn;wb2OE991Qx5H-6RZ!mToI#QD-9v1(w)&0idQ+WpMRgqXpNp z|M`Ao?Ff0@T$i?CZt=>&)S1AXcUVd)867KAJ7j?Keu)6{Dl2efhM#iY+az(;;EhSZ z@v|P`#wV(My@8x)Gv}sOAY#P;x;#f=nc%tRB{xc%**lC1T3I+L8Q&-5fi0aFV91cr zF6I897Wr@- zs|Z1Fy&vD_yLUh*|2s&(E+|@Qk`?5ed6tm}Nzm&_@JJL@wWl3dfbAEe&u2ddr-9ICT{Rz7%7T zl+0zhLa3@|`-9~vbjOnA2wl~fcdx8|F?JELR|DLd%|?f0!jA=#@a`xXgL6_zm8wl6 z;B7J4q67L{Q{8U~@(zpd9t+Ua66elE76#Q-p`RIB;_M>~nDq@d!TT|6)IjnR%Fp>3 z8hQ7C5HR_DaIiIgGOXOwzvJM(QXpRiH*m)*@j|^*rL)Gvom`7V?lgi;ut=P?xjf0 zy~i5*wY`KCWxx%Owtb+D{!l*eJ3YBUKbPgdd|Da}=q&eGoz(%|=kXn=Jvn%|S(ck` z4d%YO4sCO?w`pz(hFb_kM^%MSdwl?k7?*o8-O`zmm^3?Ll-u{Hy}Mc5SZwF zL+z)q8$wo4(AmMSbdw=#PWN$0AT=cXL*2n7EnM$oRzbRlU>ECdY*gNEl9%N4ZcHwR7rMbB{tQ#IzfDukq2nZNse@`X3tQG+?gA z-~`6h2s`5?C5BDR)d*X#mpnScjTwgu8gmHUmHMD^fj1g{)#(mEx5~@sQhsx>q9kfR zpo^s%=@8lSfq;K-4_@`cG}UOi`;zr^YeoUs_sR;A+BIl?sEQ7A4Xet%7Y-HoKz|Ce zW8G|jNym<+0V*4OqzW)2;^MSY+2w zp#y=Ktw>rd)t>i}FGo_8GsC9QD2PoEhwV0g<^iHo>HHbeTd&2PK1w$EG6Bc$E9?z^-aPI{0B>_}wAIaF&a@(tt`e3~CHcQ2tLT5SAKUlmJQyXz=lTPMD8!FzCKAbYI*A31cH1R>K-LiMW@ChoH)qcis2drX-48B?9hQsyso(n2m~Cw!!vmN(J{}2^t`_o}V1~0Z z3(j^MGC(MuKVCewfo;kVR;jrgq%;iJX(lq~U{AGwWi9@kvj^Y@P%4Yry}2XrGDUrR z=oN*M3D{94{Mi7mw+_BJN?y67&&CeSDM+N6()yuZ13*S4%d)qy82*irq0;nZ&S@`s zC+%vvI*sauQgO!!>>?Y<#^)Y!for~-ND)&8)1zN}-@eCt_SOXHLuVBeYys^!W9}ch zie#}L!UkId;RDj&cb8(CCZ!J^p^8TBCD+CSH+9!Z#ZuL}=8|&&09^9jfg$Y@Lm0UB$wAHaupdoMkf>_ruKu!4mP~d!lCG0Ls`VfOjPos z1jMjObe(_h>eqe9^93o0ca7SD|HW!;a(bf$ai@aiXPUk6Vn7YSrhn;Ye`g z-_eZj5e!{CRDvtA`Fa;(q2YzIXK4LE;1`OywMep=4VvF+-&6SUWw$(k4P8%v_9sEB)&%m%P;V<-C{@wO@IvY47e&QBZ(rgoN`K5$e`lIueUAiA5gh8LnvOAH?$ z3TijoC3XP%2*K?Q+(zH7;MiTZ>>Zmm%HN~KZg(#C@hDaFj21oyznSbX6E6YKj=|}U zzNe^L6rsDA?wI|elp)3(wyP?Q=IO@fulT5By^>|lQ5muDVD)5YRu{T#Xc)KjTThxk z^TiqS7u~{2unvDV#!A(W5T-2*8Jiz=%U!t+0lzhD83V*Wp#=VZ2q1z-s)=KpnzA&K z^dKlx?Hu*OvE>2Nma0x*%bCw{^|u8S#FG zr7JD19!q$k&&AVGmE*1p zvWNE%SQ1g%&(E;%^!$=oia?Z4(KFQHn|F7B{3C{QUZPQe8P#iCv(BHA63wqVyqReO z^&h`wP7H)`CDK6FfA#PkUJ3YWerjYEE{`x9SjV*^Ao7{d}=TimhX=03Ev#2U!2UBKaGKmQ&2CU_t>LcgWX565rw zY**o)$%7EiSfy7Ng5EZ+?rvwaPLm{zSGoI|>8duUSceDrQ!F)>jnTNCU`=SM9QyJH@L~amKJ4HrPQhuKQq%448OcuiGN96O z%U06|bwGE`i0k~2;`i&d;%ORM5qNWBh9`T};tX3hE_hiWm7nn}bk7c#oHCtHswku@ za^Km%MIb$(Qx6Fxy~|43qm7j;3(UMM8GCo6+x-G{)Heo>%ftVp#Bf#i<3x#-OiAtw z+}*k_r`2QB0+)pU+E29`_c*LS0?VQ3uj7#c* ze(lUCc?sC~yxyq)Btp{-(M7*wWZbUIbVZu0yWG&mV*Co*^-l(k|WLPvR_79BC# zmlRW|@9G#eMy)OJ9$makJ6gC?Q#fjAZA$plynjWxt9X%Vm)2=D1?i}Z{Cm6wOX#5w z!d|^GiIlzh>zc6g5wT7lUR_|g^r8*9k1V;26q^eD{|gnP|1TBO$d$7p&HX>97{vdR zioyS)Vt`)>znA`MzV6gfi>WQWX_5evhlFJ8>JyAydqGA^fVl$-Uuea?^H7QU4QwSK zyL_m|{*aOvyX-k3sY%R}0KsS$O?y@;{R@ie+sr8um4jkm?y)Z09aA2JN>+#0%J#q# zA=hTUz2l)?N&i=hkvNF%#M$a%dUX4*6mxm4UtuIw#ZfA%s2lhaGhy`ju^mJF#1{BA zCbN#HR#Xup=~XjEVOQB^_-odeW%h2~%Pzr0!c^IM?bW8ePvRDC!QfA<`5y_W82TW{ z^BH)%?6wBxZWoL5Ka`waU4%yFnsgXMlx287*We`(m;VFB9F_eCit#!a|AJ!NwqCzp zoi!l*%7qKo_r3jkf~DYpQZX6^{LhOS|57nlLJ8$xRE(|(oas2#gNufDRJ^ldM$JN> zgy6%Y;#6J#hV6FqI#_DSq|y{6)NWnoL!;i7;?fZO7bDfC5w=tZDn-SFy-28@db<0LM+w&9qV_WpA$)(GpNjglzH&SrwKj zXZSx-Og5>P`SgX$tR%QAV{QGXz#vYE}Oii^2Xc7BiaL zHl?eIYEOWCl&t0KIY-~l%51Y;_|bJE{6ycv|2H|mY)S(DIpk;pD!gZty6nq}dA=?A zvSL#IwPKFea{ZepmDExFjxCgP_fzTvIS!tfkZ^3n)085W+WmhS6F0Lx5dDdj#J2jr zu1d@Eizk}gFt6v&zHxu~9)s&_3D7uV7p`11or#eR@E2GuRqIIj zS)qy(v--|`xfqag!fB{rnf(8$#b8CcA=+nd$gv7^l(A5W*tcN!KZ86WjeA##GVo4&yUJxJ4?X{U zvKam9X;j_Leh{VaRqKgx5S6^wu>nqD%DpGF0ZwVkwAZ)psvrxy*T*O?X6SFhDrUoX z4awD4lkhHIH|ht_obXMd2SBzzGiCcA%Os-6Nc(F}pmgp@K-aZwO?l;mv@Zw@+w%gtb67pOK}QxUEo6G64& zX@OXKoGXD3kLQoG2U%~DEpnpg+mxN4+YP$w#boHK{9mP8s~w$Cw&3mraq?ahV@z}H zKU||;0PtKZeNs>O?xC!Zp1{SXKL%%)t6`${-nNq*D=UW+;ln-DL(j=2D|@;N`>b@) zHTE~o8m2%oY~4MJu4k7bjx`na@$Zq(OxD0&+75ih&Ka;G&xYvL5VvQe1~HYrP-K0~4Wf`i01>k65!tS2D7 zzc2hJYpByfGR+~pDL$=6HoO_mOBQ#w0)C8UvK1WE;ojWOg4dx)ZN0&OnMIS=b^PcQ z=)l#*U)(a;z91w^s!%yGW}0^o>9;^=%!Y>ddyrk!6h+GgGNQ%6_O(bgD~ge+hL-3I zzThzEzuvu(aR`P)7KrgjLX&}>3k3Sg>Z26}KJT0k@1IE#&rs$?I^MMaJ?obJHM$;%EGm>HsE3>advo4nK$K zl{uynccEllqioszjuJ^SI&i|PBHwaJTvUE1!kZ>4cSG8+>Y(>hNwRV1ndp9JfCehM z%o*L2UJ{k|P=H6AgTF^;^05TfcV+tTHH|ujL;^)|OPOEQ*BUgfh-H|P0wv;SL;0G1 zl15!0`$Ykq6CUtH$)Hr`_@!EkE4jDfxK@oxRGkIi=aCd!bIE2dg(RZEntW(V^$Q0B zITgQKkd&dw%NPbUH7bZYmd&O;Y#(4<6iJ5Gk&6CbT%BWdCr!}k<7_szZ9Cc6wr$%s zHnwfswrz7`+rIzjeeeBpKlM~sbxn28oH;XfdVYo6j-%{_MZas#sIp;CSjKp01Np?^ z0WO+Zz94mpV>HeMQbB7HL+k>Q6qFIoo*|R0TT%=i?W$CKGXta|d=4%jS`wIH+>}N2 z72#90X3nYN>C9a=Uc?Lj1WBtPcy1-nuKtcv_@r#%a-3<(l1ufKy5wxZr;}V#4a6$6 z0ly^G8jwMG1$n-$DBoE0#lJ0MjOh{%ku0n=d+Z+$+#Kf87TwCMoL=~Vp1f41a= z_h91h=|xxeR@5Ls+DK0u_YBJFe_)W`gg-ghl-ME;@Oe;#HmMKF8up|`R0z9NiPI$o z7|Ih?PH20k2GS zQ6~y$c%E0DrrfZWNZ>MI7ku+t8iJz%jpc%*79iZ@Ql8cXPxvKS8bpgtnZ(D)9uYA~+p0rVM2X zVir;eh-QO%cbn;(U&hR16cE&KgV+x76=cN*g#2iD7Q7|i=tMU_n{9@@EoR9hWhRvi zaBqq7uuXpezohxR0%^Pe_QXtHmk97QBcG}Su+=e!f=}Rtu3*0Sjsq;&U6u`A$}{K_ zTlpeDX|m7}JN63N9OQGW0EmoEzg&uo_yArRhxR8eijRmRmxt~m4Y_f|P+m?PFug%l z4@tm9k(+vH0=VkN0iOM@ckFutujAfe?g)MvMnEa1-S z7Cwiz=p|6en2h(7&=!`DSTX^e2RHmPqf1;K%j*yoAgx+7R{poVi}$WFb%e2jm+8oE$hC?4=|Ms9f)&1K$M=L0Ud-7W_1~ycyNvx zcQkv5aXckK%7QsS97zWX==UsRC)5EK2=_E&ZhL2?9DlumjVC1ig@V074|}zxbOd`K z@1bO4Yzg_m->6TH9R+=1nX-`!#K!Oi*bKUb{&vCLYq|bJ2wDBy236faez)*k)8+r z(~tG!GLWtM*d!N9VWgC_VxMPi{(TN_6r}KQ3zR!OW~y4LkaTHM&}Y6ca=W@^S;R`G zD^#r_QiqyvCHKjoA)7lkTIoiLCW*o4I))B(3#Y9k$(N6>syG zD&rdK?;P2eJ%@hH$R@Dl#7Yb1YipR=`r;v0)wf?tSTD% zFP%{L7DDDLqF-$paZviRZBU9vzp%=xu?XyNtM^97Yy-mx7nQHZgR_7>80m$h*80s8 zT+i=dgKujt$=LGO`dLfv`LdNhKf;Rfb^SV6~Vy!CA^~E+3A~W-u(Bm>e zWS{OWR`3GeuTH9Dv&p$(I$1_~2$Z^v>iIM`tV%HawEVf55ivx;!U}Q{m1*N-OBj{hc{+vwpX;uLllt zNHyz7iVN8zfe2UC^~=ZB8Pw@eZ^;BY^&EGbV*cRxA9evPIeX~UZr3vJ5*b$L zg!LbNy=#BhKpYt~i5J8hiJEJAHVX-{R^Oc>O@XRZ$Wl=*Fr7zZ6<8!PoyRM%+P%}z z7Jgd=r7QmE7MUaB65$JD%-26-BQ2HlzzCQg!a!sf95bD2zp;+R96o$zSCYURNUD?w zJKMh2fQ9Eu%za}+d47`h|HDR#aslYWX8wOT-w3@?#+hRM9l4D{E>`?UTnegNfS55O zY2_P_G6A)VB`HL8bY3)KlLU4MKo%BvVlD(hJYCHn6W$?tzA}%PVO)ci}g6+l$ z>UfgScN=Ysd`XZ)xptF?!>x9ciKDxA(@_^Si-!_Lsk<|3dXp!r)Y(AVY>5YIQ9@I6 zd(LceE{IdOF5d3IffSc03i2;w1(t#5HO3p^O*8jQsHvB-5q_MIjHfbt4sA?ABZrqT z_)!LKD>s4)V53SA_u3`{fYYa0+~bB;q+$o6YrgoKsQR?Gh=;o`i47%eKIu6um*vsU z@+iMfwA=lk?`+v-#~4%$(oole0} zMAKx?&~%jrL7igbWlU4l`OX@RU^Gujbtq;V)dUN9TIVsA1}656su|Nrt9&i9IM#n{ z(^$qWMQEOExm6DIYgK|ls72B0K?2ps(Mz0a=3v)d@lcv4WpGGROPr%{iRuX}93~}0 znwHsIHc9FYD;y_nLz))ZV)6~4J`~O_a`jtt@xUq24K(aEH5TpH{*S|c(;#}2;1+nU zCv!`~`sND-}X*cb8PDi`=GNL#6u*le{Z*? zR5{gj{Gz+E;+<^q9fEXDgnq}QIDKlU^EZJS1_*rPaiy~6B_vvL#(J3d6M4nSn@9q) z4*<`1qIPgJLkyq6bR9V^Bi6oW%Ih_lSQ)6pZ8$Nw&g)1~GR>ddcLHgN}wn(F{)JxpLUmosF z{pk9Xkk>n6H|-RqIZ6!P`3<3Ar<@YWq>DdLa)8{~Uqkf@+pU^s70;oNE%xyEU4GD% zwK4drT<=BtT*~2cs2TKeQQWU7+q4xeczm6}0ol8}t6OS?>9eUlyrJd@d)H$^KL$I8 z)Wf{xwj(lFUinTR_NELes{>C{?1O%5(kXrf$Msu~u1U0$x$gEkd9sS}dX}D`Cy81D z`sHYept@GuP^OwVMtk?M)hT-eLbmH%$ovlZ+e(oVRkq%@HDI3_WS93l!gQY}O}XOe zV{Z>nbue(Jbr4$)0TI&HiaxM6j`_%!fT?$@#A2!dg^!$NNEG;X-wVk39rJtGLpInF zE3Nen1mXrP?;+(Xqebi(3@@y06WtzvM0=MmU5nLe@fIO1_5*}!K1u^#xz!c*Ch)DE z{@+zdnf3EOS+swgY3yD8<{Z}TcC9^aD-i z9&8%3YH(VXaFB*m82Gds^|)TJ-P<5j;7;QJ5w8o@pVy6szzH4W#eGsAzuwz5;Ajdi z@#P2D;|7i4;x};jM>KL8!rv6@a4bG61|1pV~PBE}(WUAlGrRjk40B%6lh0JBYp>R(%C(`Nhwk z8^sM1eqYRsU0D}pJ&Gl_sQ|I66&mlce{~NyOIIUfv3AL6c=S)htsC&in%{nD<$xVQ zueqJr`CA71=oGI$=IDmtaC_q$@h6S~pPUSh#@+lWq~@o&=gghkgGkb=5}~){Ubp09 zXeRzF0SimeoORC+(hq!T`D>I!@Q88bE)Nc`Or)<19_DQ61o?g9$rhBw|6nG+GO(<` zU!K1*zJ7rZPN2%-7d}NA-KlJyaJD!3P9MEDb)G^n(5A6>Yz+l6RqF*xf3!1ozeM5% zKgn+qhq@iTXsP6Rnf^bpeAMDMOf1)6LUtdx`uNXC~PK@Q&UNu%g*)m{?Pq<0l4xT zKIKH=i#VhZRx*aW$l|NgiE`+jy{uy4eYK71chX@&$CnjS@UXqElD(yZ8coPa{mCW1 zh&ri?qa$tDh9RK}6DOJa1^uL56IFXsBzMF2NLj+_eDcRCtF2z@qcxl?j|Ps)_@P{1 zIX(J~iUd(gz&C7}Ov@dGfS*TJQ7qM)1ACb0h!Dg`ar`%9CS?DhybKvX#kbWlI_7ro zYN|gQrF(zJ={)Qdj$Yp{8nrJYCs_^uaQ&2b5Y7DL4|YI(N02HAr$lsw>YYfTw`tE_ z$zufu*;l4zjl-A^-I`5q$dSsP0{k+Zq9;3FIra;%^htf+o6L{54Fud>&an3E(;5S0 z+7ec-T@B1IG*~z$FJk)xvUg*-l6j;IXM<;HhK@I;6FLaydN#hfa?t?BnbbF0+N?)u z+~X|Jk^OL9%igJHtMsqd<@V=5k5aqq)f`}gH(!mZ8UMQ`yK8xJ7F(4U6Y3W+ec!#z z52NSgq#Ek+Pa~pjcYISP*N7!u^06p>%_MrK2T+REW~tJZ&reru`omBnh z*c#tmMZyE&zmdlMa z=G#!K%wH^ie~gn_x>_?du%sAK%Gb+&;x4HvMXK218+-VIm>ue`dg-g(ge zr-f+tAK+rR>2BG-*#F4}JvaktH(tP{NVHAsRAAwU^3Ee_(3aT2u+iVo$9x7g0loMH z{lWUyWBla%Tt!J`*A`w;h%E(G_~|!VX<)?(6QrNe-U3@DIERI9{uPG%O))6P?h|#? zE6^@VyG#7c`wy?79-)NOw0EQTfgT5I`4s}Zv2Rxb@A;RYU-i~h;tXzXw{T* z@vR0%N+s7C^t|GZMRrlq-N~yc%$*)t)E2U0$5fi7;vK~|%Ta!4dA#aqWjC3Pf{AG5 z{g)A;VktBEddp~6U@5g~Zn9neNrkBJ0H)zu9?#IFYRX$C^x7;b(-%h!}UNKsWgHM-TX+p*&Y-P9)(2B*XW;X=)-- z%7DZu-Eg{69Q_ra$fBiOJFD>=Z~)1JYa;A?3MFfee#S8luSK52Yp`Na-*oQ29ptZc z$+gqeQ`)k1{o4CbjK9kYent)UF_p@rniw}=m)}6i=Vkg+c{2&26_~6)}*X8mro{I{quH2S2i{*Bm1C4ZjhdLny$onz{b(MK?O+wz52iQ& zE_T1w`!n*j8sP`emwH5R#7_P5=CvB-huygb=Lh02*y;(%O%l9J`1CDbGIGhPH@wa3 zPMm^}H|KaIzD5jN=-viKMTfhqP8*Zcvpc4cU>}ER*;p2JMi0vzap1f*Ru$)X({ybx zYyM}Lp*H4-66=TcW$G69_(OCN+#Fm~Ec1+SiVsnku8r8I5qq#Ji=i~AzAy7@yPS9M zbHbjeCBW;HESPah44!x&(SG(FO&{hVQONiQdgNs1(h$)rZIy=L5WX&`WEYF+6fQ$~ z8KkoZ_73i0be_%7a=6yaHS^jI(kqQVuH!gB=Nz8#cVmdhBgLeI4(!@9P;!+)k4;hY z01wa*GBAZznqBfnF62w4Khal6yRN>IDW_0P73|PQ!~c%ujp#+drnhmva9f-ne*zUJ!>cxPORMZ$l~(wOtir}N z8WI~quJfw!g;UW!C@QPRsEXcHHV4y-USwxT+CTmz3SaF@@2~f# zA3g)LzH5`|#;7WM4q3do`(^5kZ$s^VLD3(8uP@a=uhq-y@Ux) zawtyEh*n)~nH=flEZU)IJNn0alP82`*+A%;`@S5hM`>szj}v zfn8}L+OdZZ`&;-l(aDBNXlx=FU;6Ip0i}-)8tQ zKPdSf5p&rl&Ft5+Ph@dRM!>SiDMj%>e@qMEb1EHIp{vknikJKfU!9XJ;jmW=0TW4n zi%?|c?IyA%P9L;gvH;G*jcuw0dlgpJ38q|D1K!ShG>ljmfH|-RlgAh`)9s%7*Apvj z6-0jCl97hh`3!viS<2q;kv^-HPkv^O^=7R&8I<|m75j*Xbbe@cA{4yU&%O7r9jH1! z{mw^9cK8nnkJo9wBRTCSSfA~~zF+$`^!6Cl_QyUbnlrS!n@9f7#+-mC7jHhE=mN8D zaH1II(F8J^Q0`|U8Xtb&5;y%+%2TjF-9^Ra_BYV(U_Afq^z-w*0{EWtgYHs4Za58is2Tt`g3Aa)1p~^zlH=?TWAhl+yj0ApJ~$~#OH#V8N4?i`@%3)ti0^8A{9YadtK^) zR*UM<)ruvH{C^q90uNP{S3Umk)m-ZS8V^;I*ggIbf0bzZbg}J`D-7xe1$iV;=(#?C zv955;fqAn|j%Cn1@-&!0l%62eN2NxYLH2kk0Jg8S80UTuI|2W9}h-pebz%K8=asOeE)j^L<=?OGZ zV}SF%_!??^v7t2J!fb)Sb__4VHa1cQ2kvw=cZk)ioh$u_OV5gKj<2B zNrTiVrQ|d zFmk}|Y6SZ@y&@GKHR&rmu~Q0i2iU8%e_9l4%I=4X$BuXp;iSce1mOhzWaQG`U*|hv z<#LE$TNlyZn$%zwSaC4E-KRaU72&p~k4W=dY1U@1T!LFCp8Z{cxJ(DSG@%O9JT-LG zoq}~;)+T8QOoFXIT^Y0HF-OCP*&7XL#F$q;OA;lb5}5pD2VCKNFHLLCaYI>ho~caxN-S{yTPp+(v#6#&{vbh>dBCpA2MqBXX-M$qP76497}t zV@@BG6Q_<**SzHXH~hd|w$U^wnc_64TRFWU17dWx8*VECWFODIh_k!|#fU=14zDaU zAJohw8+#Y~>YyeSjwDwNZt*-X_(KEx2U>B+6sS{=rG0Gim7?=eF&mNO^(KdCZrA8m z#wuv-xS}4ESzb?J;)cV7uro;OtYYsovGp`opJ&;GTPC;+SkaQ)TxQi}?Rj{p^bnSP z><9GyTRy%1mJt7nTv~Gj?|Q=`^w{&$PgZkh`V*I_O#%6?ov91WV$=KNw_5S{a8>ma zROwXJ*%;ft-;8DQc}PhNO?S_7?nKKEbp&5x5q zitB8hQubo4#zDb`qs&FaXYY`ND*gD`uSxCHvsRf_B= z!BNl;bvB*S0_s;La!JuHL2-Y?4|cY1ev#gjuvF=DoZ_b+$@sz<1SvSzLN#0$h@$L| z-r1pmoihpNef8OijrbcAe}c+6LCVIsL$66VcHiIX$5BnkN(EcK(OK14o8Mbw$*pq? z{O$hum8b70YM1uvPP^7&oNs<~GnIx(84=;cr}|u0fga!sI}eiHRm%Lx^7?c63y?B% zazLL>$fvZ*Os6p=XcQn_o|T^hTFH{f6{gZxRO_YyBJ|$~k02eeKBN3FzdsU_rMB%q z=d)t2h_*^Ksal4m9T69IIG>)U_%>=M5ALT>r^K(j`Mg#(LrZYUS_5i>8WEv2>$1%V zXOxR|ay}$Mjn%HTm=)W0jH6<&>%|n3y9_(Qe!L3nbq{RX)g!fL&Gg=_oZ;X><*np4w={GCXn{Be{n6x2){wYVx5x8ZuN2mQlbD zC)pL)qF65YM#}thg(_ss{dd&y6x^QtyB`{$Sf{cgdMLC8JK&alXkj<-1u5?r$sglFaFeU3~M7 zyE5G(U`#+NM2p8{O;YQ0RaQ>pFY5yLi<+KhQh z)R$#T`cVNU9$VD9Mtab3-Tt(=7&`N4+2HwZ;iFZOTx~J+Yk7LFZc_0;@RMRm?(Z1b z(vvH--Hf$UirwF8JNnMjjRPe_-O?hC@Re}da-NmBf9W`_o1F2L;(0@(Q>GZtE(fXF zFr4+I?uaAco4Clzc9* z%XAac--FATNVUY3r4C`DT@`a@Uu*stNx2{u}WPBR*jW$_0x+D`=&KS*cNvm!qe z_hSf}4!DwF9Ee{t|6!{V8wl}+BlGavtT*65+8I9xO9)lQ#ZDpIyJR4#VnR+K$|tjX zt77}Bo9m@6gYh?*)pQ_M{NJ|IsAeOTYN^i2RZ~~wwYr_l#-Jq%xHT)dH!ScIrG94m zEhUm+*^4Xl9uLVFN!_BfJ17(r@+A|pZkkn0)VAq>28pu&$GjfU`#D01Z9VnX&q?mrlw=Sv%Z`09LS$w6XAp0Hr5$PP_IBl6SV`eRR8;3&gozQd~>+refws8y*c<-)w8f zO|dg|^)KP-HAfQYOm7SZ?UF;>tlP|XwkrxWX1GjW2VGN0k%a;{7>#ihxKZa7%3>1= zMsO7V5|F3qz;#O&R{{%H67_(cYL zV#S%8!(}i%7P`DzE|78HYZZp8TDu!?wL|>=XWGrxsNC>yJR_8CtJGb@s;XS0T6l5{ zUa_;(^(!@g798tMJ1>6r4MU?V(y8RHE3p8e=mz?u;_1U$Tq$0u*~{m+vu|iRJPBpmK`9 zBsb4Fah;FqN-#^eYq1&W)fi~({4wh3LSWF-y`4!l9E9F^Q z(@Wu0w-BASQJReTHubyvw9;SK_!&#r>dH99caBYqi1fSph0k+3*XcOt z#A`aa41C4aK=Cx5DpB`1CQS}x^O+|!%>y=$cMs+Oxug8I#xH_+=zP2)RO%efr?JC}JG zcW0qC_7iPR%=hJ`tKbFO$FM#3q!`CHC-wT*ZC4a;ztwi()PibrL)6k=Brcp+cw%s_ z&uHU0UeN|5Yrru`lrf<-u?7?E|Ma6=)_DyJDs7`ydwYR5o7C1t%Lh=aqB3t%I1N{v z*R_WAIz&V`Mm5rGW~nV;r@ivJ((jXgE}Kd`DbavN8(IA94DdH7$UI_|JxJt3vC_p{ zvYRZ++*$3Dg!&=3I=`|yyb2VCtEo4CP;J=M3h&J-PgK5>JQQygho zW_=Z6Ug&6w6_sd@=;SwML%*#oZ%%%tZBz#nt3qCyx%P1#r=vC?JPsTh1}68F>(r1v zK0J%JXXwwiF~lzn z*NBv9v~8KPBuvpVZALoQGNpxMu&Q6JdJ=n|Gbl-?HKs@M2A{j#jn$hWca_S(7T ziq3CXVA47Xjkk#~vWU0%NWtMOHkAv$@`}r`U9flQJ#l0jEZRG#I|*i8G@HHUUFB|i;~fr#TbQbJbEsD>$snLZBW zinJPu!ha5vL^ZFG6j6VZ>fEK(cYWG88e6=Lk{p8M9<%&vcP{0MeyA*(q0u?t;(w@< z{6NV)NYhvSC)+twSbmg3%)aU&3ba(^6t!48Ba`LpQbM4M`cmt}Tq>7+kj3j_Ym4L< zPP{{6thYWuVl0=gkJOMW?c8vK$IO-}A?vw18Wn9URcgReuivmZ8d#mhizdwog&9{a zi|^FJ2-U8-v9j7?QNq$rvN6NbWTDdCsmgTga+|0AN~)frJ9hYdNdMT(<)b8-P(Rb33Rvz z)jpDpIbZ}`|9njbznk`QyxhO;@bq50D_Hd`T1?AkuOwuiAg{|LqlOYx{^5|a(s5Q? zW1a}bu3jsZd(X^HxK3w&1!rVJp+8XcT9ot4RACpvV)VZxNNg|vQO9OTfDBD|KaD7X z#ULGp^50;TwE&g0qGKvs@#^cG{v&x1{C-C*k1Z)}Y{4UsO>0Tx3Jyw#ag(uK`yZlL zvKmi*^PXk;YK#s05ZFcel$UMVuBsEaoz2G$dEw(k^ATPUeu|FetT&if|ABfaf!BP2 zeEEUS`351J&E9Gwh&6ANl9f?*QIvnk`*Ye;ej22`xus;g&B16#;t8?LZtgT1Pcb^f zNG-;)Ng2KzX{gd@caie5$P?wxZh?jNpr|9_G(j_i?Iy_*XO>uf2_wTdOO-R_(WzM7wce^EjWE`t^i~kDQts3JusxP6e3rGjd|i|6suu(wNB` z+_A{`)e|ZjMua+BqW(7wRksH%g<$p^-U9ZujDQmBz>plj5P`t)+2Y#8mpGF&KGx2T!TXT3Rw$B z>drlZnohDN$H=BFr=}+EP*zl9=#W-i)E6_0S}O3@F$b`DA5f23LuiG3>G>r`GsHFM zr>L?Kwx`VFsMnst6HGfKA9B`Ei@>u1WZofmFIEjk8LPu5~F_% z|J`kn|F8BjlGDUHU^fEA4K|+PBUJ8~xJ=pOyou5N(!sC^!Z zMm$k}4*?2ICSL!}5h^7oL4P+UWYf zSg{!0^OC{HKP2rd)B_>aByZ<*khr;f7=socNZk+p!D4x7`_t)3+-Yb+`VSnCxYxx3 zOUWc|A333N+VujR?4)ilYmvCoH-h^grb*rNW5MWCBySf?p>%oa`l)9nZqG@fbfNbe z$FEnhrEW!CX=Wjv$_=5mEt7+fmK^>EdAnazZk|PTyaXamvLH5*qbyMUQ{c zbhoA~n1e|h!9zZ}F1&~Heq?SWIN0`hFOD8znZwg+=PvfVkB)psJDT@1#_dSB)Q=_{ zU1#h)lIZ(-f#DghyeopsUA05XWA&y$A z|LR3HfNrx!8AL9ctmX#0@FgFn0W%Z{v&q}2aG?icgB=oltps}ZNY6L{ePz>hZwHWX zm#QYDv8{`9$J$&Dg?N(6ofUz_{VS-~KQB)@rE<)V_khr+b3Fk)^xY zzSzUC&+b;u2CG7BFy^+gq9v^6^{3wLXiouk{acm%%z2T_c|n3RF4&oXn&gZ>WoCg8 zTk03WfZ-YlVK9&ZEFlRnlrRRWn5%%WD1wQ$D9V=TmOKiEv;FSKHl`?wh{KYC7^cUG z+xgDsc0Buy&+f;CkKW0Lqueq_sVwcwPKDC4N-wk;+o84?{rT+$Xj$k_U}(U-0}6L6 znj9L}L@?6548sw*E-~~9a8eK}Y;Jk;mgpVIe3LZP+jqsdrInwZ;;-cAf{|E^+a)HZI9!P8SVY+jx5gcG2Z`$<=+F zd8#6n(BmkikMgO1VY+ds4xQW3yE;jE@kYZISR(xhL0u6a5FX@&aE#rh86~S z=9-*pP!cF+kxfGdQC&50$_{KQN8&Q1C~)D$G#Gf{v@Fy?K~M zOchzOB{H6I4_4~D>ELK3Q%M~2qRqq_w%AYxA}FfZ2-hK)i&8}U0YfA*W^2oSp)aPH zh3sQsLVbet&q&;z1zd1|q-PN7aJn1fFy=3q;3#9{2xMlAVN5oxVUOXz`#3uO`oN2pEDKv1MlD4oyZ$ZTK#7x+A>gLfAooH2*UMa$XwUc!Sum!z} z{i28ZHJM5Hs_CReER)JwLipn0ZbC+jm&V>(u2iql)JEw>&e}d*FF#(8?Z`F;TtWW|}aVVsS4x*;bQOeI~j|Ohs!u%@eY@UObHJ(U^Hm*%H0qmJxb{V$D`# zu41jlQZiYw_e0oj8bv&BgM&lE@oP^33C zuaNZYpOAl_pKK!Q0r4bfK}6mzq<80F3-zTaG`~j^&we%O*VR9j=O9Bf+43Y}VPeyd zgT*~2){~Le+0F16^B#mUbjfl#-Em&^=jGmkZD06DeI?#P^r-%&hZP?W_lM@ldn4}R9j{Fu5Qn)npyeDp?^psVi^u$=0bt%W5r+2nM zlQ}e+y;zVG?_DbH6N>$kO#Ke`Oj(2Oc+|z>Fzj6^xcgK#2V z6(UQ@Hev4=K0<{krzD1fZT1Vt-<%XP{g5&Etxb`POyLFLg5i;FPLY;0*;Pk|5`Dc5 ze>%iC10y_|q-~yf>L=wBXzRBlGS{DfWo5N`1Nms6;OI{Fi3A?hkOzR29lQN$;b6)3 zkZwOBbp46_FDc(4-I;iO!`WkbH=FnBA=?9SJ41FyaRpgjf@h+bU}P`4(2N>*-6G+? z{kt)ho#A*Ldt63$eM4btr{UpRWJAeARe;G&dpKGS1|A905FS(M=x+ynunTVS3yEw= z60)5lRa>?GOONrysPy<+kW+9!jC@3RqK>0$9m|cWO+n1$IS*HVjeIAKo=nCRIC`g> zY1P(CICmR6e8W3pN^o@#CadeY)S?Teo1gsKAY83Ab(DeXuF!5J}br|i2*FT4+ z=M^C_->?6YyXR5wRO?{!w%b9=+ry6xl~g)pnGthm#CV8~jQGY((IZg2D1O97Y@RyF z&&1~nVc21dA>unXrmxVECHI7~JpP^gC}Ghm2L!*WcFekudsx8enS-V(B+e1+OU!R? z;e=8O#U-a9xYAa@HfHf*{Wavryo(rgL}=^|7nuJB+*t$S;OCZ=SDHEINNYGjfJ%jw zMF#<@f8Qk{O1HtVJ^_Ks*WO_>CVjC{~KQ$jN%kn#`Wyj(oDmC6;&#TnB6h>Pt4B{1lW7d;$ugq~NEDx=U8E6cKA~ zYsiB2ig+V*lYojoY#u?*#32(5`n+WbWPsXQ!z98jkzMXUt;-(}>CzgYrVg5`3vw39 z@`z=3C_L$WhT;Hmnc0@ic6zCK$H43I5FLOnS66VVQQee-x^V<3;DqXwv58v93Iv@3 zG8v<4Jb=yw_Nr^tvWJVod6L|J<6nq^=YJ#?{hQH=j6vAq-Zm zpeIuX`*B^z&lP2aysilqo^PsQlcqX(vn*ixU>MQ9`Il9IGE7T4{hrqYCN3J!3#c1c#JdX}cE zvt?&=_u$r$px|Tj#pAI&vP}adNEjJtK)rZSd6%KB&w^UO&8S-6h0Oxb26w=gh#`UR}=$!W|h*u z>NjqbeTJ+y#hva*+^^shN1$TS6dS14u^+KaI;^>2&Gp0JB`%P8l<3*#K~k6Rl(5+C zTt1I7UQ)QbJ?tJ>Zn|@hefl~*s6Qwt{=CQfF131?0VhbFXyx8p?9d^7s-i!e@9Zc; zL9YberoDT5_7(3nvoxg-H#S>a(N(3)$JeptEOLGM zGcSm|wu4eL$$0g)q?FYsGcU@1?$Gx!vbNgY>6IDZZH?!;G*1V^#G`2E)CtVeuO?up{_bx*(({96#M_rwIWcZv&;M3(L|U%gPEx;2T() zlbH)#PewmmNk+`hvPEHunIzik6&duul;<}kIg{BUaMC;2*#SZ&%%P=Nyh?>Xj#ep2 z&yGZ`)AC38CGR0lEl(;gqpHlLr%s+I1IDhwGF86vP&g~RDF^S)Y)0RCQZDk@V#vS= zY25=eM+|MHOBT+`9LSc(lLaxt7Ts3dj8(RH{^M z;P~Mg&p&hIDIxF47DgWV zYn3d8aT|ruSvV+t@}Nm@F9534BU)HhXbgJ@a_I+cX*({J+Qx9P#6P766AL4qvv1KW zV`{LuT+qsTZ)7&REuCXma9QM)(n>iLj@W<9t=UniE|nkVl7d^ZzEf_OKL)GR&r>jl zT(c5WNP8E2o+->!UZ@siA?V1&g6w4zY?yL~q%mA*aFbGt5U`a$KZ>V*k+ zI$`PP`)i(1VDuh8uZT~ zt?U(&h7-!m;_rWEd&Er@H+Ug$iU-ERuh%CkEtn}QS;2^E`V;pSG7emt3~C?Q&GYU< z6%v2XtVb_~vQtVhA%bYK`ti&u!F3aSQgeM+}Q8){+D_Q)-c1mh3?)48^l1pc<*dospijou>a#8$C^u*0jsCNA2+kr#aJ z|2>qKG1zxKMmJv$m ztP}LS-eOpCDXA#)%6)~fG~w~2Gq+Q7X_L!b87kW)Rb_-5(oLCtYefIU1!9ebi&`6f z!9_n_^BXxRLGjwboxUiO-9_+F>;k;<`!1VL>n?JtYt~Z##k1gKWo4f9*Ka8{(*BcG z*4=uF1hFNfzOsU0p5dTNR@&Fb@=J%4mPMU|nf^M2IV6d#NLsSI+|Cxk*CW%ua0YUP zq?$}BLu=0lbGyMytT;3I${YpX2y=O#$t_OMsZ`t3&wQ?OmB>twWJI@e$4;H(a37^~ zP&F$YtJ{IFfw1H&WVI&<3(5{&NP?;KfOWh#$8VTym` zPO?G+V=uA)eBOVB`rUug?k#+$Kkx}Xfn`-S7TQsaXG2fY9C<6wsfPC(74Lv9nnxxz zbIGMgdr##b%ZkEK$Kl0XNzV4rXHbjR`qo-%(Q>D7sm#wQ#t=oie4OOwQQBQ27TV2; znJ2rLIraiN!qT5<9+PQ(ZIa!nS}kMgO$sfr-7;3{Gp{uxqeqBY<7 z6W^WZzRBC)jCm3*1V#T`+e`hE0|E+n7Fv#pUW6R)N5(NMqT)YJ6JzK3`S$wsQcNWA zDoqe;k2khIrQDvDRg3SM2=p6|HcCfP^iADbq)n0ek}9u9dX(v5JIkNYYCs_%BGIb$ zImwVjXK3l%WyHD9rrG11Muet=2x~F>?v`pJ{pNV=PUhZ|{X{S!Q6=H5#^G{?kk-2$ zm2U3r#^IDgI4#+Nkp^#bA%Z_X!O-rIFU-Q-2VdNv+dTAAz?Nd2LiPFKBNxMe zGK-_K^RZE{-yXLOV&Q3cwBVD4Kn(EX%x=&fwHj>0LCmih_v_?MX0oHs!p!P}7j_3o zYDM$61h$ja`$jhsK?55rFsMH_L;`wDA=2zL`7R(>E^-i+RI!XE!UcF@MUP<2hS;iRY0sGjm>s>2^I!1u@U2f6bq@F7tX)`n=Gee2VOV)~myspY;NrB_;H+O*d5*2I zCGDX5AAaL<=pFpqqFI!&6R>)9lcBKNYA>NB3b{&+#je1_-&65ac6BU%L3fa_Ze`K& zrTdrIFj2TkNVp=y{Fm3O*eUz+0pdc-;rsYM`a!$t`D>KS?-X7M;*`WMj1++}Uge>W zzsK`QhKk=wS_5MgdxOZkAMZGXN^e0H1f0Ftqyi47*k%k7iFB*xjlSadgL>x6<6Z;^ zsx^Al!SSCLCR8(Ur;e1$a#@_}BhH8fR~0or)z2d)V^G?^4vj^WU5TO*$Y_G|OPZ;8 zvugWKS)`cevx#U@$*+n;(SahFW2Xp=gXs@GK|U;FvJ3JGgh|CD@iHtuElN7N)Tutp z1=Nm9_|_z!1)tGu61mxqt)TVsi5NM?aPhvI*cGH)lTiCD#P$fss1sY<8?yOt*k;R= z6|x+_hVsG$b0^%PE{r6e|IA;>=xbh<&35@qd(wv_({8a znTF+^7MrNgnoVo;se~{sZ8!kAp5KmRhZ|{#%V(d>)eGdw-65BiXqYHCU&iP*g6mXa z;F!{v=^drG?dg3SwrlB|Vo!>hMcfeTqmxma++?5B6C2gf{HVj;gY5c1*7GQ9soOAV zx#PdbbgCLV5@pZwP;9g*@gB!tm+U&uI@v_M$iZ&Sh3(-a@wl5VIhpi+IL?{JULp*& zgG|qtMhZ#AZrN|NOVf6GK0G z;VoxelG2h85mf}2<4fe|;5v8MV{;Dl=ln6~f0^Gz^!Cm2MZXYnW!`ynJTL9eoB1`! zzqL8#HI?0!=2_5@aYM!VfB+mP;Bffa@f>9f>+pPE-~K$UTXv===Ap4;^^%G2LFWVg z$KUn5+Iug@_w$9RYyDxZ!}(vYp??DRF?AEi~bqRQ@JYP-H@7ax8u zZR*!H;k;WbqHq{Ufyv&I;1#MIMhg6KWY;QGir*vz?myz~Vl8L;zFhSVrY%8ta7(Pu z6tBh3A2j+tZ)f7Fj2WCA%}B3~d3jM69Np)W1E)?XE!7mQ<(ti7Mb)cQmdztYS8lW` z=!gk367pt%(inAiOX_J|_&u*RJ1-Pdo!>&WaUsx+^5<8IvzpQ(BvVXxUcs0mD=G)K zN~+PMNr}wIl`fj4S;s<}aPqa;;CzoTi^Ci3q9b$VoOilQpijuzAnjz6 z$5qt4DB1ObF`Qt?;nuaEtl20| zN}goL;P*oZcS=ezY4=iUoPl#<2FlK=c0q+DkELsFn1RxJ;=NR^Rib_~lS4*Z$1HRM z%Eq1u$bWjQu@C|h4qMmaOhz2Adw*O$A@#Tp1d2&ui9{d@iRK~|YEz|dTWV_~8rNbG z?Q+(@UE_uvn6&kK;B+Xc&=>V{%f3rpa!;!NjMh$aiy1Emr+b8G!g%;gpf;?$e+3md zb&6?ldUg~2M)nf1Hbf?f>w&mVsj4O2Knr{>o?|2Oy^J3(*`_lyPnV+vE?Yq%D|_tj zWvtEXWk}c@(5KuyAtO<$9+q)8bm#Gwu#}S>;x^3?chzNvHCk3a-m3&N)=P(lpiA+K z;T02+V)bGErE#8;|1OG1z$4qGE)c1HkDWNFp568nbONV(wu#CJ{N^o#-K?QlYCU&Z z@{CZ)MP84`xXdPWQ+>R-JFmz{qEGmQ?YtT9pt}?T*{5UIyI@ly2hTV{syun{V$Jl` z*%be~+$WUZ*C;5Ynzs{U>uc%p*LJ5dqJ(ElMUSjYgg;#@^p&CxAlFlA?mcBW39Aw;3xF&N!awTxV_75xBtDOCFs<3-P60_{WDFLb;J4R zeJSgS_0M~M))V8O2@j^X&298^#>~vbt!FX`XWk1Q8Xh$lqCfAU#g|;$&ZHwM#_WEQ zH!Z8ReGZ(`L|w1*o2trdwC|fLBWko~j{c&&*2X-mg1XlBJEbI|d|GH~l zeapZ5zg%zsoPFA^S#x7+0~PYEmJ`r=cX(|(v8i>gNbTNk?GS|mYDX++rzD^gDmOB! zshwI|G`~CSIW`1eSpK!N*1gQKW8|uaHvF+-qBg!OluGx9+oqC3-c$g`)yV_r_sPoK z`Xt+^70y+y9V1LEjCP!GZMsTx%Yx~Z&M%Yh#1Svz*ejyguH$fYNRLV!PWhf#_gGnu zTI&Ja{t>WEy`eU_uYbW8q$+DT$1ZoCS7xftULQP9Z$uUi{gutG94nXKVuFR zbV@q)@?3+epA@i*g!g1M%F5~P3HP=VbTag7SL7Fk_GFiX)puxAvZ$Bgha(TG?-p7k zPb$wBZwSt5clh=>ojbDS7T-5PbTOMv*lV?vR5lMg%>*UMs53PyEE*5&X-tMiQL-}T zC{9SA$ks|?>H6eT%|Js|wb6%SYYVgLv?aEd)Fb>=Qqxl$Y<7VW{Wx`G)8$>84ROKB zfJpV!GEv25lTson!v?tH9GpsS3HgUHRlzsTk<{KeH?wTHHPxZghUJnzRLte!$faR> zdS}Q#gNz)o3L1%(-vwjt^Qg0KIRB7X&1Ot1#q$zK+D3T0_A|sk{V^r7h#j@NUO3gv znxe;Q4EoIFSLdB|6z|8KtCFKtz5T
    Hoh$UEoQ;%e8uzb)R@+_rii*;b3e(YBQ4 z+_k^$ytQ_&T1u}fnF|-eQxFN-?q{cm_g)H@q+Pnb#^Sq2))In7>te*DfzgyhYf^1C zMc3w{v>iwzv#3INLh*Bz5Sv4ln&JL;dV`)P9eos^6D+-=W$TO2KU$==0kzwg_2?Z!WgRu1S~zf(~R`JOK$Dwq1hd0PLYyi-|} zdx|Y@iKnrbz9C#tC0%bMX6Y)XhdF02hY%@Qflm1rQYMQ`V&ic zYe&Q|??i|)Zt=yLaB0oY+#GpBLtbT1wgbV?UbzFduNa;R&V>Qw}Rw-1iw z)-r`VmbY@eHmSFvRNXa1h&E#|30A9IH6>b@Y^)p!Ts2Ob2%4^jUF0$boJq{{c73`C z+E0#3sF1ZfsV+B?D5lSFCh@3f!#a-tjf-@>l1MtkVG)YtBSVfB3Q1PHL`B^YQE`T| z4NXP$7=1!S-HwgW^!e~4GEiU|rC>vkaELenEyzXk(xFES^CX>a|8G;1T5bY~j0Bj* zl~2h3Ydl|CEb8X{gCymASmOS!l#gIIxEKR@FuC~kPy)`>rg}FP&UpGc{sR#Df&QEI>Rw5Pv2+q?eK4BSpppYWcB!CAg|TQBK*a%U z2{riWgFGknJp9zTE^q)F%OrFBUYKwbI=bpstD{|r-q-u)6in!;G;zSwP zs!Tr~qee701dES2_76|7sr*~i@U$CHL+s3dsrgA>kSImu=HYu$(00yrb&*vQ$ER2N z>C&+%VO+mzZx^Vm!@aL@ELweXuNGm&({*~g%#XO{pK7%eKU0Zjq+K_?-%~)Z7Qn4U zSJSqq=YZ(FXhdp_VoZ2s4_e${VJeDnIg%41&|x@`Zm1(rA@Gnx>vm{XEoN7*jZ!>1FEKQozYOJ+Zr+ZMXs>&&Eh(TU7_ww5N`k3jfxw| zw5cO_BArvAZEMWzWlF&#U})dMly967UE#ij?MWXSq>Ib8-jzII51V-!m^LBIVT%eCCR>?J7Ol!394mOXtOtI zdP7xkc*O*L{>HM7A7tu8%00reo;JGw=SsoDldZ!X6(m@m`Ff5?<@;}DpDXf{*}pGT z-<2(0j08bl0dxDPvo`OOC^nRKW**zL)ZEA@j-)KYLub)GwK;S+JFL<;u z@)ol^iwce-N{~WUF{7qTe#dQIWC(7iD^V|6C@un>@0ke{1Au$MTONOWF)}PGyrm1> zW8ps-rC40)qih6H6)_Q_gKql4W`LN+JWG_}aqTa0@eQxh4mfiTBz^?a_lZZ; zUfv3wxCqi#lb|xA>(=GOc@{B1Q3`q|2aJF07ec_pszT!=uimjBeTz`&moHL7QG0fm zwi9<$J;4}w$mFT>EEr#nze!hUZ*dkqATdHALlQ_`>hfKHGV-geY-PdDb29So59Oo<_@kd?C^HYZuAKUfAS2w-gU zI%{ygM@bAB)z-T)&Z5_f=>TGC^DIuWKB8?&KhF%g~0MaCk=Nm|aq5$II&EbZ%~ zR?(&5Zc_hoCh>&Mvka`| zD#1-ZRQVe?(O^dcsQ-sHWIS?EFzczVOH$JRjm&8jrvNkBAk6l8^8b_pkPI-RkJM>a zERd#aFD#Qn#kc?>c$_nT<(BwA*6$|Qa?O5V|6wE! ztA-L&5CMtietWbIu+auX<}bL(utrEPr5JE}kA+JPXt?6o(bJc#(AVH`#;6OKFt|ai zryspRs76R#lCe2@fRJu$`!Y13Bn-!M9};iKVRg5Z2`~V(1$lx4+;1)IWC$O=)UzW& z1MJj)uS#~p53=RoIMoj$-UNFMhyWRa(Le(XFs57I zHV(}a(IdC5g29vv|6MCqpnAi_pJp2Z$Y=K`M>}Am9%u;qFkKEb1Q7$WlDl*>a6}Ow z;bzzb>KAr3Kg{UsY$gM-yhvR&0lh%(Yfyl;*iozx7Du2Fh?34{ z@Xaf-n0jl#3_}^d=x>5+&9N!f4Ktf{o62F@NIxDn2Olm39%QjIDWs{<7g=x?soybX zFr!hjv?fMz+F+(XF43^H-dZrtHX{{m%5$!GHXPx1+O13VeWPxY}6@tQ9TA6kkre70K~$XKG?heyUXh%7$J>m zbz%X$i2vQ|TaUhgneyNe^im|M(Sox?nEu!8LvL<`1Pf{EC%5rCVhB6j(ncIQl?^C= ztA4y5FejrM4O&Yhq)4dI2A6~bAeN+lycCVmemoRpJX13K$_Ko`CA~_c|2UE=gAkls z>&lQ!fhj^9!^XI36VUm=l;O$&v{kiV+eNcQges!4rn)$AbgMBZu$D zi_(??!-FKPv8Doelef{qMn&NI@niu|@&E_$LK($^fqQTo6<~(!+>i-$yz@T-9~u3orWZm+>r7|q*LPW2BTM*^o&J& zdk*lHYne5?6VckPkS|GtS|;X@8V4itRN39-d!>Pc~h6*ZoCNjeA-e zV##X%H3wS;Ut9QdS7>ryt`^K02l;#BRoKL<_Y73kXScW&j~l#_6JQYFRyzic@O5L z?OE4s2l6@5`h5NbH|nXGse$p%-rY5oYF_uV`SDN#@!O)bq<)(os@2`VZUzQtzd!ei zISiKYuvrDXJTj!5=NtrW7fAN0S%FT-gzc0Jw1bXJLawJErO94tM}~pCmN;BAM)R*R z=uJkzp`t8M0V?%N#9ISS*!mrOmTSps7*agpSOc+U#G6q~)Wz|&qxyXWjKA1QRRv~~ zW?d(AM>yMQWUJ9S@IkqTN6hHwTOHIp$BD_Tv z9;1)E*~S^PA%g%k4yi%6AT#~)DzHB)lVUxE{mS~|$Z*dT`r272V%Td2A!i8*{zE(| z?fS?ttuzu|S+sjWnlkY{IAXA3AHI=Zq;A@httVn4F!`RyNageIm&d%WhSR2yYPbcg zVF)-G5LFZj7Zx`EeTcrg#A!^==vMsvFpi?a(lA#1e5QmV>oT62B0H;%f^r<~=s)kd zP2Y!eIiY_SH?Lkq9+TdO)6-c(o`0r;uI!NXW=0Fd?T`X;;z@;5(3@_eMEu{=O&kMh zMtX#V74j1o12g?2eEkE01?E151!c2up4>>oj8x3sOwgOnvqRkRQj}~wBf;TrNcu@f zKV!h2i2X@CT*@maIeWX5l_=SJcMBcp-c=lfK7kScmJP{YB^8SPE287ThyyxT=AUuK zVf&$xkary$9Jtm|MuiUw5yhk_jK-AYgJ^Yf=DgUMf}m(9D>{@F_~(i!&^6rmz;Co+ z(fOC`Lh%JdF-)*&HzO?n7{^s^?|Tb3-Y$;vWO|=TP~`q~E+#LON z>2edzZ(sCQWpDDB`;GMUfMFUT{J~*Oiz)oUD#d-N4NFS=T&2r1#S_(;A489gCWiQM z8*waW|0n1*XF)*N#_u-*f!2VWU-8T0B^GB7xOor$%kTNuNCnB3zhemD#W=yn3;&d} zU!`i_{e%?T)`dlHJnyA_LabHv3E=*6?liz9*!~IJ)s|xVi&UY9_8VeXz ziBU=GppH%x%#r(NJ~3zD%T>yfcN+)W$9Ek?UC2>&YRft3_L&{0+6AdrU%uhtnXv9o z37Ub%&*_UsXa9aCHh6xPt1jLmtb7}WDIE5Qj5PV@j=b*M@6bF)D1D#b!2bdV6??|0 z?y?RX4_A&5FMo4EEjCdfy+gb$-N)zLFis*C9E%5L5r9j; z(01dJTapWPhEr~d)~*K6SaJHWgRr`Vxf68v+fl`Yn&i{n@KHQe7KaV`1aU4=v61w^ zch++CV&!OEI;;|}@4l^^H7 z4zk==6QqAZX8S|nN(3gspuk{52*wSat_=tix9uO)qmFW-Gl?sgdNvk7P0F}Aj)3=OdsWiWhoqj*ki z)sBQ~D78QWvfF9y{MY9WNe~F_Wsj0{eB-DE&inai5b#ZMW>rw(Xcoxc=QsUWn#Uqz zb#Rb*N=G1xfSK@f8ged-yGe-Oja7sCDM6ahkUt}wP7IG$OOO2(SiyA9iH(eq zQG2jk@fMI=!ek++tXxq*$)iegWMw%4aK1+dBdKbBjSJ3Q|is5o6rlj8c&bp^+3w?W{oMjTx?0IhyPaL=B|3-|;0n6>-^_?5cQ$ zm9P(7(=WptoJ8prwQ=4U4XeweWB+lD!xLLlQB=6IK{WYlw=Mu{t|6I|#quVj1PPl@<@Cm2uiZr&gOayw!$RMeac95n2pnO7oK`}AbauxD>J`1eLyS&lUF4^6V;@=8VHL!r-phHsu-Ntaf+_JMJ zYc=!8!fVUb3sZ%=TNCI;FYFH#t~5QR)Usi;ES&-b=rk8hh% z8qn#S)q<-vXz-?D*KX9(Df`kDx?>2(EOUY4jGb$&mYJ|?+00_WY0V|8?_1Zdu^yAd zi)eKiKc>ipN64W%lYnD6-i9YJJAxl70#%;$P*AEnPzIql(VpkJ*6N98H#p9e5N8MB zbFC0XC|~khv_tNMhVqD0xy(Cf6Kg4mu1z(UKQ#OH0| zo3F>WZLbM;q!;d51w
    1$ezQ@(H`C5-|BM3ZynG;GwVtHmue%tP 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�R>1 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πpPTsV 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

    QEKx&CGz1jE}JC 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ℑ2n0((PuP3N1xU8w-n~=|}Q3U-c_(MFG$L}QO(2MKh z@&psl#dy~M-E+8yM8T>;${!tF{X3)+rDxgr1_6t_26;!OiKXV_HwFNa9G{}Rg8>aA zE)@LmyWWZWTbdsSfo>cni7?V?vE%Y1^4He{cFe2T>l=wV%cjLI>lTT(5Il9?zr9KF zgmk_?IEX8bOX%N;pNdb8@$w4-Rv&ev)t8{PB4Z!#))d%4W{YZ2wzo z&TlrW8x+$k$V*Iy3u=c$tmbJg7+K|^~Z1YC+{#o zx$@!LIAFTjtX1cD5s}pV%(1{G;P>zR2?1aVSfE+%krO>iKEwQ)`wp1=D@N-nI8X31 z*tH7arYCH(V+0_2HJ0*-4fsqa#P2-?WQRV!d-E9q^(OMFSZ|+}ObUE%2^i}Fc@6KZ zL}6i`paJCn8Oy{q2GAcx^JMqndF*D^y`BJu5Zt8Yx<-)Bo=tN{y*KJ4^eLt?In6d#z-r$ zo`n{PbbGN4Pscq5ywfi)7U5gBYyg3Y-TqPmE%!2nmX~8P2dH=I&z*MOfo|1P^SY zQP@-rlDObslBr3g`r>azpXI~6nM2dfQ`t!Mv&0?cQk_VC`gh@`B9MH~U#lE)WZ8w} zTXxYTf^S0!P5YcGLt-cN%AGn+in9Y&_5E6QggC!#!OTNoS8qh0JT*-?H|9Fd%!6^< zy$<8^2Dk@0QS&gvMQA66TzkaV-$D+py<`Rc_UCUJkNW+#SLF>$g}l zX3|6)0VJulYxz2;z$J4Vg6Rwt9Sw{k-}Ql*%Q&wyi;92_XYSv{D~fraB9Ix|Y@E=< zQNH`bY+IPF1pdmzMUBv7lk1ICL43qh@Zbs{-xC@1w;Y$Hl}7w#7D+o4Igyuo!u}nb z@3Yxx;B_Q14vDsYVs+Mt)&fIg@verT&HT^+0vKHOr&jhN)?H|0CrT1INzgT? zct|R-T#W1Ww1Pd$LE-e~WP~YMyS1Kk!xP=Xq#rZjPRlX)#0Z(kuJv!!;aCY*wEj_GICJR?imH`jW-bhMoMVI@mLTx+uUl1Vl(`V~ej#&F)$ zGULw6N%9vW{45!ds0#^K;g_6Grwcx~^6JTFOpZK1Tn9#x33zb?zdp=0ogOPp3rive ziyCuf_sfszxUMpPp>`wZ{pDKE_PnV>k)*32%#Xe*F5Dq)P7FubH}j}*WO1a!_%^@j zEXYyhiZt8A6d_^{4kO%7(M)0|ns$4&WzSkXFU?cE#en|pLcnlzf_{lorIJUotjM`x zbDg{tnV@KIp}f_xU0#i#r?h;KLWXoH*Z3p?Jmq1O}F4>S`Y`SRovwMP4x3QLuSV%w5w|AVQm2aPu=KJRF zXW%Wl5!oi6@H0IQaW1&>h~}53!N!X@hsUoK_g#qj$bBzISBAI)taxgK5O-Byf?NpIfEzd z4r>17yU0Enqtj;iRf&ib`=Pu`H5qAMv@CqH_L5OfZ@$|N&n-EP=3+!$d;L(tsLw9x z2Q`~6Y?6c@3wiMqA99ODUkGSrxMdBvWkX<9N=rZw+epM|w6ATw+`NgQyF6Uhx-x@A z@KauybAx2U&#)-;M`%sk0PTm*(Pkns^z4~tT1b;@i2Tash+=4^OuvSr_XxC@ic36_ zv*fLfg~j&P%|jEA^h}IV4aNH<3puz{*Y(M`s(BgV(ZfFqI8u8IH zy;z~3TXAFDF4TT<*wG7$f>NJ+#eNax$guGE+f~QMWA%4KUFs|`=hw1bM z!4k=Z-Pm;(Le2XNM_N9D-X$y0LzPN!d(J-5Alo|E2&bfW1F{W|x4{MaLtU3VqU8AVUVzO&EwU zJ+c=NNOPKAVzOpTtK~n~3QNwYM`k=_r!p`~EEgyLjLX~wb?DRI_j>@xCXriY+H6?{ zbrAE=o|Jxhn?*`dhw&7Veo44ZosM|tm&lJKn$mSi8X;7Q)^J%&G+4K>OD9-C>Mvd5 zu>?xg5zhGQ{oNwU+mR9JgPjV7f{vGhshf9Ao(L}}znNgvNuH|Eep7rGl&Hv|&Bt@( z?t|GKeuoC|q*nrI=g)^p{^3b4@Z!iqeLQXo{mkHFU;vQD;b}3>4#4HIWc^rB7=!~Busrn9o36^!Vg@kP6CH!FKDe`iW#01Hz9XXCbD+zziv!`y9ppAI@@c6GrvyyrTIeft&cPmt_51Wwwm%bTUu;pq?_HvD$_Z zTv={)RQhz{b~eXaZQ+~N?rTNG(G#Vzug(8pmi3G4m>UL>TU27Thr28X#gXxu8V27W zZHCrdJ|7J{^+~Ah7cfK zWWHvWu}O&+)Ue4P<}0fkYUPxZ;h7C{)PKC`^L}NBpkNBU=mFJG%$`Wuy3D90ZCF+(}rU^=S5aq~c7$@n2!{KQg}i71f$& z_7_S{trpa9h1_UcG?e^exI-h1A?w7xA<30N~ys#4@WEiyt>%Fv9 z&pZ1ei|)pppEp?Eq>VXN=ng4cfh?@W&@T?>wF40YIcB^NPoBxmtgjStJJfAwJ6V~4 zwy(R2OJ2Bf^MQm@=89Xy{ae-EGLSaxvG69RxkjSmO2p!|UY+)S3S z(O>EHL}bG1ePhz$*{*?ZG;Ra8)FW1o*2CI7K&qVmH8_96l4fsA&k-q`q*iTin^sf$ zMA~7#z=F-|$6K;$mTNmrD-Sxs}2bG1-`o$3&S+_Vryck<+ z4jKYyIK^$Imd!E3sul|B$B_yixJw#yk1cbGRny-%;T&SbTlDJ7oJ>66X01!=dB+ro zb*0&pJrp-$JlNo8MHgQBzmSXtq`MLn`ijFq)ccmqTK_^t8kT28Rj6*_wD$Wf5;p1Y z^G&&##ZR=T+6Qs4mYz`>RsJ^8&plh$3zax90>3Jn0K_o31nRYzYsbQrQtW+anp-}) zI6fYeKpW=#R5c-7BXjZvyot8P?A>r;!#cb>I%Ad10XjrocJj$r|MsT*;~(dfWFd^mgk$6>ZbGGW9IN~>MM?n+uKDp5bG4@ujty`11& z;!xVe!j;!m%;I}d$EcJZFt$f5e`jMf5!%+sShI+np+7_S33L)Z^PZEMiGL7*ptyAl z{J8k|6XBDeSb*~xZ)O29oQ-7oeya!z#qIIErC=zuv^f~*bEe{%K;M9H?RnVRhcQ~E zBp=vL?EJdJ2C4Q`y#<#cp3Hd{n<6W*pv@mTX{@7yxV~j4F%i4O;C|s&Y_B3q)dPIz z=d9N^w%MP7M|+;ac9dl8UGNorHzJZ4VCo9b@A(i7T4|1Y;={a_MoXIt1xcLT>?a>}!+T?F1V1F&(LIHxfr~Ztez0P$Qx$hw^X@mlAPi&@(tG6(j77=lAHNXkucO zi{L&9{p^F>V*9*Ji*KD|{-(#=@joIiQV5T=a>}N;lNb?qkVAJe9^b;&tNWkms{QtB zVT^zx1eO9!*v^<-Hg9SEt?%coJ8A7^j?lh}HOoxhB{XXp&qDed4I=-;<<8kAWpz4F zk&k{8YQwA=g_eVGPcNPBb+80**{ESzMsPzz5mrla#tzxX5{=Q{d}z;^>R;b8&OTQ- zH-pIB>zM->VcoCx?bD9zVI%~~k=d!pf$VDanD#EDxDq=%836vojgWat8 zqmm!}GR0OlC>|Id)6BNx2t? z6d1pAdhlNqAKYigg+31opr${V{V=m?_Ri_aKbDqmo0=IPTEIVmGs~`LG>_*9^Ha*R zz^u~H>!DbW-2nR6bSN|a5X(v#M97#p5JFo;=m@HlHUgMswrj+(mIGys!D^A<>uRB6m(0j2W zTqJ}v)u3>#Oi9l5+L1dR^zrR7G^1Tqqgj}ruy#acwEH4y4LmEry&oD92FWO{?gvlP2h|J3Y0PCLFA!xa1y?nm7G zJBOJi}aC*+V$9BEcl4xaXJP7=@ zwKh9pK3abYcRnU*HEnq7PuOCSLt}|(64q>L;@?yLNs04n}a3BP_|~` z(#!HoQ)`S^TN>AvdV8HG!T7P|P#jl7ej|U#!KHRR)lfy zPN3K{B7e$Fy44n`)ot^|BHsw3ZG4x%ZSfE-!8YYSeN^^1E} z=A$4OMu)Vry{slS4RR}kF=xzG@$j9Jyg)4M?1IRX?Zu{a5oK62#6;#s3Q{X*ai6DI z&qFo)F5lDNT+RDIA+@GzA#|>}dQA?D5ZmD$wr`8en#H1;f~Jh>Vr*m@9W3hx^ppr) zPSN(>6Ga;B$AfZ7|4GNSE}bt!FQN-j92)HgpK*EOP~Fyyb4-b_C=n#P!@d|)mK8KP z2(JV_?CJJgb~`*w&&Y+>x^7gcrCLm(aa%^i8+G*3eoFr4D%+{Jv?NQ!krm~xxar&| zLbn-MQQm=Y=C{yFZ_~h$YA% zy@4&zwrS{4QgNQ-G$IhI%6Xc5wc>W#Jzw87_QnnR*-c7tkMuFjlkI(1r?)3e%gZ;% zQQrqpYEjA_IPD=nWaS*LZRCR6mO&GY*cVTs)z0e3XPY8XfVcYup{P-&qA21PU}iDSoXiL5~c*DM4}{(>86QzJI+4%2e|q zEMFi(R<%TdVK@T|Qzf8fcqqZ_c<>`W{Hjb>zQ77k*BlMrXu?O6TYGkL$dpB>2lLvl zTen0b_~?%7xKx&VkH(UY{rD^ipWV20xVMQB7rE`|tyFAiHmIsqNsQA)`)c3yZocI{ zHenbd+`*lh=VN*z1WYV~RVmQ|>rFt{yF+GESKpPBpX8hC%soVXF)IB;nB3|UlC`-R zwr4)hXH6IK!Xz&;)hOSv8IMgc(12f5^a1dKt~E7;B*dTcwrN<0+Rt*#KW zpuv423T_vEY`d3ivDu5IRch^`_}P+o*=7YD9geqmzNT2HwW?BEZ5IWN4BG_VvGn{! z{-}35U+p~+MpA!l+cI8W%^@#XbMfY&MwC3}a;2t|j_6hBZjcCq}Hs|NV zONs#2N9Et2A=5FUmL?s)zL4k=2!@kMsHS`B7;l<L^8`!nis5IZ-A?vS-gW3I6tUkmo@?#GP0(A2fH^v-FHDO*S7hqQ<7 zl!z-sSbg7U!^(68c(KIA?gJI=aJ+$?y!BFt#oSyP^EGn|T${z^p}z`_7ND{*EiliP zCFMOnvC}H)DMY#K+Jun#nOL19Z9`dlD5#r>y{B!TNRBKU8eeYuY}+e9B6TwHv0U1; z->kls)8k|=sJKst^z;O0l_jCr;>=5p(#m}r~hNBA^WMTmEzQY_Nmf7ei zR-lXr$vV7<*4ncdaV&fzmX&xJb~*q=^r6MNvNX?5k`#`+t$!bJBvU+nwJxbM{ES;L zC}-NB?8&qRgFBP8`hp%(pSh)V6#&F0GyXDJzRES`4d_B;%}Rtj^?yD5sJak9n1JR3 z!O_~w;ES$8oxnvPb<*fRDVFJpW8g)?;=^C(;r(a;UkBwq@jXO*_iWnrMCk@nf!1Y+Qz%Gfr!>$|K-Eh zL^T|OuPR|J3!hSt(^PY@+MAlpT;@s4E5|`oX^2b+i<4*`&j5JXK=FU@u#hp1$K1)R z<+p@0PU(*hNj{HPm%JRmdbXBVl9;aM?N%ux0tTlyi_|E6sa}JB=c0aUly*k-v3&dm z1GCrRfZ<8qF6MTEvlWxC4Pdu~HZ~U?EU<~!e<6JCl7HJIy0m2a-nu&-^ixXRzO!5) z$5gBD=~7(^mgrJgzo5Fn!qEONAC~AZAJ$@+h%fyj3uPaXhzw=CQw(H%srWA;mhT@z z>>&^S7HLiQ586&ho7#5z3psdVg#Qp?uh6pohY%a79~=0W5NpW$%*Q0~<^i3R|9Ft$ zE+;7QgqZs~sYaC=DFw+TPvT6FJx@zyM&sGfnub|1>pIR#paD&QeQE18H2avNRF<%U zV@X`4Go0=ZAXd%vA3&@Z3a{IRp;=$!DZ?u>Z&bITnS-+&_qbL=BUxO|kDX=B#^ju4 zg@(pAA6L#_qf@EzxZK(&b&ZT6IcH+0r|H8}Qnb&D#T$|RNW=g<+Oc})HP@j%C!jc8bgyqJl~$I zY7uR^fq?qW^nbHqi>nqLVdOp(W+g0XR`VjqJC)4Qs8+*J@oC9{i8XtZ`W8O5i~IOY zpx~B2m04G(mdp9LHRqx&Yp4VzH_N^|x}V1^(K3WM?i9Nb@=mcnwv2K=4ynZILNC}? z86bvkih zEpIW_sh{$|xY;phpXigU2~(~U`fk~NB>w2Mph=qTND8W&&HfauyVt5AG83eKKwA4nz{4(o5Myu{Ss3Ak6cy8+ zd-6jknD(R3J8X43G`xq5+izUMsKo@e84-$>B2}8#E zArepQwM;?@d0{#-Ug5_S!lJUIp6V56eE$3uH={JNI!0S86+1IR2}8ol5NU94k{L|WxOZ8Vm8+WTe?MOiTMyjA4lHGJ(U8tG7Q5m`47lPa&;+asl?b>eO6`B^%(KHK2b<2BsppC>a&^|WdiSLXUYOo+m#JUqdjwA>+u+hO1D~ZO| ze4k2JKTWI<53Oo<1p%B7WLdmNF)5zw-!^@`L$mYb$+Zfx( z_F&?=?=v>_D!8nvSPhjO0(Z(VWo9-iwhKuF94-9t`iYPH}|za-R10aLQ2mO0(^# zGO+ELZ$^tPLKn-zvVo;k7Ov?9mJ_pcrZXb%In+O(nBvRlMQc&nGZ*f~Ip-<;X7}$u zk=+|;6Q~+v<_&%ss^mU%UVzQ!F8T|IZKEk8U7ME?pIj(h4?VrLEhLMBXW2!)z{amC ztR!%>ejY?qX)c!(nY!(c>4;(3eZtd=PgrCzmNTBnUyZ9YgFeKAs3S8shF)g7SBwg` z{1*}{&cOyD%qkGsuOV(KWIg=Zl1Zt;RH)RAt2wLuKbTl0ywG*V9j0}4f}0jGEu6}; za@%d_v~>?lL?sV0D$$hnp9>>h0Slakp7;UnZq&_*NH*vs}K_>{Wv`5?q7(spVO1)+ltg87GfYM4mVO@2q5LP9tMX&L75mwGDb^bhrv=`Z!v1$A0k0#`%3btx>J zC^jvwl=SQOW(FlukciG#J;s4>j$o1^x%5S;;zEJp;}~-#nsc%t;k8$Hp8w9N)p_7lTVwZ@z zf|(AWYzp{y=R&bmf^lU7N=nK25^J<#KYtPt>(UgSVCN8DIv3B16^MOEzRSuX@zby` zSeTAivF&4+^&inky7Xjyz8KD~3q;iobcWlV|GXg{FCno3^@)co zkI$I=J@ct^O$JPvjFYRQMqklK&8#@N0Pb@yXxMPWTMwKtA5$w}d+hS{y}FGpC+<6w0}FBZNoR7u6rC^Uf^A6?AX+6x z^F5!#Wp|`tmdF_U{9bn{>lJ>E%HW<5bR(y&TUQNMAlOgqXe%9_&?SeDtZB@2dYH&@ zf`L6a@ABS_m74Pk%xo8b(^k^ilaMEE3kW?*@2hdYC? zuz)Nj2f|obXvSZPONHhSW(MbQIfLxb2=So(%B7<6&}S$g!@L%nSb7n^uk}Srj$ajQ zEx(m+zbo}qWU?m{RLD-?m;KQrYN?7KhT;V;SxG;t5@f9?J%!C}329Is(9CIH{5x~? zO;(zaLaL&NB`7K*nMX1~d57b?CrKH_V1J85OghG`D>bO)KRrlw3GXB;f-q@0^x(85 zEBX|Z?IuEl5$DO?dgCTOxn8_H-8jk<>P#Pmw?u3H;NLXk>Z6< zNX`LV^Vd_*EVM51WdAg=SwKNRK3x6+3_0|zLG^ZH#t2bJP<}8|J|>Zp=AT3%#Wf#oL?RZ$T9!MP^2&S!8tLx zeJtwQq@ALq=K4=Dd+lOR;>7~m{`s3Z)!ma!sv;|P{pR;j;$Lx|HjUYdiT{?U^NlAJFUWOSxX8-9 ze5LHZ_^rH+t$bX%;UOT?JpbPU_4GexbWSVtSCx4F#*ta?kW@Z4ova7%fS|oI01T0N z!DH5Q;Y$1?OABjuHvx|$>k*eDt0^y~L`r;;Dno;YdZK)#cp&aFP^nSs`_B>H;0(5` z-KfrXc6@+MD#%x)0hFVg!)IBChQSzge+&i$+@c{!)i0_(vsiK(DjzE%!O6wxzFCAS6pd^!hGFY(gFJ7=dl4xK4GC9G0Z0Q@FDMvx;!cLm`_@@+i zsC*?@ssfFq0rm&uqT~WAm)n;d5+E*3o($*mL)sl-nw@uE=|foy0}LD3{0u`cG$oGj zX`7F?G&-4;m$QJv;8Oi7U-`%jS(B1&C|Z|~v>{0i8aZ!9JdF`U^{GJ9-Fts@xcDuI z>ZoQ+X32^bWl}Kl!Hf(%EbTV;jATzL($uGaYJxvW$GodgQ$)##(2}aCUx(X>d@@Q> zH@pLC;K^Y!hqQTS7&a^*Cbx6gW|TYo*!_^pdeS>!p0Vs8;AJ=m2GS6luc~PkFx?f#X~hL%Y#!ObtwIPZFA9 zUuZv>0(YHEX*V2_$Bc{F&C~U-n2PH-fFkm6!^LfoT%?2?5SAQ4Idds@LWfu;J1~w^ zIp<0{+6}#(kW{c4m-g3fh`ps&%nSdNF=begxef#y+uaFJm(O2SE~JHC81)Adz!CNE zV^UbeA6L4Z1u0sTQN@*unK&}TmP>N>%&6ZmL-5wD9YiA48l@S|QUL|BjW1sFsqV`u zRm)#PN_6h{xsLX(9h5KeVHrV(L4`}KbuI76HHZRa%jO3=e?~>+MS$gNZVGzL)RoskS*`b z85M0i$Tc6Rs&MW&6Kc)cMOPS}=d1YBzrM{5M|oBUNA-UqMJ%cjD0%)P?+3PBQeD&k zr-I_c{~ycru6#SCTC>t4+U)Le|uF16kx+O@l#9Fi76Jp!VoN+Gg57D=S_JPR!_lUH0!~MteIidwD zAc$un8gsx;k!q=SP%%t`+sqkL>~~}0hiQT!#b+uI6Hv0O5u*sm{2bb0)UKNrV!Nag z*+B>Boc<7ivj_fS96bbk=*q9*f@~LKuVY`RPHz6G^~7Ph?hSoefn38VoX%lLw)Nym zZ1}r6fnFf4^vszjCWwi1b7Ux5InZ{g=+IRGpO#<+98@DQd)946hvvg=0Z34C?r620 z2TpL3GlkRkG7bz%2i~iM;;{WavBk<-S3gvwn5>tm$f$Jfj;3Ar6t1!fH)ZpmPoNNg z#$@qSpwcf@=&!K2tkh*QIqcG?4BMrfstE>H!lx8^z;HjAJvkAnt^B_ttmPAFbud!< z!T#zn+DZJ1E`rdmtAIp6Fzj1u{}`?Mk7avue~OY58a5KL@BtY>RL2SJ|F{WQJ-v~u z00G^u8&|mYYl68J8XU-*SnG>hlJvi>x9B|4{v&2Nd{0|&-1BhSxg*zR{kC3AW*?18 z5(bE^Knq`W1;>|S2vE%d;>n`gVu0;ZV}Ol-)(RD%FVXg))35ViN3-PYm_Gz7J^dv6 z9@9EU4tU!Q^D+zst4s7gDu2yI`_L6MzM1CSalUsc)2{mfe;)Ox6Wv#;^#qtQ?TpSH zw!pkv1Ll>wbH~326)n-05gF(Fm)tIqq_v(Ec z!v?PBKS{*Eh^aKqyK56k{x==gr8ia3K(ccWG+c}VD}v*;iFY4ZfjDO$;DvuaL7@fa zkb;~q6jkigfg0&QNy7P6NWf37P6GtY>jXLc4TxxhbI0>l`)zOoy_n&H!4srWk!~eh>8eqgYr#D?H`46ox}_DGJ!%OmrFSLVz&-rs|2n=Uh5yZs<`i<&YzWjK6F)KaPFW5E>cWj`HBRVuOVRhGAdY;tDpJ5 z=>}%vFJPq=n>#a#OUc%_@-$}$)J^!|Xfb(H>)@~f3A~Q6 zMsQ#aqHEW+er%{~qaz1aRm3eX^koFof;dLgc95u8YZReT%Fkzd0-!58p0h4!Lb$aG z75JbEq*;fmaZJ#pybRH~BjRpv@|G3ta(42T{5#_XEYJd6WS*7GP=6JGewaRzl>QwB zOxUddhqSj2imTc7K!dw$aCg@L!QI{6g9mqa3m)9v9fAge2AALt!9BRYJ^9Y5cTb&L zuWr@*WB2M_@>{a^)Xc!F?lRzE2$m;udd!??2DHYdMR19|v3h$h$!`A<%-Tkf@H z&;ZW&191FJGw8pm*Py~lq{%g=0cKch_T9NE8mM;$g+SRZ8B*L+{eCWJc3GhHYdJA*`a{lQ6`L8Xml%y2Mm6%2*DDVZNX~zE|tw8fD zNa#*hB>OjN*qZ}%??&uHSNP@D4jD=4=CtvC;(lZfVVYJV9anXMg_l^g;F99S@;GqSo{4e5*Is5=Bs&~XcQhr1$ zMiohU;;sGvS>u0|ni%Nl1yy?IA9v@VZrA^EdkzP5cLD{u12wmTC-?A43dR#%-$9Zgms6nuJE9U<0> z;JZftsldYj`8m3SITHlEpzkFA0eS)T)dJOcfx;+q`a8jzf%{8iEd!91L9fsAcqgeJ zZ4c|;f%aKAn0@cJJs`uZtn-)fC&h5w@WQJuC+bx&bVrYF%{q?|F{J}9S8T=jh}r8d zF6_zph^y-^;KVs9wCA>UA#CP&*hjtEq=7prNbj13fo)23;hbY6lS}x>&54_K?M`X3 zGUu*dhF2M~H0Q24tzX~+A5izbM73NJVb}E>Xrf6eg18p&2Td>|jmB@n8gXUGq@26Z z7^vc5C-fXBqJL5Zu`S>anD9m#jonBzrb&~*I(KnukCCGJw5{V}BS=B&*R*0s4^RX# zF6gEX07g5j6<8`>7>uzGVUeU&s$8Ll}1onMq!vl=GS%<%AU-AyY0i+8y zEWh0-T-WVTS$=yVg#jl==D6U8Aj}vI>&qO)3c%u+z-UuKi=Oor`TgO71puK%nZ6`H z_rPp%n!)V#+~6U$Z6rMc`{{iGjIEdMkA5(hO1J^>aRRy_R+igM3>L#TI`5sH65Kwu zP!j&*<$Y1Q&0Nr5=k{ddZk4V8yBe`gG4ZyFIrmwh7=rz8Fep;KJWnkRJv+86zhA|z zH7)(6crXA-(5g<#uX}Z#=m+%!9c*a$3zt+a$pE+eDXOjtrGe0|U(c`|wp)<`MfIrq zW_S%D(kRY|?Pq6##bc477Y5icf-q-z>EYL7hQpmOp&aO?dso`mm1Jzyj=hvvpd5}L zYuzQJUUo1G#G4{{#qGsbc;C!R?IA`!iFK59Y&O+)!75lR4xB{=aW{JD;Dr1Vk`lA% zi(8U@$jH9kXiR#7;d=ph+KQiW|n8_B~6osc-WMvVDll#ab>_5C7(UwAdQxjuxM79R~y)YC4jq9qO1NA zETeAb!mWZRfzisNkrK(FrD$vXD@W&2Vi>pX%!P$4-ny-HU*`WmVS1Q5ot6h*M@e2H zUpNi=`n;o}a=w$6%|P!86}UP-l3{7nW$C6J{*Cq*;ocQWbjHB%#)s&PcL_2xt4wme zqZ`Fx7zI=>10M%6KL}^ge_yhMUvHVtsey)aNFDz9W`Ts+NnnFZ<70HHEohUmCsDJ? zLPhK0Y^?|b;ov>cv(kKctUveSaznj&dPKhI8%DzX<34)kn;@9OLP`D_U3wipmE5bo zFe)|BK6+xzYJ73-W~ZaJ6k?yoa_G*7R>UWV*pe~Dc^6d!{bIjRvI57_XKk5dJY=?^ zFCC9mcSW}`F6aMetwvt3Ity!@#n|b*TR8shN56}WMxACuW^dO@vz5=Cj9ZBDP|NPD+vu`M1>N+S z+wn_Uc}0Kwirv_8$q2>T>3C5`W7wy3^~?mfdEhV97N<-nveRsth?a&GUk|H|3=tR` zXR&XKt=m>6g#1~H=Mxd8RzFQ7+P2!v zhSRM$;=0MztUbXt;Jb}fyAfn`AValF?gUYZ??C1VhdVR>_c-RkZ z8Qz|=S$0n~y(MPj{GpI1!Pv()qBi{gQH#ls0j#)2SLNu|QbwPSjq^5sFGzS*WIQtyC7o{DLr0kx)wG z`ovyb^TbC%nUM*6buK@CO$c^o=*|1(Dl4P!qoI|qqIoJ1X##EPqjXUC>r`NuLp%*$ zV(lzZxs{Lo2pPK2{>}>J(mmwN^*17DaftFW?y1R(*@rM7R{(8ot6w13%wl1DcnIOm zQbBdW*MDMEgiz>;{Lmlxd*+pGU5%FFtoBQ#a4Z45Qg*?>@63P?_1FQUhC}!Pdjgcj z;Yp$t!9f4oi+3+KAM~f6ZLEthCy%@<<-79`8qRa2QRC)J`lXd9%};u-yVU)hm3{$V zM+Kk7+E}PZ?2@zNh+DpU=3ZQ0P$QzTWa!EgkRD1?#2Mv}qt&j;hM5c?SfpKItw~Ye zF7amNlE{9KnQ1N~YOdVEXn<24{KS7`hAjH^>ugk$q<%VOJjb<>#3rh|zb#U_9ei-F zV^Wrmi2V#~)G==eGewfIgmYJ2O2YyH&{Z>Z1E~l`K>_>Sbhl(=#R@n)SoeZY|CFgM zI*%%_K+<-qIes<9-8(V+%L?pl=zd5|tLBXU9?2ptj%!;rjsTeTAOz+y%gcbzs;Y)g z_!Esr=90^96zab8LpfaC#X$MZ#>IGu!-_4$aFHL?YOa83y$SwVi~f1DQkXI>Y~$Pb zR5Z)4*L!TE6||xQf1_E)r}SRkKt{@8{h2y3II%Yxh{vi)ogQ&o-;>J~dn$&5lESN>#f2jn-jTh5YnXs>n?NcPD z6LAOg;Z)wB$zWq%BznBt{sKX7I7)Ir6Q3Y7NhuAOmAfC~Z#FRy<2#p8egS0B+Cx-R z$N!mR`WudE7OhbNF7C)rCx9uMc!ov?Y?l%7LsMWAU#@hAIm!X0IUoHy09kIC5p1A{ zzyu0#2S_N5uxa<7-X%8i8781>5;>&i0b$J5Vlz;uYGlUL2 zB?EB+L3@UgE#F=;%bwQst)4d(?whKCIlCRhd;(Wi3W3pk3xCWG5(pThADcOW5+wY= z)SBaw{E=NLBB#cCdLVfo^B4XuHvIV6!vXDu$9Ex8 zgLm;y`Rc-77Vwo(JUzaSA!>7rwaxVWVj{5Tm`*L;7ij1rOCnMo5}2hdF^po$%lQL~ z8V}%%@4Q_5u!srZ2y#ijONE1(LY(s@R~r0bcPFUYY&|`;m+4&ab)t*j!H(hA8KV8( z6*c#(bulfm0!eTb&5B)7(~%}vky_Q34E$i;`vpfc1fF1t!0+X` zVNOiXJMG=Z&d8&73X&R$clrs7QRVkQJacm$<(V_>WC8>Wq)$l2W zPzq6NUnyuf`XD4?hURgRP4@YTS1>@=MvB5Ub~cyCzOyGw8V&n_>@r&=vt)!O4=cMc{JpHHvCVvbKXU>gc6+n!$nzO z9EnyV7}a{KuhQ1{ys!FA%m=Ix8|g;AzW3bF_j$*Tvf&fN?0HF2tvxU=Jt4>mH}^4% zLc$$B5wbKrZ9Y1d(~aK?`{UG9tk0gFF4+->wmJuA6WyhD1{;q*Z}ZMXYGAxTHUD_% z!rxUE)MB%*E4i^R;G#b*9%^(~#m%FI@Y6qBL(Ees_#%|G4kyAv$zx7paCMQI$g}NC zgNKk{1&wEe@|pla`b;iqgF1&Iq=5SS^Viuqq;sj#&acia-K_+N{oz%>J1`nWlR(_> zIgjL$HO7ZdyJq4%SgjrgBZ2cZ(>62No_#wTA1Q@emfj{>fphc=&lSvEcewjbyQs+y zNS}4Cfqi{&0f)@(D<-hqR{2ZM)J=D3-HKImwV+%|JI3GG`RLDdR1yX`*6JvCQpmRWSDuX`&n&}>epWQ;le%=3s?o4R1v~_ypUBcCb;)$V1EEp{ zgC0653q0!T!7oKwa$Cj5*wI@10O^n0cVXHsf2G^$z1WmMHe>r;(Fni$dIw{fzW&YX z1p~A5F$I_+Ndr!EX3{)uMgh$zNn^1r;#4VzG6_gc~$#$nXv*3WLvjk`&J@ zO#ENtt_)0F`Qntxm6H3;xcJ+{71YhE7NC5sQcsa6y|qLXe@pcyrgJT!5dxsH=5j}= zMP!6Tuq!X4|J=8`+PV5_SBsI~{uD1uncF)4`|4|%iijNXQSMbSPz;Mdp0Wp2L8onm z@IdK*?lb1!yB#&l+%>5E@m!G;aDeMls57(=H(4`f2MWLugxVaQ?%pK#k1$f^jE?biK601#A-!WiXiW*r3e!>0btMeI(#gvuEpq0MLHiN8zD zBwh*b3-z?v?hYR>VT(Fg5`hDM*vhq|pVtJ51KHr_f94|ix7&z+RXv`CxF5?SWgoQh z{WGDmGMpg0EwG+yX}Z3e_RH!T#~I3Dt#5K<=xA-vjH-(PDSGd$2=_oVPcL?N7x6c5 zA-`V|Mv}DmIiXPsGoRV7F=)(Yb+Xb68esE8oRru}tXg1C`4zhK5RZYkr+*TdAE_zTrL0p8HS81KaX{ChnRqChiEo z?9l-n9pIu{e@OU+9|LT06)@c}3UTgZIKb!6O?$?f@@KwH?p~AaC*MY@=e~KVe{x;v z%Vm^%ckOnze`b^6dT+sY_W5Y%)y(3?2Rv&vbJNZ2^Gc8X%bco*GCn*I(q4AzU^_;Y z1EpyqU>54`hfZpdK{LR&vG9ZMdrtD5HW*-Hvz6^1lT2Ox4u}hg%@Ej`Od#O*U;f*A zX}?@OLQR=v_|*zpnmK>NV*V~9hi@+G{c%t2ft(&YM)0ek&iL=Yz-cBzi?HjI|h!+?9oCq11thP(!pbRcH*+jzCP&VkH5zu zYO)b=YcN6d0!NG9|0ola{?RFjYP*h{RHHi=qahcora_M_o`G)}EBogpRI&n8hzqT3 z-_R$W_rSMKe(dpWPtI!9<%c3|6KmFLKIu6|>!`bjFt>ywG*!Erh3y$wj3n)M7?Vkl zos%L}X{)J0Hu@t$e^gcUTIdK*X}-CI>$((fE2=EY$eHUqVuVhU*tJb7SSK|EVqH*i zl1^VJH207M*X}-_C=qGVdZNKwHYC7{EjGIb-Qu8^&C29ShBeQX7loXeyWUPYdNb< zbsroS`?tJeG-SKsAEtG^?A$p|hNI3oAMTUi^wuA&mjgK5+E zdGomcNv%c@OE#i37c3hL*hiphzp59eq#a2_HC}Aj9<#b`7S1cRdQ(%HLc%@rXj`00 zt#i1lyp5RrjVdtrHc0R*rVTAIzM74u@%F-s3dKjiL-x-DR03WE`WS<2U~xBrf%Kf0 z`hm<`mlx7!{4q$Gkn@Pp_e|_FdU+aaL{>>X=s$X@xh})seek9JSaJnzpBniF8Q^dh zA{qT6e7W~x#r8*iKqGc}2kE2FAF3&?1-Or>&>q9y5=9Jo>vwUGCR<29e3eZeX-+K0 zd{5*rpAU|q*Xb`-%DUcHs2HYt)*ify1z0GGQRmf;wrTnV`Uy%$K{XKS5l)_xXfy{S z6@<$48kYp{RP$qn)@X(7K2Yzd)0a!4411`-LKo!IX_R|1&wa+!%Z3~5>Y+w>2QkDO z==k&9IVZU*xV6r%)Bt|J3)E8es`tRqw^EhY5Y*o($B+^VeKV@W@3Fc2`p;7s_iRza zF|U8dJ)gOwpQR?Mg>q?Q>qOGc(5ev7jiOqVBkn)tP<~dlL&H^t$T%W3&%idcxPG72 z&^)O{{+gdh%Yl2YQGEi@*u497>w&rN3WdI*D2HBJ(^sfbO z)t*8Nrf<>@`{0*M%1nsP)pCsvy(f~kZjI>(J^s|+!0@eqK&c0RR&4rlo}?Ei;kwFJ zDgGPPp5B>%83lP)gz$Sx8xc~y*a}rxo+&q3+xSfW+oqSC4{Z27Y+}!i77K3e8foBh zy%8*zx(N7!X|K|&I#g%Hu}ig)iFRNzi#{{WkQmZTfZ>TwuiDrlX&_94(FAO0=L44X zF*F^0(s4r5di=J#a%Zp;<_43Wt*ED`5AfA^O}ZUJW!cy~W|g*OKX7`w9B)#=F=7{0 zb+9~|NjI4`I6Izb(GYP7YaB5#iq)yKtk)^4T+yg4C(-=@m;CRAp!6{#Cc(S^QAc2K zSbtlCaR9eX(`=p#m;5ejw;2hT zEx#@;V^%48 zni4Djl+1k1$WaY5KI%?6fuGJ#I#>8mibXmIZ@Sy5qNEJ%w6etd^;g7g za}^|KfiHPyo`jFcl`{FZQER~OR9cF76gTJ9g0`%^{$BephVcb|sbE~sF=+jL6UA}c zhkaPK_~@cXmAL6AXr9;#O6?tRvBYSV%;y0$Jl-oBrzEfBwD!C;x@<-IMM-x zSjd9_qvx@6EM>eE0fJG1`ohYy1yTTxb$Abo$78@Y)3Z)ji0X(eVi_9QO?3af1?Dzg z(w+s`4Wa)`ju9880}44r!x^Yl51F?5hegKEQ%cY9RqDc=rosAiu4N9MQ@Wd*WbknC zj(>z5&hslAr!v`{kcWnZ9VTeRRA9Pz3hPOk;!(Vut?H8%sgVK7j~lnH`*^BAaJ@H! z?8x3L>@Y)Ipx!6!@Wn3BXDZVa@gK!c|*T4$Ptfc2f zS02~B!Tk_gCcM6VNZ8JAEOZgn5zB6<+}bmV7zS{3My+P>yVh<>Bh<>R9AsX0|m{R`D6yYL7^-_7Txf{)FFRu5s<3B!ivU zsjYY3K?vGcpa}X^SU455Qv>IKPG*(8$UP%^VEIwO;OkY(#UAC%1^p2Drqvscx9SyL za<3HJah{Y-^g+0<2kz)q<~#GdSTh{`KD2$-KWf~}MV?Vvc*Y-)rnuxjLv3>O^r%?W zy;Cof?U33dt2E0&2x#1<;Hxy-Jir$9o!C2H zY`bH2YvG6qbT(w-)1_``wBzGj$u+Uu&pbJKjm+jZZr(h(sdM%>bR)_dnCM+Q`S|A} zU$}tz{&4OILA5IWM7_qz$NBK=ounmCA5K0+0<-;}m#&*xTKyBMD0R+%2>437E%pzO zT(`39Cng#p7Cr5W_$JSd_fNFl4DO?{aR}=_Ps|zb7t6UB5KT-xh@W&e#8Ki*M&z(Lm{pGhfCg4yC zH{xnhfg%hgJvZGaAHNiiB)dhRZccpMo)tLwV&RyG?c1n1wi18IOclUzU^nVgEDwE#xjGoGsNM_N6Ql41d?YSk_4*iY;-O)FBZ_#r>+!!}Nj1c_H5 zjEw^>$UKJjZT3SMhiIBiqd2NT`II?qjQ<1kU??`a=%WYVJ|~l;oC6|VhW*;ws;*!L zv1S@q_9dEq_rkCYN*YWLF9UO?vV|#qWU( zs@&RNe#rwUfTS%5BfmDoNH3nX`n{@Em<*kKNJI^EluOJaoXlnu?XvZ;Fz?o(RYiba1gz=6E4ZLcSo%uG6f zx3p0=yUP^zo58sB*vqZ`)QGwjjF120$?s+pYQfCxoc$$QA4CNY9To7buMl{BmlGt^ zIprKSW}%=vIV3bjNJd^_N`?NO6#^q>ID#iLATG^2E4zcau5r`G4f}O`q5yAG;fvO4 zV77Vil6EiTC|V_VUE>}spUsAe<%{BpZIms%rL3x3i$z^yH4NVh@WM7_=Ex25FwNK*qx(rY4bYQh=@w-l*W_1`%@$=>| z!b!|yM)veu9Xk~pnu0VspDACXD(}~9NBYHdkAUny+>7bY{CuiEk~Zb+#wV@~PR4MD zCdRZ+#&m`zR$&&??>P9bHcTyhk=(GMJ%FP{1}72`-M(VS?&bdhZtefn`W&N zc;L`Y1Y-41w8GTWhShKpRmBfwBKw*7)^c+?bQMZ!!Jo>@L>!ra(3guqY$1$=xTMW+UJbO?+;ZxO|@D$Fd~3*gnAr2dY!VW7DMX#VF}1EiDjsklre_FY#> z0X!%8Nj0W=8QP{Th!qeI$bZ2`*!^9Mxd2e$UyA4}lqlV8K&%yPMlAIMd_AWqy6bZ# zb*J3W?RW6ffYJ>})yx~@qv30QnMmW0WHgR2P$=Lxh=78a<=-Iw-+;Qf6FZ900+l9W-eQLAN!`eO6pYmkFyQ}@wM?>L$VVW7T-t9JC3K*{gTI;!&A#oGiicW zKR}O3h6C>0>)D5<;d?His<6WsjB5))S$--VZqlH!H1%#<%6ceDxp8ZTNnR5g{hd5 z$b%0hDHoZ2D4uOQ#|xyx3<9*{%0+DGDyHf^+B);V@Z|K9C|F3r4Q;1ltL$l0?V+WO zV3Y(iqK@#D{RI+xz)A)WmPMyZKo)jrRML5RDiQM}aF8LIh@0j!)yxg?c%~ESTnvi@)ejz})R(vCfi%`gn`wp8 zY_c?#7x{=J)=~6)-(-9dJm>Zvei(yV{&<1Is4OK$cZ}Bd!d<oG&3z~|vmvkXFXs-UykYuQaz;{+1sOX8P4MO1gQp{vC;!)S@q-t34WOLvLmck4^ z5faM6*BHVASjv~G^@S#)P#u_1ulxLW6WQ5ynfq@azkgKR8(Y0vcb;5L=kYG>yz|jL ztu{+&W)n55_K^iA9;(DoK<&rP-`Q6hn(g-Rd!wgyM>deSgl^G1}4CCsB@YtPI$!w|$P8 zsu3+fEwtz4iYaZr)N0fLc}gx@F7^9VJ7k)qCx~TE3D25?{>{_)GnsM(t31g?USnb| zHX;xx4%7)&cr7+K1}rWH)VA4+j11uI7H(HCB?Smb4hIGzE`8^+K*5ELIJ`HDrhjoT z6_Q8@ffzWv43K~9|9Yvm>=px>caF6mrnmwVTa(OVx)rek)E#2C14m1KP^wC?DMR>r zYsNH%uY$rqf;Wmtr7+Q*>2sno0oo|iX(?I|pO*5B*DnT8buDgr3i!x2!edq{^w9pQ zJ$LQDbnAl=nX=TFP8D@J$O`%R=C2yWaXCnAD>gR9l0ZXYfiYo0uN<+3@e*5lJ#Rn` zl!^EbHfMQ-|A)8aJ0LqZCwC%g$1Di+0N~DL+irERV1t4cn0Bd}B zC?9ZH(c_34Pt)%a>MZ$3geE~^X5{Rc?ZtrJFygXZ0B5)@C7#SKT?*gCgJ=E70}O4O z2SR)qb%#IOKNy*(O3Tqnl#WyY-Soxb2MM$@AYeI1G5Dmn#t&G;U?(7)^WJBqT8YMd zDIj1Lq`T_`*n0GCnSW8)4{hLjsG}Dvx`#f@wJcbdZGhr<69IQpYICGUEv3{_FJ&wlHU<>de4U@wE z5g@Dp;WvR}646A8sI^^3a?6l@_3#>o!xz~+5q-zk?(-dE;M^UZ{ly0&<2|kt!uNHL zlPqMyA(xX^SZaJ+`Uj(`{TOX9})HsxeoJXjB2a6ZO)DM$Tt?9 z*U-R>N(#wo-$EYI5h*p&;=>4m4I-lv55bn2;#MQFpnMT{ls|O1#yx5fD=y6eopRpB;tmJbb zq)=a5Sxpf}{fD>ue$lhNtV!+;D59j_fJ1_b{Y>&d56I#I8z;|BGe^oq9F_okY(AGO zftHVba>Xs(8#^iX7rGTFe0xNAs8RZQ zH$ADcB(6^M9g#b8uIgv+ zp{L@_OH%c<;vg-dV`A{*-1jZ1H?!xw9jl~QE!>dNes81HNcX2cPtTndaV_zBtqKCA zC#mD!V2{*D?mmu+{9>41YVF?vKPqR@)-_}=7M;IEwg&Z$Yrd!bS^&umpUsnpI03f1 z&uu{EB=n#w_)}EocfcQ<=-QKbh!I1&?gmk08h^`&6hb8F7yWyBJ`A3`=Y>C#ZXoTB zKivP&OX`2<70zGkeF1F60m!|{-raH~K#Xi49Q(=vsCT_yh9LWwy7fsh0M@_C(2@)$ z+5g@AQ|2((E^*k+u{@xLGW7Tkq{eOh0u7>tbplg>`WtQ)3LAhXhjjb}^Z|S3@C9B22@#%~|=sSGHbkjsRQCL0y5$$No5^ZG0m^VPE+TXT+v2kRlK1= zv+Cr^7V6wR&=A(jK9Hx4cysF1Ml;zH6z`~4ET#*4*%Yy6Fhchg-iWlnI8V;Gb{fR) zN3duq{?H5H`*t;Ct{eLWL-m0FXM_q#&JMESxsaCVO+q!?1$f+UEju%0Yq<)T$fHL9B&2` zW?=OlZy+4!e2_l3bp{$(Qp4hZ=e5;>rI3ymAa?_+oeQmG7iH1`mI@erNrk9dh1s+u zTWH=PfXDCRmp@l))7QWOyP;@os{CkoEiz!okdZtE&J++B|VdIYB-k_ zx!!cW+W!{0{m2gLF8s6xa!OcA#4$%NI>-vLH4U9XeL1%#5d~USj&S zz+7R10{u$#>VkbZov|<^J`50Up?A*dT2!VY=UM$FZP&7~a9z6n)J7J^s}iMFMgnB5 zXqa$m3q0I*?^27Jg-m+-JBu_ZFmy|xhZHZe{TW^j_M|HPdxe%HnT&1A}Ifpq^TGBg&lsVx8+>RJb^%RoqyjROM1tF@g9 zV%B}%BZ)QNUD=2Pi9gXZ>fGX?DMRa5g)V_u0%~ zNMb)2vR-{`{XVU~gB#3HrC0k>z3-m~R6b+-Gh=0q=L$mYU*M?pwmnCxekSs-$IO}}=7hqz zq*m`8cn($j4CgO~r8ihxM55cb-(_#;r9T^C3!x?R6~S66zhyhZ%8&DBi&c}bIG;)DAx6koke^gY=px( zc{jFFU-DcCoA{ zMORL5e#6hy(p(aA9fhR2w7~GlaHW^?d2e0NZgD}ePPsHhpBd30XN2y+`BtXp*&xaZO7B#Odqc%FSyGSP1O0sFl}CnCh)8;T zQ@T^u;jBb$CuAg}-+ShBHOnolwf)QmwvKUdU+33KEQ{>l%^$1lF34(|f5DGV-4<;< z=ose`7|>6_hxazX?8k%rnEB@zmhTr-=Ky716?Z`U?fY2!rvGVD+=eJ?0$OofKXI)o zFOe|S945)5F&i?7Bk%3eQsnd-$0XMWS9pXhmFtxNnMVe`1Z=>8bB84Y_?@p60vq6frm8+SOU=6f+ph1kz8#xunbW8)J=hA0s9DwlnVg z(cttd$WH*o@UPFu5e|nUuzyEMb@|0JJ!L`EvrCC7q6Ju?^|KJ3zYfsj0g5rSBMW&x zv1QF@x!3teM!*BRXUS14n2#C^JXdKOZTEBWCUV<^&T@z^2-OJ)C{sJ3&smXX6yWfQ9obL~@MtRJ+?M_{VvV9wMrE=Su*dNc8(M zMEgrQkD3L2D$+x0#se}T!Mp(ma{+77)TIOdE~d`NWhFMt!m4?oZ*Qf}-?d%57g^jc zjqUDaXF4M%WG!O(bKh#)??eMd+iArcIhV+sY|_dSf8%B!BD))V!j@gzoFLrjZb9+NS zveZp;^qs*zjX!@7S-_!cHPQG3)yr#;Hl8`D3p`1Bh0CM!7EG$i#LZm$7kjFS)19Ar z90V+^&VP>&?OHtGb5dltee5bRV`t`_VhI`RyuS(KN^SE|CYLrhDEK}dvqsL;prVw^Z6f)HO!L@o$5exG)adaci*zOeuMQ~fELIDL!s-iXR!|1N=6@_n`k5G;obE;q>^Uu*; z!F|~?C(op>iS2pF4hy2h(E> z*U3MKEwsIs`_O=qw+8|=7FYped!alqdgZZ##sVzR*!QuKfj@YWN$YD4sVx|T?4*(b z)aVR*jAn1c_3D@#Fvgf77-@SAUeN(6aGmg9i!G5gApn(JS&+(LF(B0VOzW}M%9sX%0)OT*Fl``6|yRpKCSMbIH4(=nq?C#z3g z>V4;zYb+9kOohQ?pQvOkU+aWNZKm}2w)V%>it;B24((gA}yJ0v>>os`^X5b>SsNdzoc7Gc; zu|XP})^pc|z+PFY|8^&VeaC3-_{Psb^x?<$Li5R{p@3YL-ref0BPz~q{WmQbZ^OHD zcaP&-Lv6hgNn;V|Bx%&jB<-qk zTC3_K+h>jpXWEk{$FmGAzP%<-l-PH3+2D@;^w=nRliR)T8Qg45FNdQUh~6>=zN77K zqvuGOUYfy0m)e^s*GCM@>S}+yVueFa0{`)b{4dCnil4}i zIa6+C+6?sTv@sCAsQ!{Q;<7PmEo?G?u$}KG`k3oUrYeNtedrYy?PmmhC`|wlJ2SRp zYt+Vo%DmB0xz%_#6F8nhvshJF?o&{G#g@sLuvGQY7v7>$8^RZ29s${In?(P696WIg zz03frzW*0^l%=zx@fn6AyY0{V{<$26%gZQ8x_l}N{?y}Gx|xyfH|eDr!?yE#H1kR2 zDj0oBL1L_#>Uqm(1({n->Tyd|kq9onG**N3cIYMu9^FQbR5D!0=qk1KNE|rho9|`G z8nv(5(z8Pr?aGj4jJa%pbui)wGkVTD^Htda%9gO00qR?6!dPoe7@siYDUM+ENu#J2zNnv#|nQqjpzm`aKv|<(=ef z`n$}zCk(GnT4(OApz+7l$PL4Wy>w{*wQwswLR$^yM(sAjx+HBzmP4aPuk`VeBeGK7 z;H4@cm_J}d&@Wlq^Wa~s(#I@r;JN5!t{MS4DGLInf%v!A`-QM^_D~9FCogc`R+R1C91>}=GTD8uSVJ?T` z+snNS?O%ZX1`tKPvVb3&*8_LG znVaQvlx$l)ieId%ME~|ahxu>wO;riX@j%?Qtbw!%2796jlM`F)o%wp)H_T|bH&fPK z9BfsLeGxfk6IN4}==4$TvGqZdiCKm{A~V)=a_s1dIxRh4qW(lRY+wgtt@YpmJ9h0V ztr3&mHHzo4+v{Cl$-en_jrn&>^-)V|60JdSPIqgLj;|^N41>{F!F|mTwx~x zc7Fr@l_vEcqJi6M_LW(8XF90h{|!gWR#C8#-`D+GNZi63I_>nmQHy23QVv-3>7ivy zsl&NkK>GjSEyXP5keF}+l3M#@zr>2)0jGyHs5g8>u}3@(GkI&N=#+kNIxH)*FfIEC zkiMa>Nw?bu3Zv#Nr6{(OI~8iLd!IawydMV-KOlM$E#`Eq^WKU(z_pZ~k02@i-U)1B zmZ`-b<$h~_0w;yoGb)0PK$J~AP#dtuX&*Qg_!_gPG-|#1A+nC?f6juSWUvx#2l1@q}tN;W4tBjwx&cBApbaZ+!TPG zdjYY5tODm-G~NLfE9hQg3rfm=XREk@S;~Vxm6<9l9kI(p#PgK z`gqzYPl&>Q%4lBeB{;;W`)f@+|bGNBylP6&)qto ztR^U0kOZa}cw2vw{5w+r9b;xd*cw(KRqemyz%nAh5+EH3t-Lv}sc%-XLPK&*ZeFb{k*IKht!M3jI&|>h;LglOe%8-wDf|^}s2h`Ac6CAB8t8Jk~sFB6-V6(NPPv419 z&zDHJzRSm`w7KCx<*h%WhsejU0a6T{ibQgM4=D9rb%F%O$pD8FD3Z`Y{~)J1iHiwR z$OK5BT#6W?P{o=*8+)c;q*3ZU9PBd1D-i7d;>AxT-Clb52unwR(C$?VwT&Hy#qQ!O zfVEzNnRE6bB0G)$FsJl5Gi4Bd>x=}8lBJTp?~SP19on0%Pztg7M#D%E{0I4d_yr{2504jHjpdV5ey_#rJO++7T&~ zajGV&wiU}?n2cO42*0#{eT^I3@iEr0bW$E|Kk_TOdX9fWi)rp0JCd`|*w6Jy%#hnu zTjgUkC_9rZvH9a?#(Un5UtP>r$=>$KIc2aHq-JUO51gexcBKj$H&wRrC0sykq8d4!$DAu~RtAOwC*Wu3nx z+LyI|Vo&E2_L@ZGeE7xr78a|!5;KRt36aP0yAq!3L`_jaNV031%UW&*?rj!S2#Q?X zhU5Rk)LTcj@pbRp1b6o$Deex%T}p9xEAH+VTHGmK+?`O|ix(>tcbDQ62`+E=Jm241 z?;ly2naoU1_L*zn_nw)YVZ~Ut?g7i8ta2X7mYI-O)CpO6wGO#F@W!J4Vh$@~W0kkR zZ%X8;O3{9pAIta}K6IoeQvWaMeWyJnN?``Ev-iW|qOzk%f4;#b(t2r<`gw#?^!zw^ zvQARHKIQX(3u&)tVIFYyFNa8q$Wc-HZ{Tdv!=&a-0#mxusD8p>(>M5IT^kYVt=jZF z-;4yx*Y%P(Db97qCJe0Q)XRK$3}DYkQ0XFYY1}E0PWGf3!E3Eb#a7|5k>0aQK`JB& z3vh;HLwF8-fLC^#1M;)zbQk(FY=t#eu92(qk*mSK-&%1THm}SVr7%Wx;=e8SO5x)S zWCJ17j~-+`<2i^!pWGtptAqD0(hViCWEB=H_T=j+nqscyKE)jHW6D8qrHdeu zeK(WqZu?LZ+B$O>F769i=%$`EIJO(@f|WQ$*o%R??yV%EL3YOqDj=&D4;EF-pDZgK zHu@o1wx8VdMgJ+jx*_G? zisP}?Y}@r>Q9b55CPmzA{Jc(2(Y5uF!qbP)XCd`>p|2LeEsVfjyvxY>l4GVaGcAwc4ob)s4DVHtMH8SJu(0D-f<%u~%86K2h{_lUCs1)ZWo}otMUR zQWBm)uOa%mz#yTsY9Yk#+miwMi_vyS6$5>SNjTImN;;XqWE{)iN~@;*jIl6?Igv0< z9q|*2e=}}Lbj+Wo=chKdk>uYxCZZB!C2upXz;-DAtT?1Yh;{N{EfNp@3iAu_AZ=V) z4Za&n@e6poX1+ENgdIwIhh6}dzfDBJVERA>JM@E@4Pd7X+D05zLcs+T?dkbG7)F4# zNJD*~AEw`qeicpjKqF;PsRnUw`J)maS3CjAh$cX;!z$(0C>JJW@1WCu*{fCT$dKgA zK@yJc2hA^q8ay>#(R+#9rYw)?s}L4g{IbxCaa7`Sn$g_uc-10}K0kU`S%Y-p93q?} zik1C-{v3i;5)LPSjT>Wxt%Rlds&aSRb5vjHZrUfYq~#xQvKMH$c`z?g?2_-idibY5 zKFmhdQ3q(9MW7N(DUZk!s)h+s^QtqNKFv!uU(;yu<5tiLnKrJ`yu1HW7c8@ihe;fO z+aXrQF@=TZ&4UmXDxDl5M zW=r|P>6gpj@0tRuZCk7qXQo1sohY&{apCl-<55|;YeC6!a}JR)4{7jZ#fhAjv4G#R z6lp_235111s!#_kTiT32h=GEQjI|80_Ll+);^ec7GdmS*F^EWKQWx>JSDG(FtHGdsms=|fR4%!2B0NbL| zr^HC(JoF@MUGjE~k52g8QIW<{+(W#MyL&_Lg7QjQH8ZEqp8X1UIuEE#XHR(f6Me z(2jE=jeitbs34&50+p6dq!iwr#Ttvi)=y~mftzb|)c#Ie|Fz5^58a@wAQ$qR%VW7X z$GM64=(sp#zv4wgUAYtDw8L~OB?BJ%Wm!U1>0-3Q*of9v#XvMA;!G#!Z{=c+P?L(2K>;xogE#Qq$D^Gg?`m5Qqu*Y|#>nB@meK^@e7r?d@7rhb+f zP)=kmDXT6=r;g>Ovo-W5+ezO~9Zx5)IdT&v8$cTRzIbU#lfb5^z^JAsH!lMTx*ooL z&TtGdx;+xeGi^=Y=iKln3Buj5_)Kn_}`hk&pJMQJP z6>D6EsT%uEJ~DF&^F#KOy%(Mae`lKNEd!K}s#g=Y1!m-b-`s{tx|G-1CFqg=1@cc; zA9#AjNFN0$RqbHC;qfbcBzKrjlm2JDKy(`4DoNMNRd**v1YS_LV^_3bI-m9ML4DM} z1R1+u@y0|o5`FLcg77Oag#3&|X)b=^@$sqd1ucHCFWQ^1Rt>`p`45jiX+2v8tqdG! zCi8RDrxr0#Sd5^8CIF(mfwMUelH2}1BZ+^rfE`DgoL|91}=-=TZDTsGU<{(thZ^F@VX))3ZI(0wlonOF`{A<$$R!=YCA2kg*xzWj~}lgaAp78H=x zN1iZ(@rtLq84T;5yRAfzJ6g%Ef;T|Sc@+V$BKOvB;^A;DpO`77y!)Sam;}HD@$Ph*9-B76GLgDDMDqv>-Q4b~HZ)Or{1wO~+&G4t=^1k?wtV;muySRa$ z(u=oLXDCSMqETx|2a@LzVUPH|c$kL!TNBlWq-S@s0ue%<tel!B)r<|Wp{3WZ{_G85^ap(Em*jK$<={Y+A;?f z4>--6cBs^MiPHUU`E=}?Z}st7Fw4;{A^+|Z+rA4Zc2+7#6XT5$Tn>sEtXDir{Z;!4b#hGF* z?c#AufuVQ!K>JY|eC@o~bcqI-2=k-LQ`%sgWcZhiXTYRVeZbq0SeTwSy3*+JhQ_l< z=#fHX5-YhAe~}K7l3-_|DzkxpH*_YB8uuCo;KdvP)sU-B_^ql1ye;8|!iDi)G?(dV zt-&a7V9bGsbN_9R%>`JxW3oE7a{F28s#yEu24(-pg{&COO7A#|x7-^Ske6?FsD0gp zZ(Pi^sXbg1n6YbhQ8M|7Jc})Tq%w+aL(n>lj5ZeNvQ${>g|J3;(sTKpRR#Q1N^Bx>giH)<3P$a3U%}xJZ|W|Gf`R^FADO+ek)od* zmxJ)<-)Xx7{s@@ffB8lUYqS#2C>*f){O^ikhdk6->i-M$m2<0@AiljF!yit^`#>1l zjzP=OhiD2pi~?xtVV5{}k3fuVWG{JvKU6lFi$o@#6aAJSjBMJh4wY$S;@{O%Zc?xo zji?t;VnpYS0FgsR`ixLZbpdhq_{*I#O5ftbtA%yzQJ|?k-zB^?WZt1> zU(~XOFG6rb`5o1_KSMX{{)1xDYfMlD?*;PlbP-@aT7?@NT}MRKWQG*WxI-%%Ut48W zQ?-gkz_Gr>#OzssnxR}3O|Aym`Q3lH%2bA$1(j)}*jcb8bq9(+gE}>p=|B0Cq3Y=8 zI+vdcE~M*O#AmTgrCSq)QxjY9%3*ZR^l`325kkgH4wd-1QBV_AM&Q6$!@Jsc8EW2o zWos|6st4i3@~+EScBPa9&z)*sS1#^E8fOikXlDdL{fd{`(p6=r+qGW~&pC6=-^@P; zyven9&kUjppctt8JvvX!Zv~2a(ES;E1AhjAeqZI8*!46#Ee{)i;x`+SZC4bwR-*3kn&*+R9 znW%tHp`CQ?SJB+qm<}V?=W8Vc{z5RlDlhqryDo&&rJRr?qE=K>%Ij3+u&(@{mtqg1 z0dMey{w%1eHX`u< zBJ+N)|Cs1_rDZ122opV}I**DqUZF_4LkTr{D>b^H+MZCv+z8cn=(s;?m;6YvaO9dj z8ERX|#1SZ-_~AR|WPlwFCZU=)wTLNpP1V&;_&`Tvnw{%lQ^9b90~8XrS@1S#gD;PT z=>piWC1A@l9-u!Tj}+m-5ndN9QB2klT5BxUEn+|96t7?eIw{)pFx1i> zQ@&s8fLd4Bq3^GssKszMvrkLmqd=Umj=qV)B|OM17;jYAu9b*Jc!ZTe#o3f)Sr$+v zl#0db`3422Ju+_&_Lu@R1Hs9jKe&OL@s8B?VxS`OT&MuT#NEt*YBL9}Nm9NuiVIt| zwRVrqzwi?p75{eJ{M7hr+(uCZa$wXy0!|Dyz-3;T!WEMVVVWb5m0%CTB{)Fc|s~J zUBb6YV>gif)(|p+c6w=Qzu)JDg*p*| z@dr(@64aA5)-2AC=qw zxX!y4dskeTo`AnZp88g`I~z+=oGk??G={@=#loz?JbWBNpVzt8rG*rI`~Y}Jjz8e_ zuASYGY=^uR8#*r8@FKFHuI4OUn!*Jkf~oCT-x!$l2tQ~YlJJ`L&`|t1b2AWaybxEg zquYQ-{!bZ`9qO4bs6$8JOWV>%yn{B?uiC>0yMV(t=HDPmS1bl@V+Kr>kRGN$k&as! z{3)A zm6JW4Xr4}>X>6+M*bX{Q&tlFS9t+%XG%uEYLF$m8@&o8tHQEo!Og`nHg zmTF<&*phCgWx+&*AD@7I%5k%ik;c%n&^iAvhbxG z-inR$E?mG4xL}GD^;!>J7g@DKe;ZnB$i$th{|xh3DLB_<<}n>uXMy<3d;hDHmG0qh zG58`%*VFPAY}lc_h&_pRNf@1lSGi^H2zfOJXYb#Ap*fZ$OP1%~B53m2#?HPOYNMcj z#8fa&%f4a*BIAw&fdW+@Rn-z{82k`8t-igrJZ@)QVW*eb)Px$U0OEt;MwL}Bc ze8kBB&l9x0(eIf1o{YS8!OVf&w1p8qsIvbV*KvY!*4>@+UxINp1O71DRF%-r%#KX>_K`|r;AI;K)>{&YUmB7G(sN|N^~g5_ao*Hww{&!`_AnuPOu z9u!o=lp=NYVJmeN#o8hVl@Sn)Md+~#0#`@gZDDwe0ydd1J8M!ttO~@8;*#^ccT-_h zX-!7_DOtO)jmS?t==;q4CMflBZ+GR#sdN93O?`v6np#WERv8M1Bubk z_oAmN0Dr?>q33hhFaVgIuhBf2cx`0zY&vr#aV+()KyeO59eQ zl6FFa4(oM4_~6p16SLo}xDpb0HNE4qzIH$Dbd5mz0#vZOQ}WU_fAfGU)#NjU5yQliGaO70+pNznG&4=QZ{J_+YZKh4SGE(n-op>fq#dD^Y$_?Nu_OK>K`Q_CWETo0>9hZfnU* zh}&%_yL59YCo@T5Y zT^3fm>xwjLw^gBD`PYYemUCK}Nh?b|`l|tj;&j@dE~;Kf6Qs35k;W*=62RS_7N1M- zQ+4Gf_uqXiP^?a=kId3VhCT+?g%U?-$GTt~oKmmJ=hv%>W*JnHLf}>wf~Dvg0$qBU zrQ*ahy!Ig{M}&F)xPZr$;+;`YIyfNePXo4 zZ6zq*RL;eT24Vr<)|U8!?^WnT^9Y}GpQ;{C`%jUD-nETr3(M`1Q3%Z=M6o$#TIIq| z0JHNabkc2}zSXvTwTROz^4YS!B!yJeRT*oN6qw9fvdTiU^TM^HKC1b?b;L&6X;F;< zy42wt(eAQwyG9z2nn3++fiP>6SkG709Q;uW1;*Dj|D#nxB-OX=J8MoXJ=x`cdhh742?fAq!Ogw zi*ZL})6(xRkCUA_36DCB=b&)Otw6^R9Vgq_*7U{~7HRKqR$6qs-Y+Cv&nzA&GU(x6fjS9JPtlga43UZve?giW239ppsK9KYL zp7@ZtT0QL{v|-_PwLEhgkUYYAq-+iR)%k5CM;hCto-yIXVeN3uBIkM*@ zZe-CtvP-co7|_HkEdS5DdPH9X8Cxfv$@Vm#Sz-_>*&w_cg$-%MfhnOS3#+Nn2gu$RK!vyZl+Yd4ZheT(`YNVaa z*9(v&q^CYlkyZYmT59o^zNDdVg|Gx#7t6F9|lt%e`68Lu|e!jPNdK0@JO+Th=*i zh8w2y5c%pRUl$S|*zX*r0=gS~JEln?wYrpby6+_w=QyRkp>26hA>Ds9EAoF$JL#>95X}nrT>NQestDnb3JZrmu3Hr4~i8SjTsnBKeildr6&G|=ADvm=3D@yCUKuYx- zBJSb#zresbVL$^z4I&lO{I50ec>Ax;g(v}1yaKmh&7l26#CPO~!*|rh=rFs&d7^&) z{@N{D#1qYb_L2PP#r}vou+IsC_{a5#Ln&6xIbuA&DS#o}3Rp{P2eSBKS+3B97kp)a zg)>V43c@_7C}4x|F*v$^hwUMoG1*-&_;JMA2DrI_!CoPIJ9O2~`Fw1&BNsq^3vbtEub?Et2?GOV$ma3b(y_KhxXY3gp-K8y#UNHVKf+ zoG!$3Y+%M{ov(RIyblJb*@gaJR~hI|e-3NKEsw={JB07QsbriJ$^0Tv_*?hcLKt$x zVmWJ|J6i7T!dSGPRAP8!6l$zpUv^O#j_QC2^Ma}Psg)4qe0nocF)kspkG6-Khm@h;N{ zwsui{xfsFE@Y%(YzfC!Kq1Sj)pV@n*)f=vIGoq6{k|L5ALr>6b%ZvD4s;+D1T8t$B_HFR_#;W4AyY@So ztaruK|H?~U1Ebgh>GDSPNOs%#`l^1Z%vJtWcj0-H&^s9s+9&NTXB9W&$0LYG5T=e7WF4yI!!Fa zDk-;M499->&VZx5Y04{LH?u2ufvM3|^-F43hzzsE1*y}n7Fu{Nh-E23{U&k`%ZY?~ z#wxy^TSo1X3om8dL|~}a@*9F)*5~_p$?a-aGOf!yvN0xZRaKsi7_vKt_)2lj{^C&* zhF0!&)6X=4@2>bq1vVZmo?-OZ@%#~OpAkO)@lkz7>2zn#5SL%;Pj&lb7~+Fw^fz1W zG}AzSy>oWpk;B^k6YWQ=U$F{DeC0|G#;^lkM~FxC?bfXG=;+jCRaChjr1>aOk6hHt zn3P1?N)1_Y9GSnFbF-w`dg3oJQKkJC(X}wfeYz zr^tcFm_zPbsJQM^+RY7t>wobNs;>JSG%F*{Llp$X`g(U)OMv5=C2UcpPOOMc4qq(B z;kA?8%yW#LOXefWOUHh7G*N6ZN>j2a#RXGNELFHXZf~Lv;Ed`OW1AQ)kSD z1b;Emj=NKl0}e4rLr^#eh0c!z@uTf)VL#XK1n%#u zbA3awS!jZBEZXfHq9(T4QA=_cpU#ag$w3Zj*1QzPA8WuO`#fQyo}brwiYhG<-%#dP zuG)Mc8TJG70jxT}n(j)>XInkT4`HK2MGNDYR6kb>a)l*KniYU6-uOO+wAaRhB=rGe zE~%TAEIEe#R6LRFF5K9S$30S?O?m`~D`7Jg5Sb;cFJ1rTHmJH|kwR2Yh5-p(_-NF( z($yrjddBR@Skp!!TZe<@qD)ZYOvg4;R2xnxfb}UZz+iVi(obKVp&1dzN4heZal(+# z6s~ph^91Th$jIbp0sKgH&6BT{$F+kG>SN#h*MG=|w4&tl|5D!^8RSeivk|~HNx`}w zz?Dkbfgq)i(F>X*`%1|IKPM2u7E%A`4Dg|g_qA-oS>+V?8<~hz`tsMdR%GY1AY_MW z1g+8p~B4oB5W7-~fhLXYZRRmMN12{+O9?aC$fxeeh9Nh6}jd17tlcf24i zSKr6OOChF#23H(zrs*c;0Xf7U&1GLraj&!2?Y3VE_VWEnCHhXId!F3+3ZRd%#zD@z z941xMnMpCPrY5~>jUQo0Ip7%)5#(sCjI>8g_$DfvCLtf%D4;XUj-tD3sVdhw`wk?0 zPYY1-+ ziJe;mE#d^}kWCtSMm9pQ_ca286G`TQa-f;cfRfN@ZVYo z0lRi71}g>JgiYZeM*aviW;m`44-06fJFblO{P#A}D$q#wbC0w+-OT+UOpw7lQO(_k zs#dK(9z97gqO@)`YLBfzCerPlmsy)V1EuH>Gtsg8f)#Ah4<{3DEvn8erWpS9t0J>V z-C#4ZH2+YF2o;CLyuI9l`(5tHJ>vr9UGC7m^#YPz?$|xig0o%jFMD59u`Wp_-8TME z?{bIiNh;1t=;o77B&r-_YAOtBUEcorIEAk7$p0v}uX%}-2^#apO)phT$$0r3#0?+N zhEj+=(|ZYu=`-O8D|BXK5E~`=W*ZraUiZ&pk9PQBzV^W>mJF-|c~%N6;ExAaZ=}$> z^mM`2EuK%q(Pk=C1)qie~S&(aH=>2ASoy?iWS?Na^LeiZ=lqS`j>Cvm6NRVWX ztN2p#h2`;wpS$5mwNAiv6(_Ck$s;UZg4Dk}J=DC9}h+dIvbF*-6Y zokr3~lMmdS_Bx1th)3C$V-=|#x+VXltJh&6wa+~>cRT~L##&X>;&VM`VyK7K$Sv9% zYyAoILWRKWrtSY;@IY{mp3qvcq8NUF-p!Gh_ zZ>D!RvhzW_ANQ}_jLaCo_{qNgyQB;0QD3a7Cv2ZidJR4bg`3|2CeSZ}Jn5{yv1D|} zBNQl}!Y@nK*#xK~mMb0<+klytKTj+Fljayp)}G<4U+KFk46DGrI`qm|m{>smc>%5& zCRib=jQvbod;S7Um@?5%X*}A~z9Tu6G-*NCZ<~9`kd4qL|C#4rb@dAFRZY+mWo|(n zOZvk)r=Z`)tEY^`IT?7C`nPnd;Ms@lPM>ArjB1#trO*e-TJE2`byJ;e)CZj}YMR+x zo`QgnsU!<`he!C4vOcJ2ws4ccvx7M z_Z=IeTyT^BfZTxluUUJvN54w5N;Y(U1=TZBhG1e{F4b>{QY0y5R$CWmkU|V99y4f> z!qrGCkXn^@ONuG}W_k-|onxHW;^)FK<MjD$rA1|}vp7B$Oj`Qnw z&vy`S=F>?{XWACV9ce}c%EGRd9`$e}k(;#fvmHuZ?{Dl6V5powq~%He5Tg6e+kA|n z9o0EQ!p*{5gr-DgKAO`xxMl_Co)E{xUL6{HV-%)EwNqrxQe`nTR(@e^;l*x-P`%qd z_pEJPnXeU}<&{bqYZukM$ry3CTHPs1|&4wa~f7>09X;2su!k*L+Q0 zOesCweiy)7WvCXUMKTE9KV-kGk}3Ic?2s-2+ zxO8C*eB-#QbMAC$ulstw^c!OipGQOD3coS#%Z=)v-cVWQT|`#bow>3<31D-Cv3Aa# zO`|leXT*E260I78G|v}|AZvr_mcp)X3>cHsXgyMsukSWid?bV?qnv-ipG|T9rs;0` z`j^|~L+;;!tK2+-)9!H<-)MAE^FNYcVH9Vk7wE>|ZuWby_no`7{)gaPq04}ji3@F^ zgU$Oti*bM3s3&KIMqceWSB9@1nZUyD4JhUfrjB!yFD*y{Fr3K$?oYbQJbvoN$pzv&cSjL^FgUjt76+rU~Z@ot4oIB%!zLfCsZledFrZ|QLO zYM25nOyKbL1@!UM-OG#-Vz1mXSFanp1m#aUKhX3MUW`9dIN%H-S$jyLUV1 z+=-VWMr(Ol9MWG?tf&Sbja5ZLLi5Zz0LQ-(s`5}z*}81WC@GG7!DDB_l`>39R&z`s zkR-sK5ONbIWu1=W*77~3nB?FCRcS1f?GOD(_~Fb*l?SQ%^wPpp4&Z3CzZ2_-H@n10 z>sUXEq9`%!N7^5jit<$-x!O~FQ$s5>TcO})Ss zXV?>$a7!Z}y)5L9=fQhT>FnesarX?S z2+5U(0z_mKGAY=Km4xl@LioNO6q9l(%xX%&&W1f)S6O|99-5kAY^9VqX`0L9y=oJNAg+NZYjdkmJS`*rbf$2P+TRPw8+=`(Wp#sIG3kfh5#vrS?@MEW^q>r z`sTjAZ{15P#6-@-k%OEd)a{a905hXhBtpJ$q{_~?MqlBBBk>GEW$bC{0EJY#b@kAemkO%l5f^uKAT0W`&#yTtqCLb9v149b`=^Pz7LhmnvmwI?##^ z7oLjYF)O?ZJg<3XY(!~^Ay{&_C(>!tA85DF4UiVyC3G!shxv#6tX#+nQkb}QA1Bp` z;ik$nnkC%mF~s9m(816bTCxoD=k03t@f7`tA(e;3Qcs}tkqXZqdH0$>a8nThU#20t!>g0Hk=rUS2;Uz0_)uUfwTxW+-d!mhDSeATR2(O5+CtCrp zedi|wsTwb{MP0CTnW7sori=9VSB#1=SSARPq6)TEnTG5?Rx2La?0ew$72vvUyE#n> zci#PbxE}(cL|gaJBP}-E2v~6%FkxgE*}%QLG;T0irBjl$^KI_5yag~gNt*5lVsW4w= zQuMpt*MpcQ%DN9IYlX3Wjy)agf2>{*uzwnY)DfS2;7*(ITp7VV^v|{lfMDK`c^$M+ zGThrXB2vp9^NnU+HbI!F-@heE{xxe`aH580krUoTrT`Ki2c4gpN_61|Mjsoihd?^c zGoR1kUBU12(eHi-`ZY#~3!lMw2;*Db&EDw5ymb5oPfK?D4tZKdp3B{x@A9!ETx)%| z4DgNk&3ro8kIKD?vLKlikXD%b^O765bAHzfSaMWz7N;}OP(E%~L9|d|cZIFzMN<-| zyV5-bIiMWPfH5jTv5fyb#E0;81cBygLcnC-$ZXI_AkS+oi*|=GWFDZG_5xRVhn5&B z1FAu5hpR^wdb-s9f}JW}Z4QH@{T<}s907`J2Sh4k9+?&Psjz#%)?e1}dXSmUe9jjH zjzLeZr2#JfAgon_94?FWTdhNUdXtQiEa=C!P$^}etz#Nt@sY?A$x-245C=jBjl~gg z)(c_lNAoS%n&G%AH^Mm!3NVK?L$9ZhvVY`&SanaLK4`+(^};(_bCYB#BAw+9=59JR z`Df@z6L)H@f+N}}7e5f0Q29`gTU|T=N48Y}gd$R9yfMOBbwhr15cuzz#G;XkQ34;k3*`sDgjgS&-{lFmJ27rm)?Bk=t;#I zYwDo+eJHUz2U>lNcmIA$3|ljv5|q9wu;_Fi)gwL~yV>^q zN`D7u#n}z826G@PstUuc3(w~^k!$}$Y2q>UD!{n&qdWjc{Rpqc@EH*U#5fGXe#6}+ z{wIh{(Mum_9Sb;@*&7ST_7xlgC4^kZNu^aYhH`GQC*0QrUc%mK_qkVJyGVNE6y1^%e65i3u1{lj z=y$bO`s0MaW>>fr0DF19oDlJV8m9O!DYI}D$6%4|bih)xma;gXc^Y1#$kv^kxA+i< zzLUuDQZL%;)nNVo&evEdprL~6AjOv-j5Q+!T)>XQAbMbjUlYo(MJX$JqLy5s-(w=` za7M8Tl7(Vl2^?2*9UNCC;|R)dc)`7N{o>Jsdj{rk_+jVfX8>>vd4<3Y$%4dI;+{n& z(h(?X|35x`J>vvn2g)$**wwbOw1ogmt9U{09wzOaD38OAKn{~yfOlGWk=49EpomsK z9e>vm0=AQ;pbS6M^b%0SKSbI8kI*hrJR)bz$g$5b1OvUNK_rQeNP9h`Lck)Z2hd>i zJ5M~7H&28x)`?YL!0Q>T6|xJ$caxt#>SNVC=)(utv*TFcST*?gr5s}}6(VNK=lp5x znOPlDKRj@{HA~t`7HJ#D6QOEmy?r=l>YJr{MS>qsw!!P)1Wh(EnmPU-4Tr~`V`ReF=(BTlQ>MtinLYuo`)M*UmojM7Aak6^aKH~%R_^9`8Fvhjunnfob@c{e-)+x zbYhP@A*4XJ$cJ(B9wC)!&_Lv)hzIbTKwO)@gAb>25ihdg{#>YLY-y}Sn5cUXe|K_$ ztygcz0iCoj4W)O$aUlwubql3Vs`ES=lO$d!#kT_VULBw+`ih#P-I0tw94~ePZ!zh} z0mvLjD21zED_1$sD~IJO#hC?=%!D3-Vp&f>iu-PEu=U(F#-FKmh0h;^+AxO&CuhG` zqJLECGnV&2viNHczc)rB$%F7C2OzC$3tPXnU^}Y{j3%2kkPb_5hBm1|<-zfQs^=^r z1PUoMSSb!$> zd4ekR$AwH=CX*+sJ@duNzwZJpEpHGf5&(qElj(u}>#TmHbmHp2q%a^b-f;e=GqkW= zeGY`y(MABhtikNqyuw4Q+0f-lf+ysG?XM{Kw|TKj`cRI08q#5 zIF7-e@-S>oB0n)9P0S-pkQ`*AEk6riC@7)<;>gM4bB_^V3BFeo?L2= z@X+<71O3VHh57O#@c^i9)L0`muN>hA1Cl^vnW7)2x^mYNfAyBW7P_@NBwg#R2kG0yyE$ZZbGc zzigBIgF`yi6QWogmay$Pk$mS;6%DAO>oBxASO%T@yf;m%SyWcf;YWOeMF#IA2eAx+ zRPryGr6RLqIX7QJQtn#cE6n5f5xeXKBh*apA(R7jyMA?LHv(evY*}i=Pf7BiB1!_e z9%O=bKrGn!bTH`zx4tY>qz(Jy0yc$f^Sc#f4QXIZ`gx0UbKkspC#qsE~|m(WX`u0crvutdgV zqD&ZJ`0mdE$l*r0rs5PNEVGDY<}I$R$p_phCD<0h7JI9$mBhVnV@M$;zyKBE*Z7?OEb%)_3F4FUtE zAke=QU2)SDJ1-gvCpe%Cw*G5=z)k4?;Iw7#0_dHlb^>-+5Yd+RQHC+wWb)cT0KGfc zpR9fgrX3C)(&DlizYC{4bi~t^(~^H6D_Q$|U(sbEU#k&1l@o7v`ab_x)O4du*BgC! z;?R58@Ogb0pZg6?h>|*b;5Ivl!eUSoNRiJQwth|%`!zbHO(cH6*GxxTyEdHFRY%<4 z`4-+Hy6XQq+;pM}(0}Ur*V^De^;BAVztHf$gRLVsu-mBC+S&2L|KKDQ8uyb`?Sxd{ z8~&uV_M0IOcuoHwoXq}Irq8`>kME%B8RS3foK%w`gPS=}YaJt@8>aFwUgs_1PnN1e zBDp*9HVIdZhpAUziftt#q|R)*#vFIdV>++QPT!UL{5!5ynzX#hYsj*6zM+(HnVJ`= z8m=IQ#zSVYDfhYj13poINQTcFpX6TvCCWcwA}yuYD80beYjWJNThC*Sn?k0J(%c^KLGjOJZ@T> z(Q&a*WFR>VdIwXPZw4VH1=3ql3ipzTXy`s^iQzNDX4`Y+P4b_^4Q?AF=8(8RZ=Is? zpVwFEL;abEILg!=ohHt%b$07uW~ECzvR?B0|T5) zKXf?YYWw06V&mz<02rr3#Rov9Ht%t4r={c6X&A7@X|E}wk^87mB@l4n5hM@D0VOT) zuo5Ww>`LGBVJ}}Ma@s7>_9!p!PptNH&$HXyZ^zGbD;C^)=|TSa99pESI)Si0WQryX z+}=v5iGUMHdheK57?PgmJ0Dy?Km!GW3t{z7BrhvOmprrWU#R*hBz?c!(~BhD>%*{b zFisSu!l|t#aKYUT2u>+9!c2WW|NE@YH@*% z5*aWobExseP4rtK&4^o5Qrout)36|Bs(vlKMasWcKhsQ_@6mqt@o~6ZerfcklG@+` zZ^i;f3Mt1jAsuZJuurfgqdaUHT+ zJ$|$knhJq~K1#}}kY0o;8nAb{Eg80b96pQX2?3^ITIY%M6tuM}4$uEX)JO4g&nNxw zcQxv1$6bMpbx%_hGmUEkqssIGS|UxNg=28JmPw=~(?n8dsy9@YL;Ho zA7^RMGAd8gFxh=J=Z$yTGEVPcNV;V-+`<1F#;@zgpGCnxAFSL|m$eDjb3#84&rJU1 zPONijif56(j9E?`^m1V=W05N7iL5n7^|_H(ltT(|ywo3Glb1>KIK#gs31rz&Ay%o$#lv@XmQGhn%3H?hwm%1dEM^B3k?8N(Nbd0IZbpKBsAl&JG zLqd+;?u<rdjHkS%zM z*vaYbMe-$pa}y5hB=I3bV9L?19F*fQ{H;Pa;z>`>R0W5*sq9y7>}7p%#OsG&ze0Zi z*K0GtOQ7X#nRK9!V^iGOJlPbcCZh)G)+l1hR}T}%t>*hAxJ7;f4p94Kqi$w0l&W9; z!6!d)h)1Ltk(81VZ6YTCBv+l2M?E%I++o>-QU(@)R9`I(7p$mbeq$I%`LgBJ5LRYQ z&`79$lJH<^mh~?D%3U-)`5KtoJT*Dx1RkGSu&P~~CcG$b^Y0Xk&RqWl5VI~~vJ;d2 zJ#Z-uz5FyOPHDLeqi!?9Tzp8z2NPb0eN5;$*HT9-qmC+T3S=IXTWZ za*$(m(Bh1`nS#9hF;#W}6=Ia;RJtTPF01NbYg&WDop{KfddnWOjN07IEQo2WeuY)u zA!XsOWGjuW8obUjSHKX^<~S%K*jAxxBX1LO)}j95$7Jy7guR#&1e<{xJGnO-cK4)d zl9fHqfBBj2OAHcXwR`~#F5i0|2$}O3k9H5rkCZ$yMg4le{W_A817>h8?ESW~lN@KT zR4!coC5xPJR+dwOeHpb`kcymg!a1JLP+??Qm%k$?Lh8_q$-Z{sNPAD5nAB8Bv7hS?2yt{Uo+cyzMAE4jUmWIg`9f8JcLhYPO-S zCU)^FIa%xGJWW@+3jp+bi3QDjtDw+`A6+PBGQ_Me^)J^@67*3)*r1-6{Ec-f^o!p} z5*SKSf^La9J)%?#5&GD znJSnZzR3eENv~SicMD)9m9rX|Gf9&hx~}`m4jPU{=GM!s1k`@>FoAL8Xp0y?>2XwR zt!WxT+QQ%>mgX^x)FV3|Z5snjRZ#QS_l31sd3*=q_c)MZ>*)~=X+!^?FdE2lfM2)W zt|7kUlO{g`L(lXFlU@F&{;@XAcLLPLjId%KXsf11(1o#+OLVN|M-n2pc)rWYR_erR zVRzc#VJFqB?UJ3qNTv%FT07};T`Hv9o(qqZOvnbR@5=Z-jij&#r1{BzP84|Os%DOg zjiA$;UUFHykGqq6?6U#Rv*)2*r_|S!gd=iC2g}N?QGaeL z?Cp75XOAFxQGPYQV84C4rGB=5{NigR!L4o1Lbx+dcRQwV;O$0`_F>5VF*w`JiIG6F zjc$?Mgm0Fq^!qHI5NK4?9PZBlkeG}qATq%uoqkdNcekA74JL+6-XqJvUNKl-6~x=V znIjt{Fq1cBZ!3&raD|!GwGGL7g)0@6N9)CuN4pl&3K_9AbY8?3l9d1hg)8)j(9MaH zdzg>n)~X`*SCB`{P9mpchzqAORM4-GL!Qi1e9HKe8?Ayuuhm>byGqEwg@=Ev{VV4@ z?}E+otC*prQ}=x-QTZfRur4u$MgBppJdApZ@I;?W0Xa4yB$joLe%}D(AA;3Yj4nKjUv7%r1Y=PQPDv^pAcR4Y2S*5*820t);XxWkXurs6lgi8Me~Lc z)bjuB3U97iso?+HBZtJv(D#pPXku9E2zR;}ww+rzn>lrnJjBJ)%JaONGYT87#aswm zq}(HJJ9AiD2#Z@o!OxW7n{oddxFMsVrTQkdf#_ugZGwiCv{zV{&C2iK%TFWR)%&BH zTW4l&!X+ucfgePk{L0MwU%hW>wEgeNBWmO2$gc4OpvR%VCx3R0K$;y0Ba(e5H;4_7yz%Gbqv4{Ndsw!^!DFJ>= z6mEE6l-eLAL^1JTtdlN5mMhtz4UZvfI&ZxY~?g~6U64f=p^@M=#2p~uC0K(`sVauKQn zF|$J$U;ycS0mc9%Htm`ImizcZx*9dmrI3%Ma~ylFHzxJDaa9lE)Nw?Cxj_jtd;xOb z)D&+TS6H}ckK(l^De^8kNngc}dXK`VD=8A=hO3n~IAU*mH(VulvXZ}Gd{F7P03*D8 zk~2Cz@-5A(ggo;<;uPoJ&$&Vho1w&b#7&4;YFtT}q{yZEBz<$zZ_Z+ZiLDZb-gjN~wIK+10 zBc}O{h*U@gAg^@*aXAW44M5jX1K|A8fDjE;5(nTgra;vA)Y1S#RpaZ2kI=M*isC&L zaX}(%!*x`>(Q1Ic0wB4p$07o-B!?Orr2LH7(|(f^1-Qid$p|E42Lm!cbm4oh7^wln zg%K!u(hX2x+Y}7Y51rottT&7oojcnB5#j6sn>Ikpd6=v%@-87%l9MN5&kNmYamoUe zF_OGUB8~^NpNzd@Q!0S5_w>gg*4Pphm{+8<9#x9=6;2&s`V?7Fm3LHynhQmC%6kxl zSRM;F&7!=ICJ;4^u|YOQ=n2~q2O5Q5DgDQL5Hr?o*2T)8sJnhfARb+U(>-?Fg)b{L z;364gorHBIVwV=D0H9G#L+=4O;wxgCm4PUFhZm6Cv#EU?EU1$^uLk%nrFUWvU9$_% z0-T{|`06dF0!WZ|2I6IwLxCM*us|O}^uU(P_A%5n{=nu|8X6oe6d_)yKpz;gwvb? zpsW9sVDR;@fCfNFKYu*^MmKgv$q3xK_|ft!&s#Vc0~A<{w41K}i9Eo5H};wqrfjFW zE@T=6YiluJwP*Q%JWkqRsp%CR`VWs4y=07yAfI|+)gfv`yR(smekap=X&!9&kiej0Q3wECdj(l)(3>YU~Nx87sIEuKw0H0N9%`|NZ_S=K-2I$)Jv_ zfaCy{tQ3gP{5G_){!k)1;6Ka-NWx$Nh6$(ve8tIt^>}*zFoIbO(DmnuhDarR&z}zo z^@UgHtJv7$b7TX+c?|l4O+!E}CQwPD6PgSA}kJ?0) zrs5;ZZ@~K3+zdt(@KFJ&34-VWuB5)qZ1<=801wq${@CA0fi3*sY>k-6?)(=CdayuW zze89f?&@J|k(WRj9})!=0`dPNZ>+RB#)u%shffWxh@0#}oq!*_8V9HW>Sz&8mB~({ zSem*jqoKgyj=>VFxG}4}Lg>#vUT%;@euY?mib@4oCu8G&A)y0Iiwtsr$PbeNSfhy$ ztl(q}K$|-`6nKOA3&7!G4r&XJ{+iIvn9yylf0d&R@EX$k>Y1=5{RN;b2Pqy`r3MeQ zj-&lAX+>+5l%)Yb5d~8KX!t4sOM6WSM|Nd+z=p9YJb){Y8Zf>81y~Ya4BrFxB2Kq%i_rI`8w zv6U@(2tdg@O8RtOPf4=my6CL$X9Vd{KSbJHarqDSp1y{kl_OK#XD$JX07N-dAa~X- zCLl?mJfJ8CYZ;9U^OaQr@NLZOB}DYwqp>{TdT+k*rFV}m#%LoE;xg7J>KZ2weABg@ zXD0~BD}+pkXY+CKeR~pf#U!bjJ5`DV2(>@5(+S zMGK|xsdJr2oPA&eF)vLd2RejXW`Y2;;W(0YiHuZdfROCGqdF zFL(TLy@pko=au-~;nw=yVWRjEcavd&^*6suO>LoGgJ?S^GVzdgW?|8}uxA*;(&^y0 zD4O4k7W06~zG04dRGQfh##oC;^YjdYGq$dyYQ-V;jM(n~xj_cx62 z%j6+gZ+i4bN*F&gO6#A+8f|=3+)q04k1fPXl^px zJgS_abBpJw*VMxyo!Y$kQIkrUH${$V3Xk3QF}(^7mOp^mXBcB{?6-wLh8=%!AdExv z5zJD&VEXAKOi5q+#bb8qkCflGshY^R6ebzdsFeSPlpo~}H?#8{L?c|WzQJVSl+T=+ zFg5O%wn(ymx3J$4cYA(QK)ha8neTnG36kTp=&XEuM@;9|R2)Kux$MZTiO#q_^k#6R z>NYyUf}#{xS5dPJK}FfH!>VqE+kR?3Z>-ygeHZa z&SJJ249$(I(n-6JbyCdeC)S#Mx}oTe2^nSQNkzC7++2C957g@G_}_n+za2?0xDq_q zYo2(|Eet)gMVCx&j3k}5(kWh~(`3wYXG!xB4e}E@nY`6d6_pV<4Hl;*E=IK+rlcjZ z;5jwA|4v+tZuw<3F-jn#I9Mqs!VFycl>Bz}Po@ zQ@a_+-7ghDtXWR|a1&ci+J5QM3EDq|h_l(VN;@C6Z}CzuWIv7!WGJKDBP7W%NFcGn zt}`_k#yAQNwk<$Qx~{<^b9($4arFYRHQRA9w_ng}bBeNBc@~5Gnz8fu9Nbecp!VqT z5P92~>HpE+eQ|T~ntGIBU)LmH{g`16i%eyH_!phpW*N!D^!OglleUmOJo)<^-3(u2 zalCdTZ4vRH&L@0iqo(8z9UuamZ8U~aAMb1^)~ObUj8k6SjVNnRs{&nB(4w5DEyAyI zX`c#fdl?H!Yn+n<;k-$tYK8GgyPP@A{5$c@sZvO>CG_*mOAcI*iPi#9n4Mo7xCz{^ zi4E(vFjCDJNoSk+?X)I;Xbre?f#q!4cW%$h-l`*)Y6zs-zcbxcL#|!6_UR9ix)z?#*xMN{=?L^OV3A7rx9S&nYWSW<}yGBo+gN4`5@qE&osIyb4wggOt zmPE)(#{xyr#0u%xq6=1EK5|(VmsLqPSgwIWI^sd{X{8Drs*ENMauWkHihL<5U;&PV zfAfmiDJo46jJ2HV8PpRDA?YwKTW8cMHEA84g1aPh`YAP?x&5*c`Q*gyHNkHCNR*}I zOgA4<2A)2j^|G>2_!8j*5a~#of}u!8DBuEN;OOxBaKs?V(a7Qe0dmXcsygO>#p0lJ zcF-Z=;35pMq0q6muX~_Xa~yr?%NZdImq27=&L`#P*&Hr#-8ud$8f{%wW#{ij#a2a! ziZOURb=~o+2iHG+u$-FEavcALWh7a_k5!wpH_N&^{>Ya`7R{754|5?LoTrXj7=kVD z$5Z|#IZP)YEUh8NK`Nw68s=JO`8TBHmo2G{K4zGcc@};k_}nk@D_`l=A}Q3~B3k`+ z&K=UvxvE3z$wX!qY~{8#&$-+Z1_IA0ef?h<0jUxDa@W}y6aIobt$RIbfY%C{tG!Yj zx3mw91$L-kG6E>d{3&u~?*e!SAJnppCt)|Zy@~Pq?7#N*u zU*Mmlxr{eqLgY|8xxTBE?H#oLC()s*To4sdNK)Mk4ZZnJ@TTK`aAJb>s17xi67WWd zDT?ZC8-HG5m0LDNaDHB)@2^wf3oC#IujVAJTARgn6e`(6LS>Uk7Udn_0QK2Mu$0O; ztE5C3?v&->mUk~lF&`ZTCM)nIxG1Et>wB)cEu!0NC~UB*p7b_NpzV01il*LB``Yy@ z80&Vx@Y)3~JEud{gZZFkV?cq#@+UfIMkaw-X#=1-=^Yq;VM17XqGF+d+ai& zEMhxj{kF{h+P0)@)MZ^MTelO3-&vsb9jBDafT?M8{+a>8J%a2{AS+*|5pt8am#1)h za$a6qxgj3!A*bKaWlRs3E2}j<^R+cvtVCXEQ*s~mhV1hL3mk`TA+>&+n11(HuhnI{ zBM7;R2D#TaulVa8yJs`@6v~0S7+2^N?vRwrfxD49hgs73r&qLSpDLsBFyAzTVpVbe#5o`|!`oZ*w`Al=1+fP^tbo4J zVi?_f(7$a26??Wr7{C?@J#Dy?5yanxlLZRU=|(+*&?=RgxsWt+pK{RBQ6d0F@3No* ziZ;eKeLw2xsKgBr2@s+|N8cE)`UZhnbST-r$NL0srs)o&U-VqumU6dy9prp8*?yKj=@#SrmHlJ!anS_Oxmz zw9XnVdYO!Z*$BUH=eOdOShUtZ`Z|I!PCjjaej=wy54D~%a(Bvtk`~pC^~HXn2C}75 zKB{#7awE~g8TI=b*FV^^R}PD?MqLG9u0~^iZ426uRjD7hj^7OAr@Q;ETY7a^Eu|T_ z*m>?$u4>>^Es>W{6|{l!uZE%1ewvD`Gr*kq>@GhQ3h5-f9WLeovw#)KvfcRj?RW25 zDAWouME{>&u8Lu%U&K@+t!T@=S7O@JM))|={Z1dGhRf9$L&%f7>V!4?P;zhqXB;7r zC%*M;#$TY02_e=l0`K@nYi6O+i6P40Oj)fhQ|pi7!~;8UAznuJnQUm)-FU?O-~xz~ zYtr}@=H3lzLd7yEM@apD4u8>g%?+Nb)AFm3xe@+dPQT$e>+}WXJwRp`y%dPQMnJtn)YBujCNsl_W8{F4$6@@DJd_5_DgMQu-->u@gf49{X z6I1a*v_q_IngsJk`MPnnZw4jg$H8U#WsTBzl)EKl5wY@}%fxJpR<7ly&4YCgmQHy5 zv0Lk^)f`M^{pvP57(2ZS z(i)jExG?dUFNl<;{2G)P&D)fgBQ6dhFuy)CiPJEe11Vy+G8W`xs{UF7-673^xX|dc z<%a#=KTO!Ec%^;e94eJHPqNG;5p>$y%gyAYt$7opB}Q4fwX;~lOb2EU=|tzxJAUhl zF8w(d-}+6Kr-}0N2&&Lq2hMSfEawh8<8_nwPxt;?aTZ$R5m*a5T8}R`qBxn{LErc& zMhknf$M|sI2Oc08%1hpEDtt4vijWyy{a4hCyEm?h{&w$}WN+Ts35QRwyKXCaylPX@ zcujJH6*$>_tVE}qmL5#t7ou`aRGWfED51h;>O^(7zC6r##xnZsA}c#M@|h@G8Gspg zd)I=uT)#dbWx8)7U!XE;MbSx*S|q{(9-NW)?5T$k%w&#XZh*AZ;aDxI=NpjdFD_t` z{>gz#%@DbaA(E9*Ar`ptcRD(BdyZcI+EIz_an>QltlMRLPn|!FCSlC~pB#FIPcNl{=o-he-003nW#1 z2JsxINn`a3oC>P9BSRPqH0yJbMItpf{-K+{+Yh+-HhcKcg}+fBdi6KnduALExj*6- z5J@C)jMPVCV`dfp?GcFTlbu|g|4UflTJ6E34ptT8T?`#7?54VFh!9<%wW)7MOIQfi zg}6e}X@}PW$o>1MMBYVXkAna9_eYDY5WoXGIBt%N6?@c`fPRs9mv0ORU68nv7mPi4 zFc+fe=mg8XX);gyo8N_aqOm8@xV35v)zm_H(@lK3;qE~Gx2PT5EFV;%oKVc$vN9!$c)f|pX zftn>9UTC5PoAg>#cn_iNwt0P6bra};ZseUNE z_NcK*Ub)*hS3uh0o)C6#6lXcDWqc~cqh5a}U=(-pw)BDic7N| zLNEtzktunW>>J|Vrqr|)6Poin%OAJESy^|nq5eenY z%{a;PA+I|&%@P{L497K zUccos-yp)6bGZ#ho_X?@sgWRmI?1PX1EF|EqcsyHx!f|2&VUd!3>RI2d$Wm~3Otox zlAB#2_h##ByJ2p@*A---7!v!m@7p5teMiHFc_AIFm4}K+BZO8rva$aLn&S_guF8aG z94z|i_H9Mvnd72-FYVlG!sBW!yn`h^%lO*mVmDdT4{%l6Z6_=>Ttd`*-?lT)aLaI; zM;H&xp2clTdW>kdt1Rz{<$a9D>I$;cd$e!+zD>B?6f)hsR*@lJ&4=2S2}WSK(taPf{=f@o`LVWipB|S}lLK=KYsA>3!;@_23v~TrQ!Ci_9?d&K zc{+~^`@M!yj{P4G38Za(9a9I`Mz5K&WZ22VTKD*s4z~KoYQ^W1zWwc*X}$|$w!n|6 zO?pGwwY_{&o9`>8vqLmeZT!4zmnWO+mu9C?)~TQPFDr(S&iLMInvl){<1E_uW>mtq z-}N4+YV5WZ5{nvx-d+>OJ!-5<9T-8(`#32t%O8WQaWBhqML|!7a*$hS3ZqUzx117u#!l<=5Ei?32hI+?1ddrL?jKWWAYiEu-wq_YTutJ zJRPC-;MMU_jgwU)y{5iz$`w`*+m~UiX2r-!`D}O``zzzk)l!71wSyy7R_GY{NX^~& z3I0Xo8g4$yH~VMsmw{`f@z!K6=pJscy zfA~+q(;whQ$H4|3S!DXAUg^J9N}0zG zj}=(P>1s67dt43tPHZLe*XhaWp7GAVI+S^Tn(_*aF(&%&Q?J&ec=suP5?1=1*~Vet@Iu!$6IM8wJT3Xy4t?c~XuD*N{A{`ntszRH*LyqgNLHeEr6-_UqgXkQT-7yRt}Z#90l zFZ?%D{hPnsEXQhy2J6Bl{dz<1QG_#2O?GN>zUz0T2`TvAebj6VaeJp`-DJUAJ6g{R_eHyQ#C`)=K zPZCkoru383+iWJVBR?lbb78v2T9V4CR4DW`rjt$zyhlQ1=q$!4E`iuBqCTG=el==z z8cx8wU15?pXsvQP?tbxVYxFlt?` z(C?(lCghm7TpXICWbF18^}&VErm3O{!SCXCL{G^fLHkhor4tjX->+r#TU`Y$goy_l z;>FkJN&u_u#VPCAbMLpxR3bm0A>-}J!F1_CW(?18FNd={kdT9*=e2JibIykovHjRa7R4$zwtt65lcwI$^xebfzk3 z0h50RC|TiVWIX_CDFbIITjvmQO2JIhqx8tRr^w9(OR4@9U5KhexH^?1=1PZ%=>Mu= z&1`5Md`Uq$64^Vp*po+aB+ zf!_pUW=_$m#aL!uUz*lM;x3QuXYl9&t9a3;$xX+vbI~D9;{)}D_qPXqLUBDHc}G)& zI8cM&tkdolj3LC2M4sn}9xWN}uM3}z7&G9t4L!4;#sn~Dq<%H@Hr=$$i z!Eg9w$)CS~*;^1^p`cW@lao{Xo~fm1MeF#4(qC$hel`rQ;F~@Y*1vvP)55gXt5|Xq zh?5HSZr!PsFIgm&xkRU$AKlCtt9UT4VIvq${!MP`k0lb@B@TT*{Un%EyHzzavKCu? z!v3LSi@U&wY&C(n)B-n0(sxc#Yk`?l+lvEVj|4l^ALaLy6N2cOmf*SQaCP< za>JX&F{aVP4)(uT#WGkiSgbp4v)WXPze)Aase-sO!S&ksG91(#4u8XC);P#g|9HO}YB=vbul1 zgNwro?m&@<#th`m^zhNw7(q{|1-z9h9q(ZXT=*;oyDx5wtnTBqFdBSmU;nO8bez~VPfyy3qzcBT^U)Y=+|>j`gD0$znU-z|G? z{K#g}jbxNi!V7_DNAVraD-Eo0&U+6mxzZHRhmlOUci)sqD%M!9*g?zuPK&C_P3~Bx zUCBC%>$;VVrGDxHA`CM0io5c`_65$60>MF&K$Cgc0h zHMPOXfIn`R{NJn{SoG%%%Ln2zqS;m%IRC^8bKlC6p775V(^*Ndc>Z$i=(%HY@ftRO zJ6Ian(!Wd<7jzos8c7WC){JCI3xRkM@vRU3`U;u{NsP1@YAQnp!md}uLE7U;@U^y% z4L+pm=L@fK{Tn616Oi{s3`SXgt3%0@ju}|>hBidQ_$gMSHAScOJynQt#HAiUsNt(1 z)fRZ_oOdp@(6T&J0{s0%ZGLEhiiq$(?;e*|Q3@${d_}CUf!XW!tT5aZ&);XtMrGcc zY0Tz`@-IF47ddrz2k6O;9=yi6+usP3n%(oFcxxSSf>o-(NKbG5b;o>uOQ_mTu|?qa z_ge2)x9q_muq=-kY}u*RAI!oNtpTEMjzN@%HW5yl?~M4xW}^9c{ZS*+muBhZg9L^N zgSkIPPH0Sb+>+I3gBgjUGB_LhBIq$gxdg?LeTF#+%8*Ff^El)zQJqGh(47i8D5mP~ z-wSx8#)f~@ep?S4G@EdP5b?*aF1vTup9qcg*tvysE?dakH{AmrUjAlKw8k@Xs>XaA zokG&|jM&}tUTAYnO-zMuZE+Fv?zzxD2>;Gi>fcuepYP1IAu^N6)}szh`41ez)*`N{ zbm?4e*}?Pi;8NP#YY7@aY0in^I zfWX5J&El^Qouh)UFYit|!*)u=@ZOZD; z8H8#jP>hPF=6F8W>jj|6AC$I{!f^V#B`9keVZ;~kr37I54DO*YcIj~r$wHj2wYqn} zF=0j<8lrF4%Y~&gU-bwfno3-yGG7hvW5<4vygHk}oj>xGY_f?cBI zefMxK*x1gw5RO+`!$wy+AlO(KRV1T);$?1=Jtu$~br8r?YTU1O{YdD2`@6U=bo%wdQqii+p*b)HL{12HVRAdVvr1&uo~ig%*HK%e_ger^_U zVI2N9FXy-R|qBblIGy7}47rsD=R9h+~ z&JZRSSc=Pifl&+~H(H#E*-^NhtPc#F5BA^Xkar^RXIFN$ntQ2~>}QSW0$M2z|avSpHy% zy3)4rv!ZNx)ewB>jlF6@9g9Jip;?TvHs^C3@C6|k*^(;GlrQQ92Vp7;9Se)*o(KI~ zfK}!ZCk6e>W)?1nlyUq+%AK$;x?D{O%s&nij5U1b507Ca&7UH3I1ZoYoUKwq;*wsswmzhSE)Hs%O z4K`IpUyvLt^Cvhe8EJ%)1i=l4)nwBng_k>?h#f-=2_o@Y0-k&S#dWM(p7qNxjga2* zU4tkR^ngM*w;n&c!1?|ox`0s0rd z*&;}p1n1X=!^aF6%KaR*!9)e$ukaq{6vumO39LA>;^VP2&STwj4PX3sv7B5BR!!tm zAZ0S0Ps>cz--#kZyDDM1f9fh4-P0|kzD2vPh-3!~0~SL@g{|0RE;q3WM+HP5C1oI_ z=V2eHR)igwz^La6?7kphwUqi3TnHx^H1ue@XV;QVVbSC%G8&$J1n+ht^FtA+0zUlG z3Iwtu)Vfa$2!2szilh_q)ZnhFokWeH6QRr;vF(W8Vseh0V4i_|(-AfY9fH-B7gHOEr$!O!!`vkTYuL-}Z{eZHgDb9^D4V?ZEANC;@^y|2}3~B4vJoidPz` zkj8wYG&U2E^Tcwj)mUzl17tqXPX1}sx^H3ydaH=u0QmKTAO=AwrBYzCqXtP)Cn{Xp zC3U`c*xL!%F4(D1_`Q0FP6Fn3uG=)4%s79}T3oAM$(_gFU(GV;Z-!VZ4%yA=)FSUV zSX7lTf9H{A7f`;ob%=H<%%7Iv9Q+L5M5U*P_6>>49+oft%^yp4fAPTQfA~|^sNQJ< z^%k|Gq7We<&F0<*(`9l_Tb6X&zSn-JWDrk5^QXFnJp|EC8DT-0w7U0jmt^6V1!_jg z)}NxWHE!h#F#7m|3Z?Wyy76yUpPwa|TycFan-Ia=~9N6)B=Z1;SZj(j@mVXZ0q95u8`KdbhgYjaqmxr@|*p9AuTGu__UB{AIcVa@LRh1&QvIkZbXeJyFp#!6+fV zlD|4$C(yiHu@MoTb2pgA6GN-0C>RR1B06E^D0sB0Rj5MEn7{9!m(`0J{;P z?MfoBD_iNpLY?yH;9CS-TPsgKG%-ur(Qp$(KhvuWD90XF^zq24d7klf>%u`0a6^@XJd2sXv+LP&vp^m9A61D`|b2KROAsJ45G&kPEwN2t6 z3kOa}&TI@MmnMvCfplh~(GlBP?^@V5Cx0-E+TU>}4PYCNp+(smue0FsLj2nOTb^Yo?-)HDHh)vIO82#K-_ONxv;XT) zB?GAmmq{)7tdraOK0deM$+6pE(c$hG*_0CxDBa6$NgWKgwJiE0;()X|&1jj{sik?> zInkWG?rLTZQB4@u9BC4>N;^sQZ&gS1Na@S++k*l@8LGCwo$jO{4QzFtk_lC937nX~ z$opkaoVZUqCfdMXh_}PO8|RD2N%x_U99F*}Mv zRvQ&PL7f(Oe=mry6+s5;L30X)i`uB0$p3~Oj7PG*#0%ZcDR3C-e;BW04S1CR!}jfe zK}KfGifiE%0H=TD*R`O?vRB&8g(e|mGp9=cPEIwPpjyv-k_w(g|G4Z1Zs!rzcM3bk z%0iRyk0$uA>82)y9?BGkv$|*nIGOo*ljEr_j`A@&@@QBz-_|3kQr+~=^6So4s+6H< zixci+YfbX7oM%>^u$(LCf?%-%maIED$lsD{zbf(x?yLl;@QC=cV^{v&TN6&#pZyed z0hQ+!{%{uX5OsM0;y!cami*18gK0!<`>PE3TZ4Or@Qio{OezTZ`zB``1mm#2GTk(~ z$oLA?bLgRR&m=&S0s4`<7`8(Y)DBNo}0+L`V7|Gh$42JW8 zbtLUyGKzIUry%%g*9B*g>y)R?YX&ql35RNp6f6LS|1b3*2{JzQH$CI$$PiVv$1Rez zZPVDoDj5g7JYaKk2>TWDg{1h7%5@xHAKq z&-^S=_S%&=PHxK@;cCPbHtbn=cI%)-d~PPL1PgqTT#cT1cC9Pmr6B*84-axYW6r4$ z40wR+bz#jYf!}gyXhz<$oH?EoZ4ng<{j>Ze41D=2`q2NF29re&9%X{R_2x&GYXc8v<(l$M@O`M;vdA0C z*Zuhpn)oxmb8pqQzkkMezaLH0rF~Zw$u0K)p{n}OMh$W_$|H%nO0Y<>J#;7P%Ty^j zefku{GXPg9zAXH>3hW>KN2-ycY&+|J(wqHcC^j8wE+$i8^c5u$reL7~`ODCf)C)gl z@7B!Ksd4!)E<3@MES;HHM@{5Xf|(WUTdz=qBMI>dW@b@I z#6FJW;P^Meu4#69f9fuM;dL61@=o;<1sQ>XD43K-xOn+;mBwNs+t{xCrwDEE6WFc` zuyAc(F5%j)9HBSxL}wiI4|#b!uHf2A=K?psXUWVc@gcT7h2uDc)lKGTtQDC!;wmn1 z&?E3$i9-={OV4<-$(o$WLmRA)2m0-!AwJXG6Y2@b&TK^0fC=HWW`fwU#$l?!Ye-D$ zyAJ!gkcol`+vu(tOawkq>EYn^Ph{{cp`fIFKDrj1kyHI~Pu_UVM6s4>B4W>LDmE-o z76q6$OqlnY8M zX(B$We2xp55c@M1k$gnqym~5fXh7Ywn~$7xWa(0(|sl5Ix` z$^>z`f4He)MHf31|0^Ftw#gcQhFtV$5TD_z%9u2xISjbji#6lx7SSvm zg46b<7-PX}wzFH5BZ^QPO8V(-d^EhqIId;`f%Z#%!Rq(rQ51E@I`_N3C~;gnTqfYW zcsgkgeqg!on6T6Nvo7%UD~SEeY*G+k>c5l4`LASfF-JoCI;UXYvW#|(edm9Zl68_4 z=lq5VFj+iODQ1Rj#tHOVF;7WD4xHEd=56Cn-l9Q&nobPBr8~NeD6$z0yu+AL1u!ju zMcKeJVz-9~BdgM6{(Y^GwRVfig!9D79-1D zx0yez(s*WZ^6pl^jWJE!uWMxk=T+dBZ)%jNY60D$*G-jbVj>^$S~Erwrk|pblN2fs zIaWYE3RQ;SMb-;zCpfDA5)tfGC4lH<#r)i^VQ_qo;57k{+qV0Vl81$ra|fq;C>i+9 zozZ0VIb8b>GCp1%&|N#WD|-3N1l~JBx}hGYz3E@RaiA)I!2JVoUIIgSlXz8NffJ!X z`!oYFo`BZCm}h_(4>XAw4@ni65E9Od9li43F}kaIA+(Tx=l>)_N9h+&%h_(yifajv zxR*)ZTzekag+_A5#0=^UDQJP;>IRMMXwDGl*5<=ftosAj%qZ*abD;MBm5s(}f=lOj z(v>yJBW^v5AI5R%aBUea?2V7Mjy;S=Lt)Sx6%84U(Yonk=BN)%q&!5m;9X*8=^0dq z5M^sl*E}x#2|1M1>OaWWTmslt7xzQMh-tdrUU!yaq%&&>&*!!j21>Hb~x zaG;u&`stOC9+}`R!3k!Y&ox+;_nR|WTNKVo>LRoNW|f(3x4j1C9%ck4u3EYUPdI0Nw!N9X?r^CD?x&~N53*tdfB z2J1aBcGLScAe6&Ad^I<|VeH%VpF)2HB;6`v|BDWPzaXud$g(;x^T&m0J)wuziR z6?{G>71*1*%h&U5w3a&?*;jj}d%Nset+73p;RyL_>x>cnpaeKAhp@pq0qTu}`$@UN zBRIzI67G4hT5{%Us7>8=jc>E>0_ru;JK0wuE0kJv#>5orjlis62sU;`q2vD#9M94e zzkRCzryDo_M>oFHZ;n`HhzRu-Z3FJ_D(9O2Z*2II1u4pvxCS$yS%`hyFyP#7oIa?D z&%kX=!XdT=I6@22Nz~eIA+$}-u;0m3W+SqX&b|l++Sg0fkCJhqyYe_$l-Y~_A7BuV zyBC+6Rk!FEkgsT>sxL(>hN(h-HMcQ*|5hQ5Od?(Ugu()!Hhw@#wS0n~YH0pro1udW zENQW4_NuJC`!c5c*rnTA{g2i_be>LFKkbhKRHR8$UNyjPqGM>yWRbQ#VgBRy^{n7Pa!23{+2rT zCt6j=Z-_MAUbB}gE!}y)dj=*#hUmy6*W9>l>j@*=AmR^MthK>r(ToI)bA8JMukaLG zmXWVN>L?Vr=i_E!52-B5h1Z1XgvsAVX-m74X|qJ$kKg5Jy<}ax&O0bHX$J%i4XO?l zUEgRCraF6`Z2YHDZ=*{7?ER4ZznFUKphliI+Iw+W+@0XT-DP2McX#(i7I$CV-FZUOOF!HV2^OOflv)*;3SvJd0uWp-z7>ud=69N8Abz0fLly=j={dn-bpgT z)99z#1(sxL9fbbgU&*0O`RhINabBOY?PCGToX(ySZjziN=eX}9tH|j>yliwq?xwoO zr#kHOC)a%2Ry#p2X6Jl1auCnegOlG1shNEb6R-^CEmzr;CJwCl>XUQaAQziazNi8N zv3oZo0PgO7oZ|pZ1g2LJ;u6`m-@2@Z!#}cK_dVO=fn(`cdy4?fqv&oG;PXId7S>YR zkqqB#XNIF)qEP1-u!a!fw_>*oIGs^0RG*^hSTa&=Uod&OqS=a)W4Yo-LE9szynTQ|Tx4kgv-8*WHX7-+sG9>?uaC}DtiYCw zcPKOVHzakmaLrn$WqhetE6p=5h-KG#-{-cACz>)kzLWB_)D2SPr$o(Y3cE8WM&|@f~g8g*(Nlv`GyLma; zdNjGue}m0xH~E;w>UzO@G-fZ?OW@k0=pJ;~9rq6o9+T=;(YPb-XQctVv&cyCAfa^2 z{+ULdI)~uUtTvGoUDnflEWjAJy9~Qf8>B{|J~Ug48XaB4D5fy8wyV3d2x?l6p(e0nKQngu$}|5NF5cTp%_OQLBNriF>2Zc?2m0WiSG2mzo$e zB;*5QG!K5*t!+Vr6F?^0h24Q7%#czt_ot5O_ngoPwmjW!lmYF6NS|C=X@Ph9%yHlC zujNC97i1QZPfe5<>SceQ;}?yQM;AV7mHorB?abV-Wk4HXkKP8RZr}vZ!glC_#f=f1U>gNG2#5voM5tmfBpfoQA<;3C#p3%XP%dq)!NLOD#v7-IO+Q{~ zHDre+eO=U?8-nFSKB0u?#ehGItWR0v z31Hb11@HF|>`!q%HJr%3X?HE_@sI)oY@c8gj|523XPL=m>F^1xbf;{%pFPCLKK1TV z_K3Z4h;KTFQvugH-|0_l62V;8Dn&gTHXupw#SwV6^CuLvTGB&rAb-G!o3N zrkJPXuDtN{>I_w-LJDq#?KCla!JU-Q_Vp3|2?(tsMN*0Kd^^|hEOz=fnT*sIX78%p z?362J(Yl7B=TAku_nBxT=ZM0JDxwzT+gC|Xc&E&OvIoLl{`Keb+nbk2u8*<=jFk`r z3E?LCZZ1jbTx5c>MPWTZ*5~p7bdF=~37+HtWvX9e#)(nEs_}XBz3>>qt;a(wP3>;` zuo4SfW*GvZ!MXDvXn$7WoS1psHbVE&Uxyx8edG0lL(Lw`cdlXdoP+E`WUL#e z&z3$1#I!MPO;?0${rWf-?9gdDuAZv<6O&^slp!llC^BS&Pxn7x`~75$U3=(!dvNBz z=KTiDxa#zKrWXL|CrT)&cB(c#N!_o}Ah_yb zF%QyFgT6hHDHPPqvqHPT3ec+4EYsPr*hopGo9I*=D4HgFcicb~Z@R9iOANih$ycAo zsI3(a@5A}?WgiqwRs5qBbX=0$Y@c*t5atcDq{A5tw4&#XUaac_&A5>fc~3!~qCGDG zFRD1MV#aysqBxSWS5e++-rG$&yIR|4t2HN*I&FgZbSPRm#7=d?$yy^a$~ui(+%I~F zPmS}rMp3=M>g@_@RsEYIetS;8lgf_`v>dM|5tT?S(K4+_QvSjTdZi^(E5*Ac z0RFI2N0-b#9zfqrsdn8dETkYrvv;W&fVQz#2aE)76XEU4c3*`MR9{G#+h#e1hFtUb z_y^?@c(`cze=N#Q8}R<_CF|mDN-#S+?3 zJfG-k34@zsGF@F$H)x3xZ8OaU1?n2b(KlD%*Jw0Uz=xJq&lN`flD#w{9#VOsgTESl z(npXUz2}O;iM9#;Tf%rf7N2&iIXv$cS|leFVARnL5pxJLtXjII8OJUv#m{z6n)*?Y zm&mVv9l|{26@_%%_JrYao|3LvXNRlMWb6BwM~01yJqk0d(Z^FfXWrO9pLr-F4OR%= zo~wI5-%0!X41a=y&QDOc-S^FS6JS`O4y~*Ugh?f(1q%U`hw>E}*jU5wF6!fI$HZnK z(TbN~%s+2%E-VNYaOiJ#%Rb6}v}H(Vu!H&Db%O>urqM~;%OeE5K&~x}vl#^ayt*7k ze1oO$5P&hZBTR-x0gP8!uqt~hccUwTgOq@pYG!c=OY&7_nCLTEH#z^mjZA~>IBei* zt+f<6cwN-PQO;e|HR>GQ83B7eZpzb7xg?*_S)psSWfw+Xet%(Yu3dN+Nj5JAGt6pwj2O7-@^+kNU@6qMKR>{VxuQefT zZd^PwU3W@C`WZbo941dn>5QGV*5MWk#nLQ*8iFu8+p{`YbcQg8Bsztvd@ z(6TXjM!Zq64^=sT-c!Zrr;M#`&aqsDgLcV=nHq#LM~Pfs5h4ZK}sdp@ifXo z7h1H3Ci^Q3PD(NNk8z{}GW0=rnT1vELV(X#kk6PN$8ku0BeX!OyU({N=fl>?No18E zpQjwYM-CMS^3jD4{2e)_PH6%s86D~uFpD7wdl1aF%{x;zEON8+DGW#|<vJVp7cMfJ zJfbDvr=B)qk0Bv2PcC@sV*4&QxsSMXXS7gU&AuPFJo3E;OYXMIP+MR-oMtsgwLc$m z#iC{|Z4cjm-7I=-F7sul%B&?a(o6N1-w$g}I_}dD^S=o`PYJMPO-nCej>K#T@$>~=ehha;$Z=@2i!#U!&$)m_8P^k- zHaLOzt3a(1?^6UvQco@ zop5jM5U zc>c}O@3PYaqjO8^PPXsg=HKrFQ|S^VIlJA;Nux|>&o3osN!>l7B^^Xw3~6G9Fv=}s zSFAwb1bOFysXWQLD(TdDh-ST_GYB*%;%2cvT+G6!A;jbL4GCt9lTH)$7VmyB_n|P$ zlpXp#=@N3YD=RWw+7+4p(%h#U3BKDgb##CgpMg{_gU-~_|KnjaxCZ3~GRHWdc*k$C z-K_qdRRiYtVNPNG$M$K3Rth-1^1#1v-nf^a`iGC7jHj6oVWX#n2YO|)gLw$);N`6d z>0`NUP~mGfk)MOP&4%|s0yoVSs=z74arbZ$UbHkPzBg!1BmZ9ugOh4^1)q8(DM_Nm zf*fsg1pGIRoVDM|sWPB=pgSf-sbeo5l>;w0Q=xPRF&z!FJ&)YI@?uDVx^=$2h|C5_ z(yY_2Nfo@tIg&0rY3+!Tf+7;EF0~o7i2S069qOWsSV7izDqV;(Y=2LyLij>rD{b(8 zRYnd^5syQe0bN%q^QS=YB@Y=apQr6!ICD~QlQO9Wlb{!(}{k%!i_%N%cv7XMZ<*ebh>V7{1pir4vUu@ z4L)4FYej%#%D1~d*~Yf_E%tG!vz<=v__{3u-*-W{xcj~q*+Kvo8i&AqDZruyp*fz4 z@SixgFps79SLXR%rqW#>;YKOS7t-IqffxIb0-Jr9B*Bd({)hC#4KoHK z#3}Jm>?6E)LH>827emyv>bAe)%wOcO=R6G=%Afh9ZylUi_>bxhc)R`?bH=0fM^Oa+ z$Y$k-W!aalZS%;`x}ALQ%d$s{$b#piR8uBvsdp@qzRHEqGOLa$7~+Kh zy(7ztXWm-Hlu{CaeSZwY)I9dGsJ@`_VQCixQ;d|yfqNl&vtAD?&E?oEz1~9tnF?Keqv95~@w2HPjcnw;A|Ssh6XzJQ$BNcB@FwzDiZ*2n*;$ z-^?L91VaOc__8R1akBTn7xHRb{DCGhCYAld+0~#|Uu(17JJelz^8S9M_5VU$Aq%#6u1iZ`dOT`f z8?HJZ;~|kVPK4tJQojE_D!(4BJGz#@vA8ZVh~LgY8L31BKyT!PeE_ok=x5 z7<0}^vzBrVx^62KLEQhYj~twiZjpO*5&6I=`o^WIVimp_|0e3J@bEOgapUyk|5yBy zltx1u0PoE35C<$eZQP%%0AObQr!1ATv`Q!}DG#B=vJc(XD&4so6AE_V3wM(WHzLzS z=)Iyy2WVWj%tMt+_mmYy1g___ssL_+?r1<7W90{P*S@mxyPve&yFsX zpN{ISXCh~r)prnP*B0bci^#l3ymx)s&tHl~VaoVuEMB*m|0M=+oN8R@b6+1ch6n%k z;}}NA;rKtaqf}slbn?R9x6XDbBuSF#u9lD!Q8WeC-E;2xD0_+8EzNLggXieTY>P&b zo)gv(Uw5f|BK3O}-}k?evM7HN@=fyRDGUnNy>Nm_C7>#P=;uHcIrBIho|^N zrFN=f;B)LwsGrssC~4(bM1DB@$%Xuw5TCrw$TVR)?KQZwJv?c-RbCB( zZB2QJyB2|d|4wU-`Y1p*o9l`}wP$RcIiBlLW7U_-fk2~@OJp2%Ee4GkqB@%|SPu2h zq)?sw&t@9=`W3+kcv}HAg>|^nJLy|q@zvW_*U<2SR-JR*pwnf|y~=@U<_PH-^<&|)X8!+D{@p5X_W}R#azz-Ak3bhx4WJ^a^U>%?x$Cp-^;sHt z{_qzwcc3jVDsXgi@KQf7@krl~kfRk9FnCY&fsMsz`6Q_n`4moHM0OoE)=>W%fv-8IEl-V{&1&1t_YbI${0TKl-ZrrlwrO5?R=k1a1V5z=zbEkjEUZv40{+gsS zG7UnsSt_7aj507XC&zP&FLW#8F!yxZG%ZUH|Jcxxe!X83NTw$z^hWU(I2DGsY}aV4Bo3v$fr%L9|_x_ie416*9lZK2;|U5C|E|7nJ} zjS!zLC2U8Ho`bG3E?C50M~4O(J^YJ-~AdFj@DIXp2c%EIskiHd<7)!C0#s z)$Tz*96MEN@xLsJC3dNg-1z0+4so)adQH=jcVbk<<0d)#8OB}7xPPMgSKZf1;=dMqfkyl%3He@PU!TWoX=p;pSx1g`jlv zf#2yKRseTlZBlu5(}|sbd0%miM~+f8dm$(T)i22*=7cw<7`yANlc=h~xri^m#ay=&2Z z(^`R>XF^ngipvu%f!bup5tUxp%08Pzd9q0*Js2X3u5Xr_t?abhcm72*qbXxX#$j3` z3Cai5+=oB59Fdi1u z#�rzMYCjip#A^pucSO73@G365oG#L+{BzK^MeH~Zg6M%DNEmZRoZWk ze|-VYmnNiaF43v)73MYqS?w4UM0Wp;w;X2Kv9-2*QF#rUEc^FLkt&dXE1;QNyyz9C z$a&A^A3d|&(1N9Z2SZoD_UWS?a{I~D#eRK*hzJJgH+1Ws`fEWz$WmVWNci&z9DtUtIp`b2pzek8^_t^5m$n_G730HRtQ$fFH2S`RtVxLPjkEJZy3A@!64@uMkw@ScRa5S<}yo>k+#ksf2Ir@Cid zXK~PHMIFFw&Us1Gjz~|^rldAA4A0$O@QXMjrup7VdO@F@tmTuAw_5%C=dR}#>rsdK zpZ2E^N3+RW2J=J1Y+lyOv>vZXn=5BEWyey#WNdlCCt3@%YKyS?KgSixjzXCW(*Qd{ z3BwnK7L=O3yz5=|RQ!F-^C?6S=c6%x&%5CqeVVMA1F$=SfweQ=$lAr!-&3jKkWekBKNpAtU!8QJ!T}{_qWa{z+@g8qWer zOeqd2)m%+FhRtWqb6{cd%_Bb2ZZITcy~b$m&|StFTg1SUovpFb*t0W_g8X+bEWVpy zI6YvaO2z?ppS%E~o^ki~7~~jm+duvIud_T1e9GpKVj@4zfj#&Q73I&;6(aICTn%rg z86h{}3Ht&i*1}G;`f51~_P(af>N+*ZmbM8whiZj4b@aHQFq}`B0F`=u^uqKcAQihd z8REy9a;c{2*JF5Lg=VHBtIkpOM!nA>m2z=LqcnwTqw}_ zW~+iVV^-R987Y1*)RDE!kU;6G z2-YM1%k1{8o|>~&rVOZoNAq=p?6bo;UI}Ou2EnC9(2XRC=NfP|^KI8L-m5ery%eJ1 z?EoLP3upRTGCY|J7(7pn{jwvE@@|T~Mm_%iPqhUN;qez5nxjL!O0lY>RF)1G#Ti<~ z$IpuaPD8&_3)ah0K`c65cG47NN{D<1mbQ+>!gW9z*F8WzUth`exBA3l8mR2j;Ooq^C=I5 zAVz1FzcS+zv;F}uC4N3~p;s+)r-@-!j>AT7lDtX*3MGTV&&*f2R5ONq=L&PFasM>*S@_^ zQO)5oLA*sg^uMK?wRTiMY!Y}jCk6ACS;}Q|Sin+clQtLcSfQ(D?M9x7E0!%%>E6f3 z+A?%`pz{k6Wd8%)Q}~uu8Zm0*DV;@Xs*``Mjx6C>?Am~GtR-p>I%OO>KG^@C-S zAsJ|<4_1OiuR%)R_ zcvSn2hQ0yo?7<;gstkPVo`9*r6TTRLvHcR%-f(Tb@$3Tb@3bfeSNIe_A(gXLMiGfG z+MRh&a&gPT#L$hOOjP+sj>{o!>DQNtV*Vss1nR!I1byP`vgm>81`pG8YNj!|7;<()Al4=HPrKh8P&kmxNqQ+64Mid?6rgm z+`I^9GxCaN>77qlzKRh>2)w&W`rr9d9JsA-97y(>uy!Trwkn{Y`6W=I$N!{cTKTSp zx_yYoI}k;byW4dtL=^Faqfnx3oT5^k%upnEU)1viCY2?mtCZE&CXr>k&srwYQCdz5 zkX-`Z<)v7C04O>#!%-2PwUXpPcWB95&EWckv-Ag#JuQ;~e?#MaBH4iqe(!l!tagg; zjCWV=CtONSr1K{OPDOH!KnolGI?WJ{wb@c18r{-4Uy&?p!7AvZxEW@V`!&7FJH=A; zWack59nKoP(o5$VJ3F_<{Za%P!vygBW0=tSzk(9_?Q9lkTaI8Z`1{SA5m#>!mnbp$ zpPe>KMU~tlLiGqj63>ZO=G%g8Bx3U9X0ekSbpK_dVkPXBY}TMuAXIbZzDx9z5F_**GH!UXhP*r|5&8WJ z82TX<0{LD)eUO7`wT{($d&!!_M zu#mBW)r$`b!cXEMxo_kt%9;ZO{n8xyrv~{1Lri1KcD@+m7(2wh8(h1hl;vVB?aY%Z z3nE7x95bc)k z#8;|p8#j5zV~UdrL;Wx1=s!*=&hEyu_klnr6Ibcu3Z)5?LnAroean}#ngu^;vfN~j z2#Uz0J2vJ^mGFMB4SSpiZKcM6<|{Q`y~Eya@t*%j38ZZ+hi`UgGc6xMmk7k00$X3o z!gI+z@MRQyQuNEtkZ;~e$(S$w_TRa0A$vcUiI#dD8ljmV5XMcTUpBYzRV1hQbdpD^ zK~M3xJ15-j+z|HT)PQ+bm7ujFjDa?2EdQ%T;G?w!)=vQSH;Xaw=JYL%kNqD}y!oz& zXW;)6H%Nub6L~HU6(n-Y7f>ehe%t9EnItJu*)zK1A+wD~p-}0wOwu;~MIFFHr5ti7 zqqmM$VPIo!?%Mz%(PZ{`X0%0kAJT{Y%MRQS)N zvm%XlzoPSV4=}FipgZdOteG7eS1_61=6tr|Hlk7e+CW0^& zsTM4~@|23_X0Jv_K&vN}LZx!>@I^e_&yfd_{1m9VRQ+VUai6>=wE-_8!3n?!2v5a z8~(j!rOaydMEew%=GtR(!Z0Row!I%bnO%)JY&(qOO09-BIJy=L^S+@A+IMyi`-6d~ zIvoL#>$z_{ztSg)p3b!ETqv0L1ZMYIA|1Hn>WUwcV*x9DN!XkPvqikm> zEQh194ndV5EW^mXcZg@oF_BUKpEfmW69NSq%%WY?;0C4F55Fh>4JUQx@L>+0sKEty z;hk#Y4~`vti??Tus8i9WKce4olnSqwXZH)+{!yZB-6GO*_o>nT7K>PIIFQ{DQZxFI zi*uPj=M~Oe7L}B_Y)o3Lh<7A6>9Z@loG06GB#W^Fj6`V|Qidciu4r;3GpGK$1v@VE zpwVgYZC}Lv$b)Cu43{j*=st+(hXryxx@=U|>m&_g8n?_(Y+^Qp>W~=5CX(M+66Lsk z75i-8F$}i=Nq*G-+ebo*Q^sN&ye8?Za6{e?g3m_enUbg4LXk-7s!2KQk|n=c-^_K8 z`$}4Q)97W5%BlUi$AI=h)}Mkxq@8Y~B9{cbJ_^wsak-HeZE_Xi9_&zyd?#g&+Eiio z5iTYfxWh_TuQ2H&LSKmtr*N%{LN#Tf*Rq<*!yqBhx#A`wBVI8 zFE&JI4wZvvYhePTv(>tN@29}-FMV1sVAP|d)w)(MClnPx)Xm27w-Wn+NtizCy3{1| zNO&ggz})gN_O_Lh(J0lRk&~7T^P65{Ji4dM*O+3hk8o@AQTWzWK6qu3>h!?gKe~te z?I*IM*zUg(HgiJMn?Gu9PJjO@*UX5^Lwlq{h7n=_5m77hNZ8-O$&J`Tl6F!ICtRV+ ztxGvM4@*6Q$CTq=(dhNB-Kap}{X|nr2fjSKO)_p6+XeRziRYV?N7~;; z(y_NKTs7Ql>=$;uF_0*qUGKJb430NqxOmunLOaGN0Qn~QdFd03du9a&NI<7JD3Pb(Yf#|{6PxLYMD@GL z#d0`O0?PY_SWp?s@PBgtf(|8+UwVb|8hANV0QGY+<_43ye&9CXVq+&=%E(H!499cYl41a5 zE0QzrzbX=`wjM4e> zy~&A?s9S3U=bUO$D)N57@ETO!7oI8Vj`uqzmjd=&5%g8Z4RHeGgyZ%k5N`a>Nqi7H zxv9bh1_Nl2M4@NojuWbBl0Uj@x=N8->J#F4Dk0!wbD75=S8ptyh5tS&4hMtw{b zq(|cj1Wr(d=*!HOtx%n&Ip(GBbt-@p0ZjQFt4e;66n6{}3|U9k?efRZ)yf~O1m7GW z6a3dh^CY*Rfn-aaph0nJuhWu(8#VKmGw+1n2<43k^0w`LWV=- zDXuLpXnK}^wLHMBBNmwuJF#DbAU=H+lrk3j`;0lN+X;8a8nRv#*Cxe@(4v^Aryt!4 z5?y{6wQzWoa1m9Zw17&^@f!b1+CC*{oh*cTJNVPScg$|$22er9^uBn<9$=cU0&?n1 zF6hxp*2+>L>rTe`slLKnGkPPDHEJjV78vn4FUuQF5%T`kTi@9+ZcRejkA1Gg+8yUJ0Y#x~mu=!g7>(!xV@81xoHYN63sVhI*`gH!B^J4)2J zA5z5(l<0Hn=SU2okqN=U!tGp8E_{ly>{nd$OnK8kCH> zhA>g_X7`QmSiZTDClY#b zg}t{kkFHdfHTo_evTS?pkhbU-S9BXcPGEJA3!RsUbw1Ose8cY}duD!TAr9W(&g-jJ z=*OP6cJ%fvcM;@sv!TdM<|6RL$a_LSg6q)v`8wV_x7WO^7+;MQm09^P2q0Ul7yAcc zUM2SlruE`jkHJ4_Pung-ES?_TY)p5qX4lHKb`Ycke)KNC@oj=+2d(79sxL9G6f{cl zzx~KF#%dUnXX_2~y>-13t@(AZM@spTq2E2#>+pv9u)wCxFjXBG-bMwruQ7^At<7*J*j9#_M=681( zepo&&b4;5)rEg|)osi#(l77%*G?W#1$ZWrxGNfF^l>CSh$&nKBF}U2g0?rHFB-Z2O z*N-pkC`>>2=J>p(j@v#9$ufB`F#YyKAwiL{1t~a)v(x+?9JrT3;pqNu9qD}$ura{X zqwv0*NXdaUyraSLc|r)GDLe;|2fYsd9=r7!f515->oVI;dvo3pI-9M%*KsPscZJN?m@YZ9NCs)rBC>ApQa;(KwoO}g5{ zf#IEKDivtR*^1PDBNQf~SOdGeHH!Xv!cY4!N<^~T%ci=g^BTTS#HQTe&nJr+V(oS= zZv|6$?U0m%z<9NdtO*;szEa4>F4D+4aJln%(}fN)y)S5s($H;8-i=EUKOHsS9r1Xd zQ;02w)TQGpqUf*BOmCk=p^ag3^n|<7X&uk>n}m&S_{4ybwdZoo z2Yo-);4bQi#y3*Gr4QOj?-LY#Vpva{rvA`L5Bry^m;p1vT>dK{1Jaybi|5=DRE?kV zU={o^Y)Ciba@RM%=mL8l1cV0hcXp%?`(IZ>>jX$q-fVwN+07%fde4me^Guq$zzhMW z$f?~1ul;jZ*tgI-K-q<-k!2*4CcAHjIkSu1Q*Ap_%Syddog;7pFl&BYaImlI%zkja zp%2||HoL?&x(1=q>JJ9>U{^*bQ{`@AN3oeU)elYZY zJ{GiVPs9HG%q>R4LY{w~8fUJc*hB8sH{Yfs@ZIQMu?rno8ytMhMu`YMAJ~02G^({| z)9|Vhq5Cn47Ev@bVDyYx`_%t|!l1^18Ik&7RBQEDqe7DwE60}t%i-Cm_99fnOOpZX zG!TE+sL#=;wl+kAd>kzzLs~Sz7l3Kq4E-ZIf_H9U_kyIhM1vITu_;{iz*%Sh*r^GQ zAsK)jftfO}i@u0~{YiFCpIgq8-?YODbYbKa+!m6MAcjLDfn&~x3?=U2Z$W1hguPI! z5DibB#j1u^C_=)NA_UnsGz5E47kvm!{rEkF*m3z;b#Gd^p2q*0#_wo$7glNL zP{oL5J_hU1#DHPGhPZ3vE0IZP7hZoGz{UASGFjDvGY!9#ySAc1wH;Ok(ULpG_)8R0mkyu1FG$0g1X;n?87m-Xt{@1C2(g)E1ClxIEQ z{>0%xl$I!XwEWwFXoGRmcq;VvNz)-4R=V)kq>M}c5%s8_%^`b*Zn9o{!2LqjA-jue za%7sEhp_?cNCn`aSAlg@biUi+Rn1kMiE*^xxZ8m>8$Njox0}fjIM;oyG&kT}e%fDI zbb-k!#4Lcgt{5IX*S(>#L1&x!qOhK9*5Ssg7tn9LTo%4qb|G4gl?`59uJ*XL<7%E~ zUbS$m+vyyIf!pXoi-{At1onwqP4@RYx^1CVz;5{hX9q-pRzR8&M0a~7uiLv;uCVd| zEaUApUO8k(S|fBv(9b^s^Eg+Oai2|B1(7NtG>s_!v|gyPgZ4#DB=*&eynx-M-Do8c z6_@-=3-X_*mc2v|!c1iE^(kCVE&hNop-LJ;;q@g1wJxwcp*LkF#riEP)4Y5?3E1lt z%%Y0{CJpO2rRQy@rdHH5?Zicq^X~kT#aXxlDg&E^A6)0g|gRu6MqB3vE#GnO5H4Z&6l+9 z{*+==e!@>9^?LrKc^h2C_(05Vz~NH$&yo6$EY;a&U*wL~V|T5tjHMEjOmROQG-rJJ z6>QYlm8A|(_)+rh?h4xkhpK12^TCzw+O3fgzGt;7h?xH#nmmYI{JWv#$oR#NX}B_@ zziO|u`9IAp^?#??KqTbSm|Hh~@?~4q;kUgnhgn%DhkkNG*6WvUgWt@>R|3prq?J;( zM0}hYI|S!&@<-`0+~haF^lHA}Ti^-L8#S}m#mU64Hei%!Sy5|Qa45orj#i~jj&KMr zD7pq^lqjogdTOfG4RRjX7DroT5qDuCfIy36oj z@i5AT>-5FyLB1z>x=n)&X(D&CwGJ4PV=<^4LKNF}#}LdZcZESER$X0S2`kC(rUOxa@+sUwgF)Nh;~^q5sg;h0$y{l` zYvQ!lLj3^=qm^?!zpu{Ku;PZJ=6E?1chAgvQw&Qt@trbCbI=uqt1onA}1^;Y3^ z)6B&$n>R9H)s2^!$yGorh;szV{(wUi(?j{puVy`lOI5BO!pIR=(CSuy=9howZNa%o zK)WsR&}<>N=@oI2+@2bvY9Y`x3JO?#a8dS^9{CqKxP4v}f0|CA4wHR`B6svg) z4QO_)qA+HkLmoIrGg_0WWi%7orDb#^HVE9tX6hE3xN5oCtnO`xS>|z7nYfM$>G1SC zbgz)*j$xuhhmn=3CGMOhN8@aK#Z->#nN}0+E8kVPG3SP?H!HC!3))`jO^vOleUrH$ zObDk9o?P;1qC;6vFdZm!g6DVu@CHdCDYTbNt6U-59UUv_O<81;V=*&BAt_B7s4y}G zL2sikHfgo~L`WQ)!+LvP5gmFIa)3aPHP`!bVP>R@rGM1gI^1<>*V5i;16fA(oGihe zGC*7xrtkvL&3T1L2MTO}R&0bg{cHReUlquNV%vl5hPdcnAYbCdR@4+|ZV>IPb`O_O zJmF1r+k4DNUngbvip>*oTwUSUl%~Ngo>M)dHYQb>TlR>Kf3nl>C;L1 ztn@Q=+-B7GH>>MGr^2jnFF*Kq+faKPgRY3(I-W{ytmS?&grPvjU~b*qBxSqsiMH0g8-R#_9ZZ7#@bPEUdJgdDQmP`)YZGok5+_{z3P zoD~FQ-vdm=HURwbSRZ!r`{m9M`=>_epI+X`$D))sMp0f+5V~Fd1F)VO0{XQaLzCFI zXq~^)_pO}*%MVWzlNf0h*z9C>NFL6Z&ygbLKKQF9jl(|-w(yh*#((htEllGoBJ4lm z(#e#oA2{&}T{N&8$7cs9jrvOhjo|4Rmy8nuUr9s&XI6N-|KaES5PHf+*;ti(k`5HSRqW-P4QQcX3 zKlCd`d6D@n!R21k$knzX9#C!YqNq+&olq+qz-+(12Opxu;XM7pU4$}x2j({`L#*D3 zQ)I(G!DspxurwTQL75Pj`=)if?pPgwlq+Nd0-Y^)Z(d$G5;w~h!d3I)h%luhf68#jr=JEN5JcGOoAmU`zM`>VcZ-x5&(elYyN zUAX!+Kkv+YE4P!ap+g@RwBh)*zBRt^(JOsp2iz>1&Si(vuadQem_%8`_BRW?M^oWn zB{Ge93|7K+5g2LBjS_@0uFMbGa=zM!(KeB`wku3B58s=Vlf&D)U_zTHuPN31>3MN< zeb@0Ca*{=%ftN)Fd%815j0<^%*RBe)U=@F~<($N_jl>v4DYfO;xk-+HXshv%XGP={ zic^Lc>VN2yk4WIYiuy^=M85dOI;92Uw&x}!&ZSeeXY!3i|7HpM{FiCci^`i@Ex~i1 z(6FSr>-ot@@lm>O*-mBah%det{~_Zj@zqRMiF0Ibh)i_WEvN7^GydbXOCo-g!W2#o z(f=A(2chu7Vx-jv*=JGC+ZyA=`Pb8>{ce3VjQR-?CAM}3Ya|wwfDuuF{Lg)?a}jKb zF&=szHo0Q#u_`Q4%#NN@I2kT24E32;rhgQUJA`@JBJegd+TQT)0y_dmwd3C7SDjKn zUCt@h+?J)}yv0g@!*uGhJrYf6hiApLpx}$jfmqwrna#d&7sz~M#Z!@f))|&Jc#D3u zd2-A#E0%ALUb$aWT6u6%*37mt9n_ZSUv@ri1@OzeI9$cf2JH9hx5-rit$uwdT?XUKuH^Ml<4lyhCKKL(|Bsj3MT2#qU52A0lOTlJ^9a6*6$ z>yrL{@uGo4`7seUdhh`i5!CN%GXGm%Jd6B8+BfJGRb~+Fvp}H9-iPunoit9Pr4+n!lZciEJ zMDl<+35+A@Ck!5wF!}CKXpb01H*nHj+gm_aYBRES-5Zj6s&mgY>n=AJlb?$ou7S;< zuJl>F?Gx69gPW@I!LqK%eC+rCarKp9bp%biIDy~P>-jc4aZq75)HIo2S+ZRX1!tM@szcd64XLhV#ObGSBRU(DK^%c)N!yY%`I8ex~iD{&?Pn$0nS zLm(tqp!zeH-KZHw_IFxMMzX{F^{D%2J0K@5q6zNotBS2j`atDjzsny}OxW*>tEp0J zh6P{EY~TpVO0v7W2hCX?u^lMmTLw4UJ)!R)1*Sa7WU-DVaSM^6gzgn3JesuEFlW52 zB56v4oP!A^(8N0tA$O0^F<00i2auoH3$I`rbyvfOl%`BgoCMOVCWB+)j)M@TwNAhm z&7_vBWzn)(wZa)RE30%F@zQoNAv&B^1AI9S4FVrZ`^4^-y`h8gb}th$ySaC%KxdO( z;H0S;=-mgkDteDIxEL8knowM?(Q?CdPTwwEzX)lBHsV z)6(;Dp-3<6G8Lv0*=Ff+&-@SPOGXz-E=uIi=)sI88)HJ8X)d}R(>9j^4uK8w zrusUndrB^$(tfhRc2_Z)6;ltOz{tMYUl*E~*gZ6r{vszw~lkt2OpZCCaRp9K+yr^MOr0Nd2J=pnBSGP zS89ojqFbJ(9gSHdDsYy6Mb$Io(>^PluWct3U(k`v5;fYmzPLzJ>Dc#G6LLM;$x`bJ z?sZ-XYE83)umm>9(M)FFStW4FLmXwdVmpomf!;H6+GQCL{X`t#rzEoQPqNx-D%4Nz z3tX4hq)6x&$??#S${hz96OBQck59ohuVcT6nUai^1t}FBm@llM<5R(ff+jT`Sz}sv zb-SHsj!l0!yDN^>Flg!(f=$kPfZ07askkwirb?G!Pp((GBE|0W3Ffj$b#)KEsZ(=$(Ek* zcX6<1F(|lcMS-Q=XidWR2zP%=Ahw^Jk?~XnO%K9!WFnM7mZ`js0^DP9j|pa>Y42w+l@7@ znr{6o%+`+Am;>BTM(P%QATY9~RL#duwW!V#^+BXJjuSsSIA45L=S`9`rcz#gPhStv zRUfC<*V`Z}t%rpkVH-mX`!iWWUjt5a51v#crVLKoKl%U}G9x1?z@>Q2=h@+ua=$W>EK zULQW&?P9R2_#;^ON}QaUYb}cU*&7=Ch(cl;nI?!fz02AIoNIjq@3MZZcN7d#Q6!fc z{b>SKz@K&CR)PyyZkvI#Pgf|f5tHcoj~jPCpV3?UKQ1hy3czoxil~Z?a?$cd3UF|y zVdN`pkh{5V3EA@XQUCG{b}LS<#aNUlci#+ccfWz$p7i{0+7xP+74tTh0O zlw>9LqBa}hJ|3y~T!h^*eP6dZ(bN}J=L_!svF>`4nHi8f9D&N68=|tZWXw17B+=l4QmGgMI7Xz7u;xEB)1E^;C5*F z3Rk?voi=>cg1MOT{VdD*JvMDMEQ*`uRL0)|bfousYpFjjYxzAgNb+t5ScHB0_UPF? zbOxXNe{5lS|4LmeXl%hTc(H>0R=j&P*nXjVsuHmmTHcb;z5HYQTUA5{;(&>9;u;m< z$Y`=j++rlmO_92~b=p{a-;9g5IV;OiOd6}f$X5X=k#q}Uu`6@&ovxeTR!at;)EAc; zve%r1X)#Ad8M~KuY#O{vJbAmoqA8rISdz7sWYNAMd`5+k!>#L7#_`ysExCo*F;k}u zoIh-k+Ll5sxPP1=c@%Q!4f;j*XKf#-HTVys@J_|iClm?3XVsI4Ug}s_IM_(7Ju~q< z1gjcy*&fPmn7Ef^r;VFlMIb0tZzf_ZP-lkm$?N=4vS~sS6kg}FDtCxKR;LBg zEib|s4f@t~m(;YCRjIh;U?`-#*axwi^6D5R9edD%sCDMxf0@B*Z_+L1Yj8>a9>f?= zBCrp-GF8>x^j@6RXcXco!C*-A`5Gi^hNZX3viM1}QTKKXqarrSK8V(gNN1B~@kpal zgJTq@zA8I6)xtb zG?Mmt=TvL&>Qe#k1p1#ZJ|Wcd%GrXYW61ut;M84yVqqk$DNwM6$7c+r9J8NLEyEW0 z20nE?tXhZPuTYaJMexswi-Ah0MH{IDSiIbhSeD3%RvJG`6X>)jVnJ6@8~5*||=a4EDh?Y5LoHuA0wo4O$6^8nJVJ zWXK-!cm=z2P3S}NcuBdt9G(i^Y1($b6#G&NcK2SX+c~uDBn$a%)qW>0bLx3>YoAKV z+*Tp>*&R?*+)2Ad#eb}ku`>o~IaPvRa=enYyCv(!?io2pkDbsvZ8=*H!u{TPRvAe| zN0LH+mh?VLL@)ESGcFvz43UR7fn4u0oELvEvq5yL&i&z}w9SxpI5RT#2ld%9m5v^D zZ_|Ti-0Yc!c%iQnbzAp&6#eU~ljaB)mis(Z3zD=<1M?9{S_oc8gS49U(m>Na9NEG% zKZSA=IE?Z`!9slkuJb(QB_3mS{4OVdNZ`Zsf+78m^r=FZp+446rNP>oie2+Wrc;eL zB82RLi}9dVA(7pL0V1i~bfYR2)+9_P-PB#vWW3RyydG=+2a(X+QH_;x<6`Pzb*>&g ziF=q}dnRMsplzd>E*fM=wZRxUnN@$CCXqwp#^3(N?iWdg4 zP_WdKt$ad1-a5rV=6wq8`D2qjN;4=L(ox0R_K1G)Ro2{D^6EUPJymMfZ3O1+Q5yecrfhy4 zA$1`vxLVq4XoOK~YJo;shMYnIY8lkdpDZgf~;J_w6*A@;!Fg<4)p04?6Uz(;Ye3-s`tS4XexC+F2w_vY#E;y%2=LDL!&C^pT_6a2H*B z8I4R@gOiv;^x&ud(wN*dAXB0%uE%as5dp(20Rs=Q!FJ3$Et03SojmvQpZgI@UnnQA z1~}aC`3&Nh7Tiz0CzJd4s;>%&IDRW+GTP#p5%3tWkqz@Xw_DmLdhU2%NGjikT@|c5 zNw(l~8Q>G?U9~>clv%!Q??nJfu99t71S4#UUX0eUW`x)J&*I6RZ%eMl8+1aZ zuw1Lg^BL3U`uU*SE!~qnKX^~(&|M+i=PlQck!?iyj&dmaGg>e9^MSQnHn@U(hBBk4 zk0S(XkZKu++(BjrmucHnPk9Dq3C9sz$_GxdKFV&5p3!<4jX~4v_VLH8I|gYMgMv>| zEn8>RB3JmHN)aMsZ$L4kpZ>;unR7q+ujsY@*ZIi)uN9g3uPEbXdvo3qZi=yb-5(4L zPb1=%Bvk8;90b@@_JqdcU|o%;oTB-PVW$%T7=KzShz$9tPi+T~P86O3bcu>HOvJ$= zV!`oA60(W3zF$@TU6pq(@jd^T#&rT9)!vc!Yv23ziX0bUpiflFB16_D%LN$fG(aC|)7MZ)dAfmnH+|x7mRHkI#D%RRQ_hRiOH~&5C{kO@p z@1N{w|Lha)3~71UP|o4r;wLX;KoXM_R8OJVAZEjKJe|GxM<(tkBVX1_R4YR@Gp<6s zSq8VPeC$cmu%YV_T@|N95eV2cIu%Al5eT!b3}~6h`Jq@SxRRL>bxys01j?A#2^Kk&&DVVV1Car6I^I}PmPn4+BXPQqmyWmC7ALO-HbK1jyB@tRX_(2!9ua-0m zqiL%QpK82R#<4<+Vm!TPtISUv^tb(!MFLHJZBq%?{M{#uzX*JyKWiz)K|Tb1i-M}4Y)%;%#y0YqvzC^rhiz2HSA@S3`<3%Q9-kx~Ux$nh zEtRjbTqwl7rc&yO_hw9CX{`i*EWuX&Nn}=JmR?&6C)#dp-AT9kX8aK>MUm)1K`@poEuRPov*lMQ-6&Tg;C7k3ygnKaBmPKj1F<@~Hdu zSzE0F@}TLA4K{e!5?J8S1?$$FN=GQP=H>Z!;uZwH|*AbblrQ`k{f z=oH+}0YIl0_av(Am9@)2fYQud*l+QQLZxvCv)=W9Makr%1b@9!^n@G%G$4u*rBk0s z^~xJ%bgj+}eANpWVUem7*kgeC9*&oxD8RA$ychci)EwVz8zB}8Ixp54G|d>qd2H^- z@yfDt1J}iRQ_dvM#auy>GL+3a&k3P>!(SCc_&dAHjKK+D3RG%|k+|FE-}^B$iY3xbKf$64K#x7&#un z0;7DQ6EvmbYw*+!Evr!H2tKKv!CC&Ml5U;=jZ2iVZ>}f&tCUn6>$MT!EeVCB|5Spp zrOF8@O>TZqS8%6p4q0YQC!mT zV~nlQHf4~fWMA4_9oNS-42wf($K*rN13G(}@nJbf4Oc7+`Fbv!l(1SmO3<7WNPzDz zduyl_P?3+GE*f%tWaC!I{ycCvy~E{`?g$bX<5I{r$1hT31*kYccjWf9RX>2b0?3~K zo2)f(s59dDcpgUL8cXp1NCCJL04_kq7>~lbcJy?Jy?UJQGZS>1yJz>y@KVqZwVd+kQ`Gj z4>~?N5EcoVhotw!B#&)hZ~i+00T_Mn)n}p1&8I;0Y5>dP^x#RMtLZn7dJ}x<4WmdH zGY#A<4)9_C$`;`KLku96AM<2*7Z?;%1k%WR34=+HF#yPmqHCr~0q8&JygUT}JZHV7 z{4OBhgOyikVjlp$AAZON013xnn(u(31#qJWKyQ{gZ13JXFquFpaRiXWtkg{kH5eFAR=;E0h1={3H$4+r-uY`WivKbF z68~GAS3a*%$-_S1Nj`Eu_2+;AUovS*GokcLxu6Tg9n+@e&rrJPgBI zzLWOpSTY6?N~Qpz|L!Xms~!h&>4Wgnb#Kq zU&K88rwf?_m_!rbx_8%JC5Zn9W-hhlG3MBp=bXz&u3#L(;FLZdU~&Sz+T{3^Pw?j4 z(@&1T{t4gZ@`-c>wPP9xRtn~eMNbc419MH@hsLcyWP)GB`Tc(YfP!z%Ry$1_dd&26i*o&rqnDQn z&lMNH51+z%{J^2K$G?V})o*};Mw00X$`T+fvLD*MCO>l9bM$)j0JT%ZOeYktrwtq) z0;?_#SY~ebzF8CIjq1(?JR^<(FI4k}8Y2j)z$ z3=vJ8%PLlTI96ThC-A5jd{uKe|huqvI;-%&~A10#B}Zy~@}0J@8O4NmdTCPa2fV8cj%ZuZ+B!<*4K=`T5#dbkO~pM#2ft+|Ek&w{j+mjq z=3f2Eb;gU3ribY}##)!-FRd2XUaR#)+z@kdPRA814et;xiit4Q$0jaf2Nl;Cg1F46W(ADo4(wD4Ox||1RFUDtQlANGnGjP|dzw9+wrkTM!n5N#{pPjUX z^qS~|6jBYkCj`A0qH2$!wd&0o21|D*`Q_-<7(Nzf2wwSNjE_JZ0nAo&)J|*6IQ3%& z9u~5Vj#@%o#CpK6FiDQ!P})3&I>ZTFx9O;t1^9B-^RlE_6gaacQ&w(vaeQ>tG@Iza zR9qroeV+4U*OwJzk8Gq-|}v`I?oa=48v65ahas-tOF7DAj5gL>1f2!s#8|| z84#r0D6Eg$!x>5bmg?ifxYt6D9ErTE{lMGWMt_$1Ts;-vkkY6$8EKf=_p51*=W5>yWP^2Vg%My34ri zmXxrms8-Gw{Z2sJ5S^SciMqVy6b}q=I9=Ys7qcHD8?wyK5 z$PxKa;;m=3jmzSljPnZDKhh{lV4%7L0oO5(&=I*5#v8w)#@U0c?Lil`oz?iF`tc2r zIHEk+7*{&5F4Gbr{)XD!7IG1~c1LQ~#o%vc{f&MV>_Az;{|-tSau?rf#hd+sw6r-W z$`DExX(G1&L|yh(30G7NRe9<|!Yn=Z#`dX(ydrIsybNN4=jO%7R5C6(ETo{n^QS`A zjQog|*LjgY#rxm#7N!MITxYX>7x`t#+4laP0>0;2JK66lfVUaDC#3MGY=sJE7Grpg z&_?yTmchK1B%60S&_GR}O9aVwSDCSSrr0sk=0Nidd4PMeTM#(h=QjiA$vSqP zTZ&)=dF*iZ(c3P8TSncV8Q74MM!RV2VNx-4I{MHnfqhk%>L)3lr^rMK&ldFR$3kCk z@Xl3xF|6Zuq#mbk65p2DYoi8OOW+|Zw){-~iT|kXecsesQ9d%tiSzJ_nv?bAK3{Bw z&1mK$Iv*i%%;WG*_Rke)FaHXDISrHZE$?UH(qr6SgEAJ>`(S6P?L-pPaSlv;Brhf*12ueS;0vsNAlXZfv=oFCNf0 zjJ^cN9un#+g;DkQ>by$p{>BR%i^0D0gR->?p>v26)RNctu;TDV)h+P0jfs%sb#S2F zIKg*&R}6uZNVX-`h+-2RN5iyH`d%%IID~Q&UBEBniPYKSlfY)gM6VzR4&vc4vp!7R zwl>(CrefHe8C?n5xN^-fx9Hov1zPzg-6oz1SAv8`dlB=Go3z0F*0LGkZQYXFf=BLF zpT%KB=W=UNTUX3I-{O*|I3$2Ov~bO+*LngOy5a#9l7jptsk45ZUmh z!hKVB<+A9qHd-Vk+)rVqLoJb4xL4bCzSk@r9%rD-r;D;j z%=E7wi;HSM)`suj1m#k@jEQNMM_fJ?XJIJg#{;Xq!4Tr+gO>@~@;KtHE_vI%*b7&I z3GIUkP`znl!16M+D2nKHeTNoHp+E05^|tVB!}fLb*%!qY@D*Ey-fBW2wWE;NYLvTx zr&x4HT4x?fgX2lydqaUw73hu(1`5S|s9#BZ!S9eMjeDetHU3I6Im)7oLCVSIrSqcT z-=bH{uD6(yICa|Yi+=jmT$%fEp}=0j=mr_g!o|76+*tT@GLYp%8tiTJo~EsI*WW+! z`jZU@y(iFnzxSezGj+jEm%Ws2R!4{792B`(b=;}G3HTgv4nKFgVXj;Wh?S+EC~F&E z=o!>V+t4#nSZ-#|tJGuCjzaNokeVAB$g;|Uk^eoa@&Y&c>2jhOa06j#`H`0T?@-H{ zKOZOjL16dftXx&fj6Z_1iMb72IRxSPm%~-C-Y(ojoZ@c(;}5h=lmQ;q!DTA-_aj1e zYyRz)?7>xx;7xzJl|#QD5S$Cs$|^AxUexRGz+ad%*6>jg@8?mFp{~>=BjJ3<#&8(H z8cv)V$Ok@`oQjBj!fJ522uJ-YRAgd zFxUB@AB{bmdS_d9VJu>t|Hf9u__R$wGpC2D!O#J*rGi)jL7#j!3kM1D)K_h3O=-vy zXSj`vi+qWldp%M60`9@gh_!$k`ss2W!OyiM_-kaBk0*t^)Dr1+f zp~mC(x&Cc8KIcWC?$V%IOK013NbF$_wbh(=C!zXDJoO=w3yeU)*usY(+@B!00yoDv4~^jD8eF0M>brR_US@QK6W6rN^|y=GhJ*Nx zCK*FsSd2Qu?_>dK#(;q9xUEK_UULtV`9~{V9{=f{J#E~SxQu5u21Uv=T&%({3vvP;%VO)38(Dm`_SYg*L5JB=aJBHC>r?`Ew_Y7W?2`A+|a zrGuO3_g)*Np=~t^SKUUdo`zSHznE_9B@>-&C8@+>Y?v*9sa35$`4=%Xu?X9!z^ufseX=e!+D~nXnEaY3!)%*W<8(ko+doARA zzVR7a!ZMv`I@ZWWw~?KHDCA(<&`t%~(B+odf;UxXmYC`D11tSvVZRx8qs><_#HbN; zOZ2bM){H3bPy3T|jRzy(JV<*uME-Hl>RY;O$-Et)Un zyzq@NNQLxMAU-RwGug~(3n@A_XZM>y#U}V1AR-yfG}6J?WX813b`|#Tey%#bh&f3i zvewOld8_OAAc(-uVA0ia&~r_5ZuB)uR;sX&eXx#+9at2=Pq03RS=`v~a&NG}f|!u2 zF@$8bvYLPE0&t2tOU6QTW{+m0MUI})<}0)MRWYXeT5CX%qm+}BV)=X422<&5Uy|x4 zrt$Sw_=4?l;_Xd0K67bW$wHwf7g$A|6V*$i01GC-DmhZl;i~p44$#<8knIO^2zfAF z00z#Ce})2OZ>=A{I~Y>pm=?bH=p}p%;a;g4T;hoHb;JW<1ziCL7}Kh2a%4;=|KCI- zYu%NIGSKVDx7#Hyl*0akvwBQY%oQlg?wQ6PiuEeg;0?df0gx^)U9Sh>og1lKlq{TA z)64fSkf##wAU?11phn1*9)Tagif|D4mCY*(JcO8+^TthCl!bf1JQiHmt*1!CO)&w* zm3r}g&pe^hP~E;9H>IW3+Q2mBWwEi=U9txPAF_+!R1}C?15TCzYo=uLr~TQvMsKwM zOp20~4};~JA+sMBf}KiG79552s}pLnR%RM!7Do%nW4zzKKpI==>VGjV*dL#)3+8@3 z)WS{Sbo(+?06xhvV2}*#E?;vg%0TlYdtC67GmZJ`I^XvKTj&OqLjhMzxyZttRjr=A zyCS|pnJIO1D#SiO8uqG+_{A7h()W|qR8SQDMO_B{( z_@X}G6jdv)KEu0fVWe_bYh4C;3R6D&>l%{Z{S*#Kvjt@^&P9s-axJz?xGCHbbjQjY zStSAN=l?*amjP?OM7| zF}n(-B(CPos@qO6J5D%E^A8R!b3DL@12IvYz>axsLlw7K)N$_|9maR`Zt6JzLIe68 zA`{k&BM>MrvtlzM4H!xGWTrfpGA!&2F<&Vd&{J!k-%2`x@Z7=wE(y-X-m$0i)mnFN zOdVLuh{SkT1Sc~yjgeYLE5tXoDg5FT!525N1*a}yu0jo5PaIREil57fIGoJ>3 zwMzc+7E?3c_+|b@@JH0AE7YGJ?8=u-{<0g9gh{y+cza|FX`P(+5|OA^s1=5Kh5U$r z`n(>1i~`&qoD8}>GTq>Z4*@$%v5v+9-LCu%rqr+4Nyh0h*pvWinOvn{jNrY-Yqma0 z!|M^58sqSiH_}8xSa?M+bCsnzhdgm_wT*}eZUoNvtH@((eB?cqz*3+)slZQ8*nkHu z=i!6qi$AK9s}xCh8jwhkkbpK{1vW$%^H&M#0oC;$y4=^$?_N*N-?9(A!l06QwR4X5O^H{)7O*MzhgP6Ak!INu-JGP0jc60sCUNpJo?I5D@D*y-eiT_0Bkn%_I%hFs z6lAmk4kg|M@Ylf{&Feb?87)1<#%C<>oq5)Cc&|(QVX|A45sz{&(bHHV1>Jd*nz}}j zn-jrqfw1befPC^dQL<;WC=SGCh$HW0a;3CC#!(&{b zmTV)dpvkl6|0i*vuq1e<K6v5leTLk$cFAmKfnaaSv+r3}x zHRnfGwNc6Zy@~_F6xH>B|IQsCOmIR2L^d%#krTKi-*>&qhGi%5g*}AMtOSey&d5RJ1(_Ib)%?C@lvMUBC3RYq)Q#+<$s#5CT^ ziFF5mQLz~Ux2^+ZKwbn28eLNfRkt)tGi)k(~BkDBeSzG=LMV0EY=|1 zlK!DZ%uM7cD7+0`d>NpCLu@Uj3WSN2Hgcz(fw>(6%Qs(o?YeyG;D^v2A^f{s;ADR6 z0EKFJYK)=37g6!Vu^0hf2>(hR!MnHMo0Ij+J(?DJH;E^e@(!ih>5v`z4zo13Quh9yAo05_A0ls z5s}2VcTEtrk3OsG)_U}LixGU1lq-ocmJ3+wlf6PkQ1TRVrK(4BJ@&hGV05!&Y0##=460!Y!H+&}IG_<>u9t7D3Z z)X?%Ry5+OBU+fy1%STQ$+((>RW(jmpEnQJFJ%gbz9QK_$G*Y6gM0i)ec{J6|-awfY zkCjaxbrUKth2Ya$fLBKrhluq~Wa5|Gt&7U=O8#L0LwXSMb9bt1K7NvyR)jcDXJjqn zo&D;Xa3&l8g5JtQ?n{NJ*IA8wO6&(y$Ag~FiAXBmCi@jaEdDNC(^o=>VCZGMr zK6)N5HW7U@S9pV9vRUSbM*=}`GY-oySdte=%Z4)HFvRtv<8s<5>3uEP@a1U4k55XG z)JiQL25Tj3FvT)C=8IuG?a7|^eLQT2xvewLq)OwJ?Q^p7Jy(0OV~l}&vY8EYz9q{& ze;4)lzLm^ET}5nIn9X4c|1DVS3_4sln=6udU0}Q!(6MfvskK*nWpv$g9eyiV(^K9q z5OBARN_lL!F&8TK#)$EAQ`dYd5XjhiHb3~HSgAdh!t*^`mhO{f*dPWfaf0XgD?!48 zqjA`v>qodgih%m=oh3Z6Lr>zu_@4@ zHX%8amU%si_M$0kKPvqQ4yVYwmL+oIq(?1yW1tQNS{+RXz+IezH_;BGFsc`WM?_h% z!?#JI<*ek;DRyzvYJLDpOER@Qji%hpAg2FKn^XoFC9n9s8x~G^?j05wbTIv1ivGY} zc`sLwAV;kw8;U6MTw)#(dh>5vDXH3imvR1D0)%++lbHV_RW?IH?7i2nCBo;W=kat%W{q*1C$*ajqeR5OIVoq~U5 zN5om9u6H7HXEBX0_5}8Ytot&Wa{r(+pD1B6b#iF%Efav|Fm}XF4rL)r4YvxTVr9V- z1Kz(eJcV@qPQ!8jTrFmL54cgw$vxaCZ16n9O4Sl@ZJ|=NSR#*KA{Xp@=zJ4>f_dlb@iK279dxufAfE>FSX*a0`o@2k%Kq{xe9mSKPf%19uO zh1oca$|Q0tz^Lz6Al(=kpw|1B?7dX*73^WvO$@567)}?sS}>J9vuUw7_H1X=drt@6 zh38Z30VLgL06v2h8=dWrhLaARAPvw~5i@%SG=?>P-&a%r%} zmw46HCLQLoH>K{`vPK6&sb5jz9vc`9vjOf;-06{$e zuzz+WAo5Sx{#Z5t&{TvK@-a>fP}YJVeYP0iyDyiVHvr5-YvhEs)DX3Gmv*7f$H>isVy)@&KrgO5|skBiR3{x*o`LJClIT z9C4n_g>rz0?sZtMGyPis*&dr)bamTS(}^8?8FMVV9eAH6BP(_~+bSaqEXsM@7gEie zQ`evDBWQ8o_+Nr4Nbl;e@sdMV=A{kDfdcP<6M%6}*?%E*vd>$u65Cmm1J>tYThd31 z9)JZ;$C)R~A2822@^Wuhe@+!xGW~?qag|Rzvb{<|(dfXC8l)XB(U>Ihn7{$Ut5wO* zy{gjD`rjSSFEQowsHILXu>Wm<$^@9tU~_+qn_tR^0PrI6U~Km0Jz<3rje;8RdMgzx z%8kFEX(SNhmUNGnH^2S#<)PjQ1!D70Ee0;XELOS|UVOH*AlK|P(3ycv$Bd6svGdzR z1sw|Dlwzhw8vU@(_T2Sd`0Ttmo3&2{T66D8B{a9e-SpKt08!U0C<7JYIe=-tFk6s# zlTCj@Hso(`L?f~8G--*Bvw-DeQqZ-5X#4qR5?}_3tQdkaHRi+tc0wPNaG`4#K`?&U&y~GN&v2TPh82u$$6Lu zb}=&$khk(W3*@c*YiP2-?Gc!#Za4C6K%A`)+E-@R1UX%RFnQYWu^7|@H(0@uqRlPxl@NxRuosQl=cEF!zGt(bRx!f7B3@DQ`HXud(aRo z^;(#jT+Jw>IuMe#tqg6r_QRzQaN~)9*R3{#5!Ui|6O2fJusHd)jp{L!9H;(JVcBj5 zfag{`Qkyuw3-FB^zh|SoL$LH7kMLlhRDk%ZgOPxjJUNF0w$JivRDpM^>Dh+^IX$I4 zbFANO)AVmP+$F4kS92#TrhjDy4cNXEh_>PqYT&63ES|b`*S?6(NCdU_I-!hfLw6+G z`z}@|ATeNYGQdV7}YX3H)enxcJ*7e$fQL_NziSk|g@c6FCV3Bmpwf2vpJ?K2GaC0wF!>uD6iL z#UZ1HSCn%PO!6h zaTm0S8p-oje;wpAm_ExjyJb3dP90sZVQPhRY@neq}Sj`-4XX@{O0ZAQg>>E zi7-lOAu6#$Ip5eB2~M_Z&eL8!Fnn6m+TSoy7&-2L?J~T9nbBH2-!!cq1!>aH)Zq!`@;!>m+vmJPrA59So@T-JF@m)fM+>_69E^(!g#z|9`Itf&&>Zq2;4~Jh_ebi>@ zNA$FPKT{xSs6TL$DsY5NmX;z7GYW?ElB=^rLT6^n=Er6ZHZ^m?nSH=~LPgzc6d z-Hs8%OO=TtnfqJHZh5KCdP9baptY!}+tfuoyOH0Pl(J(GFC{dJs{4pc5=h}ItKa38 zT}Gr%nhb)&lXawmwo9$o6i_I3Kq5Sr#}5TNAPsd`>>@Jmvy##h8{xs-i0qP5e`;c$ zgnJ3~%r&SyS|h=dQtA<57cxgJb;(?@tCo=vzJgLt)?C7T-JG>O(Q9%Hm{KhL%4hw2 zQlZ`W`3yC>V#~sn5H-?*9Oa!mi>bpL794vpPtTm_izb*j8i=HNgc(B>vz&fZ?%rZ* zbstOc;@o_g!1R76A_;4@;=h#sxC+*2#k_@qxZ%aj zb~8_RI3&?la^$}My_DP)ex^$+rx1s|sINMegt=f=ZAN0%eJh zCSC__mzvTq0bcPl?3XnGxV`&2^!9kgnh%#1agUHUD9ypo^(uZj?V^(L9SZtfN{mcv zUI6#<0%>KECejS)+`6lrJyCI@YYvChOTh3B>(|6b$l1v98?Sy|7;9XE40?dujU}iY zDDu9@@aDe?&6<0jlHU*(uVRy4+Q+&h&(QCj#HS$7K>wAzY$?Y=?C6 z3bd=m*T?_`lbA|(XifMtEbX*+Lr<_r^mCI&D)X$abJwVzZ$eS#tv@ec1D1N{ygFRc zb9{|pZ{PI|q@}>Vt7lgA2%T|M%Dg{DmVF6G?_JwN1&pmtxiCZZw{eve-{%BW?<4{kKM{Es38>)rhRjNOgmeX+ z>~bFp3b*yFU3;n==D<{S2vP%P(|&8m0=%14m8bylmhvOcM7(>g8c1aTCXzh+zzi^? zh`D#ay?EuwA}k$v0H+$4+BsNl!Y(?=C+9)mCYE$mJ*I~-hkv#g{f5x07Wz;mw1pf>CVly)=>^9iTnIxq+Mp4)g11&O1*~Iw>H$ zAD{P)2$&0cU9ckqpu9nXyve@K?y{aEmy5lMLM(CjKW2u_N4xwmXyi@gN)i*`olDpV zEoMKWUJ9sA~&^JCwzhgnnSYuy7vBOEcTq}D0;Q@V+ zT)@3JHbvNXV9!8Pie7ANX;e!%HI^Y3c2Rx?odsb>>elWiC=x8KiXdNe@JsARAjj%s z+6N~-3QjZ@f*tNXZjnL0SWXA7uunA~b{@Ei@jhz7T=Is8qtze}Qr#*}iXg$H4PtRg z3{Db{aEJH8bHnX$^hcrB!0#Bgi;w*PAzwmrgzbqiz%FJtg=0Ap3~+z0EcBrh!->dyPTsA_d9cbW ze2IE1&Y^tovUt9wiHH^u$ zW)UD8F0HG$YhH&HwR<5WtxFJ@J9;mecVu;8)1kkP^z{mjx-`c~AC4l}VgoO)%1D>-XU)RcUgech_(*_)7o*)skK za+P|=cQLd;Tx!YglnK4m1;i>FDz-sPc~H?5 zm*Y}N&TD*cJA@DYWSVQu6Bw)0C2$ldMS_W^KBd6l6cnp!*x?GDPxO>|dt@G<3-;tr zBsLe@XZ?{k5b4P3^g+|L&{DgH8nbr`vt$Zmr_g`eF5Ez&{J8%zlSV_*jG6~5)kuK4 z;OMiPBgIiSjZGI9)(XYA%kNs@lu~}Dd~;qdPVT09?zF>V8L`Kg4ZfqqSGKDKX+#nJ z7|cWafTuLZ>^x~|jkBs>M`gFNKc5JW{Yx|xp$+yKN>6Y_a0Af|AXyX-@js5th$g@d zRdz|pnxP}O5p>$$J?c&3eq1>c09(2$-TcloOvmuM4kCu9XL)Lt=A2V?%BLNM$$$VC zF9+jCX>ebO5q>mtPe}BcFPA`whq%3&PIX3Yz`|Gi}5n@8FLjlIEa1E_E#TO zai*Tlepqgvka-9Yw~9`m^@UmS5-2G5a`5!Y+vTaMWV_9hdU)jJ3wOu_vzbbHNRO=d z4$YWP9d4i&Nj7qcZuO?cc8{d?$fo~)dB1RVe|5Dv12jO(9ML&?`_UyGq_ZD_UB14M zvi@PVSLgqqq+hxX6XajO6Ki3Q0n$L#uUr(tsxlTNCp_-f3&%UIGkg?(E~WNiHuXM- zF9tCrD1@?VA<(;|ktU-x%VG4u>d^qdrcw@#({e`;nCt!&$b4mXNu%!n)T|a^`-7pj z*INXO*$;KitYX3VfJJeX-6f6j_P?k)$LLC$ukFX0*ybde*tRpt#I|kQb|$uMPHfwD zCbmwD=gj?ozq}vL>aJQ0VuX@85;lPK$gGtAiOC5<)LcDYeVYv@&bbrtW;w zuwN%nGt@7fs$v+NKcUHVIBP=CY!+p{)i&7`zcgWIjnZ_rNq?n-UK-pS^$p{E`f@;H zENW=pv9+E?i=~RkExZ+8woKjaYCYUW(6;pw*TVY1mNZneJ<`Q&t!EJ~9R6K`38A=| zmcS%~9_4(RfRrZ)i+VY`gI)7W;Af$WSp*wVxJlAueJ-oaJ);^STol&%^i~FKzRU6c zjePypCf`ft>CwHj99s@$UPM~&CH-=CF|<2geB6)ss{c}b&GQYn+Pob1qj5>W=zw=i zOG*k70SvvYunY?qq*DgoqFj!qQm}1Ao{Jd@6Fjo*bGYU{dcIW-I4#wG_CY~X{!93s zZEqaqf*I9Gy07M)ViuWZHZCpw5C}tG-A(1Y} zgg6^Eswoa>tW-ucYiGLV&q~Np4r!XPEnD{ub8-SCylw01qHF0;4hb5ZF$i93seHqOHm|#e zbT&A~QEEY4kCcQA&{6GoiE1}YePGUSB_amd%vPda85QMff(Y3R=`o66PC?d`ELUGf zDRMxL)$>3~NI+n%VVzatd&3-5$Exnx_>=9RPCn-XD$UHy5?PBYTk?y|i_rYDiC|q+ z7!)2j$gid@jGe@*N8-EW^9cL^Y-};hB4!rfNd|C`?XlI1j3h0F{9K=wKY9l zzebCciSU?Yt9U#7l6NCw^?`Lg)H_@5FRiyKlKgFB#}rP-uy!m+uD9zBNIV}fnjTkN z=VYSlK-+u>z@OQ|(X{Bl%HyO>_A4$hGtz3_r!24WRxoX=$ITU?_lvQUz8a#N4eOs$ zj3S>!e$H4}A3G`yimhmDt13i2`8{eUnxeH7#WyP%>{bQKm8X!pX$Rey-W#7kskKjAod8qGy<6S z_mInUBX4BQfU`3l&0!l_OZNVhjb99Y&71($Z^Ycy)b&SRJU(;3Q(@dmzl3aJuh4uU z8Y-^bvA->jDvn7n<%LR}FSIHr)Zj)#U!sY{ORLaHLs4e5!7HiQ8I;URP&egNc)(EmJb1`KVIJtof+R9`V)Qx1E zbezdlEc}ZPzvEnhpO|tS_mP5s(SVrt%fwb6WZWXnXnt>u&qBhS+Of80T|KZ2Wry)B zvNEk+-UEo}O<2LoZX`|r(q8Xv*ioU6$Df4uvtZtEM_fe2s$Hp(4@#arQb#-b5R*=f zOF%C7N51khkk>oy6yDwA8^2r%;M=N_CWPyybshH2rxGnagl2jqW*lDoWtHw@pGkOHyrXbUTjD})Rn@UWSK1UQ z7~saN)u?a);1)hIX4j;2di#*%*ePaNu|obcHxjKBCqZo5r=t}Eo+(9;b*-0jVvQ&* z;Q@0!)YNVBc?hs=GTd*SEh?~bKdQ%GXeZRCWGSu} z_FF8>od;Xs7gm5Q<_nA8ZE6Y#&+T^iJFs^(T`BYBYbSFR<^|?D)^S*s zE>O(S0dTyi=l~@#cr_Lz7C~WilbE%HuBEp*Pns4R{tZHn=~x>z%8s&ifGC_cBFsG~^`=52*4t-0*c6i0 zK_0B|H7)a*`)C3A#yjDH$7Sg>K~262Xgo@DtT&d(%GgoNt3yh^(ilbUN2z}AFvISh z(oYg{j~5C1dci#*y;Nh2ArszJunu@6RnEHz#do4~&o}dA^mrYvz~l?84tezj>2!kj z%nwNS%6+Qe=`Mhqn6Ag8!I2i^u`rH^~jhb|F*6`OwPw)Ud!ZfxE#-OZ7JN zj?7eVZs*UtrTH|n%-{9I+HhR{!S+|?fPAk~FG=Gm)JA#wZ|FS-D02q|fvV;zNDFR| z%c6!Kgv@L8aiL)Bh!y8@Xo>}T30S2kwp}r$t1BHvlaFZj~(k6``m=jFBevm<{dhw+L^f|q!e@9QL7uB>@5+9WJFGJqm!>Ojne29s8k(iMS zU7h!?8t`FWoGd^OmO%}billHxN(x0M#)o#Xxj3&p)g^6lSeR@H;rb2FkdQ4(CHuzt z5Y3Wra9I)LvA0t4c1tY)M#Fvm?i9g2w>$&xCZkd;{&VlxWd6?p;~`z{+hR}(y&Vzh z=HICAa*_P7$qL;Me+Mwnz9ZW$0^{bbf?tV!4U$kIoF>_MZ^%|7rqQLW z{n(kpqu}?%m$F|8lc4kV>VE?5$_@vczed*IgQhz@6r*j(BI|{NrB-?u0|G<0@ zzqz^-0vuvG$1B9im5=nf_l4QhrBY$qY0&t+%B4Jev881kCzIbj&i66PQlxzOU+;C` zUF_QxM^#hY(Q5A93EeuOR9l`&eqSHoY;gjqJn(~S!i6eEUQ}RHiDvnsQ2v=0 zwl5GVL5Xn`q!<6YXz@GGZ2Oh!!v{QykDt~-{(tsbUnW0!SZTb9R(pGA31f74k-dZam=frv5$VxZ!rKv9GLVF7{>aE*#lmD zH;%&J4|^h5uaL@2+shlw007-z!_6pxE#iIdBUHW$RD&$NA)MtXrn;J4%! ziy%M%c4&-2My@phN_8buMC-oO2;U~Q0Dcj5ia@F-yLj2o8i=~M6|{X6;=3R zncU19+IU}J8msfEj_!<=@xzya2fn!6;`E6`iZp0=8IDxScTH~AiPbjcp}1m^4Q#yB zisx!)^FM6^(YaD#N7x%F70>z3<~8+J<&isLVMjQbzzP*-^X_^x*dPv~$Yp3X3(Xc4 z?+N$xG&hjk@eu;VY0k{bYPAYiXvqi#+Hb{}0nO84(ff*Lv(#1` zWn)oqv`hPZa)cx93{kUStUQ^fpwlQfGBSeq?}p!y9b=m1W?{{lJW3!Xn?cp`G@+o? z%XCE@>d&CVcXVt)OSJ#~wHfMkHt*k30&m7z#VKQ3QI~VCR@5_!;AO3^-kfPlg;(I# zHyOdT_OeNCM)g4N{JXLmf>-ES$c9LVzc~r!4RUlW+e>DxaLFy#0OA)=Uh4{C_zFJz zxs8HJj5~S6FIbfkJ@zq+_;urnk&GlxnQ37xpxRsr8eG8jo>3kez;g>Xc03BC#@&^{Q;zxx->=g=JXN#oY2vts67?C*G)v^u zqPpM&}G7Kpb`Cil9V6HVVw-@tBUo9sn`s(St`+VI`B-7@^)7s=uQK02mTcU@q zV&aY|-rI;DG+3H0b>uR6MNwRF{A=YQX+Xb6V8{HDvP!nTuX`U1H-ir5&#N^iAf_01)kHo?hpxm*dRZn#;G#}GS(*GOB-MU5B} zeYll9C`ue-B3U~)LxImXqh$Y?j$>JVwA^&K^(bc>9L)HKw42@vj_;i6Q9ei-eZ#|# zd7qp$+#zcZn#uf;gYIwBl=XB;-Q|~vqVxGpqhBLJ=1AW(x2y>o`?L=rveFR+C%j6v z{0a28FVOY;ag}bpN|`R-`rH@CjA>LO{8Ga|&=|WL(qkQ@Q>IO66sS^{Ph4r3qy{0q zx6ZB0@nTd96n6+}rD>SttG!{GjM!seX?d1kLAr}p9IP77582Dg&sT@T_E(G^*wOuE zgFzo`6{-k*a89zHcPjX2IJ_+@akYo|>VFLmH2o>3e!m)DY93+7oPapTTTtO3GK)^V zY1C0j>NZJ$y^izNs^iY2eU1zM+JoN7e|Fq#X-E{@X4i3X`it-^(?26ShU*jQj)eDy zIOKLsfcE~3OQUF4K+XOt2Df@QHIKK5MDa+7)*-Efk6U(nn$-zmtjuf&SQhw@>xt-eDW9rlzE$qUn$Gt5?#od$g)gu&x@HhHBfkzTsU zYz4vKZlpmnylN;?$TMr=jYU&NJYqAKW!#9A>SpS{WGPc^F;&)5OzTj4U;BNutIl{= z22Tt2iD=ythf0;^OV=hHIVu9Xj}?C#JpNbJh1XcjDTcB=vG!#*{3Y2U+pMyt z?j?K~$tj7MMK{b9{GvMrIUg(>J<-R?KajiC-pfgj63k_6m`hjiMOBSux!uB@bePF? z9P;O0sdH4IZP1JLE5UApTk8Y!;T1t=4y;CQf@y2;NEK=!v2_;PUdM>x&8PX0MNg3G z54!n8w7J&vZr{3gjs(abKoj|kwuj&usYE+%HZvaOjSl{*Vl3${hzk!ozEAbYkOywA zDgW|e-~rO<_c3#xHOvEaBd<811OJi(CgfxHT72wkozS zduwfy+8U55Sta4GqX)bX{vM`IzF-FD-wL}HM{Zc-T5ULr9V3d?P<+6qBtNNx-%)a**Eo= z&|@y+UvcIiZ#w>xsDvg@w5UTs2!VCtF`^*w7v(@be%>bBRfy|1blNIu?a}G~?rG|{ zBmwX$dK3jPW(3TcboaH&bdAQ-QI2YjHP09bufzH zd$+iQGc9$*;C(i=nZ4*Z8RAv_RpIi=2Opx3NlnA>snWS!=~nVD;SggAZi=sTQ@&YK z=e@%!dx%frb;8Pno)VD-Ji52XyLWpB1PCRT&MZG*X_0>ay&emqCQr3&%6+L3T%n@m~7o$wqw|XF6sXKX9*RfKHqTc7=ecyuiUL-Vf)6_hN zWI(JRuX&GvWcxa_k4Ley7L7;YU>Jo*<9il~Yot2^GLK591QQohI^|sKY=^vXZ8g$0 zF078+wI(dxL04169Xf`&LJa~Kc7W;Cx_OexC^>ECL&A^kH=0Q(g1s$SyLg(_p)33) z=bRz0gA(GYj}!%Gp-TnG6H-DEEd&p~+|=7e+&8=wzRv!YEmRdHEBwSIOBJz#m#Mdu2ui=zr_v4AY$= zcn5#)I&l+%yOx@B5xs1YkCs4Tep*yD4bJW@?7Dq*5rL8&wjB=V&ngVl z38v2ag~gh-PINJ9TjU$z5T4O<2kgMYBRL^i`rrJt_Cna~nkM#U{@Aer!@-i98Nh};HG5QUzK^YP@7~R)SG1w3XCzT5(4;`et#i(4m?w&^xdTe4hsBMK-dz!(|iv+`q7-oW8o+ z-(;1_%2W$?ngDfp3#_8vV zew^##e1<+%3fj!Qq7vEYkj$A0L@eDG?rVSLb868?H8$@la&IsXt!+zW5iAU?wTWlp z{fTNkhjp+8UgB!k#MyQn_4tT?|04bSbocq-nqMg=v}~l)3ABSPl9udojkd!T4(YUy z(-2pKOjaRMgwq#}1L3o77W5X)3Gbp}Ru~Y>6pXuc!#z?k=+PvfH6jj_zfyF_Y1PW2 zl#953fOL>;Rh{!FN#>k+L_Tgi-RJGm$VzO9y6=zL&uS;0j%u#WzgNuQWJry;AIEmk z)ghU-0-~Efa2#ZT@+W1n(rs!BE|u;MR^`kNWa#$`WwJ?zd#n`;%Ju5FOA$&=LpBz} zQ5=8CB|F1av2o9jHluKU8pCzgv~PJRh4OqWRNTtBBd@C`Ewr^O1`~153K|bs%6RD$ zjZ&4FOm5Uac^;fuGRbId{n_1EWv86iE!heF zNcDrGuzb|2rd38qhNbt@kXhNtMMG10CqgIY6tMmkjl? zJ=gU@F7A*`*b6-d(0BOnEAw+twr`9x!LHK!ck!1T?GaFFx^IEC0}2@NzMZ3^`upZ- zIO$GZa3NZo!<6y@?mR9dE}p7aT*F`zD)G)SnAa%I%$%_R>vF@h@5NEYp#QY5E>nUJ zz(m2cVsY8jcqQLV;QYvxf*HQ_LUzs zotHqc=JSoE@wML4`;Ue-U)5-6F#3POS3UoPucEUmA{BfAXiIIPEQ5lU08X55G>CiF zw40gqUY}h!4f#8nR2_gWjRuUJOgc)CPOgToolF|9r!J2MrX4NfFo;f@LkRyC`9Duy z8)Mr(c0m8_HC+akYy>{>O{6&E=7z$bPp`u!zt)y0e9D`YF%3{VH7=OlONx&7F1~}o zfR<8V^BW`tZVkRWzC+V^&b!U?V^j%c+11 z$#4`)p>kFQ)xNSFve~lF{-m!&R+~UL3xhjf_6x$GMm*{CJgGwp0;<^yt%GU}hS?Io z!*VC_^m@ynh8w8tIi?enQ1qxL0)wHZJSHK>K7@41b+WHCIb@ z6lZWi7iA9wpOMqWh|AZ^Ep*$8nC2~e{=#l#VJbpwScrVfp5ND*lvRdmT=>0WT#`L) z;+m7uf3e9r8qFEAVj*q~#6tNQrPLN@PZ~V*ibwk@$%)Isv-UmBkUr-dK=@6wuvp~N z!RAOS#aI|o;?zAjymQ{;U29h!&2tsx*T|AenQ~oASroWo>ij&SQO^`*U5XJRkw(Eq zDW`D(ndP}9I^6f=ua3$1DQjdOyOy5<#_L76eH=a(xs=!7MfQdAPaW&k1LwLo`h+?C`3; z4r8vj!06sIIdM3=dD$N9qehsGoKDb6y&Ov9 z=*PRn7M)!+j&5-U@}GXhC&HoHclB@+OPW?M?{G@|$-^^7?6|kInfNtP(;9@Qtnj%e zCHSM8cMSwsijzN+Z4@U+SJ8l1>By8*s{yl$)kC%;wrze8GKZs-{9B>DG4!}23*FqO zfDzDz@A*39FiWiLvt*`LhMqe62E%FF2p--{C2>Lkwk%&~&D?+DVf8jwH+K{aDK6`= z)~@*+ONLml?({8pK{t3W)aNgJOKL0{4xE{(%R-U6RBhuD#G zD3NW$u!c!4@OWP9>xp}si3te5KXp#gefQ`)Dv5)B$)2Jkd-BTc2s-!&)w0R>Fn78h z9?V~p!_-iY#A;nr_URWgZfZr0kjjSa-qb4K{n2WQ_0sMK^RV(9m*E$WF$$fB!V(EL zFJ~W<_bH}c9r_s`Yl-`sW9kCH=GDn73eRJ@Z#La~9XnN(FZawCQO-CCnEL4&5dX<9 zq&#Duy$I6TH)RNDe^ISE^`ERa&@}s>aM-=>^Lg*;nGxpudS6|CkV-%A?Vu|Tn`QfR zg|mBUgj*q4k7g&6NuhWQ%1)_-HV3JDEHWWP92QaX4onWYC`{l;q@9PyI2}w5ov02( z981-gIi;VdeK9fsg;&TM<6MNgdDK(emW>D~MO9I)gyYRwaPfQN`2v*LU&I6bmZ*!C=RUETSKCK6w}! zc0y|F5GYDxbd4qfCnakMDK;as!TxC)w&^s_!T`?kQWLLcw5*L=B0#CJ2dIDra!e_z zXoO;1Ag`@R6L$U1dcy?CL%t|A0Mu82Qjo_O#9Xz-ady16k>*fkoke>S@5e`kmkz>EfGp zbBdVf@(Ma%DIk4xQqMh|JS(?^b*3kNrwhE2k4cmOtb6ByYoTe7oBCGOLhfTk?bizG zdHVOi4=0+Yoq3jmjp$R96>oS`@Knbn#XY&`cW*DSionPa(s|UPrYomNc&h4xno(&4 zlt{S5wqlqq&RDM~gA9ylt|+OV-#X$kkXow#1@JHD`pn-dQ`D9aYu0$n9~ z=}YF5qF0|V*0Zw?UxdZ(ND9(#n_!d$dm6-@ui;Sv^Y6}V$eVjIm&#I08wO>;k{^vv zV13z;)6ALY$(S2Iw{B2^2Tue@nv+S5Ifz@>01T^&hp)(WN3VA?KTdzv>D>#du7_w< z*pk#FcK-$6?*=(%V!qWBab0vg zbkXf)ODJW&!WxrXfYuKzG2{wvMoUZn62BHMPP=kc!Hz14`zmvB74u9_FeR-~AnU8H zLs5MON}(Fi_%LzYTJV|~agJ6+?Z*}f%+0;`rTP%bx1hD@d}meQnPa2S5jZRryoA1s z3wjDn6u>M_Y5Kr1_TUiV2fwz`L;UsGUA?;!V*-O|oA2N%`@9drnijE%^4v^SL=Hmb zfJoBscT?|F5-+<8=n@{qrHx9=c|P<~8bt>=dKC<)2YWrTmGtC$^ii5O1+k56BpdZ+*N(T&-TJTn}sG;3DGbr-EZ`g>%+_3sM-+nUqeF}@!E?25tFY%)9S6UG!l2QNU5IBo!#n8WyV(MbN)q0nE^YUkmT zexN_C_i}&B21>Q_5Pyk$Qyu34(|k4?4JJT(eyf7a1RLGN^u-Z59_`+r;mDp4`@GAC9=(b@%c_wgqlq z&pt?V9bij}3neRobAcgB+X_o(gHveyJARS1Zm%UJ8r8nz)i^CYxOWSS7UyqY_WJzq zxQ!#Sw-N+D}@rbLmzz_ zjy)r8>SZ$%8b=_&SeqU<$##~oMY|El0zeE!cXNBx!=3G&vct8~7hnUbFR~uN-NMlv zVqelwR`;?((h#mlDFdZjirNA=3WIp4!n1d`_eE#T_2vtDlV<1!ne1~PNu&;s?u!5c zBgG_L;L}*QpVx)3Yj~We_#}S*Iy8F~HgxU;>+6jH(gNi4h-rfm67|ajkyV|j*oaia zEs=`$9ps$MG}#vt0ok|hQ>l}xK;W4G-8WZ~x;3PLb;|%75aU$3(Q%g*JkBY^&L0av z|CE3(II~ntdQ2$M;vqCmS4+Tir?@8+HSbC8PSwGu)UGP8pGNkg;Uq-je&Dd5KCBg# zq+&rK2*hvnhb0ebc?tUtN^ZDaAQ>zRMH%p$+z707A&VJej{aoTD<#@x*H+ef@tC({ zp65itW6uu!*q5hUMGg#yP?<{QlXTVYjo1%29xrYBAx|8CV$n@suUj}$5EI%ZIrxks zAX`~!Jm|+-QH;>u4st^JpcUz*8I?*5ILWTyY_mYZ26UDXziqU3`;KMDxkP108tjpj z9-P*t>&nl(pLUSVFO&V-V4FT{b*3p0ZyvJ)ddzdj0Uo7L(-(S>Pe!wXRQ}fiu;zzx z_iXRjORYRm{%BzW&GU9()(HaJ!d*{`NSGDq;h=0qwruP4OQ%0W`ZoLw&Uh-l28Xpb{fSChRiUmXeARa4z z=3T|5oqr>R9s5#3Nv$Asx6+)N|LPXJK?P~~u+z`e9D@Ay9=qEC;>`<`eA5oJraTPW zB!2M%PqV8DWO4phd?xmg|C5|VK=1pr00RSI!Haw*4 zV*anlcv<}?nK{b`JJ1txpu6#u2%Dg|h8i?IdH)2GU7>}M+qh4okm}SDt+k^T`GItt z)YcXuhHzC+7u16YX{$o67nbUyrx)>OHSFoQ#XcKJ zA>=&zg{qpMrW0W^$$=16j$xgbF6i1&Fa>nhS9tub{>*KdyO^4Ha>Q56e?4|A#6p0V&FGy#8#oU}O zNlr&Zw_`RUT>*mo@z?^Vhf@?Jkm*xCSU)K&y1nLbWG?3%V^dfbC;JpXQ#cg$$gi>&Hf9#&03+*AH!7CDZ~Ke` zN9ua`!UBiIzp0j5n4v?0V&a$~$x|pRfuXhJ4;Gj*<11MHc$2gSV!(K8s$)0wbRt7p zvIi#$d5WKUyrYdL(AE3wi%-8y2R*L(?`{O;g4H_yd}>Xn<~zApy4AJ^${Y_zoXg*ms%PAFCGOwhJ5XgurQ zs|$qHk%~Iu1wvk_)d7Fr^h0-ZA@3Sr!b%H(*sRyC@0oW|;i$!f+DS4kj-O+yCSDl4 zkay)aq1{+GREq~*SoAS5|EpK>VY6`)bW0-eRp_g#RHDf&9>g<8^;b4L?o;L?(}3>| z7~REV0<(_i81tikpY~s9D0DFP~RP$4!?Rr1vD2=ir_s=ip zp9&K#7{cY1Qx$gqE@oOc<-fX_KV0xSCm-lLg6lb_b#u&0b+M!iA)11B={6+aa5A6c z{knRLikTz!ZX0o$6JU*1~BhWozVeWy$3DmKH?SW|J?#+dF>QfmmVdGAfoeB)uSPxuv2~H{7p&zipi?&^ea;(plQPwuHA|2Ku=%z#+;CO<_e z33AB`+>ZfZxYRrP-SLI#f=MQ4@4CN;qGeuU!x5WfiWA83Unu zt`|w!A1>dJI$dj0m4NKP$?pOn`;>l3w`2qP5qgA@iB`1eDl|xmIlSixOsGT`y)7s3 z?|^_eiOjoi{+EeQ0uxy8-MtEQzh0F5bv^~gXB6!mS~W^(ni2B0{^&Ne9+{qW7 zhp%Hl;-Yijk%VJCY)!FUiVGD5WGd~(3jw=Nc#euni|g4#|67tSK31W?57gFg+03mK z;l4__ti#->4d9!Z*)a4p1v^VE=vKI98d7{we-1G*dVB|jJBi+jOEM$9c)Xs;;MFM=ev7ui zr=^-MO^fcDF2$Sn&x3dW@q}%Ljo;!|Zw7azf7TBKSR;Wt_CqIPjRq$}{>m}<`34hz zU7OOU2>vF017qu;7=TTShq=yaJM^1Ki3g33HIIe^yc}J>0ggarVt`=o3xcE8qLM$wdRkn%n-c<0a6>K^6WBI}V4?(qPF64oW zUO^lIpsxZv6tM}F4{4M zVg%L4kGN;}i&Bj|rvG};mF=6Tz8M(V93R9jM4Kk~=&~zY?!y(VwHQeuwEFc>mp`xh zKvQ61dz*0k*j<*Wm`xhQ%<+==6Ill2bW1Y|$1v%9xW@^Sa$|kK`=Qw2cwv4W&=^m}Dxd9G>EQh0Nl(cO$qIJ6m`9$Jxd98Ay|xjYg6YvBiAacutj zkT&39kt#G7?Q5}|`8pNBuzaEj+vHyD%yD2w!|x34luXp@ce_-EP)LRfla_RsY`Itb z1Nd{CryQYQVBcy@5_iO`n@ubeqcgO&S&vOWfsEZT|!1ox`?7>Ab({o`4xqr?Gu(+ANOe|XWx%DGZ2p{XrT8? z?);J6HO-fM1oZ{n{%dJ8f0RwUeX;FziY4OP2we5g@~s7IBc(I8*KDUM<@?@Cb<3sH z-xW;r#aD|SQhk#4=)_9WA1r45uIF3vwQb^GNTbU%MGi31U0S*NSU12G?HR%vK(I{t z*ih63IclaR`4>6mwbi$wgZz>~P?&o;iK4C);P63fF$H3=RbRr2Xi#o<+9UfXw64Y< zzEe1(cYC47)~2rlL_=F7!w$d0aq-R_*=A6{9gzI_DiNT0?(;iN_dkm1?(S7l}| zxYPxxyO!;11w`};W*Njqu)OOyh-+h-84sd4iyua@c*10jVl1GmQ}7UJH2)m1%Wq zE@7)EOJGwiTN0aMQQ#~YhL{2V>-8aScco2^uPahp!5xnF0g7MYRfd2klc#6?iSeyr zi{=BQ#j9CyCm_}Lx*I|2tpx2Dgt&_=O{fbIqp;YyKpLSu39%dU1gU~PpBVSTeY8!d7(9+DkTz!Sb{n@UlWOkYU ziOHLZvTRHV=E|y@IZQ(7B1}2ai>Cf#Y4-+hR!}aS^8MfW5xn2*$@;qzfy93TV!B>d zKt81VI?}F=)S@w97&GsvGM^Rfx$QsN|40_5*HYqn@-Q+0>3_8U6JE{DYTfkwCQZdJ z6HEqPBOuWC*kT~x{$rg$^0IiyesiO;l;q!@^E> zjcmU!xQ{S<(Tj=P!$T__>mE*C@zrOzDedHVocv+#=cJm>njSGHeY0mVlkF6@*!Xb@ zCAuNf#vvsu^O<$fEM;`HNVdx-_NkjVW1)QncI{j|C0yr;C6N3498v+Fz=BmtgyK3z zxdN|OBHW(e-J!9!t@VOWD8-CIqk`JH#vgo<&z5ebY{m%n@;}r+8|>y9|DYzcQ=%rq zFecHxEwoc5H^?yf=PzkjEYin{<6b@^vdNsri1oN9iu*^(S&CJ-MGs>7C3k;w0Jm=D zWC!4|Oaf_TaLWdS45v(e3FKP$2)tv3sfM`9&E_tI<38%rsTxD& zXl>kMIg?HR2!Oe*yO$k$*A< z+$U{&@L~@K^+sY1yJsp{<1J_K+bj3L5}2Us(}N$e(O&9HxTk3Xnxg{qo>W_=gqNwYR$;W5i5I zzXSlu!hRItXuCO%MVxAB>^^+!H5Us0BTMZPQP;BYJKR++e{ekmvs3D4-fCNQ zSg}JQzwgvw;AY{BE_F#t-__!A1zm&|C5zr%oP&5pC^$<^T%kH8mjBzI&wtoq={}vU zk>46M)hq&Y8%9km%gb-QU0Y${Dvf+n6V#tBWN7ZF(O6aoORH+><B`As4TozMFW=IOpQIe(~{PpH2jLQoXdS$MUfs@?^$|s**4LL`! z>HC3y8OcM#q6U4T-QS)8KaJ1Ry`&4_C?W_%6XW%69|n1w3$}JK-%tBX8=Ac^t|GlT z8d%p(X5hAtpDD@)y|l>1H?;A}BUI;Iu*atUt(_ch)l`S@NKsT=)mR2&nXj$Z-=(lCH zF&PQo9o!k(7MRb2p48BokT+q05PfKwpPRJlfHF^G8V70rHTGRUYDS|(166Q7N5noi z(B~Wf3_B(c98;I&<0+LRiUAh?PLAF=S)$zo9tQJCxWa|GrP@wegS?$6Gwfp~c79V= z#P+sGSaHxq##vc=EVPTN|ET>2=pmNSwhTnVCGaZw{HtYo7ESv6gz;Q#`r6>SHnOW# z*mm8Pk3*!gl2|}$Ki6ntWY!!{xKzYduS>STwV%Ayq?c}EGAh-Km2B}Khvb*U(H?s! zPZDb9WwUGB(9QOJXRabCR2F)s6%{!q6eL$Nsuy&I6l}?uj&+_$l!XkF&+DY47L`y9 zZ+)-u*Bf8FRK(MSO)*5HA4ajLqiFmeh#xLQzMW43Utgt3>UW*xNoka)w9l0P+Cgnd zMWjNlOGT7Iy(XawBm;{Q6FyQA@j`zT_df&pi$xcN_=^Yodcd2FW}FmuoZ^+J>U$U^ zyz>xTf~=km_Am)Ub+2bo>~Zw)Z}nzGQA)I z{wqAd9;5SgX<^#u)`~2615@!2iH%6vBM~;|5^TKt?NDvb_6pG0(=((FJ>41 z!p{_o>A_A1oa{UjH5Do3zvhW6UNBc_?1QRO#;H6-T=5+n5DHX#gjY&Z-m&UIzdw4fn(CA(nf*?gP62M&)+pZDCz_n}jS%0YsaaG#Fo zKI)i2Dk3V)$T;2nK~q^Xi>iwRtT-5r;NNuXj*Mg6`7^8z|Mx+OkaHj-(;k(#0l zrMn;{-%O5X)+fkKqa>u`0eA*&f@}l-E8GEg{3Qc25Z%TN9R+{rriXTc)x+n1KLu*` z*b)Oh*ha=)eF)<(|Cx+AgT}R?L^F#tQX}{)L<~C>wZAv(z?93it|CPnVhQSd#qYI1 z)r9Fq>O#MO}f8U!&}u~KhB3DqexEMquz zcEVA>R7Q15tAx&67&xnSvEh)9Y$P8KeU-V9q0rsf-4hMPUB4B~iJK8&Imwu&Y%vs+ zwQo4v;4+Bkdf00UYWE7-exjpibt z=DzA4IaEJS5H+;>0JW5$e91stsmPj{$ON=|CQxTTWo30LsUC0R6DYK=x>x^}7DLtJ zyF}BkE<53>!*eJ(QTrPPcm)ZLiryG3C(I&+RHVG1rrHRQ!QZcTvJ0MK)GdX~fJ%Y%TjkI%u_l5aElQ;FG#}Te@gpKEeLbGuy#bm&nq%IN)EIXext~JyoWk49#-XLA$NMk2l(;)R<9HpSKq78l{Fygp8pJr&iK zgH8;-SARDJXxY+w=0BW`;QxF?>MWcvahd7`w{e`q3N+ITKMf)11!1Fhn0GA|cw^g& zb$z_n#^tVqAGBivW)Ddg!GLzFL{9RXt4QHq2~3DHa&I942F%^EO0ELLrAA585U8{- z8;LpA=Ky*oj0o()fae$4I#8r%83?V&qr*Uk3)fbZTN#{RAE|6o%e+ zfv#xx1+wD+=3ms{Hgpu2KQSvMLD?3=ZJmMDy|l5B(DfQPiUH59YutM0Yw+Wfm#VHM zV5CVrVHH8|(}bopWfADf_V`==ZzMhra`~xQy2Vnfi%rTNn7!I6S0H=nVCVw8JBk-@tGG&eIE z%olv4;Xj2`yS4T}K9{FQ9bLAsX{Rv0=_F zJqevi^PJgOR0SgI?8UuoK(>N6esYbqTogyO@wE`;*vqxfA;CamYFe7CZD#+Y3J z0pB{zwKOs#QeSw&Zr*Ty?KiwOyy9ayLiMCOD2{nn^Abc{FrUc)zTh+cqc!Q8RUKo) zVten+ofNzqK`0xa&SJRQc+ot{h%KjCoL3>T$MXG>_#n}~KAaPzpg_)s(pgZu0_ki> zWN%K<6f5vSS}@*vZ^J?`^|WsHiOEzTr=ri38bbTpo!C6xnjVMWonE!3Hi$wwHLmC_ zE6QtNK3A!TavEdv1{M!$D-YQ2Be<25#H>M7x=sQS^RY!B54|w!djiHNv$>$0!pTqz zw=jKAx7<aI!T!jg=YBt~0SsEW6n(l$^o~KL?S3S@n2Zp*3dssna&ulp3PW z1;a0i28N;JNi9fw0H;>ujwfvk#DdSmm-q-`qKi62W#9=fC>*4 zZS@BA;4qMQj^Po>F77`gVzr?+0w|D zOs-J$#8<11Hx$1BH&)t72BZ+2>v1AvQqLzuGKR_bHK-lX?p~-@ii>rZ+^+rJ$OE+S zxI*(ln*3Da=q5sY|J_V^d!z>-KoHQn=dcpuk$@`ODKXmDpA}^qtv=a@pJ8Gb0ziz2 zTOQC@9H?%c@GKtO)cGiuh|NWXraX*@C;plQf(ZU?u|GtEBtEQtM;CYNWE8;j%J4|Y zH;kV)FaBQ)!9kr9wa}5soOWJu@D!@hi$Be6LsHo#f%u$&pbTG)t2Armx4tUV==?C5 z#2iIl@us3o`!`ckvAcCA1h|ut1Jrey;`%HqiM0T?a&c#8m~1b!WfTe&xw3<6dL4C(qExduq@s}$MDs$x&%Z}S&h zHYfu%z@_a-|9Te@uB)0!>}mP+4(4qALRgEU0?A0~lF0I&QrwxjA&_=2obR(v7vlzPj28`_3s12~NE%Y6>a zn)ro&?Vp#OBq(wc4`e0iX*77`?M?CrQpbfYaz?R0+F)JJ#e;J|l`jdKYyF6PtErpe z?||X@Wf9T1CD2f#*`W}>HuxS~``FA4%qn4dz8R|i#9E>$1!N__^yLBvm8ViUgYUH1 zL@N`xgWh~?{l-R>hPU@bDmTjK)P`vDo3Vl1V?mwTTeVhG?1lKIW+k-W8kb_9qE4)2RSzB7T|xjdvZ*lIGu zyjC{6jT1bh-r7za>z20;^1odQT`6DHY;BpV^-${>Y02b>Y9UF}ix(+8gC3ABtdtly z)rs3f9O`-G7r6(~J_PsW9#`ow|5T9S0(YuqVhgtfVkz8Lw{k)E6o~%k5=UOzK+rS3 ze7`0%jwr1w-rF0Cq$&O-7AoQw8wp0pP?whoJr9s?a|FM)xS8lmcNC%;9z!{#y*Sl0edY+QIV~FVcs%=b3~s1%>UlPk?c7}80T~gTWIJC2 z=NAEFi!dHm?x6%X8=MgMeD2juWAYIEU+Z3M#OjJRX8e3^xt=ucLoU_hzu#8~y!kb& zj|k&o97^GH#$pLpAsr{Wb*qvIP$a90c<1e0&vRRTY?dAqR9|6`e^P!GH49xYpLL0^ zD7m$|Ki^MjmL)jlyka&;R%O3B<~L_{DuMwTbFiC~#5Z`SXV0QogBv#?9zl%ikbjxw z7A*>FFpng#qXne8d2QJq0SOYH9n=YU0j>T2gKt#V-1-ONf-k`4D*~Yng0tSO3Y6>x z^byr@c_hHchLMYBU9>Gf2wKQ8s;~YXUur(1cH}x90~fSkB2L)Dtiu1XhtaIU6Sddg zhFtoB`dX>J8a^QY)?EIq75>(ImU{+nbG=;ux1Go}(!JRESsMwHTFs3!-PO|L;5v=u z=AiCGee1VdmSTZbkv_=!OnHV+3T8$#)>LIm!z-oGTUfZnK#q>pnC52&|HxuV-dcol z(IVRY8?lG4(XWuU22T1A_nWW=ZxK!?026@yqK{AVm^ot1xW7Q+AK_>5ckXV^nxFJR z!()5AJEco|e&f``_|88aedBSs@0%=09xLSVN`%7tK2ma8qsvNRG1d;qGp>lBPtppx`wLC(XN#`Ll!;i(6==*7kVy-0aUX9qIN!po84}HbkNQK@+j4 z9PhkI<`dto9B-j5o5jb~Vo93NjBhdKCy{JJgmlw~@me8{hx45y+@&I$_3OKi)>W`6 zc;g57gN;M1t4Bi9(a-JZjsqavA>6vR#ve<~ao`whe4O65zGFh!LPB&{yTCxfADU+> zd#bFG3q0ES8GG>0>GVx+*-eE-g+=l%QIS=s{48O8$+8zw^i`0fE3ALO?uQ8PDXJ~K zCMP5i@Nh`8#=x246=SnwQIY;H^3rZE zU+1tF`{i;fWtn8qLG5{_RrBh0N^!W?3~CCN*?Srms8Pq&Bov7Rr1LJ=NoUC%^Q+|iCrbv+AxDzs%XuFR07}yRe9&c&WEDKg(#B%ENhROE4U}6H5JurpP1$mTMq7f=OS!yJG^mz&Fi$op)!gnu)H# zxjfdzDH*KaNAaVO>USJRmFxXGbZB#?c}8Yfm2{oW16dFbg?u5)8eVkxy|dDebrjw= z9JsdFrge)9|MU^>?fSty{E(}wy!%tOeaMJ6Du;85?CLoDd&VW_LE`GO(^D_%3+n2Q z)d485+qa46`Dj-tw3edW3m}se!evZX;t{{A@|Z!&r!Ayi(~@A7{M}@{nS@o z<`9Mr>0K;tCA6VM8usQB*9Hw=AGBV~E%oQY7MyaY0u$r{9agTE)HtnjGHBD3-1l6z zs&eqy=Nj8QjaE!aFCS+|jm}nGOoBXPntFdeezF+(b{hl3pMr#G3_*N$;vaaBq?Co} zYgVDv$3~(SnsY`(ONvj$$u8FB8BR-`n*VkyvGbb-AVapkJTIAQrQ^&7GARR8ICNHP zcB-x8@FT5Pr6C#RYp;@S+$-%2%wGgZePGnnaAR)&Fn|g=TB{YOkF;2JAfB@u7*6($ zD7g?0!)9WP?O5MLbL6Ghwq_oB!LDBD{Ac7dWEfVC@jvK;M)Q=jJU%FX>(J{jz>E#$ zFv1tycV-q?5OWDbIaM6U)Em6C<_60TW$HMPm)=3DUa!BFt5w~9%%E_)b?Fx`q{ylB-05ju>6}yRBXr1VtyTkGk>`jaxZRR4m%7j=#toJ(VFa8|_irD!5j0eT%SoX@vZfEc02p4>*}0k+nIJ&@UM2d z?v@-H8o8iy#XT+`g0|6}=lmZaLfQ}k($n}(J}Rs^RwnH=rwN-Q^Z7qQ#H8c$M}Xa! z2l%I@K`V)Aa2^8utup|A!~;V2it{h6;oxM89XaKZ=VWZS=c?pPcsLLEuql5cRi=5d zoZ)9buOS?AT>>sP%?v^-ilE^lBx@~@5FyuO;Ykl9L>%>&@GCb7yc2h51r%00**g0a zSmvj>cZ=g6z-$pAodkzI*pbzmpndr>z{!?Dc`?8Io%)W*-= zcJKUuga~sRFWa8n)W11JaYnm&?vj7~jXRapDJ`%)m2i+{-dE#rk=&f+!n+_9YQ*rK zINyHCr}FYI?djg>?k>AT@40kt;`fG2KwOgJB`asCKsmbD-w39`o{48;S>H4#JcGhY zM2~5*bjmrqvvsW*Lwmpcn^$94-P0HcModvMTsu#HoooW3meydeP-c(9g4zF3@0Yj4 zEdGwGyP8L~6YtDh)}Smry~7RiUU7Bd;#*@XUrK4?$P0!n9i79=8`MLLX=PQ@-qC}N z&A$sYS_fzB5V=@FF5hO&jU;hwZT3qY{BMeo{|k_aLVGTpkB`;JjHj(`osAjfci}qX zRj3;BUs%U0A2l&!+PA9zi&(?G=gmX-4=G`i^Zy}8bYR4U`?5-|UyJ;?2xM^Zc?Sj< zGJy;DRu@Vg_nE7KYC#v|KG*mEkB}f_#zf_J6Mkh0C+TL|M2 z9<1(|674i1Gc#wb4nwXNO|8*fJ4{GA%G)Zp9@pSFnxz!ZF0$E$qYhf(Ix&u*Y%imaT=@#699rxaXcKFpIv2MfsBB9s+(hLH zU9OZN3au(7ycs@6M`KbG&%#8Vmt=Am7o63CrVi^_mO;1`n525A7|h$_K``o#ys*%e z&zty+QyxH*&zt-PwQ#DC--h~%Rt|(mxRSZ*RI95{pC?`2$@~c1n1Jw3_?76BJ-v`@ zhCOQF@hR(-7(<*X=ir!BPhON6DoBndfv&3{<9|ewV@A1;M9dX`z#@1|oFqZskQRt9 z|2O7gy;7Gd6K(4G*6Tn#^}L-QMFm4N)9nv zEwp=#N*-}|L)H*#N1PdS+9`LDq)4+K>`(rG?b3cC4xuV##MAXC3dGMyN%l0Jq@!fy z;2EPbl1)J$S+2~hR9T5u11Dh!j{Q91(t zMNwo9>S~XqGbA3+3eJ*Vk;qW3h83pCekLts9-GJf5Wkx&Ax=-GC(E4FY!N+6KM?Mc zrYrHI(0?$Xs4Di85tO;Z_0*9;di&0JzrLxAy7mRxY?z-Kl_4ex4IwX9p5p;URfQoh z7CtEmo%wMB5WOytx$Y!W00k9684L;{rRD^nx37R;p!0FIp6fSQ=DC3RT|NKn_IJpo z^0t`tvQ)?uXqf)PL4EB*SWUd$hh7)3j&*HV#Iu-ix{s!eEgrU$WXp_t>^|Cv6SgR_0bdLKTz1}-6u$# zu*x6Pm+*5~j~$=~(8Mh>*;I~X@%jnty_*BUSO)-fW44iX;>(PK=70|HzXCQt=~`;> z67>^~?SUni6@WV)KS7?xZgm9%+m%}&E;zA|RqTtK$VbA1bYSx^s?YByA{foNHhBsE zlLU3Ge;?~W@?lg8*c>ECccKv!;F974zuYL1xE^vBplN1EdxAs2JmSUP3BVK>?+ppi zE)Fd;PwbslVoT!`fhpio^Tr*Ngeq>l69g&GkD!bAR;8O4$bVp)?=rb5B406{x7aOA zBgctA+UiHp2RbYPv?rVyiOs$>u&91!UxEHh_&d}QG+@h)iq`TDZ{dHkd0n^wlU+*J zD;>wcBIPBEI(qigdo!q%?&uZ>)MmuQyGDS&@?>BAuMi=Ut8t+9?nXNueZalwZ;Lp& zc_Ll$r*9ewG{o(Dhdl3J2cZ+!y1WNX zfWJVsk`QzJ+HnLLuqC44Hw-L}755MmSb6RVf>6K&$UpqaPqOK0Viy&>7GS0&(MZ3& zCrBO8n`wTbVE!<>kN+ISh0taQth*y}>Kj_~CkC;p@&_NWQh;7e;5`+Sra+`!0N5Ag zUl=p)OX9n)|KhTyPI~>H7iQx}y!nN^qdZNp8BXpGJa0eq*A+tgKi@Xx(CrXRW*@6Fr5k zG6J%zOz7St_$}3=L8WjWKIg#!>~6_I;tyLhq{|p(S*7ve#uuAys#P_)QCn&^hxtZ> z_<^}Q&eYGW6Ad&M+pGZe=#xjhFdw{n!{NJ5t;a!13{tO2B1csf(&uFgUWRwb?)Q6h ziIQl;6{OWxhAd5)Z{v6eHe1=skVEr`U}i&_B{c74--N11YD=BHCstua!25)6g04VC zXjYVi-N=QhiD5T#A4evGO+4rUV|`~!7NBO(XO(htV01A+9F6Z)P})*nWpa=+3?0zE z0=jGO+@&46N-EU>0ncngT|cf6v3C^p!Lu_(H5FFP$fL0u+lOsSlDo6{Xxzttn4n7C zY{EE!wmq%pz2hG7-sQr3K2vr-h{Rd*fzKI22 zVMvw~nP^RVuw3kOD_B~eW`gD3X0rFNydD&aU~EVOA{NLz0D+LiS-CvRHGRP=d$V< zpwS)YW#B1RgbTImtrle+L1e7lOwAeDbkYs~fGkr8=}P|H%<*1T8qBv#ew#HyyHVow!cCi*~wl*YPt}og^(byD{CVfI2Hq<2o{#XBTWjb5c z(j2RqkA(+BvGmv9;(7Eb(!ig{H7K0~r_Ix;e=z4plNAMj z51RA^6zGQMXEew;x7x3g=h(2h)kw_qLP236+ee%X_A559@vHaXu%uQbwyfZ2j07IO z%Ex*p=R~#PbGy-~?O)Zgb!C7Xt498o(OSv0JMN+RJ-t`qAg^#fsCcN1^!t&5uc3k4 zX$qzENYm723*d&yXl98bh{T9eAn)Y_w!upy(3Fuvs8n5 z&AXypzudYys3Z;YGX8wNSQC9NUR#jL8Bz2&>jc>~;0&J@gN;;t@=RR9BL#QqKnu+T z?K9kU2kqkV?i~l~-zi^dLgP$-LYj7L$>tZ6_4F^cVqe7w+k~Y>iLBDq1UkHs#cN?( z@>vR#OlqS1NX}ltZFH1Pj{1H@jl!DIzv2!kdltx~(ck!%RvR2t@+6<(k12b6PIcKw z^ZyvewO#TM+$l^C#l?p7`sl-AaJ_TPT5ScXbn9cDuagVtaD-ww%zjf${7Bf{rx#nc z+d@AfldR7#*UxI+keH#TI8n9~Q+DlxnD^KAXPki}p_nY(K(9;qtFPfwL_=abk4T~q zI}a~<#(NxA`EGhZSw#WQ>yt-Z0O5<}0JEl;(Fr&>rI)s9-bFtF?^K+vUR$@QZ+pcV zob#dQR@`E^<6}#7n3W{WnpT^zJ^8nOz`=Q@aevAK+VO!6T{~mtJ!uJUH|ci1w9$L+ z&{%QgVgv9H^XB#FrM$TN%WknxEH+D1r!+EctERlmqE$(@d36-F+j>RFn=AM%mf$5=nSrEizpZ zXQ*C!(Yq}Cr+?@K-H#MxBm7A?(gfSDCqW6qLpL9teICr7PHEp7S#spf=;hf(m5GG5 zgN@WQ{;X>Qa6a8bZ)?YybIH7A0@koUPrzd`a z&{kPvE``#!z(ZyL(Ndh2wTJ3hS3GaY?Hjhc!uP{7#?{)XB}fE?MX*%P9Cwy9s^B{> ziZwc*XvGYQ7%Ea*Y~1xTTkuf;5#s|T1p6F-!k`K2bm{d6jQ$sMh3*m>#(Z}wBt}#8 zhhWP+e`Cs(@$EbNq*v!mp=&&-X2Vhe(n=?i|88B{OwZ+1_tL9Q+0yMy+kLz%iRPb| zw&m?N>Ntjtw}hMen_+W!m`g%NewlKn&u|iLtEy1$?nH8lNM<(WO^tJF>rQYnXv;SN z28Gkp`(Yz}c$!#j3BT*v{cxL-Ceym9dd7lJ59{KI)mX?}U2F8?7}EIt5w#N>FYA(; z!>18A!5AXI7jfb6LcR;`H#?*$rGUk4AVOi#6)Febzn=K`ORL3sQ^l6!`scrI1jIo? zR#G}H*0Br0-4??--9C9A@XGBpOXoO*y2xK~IVhu52ZWPMsg*~M#gSw_LhPnSF8m-S z`hLv~T2wx9pFbvhxJc}B>2lx16?DBHt(Q?*Sl?Li4K3Z}=d{X!k0X!pLj&kJNhIk#1xBQhB6DJeEBuq+X2^+xbgRh5+Aw zoSk?tyGOI~HP%yg&n0lh0J+EVItc+d^n4^1H2eVSF8fBQ?6~@s@&nYOO;Df=U8Ex; zO5tXiUP#~ogFA5y?xRFr*=si74 z4fmWd)oue8+>&(`(e*dX-qXq_GjN5UDW8;m(1>y$1$P}k-ro^vl`I8}g_3?xg?&$L zbikh#jX$EUm;MR`k^qw=@W%?ZCs|&L+h^oGhuWl0GDV(qK_3DL02>AqXjeRz3}q0+Okj&WT#Pix;Q(& z$QB__8+c6eE^vtr60_P8d{semlT03NPtr3UpI_sAHDP<7tQGnp=1lQi);S}nF9Eey zBB6Gsw%c`?)$2$YrTx2AguIO-4;N+WuLXH6LHD<{zKrK(=JB!OxyVAo3p^{etafzK z-`nFExMoW~6+C8JRc(S~oF3k-*}b3o8+IH_N}b891hX_u(?q>!#bqV%0`@mkjU$#= zNMUI&^6(4S0!c{GTyS4cEH_$~-QL_E(665C_#`=|+N)s{F|j>r zZxk(j!wNOQ$G`k)cvX&B))06o*{82uK7!e6s$r;^Vbsempb^<9L@s>R#mz zxxnt*7WaG$2sz&0Kck0iA01!ggDLE1VwO93<4$Kyd}jaaLfrk%6|0dE5@N%n=`NGl zKQ^2M?Dg)p>H^EaBAaIKYYIC%weE$qVPnvGiKG*-#3k|Y!X;^CcPgcb?srb#!oQ6S z4|fx}*5SXQp|_!upY=i-+T|=#LQXs%Kgio`%I#MXp;^kxOYnzCgKelD7bN{25g_-P z<-I*sAbl|#BlXSkz+12??u-HoQmZI=eU+i`e0@#Pm7(;re! z*~Ygpz^C8~WW?owfHH-*N+BBR6>ymbu>t9ow+8AV!yh)co`LOv&s?W(^*yYz8<=`tHSYw<4>hd6Lk~g(dFQoUlg9rzWjD_V&75nfn`0S$2 zpku+{&#A96j%qFHt@M@aU&yGswYvEbDkbbVPjKK!?Rh$p1MtJ@VVl#3B?HkQb9v>a zbP<)4YSb#=`}|D?9p_P`XSy_l`@UNED%Ue_C0gv?Aqwj6Py^As3@AurzKZ-?QhUTk zWV&C^mC@$riOwsvSl1NJfE!Lfs;cQSw2+Iq&b_7Hjm{IN-)@`_M9n8SuWna293uPB z-K8~f1Y#31QvqF#DyOM4r!O3TK@HZMDA~mVFSHCFRLhxUrzw6nf+D|_SUwD`lXUZ>9 z5LSppq_nl8bTT;e@kuF(Rdd8RMxOLXuncADyaHJ87X4sYj?qjr+3qQAT5stRBmQM$ zL+84UJ>gjmEEM`L{5Zid$#swWe4>Mp_6}-c(Ta55eJ&dj zIo-NMQ4Jq|LyaTpTkzNYOkdBcuA8X3s?9_szqV}9<=Ww8RIFP{E^UiK_`JRmuBqJxt)A&3)a!>-Auiv^U>jty5s_CW4ZORj@8wZQaPBwg(daCyu+L}={cF34|$sSq?Ma%i(_rzN~(E^)_eX|){!~WrG$pn zcjDHZ=DXYj)Khb9HK^F$z4zSTRl(dXl`gl$a_hwlwL6aLwoVBS+`%Vu*`e((8jOZ8 z-%&sT}M_+bP&7bI{yP zK3kI_YKGE3xp;vTtN4051%sXs6^oHut4qD-zp9l;yLeC z+z<~207Ze|z3c3{UXF#MMM~hcO+#>XdohCC<0_nu?3Wg}+lTgeLzoraH9G7!7r zs|}@{f`-;ML^~uRkP}hrCdc&U<@)^!)Szeq4m;{uRQ)o}^-AiKGv{__Nu>i3t2coqwckPBaM$x-9fa7u zWe43FPVO$>71bNHJdHFNHU@Gb!a*~cTFvN0eB2X2gmyrb9i`6zLTYvAB&Pxo@*Bg&mR>1g`l!gnq2dnY)lQJ+D2;MD ze)=fb#6jWU_IA}reu6CT9e1btOm!OP-AxgUTcO;c{q{6o`bs0=+ zG%IhbZDhmXfz6N5n@JLyL@*Arf#dY$Zcd1NK@8#}x^^(}j`FTxZtyd+X61k*rpnN2w*0G`dN^eZuq&~}`(JA1uS~eM z%2>jm3>0v6=MvD4h_Nm$E5T%&9On`@ie2ThtqKw6jrOk5wpoxv??yLN9=d`BIN6L9 z%C+z71MmA14L`{wq&7~I^>K?pzL->)yhdRI@_uY&HQ|?n#71PEB1Bw>1{{UIQww96 zJpBSG9B}f|YCHVM?!OmevB;2r#Aw8^|Fij%>aNcS(b;_?{002bmIZ~&A)+k8dn|AV zhe!59=3S_zLuIlRD&pN7L%bMf7%(OzalP68k@gx6a44IIalj%aXwu*=SfGx&DjOHn z%2OUiIzS?k%$H~28fF<&C|pA+d`PjKf?dN8wZ+gFQ+9{Vk+1W77W)>(iK2XGUJw&? zN4vOHt1%}zAyAh-zY@bfqbYDix#)i{@DOQl@+^WD>m+|b>b>HTeW=?}DEhHZwi@$S zTD^Ln5=^M4E1>LSmnszuI0!PUEraB&vCuW*pP2XPTbh?2pa0<3iU4G^Wm$*x=P$~S z_s0yl_OLN*{%C;k8w0!uFtnmC%?F*wTk1MVUCWc1(T49ZE@h@^eCRDBD&fSHm7xT+ ztBd)UUlt6eF0H?@RtJI|!B?|G8cgB}MSUQGws;_CF)Py9H%9jrSqX|FWW}EWGKIg5 z-wl=~5Iw9f?%R7OOX@VICQ1ZctJxg@M78H)#`_ATzhRZLWrOMdfE({qA!&6t($@qD zeEjuEA96_*QyG}Q8?;V=Q578@KGPlQSz^j9P;H!AY6|q-S^T5rGP;fB7yX#Sa&QgZ zo#zVv@j3mwx2&1x@PLTepVb9V{wpv8dH)Y&(a1C$AI;x<@bxzLp7bz}HT7cP%>9)u zE(pm^s}{}wn_SW{`BYt5&<<@Bl3=CFztTb8HW`L*8AA#6Sj;561xsv?a*xm>KpYhl z!kAz?yELRzw9fqsZK+78Ad2f(K%Ha6`+IO`=Vqu;jxK^m-vJi@1Nvw&hoU6zj3Mk`OIIG z*$g1K=#2a@2f*2fPdkd=m${_9$~eNW&orOFxm%ftVo>JttpqJkfsIs6cjZexf7LSX&Tl zFX~;#%8T^fIxWt5RQ6Q=tgBu_&DU2nq3kR_rRbcz)-JnJNO!wQcF{`bk@k-P328Ql zTd|vz-T%h5vlmL{{)E-*_J6Hf;f+d5@Pxcs&=O{XMF@3g^U2S7Y=Z3Bk)Sz5>pmK} z%URAR=VHLoC%MmMHaOpq!SyD&gMl!s#LI28eI01FB{ZmaF$)#d$k6mN#L=+mc-SYAIWZKWSADSuO*RbUsXMRmkhsg~#6s$w|g z7(O<;WBfVq8sh8^YEny%eyd4gkIexz2#u+2!MbnPg>~MxCR5gc^7~I+a>fZHc}&z| zIOYszofaRzG}53GK29s?iTvQX#C1S%`=%3gu%mJ;ASB?#WRdJE0m6> zt99g#N1f+q>~V`s3Bq8~bR;^INwt*g?9ul6c`^Uuu<5+Nb%nF>&MEC$CdzmrOIRy` zrrL@imOu`mxj>A#Y|HjHI+tsO{f>-9AJ;-@{(*Q#!{eiA1Zhm<=Y;77rpuahe#0%Y z<&mH*Jxl80Xs~4ZL0e>Ii1yG-_gk20FGTWM78uBRy7+=>g4kl)hn`WkKK@z!m?v(|tDvBS~sN;k7t$Vjxl&hysJ|E_Dhzs zCbiihdnsS=*ITtx5Eo-3AA9MQ85nVtUAl844-z6R(N1qB7wTSMv(gotOQ{mMwpzn} zL#~RO#sn34Sis-l8PGBNdE0c%qe~mD3&w+KLRF8HZC9kNLdqM%Ea7Mt1 zwaYVL=h-XcgE`q>_|;#O=;mmG@Y7;XgK6(;6x@ZDMKepj%pKcCZ}OA$^ck{^=Xo60 zGl^8-JmIbG_q)VhDr?TMUu4^b@D2joV?1s-ANvP0+)L=jX5XD;WvQ1j$x+jr<1o7BP4LRK_GgJTDyRIHC)3cFdqHihol6Le%jA86 z(72FH^_9}B^MSTRG<#7x+1ms(MR@=4e%k??LnN>jd;vlq#QamFQaC@ev+uT{zTV$& z;v=1d*+1ESk@>pf3=SEa=P8*_a=fW8=1)_^)X5=BBMzrw)GQ2Gf^R>Gc=#Bpx1vz` zq2J6a@caA?WiGlxdogI~0}-;5T!UPgeJ3M8*ZxjnN|ErlE2s>L2GQfV)tVG%eg*DE zqH%gv#TdP3^*S_9mv*R9n(&g};coB-H=D74oYe^*xR=~0klg4m*L83IvsM!yO%G=P zX06FJxfVqt1u-Sq&Xtx^^bpay8Fuu5l0?s{u7(osPhDBHnvfU_X3Lh^Z#ns!F!Z8@ zQHz1FrS6@3u@4$@$$lEA{)}F&-e35_ziNn)f)JCeox^YpV-U~I`y?< zl8bBT;?FWr0aM|4n0Q1{7a=2{W`YsLTXSzsr>YEsKTwfzyOwtL1YK%|=3(()_`tE` zL>8R}7+pOaZ&>88G)R>fMeDC%StCkRE5E}o2X|?5yp=e-l#v2$m=2>~S!8>3zbcX? zQOxY!TKk%G>=uqlX14)99Xrpee&1@D4@JjEiByrBuJfLT>50hZi9THWIPRZmk{@XV zzlZM%lAv6PiaI3++R>QxywuN!sRCn=TeX+FQ5+=zisSnwyJ+xOJYi7BeCIA5!(J%Z zH2QCupJ|+Doto;Rt&N1`&!i!H!kT943YIYP_f8itr)mTI@QUAX#K$q_DdE1zqV$N$ z;ydgu24+HqUEtK8#|k1R2SuEJo}xSLVcv8k*`+VAfsS}r5`C_%WSCkSNfu&9NN{$- z>NWmcF5k?>-aaox8XOxc8h(-~hAq6uzA1^%Dw12{u^q_Cp5aFF>RT2HV;x5Cg?CPl z*<*5~GcI3rObrB{x9o)0K7s+3>a?Fc-#otne^JL^2*Er9V~{OcI91E<=#*CFIav4n=glbk7N1 zNP8EcG)*fWH)4%9D*Y?=U7)dFg<3(VV3)d9wI&iVi;w>{QwUYjh5M=S9Ko+vDs`j^!1I~>jr*mQ6ZS1g_VZXOr{Oa+ z@v=rT%MdPI2CHzk%HC$K(?}YpNy|Ld@``8y!e}B_2#%u{x6?ka2eY9i(JfRbKwo-i zQ>n7~g+#?dcufEA4=pad`}`h7;Ja>{W#nIAk@kY0@q#J&*}hiID2vV0|BxR))Z+-U zvu-xH{@GrQ^7;)9iOM0F<$DlQS#cJ-Dg#x3CleM1CnoHqy<2T8!f-OJ&CE)L28Sg( zt59k`{V=}K_x!&MLq}CZ3tnCT3%wEUqcOFTluV+q5d?=ERgx4JtTF zqt=>RSVoFuFCWgU5pK5uvYxnw2IX0Q$2^gx*nI58eUAfN#Di-YUUw+?gph?R>sNG+qq`tCK>cm;jbk7x9w8vz!C{X>w+n|ALVUqvyeX5QM3Skv z@H4ac;bFMgXenLP8I0dGYT18}ge ziJfm^LFWhy;GS1JUO~U(=L^23NxJw8Zc8srH^Q6~Dloh=z8{ZsOb{y(I>Wmp_dv@l4p;4Z=4Aq2O;;BLV! zI1KI%!QBaN!QFxcch@0Ukl+%61Rq?!=Dl}!pWVOvW2(B#&Z(-Sb-H_ew7BmAy&mw{ zuT2WclkCdw^n#lRRMNP# z`g1NuSmLM+uqH-CM_BOy|sDHL<(gr(k>Ih1B8q)Mud>q5`KztDc#C7c)Inc;RLXnh~dPb$AdpGdSmXvHJNX^5wSwWnKPT!&TiW0&+% zY(22z7>YL6^m*v`pX||wj7j!igma#*CR@vG=2B3DvoZ9a!RJOK1J%9t;u0xTcj8@k zGR`!y+%@j5X0rWi#-pt4vq$FW@!Jx7aODc6?l^abkv^aeFQgDtG8Lk^q$yQh!VdG z`}+`9ol!4U_cvC)@cSZt$F#FrcJGJpH28tlD+87(em;VMAKq3y8ZixBI zXP)~Tzphe~4GzfcUU@(Ezb5o|zapvmAMAy`NF6fTIWV@_ap zCn5HUf~;Ic<4Bfg_b%?a0)xnCrcrS4NsJtH`3B11@@N~Irz+h+CMF@+%Za>)`Caj( z58_6oLo@`*vGe$IZ4O@7@gUb5ganr@>G~z*mTWXM_H)5Q#s!b74<{j6$j8+iqma^& zV>|D(+#1LF#(y#%%@1My%QK0&xi!nnJW;uM1g?ky0TC6TcIo~*S5~2bT=4#>)bXQh zU~Yh8U;Q6{VmR=Dlt`vkFOVJGcPuk-b85sOT=fUeY4H*V4 zFXMeCg#4lQXpS`pAJKa>1C=BC$H$#hkXjq)=CQIl*pblVTFHFB-u{@>Cng)n+Y5Z#LoS{9 z@IDk?d;*G%dQNHx%34ipGX5+MDpw8x2t~D}FasS$SSR1ON&kX&$)cGaGf0@J%kMjd z5OzAPgiYx)VYY==(!6qyW<%-qy!uB=#;WK{t<8Nrg(<47v1k#o9N*oZa)1;|SJWe| zTie&LXN<21OxX}bjz=LQR~oDS;vdCwk}=-To8x;XVx3~`o4vh39YiOb{wdzqAzsFJ zu?DRm~9H*>g483m^mPYZYM*OmtbQTlV z$G0!Em}#?J5wW?xGyS+=rE6$xl5WtHy)oD(W)cHlM_-)1--zh!dq~ByNa2q-g3Vln z7CjxTFg%|%8fkMfgD3|fsU=4C&iyZ(M?Z;KiPJ*;vYv;6Z)fH5>}d5B9wm=p^ZpDR zK(Ba)unAzb%U%+Fb5zl49pJw!_xL9-NicQ2**fJl-D-R(JDcjp@(+=h|Bax8Ryx9n zbR+Bc-Kk)CJJRUpbfvu91A6gTfm$Z1IX&>U)RDn=E_5To!?}Co(w4H0#@n%Q_$bDm zE%eVrV>3?;iTP3ed<%Uj&Gb53C4^XvK2JhsxkDpy!l=n1Ew?@>6xpRzl9S&B zWzxn5WAIZ$F9=fSCFTNG&^7cH+>Fl$TC$cX?D7qLDWh$R!~d>9M4ya-2cG6p3VezL zLx$dubBTxYc`3E6W0?MX@1i=kwXNh6LoG@xXmR6$ZZ#R%z+JSmQZcF~9{ld3W#k`y zZ3Ej%>KKBi!;3iF#qC(EsQF40F;m;EFnl@DA1US@#DBiemE#J z%8jKzHqSMeom*V$V>jL9eu&M@@kSdXn^Inv#F#W1RqnI&K*4O7t3;59Ua6mJ7ZS2Z zY?wRI4{v%&&BeG`I`}))sm!u;@DV{7+7ut{jQ@PMpl0Q3K5^OK z&zLVAV2hXY27LZp!|~U8(>CR^G5E~gBYf2iY&B)hKS2DQtCLQMCcKf$g-OWlx>5Zc zLukj}6znGo$B&!Uz*T`Nlq}Q0Wx*_@uHC49ha}W!Xbir7dpy}S2Kk67l!G95%sOcf z{=^|5=gu$_{UQIHrHNJP+NyeM-;wyj=R((~rGtTQqU1*Tf;g+_@vCsfku+V8l0u)l z-bLNP&vqqc^bnqhUF0_(qH_&Ua_to^;*ne)zYf4e$v-C&h&3_|C&n)gMeY9EaY7fn z;90@VUHn@1^>4)0?oowtyR97DV`6T>3#AZpt0r4pH^MTqZR9cDrk(din49_j5cVkK z*NODtj6Jrq#m6b?v6oFztBYm&$P+`{nU-dmD}GP7$6c?$1VXq+gp&@H>x#E$#fUJN zr1U1}h+=b_LX{W~{B}5S!EWatrR10j$V@~-{XZZlTaIV{h5O-tM{mUlgO0Qiwj}$L z?23YuIO&J9DJ%bvNY^Dao^=7eoiXl6xNubN5UbUs3ySYL`K;7XLS}Gpm&S)#)_Ku4 z?YCp;AY`Q9zPr|Hyuc@1(>3$IT?=Yi5J+|K5%GFO6Bw&E(b)@YdI#neKF#vZbTCt@ z&U{iDM$5`anAdP~SfNYdRh(&@n;TFyl(MBJlNN$AorDqYA|&_$or1Z!`aDkqyFCS? z;A3yoA4tp9%l?GRn)=UDRO8<1@co;(sle5y+}3~HQ7HUb*KF_gCN$i#uZS46nsx1F zTJe8)h?1ORF0LNU6Tu2b4jxKRY0{`<5vJYbYUF=w4)Ku_jVfH5J1HRZVbrtb%r6v2 zeMiTfg5?%Y4@Zyo3wF3%v}^3lh0VBunoVg~v3Mn?)T*ax&I*zl9dE^o1m^m4xU>^p@DUCFn>xt zvH2{bj``2caenbHq;;FIvB+7?7>-|k@@7dXa*RBcxlL?_E#oVLz7g#?3{22dHc9C6 z=fqzwF{NoR9JqxiyYa3Twk^sFi*6^soQ*i?<%MrG;j=&O?iaMBbyl%RZ+6%lvvGWw zTqZ0ktQhSH&jNWIxAlR|O$!$u}yTU{qvPm#|1q^U<39#Aui(si)Gts5Fp z1e?WMnCp7WBgO0A`Zh@$VO_fL;PUDjx#xZ1QzrP5vgJU)hbV00Ls8y4+1(bD*()Ze z9bfVcjD>MO+Qo{fU6J5`ayM9uU5o)1i&_#j~v1LK(v^s-Oth zUZkmTBhR5mK+h-)dwT?)&{U20ilXm7Lt5*?7^TLUU7$jGaIQh9q6w8bSm4sE=77&M z?{E4z^X?yqL7fT-O?~V;Te8VmBP+7N(tL|;^J~eyn(ndtS@d$|?mKHQ9Q<-U-mGHY-^@#ZJR`TR}b z4+A@wY*Pr16QCZFr|9zsD2owA1EEo<^Jdh;C^K=ezHCcnY!D&yA;s6D>f=0Sd1?@;7OEfRd=d3$QZMSayXHtYC1H*V8H&VW3H4ad$yH~t zbfkHXJo=nsE4x2E#3X&A6eOG2^7!>)YU!V4_uK8Yd0P!)uK8pKtvA|bliQB4l8Xf- ze|Ymr%OjVdO9&A%ZML{$(+V;&v8o~C=w(N>smUj7K3u3th0@R{pVP>IPHUs$x%7Xw zSMB^YR$k-HGb9_5sc5_!~Lw^8-oYG>I$^>OZ6qj z4>u6cP}=mOZgZ~bzkL(*JXa-F@b|L%mL}`cJ`zLRTG?AVU?SU$%!JSW)BLav1x|Hy zt3`L8z50YbHROS)%SU+8rMRBHMZ+&_6Wu@|W^xnf9FIH8|JU6PayO%3x7Ph<+(T#V zCGtYMTiU6)X>SoFznw4xZIBZ}rWiVv2@dOjG4T z%|b9cAB44A*M(L&IYZ(v`mw+udI}?a<4^o8Yip9==_~RtF)#_GnrUDoCfk0vP2nND zrPJ0TR6nG>Q)SJVC3X0Mm7_yg3OS20pD0!zYcFLS*48rFX&ReotXrqUkz}O`qyog7 z)d}>AnoLH&6d4WK3adARTm}!f!-t}ylJY~8dYZl>(+WZ1m@p}k!}IFG8!1mE?&U@P z`!j*(r0;F5Y5SA%DIQ|=fJGyztdulvKPP28vZ_HwR6%V&loLwR-t$~r+#6ZPq=Wu= z9Dj&=?DSRgU+<#ox$}>y>#SepVLj~;Q1*8q1c~!@f4`JK{l1=*haPsmthzrP{>DAo zYfX!W%V2Db z|CDJYngA-KIJC&}8&j^sn$N(o+;taQde?8a&CT@}Rho}(y2(odg->Wfh^O6ZwFq| ziC=Oqo8m#MrHd$hbWawZU(K;z^wmfpb7fz2)iNb!g~4(+&+K2lJmj+EIuLK}(d&t1 z4UI5upFBQ9=lQi!Ozz%1hveK_S4Fb8k$jE07(yv>_?6HUKO>{M+dg%xZ%oJIzm}uN zbT->u<#4h|f18;~K76|KTPCNNT&JbzHf?vU^d*s~^O~by2wAM*3yntW zh5_rB`$)oGR_q^9NmiV33o2|gL8UG2!YeWB(Zs5J|ft3H#| zbt(*Mb=pX*dLa&{{Nsj8kH+Rs``8kKl`*o=V9b+7MJRA9x*KAs=xG&jd?(_ev;7G7 zX3XmcS-%@oZ5zzrg=2p%;zVNET_j8Ppy@vq3@sk}QtWr4gjCg}Nb%X91q$#@-*3biU3f@Z);dGu+5`719M? zAD`C#)aY8?~X!tBpHhIxC!EWpq|oqE-+<~%T9kfeNRn2_=%dpf>1*Ai*qP^^*FiMoLSCiV`u}D zFKZ+oy@#dBo0-I@r{zXbZqse6Ygnu}gfuvYhCETF66bYg3ksRqxuLlf2$51iFtZ>p z@P*p?K~L|b)w&9{`}UFaPBDib*{r}Fg_)iExI*Um(=}y z0qr0u*zJdt*kP4(;{f?hnzl4F8$XeIV zY_!nrTi@1L){~cZ4*uJ*U}Z}|95QYTy|}D5g$Z~&fhW(znOOd>; zg)KckO?RU?IbUX^NMNf(U+(+1^phR`Q0gxXjaOZ|#fGMi6evAx0}6x3rIJcp5XSyP z!MdMMqH6e?y`oXKX!v}3+h=eAse7I9>5(#49C#pu_mBs;Uq&cI!MZx~Hmk9e*~P^? zrL@-q45%}7+e-6CWSP38R8AF(Q10pBjnv5&yyX6k0j$4lM|;hg{XAP50xed-QF-iC z{9%;YlFpbj{Q@GRaR@t3!4!VX3q<8mPNE-Qg!lDs;G%?S(p{09RAg5N-)_neTI{-3 zOKy5TG2dx?&mKLJL-w7at3x?gek&gPH8SBy)8wQ|Y!Xa&sjT_OKdWhHWNf&%0%Zh4 zvRR@+wovNxqt?kiza!Np68502bavgXFe_2S2T~%M^>EuNVb(Vn zbo$f;f>yJ{vPtVw&t!Bv5@=tDS$%h^%gPJ8eiibSsUlzh^uwWGIwFZs)2J|Glzzmh z#U@pAo{wDRNsE>+g!f9Ry4=%A7cqu0EdCR{(TmgV6BvrK6%)Nim3$qqt~4dG?;OEM zR~Tuz?WGj#%sE^_gqV!`!WnRkWv@u@hu4$n*<1wUovTf0+QbqnNS5*AmL|9tnWU_f zIFd%xfS^+>pr5Wii%8o{?M2nUy5|Z8o~=Z60o)4TGb~&#zDyZ!NS*c{FD-VhdeTaD8Aw|^{>pxW-1IxI{HL%mrZi5 zyWT5qwAi+<&cFI1aUx&S_`h59e;q4Ny^dVRi=#{5`t6tGeWNc zoR%whf`rf*UGTBk4G+Yo?L6M8o=}UW9^+3QIwBbcy;u5a@cUVgSoYiq*$|Gx!=$o# zT2AUc0(5D zZVU-Vgxjd`-FE2t{)`r?5PDpz7PdZ7I7AJIf^q;&?)x^@+RzKKv9V(}6R3d#gZ)p*ZS}e;R=pV^FzJyqvIk z)#ThwJ__}gPSDPSB3HH3|vYEg;42JP<vax-kxIOaUe(zNxtJ%>T+ix`u5CO>N8ntf1q(lG2;| zSNTN;tFq&$Zbpn9(t%`Muny>ba&I3-+bE|9dvktT>=(^_UGx#*N`F2c^G*dgYF?f3 z+cBwdalgYLl&?~~a@d)g&+qJF8@ii5B-GHLCYw@k7WH%Y(OES}-uB`@G(ue6(-GtG z;tRgQTAMvzMPkN?dTlQZQXfX1|exir5-dDaNg>G0{twOa;yv z+CEsoogee)q$F1_X}3Bk49z%58tfkLXvE?yL~6aOXCD{e?hIE)_0>Bg3GdEoHwe)X z*%j`9{S!yHqu69YCv2a6M+5b3GPH9FmD=?5ZbKTHz8=(#HJ96`N=~9@s&C+X>5xsXfhx^U~8k!rZvV>>Qn6tg9XGJ(R-Q1 zyPcY)esERFvOUI9TYvJ~u!|X;*2G~ejH7L0>~?6D8t75fGAj}X@Uw50@>k6=#V2N~ zl{&X*WNR{4di=WQrfpO zfd^vSgM)y2c1;C#(Uqcy66=FpwWUQ#g;Ufq-m3z}ZZlx|jZMrv`vo=_+LJE$T}p{J zK)|Hkb;{d{*KMD%+mx5D-anbyW2xJU}PMz7pj(=JujQ)n$dY}uY84>jyGmM z=Pp=4Gy1}8e;Hc`BnFtix%j2;pjzfZcWUUumd`|p%#&VUYd*6bq(t@qa}LDs7C1+P z=Xkymc()xEMYg9eZe83l$_%AnixE7AZdrdc+9~IUk@$43P;UX(ouMzX1O5`9Iy#*~ z@0Gbjty`DOpDWJpYCwAgMLD%~em8_!rgvV`6>{o<=M2OR8REvP=uq zrOuSOB_VkK75bH;5h1>DbQ+His7sd$XP3C;B(g;p;FVg;kn>B7GA|`u~u1LM?Wn@rQ22+UX^v4Y`!-P zS-v~u%bihBE-!d3nliqVB*5IIvidw(ZgE%P$rNPV{jPxWRtu4v%!xz%jZtiG1n}Mz zO77Pn!?1FHuRAOhLK?iYAtan1;Tb|F5?iLBu-)&(3YD=g-QPwp_M+8n`eLKR`eKXt zV}*{de+?d{?ne5A5?`ih|0iFu6Z@rC%aPTMKsBzH#l2UR@zK8)r@uTJdFh1Xt97Ac;nt!ihi+9#%JccMuhjBCUc zFbK0$rX^=x*(DiF6wrTeYfmen6PEEaP_UMp#)kH%q`B>7e2|c9zu5X9A>;Fl!K5_$ ziu9ZfV%!*gReisu$y2-^J-k&*Jex{GOoTF<%0NtXKa(01hYtO#YsAajRJ0#?^OWM@ zw$}|KA<)jr@bhO}EorVzxwN)}wVjo;wuhq~qqO#k0@qa`OMoKRd?CwG39;Txs(vt9 z$=~H|(L@QR_KRdu2?n3$Q8bsolG6m*A*6ycsUX}w=9yGz#kDR?J15(cYUHm!Kl&=| zy^<>KJI7VOK%NvkPEV~W3Z9QO(+`)Vo|dZ&-%e=)nSa1*#)9EF#$N^UE%{j7RtfUu zSGkDb@?>HmxFwvChWlVeFGs-F7aP^_1bG7CrJ`J8g>|Z0`n%r*YoTQSk3UtG9PBS8KRBETOptqhLedIo=J}%e?r^%fnQ-(7?$__o^ROsvZ7BHE@rvDTv{iZf z5bK6d>&>4K{-$xB`8*OUa#icI%+QOsw~8kNuW^3e^jv|q&$kj|*%k4>?;2nFNUoppa4`I3gf_~axFDDH{AlJvo zS;G*O34xFvBh$kKHB$e}J6CFCRy{s*C#XZR7mo0xa}3L9qNJ0%aTO+4Sg z)A4s6TKL}^ePD!anU{4tQghv>8ycTcgh>3&!8<+2c9n0TL>p88mX~pvw)Dyi^+b}3cv8b2Xg|U5&0!= z8&aVW?eCXYX2&17P?#az4CJQ!%Q8#eC#*u#M&SK0Q7f*8Z+4>)h0n_Z!fCnbiw&3K z&K?j0ll=vu;~Z!R0H{s+xbs(P?jl3It3R%gk&wrF^Hy=esZi9hfmOt1 zL^lCP{O2m2vDy}|;5DqENBH}2WDVtfNBjEZHLG)h4rr_wG|sD@G+`mHipRTOBcS%z zb-o&qeq+Z#zIXk|p{^KM@NA$|2_jVU5_+pr3DP!$ zf_b|+GrWp=Uw+C>wCSl(F*7-J(-ijoWgC=6S=||h>|;RpZJt8;m2>7WPLLz+U4Mv) z8}y%p-rkTzn7Z<41w4NPB|pj`VX`mcq2X156f|h5aJmdE0`>Hydr*iHlcA?Ah@%Kt$R`+tD_!HP-& zmQml!L<&chri4le{c_oQJ}!4yVp$G#NPC%B>98T$0n9)XlUqH9W_?dDw5+{keN87M zfJ*dLC@r_Mf;6KiB{%rrF z?{nUWIe|^@RRb`rI7zZ5-W>c^go3GnZQJ)YF~P%{-{3=m1YUZ*Afo$V+~zk-9HTvd z%cXKqHNzk#9)^6EK1OpKfJDw5#~O@5G9->Q3{1hRj>oZe$WMFu$O6ZThY-jv$FXAO z7-SxLtU+!J{>9{B8PE?|{e3*yD2~f%C59q|nqA*mURCi-x_Z0%0;&ML#a!@v2~Z2b zFwA@m&~m7DyR{=l~{2fZE1cmwQsYc~y?s`AKF+a>jX{r550?4y;d|M$l^)Ah^tyZ@J(0Zh)sl(Xx!? z6wc;)eQCJtD0gcSn6zEVbFB76s0o`SnFN)Pt&Ra&A`Hrl32QxgJk@xD65}I?{de&fXW+sKxZcLDFM2a#xc_X zsD3tf0e0}N=)Y=vsRp2tY!_Dwvd)u$ONz)Eu&u!0bvXC*T52J;q&*8jY*Piq7q0wll1wU8$!3kBZ-9Dt?vL?ojAL=^g34d7CF zLr@NK3_pn~uq5TtiUgi+rmz{d&6$ra8b;-ahh|G)gR2*MKQ3bYRctok{{xTZZ6uF=|K6v2;($Qs<$wj@_)fcKVUY#cY5` z-PCk9;Vz-2k{+ng=Wr@qoSXT4fpSbW_> zoje&epRvEC#cKk#<%7JgIynp==+`~nv~YJ`!>54E>H6R3X)(}+wlDY$4{ll?EfUlph5|V zu{Tb-3T9aG@J~zN`B}+wkS8|)u!bUauE*QXz7OAxDu5WkoLH$YK{TILv ziJveXSXMjdsjUzbJ?DA9Un>Em+AcchsVoYWppjHEHTel=iCmh5)+1G(coJ);d>c}} zak*Jfz}RSQ*Z@MJ?w;j9yS?xyknH{2RHlWzo!RuzOsIzNOvSfKhG&XHAR-C~xA#vC z60_v{#2c3Z73X#QDu5_SHxyb;aa%m0J*a(pp{#)0k9zGKAwWBpo=Y`G`P@SL?K2>V z{3PrUpB0`2MC{3~JlsjXCLd1M>-I20_m?c^QvDt5lI!YHQexM) zA^@H0by?tPnS?*&dQ_|n4CYJJ2BzeOi8?eoGPW_cI0=pukhJ2)cEDN&IEL6l%XOZ?fcHNGcrL2I)bX`xESAa;u>FJg+Zg~q0b%`x7@()3$!kwu z^Z!!Q|55@S3;@s|HzfPDo^W~yFi(-&tWaa<07`R|1T;y-Zm!j9h9?XNyJVlDNq|x- zs_dALC%)d3#_SGv244}Bjh+hTLe~TnC`v$sSjLnz|pifMBwxF>2J4_EE_9Sos#1#jy z$pJH%PX-XBv?_en#t8nT>9)EMa4P`z0F#KKC;O6GnWF&suWFWb?^~YF@81pp*1X(B zGeNy(Np%APFf!!pUG*60PVsXN_h*;7)e%6k&w6qyfU=~3y_IXRXa(SA_2+(){N-*~ z@E|4sMV9m(uzzwzbQqvBZC!{0AaRw6-xKaz1g6SS(d0j~(gDa>C#N*^r3{Mfo3|Xv z1GvObvc_Yz&a=$tC7;Ouks9I#E_^0@?iLicgn&pQutHh?S0E9<7H@Yr*qOf%QzVrc zXg6*?uMEwxU8_q594B0WT#~;fwpL*F0zOM|Jx1SAnf(zg|E&m6knF#vC9QlKbi3!v0yx--B{_^n31Q~hkGj|jLK&1?}ym7w2Ry#R~Yv;5bFN9P)_ zYJTfoS(X6P{@?f@umVjXw(t=eq&(D~aR9OhpK2kE_3yv*!o1E6PNDS~2KjXk5sK}4 zIW{)e0tp=)fCB$Y-^Wk1Gm8ey$R`uz5s5+H7@`s2U=Lv41!2MB_=Qgm5VOs>415qS zud?^QO`u^rt5=Bs>T75afO=K%s1vaF1__`}w{Qg~h7&P-SYVO+Tx$DG$jSErBT=mY zZRFrvr8^riklqCB=H~QM1JH3^jGA5;>y=O;IQ3(aZfMSw`Q*v-5*Vut8X|ycKWhLy zX=4m94Xqa7ciloJ{bT^&^s7dIB}_cEz>jKxgiN8}KMX)j5TkRGp1 zdie>FE6ragC2@x0W&!+t#x-zrFMmdSi%eK*;|nn17X~kEzk@eODieS^>X(S0w|B{f z2?Z49v;^R|Y6ZkwxLcCi))&as-@D2R#wVwQnO6fIg0JrK-52TcGPH_oioFa70?=J{Yu&;WX8=(HX!VClf<70hXN6>6hcTfQg9KN*tN#&{n{r-K{pSh6t&)$1& z66gkm{49Z9zJ@%21n7cGlLgGNb!>mYU^<0=-FwfV*S+s}6_5YcUibdG`;|U?LAQXZ z@P+abXm0o)kzj5;+yKW}B51FDDd1lFYWLR7=l$cl`@e&FfRXX#`c1|2DqygcNxq>0 zz~FIg!@|Z z#s#L?83ou2aeF4qa+DhqKxs{n0D?8tQV5>IX3 z#-b2ak<~P=V{V~=JAQo#l1M@t*Vlyfz1VGBD}g<~XErbz1$d%j6W39|>~2&K!Y>k( z#`O)eVo!0G#zi0*h|xjJMex$O!c>0jDeg(w2+ZA*>MPUb6;5OhMQpoRUbeO62>6|` zf#2tuO=OP9tho?e1hwTz@h=P?PPYMKOdFtKDKHaspBunO&gpgaXm$LrfrHCA2}Hos zWwQ|}#7ol;U3XX0ap*go_CvBEqiPm65tz`>c^(63liX(>5Obd{(_g+KLc#G+I;!rl zCIdq2`Hdu&-=6?07m(dxK&ReCk)>`s`!}#A0G)ti;E&X3IKYpbO{AM zt_e9M350EzaR0#flv(xnbFd#0bpJHh79!E;4#>|-T-+>; zq@9Xg(WlJ4d1_feZwI)f?Nlt2OPAK}U<2k{fXUFl(4$|%Lf*_LzcaP}380xl_miui zKOzcFuIZlZii~_Gzpw<(9>V~^%$4e%(enNN(qH+2Lo&=WQA&hjr`!|pNx4`=Cib&Q ze_&UEPQlQ9w(8qQIuI^@T5etiaDMoYR=Mo;#9Q0TC}x1spTDLbkP*wk2Y{^*4Y?|+ z9-{zZDKs?s&GSEFzlXVJvZB9*bn&U}dw+TfU_8F6lr>2l$=Cnn01jh{IXgzZ!=yk3$xK#UPjYrrY zvu6Hja7in47FTpIs{Rx<4T)Miwgx^4zEC3;H&NM)_^lsAqN5Ex@2U;)jvm)$+9*rW zzEkI2Xr8|$2l!saoJZX`ZX=gI(xQoZzR2T~>Ep%ECpY8-n)0cjnP3}xwvOmu0n1zDshxspMx92CveeiSzZ2zOSxu!-9he@Y41Nw+ zltyts30OyQ&cZ^infK&dEJv5eDr!|cnu?i)c6bTJyzW8e3af*q$}qZ8$JRQ6tUB2!pQfYqOycZU=eO_}YMI}!YgkD;h4hwkL~DsyR9NDKmTSg4ix z#V08v^VYaQOTb4XG{17UFZP$JetjO7*n1)Ed#^bb(CQVUH)@u~BS+^QgVmG82rG)a zVRqdHK~atC56KdE!#nppX9np;)8rNk<8wy5y`t@1#TCZS&*<+Eg5mhQSAd~{nkBr{ zkr|;?ToxeTS~->CX}v z8Q$E|IqNGU@oI{c!**}`+hFY1QLjIseD4cVZG>^zw?-}i&s(g_hPEy~6E6Fd=lxuz zAu?ZJS{0UuAf#KxJ0<*a;7T5;_Ej_tV1BZfeNLy_86%J%MfV5i_dZ^zp}P79-MoD0 z!JB1tka?l1Yj*l(L{1)ANiG}fl6)Z8;|Gb1i0qgbXwNa~%xsH!7eO|&=92R#-SGkD z90j4vl|mfC4(AJZj*hVArYs6!AMpvU*q?n&x0T)}{&cCZWK4O8!?)KLdE)!2ppee_ zcQ%r%zknS20F*Tx$JMXamahEH0wdj(!?~rE+FahoKdLZg_nmLFaarZA%oIBblbk>r zhJ~g_V*Q@KGCH`lVN^uS6zE-GNMyE*$INF@k$%?qo?mQQ1a~mi}_7`ZE4u?5n#@ zrll^z83LF4t+A+O#jO(~wK3;{HX%FiLfku|@D2mTcZQ{HQUQ5m;l|~09Io%NGa}ax zS?&@t4pxJVmsHBLFdWuh%wovy4{K>*E}Qgci=+otl-^|CQh$KHf%Rwm$<&WMHTri> zIyM2_Gwjyw!@T#3`MW>%1TjZfS51Rb5h@M0iu?ol=KYlSAut6s-WpnmM+ueV z!U#)uuo~~TC&t$#lU9kpSQg*z?UWu+1U}$bejJeTe$UC=l2pBFP=rBTfU&C8^T9Ur zRyTFaSu_0G8;#LnODb0iPXty%vl-&H1|H-15#Z%0`5@00eVNpvQ5t42YEmk$rmI%F zq90h4Ccag}s9yI=6+AELCq&;ErgMqN)=yqWe1>%2Z&X`J=+~p!xv1DE0!KU~x3Wli zepB2QKAc|;(&_#EyB5V&USgwoTh38Wt2dQo%3!rJF^qIKL&`Mq=Jyg#T-2?afmznf zl}wc1EZ$8qUIdX7&rZwFtJ{9yLy*6}$geU4el~MXAl}wOwu9q!Pf84}ML7&pvHz!E zG3(@y+@qnqxz$kcz>fP6m*Ffu$pcGJaZlO2VBcJ4ofI7~XJf%yBF{r2$&R;Vv06S8 zOy!BLZI>OfWP75JeG#n`((jI}>h;$lD*be%4&RPZo@d6Zv0_jdmL2~)-X3oQh|pqQ z?Tz}UXwuReT-X>seCs5d3!gV;pOD`=aVz}yJqz1q!Uqo3?_>)u_YsIZ@gLY0{Tx+0 zoCF^AfRp2)&$ex!)kxqc702QVmKdoyjnONY%DdzGA#N3N?B)vUPf9*m`U%mT2TzJ1 zv!$#R#&4#AE4z7Sg2VZIQ3c0vl(`rtUA9Ba4zku-!#~<;e)USanqm(z5 zO4NqB`Gr>F@CyXaOJnd0^v;^g`76{}04IE^_1#VcjelRXH$w9ww$riE;obcn+-m;}F2l`8-f>V(LtQBv5h>pe;l5CXe(#HGfg=w??Y8XO)jYY7oFmuMz(1ghAT-L zz)O3-uDPC{t4h1B`2fay!Pwk<2EnWCXKr52iS}k~Cv60HapC5c(%kF}%-a>$IONt5 zWc_swstv{d&9wzPn}53gw_47g%in)sNsveRyDbDYX|sedrxf~<&VFDvir}&)XL`13 z=CZ~wE0;ZeP18F&*LC@ANHc$UHVnj#!_5qEP{obo#>jjM+pX0yc6Ee-%``2Dix zdGbiaMJZr%y56_u$xs6~`>=l5&6Jay47=ue2E=Q=T9K1Q+&W@^DGsahb0)z{y!%bOTO$q=gjc6fHm{^qoN99)#@2h>Xl)-R z)vd#-@vdqja}v z?5;ge0pJYCDBcZfJauBPLI@DL)x-oH*)UAB=8pxNaN3kBhgS1`JxJx|f$SFlKc1PrpAe#`Fzp6gM!4lNY9n1V44sGE1fK}+*gnU6Ps>n2^g zONV92JAjM*-Ps0gfC@g~2QWQ6?Od32w~o4mkN|8ldIN@gYi}@4-2nu3uFd@em#;P) zo5;v;{5prWp^;0i9fnJ=wjuQEhM`o@ucE^9z!=L&fOVaXec^~dr3(Mj?_e1YOKcR^ z?rf4NLjqVlfNeFPR>TT))!ze@8-TmfiuU|SBkUws4$SA6fL$L&YEa;Ss1^}0g+*O& zR~&orTS0*SYXC$vO4-fuKlTr-E=owGp(X#z+rjw6e|G@Dg^xy(YVs=waES)|x;-dB zcz6SV4;d+7^&P+f0mK3FH-HQf=L-7&Tj;9gQ)Hjb(;h45F@L<$er^9AkU6bIg!Hco zn!-@@qE$$VC&CC!=cRz3-3G-Fp#xG1Dw;UF!JCb&B{8{$tZUe9X}SB5>)3Z3yrlNc ztfQDKUPUxY>)7gpv#->bGHVmFC8(D&z5TN(b8DGzyu7J9r2ErRX6A0JZYOR=<~vYs z7&T_*`v`6r_>|?q*+)@!K9LYbxw1~{>tyNwx6#cyYLZUYakEUCVgTGPm1O8*n=nnM z=)4RAbPfN{s5(U_PJ?9KpF)9UDqfqUsab&3|7|A8)Im8W(0f==k^ir!RLMFBnkOvlbagJeFZN^@Q~B6rDxk(b6`8Fn|swY>F6LAVAX_+@NHLOq~r{ zfupdOSQJ9WNzA)Kh#wyyLm%Zf7a&<@kzGW8#x#L`Rc_Jel5rG;pyHzPPiz%{Rp0@% z;nZGk6#uT(S}0fylW2KH;pSNZ?XO~rCkC2j+1_HG>B*$X-=J$Pf@1EgB{<2L-y5bzDJ8QRWV{5^K2DE%Q*3^cGCz{S2hNKwN0F9`bfxuOi9d6+ASdbC`9LAG>ajRe3%m42{#R;*C~F@g<8F;0!q0Fbpzl!Z8M26RjlYk8rukB~wb z*|mtZO{5br)=g@pf~GkQwWQm|(+o6BHl<>=5zNw>#?|Ip##bf{6Khk4NVNHXlV~Rb z40x4^wUL-d+dRoc+lb9#te%+ly`{4r`)u#Fh3+TE6`gnYvopUHmbiGBC=+_1XD z#+p_3@;xmJOFOv2l5#aePJvG;1i6Ozb2>#^IuX3ft^z2oJu1yYi)u6b;S67#@nZ#^ zw`=81f@~l54Y5nJbj820-y1L)^Hr@EctyPCmBe&~HqP{nC4r;BzdUu5Lt)Uuq=iTs zCUX?!6aAu`^pz9%KU=QDSe(@msaQDzXOc_Uc4)QYWrli6jH$O4hgni@&tm2<=0s4t zJ3Ugk=7@~1vlEU-j^Kf^q(&n6i1jG%gP<2k{$dW7sCirR;7^qU_Z6SY19{*Eh|IIv zUWl)2OatK_w~1Fk|DkG7`gxv_QU@eCY;y^;bfr!;77Cww!0JvRdyu9ZY~iWaZC(&= zw$5wL!Mxoxg07{Y@eHkl!i%u5X`5s}6m%D|!FZy$M#H*Q;Yzv!+!)OjE^8-rDtqER zeZQtHhEa<)U=DqI9sC2*7y_%{2Kp9K$QPf8G;?TBDf*;Ds|;+`E97Sp7@dTdOOplE zUYCIqFwG$f)(53^Jk#q{{&{cF{V^Z%=z~l8BU=gr~veW=>(9^XQ)5{@6u*q zEx7=E#L3LS?iJ^zK%X#$dVVhV=scpMc<)gx_B-&xFURqkf^yJnl+%}>IPn~!KOSM( zi{BDC{`xm2!ZcZAoVDwPcLR?F?NW_4UgQgkPe44a-gS&p2q2Hz}t` z$U((8aah1iDeD@fG!J0+(0=NN{2(Lbn8Z%YRNefr&(?%EP9$KS1-9^^; zM(Ggv42R#Wsf7+b~TJ*fqz_>YO{CswI(d+ zKcpZvm{aq6uWWzjKG5Ol9OW%(f$GzKg+ul7_PTk4>k|p6iMO9{0DHo5;!R zMO%6stE)F^6IoZgX(Pd-#W!eht0K4#8vg;SY zo^>aq!dM$WEs@@o?GD5W44A04)62Zm&T}^qM_oEqAbxVP@FQ_k%-2xw{u?V6BP??y z2xeAHz|9%{y71@4s?fRWt&nEH9ccrWJ^x`fO>HmLG{l z(fxVq@`v(Bx+7Q=1q;R(4DC^tSPyMVl4~1@<7`;9%}*HLB&?SFko(HvT!W(ONWLSE z6kb=(zimK03?kX+@NBVpv_wh_RV}8L2#4B-TB3U#(NlZ-h$A?KOfKSssnE<5URWHn z0aay1#QOg%z`r3j2Q9%3Gc}e`(?cd!I27Y&bAE=aaw4rNoG2P`EzkJ~_^8HrNX|wi zwxl=2qEA&;NuUU0)<$d=#$`(Nc1WSyWK&&x1@LBY8Oz!M6(JolTijnE=P!YnAUCe6 z2BJj;wv@NvqhSZqBGddC&m2K2}$$X{@wXCdoH8^bX@+(gh<6 zLi-4(vzVc}7dFFv%v-<9ZrN5ub!T@#=9n@a$UEjmv4tX=N4$qM$J94N7oJsz(PFPg zcu#3UkZwJJ5t0un#kc)>lEL;B!y5f1wkzhWqAyN{tghyv?+Bf{BGD(AOW+*OpvB94 zXS;h+E_hj|LOl#=4Kt?tW3J#|wsC*vcONls9dUMb!fV#U2=Vw!BbJj|*t>o;U!~H4mV0fgJ zUtm#9{gJ|R6;a3-J~`J1x-Odr>Ga5JK)NKtya*$bPV_jA^K(G zyslsSE0Gr{iGmn9A1*;9M#?)5uG&hzs$O$F4c>dBv>o`5n}5i?__@OWm4@ni5Ip9@ zNWc4~Spw@ABQ%#8gl-P)xKlJghbIXrW}C%}dg2J$5fspe`ZJz0uyGTQy8DtsRDsXW zh~Y;r?Gw6(>ufTbO~>dc_;xPIh0 z_pfjb)OlV+c zA#Av`<=NHVIV!Y}%A}K(myL8HZuaH5cB@7m59g+-up7fYJkvxf^E>kYa3jxD4g?N{ zD4<`fR?DF|fd%ut640QW);_kAg;goiM?R8}C^Fo{YjCvV@2V8-Np6hgD8+8jh*^=e z(}#Sl6lXcc!*N~(o|GDnF=pf&ICHdmqV(f=;p~@UhB%NHX1~tU+E4<8N zLmJLIg-D)4o&Icq_>Y+0XIGWu9mWraY$p1Pn#KuccV12N%EHA;+vZ*@%5uUlujr?? zljh8y(YCy4Yxk?;zOUT#R&%5`%T^7%BW4x0fERb{mnxfXGeIvdTyqw$J^AU+?~P4! z7?P;Wv5|pj0y$qpT7sc6%Srq3u*|vt`CE|&@6pu`wK^@polMh6fbqq9)`(aThsP^y zQvjZMb>@I$K)pAFw9IY(CG=7D_R%WP!Y(ncdZ6oGVt1?W7x5~KtY5tNwl*VUz!08A zfx_+YSVatWnv#4eC!FEmxX&i?llYEjo6>~ZZ}ju_LbTXb9LXR__n56hCEMzlr z`mHsu6cj(v=JtL|9xy!xvK2+b8C_qpjVmWIdyt+nkPX=hf;kXpSNizFatk6bS775l z+@9MLa+k1$2gx51BRyBN0U$6aLXZzAXn*A2&4roTb}e#ErbD8!eqk9@!owUcC_@2Q z%w$7Izk@QaZcvA8^NEB%VkkmCEAQY{-9YaC+6iu6L7IvN)q$&!qX;O!SD~$L07>-erxT;(f~;vTMIJ624>&+1r0< zj#(4P&x2~rtyxzhiQp_qWqb{>cpBkQVP80ag$b)?<8_)$?UQRmh2o&d!8Ybsl;d>> z3&CAy3+Ir}b|KhlQ(j95`^e_>;pu#69i}AkJ)8r`*I5|6cfa6QrzF_jWT%9-*L4dO zG{eAYPT7u0=BLzsFe(f{p;&%3N*|1p%+spy1rMomNz-5;gW1P7T#t4&2XRQ~A(ODi zit~{YkY1zCLiv>4MqwOU65wTFp1H(U@>7PN_t?%L)sAVK!fJhChS6P$7nvRJZ>qmP}3}BisER_Ln=4V zvs|r`Gp-0_8a64)7vuwn^c1a1Gl%@r!g_#n&n%3WRfUv~^g?S6hLNO)ZlsR-G#G+R z70*Wb?;2GM?J1Nb4OwhU<3IO*i&j^{BuZ?pAcW}r^rFYeogBE5&r!5AdvH(cIcm4N z{?k5_Ww|j7r}vF)QVY5gF412PFMH{IkdF-G9pk{r-4L83`b8#gQjPNwLA1+jK+W{F zItKmTrJ=2B$X_XL#o;*8wB-}|wAy!~FNBLkQ7ySV8#7X*UL(+(jItU_1gbMatx<@O zN~!703e_|Yj5{0JyD&feyvWF=Nb-_=vrfZp(&+?$&Mvvjfx$K0VRR6qTD&Uq78nWG z#~A6|9%;pxS)~)~Wji0gqyQbJls^*xJ)6mDp#8{!CKzhi31*qDr;3A-t_S%44 zZQ7xw^Gi|aDW+->>p3v4H92J9NF^Cg-7pRP!+9$!)CN01}r=>rQo=^mV%Ag|v*g`v~52-2Kl$b5KSSqVxqkGa4t z5*X1(nI4=av;H1r!#sB}xBInbN*C=m`%~28*%;wgwt?#j>)s&p6VEfYk8!g!w40*V zdt$C&b;=$$44*X%$ThL-7@{yC(kX6owI9-XmoV2ikxG{32T=&y-9(;6{xvG}?+QNP zjU%q(#R?D|2FxKJjv~?6wz>%xjPzJHqW8CKew}{!q!2`oFdHy ze%@%XzpYxdEFYn8OB3`g3b1!xBxTeb^<{(kX2y63QnzhgIby;Um&u-UB>q~n1SiSR zW#>R&DUjuJ-2+A1HzmJm9dtWtLhZnRHz`9Ah`Z)?c#;(>-b8lQD>!6!pn_AMrG#8j zRf}^hw+x`=3BgVeFYu2-+fs-|ZqVeEB@RWR2trTPVH2~-X}K^BewUbP z9YoEYLe+wYBQg(udJzi}8%xT`hN$E0=PwuD_Jo@&{KD%Ufa(kOR*2)MQrM5D<$LNH z#uVnLxNXME8&AI`dq#hv78z4~TBYXe&yT{oMW5Ek4p=xa2EUzgg8=J>UP9_kq;!n> z!yTX1Z%2akV`9LY>CVv6sc{~OWCLU*mr2p49Gd>Fz{45NmHSUFBD?26Y&nU<5s|JF zk&b>-o)WLWz-9&!k_2pRPte##^g1G*bwAhB1a>nJLr0>m%f@h;pb3wpv#_2vQA@&7 zQMzU6{=-H5t^1a6{XRiX#nazbVd<+FpqaNRseAXpU87u%qz~Qwmnn>hG%b=WlvKc3 zYS%a`AEWRg?ugR(&CF%7GC z2L6U@iZVYdn!wG`d9BeX{Zplv!KSn_FQ&`}JmG0Oa_1%ar<)+aOP?!bW znYy@`R~w*d5)TJenzVuM8Y+Hl{X{jK&OtW9jLly1WmL!)Vno6Yp&ECj7wYf`50gFr z;mgr#jA#_+0E8r2R3u6i+p}b>jRB3*-VEJT6P2^Kz9`28GOkeN*_+4}5KD=4K%X_6h zs|96NH_yu579&AF3)vos38%4iug~O_bJsL4k>1%3RKKy{-ZrW-PRVn8;z_5oQu%K~ z{*LS;Nr?Q>e6ay(Sv4WSYicGd(*Pgf4e3WmNUG>=ly!|DVdw`Oa6dJ0*4GM<4S`AK z1zD(1-o_^k3a^sn2DM=X61A3K{*}n>w6)4%8kg9sr2M)NYVt1!b!3JN#gNP&AIAuA z0uMAY5(aKaW|Vh`*;vJ#lQR|@v&n2il%zU2q~oPD;7QpFOXkB(r4{D@?y`G)KkE%5?5h{FU20>?tPPV)(Dd0ISI zns?JUdpktam}1|mhJO!OX7()uz5a*>+#t>OxGpPRilfSDN&DWDaU1?2Ng{gE=6(8Y ztl?ws0hd8aiLcv2WOus40LlpTE-!VvK{eR+xTY2e7LICGL^@#2gt4LYxc?b8_FDzr zh}yB88>!nQ;+c-GpnTNblD9ixBmyO%t6nH^}k=vQ4AqQt)ld&G#c~|yL6k7T!JkC|Y zv4J*V6$u|_-(<1KFR=cZCqEzOPiZ);!0e09jhKMzbEYjFea0_N5d#5wZ;6AGw>QV@ zl{S_d`p~D->)Rsm(@Nii1Y`* z;OOU5!|-9lJt~mM<2^9wj}49962AG4K7tc3kOU~fpGepL@e+sK%bODlxo& zmn+L7@Tz>ae7pLD7F+s)ae%OLNWkC_z#HzBzyX6D>9{3+-ltego7EebfA1Q1*5tJe%XSz8XJJgm= zULtAV<^DBIUvDu@mEVj>uU}q-fK?>@OpP<+Plb1_q6~iBeIi4I0IVhUS?@?$ z$>%J4@AtRTp^twLBEUxC&Ngx7E)}ID0K!au_xU6M$eQ>YLwE^`xuoegrX*h%+a4fr zT;b@A*_YMLzh7Qm-F{xzy4j$ z=(a3yG3{>}(RaUM9Avk9lJ-LHleq526$vccuzZH|Pyb30_n=(J8QjR&2aeyk*B zxYj1|LN?BrU=t+Uzjo2@?fcR;aYG28E1aQt@v z`9yaH5A!*km^l{}o2d_bI@j5I|Miv+Rp`#47%`!c6yB4|xT_xzge+c>F-xOJ*{Y0- z=Hm-U)^1IyE`dr9C1=+1dsMO4uA9n@>FIf{d?lTT6k(^@jT;QFK^UZtYvs;qgyXD< zTBY8WzP_l8V=4h>;IC1VH#fH`z{oB*5h6{nKPD<$ceC=-!IxKBicmnA?)3EDn9b_> z@%u$IG;@ETuuNFia`gKJGEo__Ra|C8@^cM*R=0q0Pls3E#aqGov9WrS*9})y`kd*+ zdC!GTkG?X^E@^40wrOOFFJCC|O74v!aG|h5X{OE;16ulGF0!BqF-GK>a z`FXBX>I0dODOiO=fZoM{N)HqKSP}-RK{P4r<}a1nouOAJ?+~PNJOEz0LbHcZ@kKn~ zH9-MTs4=%SxWMUHnI*H@-De`W>LsGs%aLxfV&@cp+1smH`RT;HSTf*iXtq<$o)HGu zDh#swSgA)jf_WE^kR2keBySYu%YrduAzdTn{q3Bp)nvfQl>oiMFq7Woc)Eee zVr`J?44h+y+By={l8plA!+Mauy>Ii*)mK57hUc(N#FNBy*xJ92L_8Ne7z1rz2p>Mr z!6K5r@|rCx-`)i2EIcvQzSTB*vy{jyKWR%Un)2|00;d9{#xN(pvxFc29kBaTc}t^I*+P7=0@We^!yJP-%;Qyy>peGo;2(v28BPEannA_ zJyuWGgYCV$(EH0n|CKafx|9nH{GW%UBlzKpML44Jo>#M^14lzuJTJ8)&sION8o(zdV_jMo2*&7 zYKv>VFnJrjBKX*#fH99U6KoNApCD6>x+0uoSI8KrlN`W^cD=WX3 z+Lf#SKJPe{@U+W+&imJQv5yoH3)v7Yxv?s0?tV-RkLp`bj;PrT0Z``dVOKf7uWN*3 z3Ih7Cd;&S2J~H+MwVq$2S!fowOo?ZrWr zKqK+?vqvC*2|q@^D&(_d3H$Dl+(63ue;3A=X&Ndwo)P8*wT=qif0Hu)`N|x%`0alT zzJ0tzA$x;^>GB(;<&3|#fY)7$^xoPhRA1+MQfRHth=lwFA$GQm2Nk=sv^LVgn1u7C z8I9z~H9)L$y(QG*9KbQZCi3!Re=;g!a|gYm%+ea6_nLa1n~5YFr0^p)(zuRRDJkpy z04^kP-_{`c$jnICtP6?&YRm_dnb3`SGLi*;Uv73rlqV(;-Gf~3?8LN`|IMcIA-Q;R z{M8j50cBWvgmH}Vk7FJK;F#n8_$YJh?Kf4v)(-Jz8w0$h*h0j@>k-XI`eV(LEpTuFl zUaAqRhAXC;v;7Xm!y{Okt+rDKO#Aedwy*1{g7bsWxgAPU z%}>zwKBH2lqE^7x5v=Wup(WLIPKdMi%+734xg!I2D=Cd>sl^FzeGmE>8-x{i~nKF z&E9|A!9l_<-zz5$*zC(qx80NewoPrCT#=y>cQc;|VYi+TeH<9Zhq-o{ko^_^jvV!v zJFOIWV0Ad6N2By?i>=3C#z}4k<1Wrz*!Qs71(cuy&NQgYARsalo5odvsP=b>a^UzN zQ8)-bo$xvj{8E$ph}_9WNy#{ed7X^h*Ivpf-?<4%cXn#zl9#2KY3fR;{(>~ZQ=R34 zmLjw-oOoV)1-8b03auAaE;U%Xv-wmSiq3nALUBvvFaj6AA27V-B`VA({V$OD(*p2p zD*;ealR#+K2GSmYKhRDXK#Q54IM;}BxB2-$AoJizM+rUjgIt6VEOO*Z&}ycaWulYj zr1eS~XF=JG^+OZmex=UCixQh~m_$+9sLR@|C&M9~6J(NzRl0Z&Z;ksO=`qOmaI(qk zkH8g_ zs>Xuj+i;Cd1-)RkenPvM3h}T1rI`DmL^tPENqn{bnW0t*;(r90jZ1lg7rCigVn!qN zhFl#7lxegU^;4`v3b(jO|D;l;P|yWzTK=4 zPM_=b>lXuNtvFIqD_wseX^qch7+Z5l^mw$@N$srlxV3SK>~QtC{x#ZqoZ73(pT{kSrp-?-e1A6|s@8e( zHmJ%0RD+R~iCg!OzGPSQS|?|of!+0u(39aDhFkZ>*}`LIx&NV_~2$=tZ2i*Uff!7MA8LmZ=7zxul#3jLtAOQK}}+*aAav^+^B0nR9#8qJBtP zMb`jvV)W=(65)rTZW828Zl_k~KjaFaUU!4o%_KCCjsO-yzE?qz39^Bou34%-8;7`#{-nJc zzGlV~1&9F6w3?GmlW3dhQsV5xb0qTru*@;1Z|{nDh?}hdb;mXidDN?>`?-*X>`!alf?~JFg?(wtEBHkU zPKoqEs&)TC5h$`5CUKE2(d#y099wXaF}dHF*y}~vigC+fQ?t3e!yt24QroCcguS=Zp(JnKUNrb{QWtESSCY%Y2&U5oJ)#bkkPM5h^`5E zf-GXTm!STx2qr{MjJ4A`%&d9gi#cR1#UJyV$5|Z4{T+^4Kkz-+6=P5n!CmjzXGzT9 zXz~ltmq7O^qYNin3j`JskavnHWfou#9MqLn(Da3M6r88w1iqy{?dU$kb;EcJfDRyt z;xICdPDWl|-FqSqrfmwEl#=B-& z9CB)iF7YkUBXEabm)QwJ`fW$S_oY`s_GM%CoKPLr&F&$3>S0OD;=xHGv9J-qURXdC zyC?}OE`(xO)I;c4$}y?^2*u9C{Im+|j%&%*lAKm`#G({a@`EbUIcb*kj0kFjqA;c~ zkZ8QFl|p%}NnZ6VudS$tr$7D*cO9x~jJfml)Q>)et|NFfH6v?s%wskut5Tp00BM644o0WL>qyH zKwZEa_EY@87CjB%qKP6b|3xz`CN8glP{9JD9pEg5Cch&jO2AdG$g{K#`!LW+6y;7T z2h2qnagYcbxi=+P7iH9rEZPF*D1xT1@k7+Q-!A$9xjE7T^dPPRt{8{jW~vWd8MjVU z_)17K!V59f0&z0F0)ed?hBp9)mYr zq3*iCDbk8Bx)=;Yr>N-`%>jJE6*-M}F*yWCXG8^_$_~-GQBl*5PSIrlrsz`o9(gXeY7xkV$jo|i$`hqk5y%pJ(KYc?W7CtUDb;~&!VD$NO;FbOReAK}<%p>4!87Ukhf5KK z^E&7)xn*_QnN+)Hb9JC6vo@*1GyFX^HLGuGc2ebQH5C%eSF<7 zk0uf)FmoRW5H5Gb3s$^f5d}$4FhGU8K!N~};i?m>A_P$G>s3H(KCh3t>Lc>=w7jF?*5h3iuG;JneQvYD__qwbPnKx2AlmGBwmn+IY0O4C4+Yc z2NC&+1Q6d`v8o(kt)Ea2dZqyxK!^!Y2N>fC{c;LBl`q;Evw5SbKr8xX)GIi3C81(H z?Q;saJt;!p1ISm(jYW~(DIf%%^9R0vORQML`7aWo`q#mB&ktmFO#4E2k1sMB5YJ8^ zD;UKqrYZ(NY*mcnV_pAZgFM_vi5EPAdl)taOgEJ{|HknhnH{A21)%!`V-`#Mu|jG^ z;GfhtNr3iX<-9*|em1T6K43HWFXT9WI(G6DiClO;cA0JJ=B z$gc6H^772E6mzi0nJ1s3ZP^j1&oTt$O_-y_vq#V*a|>k!^RW}kqI!~)i@6i45iHCO0daBR|lcn>mv?BW&WJ7e3WXg~{;XM%y zS%Sx7J#s@>GNq5)Q6pb5rHY}~hZ}Yt_8kh`>w&;cj6>NqHW^tyvYo*M`}_At19yMGTNBC3&P2PzOUnXagfl*79UaT+-Kh;{??Siu!F12td-M54K2>HCVf<2D z)C41BU%w$NJ5qzAZTZK_-n9~8(fq%MvNTdhU%y1l(OdS^9eZmkT<%~mG_T1t!xLJk zSZA`5ytqQK4~Ui?MreoqP6fu7y;7R#9KErLRwF(id=s?zD?_uQ>}o13a|afkZOTL(oJ4(a?-7vBVz1^@U5Xp3v?9shnmrm1`kW;wQMDN*O`-12DQl1VM_vg0 zrp|T!v-sBtk~Se!(IAF(6>};RBynt!m72-DEcr1#VN7@-ccW8K`bI3KkV4q6aRT$k zxXFsz&9S_iY&I$LWf>g8g?7OOn5ZklxdXkos=fxYbYS>dXAe(*cDkDdRcLV z31P`(%EPcIfh$+WuHXD|=>&R(c4cT+@T8Df6s|UC-lm<|CP-X8W>IV8gGu^#S!>ka zEUq7*6mkn%%bp!5#IAl|9350gh)%)Us|Xsflukf79K>^jmbi{Ma$PuyxD_!98q3ILne+0Z;W{IL| zzK?&U#Kp<~xVrGJop1T2i)%$Cxm_2_#``YZ%AOKk;XR zbg-CC7O~_*(olDxpAWmnM$C7QFbnq(0!=$GfJ|);dXKdZRW=ey8M)y#N@B_jo z$aUZi^qdoCg)>OPV3DD$6$GNxj*~j%i3y04P$+CDT&I(;b2}>+5t;vY9U+dfbofi4Jk8wqOR4-hkFNBW;zLXZ-TB_nI#>1eI`T4@X z;6^AbcYS>rnjvAj#+%^8uXwAWNet#8{1K@Gzo%pQwRKwNASnIbMff+JNvj2IMoTfU zEV36}C6}6vF86DQPJW`dwFn*^A`Na+!GaR9JfWV<$zS{N(qIdfR2ZcP#fnNFXCEb zJkm36V{g}j-{2Lo)*atb6uZH0q~Q=6T_BMx9#cuNfnaoI4_XcCk2k)ftN}TrXON&X zuj)H-2ujqVd*bFMp2#r?gWEs5h-^UF5q}#%=ap21gLM5}Fo5Gw4_hWuG%cwSeu%Pu zR=R}%_Bz*B5#dDZVf~q^ti48_vhQ`COXiZ8o5DPug8E2;!VUtr76IWb{&qt(oBC01 z^g3zv3c2Sy*r%a7BnmR;7)P`L?>`)owcHpFDL)(*V_5I}6<^#pdfpgJJ)n#BbQ`?L zTJ>pJMfqY(V&5Wl0|~PGUjLX^Bnj?pzcOXY0Ie_T$o=Hg=vECG^=^)f#u*i+x(H%! zSvP_opm`1`@fU4Fuj@kMa0W`E(D;_>*l1MKhdQPa9QEIC+`>xi)^%ITo)cP{#oeCZLT0m?SC?+Yd-Cj(9fxAT>EpuxoBc5 zR(=R8Ea5y7j(+}hi?qKbU_vSu#Xs1v-(^ah>IQkNCK8K49HHLQ(>GT(i`0+nQzTt>L{Syo=Pgt4$|fOXMbh zc-5)_$1i2Vn5@&AKfWV=wDreOw1>2VWF_L1fb={l;XGu$v(+8dQ*n>9&D-ve3(1bD ziJcuCS9*qWf%?3TQEpQ<4b2NmYu6LMqAhbTg|n{Q2vveBH@xe5h;(OBh!k}#v8Fmg zfMCup-U@bjmy$PP`78S4{{vk>qQ4*JxnE;j6L>vXHy@p;-VRHMxf+1Tr{vmu+ZbK5 z?i6AV1wQ78xmHNdF)Hhe6nx%f1=QndKAQp*=p_PuMf8sjP|;%EBg68E^}X)>Fx)+s z;Qdz>aiSMx@RKvWfruq;<0^>SVtyAwd?iF7aXOn^(?}7_uULO>+Sh#l5oG)lrz+@! zD!ezOw*o9D=4MAK7v;;X8&E#tw^9XriXf-%gS9~?$QMCf6zpSyT(1J_Co0BN&}a}( z4N@?j#!K;R}kict~nv;cVCLRL%u=uvULLVpO=?A0Lq|+iryADK)hT7$2a2v6!#Vnho zYrWD4DQ&u7ES9K7~Bn3tF_>6!%nj^JXF9LF_o#2 zx7Zm~$bsemANJk@yoy^}8y;=j+uH>U*ccmQFx{A9Fx3>>bkj{Yz1d)!4hC$B3%z#; zgc54#p%Z#YLI|ml5YkQxCpqaoCnvr9Yb}jtG@99*-0$B1ySd-BpT}FXq@^W|G$XxB zqj{%2Nt2(aU`h>&oVtRfX+KghJ&ht~^e1WNYZT0ir^vh=B<1^%G-2P@I4BO zT2f^3agyejCTYP~3YILPU@1P)kC+&Y+ldy#xz*~~6Pjm0De@-=l)=*tejhF-HZZZv zDjeWY7}$#Wf)E7%QB4Sh!`Ma%$t=={48=D56F*SsZs;wRUM@Hg;o`s}=>55nbbH_< zsZfDIAE8#@sA=Q0fmgAk`1>yd&$TYZ8hwHVzr;2}rUO{`JQ{LQFLVK3L2+zFKVNO& z7cBwlRRMGC3D62%#z7Wx5Dgs6{>b-evmu(j1wS97l{I8#6Kb{W3djNNwJd~sQe}es z55t=7t+-luH3#k=POdBIX+fyuDw^xj2GP1$5IPGZ_aIIHFBmVU^cu7A%&<-QsixQ7 zxyr7z1r!Sd>sckEtB{4}0DumdP_0T=mYM(vsrwy*LhJ7)XyC5O0UtW(Z z+fZ6a(pz`}oS!bFJ#B>{e!7qjxW$C?*@bir!TmDCXBX0`e6|>oLppPQI^?Yj=|3Ck zKZwsRWIz!f^N+!XbSvH4qaDU(Wf5z@6NLY$uTS%_iWIt!hB^KmDI`K-3MzcBDjfY4Zz(h3$~IS1tlcz(RUQPZSDQAo04a zfNW(USxcd>J|u;AAn^nFEJz`HAvovXlENR5=w2&XKo+r(36**Yg&0VzEh`|IS;&;N z-9-^?Au)BWR0JtZZ97z07!8TpvIV3e3&{;D5DE(*ak;F3*KtVx9zbkQkitGlJYf_O z`X&xrx>n(vfT&(1t!F{wRl^L|>V-U6A&VawB}{z<3co0(xYCkZuVP*&$n?3!!Lju3@!lZEUaIZ9~75Vupv{x`?tT>ek6_=iz! z=&z^g^bj$I9Px$Am+mGO3HM#hda3rLaP%3tbm-P&Eg`Y(da3p!!Bq@7{zMOR3>b3ZM_dzPd62NsNDM8{_Yxfe>me7HjzWzGA@yNJV-sVaz~~lo?F)30*kh2) zy9Wjn9Gg;m@(-B9$N?idCb&HaF!MdQ&Kc1fkV)sN=`iYSX0*mwHTbF4U_3P(R~45r z{BUV%IERWbXw|B(XiRwjZH?XVJA2?yN46xY!n4w=`Kh?#0#e-NJ)ENCkOV-BKIH84at?&&Vg5eLe`pw4bKwEJVLSeqYdw%HZaEQnZg2+@~Aa z=xwv%D{QQpq1$K+I;m)*(iX{vuNHj1GuhZ=v*8jpzMQJtSOhvN(MGsz!=(j1gRR9T zkfC=s;wBr}P@yn%w2yA+MbNp6hH~hHwlZ$15Ngwbj8xyG)XEJ z*9MyVL9iT*%y(dDg3S;UhCZ#N8yX5aW6)3;*$~r$Vj(iP$yhiZUV7CgaazO6=%=Lx zd!}Jpl|x1$!>j6rXu)SFtrVBc$v$uqt|53AOlI@_%BAdJ;=F|??EyfxBiq1%JY zr1>6PxOeNn=uzi;#zf<9Te5~lD^v1gLz4MX|bu#uWB5w0Ze|Qgk~hdVLl|zd(ED z@pIXHM>lPk=WjvtH^}h&+inkjC_4zoQCgBXZ|LYHrQ) za5!TheIPq%B?P&xVcZxob07a|wN~x=M}GMJ0_Jynp52O%EbF;3=2bi%iIc6{g9}Od zo{vfAOZW}`A=9NrjEt`GAowB^r;pP{Rz~Mh3s^phX(Ox9UY3B57rV8QF|^xR>x0uy zgA3qV`Hl+e1-as5G9e*;H1<{eVf=(`{271TZ~b~%9Q_*{OF`A(TvSbMf~vn^@5HA} zMAg_-nr4Q!jYJn4`Ptr!!<+VVEWK_Kxpi(9$@$wfZSJ%&V7d!N!^M!%2JCgmQ*Ky=jfJ|7YFEY=KnCV!380<`|55qdIIJm# z-Wt_Dl_&*!LEI1{F%*Bbs_c~-pwV$bJ57J?Jk`t&b@}Im_Q2dRJD z`Y(PnBj1Bx40n5;kHO!U==Y}>jDLxKf1(&9Rmt}tuZ>&({gLwiPO11E=X|n|?{Qbd z-yr%OWE{Ia_{k`^-IcFG58Uud=GwkDqoMmU$-8E z-?qv3d`I#4$(P9A;Nl%QI(*JU;N2ZO2S72h3blRO!17ERU9k!^by_-f?C2;|^02hR zx{y){d!-CZdj(w6(RBTmWof4Y>5Z;T*8)o$9qZOc(j@ zVw~2a0i;x;9ab!D^1F~yoiv9zzZgHVfa1m_!CM#pX( zh);$XPvKR~rk=1uXXp)5$8EGrC$!E|(7?=wPS86>Wi6`FxCx^BO{ zLg6sTCryPI_IiCNzh18wF!5KgSks{A3l(xeXHb?3Akg9QI$6)L+GIbQuz#lykrMBq%gJiQ_VR z0}}4Zxr2S7#?7ieCvyM16Q>y|_d9s4H1Dz;6DvSmWjV0{UKA~QBIPP;0&%V6#Eqw* z+(eHHYuy{-(#^!G>{0~eY4yWF z>kk-b#|%J~2It{+_8s%D9=l*P4aebk2kX+;pVuDXNqk%I zQOd;Q>#t?w-}ce8a`DT@GA%TI3c$~>_#NP(l#l-!a)rlt1W3fI+*E@9r$a3DX~v zgH!7HX{ni&w!m@V)M@!zX7p{G=mV-W_R}&e@1W^vz!sO5Nuy1ffcO0%K88<8dwt-T z#+sOb0nu59~0k#3&gLUJ|>QUQQNP9 zJ|-?3fES8BCPsskj-dK#iw@17zr>9lDS6`(0z}Om!T^foF zC={x_A1@SYpu%-kp?YFlq0n)!c)>|lsF6KYD2z80Y+5zlK0<3HY9Su5DAYnyF|KfM zubH+UZXUndN5=bVxKEq0>wCo+Zer{sKp}pyt?+|9>}^aSSO=2{_Ft>zQ^er+1El@F z*J#`-tQXwSey!8135AG#kZqr&@F-qSZ8~KMg~WZht3pz!0-(h&>DVx#Fc=a?nF=v1 z8%86)eHqM_7iCQ z1bD-*-GnyO0+9NNqEUra!h5FuH5l2jMd32o5BK+eqoTVRYmTkeF*jX56;~M-zvk+L zRufZm4`VraPMx;Kl9mtG>I)hp_FHQXs!4cqonz8T)t9RlfZB4q>d$x%sk4Gf)sL$l z0=2XIt>*%&KVpM)890_y-CXq*P`hVWMZDtI^|?W$>d#gG05$i+#u@E}a^M#A>vp^~ zX?eI-RZ|1TNsM#t_|;d-tR0HOVH`5Qcmwh_!sCWedi=xWM8U7? zWG%>$fQOM!^zhTtGMnP_uz>CzAUYWjwSea#KC^wP-B^d4-Ql=1g2^%g?hrUm#p8$o z1dN$of)8T33o1Z-S3Xo%tOUp1${xg_I@krr-SN0Zz>4-BEwcyerv#3eH9^blc@@@e<~L{KB$Ivs?p64Ysz8tEuJViXwMJm3#iXVP8D~T43R8o&3h3Z!7S=j3xi+fp z29+BQYUF)>Wo5z4RSek+IW| z`yv``c7zWs*zSRq9vY4C>oz33Wh9CQ#r@KO_1-0oZz1(3IXl)huwfu2h8%)~Lq_(g z2Pr$gCL7q|lVPaQ2vXbFH1MtoOc^~CHTpv8;6qXY=>Wh2yPO`3iBlk9u9=-$WFMg9 zj0`QXcT^^-Y=Gp4yr>M^hfT`PLGl%|h+b@5X08@E>VQY=5FgJkIz$p)m5WA_nfyO{Zi$8e? z%->8WKM_(3lp=L7hfi|?3tXAv1h#c)~(V>xE#inW)Gv@`zIhNgpRe8oJT+?LzDoX zlmkaWC`%T~q||~u-;a)~onS z&yet2ojjea*JV48L3&LJNMYeoOSR(Ir$<2H8~mm8eX419sl4~0( zI>3x!9pUV<#|EOCz}i4^x`P$-gA0(MF`RAoq%iz)D4PVz%bYThBl6uNbdi^-plR7N zubvU_5$uHw$IVQ1rr`ZRXJi+=eOzcg0~&V~tr)ftS}J?-t5n<1AoT}p;b12o%E?}J z*C?$lB-Vb!&@w+Aq3c%~11-4aZzqL*+edI~gQ0Kogy{P3!4k@_o1pi*jn=ez3Ih!!<1@PG=3+1Gi^RT{HlW5x(V= zQ;#-{vC0hd6gdgF%;MufAPbb`5yfGW4<2q zG{xXo{_;KV(C>R)@R!HquUn77uk=NJ3HT&-WX*Ob@x%3t;96*ihgv|L32@v9)jfe@ za;Iq{6H*~QW(>m&;4eOVLepM?|EQiPO;|9p_N6_T`Vl02DJQNN?9xWYj-mIOd?Bvl zNs-8>B@>QSWl=prx6X`gF{w0Ebot8+(AL!A_(D8%-w8Y+v=TXKs!MAzzDwq5+?Uzf zrHvnkhg!hB6gVD^$DV*&li_#-9+wH&jK?F#pGIt2JPD3RaZK!!3CE++UyTjuFaeH< zg`gon(ed4Ud%6+-KwVzL`b|A;p6K}QHG8`t@e4@sIVBRM6QzgBRp>;=_ZZp4rMsQc zpj*eP4;B}p#hx!NLyO6fn&w~;jFm@Yz3$Ey#&SSyrp?%(k)V~fxhEQ138_1rjlI|x z)OxoaCyYG`YELT0VC0+%4bgXdj!W;Tw?X3{h88G{9tvjql}ix{zeA$mX-Oe}6(|ho z*Ip=8f%saoLQ`z`fsIxOg%pVIY${Y`^Ol1``ie1L$| zX}G5<--A1_+@4{p@HcKX#>}P|+*a%M;3nUEI?ktKw+G39^F7G2?ACw3p!*2F>y+<# z4N3{Z=At16cTw!8XN`rw(Ji-%Oyl;deEm3_ioxB^Zch{ygRc+-@j()I4CZ@qvni;= z)A-O3j~7!}Us23-TJguvH@Q74D85w#{GAz3MSpVDm2XsD#|0C@0iTsFZLHG*VQOdq=gP#`uQG2o&qlavJ*jf0k3_r&h<_GIw4&RD% z)rZIqXD#NAu=FW#)gl-HqnNAvC_lqkoMAK@jZP<{Xa$Wv!eW+~D#?Z_+XV{8+06O4 z-<;Tw)=hvKJW&Kk$06yGQ3E`J6T-KHj#92V!#vuTH#(A`AN7!J{{Yp#qOy;l6(@wR zLAibhG3K1b+zFPAFGJyLFeg|p9@1+^N6En7(>#XVnokS+9l-({bq?+S&g~y#0q5`_ z;}{D&$9v=?!xyV+>6w}vndf8Xb?|eF>VQWKYZ!#@Go57khE)q)xv!DwQPg_H$V3%~ zOsBE#<*DvaHssEL-2L=iV~yPZ!rZ=(+KN2M@MSBZchJzU3977vP5(5TmNgw;#KI&z z#h?_bGOnwozukc{=jb8Zo`Xj64I_AS>V@Jmo6wtU=s$@1hn)0r)lKNFHuRrG{Wt9T zXIMM%^4(RJp5UkR_(^eEzhaK4^CAZxF`sqk3lFhb6CeXFS@^6wQK$vs3c(qMs~PTk zPw3ghE(w{?zX zPSV`I6t^ z&PzC7c%D_73v#O+B%dif%NCsGCC$IsQ8)Ky7trXj@B(TagdE@HgFJ&<*ah;}T|u77 z=i+Yb)r{`Sjw6m9~itfQZ2=0q|bMforvVMJ>XZXCs zeG4Cl8JEIK`lY}xo|c#B;wdU4E}n<7;EdnE2h(^(o@e+3#{D+GJ}yIVJ@hy)xc3u0 zyu@Nsp^VZDXFR+hG<`Nj%LLd5YC+giml>|nxuaN)UiIz9=sN~0@uS+B2Me$8){A1| zVmr&`=$SX&5XI94U5W9tO1(-A5Y2cCq+FuCpYFkE(AV=$#=gOg0JOa^tQIR;OoV7A8?8?PE;WEadb z^fF#xXp826a+k$qjPJF$#)G)bCI$fl&U6r4G`4bd6nSLkD@Z zfDZ_ELWyYdNtjecN#7YIwgf9|~2gv+Ssz`k@{^#r&`En+=9-T&Eg(fZvdl z4u~7G7|pD`BCZZR;?o~4H{D>kS|*e)8=20b)~~iqhu{{-(*g^4?~Xjn3iKQo^^o5c z!B^?7h|%u~y|poxTDy-Hgr=WnH>*N#Jjz_vuOi2!Xfr&rjy)f2!5-Rj-UHN~@*TG@ z^E+YbCT8`yCM@9*SV})gD~hgl{m!ypx^Au>!q5g@dr*0X&>aiWg6f{Z>vSFzuv)L; zUZbjY&|-^gYE_{^_(qqwEh3*0x5psVpJC|Joko{vt`_hI#?yJ>TTwR{zNA%A&zWpk z*oGD^+AIL-%FM+#xGoAK=zbq&8u%No7a{J=YvO{!Be;t2gR~dfV<7Y!?a@;70tOoe z`92Q6r60$u=*4T|`os_2x}qVn$>SDt^7VO?UoH@Lk0oejM5V@bL!-^v+}uz9<{?9Gwf=eX*OzDDGXO*f-G1zhvvj z*c>W9{TN$J2WiLH20BQErtb#>^F2Lx(X+xz_!IEk?+K;pVSxKwS1ou}pqWWpKmmQw zXI<8L*66IC7EoAgnSMdtVEA60FuUI{KLgEgRLzT?-APGC&)#5hQQ#)(nQs|JE~1g2 z3?q1ibp%InqUL$=Sg3y4pVc$GVAMEw;uOtu8)r3s)n{zMLhx zr2HQCDYLhrxGS7I;xR_Agsw|F%ih(ERC-R#;Y48ZIMEQe)=jz!P3HRq<83w)uiSPq zaJUo-dFV-TG2oGPD13tkS**%Ym`$$g_vP!x{rL>$xbr0TH=5$N=GEG!O6&eY^*dB; zc3qsxMm|cV>!Z#{-|^M-Q~6ZS+E~we6*Tg-ps~6J&1y?(n5KIgMGOS%Y^+)Y4uqHE zpbrLcy_*As{u0#RZ0O?=ADu&JbUq4`#q4yhyfU%PSNS(UJ#vM>nXeoZpbflN*62w-qSdml_wpkBM#7C!ku{<_Wx!c>NY9u4g1Bg|pvLYxb0{D#_O$UNt1ahu~2+}rp$u%m1w z2)9Rhw9ESG-7uPJKdK#n8t-k)&*u{S_L=J{h9(+P1+6rGMj4Y+&$2Id)d{!7)k&l^bH%88 zmi?}1T*Z~6d15v3Ec58`X@-SQ(_s`ZV7S(Xb;1r}NaiA{v(%_ozh`jjH>!n4d@w6b zi=10rm=(!HM3%BIiL6Ia_xET14Q+^Z3Odd3Wn$k0l#j;kExO&1my9VW3o3s|OhK23 zyTSLEISB%NzPk%qQ*}eB#c4%HUh^!bs0M!q|Bfmr%9URVxvwfDu+=Fg<&KL_W8p8w*NcW7f;3;#A&;+81oo}8}mT_t; z!5G{2oH!>u;@6FffIqUy2<6pArsq)W)91V*l&mWpf7EvI&d-4R8$U|x`U&!sd0yPs zcw_|}_{r9zWH|`=`Uj;@fo1d%{9nw`;d#7s(G*|MUQp9isb;9MX`rUViwIZEYC^k9 zO;f9hslCh8E@NolU{kA`TDgYy<5-P*&#Oq|G(8Up+RHdp!R6;0aCBxU&-cVoqcq$; zU*-iHQaQ|`8{#YMkkb4G(Msf2J;tl{!_P44K?`Bth4nP;72V_)hUuYbdh!d{LTHA@ zwzwB~b#5?Z_YvI~^NQ%sbC@UM#XrmAqk_>Hd;O3W2o1nBdWGG~AUT?37#R2H1y+8= zGBTW1MurR0$bfUWK0JK9z^rO7qsr~UI2-+C5*pn6w(Wfut~Sl*&$AEpj6dliA7u2A1}UL_)f2kj6(wl5;WzEJ ze3kt>woO<`qxiu#la>9us2N^|A#iEOD+XlHC4Ed%8>w39{{t?u_=)J0Vry_lk z>lx7b`)zTj;t_j+2-X575Mxo$HgcWO)YF4JMhPd3l7e1>-^wrH?TWU@V}6AW`oY=Y z3-dzvs*xud^Yna4oDClFA^UqmzDQsulyhDcnQ~F`EW52|&3aX| zdGu7!Xyh8jA4^_hw^qVsmEh8+(6h`>*Boo)7=8jYn(7+3;Cq81bDF44>DNT90$+yT z2`_u8RU5NbbM>sjuUTr9tkfz+)Jm^IJF^Za8GboDc0>y0Z>EQA`(~`dnU|#xho3Sh zC*vV+sk!udb{a%`RyXsHH0<0(JKw$RWlor3%n66tU|jq5xdTw?j%Do|E)>k4pX)JN zDAs7HCZNlb?%;)jS@|{iH4>im0CD*p%Qg5Io2dni!ASjT9D`RQE;Lt$u{vPfn;>0h zZO6iK79Q&(?nNq~6*R0U_mENk87%*MD!&JnpL&d?(?QBHHu{cumN7`ra6k{AVpB+I z(-w>8wLrcS7wcO13%;_vUt?Mp%L)^V|xBBXLXUbXjg03;&(4a#7 z^+JbVVqf*~)qI0ohMP>TQLu}w^>1Zz*UFvTfq#Z@m2k_F~jkVFq9sy?bgPOKr&^N-ueXYh>`RLA4s^PYs?hf z%Y)L^aZDRCZP^JfCGG&tIs9GL+sr-1R~xfvm7eeG4Egb`lIrf*&&i|8}hX@lwUXG&0SGW zDJ|r`k$iqYwl04}a$6()XOi3L@*Vb;N7L%~(_vzOrkw@vkG;Z%^+fszxW3^p?=H&$ zadTx&`{R#43h%HNLHZ1wj9Ra_9`0<$B|t?4!y&U!trOVk$8{21&52^ zelL85MdH5g323$8RaOgxP(QE<31i@RTn;ae{t91XQy^|l6)N)&UT)k5xa4a?{qC?l zIQ*&%)%q?R-iF%vyuu#d2zV|Iih7lO0Qde|-SN9Jci6@Xn$|X+^3{WD>+K{uY_dty zKA%O0!yw;iT#C8FBH?f+z9D~y%>{7&33RF79rhF)u51C9;T`rFD4fcml8-`*_+fk9 zWtZTvB{uo954O6)zKqtiN5d$g8zgkj;|X`!w@4c>MX340*=e1q1}&=K%VTud84h=+ z(P1OFozjmmJlp||`7m<4Lz^Ql$|#Ta{U5c9I(xJUO|-5<@J;-?BV3w?!KAGDUN7=! zk<`H`OSjbx{}}weQFIwTfTnT zlX3x?fuH9SI|+3>e(h)AgB7&Xu!!t<{*HG3j&>TYCp-RQp-9)>K5*Q4AIA9lr{hF@ z6YVrVM|S-CV$5u~vwhlPeO#%~A3p7{BCZWcM9>~<;A%V-4m)Deu6)$(j%B(!qizo@ z%(WhMdtxcB1k_DK^RC;q;BYY6tp=B<&rq`Paw#|*Mu(qcvkj-iTc|sZ>{dnHY_jkY z>gLelXQ(@#4o@QQ!7R#l0uN_X?DBGOxR_#>;o%aB#V_sp#?o12;#IYh6o%#CBO%_F z{@-UpOgp4ST}z2!9gxol5B)rD&%2De=~Hap6WjbWzgKwE`6WRY_>}Rz2#Wr<67du8 z?$Q4m3->a3{sA>{uO7ZK4ENi#%!!&igSt|4eGeM$OkWp%O^AH~5Nw_+|Df+j1 z91p|c6#ctBj}NRHzX3Cbr`x+|^)op3^uR+c!2Km0_rzllZj6S|HFGZrz3{M9tY^se zflOQB0~YF4WLm6eXf_-N{EF|04X5*_@7#Mv;6>pZ@I8#-o{<>u378$uG|y;^4-QCy zIn^^3g`jbSCzFc)+Yd6wKj~1(hN&C~iT)`~eg! zm`K6Gg%m74LBX;YC|L0U1*=_=7_6y6!P=e_te--`rVSKqIY7aKXDQhB34&r!41StO!Ou4+_+=plzwW2tw@)w#OnIX^1}k2m zVAVe;Sp6#nYbw^jU~Ov()(xUy{Y(lrY@lG{NeVXIqG0n!6g==R3bsVo#9(U&3LYFs z!M2SQY(GiC&Sxmt^*IH*18ZThr#1!qdQos-Dg}qPP;m4j1&_Q&!HMrEI2m3WgHs6< zobE}%nH&nvE~enz9ts}Kh{fRiTnaAipy1+F3NF1%!R6pO7+k4C!DHPics!eeCst7K zN&{CLMgQpi>`(ARN?rFa#er) zjE_)&w1>MvTAvy)n6owz-@#0aX0J5)G=5V` z(6w@3i4$5Cz;tzw)mCM844^>J9LAbLN;@Mp3da_vzv35EFcv=&%fJ=TGE4*S^J0+J zE@=5)Xx&e!m;%sPZ%akcat#auEDS{XzxR z7}0ME)vxA=5i{uklAlK7FDH=kx%V}`wGlXla ztZet%?aIPQHVh5{48cl&G98~pjldb=GnxY10TeF%IktE#@hF!5)*s4aFM@^8Do{db z&3ahf?I71-nNzjW-_IGSxAwOIdNS9k!zO@_`t!B=dUDx7OL80=Tp7&&?hoz zVXPj*HMOz`#)8}WBN_`2X;`0vM#&T;^roQk7z&z}XBae#p`dwP3R*Oy0QVn4(CQ`y zt?y9K<{b)>7m!NIL<-u?pvd-1DCn@2f{sTh=-if6QoB>oWgrDzM^n)K6H@8%9R)rA zprBVErS)D-L7zMf$~5g(4})fT^)YC^5rSIZfq%xzwJ+Ncyv5*l{)lkGLr3~m#bDGE zIPr##IfeS68P8LY`91|>f1zMpXafwg;wZ>&M?p>|1>=`cFnJ#ZQ=X$>+7}c|4~fSh zw>bqfdr>fJ90hqZD9B$$LBVbc3eQte^a=&@Kc-*-Yly+(SPGUjrC@1y2pZJDkFSI^ zehluuc)!MQj`6R-E$@oIQ3H8*+N2=M&ieAmo#Tc}Hzxi?fWg>nY0VRd(^2pfN+$ut*nU8$k6z_>am)vQ@1K zn~EtFA?1(}tIs)F(^+s6hh;PD2G+C})IV$)!*gNH{t4$9_D4fZXzqay3Uje9O4AAn z3wj9-T4ZF7(Zc*hq^tQe&~srPA^Wz-%FNTkf`sg8z6qKd9);&CWQ`@xg5D3SW<9su%4`T8NKBK;h?!cTpMA%MWn0wPPj_K1_;@=`5)L1gM_TL7&T>z z7B+!R5JvD~XfY}`Qwy6cB3&)ACuw1`gy?B8c?PuRY$2Cv{y28$JR!%l7@avz3tP#q z>1706N1J12Ow+>Fh)C7~nY6>!3)!WGm+vzh@8R-&CsWXm{DAU9*OHWZl!C0A6lA{( zLBm9F{#g^4l3N~!YaFNGmMwBMZ7t3uwcmy@zC!z2#W0w$h}x|tz|_DZV|;^fvI(!) zb7V9Iy$UHv<5F)P^ueIPjY=NPH>$~gFdzRzS-hP#HO1R$TOi&}mzpDw*Y19J2fmE- zE?R|3rF?_nhOSVlw66wX>-XR`SQ;ArII9;1a3g&(;E(rN_p)@hiBAD8jQ)oZr?}eu z0)s{L2O^?PLMDhG3bE-!gFw8;a5iFXF2Vd0{Sk{UM`=L}!ZuICWEB0ek^TH=5I+$r zZO&lor$%aP6hAXk8)ks`xsjTRsb3hWn^64HNPQYcmgujH)FUu+M1L*Br1sF6(c@js zQlX;BrBRsR!Uiu2O@Yf3#P6`{UkB}fz<*R{q(KhF6VTeS(`d@i^*Dk=_6x-MhgwzI zv59aUMu)hnjK*mT)gWqAo)#VM!Vk;ysJ84e7zm@IUB1;(>;Oj6Ohf3OYwcM-7#^Zy zTp@`f*LYBwW~gZ$SYzyuY*#JtaoAEwSYsx({3qZ5>=dU4#!hw2pvBU*b>!Mz`Mx=$uwBCoy6)|m&Q;_rudgn1Ie^14r?Uxj^3+#eH``Q$A z=s-cop%io~q@eR=3Q~_j5aEV-yK1ZFq5Q5R1|(=zue-Xz|E2P{D0Q_3`6)HR4L{|V zhLWFx7%ZAK7=?aH49wXdATMeFD3^i%s5@N@KV_1p`ze#?)Pu0J;ODc*_`>@dpH&}? zmjdA14)oYq_?d{t->@3*B#h%~wiZ+eRJtdl8&S=l-2$Pk&ua@{zgKnzDm|zerj9-*z|$_*@d!R>py;6VU>Nc@!Np#EX$2St z`|PZWOXyqScOfbCU4Rg)>j0dkd;3BcMAW&c8*Byo{eFSVAu`tYMLn)P#PuJC%-^!Wi&299W?)%e_}5mfaDUGWZtS~|nUAh+8^mw0)&mqPIeU;l<+P+e9I-N^06-5V&=L?d-Ddmp1WQ!6brqSM(K zP;`ImqQw(jQ8ZU8LqBBV2NycEAuJ<%rsgi=gA0}nmmNc~5c&Z_FT?HWZtQvk4SgUL zupJ)^mh-{oO@^zJp;!g_fy9}B65T_5sIs_bNtvijNE{0@uzRczO7x+q(6&|$x2JO? zKBDj&o{H*K0cE*|b6Zm!)Q7S>B<1|k#c&~%)}7Q-9LmaLv)6DjTqNaZHjK4|Ny9yp zk>R1Nc{`Bu7{i6rP#SCovk0X2-bWqsfl(+PK^?I{2D7%P@hG)EuCbaLypX|c4AOsG zA}CPbK_Q(rhAY+mJilH#Ry5mp0o*X|Y~D)aFdhpGr6awSCc<$LHdQ+K1rRZsx6v9y z8Pl|gdu~k&c#5yX*PpuT5((+k1zgM*2@A00km9Y;k?E!DN);KwHj-I(aoOZ48 zdWt`K&J!d{@5P{{N5_$+FaI-^Xr>H)&xb6vsPvz(^dmNAaDGQ>r}>qPcJi+$wUaK~ zznuth1o!JrmYz2)JtVjILw}~l-=#WjOeRa=(T1h(8%maR;r^DoQk~u&PL@WRmVS{f z{qkol(dg1(9(WDDwHu)`5WlG=V*T#;J&X8PM!>kP4gUdx+D%tR3E2rJgV6aN1+ky3S5CTd$A9| z-skWil|k4?kMGTXgSddoB0e++q0b0*850MvijYv-NYv3!H0udc%|TsZemRJhO#zMW zs5OO5T#csbpOl8JhwJn-DrJJgR8#30uC#9~(`t?xRZF+D92B;hmDv$3o>Ns~FRug5 ziTx0@p8$==O)bnxs$dVfC2LOY4X^gpN!~hOVj;#5RMFm2?$OsZJ>Z2~(0bA`5X@5^|He zPXQs6?E?dONz0(I>QrF30ir1BSRM!w3^zN>PkIT)tvZoxJ6Kzg^xJL_qS;XpmL{d4 zfm-Z17+9N>1H)sTc!ua@OVU&n8j`RpDG!B4BpggCL?MBM6G@9vXv`1}oKHH5E!C9j zb}i{F*19=61?61VTqmKSV^gp%Jf66|SD`cSL0^pYjT`VZgr%#%034T&S6t}{(8O^= zAI6KB9@)qB<6VV*S=_LL)o9zoH82o2e0w$AhEO;BWpL8UKsfqcNH9?f+JH0nlvRt;CJ0qjK7)6!9YUI*|x`Gp>^sJ%G$4LA{q$FI?45m8?pm(fN| z&WDrQ7Tm2DLiXL*R{?uR`)GCc;Gq_vVIS_rUh@PTgSyl?KwAj_D2=EtKGZ;u_p$Zq z@jg+tRo7#m5V4_}>s8!LI||~gO{6;a_&hiAFcn+RbI;#e#G;S2bRWF7Qy#<_m z1Lm5zPh1oq1|vo&{y;hFDA(x8km~k91k3Q@ILERCw@ELZJqJa{{lN3%b8`Z5B5^g` zvvH+3%)_VY91iMeAxXiVT5uhmi# z50rz%3q0{VHSr(}+Huo(XW*_1(*xoCFqqW?7d>tpUHZ7+g4YpEKw2AczT)3U-e4Gql$H<# z;S$rB+=*HX|3$b7Bp?9pGyf%gT$}=vi2qXB&J{3kFdQ%A+nQ2gWcFW<$H4&`0sQ!{ z;MG(4q9DD}-6@hwce9jq zgVfTn2ueyV4J$wLx&425KfE8FFVA)D?9ASC=A1JphuvYupe-}<*xh5pZ4o)T<>sBZ zvbbOUnZUtggCmG05ZSUOzWsNbI+a%Bk3oMyu5-1Bu%vPpHKuqF{-)S5lP)1Gv{ArH zR@p{=&syzl>ZtuLU zkt|68yDGRH`2&8;+z37j&i7w+9|vm2`` zFidnShM zLX9`Fh9inCO`xgMgI(|^Xn$Jy3c~za4KE{nr0cZJyVq3y`xRu%Eib5BfPL{KcElee z23>aPByr^a2^RWhtsGI}EjE5cL*2tCX?mhhRKtTeET=w}y=qND)QNK#eg(Ps()45k zghz2hTYc#FGg=h%gg8_|UhG?E(?O9lQ)JTgSYihb8TkkBqOWSJ0)1}e|0&v-;5Iqk z7p`4*t{(MGlGnBtI8zViPwBM0!Za-{A?yf7oMKB3C7S0H@G>!b+cb%ja`vi5ljOdQ4Az`ds7c?es%K!5x+h$53L>e_SoE#Do+EBR7dH zT*Gh=v|q=KE!nyK#bOBGPxEByvf_^7Q`{Z=WP^=ua&vBNw)bPX%v`u~!;8>!O~3W* z)v8Ow#_BL71&zYi2RRqU0Nl2>VMbpmLa#bp#L+I65AJLaUQqiycFGWtit)dYnj^mjj5o^L{K1Xi<|bGG1q z*G>&(oLjzJe%|8c(1JaqO}-RM7N=_{x15KoOt2UFI%K++M2`j=4rkdui&-n zxll7)+wetqhB{nQkF$e9hhi5%#O=`>&F-Xt1I6M|F*9ll*m7kwK!?h47ao z+qO5er?LJr2dSM=QWD1^aj&1RsKw5E7x-=^rs8~g2?ue?wnR3Gv`y}Ocv3DF--M9< zKv&uo{bYdSx-ip1@w2jk-0iO@f_{T;#ucI8w8IS%Uq20dZKN0vIOP1M;mrZQno+Vk z6Sx`V?}d+zz<&=4m%dr#wl{SuIu8swlyIGIax^VE@F{QLy*rmLqHe1i8yJqyOsf*9 zj8=G&9{ygyMW3gWI3SwqleH^!k(0vPcjVLNA0={j_#2V~&!lebha!i!x}1NW4@uuF z@le0{B1pI}r8sXBLCtFM1Cu8Cgm*A8VKqFAP?P3QXfhSWd12yW`DU1G|do z!@_SPXEIM`3U(z0g~_MtGMD_8!j(^o??HKq%aQ*YpFB3zL*-8uzmYZ|`!2=Eo4<5uwUJgJQgi}0B&Zm6bvL(j*w@oWv(oK z%Ur-uu|`zFV|@+lWxiGI>>{vXC)Z+XG*WmQ6T)vz6zTW*Qc zltP-kcvTd2$DZu3vnDC!3u6|yH@Nayv7Wq4C+(n^RXTgHmQZZqP%8SPmz2_QHhfBN zBO$UInilM6Chtc$_sTb~A&2m6lPcB`8{`x&I#S^Agq5M%gyKXr{erl~L-a%}{bEHU zi9O$gw76>ylr;)T*!dE)w9NX;lXq8#LM2tV9eY-LndGg`4OOvR{bfbxUt=xSKjS-V zBklppj#yWDu{%u`ShE@ja!Jr!j9Ffww#dfPqrYNMiPRNhI3&T)vvD~@_zVn&G@-$* z2xLbcp6QV`>B-+?rvS&^Mg6BI-~JX&k65jOQDn%uBIAaz_`yeRqU>Sd+;Umf7yz3k zPotQf#F~|t?s?|gOpd1bor4fXv8PY&QRyvVG2SvE1R!e~ z!iFpXJ_0M}qLZJ+A;JW61o>%Lvt-o>5H&YwtS@+&#)-gMAme23d4djrEYfIO z7nlQgHO4-b6GgCo)ZZ}{fXF2-YQ`;X(RzP*j$`iu!;$rml&({7ZUzx}kn0YKWKX``3owVr|aN>Qs&keBnt=@+Y zvrm_K*%@iEk(;nTZb<~=)xg;U7SR9h(>CNEGhWMTVt^jGMTm>RfIPB7kN)EYx{Xfb zphW;SQH?Vk{#ii%Uvk1-XRdMdgco;2)qEK}M>-DvaYLQpJu(ik>w$L?Ddq8KHTfyW zC;V70=~X?{8$dhO*JQL0pi!k2u_!VjEPmm$(DhFw{Fd4G@c{MkWuA{SgV?hS;xD^2 z0V*fUJSWrlk%l@K?*QbIVO{Qt0J0U^&`WRNv)Vv_Pa-f1tm~I|15ey3-pajU0=-V6 zQeyxtZk|9yZn)`Ll5i)pTme8+*#)Kzu;7Pj_J9WrcDK_@Meoch0Evo z{oBW2ePZ|q4WP@?{6DS20U;jL>W>`2{2%+JcBOz(H?(!z3`C5Y=oQq^qeM=?USIq| zmm_}S0n5SiQIac4!zBrj6W$O5K>G=!*numu8C0$@XTszh?mS>;*ElmzyJPnlqppc( zo+@qP5Jj%v?=hcAM_n7tJY^uM3y%6tu6fFK#vV2KEwoWCx)pRsx2s1OT^H&@jy-}# zauR$^moOR38h~$2LJ$RF4R~%%Cw*c`68QA&bLX9+%KRPTS|kd0ENKtjjh}$jPL&s9 z^AqjbSTYs5^-(-yL<$v#wd}9p4c6h1jNo*hq-CN(!iFhg))urg^c*c_RSopBxfhIv ztb*i&@ELuwXh%k+jcfhrK@TFEGpt&LO%)>SbzTxhYl;7joMMmG8 z3WfOPbZ=D}FFU$QGWm1&Y&8a2@04XPJ;d`LBO2uAOg|ev#i>|fBa4M&o+<%TI>Z%R z)&7E|-Pl}@O^f>aVpt~?ElAeyg~8KYc0Z{NS70B+2b*p3_=pH>WK=$^8gheKET)eT zQ_>T^$@TokD@uqaJS>k!{V2S8TCwzv;Tl!r|DxZrJ7`vQJ$>;i+i)Q4yvTmrQL~EUt;Utg-MNYnEGmPb&B6RTIi^9n z)im?w2^FhSU`Ii>MgxZzuBUTGDyK2Hw9Z~+Mg9O)SZ(mJJy9| zgRjbM!KZd5tIBJm5~J;aO0VXgc9pkA!Kvpb?o^repdyQKjpu#KQNa_cxpt5+ZA7bU za_mR57OicNI(<{WB{$To)t&sORYT2NA2l=jrY#TzzjP;ox~!S2ZUK5S(^Oo4y6tw! z{NA0S>)W>+&AMZ@-RTbRA6xqd?b|q)E$_}*{g(KBUv;&AlMerNtPWMH+hx-(YCTFR zo5S<{A++b&yPbLI_5PgK4_!ba@z=WgR2k)Y3V2Qm@&og7*wUS;3oXO^^~p1KN(LrJ z*)G_(PT=Y)bqfW4Y-c@(3`oco)1O$vsX*(7xG0! z4@KN_sDi8`;#j1a*?5l^=XOJEG%6I0UR;D_XQTVPQzZ;KrZpy_=2<$H3 z&W6a$2~>>D6-E&lTroGT3#HBP$*@#3{K_{yT{qWoddyCq*FACL^SRK_IAEADVSPRi z(ZlN&#Y!C(5lw0IP03pfByT+0j-NJ7x4;&?P!gUsRbnV9dRk+*I_EKO?2NdRk#s6- zMxN5pi7c3+h6~S?gy&2Nl*d6n&;K3F#OGZEn{^K;+!;1lFgvC#HwS)LGIJmQ4>*`f z;@`ncUTS6BUaS36t-|rn5?XLF zwFM=9kk{+$Yeuhf%3rV+?EYv)1(n!Cc|B^a-givOy z8Lsxp*x2Z);^H~xo;dZ0@3VP;K5-uaod!^#d(AZ9@)<1!m zf@Cxk3YHY-9Po^dSh0d@dxCq1P=rX^?p>Zzu)&b<9Xd~2iM4X zMHrM^J=gOKqxt$&BPw&Q3?ddkv^B+K^d*=3n#6{NvU{+th}QhW8RqpbMd?>~|BaLp z_We!i2|31(3d9G#biaO{PfFI~AYeXxHb*L41Kj3rtv<5b=RrsEyG6LW&zw+=i{?>u zc4d&CVZ3Sjn(I2j`HmoiU~DAt`S<>e-#QDB)zz;o)R2QL!$jQ^2M^RJ^F6`pL1ZeP0+<(Omm1D}R2asc3b9V)m`g zQjn4@i+J3To|TWc!>C^TJJWAtKINE~A&v#=lMnu)ZU2nMQh=yjRhg7D)CbU$)Y0G;nE7h!usO@v z%x}<5U+d4zI-A~RxpA8kR$&!CRBjbxR1P zxCz#>i{9^vv2Okk|K2ve*XtmB;nt8W#%$VHp8vbf-LJJLqOGH$64M3p2^W~_zjdAx zP|F?$@NwExde{iIH-sZ;^c^)0(RD7uT|{qgG(99fFm>S7jI|%QA1HV|z3SL^A5&N) zHO=zmcp-P$oFwuFL*_Dyl!!QnSmr7!lt>UmGX83o#S1ieNR?cw?7}seI%4 zM?%7pPgXdql)pSD77U9vKCWnT4Hfke9Z*?fGxAh z{`xLLG~$qWiP4(M{zZXuPGl5Lxu9O6I685BeQD7pFfZM>vL4gKWrO_p0waU_lzT=K zESo?SQ2)~=e*fe?MS@8y5E}3!hpbFayT?{5dM>Z*{j0K}eZ@g);hPR||ENz^G8u^h zH$-Q6_R$M0t_p)j86~y!ZqJ#AZ5oFB27RMO`zql}EL!q|=o5|diQ>MPBg|PR(05Fb1izt{7WHz$s?X&_oXdFXG>FN z(>aPNn)>}dF@xf3aiuR+%B$ICKBGf*XDzbQIr!ca%(PZs9X=9fxR&_1G20bFS4qNZ z|GCF6S!IPv5r4Z|rs>`!SpCL+JgD5qTD5HS;+BF4#ADm*Myiz5KVo){k6Gh$T~w}G zohLyhyZn`-yP%Qnf7UwW8Rnw?8E`q!@O+H(&fLghJ~DFcX20wr zcfMHeAX@V_=7O$HFcHGTgKvP|+Xn-_jp=Li<7bL_EhQGx$w zBB!o7x9X=Ei;#V{mD;UW_17cT$vSq+kAddoL9aC#@qV7UQ0}Je{ws>x{`X;)%}uOc z(eJ+Wg_?fWMZA;mKMK>V4V9N@XWq|;_pYS0*kwk)Jf;RT@ z%eb~0e4%{or{NSZqpO@|Y?ZZ#;A}(nMa^DkLL(Ez?y>kgCcAvjLSesWb68_<*1wc$ zpXPP^_cV~ER|6vRaaP{#_+&&uq*N(Q+Js&%1JX-bNSDKoO6YH6`q5olA zm0^YJ@SCsLxd!Uyt%HW|6R&VpS{DyH<=?pmTGWw-5AkZkX~b1>?uviFg#Vl*`jFiK zS7ay3ov@(k)~)Z+t;0bE6s{&rP9JoAD2qsV$+_!;%9~9*1G^+BiJDuOz>ed_;GFQ+ zEgSZzo!2#V5Cx~OT=h-z!gHKu&^Ww| zO6ul%ZfL=x46R{Y`EY#E@HLK@&nr`0E4C{oJcZV3^!ngqkaipsVTHW#s$E!T>^7d{ z5lYP~ZCfnvazrKI?Kh(aDf(P52)Q$-L#q)?O_$^dMQzA2R=j30WcX&k>8CToSvSNB z!dGRgI_+9#y~P7Ot6FYR1JF33{MbT)u3NOHS{+?k2C;^YtxFBp4m?LF?!~fD;91Pk zLH-;ts>f^EvDHZE&X{?|wa$+J8~HyRzXbkA*TA9-pmmDHv2tYK5}^F=nfh`0zfsPT zhyUQ5b3K8sYJHA>T|a4SfiA1t0Zrf;^6DI5gL+YT6<~MZ7p@pUq=6sA{12S^5*MIl z9nZbj^mFCXt4-cK$*$h~3x;(g{a?u-qwGvYLM`xdhBTd$ry3MrPzkyOmhK&1zL}*GtP!4zy6x$Rumn5`Ldw}!$KU&P5 zZN1Y&cH966Mrdyu7=R|9g5KkT;SV`5Ft$4i>6atZfd_`uk0W4|pHRrP9GP1|0D>BT z0LXmX1n>fbN5VEC~zK4Ou3FKcM$m4{A`aev(n>bu%W+Hvo%{H;?x7YswQDL{#VhGqFi-G$I z+Lu0pxWKI;@g|cDZxm7x6c{6O%l*nGk}>kLuXV76qaD1|ohU{3)l%{@%oqIBH01*l z(JUZS3BB%%F+sotBbrG~4N)#}Rwlvj_7-vBG9BDbHA*#=P7)*#QO8`j`IKdt>Y=7$ zteUx_4SbjiCF8VE>IIRvgAYG51Xb1!LNzBBnN{Eue8$T#hWZBZTl}TFz+{;Yaxi=f z&@^5b4E%@(-kR1e1GGvHXf+cC{=I=j(30U~(ThjcNN3Fz0`^KmtLX^-w@iBadZB z#13%Y45H={xJI~&0)@l?`Yu|F?pGy$S1s@-gG1T!^je!LiRmWz1evArZ{|mhb>GtN#^>vJds(KwcQw zh-h$0E;0j&ASXj1ad9DDnBg*zashXFYdF1=9h|ExP%nUR5!Mg& zSFnap0b*hSrVP09JHW$Qf$3fV9+}<;eK#-+edqBW<&xvl&x6v~LLyQnAfn&=F7mar z2BBU1a{bWwF#l2Ly{95Dx0FHX+R7Mo&D0L=3YfpEKLZM>Cka7`*=eF&lHY;hFYWB$ z6cv(?7L^5HYL!z^K0QyMrxFH^)z6jbNc$=yC95lhfHm~hAQ569nzDm(GTS;}E3FO! zCKtNRKt>M4BQbpjJP7dR_%bZJ*FT5EiK-C>zA#smw`(dWtq1Rd6bdr0S&b`G&+I6G zX%hp^!-YhA3_6hE-LBWG`^a?e&BAmU)@;$Y16;CKCqx4A`g@*mCHXlJg**ggHTfEU zCEztkDleU?DX}15kp@>1RhIvj9y51IC+X&sdZ^58BOvV8_HY6roLadK1_bYIH+JxD-UjgQucfvh(A*#-0%ILaMIDH6GPi;!q#%1JUEzQtqEcMhC3S(flWhwULU+3Jt$RhCfxp$6E-Xln(B z8vbx7V>nPdD#rW!kpp0VM=dZ!=4Un=9;D^xcISi6pU#K+jsJma3Gw-}o82Jc#*Ou0 z?QVVu${a{b0J+CWTX<=+yw=H`dI;!bm1`#7`#9HOT8dC3Z7=sEq^mVa20~@U5c=ys zyr|nBQG|4%()_MqwH< zL#mzd+87FW1uqiOA-`2z@oz&P;C#eLlWD&nocbZrpdr8}$N%jpOmz_c*nsHdnf&vP zU+iNlch(|qbVaLicB|B23C&r76yId_a~z@g*Vrf|!zURkF(wzq8h_iuv@z(Bf;Cd; z^z)>C4B&7-W@(6SD@-!sJXMqGNJLa0?SavWq!DP#^=G=;H#A_vRm;ppeX| zG94;FH?kMH7P|~PyW8h_^vaZxGN=dVH8y~qr;rFALoA4BtzQHD2#Fv&iRB&X26BHJ z5V+!>rEd(lCD`G(-kL7Mxa4HTIEXk%>`*RWvZglj>vClv!JLR_8Axlg_;fI^fH4C? zm8OB;q&OSELQJmA&)A$1A-fSmcIwr>7y`47N<==!Uxrj!0HKuTE0kcdYeQh?{yKB#6qk{<@1EBUuE zg${dV8RkYBVIs%_L0O8#!@#MNnU$KrY`R49zRKJxe1L?$TR+i|jX)xnG*QTaKp;^3 z+mQtj$}ZZVLZ1#FXme|dtJwr>*9RMbu)kq9YXL@t2o^K?C+)hb|v)hmdo>z{%SAfyei z$vBzOAQ2u<+RjE?&A@Q>_>BZ=0H-6_3+hQ05oHvzrjQ;;nOs63`+uu}#(z7g_>hR= zQ|)nt37|8&znmucK#nb*F0LI43YW+r z{EHyFfYsIfi=s{r`&O-GsVoo_zBL@WH42S~??^nOV}gN6# zn5u{dBXtA&f|-uSl{-;UxLABtm_Vn=4m+8CW+Lb!N=(p!_?{jsdWXbxPuM!zicn-Y zLVMYYWs zZ|t0_RIO?3LsCYpzA0?2nxn)UJr~91M%}=w#gabgIG7?HZ~Xt($xPjFroxg=n-ofy z&Fe6jrC*cuY*#tA1`yKok>lJTcu%&e<6zbsRxxs6YcBHozx!OiYOI0Mz0o~-QA%-M z-I|#3(*KSMJ}g(c8}h~^jW>pk8UPQC)xv-Ns%DC(+VR5|cFk{gh!vsQt~UfZ#LY!D z$3vrpt@%8t8@xOZMdsjTxnGs4b5&Ukar7$(0`)yzSJhY+YmaRg!s-O9rlaD~zBV{) z;vmBEiJgu9raASqX;2AUL*#devf6mFKRJT(gaPJ`4j%AvQ*EWf`x8JcD6aA^pR9T2aiWP6{FYfT|J&Ky?8CBoivnV2;DQFu!Y&1t#qOEkajfA=)&939@&BtI8~I+R038A5GAybE z#M!SD)OovTU9?`zsHn&N(pJVXwO$pGbgE_(eFT2CnIVz-qOGjiJow9ao~(_RB(i9S zu`>eDVMlvnvySPMc2f?B#fw&dsxNR}^E+_FJ!5B%#J}E$=oq@zdYkE}doq6pN8sez4-)e)HqVEfd%~HyzqxcG{|3)d{=b3%K`Yn{!%nXcP_=B2o0^xx!54FFC z?6Bi`gXrWyJYy*>KIU|(!LvD5(PHS2_X7s z7F0L)OrJ$Ne=r^WUt1DC`kMw{YLGLvn}_GDM7zZ&z2IR7blo{(P$TD=+DSp*rh#{0 z&eoq^?U&uPiP$O`0$ZGg>VEqBrb|}Cn5t@-5^u!Z<;7k(Kk06HAI+gXDiu05V?H(p z!73S3R-u;Q0S-coH`pL?k7i`gmZh&+MAp0VeTXVwp|74OQ(Kq?Ga~IL+v1yEJZm-) z3Y)C;TmyI4(BLe@PmC=ZGaH3haWKq?I&-K|Ij51WV%6P>E~Yd#?MGFca1{J)F8ED- z1tYt^%;fM4=P#MIZ=xe0ChFDa;JJb}XJ^Cn0{PmT96X=3&`p;?!N9nw|*7<&muB=(bE-!T+0m zsjD`bm79y+5_?%?KCavo&i6$ZZr~a=nj8ClY2~x_=u=M?u^SHA$`uq^sq*?#GnokCtTmce``T;B=KI29O}D0tZPehLb@e9@j( zGT9Msls|eFlLfAJi|DcKVjf>QeXr&vs6te?&L5SY878#5RBqf-KIo?EyXIuRgi8@?&X<+NYR0`L#HIKR#H zD$KaAs`v*igU~3;H6DcuIB>)uus{Iz16%;rBJ8`?KT5)LjvO&2vG$TjuLaFk6v_ZB zt!8@wmWegHriG#e?Jy9)250Q8nwRMoGz>lH`jt9!V@$8F zhWGW;w~{y9!j?b!q?5W8+TiwFcr7Gqp{ZR|Q?m-(C4Cq>4ny}M5hMS2`R)A^ zE)iZkbCNp`n#_nvB@G=Gk(vfyKDORWF~PbIWZ7f(f_N>aLiewlUyHUn_D9V>S?LsR z@hz;$Tz~nE|CL3Lp;DmypGA*^08UF&nr1Xj^;bow0jlY*NAs*@Ox#|yHaE2)M32&b zZM$p0H^iF3h$a&TV&Z$t;;ghuolMs?Z|+Cx7Br{Z7n_F1>pHioqO0 zJ%lwl*DEBT|DAnql7i$b^t?MOtcF^2ileGFQut88j#C=Y$K&5ybX1 znH4NG$(sjMY}^h`30_pb0>B{vHxoLwPc%l;vhi7l&s#z=5u$BY?&%Uo@)rY5seH`k z(gAY2qiXAxqJk^&yP5ffyB-A^E`_R^{m(UCIdfwb|G0LaB763%qP-b6k=LFo@0|d-*mF5f<&e9^HTg~((!b^FiIcUOa&??A`5c#W`8n^n-?IaFz9}ele6mSVqL#=?y-%8j zyNn!zW@bIx!ni1P{^rvMH}>n(sHY$5Y}kdP*mJK8vkwq1ZNK-OR+PBWYqo%z{bUi1>o9sb z-~Ld#m&oue+Ah}A)Wk5M5+YFOf5*59s*M+Yjye?^dlpz!jr^EK`k=)5SFC^fHz)rs%|>aDZr`OCvuz;D?7>Hs z?obJGWt_mGln+ErQn>7lNwk=sbt*R(en*{ce$>AL3NYGpp|6~YHZH3)R9D?gz$u$R zsoGtwbS__#$}NE)V(mlkvL69~l0P8w2P_#OCXm@H7N8bpg@gB(gGHMw63MW9c#6PTS>g1kh@e7=a8GImN9g841kQt3(!CN47!h34!`x7J_PG`DFS z(wdiErHnWAZNB;-Y+kA<+5?6i|CJ7Mjhja^BWty<+BlWon@mO6U!=7Bl+L76!xV7c z?YUT_Z?79^7(W&F;-Mdb-ulo&j;Q?eo}B-clAs_oqm9MTavcN>#ETcV5l5Qjzx-y` z&cJB!w|uBVd{`>}v}a$6w$=9)2P=5Lm=e67w!xd*0(k}|%UiGBOvr&<+b8A2~*Bzoa!-jkdx46gY^Q z-)vjskgz&qcX6G>C^fSoz$)W==zsA8F3$5G?rzSPaAoqPt)5%Q;r9dYIDLb3&(Q|H z1X*3NZHDvDOkc85S9HG)IZzk&I%mr&PrhbPANuBCf5nERfAYHJ(>WVS?w9EF{%@Ra zBo6~xA^W(O!ta7Dyo}_p2=WcPG>!5T7s&SxKmD}CykUBId=eCk{p`0@{@R7QH=1N< zr^0O?w>AA{P)4LF@r3}nVD>{Wey*~l{I0Ioo-}m%X=Bm;}Ljixr3<)?qq-g~`lsWR6MUdbwZo6@OR{| z^KslXtiA2?2xbIQt)47*W`)gWW@T*1w&AX72j6DA248 zx}d`n|6LJu7Rf6P`IZ)AAy2w*`m?C_rb|idUNs`E<$eDlA&<{}Pzan*toi;-fcTf3`z) zH~ENYeJIR_N8Fh+NQ(vdX(cHcjj#LXh7)OIMNb7wjLRRpWtU^3x?|GK56OG=7s@M4 zwkQY>IBnIGOLdKV`{`PBM|g3U!joTRqu;vXhI8#FybS-Ac76INnQ^SCywJ5@+%A@T z1l6cqNZsGuZujtXe}{yGS&APXpI#P4UJ0XTvbY?x)g@xkw<_HJN-(Y<{QcjYkyq@E z$y(uqVHr56h*D_!Qf*eV&NgY^0lx)8p{N13F5fr7he0R?j-W%&=3rD6vJ_NyU2mVc zWfRg4pJEfdu-?@!_1uLUH(Y>oIxjfJ54votw0Ye1Z6$w=r$*uQf6UmsG`C8*_#FP@ z94C5|Yx8@rex%!1%hnrKtM(6;!^`FibXgng1d~neiZFd|PHj}kIbCNy!i(R5zz_7t zy>kO|5(WWbx?@N1*P>%ux5EJQq=env@O&jd%{p4R{U>O?VE`A1J5wRxq0; z8oz_TH+=_(1EpjjHPk@EOWaUOTEdt`M#9+H*S&t~RAP}QgPyqIAmKw3i*G{sce6$l zH+6cQoMgU;?8b#`v-AAttsh}Ew;zp?ZXY*l8Q)jD^`@LLhMd5Z9r8%8 z*FJ(!gi^te7+9Th<-NCxxDImF;#kV8`2q70jftuO(MKgglba=I8{cwtg6>r@uYdl= zOnR3ngzF>c9LWA@s@wIkd?-=!#BS{&#Ln}v(5`Np&9QFU&hhypZtBv_LKo=I&4UPs z_O@Hc?pfI6g^%8ubS({Z6_+5&jwYF-aYFXxTyET zEYjex5%zvHTppkhab?(FuCd_%qUwfZi?-HCe}bg@bxSIL@)lA(uC=HZr=L8_!84p4 z$H<`(iL05c-RC0)5@(sCjW9iz(Fe0G&AiAgkYo{}%Skpd1hZ;;DxKSbZCgTxUX2{b zt$TZT!Us0v$d+@H6&7A_HFkyTxLhdxG3!jmr1-eqbDsMYL1V(?%fiF<(e`VoSmVlO z{IZ1-BjMns(xORc@>PUbW8a^6mnL5p;6}jY$60TZc@CzZkGby~1~!eBSBda``H!CR zcyR>`9p7G)Lvrq7x+r?A^HSe8{66JDLVT(N!Y*ij@Ugw$tlw6rJ=;{L75Nfvlkz^K zj^)zZto6txz2#_iX{X*7zl@xJJ8mdc{17PMpRX^=hswn3u4Ny=CoH3~!v;S_d?tR3 zwAud^q;LI?N}E%5I5i^C?Hx)Gn&KZv)0lYHgtS@ZJrh*>5|?6xuVx{5&Cm!Lts>Mv zj{*JQ!D6eUx(l}u6ad}o(Z%wA_6xQAe)K$q9E;U^St!iJ&{y%G>Vt}Z{N#IM$m9L% z!w0%1N^O;DnqW~*NRg-?|InYt@;XA7bWw7|FX4K$-+U2=^#*Qq^iA^XA4qh5A7hrE z2n5||aV%{z#X1AYnAwZRVleMZL+^npvQ=8tXZeoNkwHwV`7Byq(&_#%eqQ{N}dmt(cP zYzXo;-i{|mwnpm*@8RT}zW%+jKXuM;&KfRVP z1gBOql049cR^ptts-ZoC_|XEh(N9~Y(C_Fdf_mP9kc1L_H@Cj%zbtrlHhR8t80;$D zc-K*=>_?JS17GzSDBOc^4+v9qd!9!zv|^l*iZTZ1p>LMqGX|JqZGvqX0}Qb?cWoIT z%EcHHJULC0`TzHNOspFnSLrArcWiBBIa)LAIww6!^$>{AW!>NH(1c^?fPor9% ztjKcbAMv1lkb5zW@ekyLQ9g)Q$(qMG=M+X*fcYJXX7&YH8Wu9f5ub(Yqag= z&E)@I^E`0$%YHr&yViz*cB|yfcS8n9#6oVa<4qUL7Ays~a++$@oP;e@_$GKdL3v95 z_|DFoGipwT0~M#gH<=295(b#(zDvboD`gleg{V)-gMoBE4A!m(70)2fvNwP*9 z!&$0(EbwI1`eA-2u;{~wm7$xDzwGDrHQ|6?Ql8g5^t){E zPYB+Jf3NI0{eAZmOZk^NvMs$Qz$&tLT)%q!p#cQ0P6-^7qBYTWlS<7D8H+Hd@i>?OihoM*#Yo%z2qsssx z)8zvBmE4pLkz8U};KBBZ+4Nx6E`UX@bw){poPW+%FHh8HzRP&p3_QMH8v_^U+ryqSw zU%69!5|1kDrA>i3y1%_~GF*daHPh~mhVQHEQSXcb@K5$ViGw@oB}o}LDeQBwumq*r z=g-N~VwB^bFYX?3oSn$46H9mS8sj`uxT`$eC48+3$w?tpdCTKlgY+-8k>nH6GW|Kr zEIZL%g`U=l?pez`(a|z1Zq`O%i^#~?Ur^=o0Ve}~QiuppJOvw;bin6X*6ek5Q`^lu znbM0nKMutww%rnheBX^^c0#u_EPh+De_R(x9m$?kR6HD98I?6-HRcE&w*Foa?fJ@u zJ25k(F4OYKxh$4aI$w6- zbk6*eRrfe;f0&(#X_dt3TtEz(RdD}0DBP^6^>SF4#I0$UvZ|ohGOjEmO+VPFZ_H#L zsQhJUyfA{Bbt74rAHZI@|FJL&oxPFD;hnffD@zuLz3_z#a~6}=Gog6`tBA}tyS7eK zCDQMnU7w2E+r`HG7%b-=6 z7c%o2G|i_0b2#T5?gi7PGZi8f-!Qn(CfV#PI< z^~ANtdg40Ua?*NlPwF@5OOG3shyFH-6MlPdwyiHdpsX)$@w&dKu*KV-hd+3~=kMF3 z<;Va0w^dt8i*mcYEXwU+@(p4^x&P)vtJ3nEO3`RV*H#h~$2C=TkuJzsq?0FgW0g;$ zjQ2As;~iH09vtlCe~Pt)CPmbygeJxAK9p=| z{i|*KK=;shm3mPKdapS9he7B}K$` zHW75HiJ-ffj$c>x`Ul6r>gjbi;dT!z-0o?I+r7NHF=-|c?`;C{K6W79*AB${nLxb1 z6?dB(T+OHH>HLBFAQh5Zmh*U}hNzHSWl3~?7H;BK%oagr6r6e!hwDXR8Q*jtcJQs@Q&>71|f5$i7eo_C+>eU+fI*=Q{)Y1s43i zP{QwvB>cYE0lzP?;P<5t_zhB+n>l=x2Vd`DC6`?GETo- zg40WIdI?T1!Rdb$oNkBT-MzwZFB@pBQ2#$hZjM;p1m^v$z`VZz<^!xg!=EBKS5f(3 zht?$c?gf<(^@_@e2~=(ZcWFFPh|WdVk5obPC=2j zEUn^;c=LNohH8%7j2JOq1RUqeSCUTyxBIjHcInPj$ z^Gqvpo~0t^JQX?TtH61-!@zF&V3HI&S4PeAOwe3lV&+0SWG=Em=3)oPJYRy$3oMX% zp#hl}=>U1Lf`peSNO-A%gqL|+5?}6&u~#@D<&{o|ca;V4u6BZOYZSD*RzcG1Y^&7k zC1AP13*_5q0Lx9@VD@Gfs25z8Az&9Edy4|Hw<;j}K?}&<=52TCb_Hec@P?{)DyaG) z1y%1-;JN(qRvB;awZP?lPSAC~9lAbjgRTb@=z7qAu7_mkdRT_8M`Y-FREDm{N}y{A zbS;6dCD8S+0$u+XEitP*M~15CR$W{6_NJE|rK%k?QlML9d0AduwxQcG_KhPM4nqyW zRz!wlm8*b&s=5rFC6=MH9haeVR75@A0Z~t|BI=1MqMjrp>d6j>TKW>GvD}P^TKWd4 zh@Wmp)VXqBV#Ev;QO{Hn^(+}t|7TwSQ^9nB3Z@IKV7kb*!=%`@!(_f~A$o!HLi9rC zh3G|=h3Li7Li7@8A=Qx4+Uag~Q`}(p27PftP$FlXr zj8@+I61Z-o0)aO&HX#Ic_wBF(k`fjyh>IWrEz0J#F?REoGtE32KRUcBo@-7Ql z-Yu<2@9_ql?K?`m0O$P*aCYR|mgIv9B0pq-&xdWBMdY`??*H!B|I*dx|E~AGN&tKb zfd79Q!2jY3kM-A9BhY$L+r3{s0s^*sjzUk3JXWr-M*1BQXFL>#nFhc$5`QF zhJcHiCR`k=!o_haT+CA8Vzw17=BQ|Kyb2a4s915LBUGGZ_1Gq>?#&cOBsoF2_f@j1eq@Y5yvOQg#CYu;*ij1+Q3XC<)+5&*-IOxiCghn&0P;90Zip>&GEYIPAW4;y9&bDH# zIbNX6Tp4A}v%;JLE9NQ`pr=RyJ;e&>nQuWe3k1^fL!`4%K{1OYth3k~f?1*^;(mfL~K3L8*asQ{H#22fco1C=#0P+2Pjm31;uS^rl9DkZB@B|xPFsFVPe5}@*z z04g#9$ubd0wuwM;>ZYR248ya|BHPB|yarO7g9s zWVRPjGDij_bFH9co)wf72vAaJ#UMo%3{tEhmiZFuSfC)1g$lS>nwckby%q4weMcr#}+m&BJ?DAhv>>`7|xhD9V zXM(>1JNPSQBiI~G(!`}IVWD{y zDW6{vIc%?vTJ}+|F!s8yR35LbvTVv;Ej`0q{EZd9+ums#`v%Ld?Ty}^ z`)#s3gWPO;yeRLuxA41|=d#s!RQRBRL7hLc!Z+6QkFD%23ve?vb{a z?^W>bKFdb*{R;Yh*uHc9fV4mTpcCdjWXHINZ5a26f^m-;826ZraUYQ}?r|C8o{%x_ z$r6lPf^kbQZpqqP$=X}V+FNMJjb z*a@=Cw_vRW3M5?U4WcbF@YP}kUoBCP*ir>=Ei-mtncLHO;VUFd;t`>cRw?*swSuPB zNGpqLy=|;or(n4C-j*0QC^&AT6WrQlhg+L%aO(jDZf!B()>avAJt)JiZ8F^2F2k)I zC2;G10o;<2)Svs%j96Cr>wIL!in|&L+||g$T?s1gYOLZe8^l7brgq%b%!<33TX9zl zC)}0jgu7Zg;jUH!ceQpLird)d&?I#%Pqspm6kB_tQd=3;wX-$_R<6Aj$90gWdmUDJ zS);PAAoBG?9q^=@xT}j-AlKDlvc&jq>MC4!bJ?v2Uv}#$*Hqksy#y*sQx?#Ko!*Yf zv5&+0ZeQg>2MlHf#r^G|cz_iJ542uWqLS&3Xm^l_UI&}#b%;7R03x#jkYRQNJ6yRR z&2}AOV%w1>wjE^$v!m@`c8rN&GpuW(nO;_1$0E8Lr?fb&FRJU2*oOm3g*mpM`>)H=Df%{-P%TUVvogwx?@{}T?=cDSKccVU9`^?5PbkR$q~cDTQrwBtl0FiD$X~QRD=q4t zvoF&=YFXDkZ+uqzg0y^l(aE2NiPdp*}6Hk`- z6aNeRiIU~pztZw;$rgqG*BAo-Cz4xx@dWr6sU19lF{&q!Av}Rh?&ghE;qy2L_?%^h z&)F(`&XM8scnA0_`4eI+nTYV&+@fH>XUTgIQB&lO!HB6Ue4eJF=jk#|&NX533@b{W zDM0cp6C>xT5IJ9-@rc%1g{X6^YvJ-YXlSK-p1KxZpss}%I-*zUgjaW?}Z{T%<0^>ItV0M#b$$GPbh96Ln>=w(C_EyW1_Jb0D-KId~?cRXw4h8V< zwD=bfN&dwyFF1d<;a}`=au4<@NO_;(+U!>_^22sae!${G*uFgTfY_&C1>c7)PRkKH zq(15dmyg-u@*_65d|ZLcCk(iJQijW?WVn1C zUO=M1z?L2X+5$|_7RWJkkc{1eP3%_6gtw(lcpD;P z8s=zU(~7`qai6HR;seFX(@7oKnTZq5OkLs3)U(fZ^>KP`piWxx_Q|iIb$V)KySfM| zJ7V+3Vk&FG-MFUcHZ@b{vgTIrt%dNl5^*+eX`gyqsZ(!jb1rS8)Xp-bBv}XIWb1gF zB8KI**738QxXs&3cX0&l`;?PfNu-Qvt+x8kI5n=>ig4wJ$i(&Tn0 zKe^q-Pi~WNa?8QVEmxh~Cd1@5MV{R5RwuWq;^a0>o|~qNb5kD9O*3F_%2(&6neyCJ zz~-h|JVS~wf>g-(QISfI?%~3I>)p_F=??*5l(K>tz|^e>YjevJq5 zV?4yKiW z>5#%;L@B3fvBK#-;O3un7~%|H4DlTw4Dnqb4Dmh03TKK)Y>14+h9b5)i(#u_Jg6GZ zK-JkAuyKwSY>d!?jdQhN<2()6P~~xZ{uc4YD8v_|8NNuD@kNG=FUIKb#RV$9xKP9w z7m4`dVjaF1tHT$nJZ^uPE=7FteI7quCW4L2Rj@Hm1RI$m*vQg@jqyHU;|eXR)a1sm5fuyH*D8xusZk*$J_i7ME*fq{)18Q8c<1{*hP zz{V{iwzyTs9=9RbxSanX7r@yQKzT zH!zgEa-%qijSpagbY2k)H3(!8k3bfS2xN&yyId-%vCBNwwnoxrPq-+z5AF#nbO*JN z0*C&$)1e>aV+HwGDz@pu`B(y+=~_h_ML1I-!kJ1Lv_w_VQq=)ysa9S}JeX1A(C2CT zyN-JXau&1;auza>v#32!$6|D}E)kK=Qk@@rnc&B+k$_K3=h?0G&`_O#c9wH~=oJz! zQj@oM5B7b6cYC!rs#{vXeb%vl5}U}^aSmX26>82Myg~9a*Gul=1|8PgsA8>63f8(` z!dja>thI&5T3dOn^#G5xw((eNd)LESLGWaNwZ730x8Ly@7$X z8yQ%;Nd#**t6)to`D7o}tqiR3rJlrS$vZGw@=nBGcZm_5eg&Q!0OcHXt{g=vM@wQD z;}oA+{%&cOXV>Gnf+uAhny0~`GejJkFXPaeJp3%sz)x<)W&Gwx0Df|S4edoL{Jcko zpR;B7SuDfPIXu=ZVOX;iux6QvHSa~NSTc@P<8AhL>q$Z8ct&gDVmJQYOF zXCQI`4y(Sb7ID)#b;Lu`-$-bM+;ZIVFS{W{RL zSp{ud6wtO+0&Nd?pluru+P3qcZ3hq99^^sW&aPi7Jn-%X-o3!P*CX)m1>U{zDfjMu zb>Te%L@CoklzSbB(t#?5_#`UBlPVufp#=7DC}JMMi}@mGSRmq+g*=2M5N zd17BGP3+6OiM@uO*kk;}UdvDHb^OG>yz8kkf#)kwW4_U9jNti_uC5x^PrYB?8Zo8| z6x)^*7|oXp4xkeyx80P_98CGlby7Yj%aY9$R{ZB~rd}B&%I}oW((PoxQy3Ptu$5|;UJndJ}CW0CIul6s(mM|r?0x23y=?}YFPuGZ=ljr%=N$$=MS$f&gLzzcwp+I+?j^VGk_5SjbQ<1n zLBo4kNWFc8OTB&6C-wF*FZK3uHOY04r|dl;DSJ;!0^U=CfVWpt2pg5+Is1I_a9On+ z?D>q&Z~Uwz?LEi&i=UVD!WSgj??p)_*yqe(mYK%UGadb zE54@aimyxb_va5l=tf;_1hayB_@roWTM8VDy8b)pU^!WT@bEj0j#Y zKpb|Vh|MqJp$MfNDx4py!5%*8d_F$A?`tD)F4F+k%NY{Vc!xR0lqnkV>C2M##5Nf3 zi!8-rp3HtFlBBEn=bUFNI{a{rND_a5B=K5C5`QR@#Oq{|c)fheHbD{jV786`PSg>= z8*~KlM&3>RxK&JjghR|8OgeX@uoXP-gKABndl*4#auF9Jx ztGsCn<4t#qylJZDtw31|@TTd?d&*`j$OLA{{3u^_X{*e{hYZcqIjAFg2X(M4P{*8Q zNRm@uM<5NV>sTzvvxIA>P;;pQK9?x~wMNe`V)~jqwL(pvI<6+qa;_%N3QbL(l?KnK zR%sa3eH^1&EikGz9-~_8GOBeRUuvhkj+P(QE8M0*;x_G7;=D}ZHkyi@5(m*!o-OTD zo~`Xso(DJzu}uexw+mEYhlIiXD|d1*KJMr9-{moZha}{`TVe(e3rye<9Tt96#lnv% zSom=X3-9r;@Dn^1ev-$+Pw`lIFOP*APYo6p@hlNBa5oW}be9lw5B}BBlZU>&5c>8; z=-Y?AS^7FqS_H$V)cfuL?9-KLg`#60_{)K1KUX^sGQO*M9r*)h8!jXK{W^Qy8T=h3 z!r#&I#j^pj2!AsW{*Do+Z%LnbFvx`(yepQ$z{`EHa+r=?E`#ChO2*6%Vpj1khnCr$ zy-YOXQ+K(vC$_;jU%Z>CnY1W&M!Y+of4+H)ti!ukig@=b#Jg8BynBs|cYh$`-D~Aj zwn4Ipcdygo-RpIDcY+S@W^3^7L>}+np!hy+6cO-EA_Bfyi-2!o2>4cpfNx_6_;wKi z-=QMlI~fALiy`1iDgw??5pXU;z>`G;%**8`?qRV*XxIT~bLA|mTj8CjR{$ogIlvgWWczUWkR ztfFkWCZ&v@s}UH_b!4S>@v$TqEdWb)v9wE(`?aNv6_2fo*7!1sCqd~eWz?|Ke=HwfT+ zqX)h>x#0VL4}5P{!1NXkc;4C(7Jfi0xNnni`F39nzN39C{a|}odMAga> z@)4+!u!t(c>g)Sh~MW`mHh>w#^#HXr2mqquD{HQ`>#mi{;N7xv!9di6M}r-B>4gk zaB}`@l3(C;LDWB}xG>((QJXhaYV#w7+Po!En;(1B=53zZyu(wQLp-%<=BdrQry_h< z;wlM6ahd+`*fH&UEFNOAh|gr*<9#``yF( zmNQsnIj8X`5a;aEk>$w6{PbbN8Ya_G#IQCL&yX*xtkM{my8&>MAOE}PScIC?bV=yZmoGh`e+M#j-f{4n%VB92%T zu?wy*7Wvdz9oD`?hqcv(xuB9C@`%fLfPJ|Lr^l(hD^ukESt8&bFP=rdKulCJbEOua zUnO05)?W-i^2B_G=YPQP{I!gU{!pc!*QuEPdWPvIFibDU7pV|m&a@A)Na7wW!#>2t z5Fj09jM%H3^CJ-g4IsD+G?j7P$jQ;$^cKTgxdH;PDRAF zLI7fFmb{2S@ACs{t97tujS6elDzIjq1Z&oNux0}fYwCGe)4;=;jXbQ`6htrd2%;Cd zaP-1AFnC%cDh8?S7(K1Rpste2PL)?_B_Js>L0Jz79SFLVcG;&eS)RG4Xgmtsnm^u%dctL$ zD_kzutNkUM{e;{(5*TV?g0VP`UEV_lfbACpVvI?!uGVvX*C_yRxdg>lXn^BNUwEbo1#pmN z2fp*w?W4vu?V-N49O_%w5j4CRLHkg zfqV~0kZ+p@`L^?rZwC+g9^@h4P9E~b1N|`oeO(#!1=&;D5KtcB1=&-_ojv6YFQ!h3 z$3t~WRW-a-c?QHlQJfaBKP!4J-3sh*m-3}i5u}YDMQ)HQBLB%+C_jZk^Sc=|pDIG^ zX)45?&LDOkgV-}vh@G!O?3oN=7s%S}ED>`@un>eBC@O2WMf{~?{#p-h&DILA#WEb6 zBfci^J5%B#vzDs3rcCqoVv3}su$Jo;)(RhjQ3(Vi%Hd5cAI05IHh8tn73ONV!aR{H z%$K>s0-ho))KCOgD&52Vi-96=3!J09vyrDVONbdVO{g_^PEcnsQn1_zOXVbx7OXTF zFIZ*B#Na*}@48x1GuKF(=vpPZb)6F3x?YKH-Jn8RcuF~mlIH*oLUij!F1mFS7u|Zl zCc1UAAQErUh{Rhtk@x`t@^AAX|8^Jh?~oCKRTp%Yzh>8)T`=v0?gcoPpBry>v*}xqmM2Kpr z$?GaLIjB&RHv|g|{-#7$e&msrw|KJhW1g(M&6AaPc(QUR(5C~c(sijypih58^l23n z2P-V`UAyoKOF;~1$1$J|7F^&Hq`8oXT#H1Iwiv<45)nfz^$W9Hro$37Dwc>TSfW-! z4s{-KSk5Dd6+CiS$s>nVJaV|N>&cu!joJV^e0#8iqG$y*YB@i5P@@*CUv-UI4<^W! zpuF%&XXcE^)BDM(`h?(Z4iDZ+G~kT|OnQi{48R);k@UbDlOwr&b_u*y%HS<3gSRS; zGo+eFZ*v)XnL?4VS4eRxyM1_L1jNR&Lv+@z5m@8@L4 z&4TQ>#giSka^mI#o*1}Ii7wbKMHlRlq(a-OT}swl+}Gk595xI zqi>3F49{>$TF-h~w)Bgx$Cd)6HDF8M9<~%H zt%1@SD6L&lTbGJcQ5l8GK$K!{=c21DxVJyZV81 zj2mRIDF)s02)9AO#TzAD-05WxR7|_MeN5ZV@&^Fu7^Zzd-jSf?Zu11??Gn7)p~J!t z3RrljANGw)AX!@SfNR+;VPkC&uSTDJ)DZRA$5g5GaY+WVpGWSA z0J#Uqy(=U4ATN*I=pZjo!<|m%s%8p}x<#Z+w~B=5HZ8-soiUa>7-PAUk&wGY5;938 zAvuhMFKT8FHAN*McQX>g$~A~=WV*~9^2Bch#rQHvZ@(~@l%6J41;ZzGmJbbz z01YbCu!LM{S8r2bL;HYs;jhwHhU9Ev7Jn zT7?m4G+ek(%k_+4g`s_a0pRDU!YYm`+{aOc)f%d>MxY97HB@08M-|o!RAGZh73y88 z&>-cXZS<(aCJiG{P`z_9oBaZ4wkQl@tHdB4@MRF&^kVt;j)=tTc#3F0E zI6m@_0Iqj);QC>ofQ?5yIQ^)O3ds3;NHz9IRO1OjW>;5Trgz?V#bp7j?~|y-(>kv7 zjKCG1_2CN7Nkry(B}?!HkD_^bdp*>39TeK6Ti!t-9s5<%kx)oSlSDcWc%3D-D9dC9$(xFDl^F*Q#5{bSJk?03R;?yn^rzH}nYhEpsf9QyWyxIb5`HtrG zEb$THMf^P^5@(9s>|4KFoX9IK;OBVQ?n0GUT%_R@;yQ77GjyxOf&CJVU1lN9wfMe< zS4a!RIYVA98u4Kqr=6D>5z+Aqk&AFl1bM|3{A16@i|Ba8RU)sr8hOPvj92_X<`vh< zyyA!QDcjsb{|!&H+c94$kYOP^36TGR4u<_0aPf79X!8HYK7Fzbd7g zHzy?$vK!}KbmNpO?_g-IP#yusC)~@0yNpWjPkA}G?i{7yXv|!Z2hEdt(0rZ;Ezs~F zwuFO6ZWaL#;=)JJzC`6gOO>h}%ap1eHA>Zvm{7HYUrFv%*YMC1nY98jS;rBR^&Bx# zmWb;Cl!7NF4H{yyks~IX1Y&Z(M@)1}#)*_+tA>~;UH}=mZJ$Y%=QI>rk zNqO2MB|gi+acBIT7eN2K8^ZpAKxtkS;?Q3bc$StRh|J?vA)=nI?ctIFAsk-eLpq<#maP928>d-;lV}n;xn85$8O4i%Svsu|TZe*72HmR9X9{zseAC0AzBTdeL1k-pS##z1BFzFT{I+b%yJf&U zRRfr(iGX>!44CtfFU;VPbG`;Sb4#e;H@5(gGv^gSdqhRf%st`)=OP(5-y_53*&4B- zm`Boc7<4WXk#i{m=Q4(y@0DS5x%N@FSqu-4D;YYDGH@)1x%YsTQaETlS4GD27%-mC z@WM61f?DC8CJFLW21#71Yg_ zz!rT4_xbM-s1F0{YXsD|mV?0Sd;sox4+3w{q3(JCbvNkH@J0oC`-HZOh<&q)@wO-! zZ>xmy9`G>UHXh?`=P}+69^*a8W4xVy7_W=ehC>k78$nzj9>n!U5ZBKEas2_rg?SK{ z#z5Qv2I2xHIIrPKWsX1nZ7qpAGsD#C@HWYZ1ha zLJ&8afw*)T#AV1JZj27ZDa!-fU{3^b7l|NFiJO6|HdY7XRJdn><=72sOh`XABxN8`Q`vC)S*UAsJ4e?ZL zb{)fJ*E4K3K}37mDpZpf2e$Wp1H*(jGSqgHjCgL=Af8)9#B-~Rcy2?)b32cC?$98f zJ5|JU7a$%E;Cac4D&i4V&I7|_8SzY!5zpP?+zuN}I@MARNz#?1E*3IIF&KrbT1E_$`LqK_@tXv z^7D37oO-K#;(n`9)|$)fQuEpq_~whM-U4l3tQsfkVT%NW>y0WWGYUhfHRY1@`}@Y1 zm6PxW5%ESh5pQ&N@J0_2Z}gNDrC$6OtT%#@J_ttoIuJb&mI7g^s|!mSr*5!%uX_u= zP=cMWxBq5_er{ptN6xbYu}OtHw=;|*uifhjO$b{i$-ZITs=cy?G}*^pJVp6BxZ0Ah zUNu$cSDq#s@zziGk<}c$qLJ0|l~$JL0=({^@=oD?;aKF%?7Mj ztYSUpS@*h@@V9^pP%_plld;~t8g;9j2YVGFo~uMW7j@`%6@zuvGOXhZ&B+qWd>QgB z5MyS!)zqAD*hT!eoC;EM!0ZyuoFV$kIrB2X`&`3$pJSZ&xmM$St}}R~xLo6XUcq^v zR|?+eRi5|xJ}ySs5xZ7PveX)la<Err(;q-hGxkY%sKMJTG5Q4Y_SEpjUKx z`v&u>4tQ-m$JX{$z6aXV4;BBerA684JVM7`P%nM(FAHqIt}=L zRt5jhDd7Kk3H-m{f&UkI@c$AI{$J+7|0_KBf3@p*m4lkn0r>w$ga2=*S6Kz?r@l&> z2-a_vvDIz-ciB0$+kFuC9gener;K**(xBZ*BHGQ7(QYnsg~>eZouYxgOmXzE>{Nig zTzNFKPgh~D5C{u~88Yn6mtpTr9^w`-oH`3AK}3YSg$Q|z7}mW<#=5g*fLko$**P+v zEs^nTsf=gKG_OHiAlZ9t%4LeB2EW2qm0AQA#V^%6DMprHo!zSN*WhTn**H|pW`rjEG6 z{q5uNb_#9)#AkSXtGpvY(0;&+SluRJOer%@*y=bS{Fe40ya3?YuG@j|Jko!}jVpar zLc@=F`2BGyMs<&X=bsQFQ27))w`#Qa+g@6*nIUp0*zCU?o>Qp#86D_n3AqXxv`8%-PnuR%Lr1C?J)^mPXKgsF~xp;qdHP*uh} z{3`TO{vi1cM6`OB>@=8!P*CSR5KY>UR8_pb8%f7h?UK{XMIhgz=`43H&&i#eA!GV{ z@pj-tGE=zzY(#lw8U$Fgl&`VVpT(=JBXHrMSfAnza1L{WP^IKcDAb2vhs}B#vZW&$a+2KwJ~U*9M?)TzXvj{LE~xeT zzKBx*xxym?H+WQH4v+ac4<6US{5=xPe}c;mdy>mM^VX*Ed;mPJYUFs;K7o%s?ZdL3 z@mSWg5@C2wUefw`l@`3|g@$fNIgpXM&d<^j7*9tEVrg%{Tek}Oh1CUchD0jCE z4X5(&88^lp;ofwIo#!#sH$z5!`G8xQI?M_d$RKqV533>!RuwW>RiwhIdw5tiTZL7{ z3|7tIVO0sjs!|6;blCKiyTQR$h+2?8I>iNplyg;0X z7veO$h?|8MbCd8AZVq0`&%w*Oo@f&kP}NM-_%8b<7Ele+&_!4pq@f>28oKCey;)Wi zZc!(%TYWr_w>cBR?effhhi2x!Q=GZ)l4tHoICJOlGk30L=ANw1+*4r2yjz{9r>c|a zGHM*@^n6fCpq~%$(hM0O#y(1St2lq;G|#3X8R&}w!cTb-u9G?^DLivF6s~^ zVx~+fsuE?ISFAlR^YNPH(wj@J7$gflQ8|FKO8dP~1sZU_q5|Udn1^2b`Le9FK#b_* z)=m?|8ve_?*vEUmgu$Stn&{1C{?VH?T=Ztl;6aj-&(#YA8wQh>3og_Zs$%1;sG#aW zt0bF7dQn9eZdz4>LM1QcTF(o)PVz!ZzFc9e4T5%4&uKReK5n{=o_4cI^=@hk2T8zj zi;pD4gc+&f0YMDf=7~YuC8cMFr1U%}h(+G|X>$5gT=I7AlDwJ^Nxn#L6}1$#R;m-# ziT+oNwS3Ht^nBcnt=yxNyq@slAfFVXDxVSpJNF7fpN(F`vUUChnBOS+uU6+|cbOw>ViQV^Z= z_4PId6}8!A&6Od;WDR7PB0`3{Wyru5ALSv#bPZ(4Qz63)fDHL6WayMfN`?#(88Q@V zk}ryQ%y18b3A06nP>cv+4nqhfGD0ZjXAT;vBnzDPiXl_wTssYjs*ppbD&>%=sOD|U z%4&N`S+(Yy=80m`t+!`w9@@-j&}IRHHVai~vxtW_i&bc|gh897f=ac_3-qsX1N~!C zWu96u*r`qF=~l~olB1C%4NPuc>)-4ZK=KcDLZM6y zb=ts%I@JquSpz4RZS>K#HhFT{{W{%ev!HHm@zkxYlA85^pk{63^d40Q!__q(RK&NP zI;BUGks!m)hZN;!x1{_$>?uEw@XF7lyz=uHulzjDD?fX>o}V>*M#E3#G6fm5 zU&Fea6p)I5wo7Nw%7`sby!iM?%<%E}jz4md~%1@?~dDi*_RRi{CbNJCI@*`Xeb`W!9>|dh6{-q-JFO#wVy*%VE*Fb(QzZTzll>qrUREzd1 z74lc}4~IeVtOWVz$&i0O5APQ+c)w7D_lpqTFJ|z5i45F?XK1&?XEF+B)?YUabCxHoYxCjeuIbQ z`Eowa5jD8zexr<{o#sta`tJQ2sJ~ev23tI0uvIGA`GA7{w@K)KyD$3Rp-2A@c7*+_bfUh;Xr!1Z@BY(<*!l8$D)EIHO+QEA4j3eDIr z(Ts#gGn#msae${8ukkeFb)IG%3>?gXgE??82M*@I!5lc4yFf~X287=069re!1BD6^ z7gUO{A&P*YO2h-zJRCUjybAu!yHK2+7vbc*n46oIa8vVAerjIEPt7%5PXP=j=U{RU zCg)&s4kqVs)8s6R8fBuUajz^%m8%*G6Wt`)LoTr`D-fcuS#GUrXKQP)KNg9V#H&56qCde`t}%^FXHSu2S!>m=D_yg1M9 zs=RW)BCl+g-;^rh*k4+F4h^M5ucHK6)ervyl}woU_lmh7HlpM6*tAg%w{=PUcQ3BnSGU$$KT<^Z+k420<4>9(9hOrmO7<-`% z@)n8iRW8QRT|ZHFt}a!atIPDxRSwtj&efRg@pH_z2A{?(`D@|GmkYkv75q`q6Ip3! z-!Ga9$<$p-_ZGr?zuIuWb}4}DOrdQp?_ci27FEQ&=k=_A4}^81leS(yf)v1WYW6bk z#O1$3o8)!0ofp>q>UD?Sn>n}i7K3L;TQzRy2ROI$Ho@(@-E%wd;GEkJdfwrkiZ?he zd4qTPdV?R59|D>A>~7!f`*3@1-$z8ZFWc%-=Zr$&q-C__@pf~p_jtVJ35mBnDR7gg zIBv4n2g5gd++?4cNBy)!FrMK&vUG7omCQURkeTNt7w!vwROUsGy1XP&mzM>S@rp!b zURBuAejgH+ki5%HeyP|8BoFaxlH2)pA=UaIO|^bQNVR^`O||}!n`-@*kT3mXFJJm? z9oc%vJ1#t;?f2Bo>YsR-)jt(-x!>3Ew0~B4+Rqf8_Ae4o`?<%{ ze!=s!4|tyTOP;5F$n&(8uI2_0SX#i+zR@i0+nMU6vZ`-GVZopf^_N|Unx_Kg4DMDi zoLZ@Z{wR-yt5hgl&5-b19th7v96aBl_X`jKFZ2Oei+EVJScG*;7@}Azp|52gF01jw zOEC#A)k;9CPQp*im4RI7xIzMpD|J9+l?qhuQ-I2938<{`fXZ4PsI23G%6cBCY~X=P zeE?Jfpb`L;0H_2&B>*ZX1XOrva1Vn9vl%ofR-wTh9vYOW(4dq-gEAf(+>6klT#Ifh zd;mfv4-ldvK&V0xP%WYZHGEI&RGu%2R0|l~Sg4ud7bz3`VtIaFB2Mp1z3F`!KfTxR z(|e4c-fQ{ky-t|kFSP%fNuyw*H~!n6N)7uz_yzvtmzK;bii|Eyf+xlKoL^Q3za{-_ z0BrVBNV8dbw4yw{s3gBQI|NQgQFB*O6=nIlYr&r9Ys4SS1G^3y-zi>`o`Rs}$ zeb@9EMU}p71#>HfCb1vevbbnQdL%zTeeR`Wr;WX6RC&S7!o12+#YH92xpbt9^#iaS z={9Wdz-AWAh(@HNDJ`w2)R@xelohAvMdwcQX=`tj^s@4TvhvdWf{KcQnQ(@>&Xx1Z z3Z_+-=h=sAA6I2wk#@-9()`)8$_olQ(M8u*FgL%Ttg@)IMAulBSDrVgpt7LcInUAQ z_R*A7l$DlO+TZPhYIsoYjTV&8vmY+g{vzd9%$SD1Tf*<~z}c3H%HnAi1(kMlvi%k- zFVAzg1bd}@fKJ1l(kk~8*vs;Y%H0i$?GwqXEOmdi4`3Q^N^$znik9TV`Ec8~7tyg4 z*(X+BkT(YozM^twQ3)K5{SAPt4P8>Hd1k>Z`!k`R?T66qQZ%Q)`IPUNVT}Ch{KC9) z_~c#6X=Rn}G1?E7_x0=M?87}6x~aXPaBTU`0ns)%vEl;y5v--~$v*aJGx93jt7GpO z280Is*xJ_a&NV15s&FrIw4$J5nsnhRqh-#(754rMX2Q{OquTxE6y@`~nUhyp2;J>_ zKeKd>dlgHHDvR=pi{=-U)4kE-gzMv+S9xhksk2F?bL6lO=`PHwo(U~@zw(OVx02|b zg7PBnj-}9-R(`a++Tz^KugQ!<;{TM z9aG-SV*65-mlwgdwh4;3lvEZ(%JYh+*=Ly-p;r4%Z-3$JXSaGL{$5pDG?V|mB+vT| zl39!M@(T(}i)R*;S5TYH%I4X3x}n10QGv5TKkj*@hW_5; zhsO?wKtG3_!{ZMPKYJ%rU7lA~#!fP?Jc7sN-M&iuT@WpBE@5$LB!ZVSQd~MCuh{uK zr(llrxZi2j+04`YP4*RZDzpA0$=Gj(>?zDPeu~CV!D!mXWYab$ zO?1uQHTEZ&$wr8b<61{^t>)=yy&bK?jT$o*tuxU&MmJIe*UCnE1+8b;)*HZT+1CCy zxYlMk)N{hlD9~~pw!CMzkO$#9Pg=X;tJ( zI>!DGiIIo0Gv2j-Gvn~XysjT@nG_-qS$%d^B}hDxMXokSrHy}Wmw9eqr_njjhqDq* zO>G&81NM(&F~>H+9#Qz@3`?@<&+FW=KX$t8_d3I;W^;Vl92zEVV9Fu;%(KGQT(Z~Q z#Oh8y%+4U0QE$wDxGf*W?F~sZ`|o(*zs|`Z*@;-(yebSPGSVD6kTf>SaN z5cx@~IW*0@D2=>JO>m(sGZ#iNEA1c2lS0|)_8F&>`gCj7XzM$Z+_Qnx+Sf|yZ{A8SYiF$0eB=^!kkIOZRt~ zv-5%+dbQqxYY=kJekDnFw`pyPn-@6)?1U%28LvZag1Zd%QPoc++wYlZ<&s%=6-Io) zt1xPib;ShhpnVapu&=>EdJT4dNLyzm_YPSeQT`X-rQ~&8br})7>$OCk?(*C_TgY zA^KRR=>aU&_IXLeA&)(dFY82Twt{{R&OV=XV*pdbfF$C~YE>k6p6#91%_z{#@RwI< zTRBI&fDUP&H)&1}6OThq56>i+hVjpIvjn-TKj&8+k*y{>^!Dkmh_90}4&pR=!fd@} zy9AK8-`E5*Odbj0EFdl8EMD*Ni_p>89h4?FZEqFW>NwAfSVr~=-nPKEY4Q@=Jc>M0s79*sv{FXAkqfuA9uBe{?BF}vDlI3|=o<6eZo zPwQ>0SJGVUVOr@c))x0CvHslY&YbPg)+3vljpGZPiN=|(H8!A>LJKQ$Q}tjP?tIU1 z_sknCP_uaF{meeguoD~-*h3ek2-dcE3k;P)*|FS%kM-D73Bz^pkC1Pcjxf z4`T3{FcFEkkPdMf37T&)<(YuPR6yex8Q==IQ~uIyzyS&ce5CnzW@|ENRilV5V=nP> zMP6Ppc)a#L@)TSgDLS_XNbuB4))$Pi04IpTa$c7P?comF=zBw!!&`+7*&L)n)4o)| zWdu<4OxHR~Tq2jW2XxS@dZhf`d*uyu;Ug_U=cm^8`&YK*xyvKZ@XWI{qEma{t);Y_ z@2ugx$v-9(D7q%;V4Ms(GmEj;0u%9VSf*RPq=Xar3}pHK=ACe$dwmFZyh8%m%Z7$q zQX)RXzX1wej_F>K^%R7MBI-RflXfQ)At9K4ev74c98?J#Kyf*Scsf#la>DRWki+X; zEOub;^orlZczYQrI`+de6uNbg?_x6YN1yzxf5Q9s1t^FO{frKtM;te1_txY~_Y3CT zmIujO!3becY1UDg^w;deJkToF_&QfyH=#nyqZ@_6d|v+ZHsY(>Nq3ll_-#N7Cupw1 zzAoK3=?NK_Cw6Q6)zI!*<^>M;N!OJWSNNPqU(~`py9A0sQGAcEvY!v|iGgYP5pCfU z1#sbl%qT1JYW4^-G6)7y7CWrVuFTj<)vYPkn+KaGH1)ncsJ}Mwu-2s&Gd|P4Vqq(K z@Y-Qq4x6w!U{B!9;6F|{hIP)q^*nY%-x{!eelK-#ui27(g*U$5&VQa}N=JltVO-D7 zJ_4q%mnE7b56+Ghyc=H3HcF8%`_BX0W@T*Oc;AtI@Cd|S^LA;s(I<)WpIvgsY&t}CL`N}*lTWJ<;7*$2m$v z_L2lJMvY6)Elx>NHj3sPr68ifjoiM{eI)*n49{D-uQ0ft;Eb>1EQK#s#t@#-k^Oh! zP_2}qEb7#`vaTbWrfPhX+l@O_Gaassf%3I{oL}9oy{wYqajtT_`=?ubYcazk*219y zu3LLNxD|8Z&_AhT!%!oAu&`qzSv7H<%dMT$^6H|9;nC#OnJA|N(ILH%`$4yioH1y5 zAvq&iJd#^mBlWePpHD#D>luGJ+nyYa+t$J#@q)~@YYypfRdePg7v>`H!i97zDMCfTd@!<6@A>?V31?=_T69*wrY7=9`OHAY>Yh0q zms~}BfMJs~uY;wOj9&rys-BZovUrhzIFU|8J&X9O)LwzkZT1)Bci6-=i6qg&;#|ar z*(nSfKV|yVH$hFVs-Gp7l>bUQ(`B-DN6;H2Sjl1r|5SHUGM8M`dR|_kDIY~}^Z`;r zlqyJ5uHB7u*QYlRib}m*Jat0M1a@!*A}!d7Tv|R+-9oz`V25(26F8vIA`Qg zuBMnJLnm#Z7n1N@GCcH}nX4Fa=m|Y)ya;*ipNuvom{)kgKTK$o6)zKnyGc#ivs9P& zDB5|9TM78TFIoAVQ1Ul-&>rKIV|RU?j`e~;vUX=yQaI5w-ePLsX5MJ=inheysef@W z=C@|6aF6qK_7(+kye)P4LvZhFTA*xrDxSdEBf1_qW_B_&vJaFO_-uwLig0xQ2m~bp zw!X6f30NU^@MhntfBijGMCMLmceKTDa zL?X9&NWMgU#BglUWw#8#<&0s=haucwNMC6;!tBy+sCf&=|ZPK|H>^%UlGzB2MlF zvoTfjN!>MwHa_*~MO!@d1-7G3p5q3#b9iTmqu^bXJ9ECoCkPLK4gsJ1YeZ1(u>yYG z#-zfxf7xD{@nX6a>)a>h$RKXn0nkyKci1j!g2b!ndP$o_1O*i+OzZ8nUYO{>K7Xh+ z?(WL?cqZ{WgonBlPij z6TX@6FcW0+=g*<%E!)3ijz3)sIw>g>0-qfKagS`H@GExh)q1~x0Pb2b@m5^MakV?k zKgQck{_~_BzRLfCOM6YxRqKyU+q43fE%S3W-I%b8w7a^qX3qnB3f6OEd#cZf;;rgF z6=!^-YCk)4w$DBVI3kxn9|0Esc>R=S-cb5C8mHJ_PhDqh@E%NFP%{igS3P#|%UoAtY;;Wv# zc;k~EW|6jcEpm~*Z|%h5+R-T=TlDlI7r0O-`HxuOzv3sb; zJFWh+C1QHf84N87*nZEe3I<^1Rpk|F`__I$SlqOq_9(pS#R{?BvI}30&zxILTo!*( z6d~XU8s6CBgR7s-o1Gfls*nFT)9<9pMGei4GH4+h@C55?$2REDOyvUpZ-Xl^}8O_5o-NiM3Z?4Ae0&3KL5cO%I{qoGw#C_ zcIzs*EAJYpEA-NzMPF||Lqs}h$N$}~!ySTv6^6vH7sw)=y#fWBTb}$p-$4YhH#t~) zisTbMLS<0TbzFsb7$2Ej&$-Z^M{|y}nNlpjr6{Zv%*c1b7fpM)`LhH2j9jo68|F8S zPEoz=u)onQw?ndy!6tqb_@N4<=i+&Yd$Ao6VMe+ldf{>cM<$Z{&_6{FXXB zIiB;C=ZtEMWbqG@n*e$@49Tr6Y?uO(5DPrsWa3xc$=$C^TuX3}9?0GSqkIm5UQV7w z{9zKD5vzotf5KA&1Vn+~z1P+oO^@QIy7+4D9qnwUj5nVC*83@ae?%qGdD4FsSU{&- zx}Hb%!sXo(8RDzTu&syAJi_ad1WaZd0jI;e6-TF}*w_JFMGN zxzFzdp;w-Jjla4;^(lNrfl$tKRt}cep>f%jyGO945rP4vR{iJbYd$QHw!D~yNFy^9 z*JeL19{34jmK5qeVT8AG5HSPr;)M_mKG}gKJNLxH8JD&b=zpj3A2AhOt(Ed%&9{Yi zRIxg$BRx?q=h#1WxC#(*-{2L>ZJ>och62sy_3ou3ObH*=D0%$&gLAAL z`&BF7LxS@A?Jw0YC~@)S`5}GQPj=AxkwAw&n5+<6;BQSLz8X?ZFrIeREou-uLe0@> zOXhg(DrYdAf?OvYhU39qfUYAa~l(uFF6* zy3xfjKrwiGW7GyiFZ9|@5xJR*n=Ny!fI1r=ckf`vOc7aLqcB%BL&(|-vZ4gOxS~)< zM(o!@64aa;MS_kTar3uKuEp=A^os1w-xk?YD@w6c^h zDl3M-P+?F`WyE|1Re?@!h;>1TwKQ5~M>Fla2Ihg!erF!Z2Jd3B9=))0vl>Bnr$p!l zLsk7|CVbX}+KO4}07W#7?e9AHEV`=t5LM%3FU&N7D6iCq94Dd!!dhV!^H`zO_rl6* zKe!_`u~MgAo_2z-T+K@fqUA^mJ?vU0qY%nt?8Uf36nP9Rf$3f_FQZ+uhKEW8#Di59;exuRXL{^J+vj;7ZR}xe+&B5)EU9EC;{`%ds&GVxhx;gwn zx&ZHN^1S|iB$AS2I@FG?x@u=M(kOGtE=hji`|I@8Zx*y-fyCrR+rjtBZ`^ApMdW{3 zH~Eui-?Vyhy`CU{yJ|^fdAV>EwJ%!qaXj>pXRC@2NM0Bo-((iO%#yKT|2rf&twgH< z&D3+#*&-`ek*a_Hw|wiLXROPj!y=_$OwAf?CLz5paog2IF_)0K%d(+eAa(acJ2j+X zVwR%{CNniTGh&Ho@+VQ2CCW#e`QIy@(u|_>uRk#Dtr|Ntb#5gXxfow&Gtv-rbOC|w z_oCj-#nBeARZfh$x)vIw)<_iWK|4^H9@{ic z;m96G;xU)*oOM%s|4#cZJy(JeJBbGwM(cUw5Ie#7mv*ap1R{~Y=T{ue&w8YH^ZS+7 zBqtb_jb#Mm_@XQHZnFZjLh#!XygsbRCo}6&LV=lvnbY)SC-)#&IT{}z#rTk}-T4oP z<|wHW_R-0-Dvx&?ke9vn=Dk9P-r~&%>->%WG@{4bG(^=w0yjnVr;9&s@yShq1mZ?| z{fm!l>M%3f~!fM!Gk*M{&&-zWx5jgkA07=b!l81AmQAvPe(b zchejv^4#Rz(k1hRH7*>8IOtIxJ{yR!FrrNIEV(9`$y-F8zOV#Lf#30nv6K_cU%{JD zW>jOO+-8OEoa^tr-vc=75L+R<3DYbNv#{|lzi3$!;v@;w|Zq9 z=&(-cB4G#WSSGP@jaYj$qnNRbRmYoMjpuUBR+>N!dry&aYjCnes%fiE=ythq zy-FqP9-;hg_B+Ui>$cl0Otv^^wqj@FD2ilVd?iKi&Qh%SSSp5z~{`qy?##%I6oGRRK|(DOJ|;9WNhCY zT@@W3mRd4)apfYL{Xx0wsh~lcmM^&9!km+RMYvekxAem!M$l{+k&VKu9}mj@jBz92 z6D4xMb8?1uszbePvNxq8*`-bYIsWC0OBVeC@3(&ggb4?3a%cvUJdjFi{AaJzWPtPl zpYpY+%|9{W8-ZOu<&~$9Te1Gb@=5eiWp=MZqosq$plFq3N_YVZ{ah*}38h;x@JS_* zQpQwgflnEzT>y#<(gvd~Y`8&Lr3u?6H)W&$hN?+YfVPh?QUI0v^lwpjlY zD`=%q#F)q#MMpZ>hb&k9Po}$mE`TwQ3({M^Cj~s5li%biytTeRLJddW5eyJCs}m31yv2JaMlsKNiK zLb9uyP6@vW7IfDSwn%^V7T&cE?t4Q%#S{au5R8czK4sj} z;{QgMM+r|4rh`BN7hL*amHx**=YnA94s7o^7xi1QlXmwEO89QJ|DA#Xmy&Vx&`U7= z{}=+?9aJNQV#-uFSTR0La5F9;*u*6ck&L;NGK}fq3AifaP{h#rANHe2k!Y|La%sWx zvunW+^z1<-SmJ+k0%kqF$fAT-3<8^#W9~3=K;VCPK#?NBV9KyZu>DQ{YnJHXQ-0x4 z`){n^CMPfv8+$uCc#ajpHU~|Cwf3n5s|anEOBGu*R}w4|4DKKI|J0xRL6gU)47eRb zw|i%3tA>VRsOmGnhtk(DH^=0OPqlM5GfHCwI-6|Kf)cDp(tkcHs4b@ryOq4ODnzlK z$-3!7^;Gt0Vm?*It!tJ%mG01kpt7_bVHD%);Gs6Ia3|qbHB%+<6NHgNw=mz74vXhb z{q+3HGe>r9eivpZpZE?nu#wuOgMT6o`W`(9f9^d6*zi#z=yOG4IeewV)J|aFW1M<9LjRiRRP3l}$$1Hdm+p!87#>R`doH_zt@7TVp1aZc z!xx_DN6rm(wtq}OC4XKJg$)L|YHZb)Z=dMy>@zRFC{L~P5jBsj1JP#=k{}J|50b!3 zL>9iRYHa;mBgIe($g$iaaH9i5l}lv%T(KiN3fLw+kH7dwp37H$k0PV4&u85TR}zn( z2SFYW3L3xkxwj*R=`fD7JhfC^lTDRi3YTRg`NILitFiKh;0 zh24N2Rg2Al{|y-Q&)W1 zx3T6Ea*&UOVX}dD4AfSADaaAQSc^iP*=d~1?IHaJ1!?^S@kPyD?JFdY6x!qcK?y4E968%}$W^S$`;WEDUzo=F86u&g>3m}q!5r5&QN zb^=OV#5xlp56C*BtE%&L0$BLNv9eO-z?1k{|9K|o> zLDyK~x))LZ70z3Ju(rn!I5d4JR2_HnrG`p$D1=JfMuaDYfl5@A5jJzgaDs|ot?T$V zD$IS5kMFF6{JegddRcgwpjdqEB>hQCaQ0Io#yikTTZdIG@r*)R+0coKk~J$;wp^qv zMU$>Q>W?%gQx(mv$P+W6zu91X=Z>U*h8(#Y4ms-=O#U4hoa+Tu4jocuG(Qg_48<01 zO8N}C_hQ07cU-^lIbNQ9U5@k7ZHP~B?kMR8eT59eyohLf&tD5}!jUDy-S4ooBB{Gal%~|enuDkuiapA%^tSH+H zLv~sCjHfoWp#yuyJIp>y(5c2X>x-X|iax;tXWAJa3}#$>)j)$wv~cCW7OF8?>KxVY zH`M-g)g0lA|L%qoHiNu`nGfoenGbv^*{RE;&#eY>@oAT&F2}6NAJ4^N4-6{R)@4(z zeQZkB1d`O&C6laQVO8uLV%63)Q>|a&RO|wzE0M-k?0{5@4}0XRU$WKK!y6xO60Ln$ zD_X8@7NiJ0A=#5)XxPC4JiQ*OD!y&m1T+1dc6;VJ;#;|lbr9+_W~xI%No(HyxK7B? zLOSftJyN(7jS)i_(8{=4`N^t@1GCtlLQF;)X~ueKc)>@c*TI&rqANl zU}O?eX`Z+ERb4A}&`guJ%SIpX*o>Zw-pZ@4gMyo_*Y&f;(QS?K{T27rwl}LK>V+z5 zm}qSf{CrL3lI#*!nf;w4F-0tV@~RTA_irWMwNz9=#Kg7dBS{n&@nTBrXeq-z%)}|& zJV2~YdIHk*^kH>|E0tNZhG@{dJ1ItT&#~|0ce_T!DxzmL3Fq^{LOk^#rWL8U#KFw- zL_)5)3quFPf2Q_=Rh$(htFdO9$Y*Uxyq68UAJ~x@*iJ=BX>?1sQ_A+!n&-K8D^{s~ z4o^2*BL)uZng!uriN^Q*VwIsqHL=4cC#!I%zhcutx@CzUn3**{j$L`1pV2o+Y-sp>M!{cpUg;~u3iOYC|;5ogB+aGl# zaG9{;nA|SNw2>;i%V)sv|4E#O!KlWvYn<2(J`rrfFA#4e+{CgCPX`VWTmTy`zwqHf z-ka#fbn-V)>}rMU2Wbk1cvEzTb2<&Go8;xK58hMetvMvQ*B+ImcXX3*^v34A@xAJy ztOuBynS_X;AB16LU4eAEN56f*Wgfqo#lyB;@z8Z4=dj5N&B>e)Fn(EmE}Qxu2%h53U{Tr{RP)|ZR8&;Q%XtkhGni%~ta zq=tN4wN6Ymg^L+`C|OmSqz1i&ynH+mNW+d4xxl7gTv{q8FB$^`f*(kBB<_WUyYdQZ zrFqn%Qi`HdvHVgJBz7bcc6PS~HgeT@R29|aqEeDXVC9gYh}8ec`L9$2Lgull3#`fy zQg)8{{>Ix+#`>QpZIqJUP{3-;mn9WkpQcRqYcuvp#dFteH%6i7Jg0UV%tZsg90v(; z?N?+E!@8mDS0wks{LJlF6c55Sxsg}$_QQNV6%~o>SAv}e4S4K-fB*(srAB`E@DH5X z=r8M1G)cQ3_k4#Iqqxoe!-1_NaqOzb!%ut}%t1Iss;toJs6o_Z87x86`&lgJe17em z=H%xm0~ExT;oW&gqj9tOOqSH4E>6@?NvWcHtLkt(gJu@wQbo6%#-F%flNVj?jzFQt zw^Q|A>OU|#?_xOS(uD1!l8Wfb%V=_C11z`%CuN~m_^U=kLCj?503(GQBD#$Eoy-}P zbbax#fBIHPzASTgTPZoaj_r!Sw1%F!uN!_c!TD#0G#WvNBt7L8F!V-LpNaHM+LHj0nq2`HWx=PNEmlo@{NX!lwfMT*df4&+a)}8G4_7tDRKtM<$S&Vsy4(zt zFy#F~;M2oMD8z8a;uN)h=qPDcg>r>E8J^MtF|pQ{S))FvaBD+LfcM|IYK6 zed=BdhjW0dG8F3q#Zl9mRcn8h?;p%hgoqO`OQbf;);hjl5N9v&;7fAgb6eJ_j~v1y zFeqqx6reoisFk~ZCoO6Dg!S-7<`Fh7oxS<#6R(<%$-mNc(iCxF*p{=r<{cF3WQ}(~f(Va2 z!p2^$ANhF4(Pcg(#xHYO`L&U_?xkI+gNG(zE<)3&^oJqDHhJeoy>OTFBqCIc9~7f6Fp`KkwKT9+#^CNe_L zr(S0^On%fQ-$`-cJ^r*!LZA>iktanJodZeUjQHKXofz_1d~~ETfY3jPx>LQ zCD?Rd>^IM(OLxn1AZ>NWmrenz-TNR(BSByQ+&$;Z9<^Va(kE;m#S&?D4_qxd1o(*G zUV+_u43%NikF=%!g{oed0k~bCClHiVHA|!6QGP4YTGyc4J}(Y^xyi#X{GV8SACMk@1#W^r4xenhZb0;(^jwq!>RZ8+kKr5o-SX&Pddg^d zPH8N+fj`oOM9+we=SwnvgqeK%o+B(~i8}kt9(i0%m65Eep`{b&X140F3J1NrK;HW_ zo$mMmixB*2cJi%>e6yo(a*OmtP5^0RtZREsbh z+T>0lolJ|n?h7tBZP|wv5q{GCvQju zB@-($_vN$qMLW2+QjR>)kDgFDN3#AF+wT<<{-d}@RX8On$?c%#PF}b%TP~sIB9zAp zU#neD=#NZ*pcHv|*-46@vn?}u!uAkQKfuOnn=Q$C6on!wHPnf)!XZ#Zw_UT>qefAW zK+~n+?${Vrffc#mLaH!mIw59Wb4~c>OWf4n_7W)+BDzj|NA=739jnn99PjE&O|X~E_Wf3m9_=VR zjJ3W^hcH^F)Hig)(^I^$O{AI{a^9^q-1yJ_*v*1ZxzM}?OPHw4+0%E&KR;h)Pn+jo z@gM!0T5O7_x#Mm;wivYZoyru8ytW|b92dBAXE9jfM3pi{^8YCOD{B;it9?&!xFzqM zL|G}b&GX^<2oLenXk(YDJUxvc2960^@={*TcO`1f5XatGW>==A&syVYlz1iY{%zIB zL)j;`)8AZX=i5N6;s%Gq9qZ$=&Pf)zVs8domNd8MRHdIc2`G{lp-`HTCnXyrWhXdQ zg}eHMRV!jSNGUYC;{`1{(QWOvX^P{j?PtwSR7%bBbOS8Zi;WXDUxa}(6V^zLvG@Y z=U)eOvi+mI-|ObyGe7#eUUHONbHkB9{V9gp20Ff^I!4&>QwSN$HwVMUGr6qdS!}H4 zI``+9tW5~m&ozqVwI&CRSjwGe*g1uZQRD`xYh%~#M(>3VGcV$#P$&IVQt`xcm*gR1 zs}6Bi8QB&l7V8k1Zc;a{Te@MD9DFd+>Y9RkFvfTU(>zkWUK2SI+bs3SIH=#|c7(l> zwo;_j691e}K^Ec=GS zp5^F=g?HOfmu;ZeRQ@!s^ln4=29GmIlD7Qs?Pv-r1)o&tHwb$U8quqU8SKEjw6Fdo zQv=SVw-a|CB)`uHqox{0^T{+ zbFyY#&LsTi*=!e}mx9iLQ1Mu7;;#u9XA+#G#^?o`;ZwVKx9Xo?)_o(aAXziBH^8rqq;xMssII_`j9;GiNdYu^bkbO(iScuW@s;_+v?ozeSfrwr_8jA zjihSlNdz3&cl-UA5>j9(ly2meiuG{>F06X>raM%b!IM;4Oh6m%D0<{~(5b(>k(dcvjyGSI4kO3ojnJZ<(sHIds z=`U=&6ZAPpP1$3Fl$~dxjKL+iSx7ab-$(`TDi|7F2my5_V-o?u68}Y8kL^I<(VzdC zH~V4B8N47&u&w7}mI2<{XQb0A1g zZfS{|-eVM?&Fg!AtJDxUaa2Y>1_wcY&HF>_GC%1u`0aG>M*wgnoba8{0h|@2X?bXAI%&Ika`4osc=SCy_##xkP=z6>}9gvXHj(-j*}WdV4ct0arp zPuIC@qtuFp_!JiqMhB7GI1hHEoTVt^rAvj##rL{ zq7qfe=yYaE>GPuUyOL4+Lc>ue?fz%_U~h}g5#8lNQE>i2%V@kODnYsGqsW=esvlgb!v6fCO&-{?U@obll>bk zOBrJob@=2;6|oAMA(C&^-#!)Q#Bd&usV*#I7z-@&p+IUfA78*Q1t9i zRo4BGKyu;(UxR<3p;EHs9hL`dIQ+<)`-avx1dt27kxQuuU!m3_o6V5&luZ>`Zw^nG zq!1<>11(tq?(jj(K3QTKkYb_oNRn9uG>Yb5X8fE7?v-!%>b-7=M~AXS1{5|W*4+F1 zDCPjVEPCz6EM|-1E@P!d-!LO!8*b!~35a8=m?q%GS5S>ly$m=gevd2vqPmCdF_(iC zch_#T!5=f$8>Qipn}f;hm@;|W|hX7#YYGlOZe zxFBPWI4_%hCmVRkTPmWTBsY$eXJtIS=!l#wD4SK3RC=!$TmY#hJ1)q9_qg^fB-;8X zq<9mw*Tq;SX77lPStc`Rc&YCUpu4AxZ<8Fo5ui>Pr?a%6N@`ERdk%`Wx<4oq{rax) zf4J2Yy)EFp+fATk)@!fP<2xaI6HDeK}kyUGgoO2-b4OJkMR zL%GWC>XLCSU&+&}-ar;|&*@G>Wc^7;xlc>aH4h<>*InEXp6?;lFSIygJy9_X$txvwYcmz-e(HWdRCWCzVEft=W4}Fe5>PLEqhZS1#!+)$4r>jQfCYmQ z>om98IAq9*j-M7oSR1W{30e&cS9#4!$D{P)vqG@^8fAm;m`pGxZbpDDp-b2xGihww z#OBkaKjn}YCiU>;q2X`n`Id6h@pxON*O(Em)mZazk%b13eY-0qc5}1qPeNyfqzt}c z3DSygwbyHRtWP;K)?@&t zHL2UqcZHirSeteQ86UkPiSBs4ePxsr{?iHpLbsJO|E5=;1=Tykdkn*LZZ28T;|a6= z8EWr%K-3l)aPR87{4AP~_XBQ#Pi1^BfAM2$*~`fMKX z;iFsG(`yG9oVEA<1ak`l3m;v|j^8&n@BJ?^1O+{!wx)CT&W;pjU)%fN;OuvfjxI|* z$UJUuJWG%H2dTZW9iw^?xNy1?vJu*JB`+6JS4P`aJ5Th1MjsH9Jn0np>zS+@$hoq& zicKk!IV~xYW$YOaM*8tWKyGBKFc+&J-2yhj&*G(*goVU|{1@t4TxS+C8K=pf|jT*&>crTSq5bq&sn|>Uw*UMLLi-+hw}R z+nM5fY=jp8;x;oU2)7r8G2iR^;hrl*2Wu~(S+}N=G5(;-`E4&%D8lXaTPenDz+q{< zcF@&7$ZKKJ!*-pR{NkjR*@@Ud^1Ei31vK5<_Tzm2lC@*kDR`AqD%-EaF!>2-|&Q z`BNmkG0#nL(iY9pKTAGwbYL6>jPqElcArOPwr=H@PLPCS!983J~0Ul`rHves@0 z@4+SIB%59_LkiA6(bvdWrq;rdR85y6UEJvLwWr z2EcZXX_Du#B`|Mf+?WzG=j5dcQzReH79rWeS;fQ`)qW02Ft#%|7PRZxkvC?TwIoS6 zn`dzv8LZW!$2>+Jsx>bzuS->I@IPv92B3gEkEyuLhOh<;O+E*Ut*ZtzQmSD4%5i=< z<`+`RueL#OTP2`7e(`aJFAfr-d73MMth3N0M)Ebb0%vXI+a_>AV?=btc2e@VTED`0 z`IoQcL8QJD)9dve%?|D@{_j_2h6p!9o z0WzI`5-N{o+G|uQZ|3l9y3G8@th)}l7QLEEe0@)AvJZevH4AHRcZ|D_w^*)9_@(q~ zOAvt|eNNnYdX)wI$fWo}lgS@`v83Mcj_dR>RG~8BS4+tfmWRD`FRYyv743g}%J7S2 zD3wnhBa4@~VObc&3dw(Y5X;$z#jl}BB2&mVD((V6J^Ku9^T3d1@m{TdJUpP^Z`k}* zd-MWreWE}Myx`&-qs0UCzw?>;Ob%-sq^-W*UgkqhZ(VN#kk6XS#uT9A`V9gN3Pb5_ zxPNXPYCUmm2RFs102>Sc?j#S$AD$}9IVTeXECO&`XJPG1b$N*qlKbl1be|x4+m~A9 z{RIw~Gvy}#X@E^rB361mt4Z6sD@Rylkl_Jj)5GC1Q!d-aI%6ac0)dE@&y7`Wd#CVX zC8CQM7Z6|GKXznGlBbOYv=x~sT7#HrcJbP)te3&U@;n+9@TKdIPio7_`o)P>jwA_CN#EuVrChHh-hyKjUBat(p4RO+hC6h zwX5$uBCW%OYsGKf%a^PSf?jQfc*k=gZpi>2V0V=B_3#J5qIWoIuf4nP_Jfvt(2WxH z!5&p6{mQkHth&?5OY&m3^G#u?@9aB;e?Hkndumg#u z1&H{l!8N>It`NRZD7z8|A$CU{?5&lJ}vpG4+xH;OsvtLr&+|Cwi zRNWjNFRq=lHG33I{^hxxE!B)vsJbcS+%kTlG985UmGwF@-Xx5_PgFd4#efx*y#{9= z$uWBLgHOC@uOs){x4x?VW*M^-rl*LS&I{O<{bq@{7p6z{DqTCN@aW@|8BFyu7uj|v z>S#^OKz{j?^aZ5Ihq#_S^?bTC81!MKALiFs-CO0L13wOnQyXbSuvKKD@CJm%a?w`8 zDstc_)>CjqBBHu&5Nhh|WQg=7cDH?K5IV*DzH!`c9}jPu~r#0s+S+!(y{=H-ht4i#Gd=M^HYdX*P+r_*!S1#UuX`_(xZ5A z_EH3fk7$R?nqM7AwG4;)Wb7%QOxnLKJ^*h)d%{U!nhc~b2w2~1 z9eg6H$iHgR3mT{ircBkZS)3(6SAm z?Bj7+b8k$J(WqZ#Sr-z|oYYDbw;Dv`{U^-%=GF)mOtLY-aN9TzS$RGCOozWibZW`} zrj+|Lhm)2BK794(b4%<9KBY>EwrxGD@9)(z5pTESfx9~4CR$%Djm|8EZ=)A%Y6cp5 zDE+{fxk3xa_8|M5U}c0B8rHtocjea=Pkb++jtX4dpxBHx^b_wQ>xM;OBhqj4dTj?yW-YI-l?dTlUi#enKG&-D1rc@leeqEV;Y{{ixOU#ai<0}3rld3UJH6YXcL89Va!%b{G zWy0yc&Bn*pr{p%+!*9WZ!Q0vM%;W+ec6t5#`QTOWcpoThoaAR8zHwy8*xu@5kF#1? z=37Y>N>n4U+wMH`+}`0uyKdf2xHoJghxI9~X(i)~Uj9o^{QO(iT)hp88&i5qJC zbi%>~wc66Qp%pepnmK0KTVyFsgeVzaU@4C7e)Gzz*P9^i6vL?HAde8-@K@P1QI=RM zSQgBq#(o0utT56PMyc2{%O{|iGaI12b<&lqU>%rLL^c#Wqx2o5S0dR2GF2k1n7Cyku$zxIZv^c+M0 zmmGyfIamneE?8!;)at^Aw9AjtV7Q&0PW^Q>vS}3b(A1iK8<*;ko=wQec*w|T5&V7= z!bHF!ykbu!$V)rZSLOFBFZQ40wi@X7B4~1R0@6M4OK5exKMiyzbJtyYUt?uUa7RX~ z$DoZX$aR!;z46Q2cPWZJ-~15mNI@rP-n#rmB-`D|*-a#nZFwmgGhY&Sd)6w>HldVP zCqECoIAMnMyWc>o74PTYA;}7@#%fK7s^**)dVTsvr?~oWm3GnfNay)hnwCFGyg4pO z+ahHDT+NQzEFoDziJYW+P3QT7p(l;EM>H@HHCNQ4J)oo#)HL?U?1CW2mNC zzS{QkaBMKVLNRMFp4P`AolmUM6b;2%sSi4T$X!#+2L`DC7#7E5U*6^BXqZEjD$i2C z^+x^EH~(2l?Ab0u7IuyPO)!5Vk?O&a^a%yvLPzXb=l#=}R<)SjU_j9#nY}J_)QYfT z;hL{I0sfg4JHKd#2K~JY@g=&uEh3ytf5LvlJL_Fi7)kFdnd$iiWCmdCZ;(X5yrEqy zk`4macJcH%=h+{QGuV%TRMAuQp!A!qftV;o9(tBg^to#F0h0{mXtPOle11myN&whp z<%#t#e#|w(Hyf90>f=e7dJax9Uop&Dx&E})N$hcf{|9J5m%lxfZrsIECK9d<;>bRi z;NQ5avW(yt(@fm26X_S&??Me|$KfQwFM(mUff2l~LeWS(2>aMM{!Q{21*VkhXkG73 zlutwr-uGOn_Qqopc3D93;MiL`iTVzk#82(rI4Nyvijhk2B8+huFV*SRI!>09|1_N) zaW28yoR07~g0+_bHcAD-Zo5A|@jQ{-cK_cKyaWs=*V8p{Gfk-+t^#zJC->_FufSo`t5ZUgzBk2b+!8~l1IiYHm+%fLaYp|8 zSEBq1jfJODIdchacFC{%39jPhltK`0rHveU;lJ9eyf_iH%#K2W!#4c6K`elMgfh1te~4DH zZ}iogw~VPQhnsfbDQU=@Sz-DQ*cMf+NagK+0~HDIip(q5(@$<^5UwWpZCCEPhY617 z;$-@_=A`cbeMEc6XYi>}M1%VL84~}hodK9IqtX4-LL^9^uFALxWH4pGB*Y!*>Xmk^I?` zu(JpD_6VG7IW)A#5b;kwqY}D1=EzK(^XCqz5f(8(ep;CHM{Hi-X-fQx#;Aq(kl}2!6{T7YpQmjo`;|EjpW8 zD*Fxzr@BEQ@ux&|xMm?bhg$}sB}u&2nZ3bWGzyXgwB>F$)J{LXMn&#rgsDH2E5Mm0;u z5M?bNRmEZQQNq>eej=faxTGHcS-migq;~{FD1&; z2494u2@24O9le5RTIS+vw3%S8u5u;kLaHye`G-W)Zea+2N$?^Ue9GOl3cB3Fa3G8% z(x-g&2SO(k`X+NOcy|!oz?_aV3kg1?e1U{2Ot4mkQG~rpu*085WCV4vC-qW&dWBw- z9W8wk!F=g##>>_;ud&mX6ER`(-gIODew7Hn=kG}HMOnM)c8$<73H&|Zr%xV1@J_re zWh+&pDF|=k_zZ}JqYfY8?L_=a)fubxu>+<+tcaggnZ8(};JAkHg+7DtVcmjb6%n6n zgFZe%e?7ZUhJqIhk@#ui<~G}MZ0V*}$;VdnsyTEA+((;Z>`%bKx0?8(e3P+&@73)h zu)57eTB6ijeB#u3B;lD-o>0V(P`DEDopCbG)1%t~PayaK!|A+wS9&41PAnwYu}&cV z2H{J1T{`1wMGkdbxA~H^k1v&%vmt)gvjC=Itnhq3FZy*hr?H_1dJ`&HgEOf59vX$F zb7HL|IHUI@as?MiF71ZaCCk$(4!Oq>cav*lHkV-Sf+_Y+1ZQ-I#O5oy*R%OX-s@_< zmZD}OyO%qpXdEi$#N8pWnE$&^7NgxE5$YLj*53P`R%i z3yEmG0ihCBsdrazEu`A3-4(*05d1jrw#n=&zui|TJZ@Yh zNgMG{UBS}{UeCCqpce8+2!6V)aVP>eb3qu^O`26LsV>)Bq?}C@?Rtyw#RR9i-ionC z#EkB~VsVd3uK(sj=rw3Wr8%E>bo^b`yTkhP=JBaEBmjFNFc8MWKz3FESD@ic{;sDX z2BCXUsUG@ATdxxt@vNT+CEC`q&31O~hZfaq^ETL3^#K$@Xbw(drBe@iFn#60#eX#6 zpQ;e%DCfo#{05_?A4^%NV8xB%?-7FcpgXAEJ2n!oy=`$WH4&`6ZISyB!P?sv-x>J1 z-gO_)2PcCF*50-_CdLt5X`y=6$lFyYLP`c6A%=vHua7m5(E7lo50NgSmUyhdSc2W# zk@1S#wH=vC@YhN^Lb0-hVE65bM+xTpeKYp}A9H22W@9%TAo73Va-)u4Ixds&XF%Eo z!hHySQyhYHr|%k1_}#gvj7GvW>mg?6MiKMazEo_|NqNuP%-I!3%Ji3>{|l|-K&dS% zv37F_cdY3+!8Z}^p7(DMjOxT>T$pmH(awHYk{0+#?&A~pmdltmyA9(v5Db;-I*p(w zQaq4Rr@WtN{{wVzhNJW;f*mIu_!;jL{t$Dn={dh7eU`KT5GLwzGK45QefS|g^11dg zu@Vw|-=##>7sT_itBdj;p&7wdH~T}e#9;)l;R?-ssAB^QD!E)aFCQiW-gd9VHSMro zlJ8qiEv$51Tvb;Pti8CAdjrAR)f~V3ErK1c=E&Y_1!=meg7e2j(az(zid;{y-i%=H zO(l4#YZ%-^@DZ+`Ts(@zCpN=oBJIFa^fL(lNR^+O zmV-ok(G+K~N=wBeFL+cE*YN?AA90mA=h5`Bhy~U?nxQ}(^UXwb$Z*69R(j6`l(l1s zCS>jRXdG4$yv8MKYYEn}7U36GroUJ?CKA5GwM+km;6tvl50BA;%zLSdZ+fHp)2=0& zL&RWvtR#F3ml+pdPJ;!9@9&7TLfOu-q)!Oe_X$uYuvHR%HiuM5?1$3`PT6N-NtdqD zjp11AMz7M-gBCkvuUwVV3$(N#an~xx_oZHEz{a`oS0qzZQ;IDZ!3)|Ma0ORy$C$GQ z%!BBhFZI#=^Te|UXpz82cM<$Bm-;`3rLY^m`w zZ*$i)p_Sj0WL%qY|J|_Hr3s=b9dbsykm-fwQ3O<+M zA}(F7BoVcYP~3@?vWw{>4iLUx;8)OS855IuZ97!)LP-cl#wNKcSBt}&_4M0k%+ZyQ z06SL4)Cx1O4jSSyJ?Ou#ORFKmdFxx4r})h?iNU>k;Rswyq$-QIUJq)$ruFHqhcn2x z!E@F06YO3!`)}}kuQ(Ll;5m|}q{CRyY=To)7$j~b;-7p*vxxnRYbjfsW#46uHV+Z%o{CQq?4F89%H8Nm!p^&q zNczAT-#l%j~xZog(<3sGKt+J)I? zJJ9=-C$le8uos{9%WZS)!CrjF7wpC75$wesRwvcX*+*{9KIP`@BR6MX#&pd-mz%Ti zI3vDT+N;^pUd@)V8-o%e+sd3OMKvx#E$& z7GaNsv%RitxUim&Ed?md$;*-`k zR;>0gWNyP^J(ANR?3qgz37)xRk+6vfyL`@kk{-Eak=rBdE5cnKmtT`;hiP<^eB{xI zERqk?pSjBgzCq)(Bw)EW&dl<5RM)*^F zLt2H7Tw^icM=Ac;l7#R8q)(_0UzkQ!MB`ax z7K~&&KQNErZ!(!0k;@~YDK>+LsWC$mSS%z%5?Ca8r1wSGBfT%e8PfYA$s-Xg!XAlW z5%$dZDuyC`SVjY^NDEE9kkN33T(_;2TuppW{ir=#e=LINeWFPWO4hRzOti-i zKK=72DbWdfK%P$Ul$m$+JHF2TQa!5-OQGo+eD?qko$i`*U=c@g%=ON;PbGzPSH z7s4;lSH5EzjnE*DkQ?H9YL8qe>8peT5d`BcXU4^67Sl6(T|;3N!SA`?O$6_E!4pVw z+{YXT_Ci$B11ToWy$pA&GuXEmHU1>_hbOkz^|(cRQu|v`3vu(5;-Kp&<*6~q9h(!! z=7Xj0WU^gB$(<3!Ewa=B7x#~QP>=1Kk)anH;fhgH&Y;!| zL9H2r2DD}x{0nCqv<(ABi>U=YGYC%EDVMrajS6wOE1kECisPc!1NxFa6? zOGJ1(%XooYD)F$m`W3y5`r}*pTHN1{#sDUkIMz$t?iekXxI<7@HUmP?5HBl?JD562 z`a!;+CX17>G)`y#iIODfEI}m@3WJ@(aF+#@tY-iQ!XyY56=fn6^S3#1|4f)%T#Prb zQ^Db>;4GM2G&~ZIMT+CGpdCu%`I$ptVk{DDutV)_nq7{^s_}5LDX}A2KLp>%|4hV6 zpeV+fkmot_iek6g$&)cHQDPv3V&Pyzq;RCY5#DU(P7lY%DptQ{bw;TB?Ocpdw^3Oj zUT%xJ!4HokQH__%(5f5!Q|JaVDxFJ3VCruj4bBOq2E;W^LP^M+Sg^%dX)UV_X_;dj zYJ)p0npi ze?V>EN1rMb251AzN5mXJC819G`HO8fQ+sVgMDb$cVvD#3%IsTH>}Fxk64$Ei?YX!a z!20J|vEwRda>jD%7PH=d(lYLp%E*Id z{u;I;vTY_`hzS-Okh3j2gi+*Wo&npqYd zojmF#yc1aaIR}>ux{iw=)BGy!_N-8!#(gTIOKa6ED z0BRxj9u`#KkH~`}5qHDsGzFFsb|%F3umMv)0k&>Wo1>yyH8+R0^X_&sqV|uM?T@e? zux~L(N2kKpRqn82;{itGm2TnA&ex|VniGb0Sp#7kjBo-6g__J!juDg1A($@UZ44dl zqGKS(LiSUS_Pl~Fokj=tOCwru8;%Vc6@doUk41B2O+X*9T(5xxd`JkJ-Mo>{Q6~L& zvymAuve88^J=;_9u8#JME5}!bte@S2Cfo9rB*#C@_xRTJ?eX>b|L%qV?;u5gg<|4f zQ-`^m2Kc4VPk3pmUSVW^k$ZwZHnCZLpU^`X52-x!(DAX2*r!oDrW!Tm2H&{wT700R zy)&fz7^&692-^+}oBojy>Bp*^;kks?t5zWVYB>%EDCY1TqK)!+t%9=VBs+Sw7-2v< z!=!>DTnewI>TEleu&VdLOlXQ{GI1N~@i%6pJMvOA9 zxB9iw%SLujZ*$A=Y@(2Qs-C5{>V@4}E;_?HSl`^uq`yX0O!@D>LowwZi^P;gArw#`+_mzE?U9}ai<%XT2Q zZ}BO$_{?QfQOgZ;mM&aY>OEO#!JJdNcs7nTkqIthUJ)1Mj!7JGG(Fyzq+h1WAfHW& z8>Y%&Pf3-2pGuYbOdiY+_qb-N^m$nFAiBGx$`XpaV|O^XtRkO;XM-h^i77_g}<(x$!`v&)<2Et@-=C0mNqR*mnJaNCl3^VDFxcD^lHvdsA+b_NEQ zIx8HkBP?-*c!JOzfSP)H26(||3ia!6a2mge?agD8hnu8w@uCe)|CQ&$5f9l4)|C|wWk{eN6F6l7x1oJV~yB5Q83ZdhwYp|;abXCT=F z`DDC+ipp2GhLZlrlLdMEMuxhsCLjniteKmvI}mW~5@bdG>1MVn*gDFJ`G1*Bn9Cb?QYNvJLkB zS;<5ZEw^%bUkGl)OS;Iw#yGp&&pJa3-*1kSz|>6Kei25n9!;VBdKUgQb3&v6|9m~d z`Z{hVhB7erAvD9fmmy}3j>?Ta*9TQ&=p6?|-8)9#4=HHrfV_-L+R?@k9F%eE+~RY& z9IpYZax9DbeU`%vv~9}%7tD(yFwLA2fh7CS5LUk!7z<`)YHJSnMGNd%~DgF=TF<{YU+R;YHXSBw^(P` zcqeix*nqc!cLcVl$($19ZQkItIfew0nD{A*|2ce%Rb z%~T1iAFTAI4QdQrE0x#V)WjEN3JDuVu#e)*6y)%Bjxg&Ye3*{FyOMH7teJ?Q?KSF3 zs@@i*dUO{a5s@P0>haKptlxN_@e;&mk;Xpn-#ACq9zV}6@&T6+zeW8fE0-+$rY0Vj z)xJCN0{eCHXS0uIXcTdxQOC=8dw(xWnaWDpn2bY&6*2+Otxi0pojr=OsE9St9A|i& zgyo?L6Ey_0a{43ABGpkAzNAWTe1mmiidva6V^LVZZ&qDgbS3_bi~61g%*7cgY@jL4 z&c^Kz)rPk;l(;2oC8p}PB#yt|K+IOV&_8X(AkSOMCM=x3*bLN6d<`}e=J?bVk<$^Z z5d-IKPg}}Axi84r4OE5wsnmLi=5n(jlFPB$%t$&9X+5-vNhzt$W0wOOsC4F~8Cc=q znCwxx43csRo7o_q0%{f7yHg+VWWbbm=^-XHdAG9kkR2k=8eW-R&TVp>Wb2%{jrCPZ zObeoiBGBaiM#ZnhX0VAb;r3BbTqVAkB%M~EyF@mx$d9Q0K>>ry&5V!82E=9m93p4> zs3|vJ!48?VyAgSE$a-@rs=gi@sM-1%Kw{xAavY23NJ6>KG1uwq#RTs(Rk&4!g$hxT z^q~C$W8Z2A8f#CbK*1k&cHmyec2+nKp&_)5jslf??_qZ^c8hUZsR0l?q zD|tjiBQ)1ieBH(63W9adP2+s#oC_vj6VopG56`^?pc zBYcpGiWzxs@KlWN&uC;f$T`w^WyDkur9`Sph9eZRmk;qu;!Q3St)Lp5#!cOK*`$1S z-f55+tJJre+VXmZFdxO4mtd1u28Q@M=7r0)rA_cDSNd;i$zM+ld`C$Q0Zf>oDnSo8-JAgy6xHU|low(zlO zgXYn~=-vd(WcWPw-VC6sPas&D$j7QrBiLgN9do*Qo_spQf{fMwdxE7?8LZ_-f~9$J zEZ}K^J?6#VCOpVe^_ka-K;8IrJ;Az#XSBn8F9k_c&Y0pUf^~b_d4hF&+t^PZQIKo= zndg7PbpqDyd7nbC-|jUE5-TXU(+U!8o>POBZES)+2^9Z^&R69;H&tT3tV%$tN(traGtw%T#ByDB`U@ zRihd#Q>`HQ(ZE#Cslm$qB6wS1s-X*1kyPFn5Sy)his7@ zL2Qvju|bYQeqx{1_QN16I`#jvMAIkr%<_o})kO;h_@w46%Jd^iJK{e1BGDjXUi>8WYu{Hqb#Mn7(1bXN6~Lii`D%MqbMvV%AMHK#H*C6)>$Jim+9lB240>mo4lcpk;``((rAs{RjnF$Mw9H z_$a_CNxY<0+)$qs_c=>(M=rL7ee#)<-OLiw+0NUAkdz=jIOhNdQ-k*rywBZI#{HW= zQ69C%znB*hI`s~L#*J=xX_buLMggx?7==Q?RV9tM72?iLF3*%=?W!=~Qb^Jv-EU*m zn2guDM#L+yc-x^^2##jnDWZMIqQ#-Pr$n)$VyKw8FZ|2~YD zQJc+DhPAx=@WP(-xA`OMo*=6GVZI4Z%j zBaZ17;|g=~DZ&)v&X9E@thD-VV}CBN`oSQ`b!Hq$)B+J;QP>LcMba8`?rpfRs5|G|X`+ora$Y0p1)r zq^WH1sTD+5>SC`J7evTblwjQP8)Hs7(VQ~0sa&`<&zvHNVZ%e#7{?YaZCS5R+}a{L9628guhvgYI{q@g2Mgb2^= zd3Z=Pj>-P3Qjj;#tm$U&Rg)tf;+%TOW_`GwQ?;zt+VVwPH7h%m($@#pB)aayZY3bu zMlTc5khN*W+R7?xuXLn^DzC9;3v#t&R3OpfZW`T+cO%4qP564#fFY?)j!S zCxl~u7&A)TqZKfT@Z0ZE3b-6CeV;%%y%Ai%?}H0CK=8e+faoQ*8K(q)v(}dYwQb)e z*iRzCRKM`2LIw8g1iyjKyoM88krVJwLZqie)!kVH{}Vd?siC4TCRpl(5pE^;R&%h&szf?+SeuwJ{3wbamx4Fd1!Zy+(&JTJQb63Ceo zqR8tsDcZXf?c;%m?Hvqj_3*v!a<(cd^{LMgtf=;}L;pZ{?^XMl>?a#VvNEcDjQ1ys z_h(Ig{1L&r4j(Ie@qIMfT^&B^KyPqiRfo@2!W5$O8L%&2zAx}O*ma+Fhg>!OKa;;L zJ^F75&hqGI)14Z&No2F7zj2^gOvW=rDCO%L_qpv%yccbRSPPqsVShI+6GdFhTwU-T z_ls9;?Yx!tYnkaj4AEkMZ-ynBt8TJ5;ZPy7G!WR*|%OJJ}D&JcO zR>&PVzMdppk~`3acnNX`=JYE{;URaR+vn;BMVKUa-~;hBf)#QHJ`M8;m*ft78rBf3 zk~^^Irzt>TuJBt$xO5DM@TUYz$8!i*Z>CZ;cqGB98#xTPlmhaG;ynyQ+9+f#n}DN# z`OoLkw%wd8#J+#fdE_yY*&!lHw{3V^qXfV2J{Z^~XAvxkDtMcw5-f=-*ddn@EQu=I zS2w|usDiiQ7J@xQ70l@g3X?A1WR%ZXEPD3kYlhx&vtr-DdgpPVQ%rS7no?u7XJXl$6+SnUZxEu zdT5L9CLsJ%g838Yi07jRJ?W&wOwEUAV7LuJco@MtLx+zy3cB4e_M4X@9AWUk5iE&2 zn9=(LZ_x4&KP+IKxP#;7d$Hp@_U@-p2*e& z8a)ayIPT#Td_FtYtl&P9!T+C~Z*mP!yE4JN0cWqw^700py|pTLM^E40Jwn<*xa{t& zk2VnQ1#KW)-bzw9P`$73w}u1uTf=1)`eE;WYdA=uAJ(^-!@hmg@UgLy)IVUewZC_> zwZGhxuabN6RouF%5`yz8T<0re$@xl)i@}d6 zUZSDsZ23JIf^5#Li`r1Io4R1tRgj9qDkcQP#Zhsw&4ZSY?E>z+?&(St3(!+%+vdfQ zco9-LcVCP}y#|k>rWm4Hf0~EZpH8P;p=o^K{qYelyvG%puWxA$c4?yW@)j-j^70g< z<+$eQ{gs+MzV^EBrA496SA|1I({V{k-En0h*>#*^^qE6ET62hoqD?gpv1kX{KHPSf z*rGbcW8H{_?N!2@9RyU7{`p7lQjW*7`7Sfu3NxEj-(O>pfz_y;M}FWRMYvdpTUkikwhbMLl^rWPZF6L#(8--~ z6}G$zxnglkJP+$OK#%Rdo6d~7R2GQ7*QUIn&cPSduh1I2YYeWZSM=*O3))$;%KC9( z=%NLzPqo>%w{M33$18RpTl(|gGcHG$R^Ne;NjsN~mD!5TP;~Rn_n~IZI%{{ng7e9hmBSm!VrU z)z%KY&~_6wIGEV4bGd^U+`hAU3eg{=WCc>P z@@NOZD_N0LJ3tY#z$;{(pa@x@3R(TULe@YjWDP7KSe@t>tWNX`Rwo4tR@ENCs@fx1 zRcnIPNdbb@$$r6VkS16~Jc3o!D_GU&f|aT}7_10Z)e2r+La;hX3RWkVu>ZV-=f}^z zDB1;+vO{=(ONv3%}w20G`pvZxpinuu*QcftZ{G;=AfQw@zRCrG%r>O$HYF$ z-}qp$ak`WWpCeuug{^7JE7wIFx$cio6Qi-haM;D1j>gK}Q9Z?f|O@bU=u&fat0_k~r!d7L$MsDD3^~ z)_<$&R&^jgb{$WS0?Ai(|9U_ENBzHPBwPpcTplOz(>&1F^diecvk?j6I)5&uQ;U&U}80 zxpxP6Aym1vot$SDq8-ngiLBd~TSlC0t8)oJLx1rCTA_HxBVe9%E5hq7EDqpGgqMT4 zST5SS#1ZD6h5&9t_=pFC;mARRSJ^lTV6=}Se4k;EXTkTNH^;`TLvz72Bn0*V@zF2AW#KO33;rwh|Ugy&OSU?&WI{mV5cJU$X_V z%bS`2??QM5*lXwXXy!@hOuxdLKl`CVW3g5Lo+7T5sV^&Q z1#&M$_yb}bj*vu~YaD&ozi|W6`M0rhxczD-7^>oz+!GeS2N32C{$VK{K^Tnjo-+rB zcss7ypwx^S86vzt&DiM7mcF4FwjPon#9Gw^4U!K}Aq1=7H#cbe;IC>)kUJPVX&+Rd zuk-103l%}`FmK|ECw@il*&Z^gzJhWb0@^$q|OI}g0EqP6SvXYxH zWvhw%0>HtI41Ux`<72vABm5sW+DXHn^UnzLJtxb7Cn5Yt%dk!-86;6mrjbSFkWlP0 zQd%9$;~v&VZPIo?;U;Yd%-)o=176vr?SRHjnht<-67kP*ql4SoW(K}u8HpIV!P&V} z-INkcdB!&C>&ay;qyax_z@+<$(~)Pp;1L9u3t-NF;`U&(D#B2EAT%l81s5XtQo2D# zW1W{G+7!egqetNN`MOoI5n*|i>_s^FDj9*VR^(MuxPWaB@+%7H<@+&7G&YBga!EN$ z;2R~BuoYVpcg{QW>X2JK_@MtQ%FYTOe6oJ!I5nY{_hmDw1?AYG{VoAhB+{^Zci~8YhKdB91yyU29%gYE&Hr_P1b2%^n*e4 z#czQ*GfeuBbDhmS4IA-xB3TD!G-x|8w;^cEe=7dQI=DIW6t+`~s^%FAH-4N+% zRhXY-y#?_Roo~G%EU&k0gyr=%6k&P20sWzms2d!N$~eUN^Bm~=vvw)$I4uC--Ih^V z7i$x|@-`qL{zL~PElm>`Jkp^<sUZz|jV0gm2wZk)LchcdxB%%xt z2(*@>FfASF!0=oZ(GJh#h<11?BHH0u6;XxyJ~InuF^awwbzTiO@{V z<2fLn-KZr#LQnjvMm_P;Muj+R;pGT_5HQ-Bz4b$xzec|QwUa#9<=jL#kaFH&iH`(D zc4#QVe{xQQCrEU#c|(ZGh{;_rWHdY*Sq^^}(I2|78;qofyrq|@>dnfzk;^zyg6UD`dbiISN{t)j}J`<_+9j$T+R?&#-W0Tl@UQQFa0)hatW zz#D7T>H}V~N88$cgZ0^`tJz^BQ|Gfa!yPlgBF#kjJx>?{M9TGL>Ym>MzEGciu?o{O z1L4*HzAA?rzPv{}akuSBItA&LzgJsywjRz!SROw7mGljtsTCuSnW+;aL&@)}ZGb_nn9e?s`L~;AClw;RI$I+|pc5QxE1$Yc%k)>b zX2j*l6$i1No)Q(brRn<^I>7^{BWxFe~Ev z9H%eXT9HAw3n{}s(sS%(?MDxUc44p}UJ!}J%FI5YX{3r27vx3DMny^QNP@&j?>0~T zoF6Wak>;}asAxj|KN^W9NEQ4WOC%!jKz)s1GEFKSU+OGacLT6Qb9y*p zZQL(_0$ZxCK_)YR52}y5oDFOmJ7JtZlV;xLbkXg%xUs(bD!$P? z$+uv_hbB(|iPUG9up?lQA`;~;Eqi^cD5U@%jxd+BQLFh+m3C7fl?dk=WUSll0j`60 z5?M)V$N)AS{>%*v;IqD;UFl8!cza%38FdClW*y;AAs)jl$DAyn)*BomWh?>{?YYZ8 zSG40`EPWlq`vS%x@^i9$Ex8drVFKMoOs_EwQe$2oBJE{QkUG*v3P`&{zh4OckQn^c zTw`A48lcQD`xsVMp{oD~GT8^P1wh8Bne#2BPzHgWt`3#00^^W=nbwRs)|rK*+WCz% z6FMWUk~vl%Mhb>#;Xy`fnDI=sOo%GH3KO_+7U0zga{(rhdEsEPk#4~hE&-=Oi@(sz zg<*iM!?fLo@g>eD8W9{5)`Bg12n(-4cqzDy?Jd;m3qH%@G2Vz>hzsIYDEJ`a)rL`7 z#48kNW%%n5fuW5BEvN{R-Vc#t*MmA_tH5l>o#G03wQCT6%`lo>BPNg^Kaa4_(fD5x z|Hh8Sp)yVFj7pPJ=Src@MP8kuZW9h+(+r~}RwsD*z8_QWb(VXKcj{`yKXzJ)5zirE z=OLl_LMZbV#KHY*sd+Bqy$%bDf#Fc_FAxQ%O1L+pYFvZ?x7p#KZ-E-&<%wCfUx4B`&TrGcdbtE=!FpMQb2YoAUk$eHkbKq z;BV#q&N(bW8fbHAV2U6O3<}af+mi;`iZn2VO9L%W8fbOa=eE^>&uxoK11+7;ZOao1 zTFHEFTi?j%w$(YG+txSoxovq;Lkp#bmM0UmB$=S~?R{?BTuf+lF`+Gs3GJj}LfbDU zB!ZaG7R7`qU4FK|Pe0oo`NWW13!SQ448tc2^n10?I^o`WIWq~{WEd616%NkGVu#yi zxJhTC7%cYaB*QBc39=`T#3SZ# zD)4x5Cd%>BNJcq}5jZDE?jgkyQche8pYwv|5Rhsl%>Ll6yNZ-na-2)mocm^FRUWCU zqapj&E%Q?5XC|tt)QJ5W^8c1c^6J`H&}#EySDZFEBWPY07PA45*H;wlc|R6~b?E#v zAn01o8D@W;EXBGTTS>}Dsn?V+i5HP)Nt=0LR<3zrn6|>2v%%`V#-R`)Wz}Sw+-?Kg zT_0UkRYcq%klSg`(;$H65Z7Tv1^s2H+b-(F!Y~K3q@a0G$jlB$V?#-m8|%=TwZY0* z)vrUc#B=TcnZc zR_)|cMe1m(7YcSPh=iR7;;GXxu>lj`@&s}K???C}%cvKWA;%G~wvA65LNS*TNTtV~ z&64Dhp~VQRfpZ~Qp z3xu)55PlrtUGUh%6Z>yPxWxpCUIuB1k!r4Z&OVnVKb;CXB$T;kKazwYD?_gfgKVSQK*uBQRG7-2#E z1Qo7E{M6M?@Yzj$*=HT7pCDfi=Hu!ofHmHZK*hQNbIa-{5OnJuApxx<4lii8tM7RM z*0`gfp*Z`E(M`g>2y-GZ65pMd3K*UtScn`1wh&=K1w)rN;#>s-**7Ar(cTAgSQ^)} zK$rJJSkSXTe`|e(KpDEH*np2iLR=F84V#QGSByXd?nby>@;Guo!m^@w6~bIG0(E~G zVU1!$^D-Q&(}JIH4G2&QoUdv?;Pkl=alZxx5^u*ut^on~0fc1@2K#RX!uHt_z zta=9y;zcgriz^V2Bcl02rb%46DRJGV!gZ?*zo{@|rpkhwGP7rP#C~fYAz5Oz<+yJ4 z_rjpt9)oVH47%ANgKqm7bdxjaHfPXni9vVUj8EMhme*GNubUeG>!!y4x-I)(mtU-z zoZ+{VG5n_Fi{I3+|0c5kwvPQb{p`Pq?7uCr|0eSLw#V<=$nV?Sf4Z%>WjDnL2BuFk zpiV}vRZAqKCZ&eFqzv-A|tS$d`%FeB3~)7#53eJUu? z9edE{S3S!okVy6nuk+F9cHz~ex3Qy$#L9|_NM0SOY9^xs{Jr=bss*_qBWQIa6=pV# zm}8Za?bcb;5Zws6=IK^Rt92e(QXX@7+5iUC*;`*c%DFku2$A+(MX@SZ*#%x6%}OKm zFf9*NBvDf38Hc;-FnVJj5TdFr_m^>@I`8L;GRaM}Dl?s`gs>_>CQ6yg>g1GTSlMI= z1ObY!+CdVo-fU`++*1^*CULPo)n!GX-XaOB+aM=DB|hCDo|T07&6IdQmv~Wm99+lI z=6peJjKrO8$fL%^2g$$C44$Cn^q_T&Ds2`SQjEVf7b(I7fDa(N)e|NF+;b>{xrhU9 zo1+k31ZMBxZs(^VkR=pwmt*!YmPPVnL7ik^3TLYUz7t{2R)f@LHNpa0O-=X^=WI2= zM-b)=9uN-?XE2w^K<-fpb1o6!g$S?bWr7GNj`*J)R^c>(RRDIU*F?p55=u5NMk$SF zR}XM6gk|3ukhFP%!Z=fAbfS(shU!kgSZOoB_ae-hT7Z|TFtqJSggK`J@J57PPUlyG zc;v|v#Y~T~xtFjnjz|s89j|5Kp=F5@4Ic`Er?E(i^E&j=1;RB_RTGo1OvX#yIf*54 z#+AxokPx@12e@*g%Kkz<@13OZn>3CAQUQ*SU~SHvf|>mc8RbSFzr@=VeW5lXwMj^I zH&Q^qLbRvuo8dp@sq~wovw`uO*9jdh4-@sH)z)@#eR_WzOeuTIjLB2x3U})}+%QxY zra)vYeoyu|JKNL5+M@Q(yGq+C*JkVVYyx{|OPqpwRkvlX&(>>fRaQsljck=4Oi{Q{ zTj5mgBwE}cXA)BdCXonCV$fp}PgQ4Y%Piq(C(+s3$#k|{ORMmDwuaX;WM0pfcs*OI z-2I8f>)9IaPRrE&FMC%59#wUwbMKv*d<;PXGYLw4TuBkIATuCUie!kk)z&~2Z7~5> zA6qCh_{(A@pzFh9nTWexc9#KUw~vxLL2$cDQfn<*g4Xr1YXYDU-81)`?|eV6CtIlVxao8~eNf`&PA+euQvpvO zG`!wyInFEOIG>Q?d_s=%sdAhzuN>#gmg5FVa-2_=%a4??MN}9HCOY6{R>uJ2fdH-h6%-8 z)_mFojMSpF5!jh-gpOK$ysf9zXV@;9%rFfYWehD(V9`-W$lr&Yk*k#2+Dd~^0Iwmt)Jrpc3sB3 zu-)20x1!|5&D5qBss6@Hii+$H*wY1T+y2jdfcNtq(>tUvFFz&Mcms|f! z^l=(oX*9xgxWc;ALN=|oK8{&e5N~@Z42|#@B%_Vp5Hb^HOtsF_#|*bFBR!>8ahMc<3wz<>*ncfU*l#7^qd9yz2Tw@hnXbd`J`(xt$H-EGL_hXl1 z*XBri2yY=+(4-*z9Kosph)GZ_Ysh>gSd|m32!JSo%%BuWagTz`s%kM%{ZriIxcKOq zz3r2Sdji2v`m}Z%W`5WNKZ7#c5Yp8xCiu5ZH|>ro)01M&-)Y869DQY-?Qv|D0 zJo81oo+o8X@v|vGGE2a+9wxl^W(j!Pw`cR)3YaCJqI5mwQw7)II3YX`3gR= zANVlp^%aD_NBBQ@$;}d7>W&lqU{LGU&!yZWS917SFC8^8_45t9&L-=-m^!InGHeeX zAuYfsa>{;*;N<)d;zkgY6P^7$t2q1+8^f`LR}uaw!$X9>PQ}DTer!dI@~<7N!3mhJ zj}BVNmkndXj^;2LTYPJLGxcu~5Te!xo`^c|H0vM2){A3o8EnPl zFhAAw^ZR&BkKl=$!)bS#;6#ZA4`8(o_>p2uz8yyNUHk<5(PEQ4%tEJzndu-MhIbEs zU^EjiRI*Q-0*aNN`aUmT<(6Q_CzO=bWDA4xAGkmDg@lWzj_^`~)yKQ9=f{iL=B)m# z#y=5t9sidJ{*=alLoDz3zd}i3{P9h*=0>sFNvwODZxpX4iInN@3C{BMeUb2jObb}T z$CMN8ZTRkM9P_?7P-E{g@GaBuZ8{lttZ&dQHIJzxmb;1W$TG}9x79_9 zCBqziKTY@!$HmDidk@h73eGR~l_L003S6>|!~X*stP0^yo2g7byocV}m}@iTI)-bH z^Ag)jum~^DUgh7BHX4WZnUsC%{nRoizC8O15&TEoG9^swY^TSN9UE&Z`Fr&YD**6Mkm%YTDnr&a0UO=gh0+l%me7 z`w7mOS34+0omcw^R_E10g4KETKEdj|@^8qQR|t=rBLpIe{&+IMfUU)vbyZMWVeV-J z)5~9u!*rU8!VPezJ-hLyV|0_WmSG*kALV#LdA6eo{wJ^2MwB*~FzZp*Hr@JYfi~TC zlY5)Wo7~$pwaK+j*EYGd3Cn+#$`?kMjB1bIf47RCwGO`>AzQMxk9c6X59;e}Da8px zv79Oq4;A4jYQ#cLUpoD2+mCW$jjdS5eBrq3?Nzls-;Q(VJ<9h4&^908(zzUNFP7}L zaem)^7q72N;XVk{4f~5FHDLz{x<6B7{aH@wMf{}Br(ZODyU;d2Mj1}vL5d^Wu5HMv z8*@KRxwkp|UkLvj!N;5!JqW)-@OoYQUuzPKqlA(3c*17G`c63ek}85xIBC(>YtDwn zEdj^k(fL#Zpn~10-~i#zfOeAT$S~owTLNRH{%f8ftYk5NCBa9%vPtqy1fNjg2B#3f zla)G}$e7mZo;IEF8T{PwwDplE})b?#vZDSQoH9Q?)I5^804tj_|JSaC( zwi@YLc4PMac@QS_XguoARY>}C6_SHp6_O=c3dxczg=C4MkR0rykQ|b$kUU3GNDj?X zNS0@gaxEG* zO^DmZg|G(Z&vlej9-lE54GU`(yTaG$))CppNtk-hEh3dw_d6fsK=2N%p9AY>p7oQz zP(DfapMjNdfa_;q>H4&nuKZL!d|{eGt3jD&$7*LZJ%GvvI{>_|Hj;tba3*c?@B>Sv zFh|jFG-{gRDAZa16X9qQVpdid6^%=#6#B)b+-77`b=bD3XEBtvTWMyP=`D00D)qH3 zKK+XUh=;485gNns3`E-!5Q7kO+D-H6Q_7*+%5!hD69QnG)#2--5YX>FuR1()ZrDsl ztjYrV?7&2c^5Cy0|n-zKs18G7E>S%voBCd$F_@7hYP6 zU60DalrtVt_yAc0G4_m16bx5;p&AK-z=MG-jVO!#(Skmsks&Uv!v8wMM^F1 z{o3Bwn3<}-qq>4i-jA~HZ9!+pEH_Da-$&0t{LD`?ex~Nc&&>6Fw2f-Z`rra7@5p4Y zMNf`*B-!Sc$+o%HFW+5+8Omi3$PqXl7A&{nm3J;)XkW=EaIQf)*X-ek>gYX`ElBT> z6Paj>s)-+w0w2%YIjgl>Y|n-pxtGven6Z@P@MX90`^RZ!vYq~zsSNv*PPeyrn30(M zTi9%ePVq0Lj|*g+|DywG=E6dN=HFpgYSTnKDXRJ5w;~DKpubOm;@i=S|ZX(#p5beB+K6`bA|>F)1C_ z$BNF}8c=_)4;X{HI-B>x?#9bWmL$?B`>9O|N_q8) zvM8LVk1yllYxzyv$=XWXX+5}7{Zg$qWU>|3XHWL4YPi;10&zYWkqA~ zk_7UR)H}^z5Nw7@XkP(wXsnZ-OJxiin^(f#bO&_s>JmF3-CiWT$eqj3h*;b>w-xH@ zpdOm#EWfQ>0cG*D{S~%e!|NagEphAXgn4g=xSSV4>A5kOVYh*~vbRry#*Nm)kaCq( zuY=@9NU6~KjfTIej{Dp5>Ayst{!}b>I8eFKG=@QwJ-Cd=9i-{Uz6@3PSsjtHw7O@> zG=ubpniE(qogyDxg~!M{ij{NZH3#^?^dE~Dd#~m@#2(RFeFSCML96Q*G-J?lNZQS4 zm6+zDrZ{@8+R~TY2PyY>O@`ldhd(CxPiW!dC%81>3Re)EziZ1V%M7i}T1AtlRN0FK z(muSd%B{wR>#KUI@%$EE>c`5R6A3<2q?rjwH1KcnuWLo6YbejFMcfjb(fWZ&WGk5I zcn_H-vXha@0W##zA>h?na*lF#kReOaPYSakpDE|D3(K(^r||&M@Ml3ZoKM-|?qobb zEIdFgOxOJ-7Vb5Zuo8~RbJj5nFMi5V=^ruqPTUUCWP1~{#omr^WbH&-iyX(^j7m6s z6D)&T>+d|6)C|=Qt3?b#$<9osorK4A?82rBo+67wf;vPd^9ZiU#2vXa8inRWQj}cj zRAk?sXuO16#7;l|k3c!M$RPj6r(6CWw6 zFakZ_6981V+e^K%+wwroFti!t~ zTMiHITa+TP4l~lY6W*tWV^_M6?VjadC z-X~mP9mXb&O68e+EY@NFUXClQ!&t{RC`D!3UAR~JN@O$bVhfH?28TQr(PMjaCpqH&=Y`jfOqx2H zaCfHNg_NAjw9BG?Q?g*%#X(3BEHmw5EB@>G+$o3n9|)J2b`dY%$MGDd-5d6~Ptpeo z7vC-{XxqN*!NPX#CbTfqE*7wAf9~@}{PF$nc{pMmB;6afd3zQ;$yTteI zW$5nDlR2w!VD6kF5xo~jBD#De(j!+^A3|rl9*N`+ovo>%vvVV^yTyhpbWGwNRoga8 z(fe?U;u&Dm`b&ttrk;WrYV5WAlv##)3R2cL2CWx6`1*RXNZTUx9>3eg4?EtlHiT>o zjYgt6Gf=G&haYd!-G8M;6J|1LCZ+xFhkWTiFO$|U=UUMk)OiHMCXD(rM#V58o-o_Z z>Z%N0hpI2ln3>MbOlM|Nw+VG-BmLz!D~CR@4C*1yNm1=13ahl*$*?jG zLcyl8dt%{c5<(HEGKMxmC+<)AKMeI`N$?edwWdB8kt0vr(zv5qhj6$%E~(&^iZW?A z?DUq^O&+hc>vWC*a5p;TXMDh3(@1V(p?nE`%n4G4@N$B;Y7T`L;u{G6K;Zb)wmG<8 z>yGZ3XASW@5(`)u>z7HM97I7|5Wb4w7QY3La+GicuOF!*1$PUzu*;~ z`w@-&Ua=8jf>nl|2*LMzv^Jbo(3ugV^UstT9jbNfmj_8mz_hy#^Xi*D)(%&?Df~K5 zz<^#sGYzKb${I?00_{iA;-)G4dBXkJ$0}-G$uD>V-t%cN-`eLMg;n-R%4l{Z#DcHY zu;ZX<__^{8m!e<&*_hJG=2G2Jw~=_tEIWxbKK#y}qv5FyUizQNm- zb$ozr{t=D9hecYoEh6GAI|!D9ev~Mu{F3)2n@$K5@1?~5_Gm^)R$`vmGT4Ucukp&Z zVBkjmR>I$Tnd4hM*odjrxVNZ3LafCa_EGgB#y1OxMX<_dgh`VRk|5@hld$gH^pH1r ztcmHwoI67BDdkLU!eRFj#BVk>)$re#^e!c}S-tq$ zb(Dm?c$M1qut%m3dz;`BPV@(C=^qFd$5ja5*os+waQqUsplZwZM=B zG>;I_ypn+ClLR!6BcOS51T?P@&dxMaw*N;O)m?qvz5mfW{F$wUg(3Eex)tV zS=S*)Z4~Wh;lJAnx>oiQSP*DlVI^;@gAPsyZL=FOo!|{k#w5;H)DjJw)=s-RY_>&X zbDJ|qV3wS{nTjNCB)2BRDt&5jG8}=rFt-AbE1T_9CL$F0d`8P^)J4Bjr0AksX!yRA z9isqK-;`4AS%7HK+Z?TMyJwn|%I>LSaSil-#s&Ix96bl(8k|i#F%d+Djk~uP!@4@nS}Cr;35b) ze=l{%pst=nde9w1FLcLHQ7n>o!*bMpA&5%FuF@ryQ9UUUAqkefE9jwZ}Ublt9D=ie>-kaDDbzNjjvliLX ztVOm|S!9R0EV9EK6Z_KK<#u@AOzew$ICjw0V+X~=K3KrSzD!!HOQkYO^Q_fF#acbg zi81x(e}Dc)-m%weW1H*f z&44;HPa6|T^U(F&cFng(4;J%6o}?z$!IWl*a3A>{FgJ`OIwQk-Z5n8}Ngqcp*1wMQ zqt-C{T$Eeumz$9}MyjiyyWW-Aot?mQ{>G{;V;@OjU74h5%C(Kp zt}WcgD}#;UynQ~}uaWLcpHm6v*;Ak2a<=P3ea63hA59^Cr7NZo%|GUEfhpEoU_4nB zyfCYZ&LGz!w~M0&EI;n*b`U1GFAfxV<7F8aKM72jPYJST1=EgaTwCyDrk^d?+MTBb z2fAHafC(Q`!kKv}U}t8YbnVQNll|xnKDX3Ax;!`L7ji03FPl&08RzFtxi;TK4A$8hLm-XRK zyIhnPC>5-8_PKZ8d+vSby!XJ^cAO;Pao^tOo_o&T`<%Pa-~KMM1oJN_O0fQdq68KA z=5&{!3CWjQf|uT}l$YRHWOz%^bwMhFJr^!h2Kz25WN_l5LrnpRo-}4=h2A`Y?&?z!D^=|8!W|F&C>= zWoC8xXP-dUB(X{%>zT-L%eoH9ZdtEGvRl?2NWL^#mn2oilJ$=;iAvTheO1FH>jU&N z%Nk@vuduRl9fpDW&P0xI^a!+5k96_q5r@A)MyIFk>_moeKm?w>{|ccB)^QKOzxfd9 z!Vx1#pPp*bh2tR{lo9E!qet-M2UAs+v^Q01Nk>wpmh?`l)RHcyUX~>t7#-7+veRN% z(i>^RW=VNtho#ka7%ExsH>9$D&5+9aeM2g1;=e3e5BOusx*!lk)`NjzlXcOR!y@ag z6I8N3I6*4wHz!DC{m}%etm##kCF}pVDyFQ9uZ|(>Utc|JvM#xHSY-VnIwcXZzWReo znXHSD?3VSC4W6IApzTqROscoG7*H zwvpX+Y4$evxt9Gnt);<0d0=vHJn$HL*^yOAs&3+JV}(J>cv zIpE>%Al)73UjupYtb+JkhD({&u_9;eHfEpxiKql_H&p?4_YPqP*FcPd+I zf2Xsh_V;nN%KoyaOYN_Iy4wDBOjp?7!Rb=_dwaUV{yv^Aw?BW5-2RGksP z6Y1XGZay-+z1{j5LXm{tZVS>qz1_hXku3ny{|4!v-Y#RNs<*418CRQmYo@~f&drqC zUqYeO{!$86_E%CUwZA(G)%N#%p~C)-7E0~!!$O7qr4-5SZ*q~`{uUI;?XRIIF8doS zlH1>hMN<1qnWeJ7qFHkLTRux+f9@bL95dFh_2G zo9D>wZ|j`6>@Q`m-2SefE49CpxhnfxH&siOaD zDwXzsUn!OLf32me{;#)G+W);=s_y@2nWF#8DU1Rs})ht#qE1ND%}LDtdaJOey>= zTWN8GpjeRW9Ha|D&|o@hInrH0&>*Mn$Z?GmpRSBFR-hk1x@Vkt9O?3LV%mI*9dL~k zry^NCPF#m&-Dlc*VlVf&u-;g$mJDFO-UQZC#|&@6JVX{l2hB zuHQEnsq~v(C)4kQI=Oyl*2(o-R~J>kkJm}{ySpx`eoxgY^qaa^s^2M#W9aw$ixv7k zx>%~;!NpSj{(f;B`t4d0TfaF=Rr+mOD%bDkrE>jlU#imY@uf2TzP(hg-=U>){ifAN z)o*RRRKM%$qw058y+Xgo>ZSTURUbpYKR>4!+MPj$TfYf^jEKy_Cnb>_O}{T-qA2=p zI4>LT@GT0+@#wb~=^p(aM0$jN*I%fV=(p`cykkLE3(^8ltw}wGE2)`*?%2{qAar(SE0XIdbd- z^!Z2^;`ai571CYtd!Yn7kt2+rxC@VTXJ7~!o&K^{$lMP_YV`QMJa*PfxyShHmGT;$ zUn#HAxJFft>Kf%W+R`Yk(esV68trY2yGCtI@{(_Bl9zmUld9zJHpxpq;Z|wM=iDkQ z`TSesE_q6`To+l*@*2%+me;7cSyiK_n&mZmtyx;5kD6sQI^P_3jSk-?uhB1Wlh^3n zZSoqWuTs^hc9pzF9jl}@`tB-Ojrvx_U84=F>~fPue2gQ=^?okEqd!i;?qp z+;{vWVrmjH%KpUr8s*C}NR3^iYd?*Aqx1fIwOmJgR?Btt(rT5C64uCdRJ2B_qlPsy z9j#dtw~nUVF4xg~qzmSe%spUw>_`8?Qrzl zNw{YC=F$OFi*?_alKu}8*@F^{oF z#ElUmrCG<=b^92*?he87*9!tO68R;L^X|HH-d%UjyX)@r?z-~4yB;lWj6M=K=JSjj zBMlL=9A5>7R@1|NdV72Le?8VuFaKwMb$)vDPFV+Ek6<)6GG&~PtOX=w*Vp_@`8w0M zgsh4UJPGF`^PR-Q|Ft;k*C_X94(rz&++T~`UuQ(+Mo&CL5G?;nD*R>vyr21omB90P zgYa2wxH2(snFgPYz4T;AfBKuWgFmm@r@xnQP){L~HQJ9r;b(kwV=x#TWd9D)8uq)0 z4dy#(3;TDHM-Ru}lb-KD>9MXl*%kbrw0}EY_x0G{9tk&!L5}p79_mWe^Z^@3?qLcp z(S|5tkN@AeL?fY&;{m+6^WM8zCmb#2u?r_yj9_fu>Wy^lBCZ=YugeqZIB~=e`yBi* zc%YcpbGH?)x&5v??fk84fGqMkk&?e4E?qP%o0yT3M{sT8#ZY z9V|J+9V|Hmf+c_T_OGqGZ-W&!8~ZXIEy*v&dCyP)=v;c_o1OM8tLd__+_SVl7a zAv(~xk=)0@WFZJKdCT%YemK6bA)3-2v&uN$8`l@O3k5E( z*E9~g_wfky!iYa|>HY`?RAios{R+4rdiJ&r_uU&0{sKfeziWfXD{&J?@E2703j%81 zUlWZX0z^-bj?f^2F^&>p6i2!77e__l?Tr%g_C|>S4+83g%Pop5aEiw*8s&0}MvY)a zj9^84W~>M^GGpLUJR^}IIyOlWUXvV1!V48~`yK3cEfO}}^OZYfzR+c(NIdn774qmw zz=B9a^2_D(O!7|{nIiS{9%rHNpp!V|2hMhu4l~36kT)!|)}DR|#V6wWvwnPzm8$>V8blj3g`ZDOB!)?YBBFQFa!jO!do z!(0bxu)(=p>RfL2w})tHZcDHwSQa8xMzA+TYldhi$@P;;fAER-c}i!Fbow|S-9o=d z76cCUen7kFAi2fQ{(5N!ndz@-4+ZHHTN;A{19U(JNAYNw_F_H>4nU%rH`qiXeCQNF z=y8mt13`l?tM*CUzG0@mc1MRfm zdXhelc7#Ht$RGuN{u$^ed4ZPaXr~!7(#L~o(rQ5pHMFrk+(I+YmbRaDGNPR=&yi+7 z-SUfp(!3!o5#WwA`-9<4tfXi*+yE0<3sZ7wuX8t~0H{lo z@r37j90ZdZjqGuoXfCZG<^GnlrM;mL{Vm%h~vd3Hh> zhe9+r*ocy$ebAany|F38zd!2(ZtoCjHuN#H>#Thmq?6SXOUJ`u(vk!raOFT#d1qr; zu%Cu#m^RU}K^op7LZ=-620*9mOLRe}lwqfGr3?mTv%uwDUpa?CIXAM3J+g|eTE%wW z*CPwrf727FUxZoDk%jDGUC8$M+R}CHXMbQ%q0x%NdFTF!6M3CAdEqe4EvIGlo*Hr8 zZ!|3XeH~vr7e~P>89T*a#00Ozx zS+lr+K%&o)MF4>ab7V>&kWmS8AP`}4OuH;_QYmPMdOA$IEO1geScnoAMG+e`8l0EcAa>Mw;q&7p}ObRsIwUc^e zQzsi~)|3s^HUtpt?o+H^@;Xq4km0OAqZd;CxsvYhBU@~5dq;$GRujMbJt8{y1xbY?>yL|BU2v?GTx4^aoAeg8_K|AETc?yqU9Z7j~$#`8J_wIbA9|nir+aS>Q_)5sfX>G-m03JTPze8e)=n4Kc}$ z$>)KA6S3rzJj2BC)>f-4h2_L#dpR-Dz11qwv$~ihD8$sjmsD=*aN)~+^s?o2exl)t zKp>w-^0x?_%5HHuQ+{S~zD=|(8y$Kv(svMTu-~CCNBYw&z3_y!NdH%&4LB=OI$si|dxCqqsNG%bm4onTgPiungM{u)`pquTZ@4^xs>~&A< zGuNwNQ7MVsz@dAN_-O7~+7sl9Jpaz!a()A@l`OL7torRMe$fYOG@)*DMQ0MM=#UwH zIKnq2&_fM-@lsDF^EBquQlpn-r(4_8^eOaUH|*tSe+35FV1zI^m0g`;9=E;FG$mkP z-tABqIV(~5#wA?(=@Q|KUFa*w-5Om-gRt5(d%T@u-uP4IN-7A5i%~nlFZoFV*r!LB zC_H2zAN{bZ(p&9}T8-yOk$?MpeASCDdU2uSBH|-7m-h4r``P17`DU3gOS71mkJ3hJ zkiq~B(-yjs=7vx$kI{1>d%4kEPUEm|WHPM0v4IjS7G?ovB2x!^W*Mw0_-Srf51b)W z{5@ozpJZ7wSZOcTWrAvHCjVlBz%3I&;1(v>%iQA=aM$8IBf;6ANER?Adv39RA2qsz zHD-Bv+vsyL;#7_jP_?2E`3N(Az9i<+QJC>*DQH5`|;E3s9`_uKL1hsy2R*r zuKo7qI-|c02ZZT9eak~#i9Y?JeZGR@nC-^F-!EL~2D`Ck_rYcY9%2pxJsd`IkEXq9 zit1aM32y-SS6Kr7Rqqju38C@9>mhnK$Un_KgpY&EPZO|(^EiV@{v<&&_kdbfMaDxC z2!oin)Jk$d7jYV@k^D@O79`nN!Qy(0JVY2d4arlNTjcM%$RATbd-7DI#!P%{Oe_Gj? zfEz7vFVCR`UI_~TaAO|pcO1Ztc?KMS;+YA68xW^u;B_l2CqyWaUq-SMB9u!V$pb_S zJLGqe{3rH0=9>#l*vm%#`4jlm@8|Dk6H%3}b?$9FZr%HaZbvNu`c|ax(jjU=OFQkc zJIm4mBKlE3XD&qVTfp_%kxL*Xz~%@*so(CU3ieiO;(AlT|?Eax^X=Z~PVdW7342=}@- zt%UEw6NT8LOOOGPBbv-@Ts(Hnn}UH`bdE%f^#9TAXs8fR=>*b+Sf!Bu;+yj34ZP~N zEZ$4Rj_?ZfCZwO&U6GL5kp8;_jpdVN%_ojwtbNGZ1Dnx&nA2e-?`3+-WRiY@wa@`F zDXq|X+WHgN6s$DcAq~n1be^@^68;5yCYVDgA$bVe&;*oR+DWt>SA?T1B)`Lh@;(Px zyv!V(a_qqbALvjHrpgvaO+(0pun*iJq9KQyJ!o+ugp-TQqXZ+@iQoj!dw5W=@kw-& z!`X$Le@N7h(kGZ%ZKpk3n4`yDzxu`#`skHr3j*2nt+9mQMDM+E49veiBwK$~%@%%< zxABaebcpMu11`afM=82e;oR~wa*A?f6VPWq`Z%&&``MOj{lX-h-#y9ZkA4O* zV76t@gX#q0wqICpva6Wa1HS|8_b`kitv~-j*}$tX2NW`Y!u&UM2$n*_XT#>t+0a?W zf$vs=aQHpW2ss`yUyr3PTb}U)VSWQ<%5n(3XI%n03>k*PW+F^#vd&r0Wc;%sD~IrV z;#CN8gnWWjXbCMyUm|48?vz1 zd6fZCG3NWt%PN0Z&nHzH`Lpg1=~s~~n4uyC>2w__9K#0Zg=us>DI87j(H|g%8ogJ) zAO8EQz8U^&)i<&K^klkLZ-)yucF;G%#TD$L4K7mI#n<6tG#geN(#8*vsTs`a;N@YC z(jq9(LWA7yXZ~dkl(~S^XsqBbC2Hh#Ex^+;O)|Hs#&G@B!Jj^f)M@0O5(6wnF8j{z zH-PdhEf6&Cf@FT=O$1)Io)P4-Vb>@4R&w$>7dKb@kNM>f`JiYsnQktyclh+w6G8LG z%!_Bt_vt&&U}CIeA|S_Lo+n@?gePUflm0~)D8-QQOXSBsjSLVdX}^#wtJSq+nnr#c zm1F0{>v32UDC2>0M&lDc$DEpx?9o`6|4w+8yg1s=+-*MZ$mEivy-91C!pYPCXnY4~ z{GUyYf5+7LlcvU>LXCH!#=B7CU8wP{|7Gvme&aZ=`4)99EXSJ5a%Ogy)Pssf{R4V=ubTozU*e+eLx6-X`c@!$ z3s4{k`W&F|3XsS4ob!Ei-I?JI<)(hHAyedVcILaB%kTWoIiJEE|H~U5e)Dzs<_y32 z27L4S#(%!@8++L|e}gZBSN(47n=fkfUu}Hvm79tGZ;7K%K1Ib^{c~sKD})f=$8S@A zUR}8oUcViFy}fdO?i=`@+ba*eO}g+Cl9glneq#`_)c=}#+MRf$IkUNw7|-oj3vNh1 zB=wQiUlm*_df=T~`D+zF|JCeUQoB+9+t<>ISv0|0ksaR{gstdL3-)kzyty;DRprN< za_zOtIQg-r#=wYecgngMQ-&Ujy6u%lo^v=e2jv zAJ;Bx|6Kbg{7O8VU;6=A&Np89yz%Q75uFT6MU>u;zEhLImHz(yPdDDY`C{XKd<@dY zAKj{b7cd4G=47ezKYCcJ{EOcXDRhI1l{;Sr%U=b{m4oF}T=G?5{8eE5{~s8C6%GGi zM#H%=?w>w>pU1er_e$;c=@ekbV@ikhYM+OHKL5_|MSO{)ZHL+EIUhpY0tTNmE9(I&{PUT8?*4T^sxm?1GCH-q9E1 zd#Vc#kv`Gid;Cy29?=h@b7zE~5Nd=b_rdX_`u^K**U6REn+>_s=r&vRI|E&-e`_4@ z>-SpQZ`SYG!Q9dBPvHfi%kbmaQ%~=M2ff#A*Y8c?&s3YhS8X}=jC-y6JrKG3U{7V4 z59DNUpbXe>v^RP*=t*>0G)05uVmDtC}!(c0XLeI8`!8Yr` z@&#sa(X*9d(6+#@;&)^CqR0*QkeQCJdjabW4&ll$kT;_dm>|_?@Zi=y{9-FLG_u1( zSb`Db@0Gieg%n1y2XBGvt<>l6y$U>QW%|9LEC$h`qBBMEblY7diqCdXt#`rl`Ll`l zL>hbm%lPaAEbn@N8;Ea~EO_ifVngPiy33i1j*NXg3^ondgFV#f1u*0R4LJLP-muA( zHVU93u@AxYi%~K%Z}c?Xli1t==cP3zW|)=^9)un07b&-D`U4$4NJGQLIn3;XYAFL- zI%1Fd2YVw0@7R3E3y9^m3SK_YnJ6e$`rAkD6rbj4a$}&|1O1G|9X`|9LmS`g%gqbb zpTI1@VEKX4_RXidvXBCoao$;U()50w*GKIvKbYiaQQM+dNiX-CNn%LQ-iOu1-l?i}3Dt`ykJ*HwH| zJm1Z!9^hOR+D}9n2&8avbVrk5VoOglmL?blaUIP&o56!-Y;wW;88{t~p#?adc&r&E zi!QG!TD`hHZNfM$-3W@*McTA1&0MemC#0E%5Ifo;p#`)A(Z)2}E9*xt479~pI*i%l zbEUf0w?XSIcc}xoa_5dlqg_$bAv_WH9^V0Dox;22hJ>Gl3EGJJ;l1+KI8{v;u&wql+uHoy)*vhI=v)dw!a>u2+ThL}HUDQkoHen(f=v$1vB{2@-= zwC8rIvMt9m#kR>@%t6nq<4KdDaJVj{+td6ILjZIiU zMh0o@<6vwAZLw6K>aCO$_a;Y^Mr<+N8Q+6C0(5E%5Cdgk4X_6yrRO;_m*%KLmOl1_ zRui^p3ZNgHg9>I8%&w!_GwEnBLNBI(;lka?dq_%#v&JRYBghR+7q{TfHkmDf_A`$g zuOUP2zJ_;;wy;nm<9JB~iIsg>vjwl=ZbEnnv1!WF>O*dVgu@ns!Gf?7e%*{;$X}7L zxl+NegvXJ=KBS^Sxt02{*#Pf$K2F>d2xEI4wG6ESeBRJq1EocsU644*UDWj}R1RP@ zm}$oWW4MGE5f)K*rl1j(N7FV;Flmw7s_@AUExgh{w1=AvVZQ5KFz`b#ma%#^H$7bf z<@CUTfjE0p_+KBBeSD&`a4z6{Eb6-8Q-qn_tpmu>@79g6Eez z4hz(z*aCJjkb*Iy?++CLQQgaM95T=`!GW9kw)G{*s%IQ z1_<^5FeOb8>{{SjmV{_{eJpvm&KC^hh}{xQOyBIrtB;?$)~mptx~_Jig1`%x*7EhB zXRq4sBoK_OX8z4x9x7hpmQHL!w}9s1f{9zOxm4I^XRmI>MRL_5jNAP%p3`&QDxtD@&)rIz; zNrr{<_vHbdmI&xHi9I+vd2jECF@HW`Jyw9@JHaWuO9}U`n{8%$?cyzok!rSfW@dpjKKjm9J-5Q_k+BM-FjEdl0k>dhE79=(sE^$GY0$l^N#WpY% zEb1&EyM=)cSd_i}Lxxs`_yx9qay*h2OJ5y3MwxEJutPsX<1WJPYj|QV4`rUXI;14; zF5sEqM(AM#?k&?cgH^#Uam=KQ(VZZJJp6_yyJ{eH!x*z%NrX9|Xa&TK*DqSQl9663$Que)mIUnuNiY8D22EdO(q&8?xKba0;UP6-~^0FWq)7E1Bu&Kf188E!$*f( zUi|g~B0&7MjBuzEpX&#L;wS~OGsOf2jCBUkf`KYgvXin5%iVW<6L&zt5Q+e*H&z9w zmExzOSO#zfF?DMIO+d204T|pCj#P*|9Bk?w#z{obI)EzQ6lAaEaxF1AN55UUg+o@2 z|7BEGYBDJF*(U=0rj{(dz&36OpjT%N1n1}>g2NGYD3P z#&DwlR!x(|z~TLzNO zc#;AblSj^3w5V(^&e^Z>K5~Nhi5=M{pkW&W6nz)rW@e<{O zIfKeIS#?_>bHK!o@o|wI5)d~hXqCHD-3bk!&rV%1-~FwRATY(lk;*JR!ZMqCxVa^* z1E(ZehE#phUHlOUET-T5yLH)$nV-Z4q;NvBRgnMa*++J(sT|qeW*fe?wm0!BfF!%w>29{ST3xvV zKgf8c-P~?(cQ>2ccm?lkc3a);=2o}ez+3QYyU}cJwi=rqe5AZZU*u-H)oONHin6Jh zzB=|a6humq+r%KwU^dE(r2vz%q&-&T|%wEKq($qt!&fwCjR*->FzyomL# z8o?$7H=igNZc}cYGNLnznGF*utY-)(RM!R%s_&ob>Jz^-c^n&f%Iypp_*EpVqNt&Y zrQ8;lQXnfltqwyFcoXuLS8%pC8;qn}$D--@rZcs4DN~{#Wo;|+@K0Tb)BfEy_g`K6 z0`WB`9I9vGVmX2d5!f`O!K0(YOfq3omNk&$DxNZl(y|hj6r#lV*9h!6fgNQ(wlF!T z2XoKi=EkgU-*{!gVAw$iutZ+qi?WbJhQ*;J*ON3a{Ssk}$fA;JZehd&3!C~QY$636D5^dw# zxi*7oIsovQ!-y85-ZcYYyisIh*ASSZd_m>9*JPQ~03xD3_^PnTPCuW4FLeUB0TzGC z{4rL7VT}o<*;(5ET_=|w*S21j-H&Tml657iL_a~Se9P9f&R|%8CL8P;|~6G3c<98gtCjyumq>Ycyb>mIwF#Q5<@~o zxT!8lm~j;-%D`v25GHa>h$aw7oXuT|E|W#bsk%TAUT!M`%%)-vAu6dJ1IW?9N{FnY z^sMKY)kzla)8FeLhLW$UN?Z6#%ElPDv_ZKDB+G5G<;@k5`|2`QF68SJR^{@PV}j#H z0pt}aR0EUtMscp~gljPwVpx|bi(DuT3G_Q;u#*zZ*tIDqIFW3u(K~hLKKNcA%bc$< z$E~Q4C`X+5G%I2!k5^eeTUEs(6^+*C8eCtrJV|J~Q=WtpTf~;?>4ZFPBGEewGf$OP zv6-)quzsbbQdFh%aQJ{YpfLEOorZhH*6eg#g-IkzyTA_&CW(BM1>*#4B0wMI%2)!p)wdrsbb8?kA)VvY(062 z09{qbeo&ep-ZFir+q2+;j|bxeSj0szv8ZK{93+Itm=i$H9=0zSc0l!;q-@u-0YB$~{Vh`)MR1it0+yTt;Oo7=oa;Hjw%E)73e+B6IY{>D-ifYCBCm z_i{OS7*KSZt56*)g;{gLyUCzF|KlZ)rkxD*3l}6)5_~0H9fsb`@^$V+A^-|J)+V82 zExLPsABsUgvM^7~8SDq^`5(qOIxkV&5{0f+)i+fQ@sLdEDp%YHxnc~!PCZE_OZ&5=FhGz}ebO*5_L=@dQALxy#_(kw7qK1 zV5Yv(4^dqry`t%=g%i0WikIG$f>YDSnED#@RTl&WR;DEOig0BoB;q4r2`17|Ef)&_ zxv2>$7BXILSP+_P8@u2gr@<*!-4__oX0o@A6F6Y!kq=TAEKC4HNI94^Sh$YO&B8Tz{h2*PeI?1;TjnJKwEtLrPL~>6V(zBDRqGT9n&uFS2XZ@Yz-> z#ty07mn&-)?jw}BM4~?3AulDggr}LP4`J=xstqt#;4#czL(B?+Dkh&qrrw_T9@gpm z>r9FG82>{oA51As(=P3LsD=T%*+@8SCBCX#WIklpevXBRzTD=0*@GbUEa@rECtf zxK)K(8P{Df=Zfgj3Ok5qNkh+lxu|laWQR0#oQF}1QCYE5n+SO=w&aJ=ANHfB z4Qr>cxu&O~smd^|JVO|_*mpA7TbSAPU~0t=)H7KRP#B)~=r5|LP!s)p1xbNH@3=R@ z(`gW`8#8Q>6P0k)9Bs01Dm=YGIT)#y+)VZY!W)cPgZVSnih{jSgDJ)gqAi6J;nZtI z;!i;X?6wmu!!8~|7{q@~J$F9Ce-W#CK}xpMX_}mOQT=c-p@)&HLF$K6xzos{{gUNI zV3fxYBZUX=tXXu;Bb=}kB%PGzh3V)Cu}5Vzdd%K`bi6<6og6c2g-Xm(N;d$|DHX&C zfR!sY@_C)P6Q2n3XDR=KZ+nt>VwAKgE3$&cq*a6q%n6g?ap`Yd_Dg*fE!a&(N>^lr z|EeSHfV@k`ZfLquM=wg@Fk-OuPZD=rsha2lW|C^R!_&IL*-0s4NGkB>*@Fhe$rg8` zBQ9bNq&oi|l3%dyNKkWA7!v_S)9Da<3`^LL4`9MY<9eR!Suxp_8*jlPkLOmvd>x_= zTK#55{^jkQ69+I9>&xBfCgHT~E1+Dm*W>UL>4+VljC$`s79(#a50q*$8D@AqwjZ-gdPaKuQL-W!gl1E)F@+%R+$7z!&eG-=# z6lFKF2?F-9v$XpVHBTMa)AK4{qGAJ{vZ=gltt4wu&{W@7ZM8%p(S?HaH^8Il6=&LKp>0citqhCJLxZ^6x7h@cc9riFXa;j5flx zcsA&iY2#qb`yv)mMy-15>soIUW%RUF-CaE5D{eIgoy30vS?uI2xnDz$pwz2Oirh+3 z^>`u#m=!AY02AQ4nX0R;uw?XFxranDw_i<$ z?B^sw@@D~R5|@snZn`grlD83=VZmwr=WOc^9x%&HqxWs!I|ewB zd-fxMl!F;k0#VX!Au_wXN^YCjfjyR9){?Ubqkf~R1r3aO6Se^TF)p$vRgBd$1VS&D z$ttYTTqzJ1ku~O_=s>h$xDwW?$DJfMas&kG%<59Q16j>2or@ZqOUqpP5b8cTu9_}6y z{-v9{mz#TJ<`pDx{{Ylt)ZGIZbPs?56COeg5NfFd;L~=Po!?@jBhJOrIvmg#wXOg1cclmJYF~fCa4DyC6(rB zP<hg`|dZ?_C`gC+ozoRUt8q| zjGA0PT|7SUYWvW||MuYdpH|BA`L6%$^gisw|-3Gzv25hLC0{9ZUCHKE;;Ssg^TeO&Li6!GV$@w>uwhwH05XB}x~ zCWF!3mLM^8(F0kjX6j+-)xWd=Vaua|h~zB2NKi0ElMKo6M(t%n%UU#i7BFTPk7qS2)QMbhDheXy1; z(bwIE^1Y!9w5R02qn-yo3-ErWSG%o5pr#3Jv`I-yc-O2;KYH|| zPd^6qV^|}iq~sJSQQ8+Xat?Q8F%}v}&!N^+K~M?GReMSvGF~F#(FjpeKx|9YkCkx{ zu3P{YqJD%t5#3QBX5a5AXQ-&y0nmB@_`>k*sReB*k0u~?33htmCC5HkEd>&0`UJ^o zz||90L>Iu{Ih>Nhbi_4vLPsLxdDrGxHwN7PrD{@=?*%cx< zQhAL$b*WUl;rh`=LP8ybccq_EZvs&i-VoJ+EDt%^tA}(ZWIo44_lZr#XHluZk9yt^ zx&Yz&fVLoNAjfd0{Cmow{@*NCAH?QMy9Xk$nVxIV?JDRmp&3kK-vMaeJudb>-mLFq&Nm8Fr$g0!C6!htGw zH0{~cCshPb8L+SHbkG2_Avq(xeE)95qBnnh^=5pTTwlGqxkqjk=Un-NSS4 z&`fEy5LXG#1ztOO0m>o@+$`&YAd!7UL}CIDLdpcOaxy4OtTS9yKy!cHeQCoY_7Z3~ zFk2X!N|Av>QTdIkr47nrUeipd>InfEq+h6z;Ldp3fSEr%B>DBnUO{)d9*sYB2ZJB85Af+z*Na=t(% z;F^HC-95E7Uv>^*l#!ZoyIy8^74qHoUKA~;7GM!;M=dwBjJ7oML3NF1cM!SO2}ybZ z{GfR>bEXoG)nZj0>_GupR|N&4=4FswPDg)(L`ktm3xmau8qSikE!4b`hhq&E^_iyk zD-;mx`+II}R=~Al3*phMv4_bk3JGvS9!PB?j zGmM!D&o{A1@1nWzuut0Hs)O(;NnOkF72YnB|e^Ex?y)&Z^lEc8wE*%$CvK7}ms0bAP zdI6(g0L4?UFj0VWkL&~LN=6VW+b?&E&2llvVozc>C72dtN6>o$hLGs=L;vPk(nr zx;}ziG5=d>8)CE0)L+&-RB||ka!JqnEp4<&TRYH}k8i2@ozmTcUFyF~-o2+GY-zk= zNQ73CywRPH6;0w(3&fKc#H^+zxDrbbIh~kB$4Fgy)2FH6eZ%R3d^y%QoA*BP>PO*;D8ED=iedi z3{dpLFN|@8b<2eGt3{sDl`d;O8CVtMt%4H>>QX2mVe5)y1yZc&BNoSVoRhVkv86=P zyuV-W^T$N#*J#PcuB*P@SusNR_NzC49KTBuZv3sH39Rq_GM{qes624M-zO>=6PYQ_ zvL;nHWK2Iy6P96^q)#+j&2$Xmcd{B?c?dJC&y~Zl=Q_}2N^w<%e!>jiVtE}uQI2zsjsP;F|Vm7<|X31(>C};+BJz6~!VrE!oDnruv<{O0QB+KRY zbd$--d5e{S0*(#<<&&e@C4wDLTa48r-f*2|Q(e~kI=vSzw)6&g|rz~>OPYMbw{837NsRy+X=g$J>1 zisqrvb>K|G3#{p!$lG(giEQbI^br8BQGb*eOwq+wruIx~DLvEzG{(;$*ceOYGnSEQ0h*X*E1eAjaL3#@!ndUyc$vUI) zd$JHLSGH@r(i*L+#3=j2XgPumT!RDD#?#*_$%pdXJ%Bfa@-IRM204nhf{#bG!;9*w+vYAGbx zAv-IR2;WF3-fF4~_i%9CB^TNtUjTJF)agYy2V|j61#(}k6K4nJy)FW`e50V-(bcdZ zD01>-ss~Q9Lg=z*5vzxNJLgLSXf6$UBC&+;U}q-dDfXTOaSOGjwEp^@qKrn@PSup4 zcq+MGOeAcVPzS4*v+ACH@D4%|Le~-%r<2*!1VEgj1b@C+PapX~$rXI67z1+qfuqXU zYW58?Cz4sdt22?FU1zh7g;)krZB}`)8aLj+)7LJK4nuQx8AVoXmYml(be=O zy+NRY*&_c7gzTdew4S23onsj$BPpc_`OpGVV=2*hx~v!VTdmN>uwg}50r5@O=z^&y ze@)jxRf|r#1}nbUC=kYGJo^>Y-fefXNkNU_JSF-54!hp6JEIx;t!rXjY6=26p!)e+ za9gy?1gNuaIZ=Fd#0rHhu$02uGGmCjqca@_g`Hf1(-o7SH0e+V58zsaVM?Au;F#4B zLiB05oI_41jm|)~i`$9F(W&h9RoXEa3dUIuVdq&+GmDWS@MdR~-?I25c-w1pEj@Y% zl&6qIDKRZ-h&i3#bs6~2J=H^NaZp_ojPLz5@V30Bhwa27mKg#_v08CLk%%SrHl5TH zQx0iC^@HJ-+dOra5QEugX%WzA80RuvTP!W;f^6+_{cy^xRe(mS1GVeX-i)YDJ&jv= zo>t9#%1{w#oCghK%>H1$p+zng(dq#^13{$BzE)4?Y+l1G-^5nc8#mhK(UR(mXJq%W zqlZpExS#P;ospj?j67d1rgQCHd2Fv5^+Y)@I%wyR&kSte34f#Tu)Onuq|Nkh_ga0JMfG4 zpl5rY;A-zUyh#rJ3y@60wikH_`o={LRI77&nE!9~XQ^_S7Id0W^Gzc#>Es@;0n=Bj&$~wsyPUHm+0dh_ zROB<*iS@^o-D#jwNDkG}bu#~fT zY}pb}tgfb?Sm}&n(B%A@gH}T!-$k-?We}*cLSm|+8hg6v5e=J6P%4lM*hPbDdN*eC zh8#@M=ENP|J!O(&RG!FF-2|$*kI?@T!oom`lrYH*M7Nu0Ow-@Khou%lDxxbmtoRG5 zO|7e3Jjt1;goFhG#`IJ2>TbQYQDvGteKjyR6V5%V%Pzum7;wC?UISfR&`MsGyhQhD)BPfgpX2RWsHsSh06|T)`BfAtzqwQ|r-smflcS*dPxeDs9RO z2V)GI=J+JngsMJ%nB4&e$74zUS`3%>bTh#?3Aq|fg7Gz&32qzVmYWE)+=$#lgbYSG z7}Eq=Afzy+V7Mu??1I}-(r|!VgM9u>9tus7E;qNZGHwd%j>dKHApLm^{nH@04hH(d z4lqsR1Ib5@$LN~LMv-WNiO-OjB~Vx;wx;U3GDf3TYNseux^cu>1(bE3X~4&l>tr38 zI7SWS!qC$ZCM}JSD;{r`WE))A}v_koBV9E-XLs8xl_`UR;}9@!xU?rd3;j0 z6v0!DPI>Mx=Z=_@3E}w&BFg&=R?qLI`^esm-&0=oLx-Vi){(GkCQ-d7=(#fFYj9UD z7uf@{a2mZsa!AGe4BxF)L}JGRIK z+ZCa?n;+9e-KxZqkf9W>6ZPeXHgb80@Sa=Fk5d)`j&C}MQ~HNn(c(CsttFX2`&m{M zG6*YAYi2xuf_MF5`Zn zkkg7}Ednl-abd4C&#j}Ztp5M-`Q}KgWqk<>eo|T%L=_#SxSw&0m_<%pq8L@as*yHk ztydG*u$5hjMmIV3gw`9J)hTsm5IF3y)TYB$30kaOKbR=p)jWt~bbbB)IyksBxMS_1 z6@Nm!GydHR&P;d`r4~m zX;qhcOPqRObF;=oED{1}$eZ#MjTB|*Q!ZLvMHD4U z=1s~2`Z1@eBKHMlGLg@x5%s77k6{PFYp5OfL~Gnor=rOxZA8W!do4n| zI@v4!!1MN{+J zHiSRUa>aD#Fo(^Zv9-F$d{KpRTt(DIAP_oLw%;NAcxL11#*?G3>AMy!B?D?nY!Pw+ z9kG5Z7uMv>!cBUU+h{+rwBWkPOl3}biQJSAqysa0C4&HM_t#MScWe9P*q z%@}kvA8MFds490-N39nZm7WVVkd|e&Mq*Z)up%!9v*J|BEE(fhz4v>o2`52?{5tKT z_N-zW{95XV6@Sd(Du`WhAHU8TVh3~xi|wH!bCfZ=S5N)Sky=bv=S9$|Ekv6_YG}EK z{$4}R2O5ZH@hx=8=77Kz#V+^8hDHc!V~^lu%U2@L72ANMfA{A7kFVYkrDlJZj#Dd~ zdd3T>MjmnU49Sw;Qop3dXCX z@RL1QZxK{JofB=2b&-61MrM)$Ix)pFtY;hzEnJhsrU+4t&V(99!ue2VT@8a%tPb_E z#;>Gzwa=+kIHf0*ysWi-WO7b@A06Nq>*YRM)jUCgnQh>0%+0*kw;YP%@|NTL)p0Fy z?GprAPr7;)Sr%P&Q>u3~{>y!<{Ks08iIx@SD3NdBvCxZ;NAKN`bhUYnL?xgl*wXbV zcKn2;PS*{gYMzC7r`}o#iaQPMn-W8|8F*;z(ndU2l3AEKRY6VaA1e_X)S0b6SMZQ^MBN!Pz z74D6UujmkE9jiB|L5=7nW$d&p-on*iK`V3CekSf~UGDHYf|s8(=&L|J1PrYL0bAnL z^wE&?b()n3u`p7OD{r7yHefXNe-uS{H#z9XnZs>!Mhpi5cHClNd63TrxLQ|1BcxI3 z3m)I%GE7UO@D>pfQxFPBC^84bPKbQkhuT2m@-DR8)|f4gur5@KcblCGy|bic?)&$F zVoA?I7$jEJ-EV1O`dVKue^FgjXH|kCR(KCnj$l|AP_hDb2Cisx#!@Q~%$0*u{%kik zYHSHGF7rTBLV1q!A}@;$SANxCt7xgFkwZAU3w`?A+O-EfhIccDzUqo52`3n8^*wnB zhe%Sk>V}$n8G9gx99_YJ8RIK>% z_|N$U#2fkPr39>`Hu`z7trdvI2;B=2~2@LBf(N zW<-k_d2dP0nK}SA5V>88^o;(dq81M{j!6N$#O5eZEm-Hz-H>GwyWoBwKRm}Xff zW7r{ygCg=JMgkD?n2iYI|*t44K#4Afkw+WD2fKosGO^G{|k^CNP+1r;y> zi1%yO>nA6FlmwuvV)nKQo=hp^9%kE* zig9Z{OXVrA{2X+Z6mW=!Id}bWZ|` z32+$x9gH`;PBpbv?O>)lg$rG$B4Eyg<#O~gXCN}tc8~kq-vM{Bg7U6Z2`H-PVN^cF ztr07Jo?ccpPmWYqRIFcR?Ta$FdLo0%Q7C`t26Y0`Q#U|yA{w4;)C6>;?UTPHKs*zI z*Zg)v#6K!q=%iEHddCVygnNaR`!)a6lo3*0AEHD;z*IHgBWPWHXsA__i~@4=)jg=kL;wgvLvXMZJ!zEV+GL#BBzw)UFh^ z0F4+RlPpm06l|hVKsOk}_M|*lq_F7#G?B$#udfq|q!HO;X%m?^Rrml%{*vGwn$-go zr(kPE_KjP}MszL!;}z?iNwN8R)+UYv>+Pf zm+eq^=%rHeg11MUsR9=X?6{Ib?``s$=LKC~ynh{+goQ3ik$l@KzoU5y2I$?;=wdgz ziY>u(h|qTG7=5xp@@tEKpV=UM(S^4LXzc`@dYsEX5G*(JTwprT!-lz`$6=Z~D#V2F z9~zx4?66fZ5DNZ}>Dv{2=As2FUB@$?|HKn)DKw?XO-eXSXj!z##iAW{w?xc{${UQ+ z(;T0;0tT~Q7mAgBye;i0OO!@4`Q+Y8^YV5sT2jZVvztrAJ}$v-b&jhtCjTTh(7W~S zr^RZ5u3wP_uC!^>It>5it?M193LJn+jaQHJEm@dZR3JPKY^SeY z97=Z7iackbq22bfa@asLX;qw+i3;^zgkwNK2M^OCsa{k>QFGvIFe>OsmCSx*{#=&b z(VpYowOLxySKZ_`8NEtr4|Ca_<9D&vx@MGAiPkv#)w-39f>_SEtj7NXNU{W{#VX|O zhTvCEi@*c~T6_GgG4|sHxD8uBSIVQvo5{&$qAnkZ1tiHq8k&{yO?eZ5LCRZ7Y?k{x zvHA@PritGA=LrqsX@T&D!Z6=y9fnY1QD5qu)?8v|AuTY4At!o5Lv&+1qS^*agI};c2Sh-Bc+zKLu11(4F%1e!I@7=dF&b($&qV zo?2)0tcsbhW5C$3P_#10XE3$S*r7kl*RB*okJ#JjHmD4?-at?kBAD;T0yv?v?hrpriY_)2h#wRF2lSxDSY zuc?WBqak0L$TwQ>B{qc*^b7!{yrqS(t==R+PXx`3A~KObqo>}?=2HMXT7u9}1Gn{& z@TU7MC`oE~qO{*GEY0O@xo;+#7y3mB^OYs!0o)4U6HB= zbuW5leZAb!PFXcykEVr%d3!4GMR~GiXU^&{do)saM+WkkO|~EMzx_PT@6wOUznN|} zH6t=oU=}5r>l)-VdTAM^aH&}2Whq>B-I7XmjzSN9PFB)Y#g`ga3XH}>z=`wmnYf!zSl zpTxT0N!chUD7u|m^pQ$)yvEB}Rf#OAx#-od!15iy=>B;HY%z|CIwZnvwzy{`U!^5O z)!~N+0Hz3Bo`(v12^P>+J2h94)oPN>1<*%T@}u~Wc;$4Giz0`3?T398mkpvLHXaYh z4NR<}wYbw!JBU`yNqr7vizela zJ;zO6EGeUK>%KG3_sfLZxm=-?5=QBG(E@OL)j~B-h6!*SuIbk6i51dOAr+9{A*nWR z6s(kZvL@Z$rBCzi;{G$s8Wsdr!-J!x)v_HQ8YYntz5sDV4z1G5xVmn1I^DL^XH)H- zDoFh79+p8tsgH>yELIt;<(sqg&0UvC5UFyAGPyxW7_O=<)+9tx+4pdRNeF&^Gl+t?{~{o>~@LBbjIx z`yindQnZSC=w2SZnI)J@&)N@NNWtFD?}#<^Y%V0Kvc&BHO0^)|{+Jgv|Hcn8~YNeW`CmN5U$%*ca9~RIsRhVc_S{D#hO{ggb8kHz5 z>FOyVM*jx~Q3z-m1nnywCxx0J2AD|hjjU~yvU&?-<50=au>4}UG`lQ^Lghkj^jdhe9KBRn1R!gsWhW3tHqfXpJ?I*Q4xtA?*bxz9pL$b478IAG0YuxW3()7k!{A50ja85S!P|J1&Iv8 zGwOeMQ9F;a)sz{JFX@u{lGJqN7LIupaBdf-0(!E!byU@pt$KDsfPJBQ%YzhPST3NA zk7u8vIj~)*A-+8)UCyk-MA6_H!B^CKJA4h!>;U;zp!Y87Wq zajvQfi5IPFVy`c9{3<|-stp8U3#OL+OQOcbiq@Dob%!$+?e1aTR*MScfODavSmbf) z(X7sV)!DVGq;LTdmg=)qx*ZIZ5`mavG1 zGCQ-rAlOr(VySbLS(Jvkt-Zi5l{HGq(Sfwutn-E(P=b;*mlFNc9Cyrt+ank}w4|eh z?+*34Z040iD3@n96`t?i_;n^&6{@Cq6 zF(!@M@JfgC+pCL<-|y$!&)pt$saQ-Go5^ZNj_TFj)fvz8PS(pb-)}a{&nYdLQl{&Y z5=0Yuc(Gpr&zjF(kS!oYXMg7$-6+KFq9dN&< z)5&(bAml)%z}{!ldX@n?(RfA{c(MCT-pWZj1B%XE#%bm@HZx{wei5Tl>n?Yj=`{TX zzU8Ht_DV=lJ8h$sIE7>XsQ`L_bWlS6WUe0{(NnpbCy(oFPX5H`x>B zQC(4KRXVcH1^#xsJiJ&lH?LA=m7CMd6e84q=1M>nK}QC5t{l@IJ*JQZ3|rMnol7c! zDtq+!ZHZMj&v$vUO|#85nWi&VM5r94KHEC1YRj2d&PA3zb8~&0J_NlNcm40)y#Mjl zo0Oc#yL6m-9^CCQ5=9al$wj2<5#1=qF;%ElJj-@;JMJS4Vv<3+wwZD4KK9NrcNOkN zr1FgNnkoGtFId3mga~yqn5l;Wy1UVuSF!e%TQa8%Hx(#ny`9as%JMKAD#rvK(&?U^ zt{Ka4wO(P>l<{9=(IfHz0BR$1TkW$u^7eH~=Dz)$ngpfu=Bv}U?7kr843C>9@S^AAxuWO#n$jygHV}2OfuPg^2lk+tF{JE0 z((CTiid6`(E5CI=-Pbp%ToRm^Cy2@es;c?q!X1Y0$vK$Km*jZk3D9_Gvi)TXZrWe) zyESLcMmQl^TMqIW`*))RGYZJzSnW5gc$apwxYG zeI_ik?f}LhGl{yV+x-eRM7H^Q!h-S{e#=ZU7~pdKklrt$SQjSu@x$zny0u-8?RC(G zr%J0le^=cTxDM%oiN6FUM}FSVlikPlW{E?fFO=`+Yy`i?H&54DwxIO0B#XX;SEU?2 z6)%H*n&!&m#EbAQ=mVW1a!QUptZ6zGrAkl;ws<|xV!hu1R)s9_EZ7;AQWUx|IQaY# zkHVC`fewKVbT+4-L9Z5IV~$NU;vn3aV zP2E=oLs2?_b$e{1e-AS`WiuiaDHI^u6@n(%uiGC9adcMU`CZ{jwH&PvNLnWoBxn&kvVsheD^p@$zDwe547XP z;tAhcjb#keRb6`3dD=5WfTf}cGGmDh5?TA8`Ql(Zj8QLUoJY%+w>wyLJX(v{CwYJ= zeWDDb0{C%G=#eKl29cw`aj9fxlGoy}^t2Uq4Gnk^`O~*AOE-_Z%1uGdP8=*L)aa`N zfy!a(vJjv_#QgXpzJg|?I^N^S%PwZc?uZ!q5yzkm(O4>F#8PwxypJj;U-VN|dZUtY z#10$7w4E*&V8P$WuIeMYepoKl8q3n&Vtc&Azc z*@5buvqE%%oJ!Ca)_^8B-BmgeMI8uG|95pDKu!nWh&L7N5*Dbc=Nj9M09fHxEQnyi zr|is+GNu^;k#Xfhs#K__SD2*_d#IGcWPI5#CAhLC^fV+Y$=2Yjy9qR;2w5(fs|K`o zarFma5v%p?5%e5vIYen{{gIe5l#Wq+=lY2&7L3FD?Rr&$LZkD|f`|qk&-{}zB*V(V z6?z1Ju#kCzU63bfny-3-QES(JEejYc+_@Ni&bF7Vc|kaeznrQ<`R)(Ia)CXebLN^o z{OZztL-xC(&JB@7mDMm46p1q>!XI+S?#SsKvA)KdQUQJmrlO)5Cn*!p2Kh5DryWV4 zl-KD@M;sI0nBpnPvza^`bty@s%sFZ2c*HBXYycQ2YMOTx=oG`xQPNa&qNhIM+6#;epqG`f#%Q~L${ zmkI(HU2WzJN_na*;8gdON!u_JO=NmA4kDQ?99l@9T+X>-ZHFri?cI*^NJozpGUbYv zxB_xBF!5UG9%Q-$ruP0cey5)kj=Ahy4V6t|;9zH_f@C-)fxp?*%S#r$*9!d{W%?)a@HFEZb z8K?3m#vQvo{>3d&@N~0B4+NpeKi;Wzh$CnOceNj>4rH@cW9MkC#MVcHw~Rb(@0jysJ=_^=q` z-NB)i5FpO+s7m8^FNlRcf9ZNTI`@oMNqVHF53_)Tdm&T_>7%}@w94rM9;kKB#OcBn zQ`QQDDTd}LtqX%3;a(bU5Gue~M%W4ZRuuzzGa;<)&0-b6=sEWWJuw6t~d0J3n zLj@=$U*eDa&`73q_jxm6)|+$^4UNIGY_(#!g8G~g=-45{DYs8d<;wJAC_Z$)RN+>5 zA&wQ zovO}EHMCS=0Sjz9m3=59#q%#(NR~61b5>5kwOZA&-0PbRQ{?REOA3!7`@=GL=n7KQ z0-*53itHwuMx10k?g|P3vH^PR^pGif8zgf89;W%v#QDfIPa|+2$N^RTc5NtOi>IsWI(}#TXVp1=#&tH8Gc#|{oA(zG;g?KTt|Cw`SvaXkVL0LGArZEo5+l_3 zi;K>|O@QSyTSapNZiP#%&|SC&fX^XYI#qq2^@$jxpCZUA-7#h`Ml&7sz^KIy&yfuE zd;&-TGLtbRHR3B*^BumG+mo87#i>|;gD<<=-&49LQtrvACCkW!P}~LCON!U+G9`OY3Tuz2s63{-|4!FUsCm8qNZF6W?GPT}R^d{r2U>?loPaqKm(EaP`N}g; zba}RI8?pEaJa4Ha#X&F5tvg`^I<5MIUdL37*}7%>6CcDE+d4JvH5lWb1p3K1a?o38%DOQs6zHm{V83WF3bkgg+vt-!Nw zRPl;Hmn3nkRh)Xe(G8BsFgZHL88yqA9?TPJF%n8rC|EP!CA*}Yi!)2+yyR+-vObCt z>dN!Nap^3XMuO%W{+Gqf!&lL0WD4mwswEiiTu|#!-3nKrp(>y))vvU)A789aI#dgj zwz?yU1IDto1se~X@dW)m0J%9OZ)q_I#5 z*;R5VX%Q(k8Z7IbdVXYBOCfS)0l8?>zcS7Z?yy5Pl&`Lm8-R&>kXH@I`(aB~06kBW z)oy%;*l0zzH&M8@duqw*>4b_(CB>K_gVYGEp_G}E!Wg|s7h)>H&FK1%BVFT$x4>`}8v19Tw7g*1T!j zo3NB9vxJwmPTeV`v`n@V?J2oPZ*E`Rj*`pt?{6=Y1+Dd2l6_A<&XV_U(g0dOrN5g$ zTwT5S`}9xg_>yKoLdA<{t~F%i%=TpDkZbtlxM)C84aVf;Uy|33u82q%-`wn=uZ?|E zm-{x!ksDoW@UUd8H@DZL(QVq5|Li5>bo>@Zd6EA3>dmWn7bAfqgtd_B+{nM-t98Z- ztaV~~CE29T4ZEX&jg^hD16=wpO-)?DXb5aoq;4?tnSx^_rc3Y3mUI5S5#c|@saG4`WqQFea|JMhKuy# zdUQF4QD4x#hjpQqPs--~45g(YuULiR4fM<0@5sVkjBo#*JmshH_027LDy}bCh& zoADn<*MFa0l5vs;-lm`Lu?3C&(10#-4fgGvxd!Wa4_X_!%h%xGB2uV9)mX?>{4yZ3b6FY)aCNuKlzzD5^rRz%60!Qevh?IwMH zeM!gyXh}P#Wb$+o{zU1Lu)r~}3ptWMJ@RXiTU^M!hlkyyV-Gi!Pk4_dlVsh=>b{4o zfq-CF$M1f6pXh7oc#__k5rlVen?--giOKMs+Mb|(jxxZvc58&Y@x zer6(vv465`Fs2KYu!IQVCvpHw{+=ER$_UdpswCq;#Wd}x$?d%yw@7`xiz9~uCYiyeDYrQe(M=S<1MJv$kDNB&`IJ<9F(m-P(^mv z*H~X5*Cl86z@3*VLuRWFquy-5INqj{?L)5Wj_^HG9T#+AH5zKzt{E8js#w z_UK2Sehlcxkba!dk5l?_MnBHUVC^I@gy+0dWxuHyQ+}yH z3F!4z2!eFK0Y?!$f|~b^JNg~h9dzN?jpUy64_BZJU0uJw{KLg9oc6@?A`VM{ypcUe zo0drBVi%H0GG?Pb5Wl+n%n89a-Ls;b*wFuOLYbBNHQ@Q)> znm2B{Yq7xz2ijU=%I0lv7FaHx$*-8Q;@JZ}Ilb0A2{9EmBMwYO>@Fy`#9BcNZKadaCJ8$1adhXpfs6_>X5no~oq1<4d zzd2rYT0khH%t1z;2hsPs*59I8anxY3P*+#>RZaw`*pN#aDw%5#a1U1^a+mCN97{hQ zl^{fefY52H3{{0UDL5)RZk>MNBEOzb*DL(XTu7U2VJ))!flhTXOBD<}myPX9GjUyd z0uCpnQOwWVlM^n%PLeHkseH+aK|n+){6MUcKj9{J^gnz0pMCw$f&S-E|MNuu^Hl%y zO#kyd*;0FoC0byDA$q`Q>aJ^+SeDQ5Y|;TZaI)-bI=d675dj%%CpWkVM!K5oZB8%} z(_P2Yq2XFKo%z#znS7zI0n=(becU=<&=qJs=^2^K9nMFci+cf7Tmt+X#<6*XdV1sU zVM!dDuZ1g!4VEsrF2S+9T`yh3QL1Xxjp=BAb+x~G+FyO`uYva0Fqwk6D&UKNE0Qs- zH|~{D)^Z4hK^F5WD_u%4NVsLjFDHApx!Znl-ZnH=7;4st4*1DUL25n%Mee)mo``eF zAxE~%*2VL|Eai^&S6BP1r~TE}{u*e14RH$>>nA8$+ERB)>0%7!!BQ5m$jQ&?NcHdo z?*e95vRPegvyc(MVu4?8wSv*lr)7^Bh{uTY!@2B~a993sC!bX!4JB{s*>91sn?N?x z^%74?Z?!t1%$AVAYBitkgb7jb_>TQ}bu-f&XYr%{JX;H717Jdcaa-{CY_~*3Bmekx zzlEB;=@V?14vs6JFV!eS7~`AS54WTb2D_(Ontg;`Ypn7$~Yc znizsbwXc)lm@XDzh${X_3ZnIQMm1H{XrI+a_5vn>x_tq?jbgDkq{!lno00IKz9g% zNXPx0$^#hFAcsYL0u*#77AqxRBbT5AO?c=sQ3$eZeNRTklGe@-feVx>3FX)-|L!XP z?kWH7EB_uS{~jv;K2iRCru_RHd1;dK*$cohR^x=5>LT`@hk&(1)7M0w^Kxy=N5-ZP z?pPBP(o4TD`NcquX0eAbUQ_;3GWp|q1O_qQ^PSk($ z8mfjnAJbD0hxUv>d1oUj$+?{I^97CFXgHA07++#(z;V+iU>JZLNNbd^yg zUB#;=*9y-V)_`cdtqWMfi=2i5O#>k`%aDtJ?_LxN1C6FSIwNM*vwhwvQc$O?3yNdC zVYzc1aMK!*RdM|fy)L(IApkGHse#CPJz;Yjzq!9poKG?>U%I4dAW+YscCjVRyJz-Q z09%Y6>35q0x^yUtLUzb4;bq`e{N`P~8g0Z5Jf0D-=VtNmo1uaa$js#Htl<0G{SMrpv0u1DY zE&+@RSBpN346rAHhHTL4;Mmu2-MQm?aWP*C^6YM>*C%925$y>{x#x;&(~;|$CB{18 z?wAXKiwBEpycV7|Wb?DEQ-%J>roEZuI|%&~)jr|>Cc{M(Y?ByNisE#`X2_S%^jiyg zqkr8)QOdoz(vL(`f59Q(3hAXG64m99qn4z65Rcb%Jm2>`-}gP=4;_Q2jumBS{y}$L zx1R~NE8af3Hf$7zJnWh>(@u?tI?c)<_eycA(l;6DKUOEByuIVNRR_?p2ITUTIIeTB zeDfpjiYukRs?f(Lc1Z@Shuy@YxF65mLDKbQn8elRIg{4ntS;H1@4cCqV( zxpu?U>y&qqu^OU`JGxvCGQCnlc!ABWg=k7nm%7QyPtu3V7T5mXb^3f1puUBF2O5|& ztk7|P-F1K6bAK)N(IygwI-GH|j{EB_IK*Bpmp?)4nLIHMw)sWJjE-1eI2X`&7>mx( zFtK=E$Ns8of7P?U>f2up?5~FIB_dn_l~O{y%o~bU6Z|b*%wZIx9HcMW4X_KhkK6fN z*$44LjTqdlyr=G>&W(jTpdx@v+o1i;ElzN>P@xGMSEb6J#bJ6l7i1m zS5Vc)szH^dJo#JR7PhSS zwK^I(%3jJ>X*3hHwzU@5ESA-Zk4jcUX$kP!`!=l+#F%eJF)E*2CMWiq{MkY@Q5N_G zZIH>a!wLsjzmrN?Ws{^wH-dlckTr_sJYT9KjB=w zuohRIA3JjCZUL^|BM>zdT}K%?VYCiBjkk3vO4nl=Mqaz8{F|$u+TTx-Y;yHscjdL>4n^kklu(;AhEv) zw>)Dj((AaG1ClU6nzG-jzj26fJR|?5ulzB+c~!2wcsiDp-Np*sMZ@hMK#9{1wwLSz zg;+ojEL#f^*bWtRWQn3phZelxlrfG+OAoPD=idCpT+RuXT@$Id|3vA6(DsaeS1_Id zin*s-Nos-Spihy)GYnW)8nf-;kZOvQekw&h7-5`8UjV(9Z?J)&7DPyd!a09psm{RG zwRXCqe{Jzz7xY9Qik|2yaB@uwD6%zlAnKZjiOaNVq`q-xr@amz)IO9R5P@qny|uAzViQ_-#TXb-wi#*MzljUSPzEv~p zZ`099%DfzBa16+%o}~3QXYq;fA#yrA?OzM`tgs1M(?vGa_rlH&^$rc{GK$oUr&ras zH40kqA+!WoVFpQqm)3N3IrfSoP5wN|e`K)6K`NHku7!}b(iYqTGAy2&0c|)inRbaK z>qNgS(8V3q7Y%l$v_GfWBdMNwQCq+ZXK+iXS)M&3Qs+@g|vj3{fM95T_tzShM%%#Uar zD4TD)6`7rE*;(RyXE<(U4gd7RODWg^J!n1O?1@#X!&%)4LWB%+a+;msO4dj=ovbd% zTz$uwCST0-3LHVjXIx3LHUk62^HdRRWB4kVE`GC{|57Hg@2(x%BvC!VJ0PQ9MV^&X z?-%n1u;p$bG-IfO;hW;sd&!TsP2bRI87RJ8L6BM!&}xn|NVAHIqj3`o z3{0Xd!yV)664Tsmm)~-;{5|v%trR&`TuF69B*er`xx-@o8Xa`xS?8L8_>SlaU19~2 z>oA(aRIghY0@buKHic{IA-UQ0dvN)OIbF)dJ>ehoPt*Bk7iuip>;T7xZbRsAB_#D=&i z0n1d48a}Vi_C;j}RK^X=LuLuPNtu)zrd$rufY@0|B+m71fB`hD)~DR(Nz)x!W=jxg zZ&&W2DRJTeOOP2`8r$I62DM!M%h9sLS8IEcEa$l}A6*iS0z+fYFn-HA6Bh1E^*$hV zbJFUEZ%Ryk=@W1+%BdBO2OK<5i+-VBTEfRZ7hYQN`?>>PfPnYV&Db9m?FET^g&_P+>gl2ABSFbJB1R*#)n}D68CjeDh zP&Lk7ty^||FU4^wg~gd7W#E-40yhDo>*`0nz$4e)(HPv(_@A%rUAC+YupNh=m zz+>ld6I43?MoQkWk=5W7g^B=Gv$U0D;Nqu3dNBBrM9yw?`zh?iDv32NO}9*O=Ux+M zep01T>oYK`GJGk)0fC32a!BQjTjh|&`aVX2X@^?Eks;He+_ggU5&BIGOH9xcQR6{T zIG$bQh@$9P8LP0-SB;;r>VEfZF=A-q_`N{%zvy8T-qnt%ALR<*3B=h=Idr>SJP``} zBTNE7WAZA5F8f*5)z(h(3+9DtQH za%LEIB;@qyFwzF=iRZc$D_&MpGo5TE(?#XFsne-D@u&DMQBEEq2M_&B)!d`OzMY^< zvv8RNgiOT}YNH+0MltA|n9L?h=}?K93RTPVY_pt9=P17LB#e>2g8YQj7T~tgDWE(} zP%5};JsH=m99vW1KQB*2t0y9C-Va+R)DU~w8s`Ou#tWTjo9)K1_!%zU!`sOx^x^5?n0DG+;3hc4p&!mE4gFp(o94%$Od#ZVBg`* z=NMT?w7wSoAhf)e)r`=Z0e22toYJ`xk6#@te^IXX4rCc~O{AbO(zARlR@s=(F!Le{ zw6WV76h+j4*Wn?e1agW4MT4vMH@ki|`83W5PaOPD995+(@p3@MbD2SO$owa6W!2Tlo9W`=h6^)6#`#;qg92i*D&9b7 z@jxXIx|{Q=X3TFVzoTH`dtJ;>xS#BoI}MtGMyNzb65UG@tk>x|T)nh30YbZ7OLwSN z^Hw;oAPHn60-{$%@MTT^#LWCtmQ**Ah(=+9rS;~e0el`eF56SxV;Yc(EBpm9NBws+-*rhx#}j;KrUU?wJj5BTR{~=1hU9fks z*&5Ip_e{4|`YFqUtE@y|+NqgNQjKwNFvN=cknn;!nQR-epzdv0L0yq~?@G`KW+$Gw zb@4uM4Z1Ef>;Pe$@W|i#fsbW!0HXAt4pd@Lf zkYQCsH@nrm38IF>LDd@j2!wGd#C9vDT^{#u!)sGIel4?|qd*u$6P6HJ4Z_anrgz19 zs%932X9p=3bujQ(B}J#Yzg*Ai=TOr*W)4%#1u!kQ^E97ia~EanHQ6k%8BZ)7DIW8 zlouoSr483m$8-&OVNF?(nA|CIL~5%Ir&^xd6RU+X5!$o^X=(vA;oCx@hXELHw8U8C z4VTQ9%#9kY&WJpV5ozjT6rW-?<_@d63ESSzIn}ui;|#ChF}+I1ps#|k1sv!y`@Gv> z?bD(`$UpG+}vo)Z18WSGyh zbeG8MTo60PtN5dwqtM3xl&F6uiRklcQ% zcE?{5^(BQn${U9V_=}O0&eH2Ua{nACd$5@-w&N@t-4K2WethvXWT7{xcXxBF5FuX; zmgEd0$#L(%5Ziz8v?5goum_18GcRzSW$n;G!DwJ)a(-&UAca@%c76{)O23D)Cc-Fx zfln?I``Kip&QJ`l&)HO>E>yR>Tz>?CMAmD@db>ksNA%PHa4A@_6JT=d z8PDl0+i*wh>im{yJ^5z6-JNac)2B4cA6VE${Lt+J<-@=&ejpRuL3uwT^~ddeGUITUCF;B+?ecCi!H@Ep1%>2m^mTa860-D1WM9`_ zIsNdovT|5ekdgD4?a8oS`&TdWd->X)Pd9sFitWrEfaYHKTwhTK1%ZGHTV7%sC|n7d z9&)AZ>S+Pghc_VW$;s1@GdwuB1)-a&Oz688bbMS*t;@(<-ducw;)$v;D!o^T7K<>q z+@oDicDrpWyKm%!$316Yo9{Opah~z4^|iA`Z~iGoIr))@cv`yL!s(-i>5oHf`T#eb zN(rclkM(qKG`MK zy2c-0TsrN^(9-_X2q9+p6ez2+2*j^sHIaT^+z}V8IGkR!UMfw=+CtmTuhlj7ZU-*- z_zST2QvFLmGgAxI09!*-anTCXGITe>mcVQQyoI(n6V*p1pGx(S=r$dPOva;#htfm% zF;6fPvj=z+EePN2OAS#=C<)WFXPBm%ZA!aEFddtgH?cjb5hL|8yOK__s6a&p>d@*J_Vkxf=5{6ZEkW94hneARI(V_|db4v0PV0Mo~o z@i{-tku}nr^uzqKS6fKBryHg&-c7b!=s6zhHz^EQ7Azn}go!Ro?prU>irziW1kyy? z{HNGpQxj%tvG2kCLb0{#9h3a(bcb2;a757Bw9=#XL*LSI7fMJfP2EzeD07ZR-r-({ zNN*ZLN~yIAi|MoCuRMo9<1KvgOE`AEVNUoADyN=t0O+c72SE1?Z}-pXzs*7 z*@;~3xS;yL#^m{^Sv&AH3LQ-zxUT|!!iz+A`FyuG(e4XfGG4W*b_tb#ITcCJY(Zt9 zJHCCX`inegF_!?q2gN9YC{gRY;6~tR177p;1EdD2sDti z+>z<(yXm#3JlU}Iy_l-kqnTv2_@RO3b4DGmLg|!et<2Trs!8!{kUX=e5Mo?0)2Xh? zLNzTA7#z^${Jzlpt!dDwIgEt}_-#60u>jK5>09#L$-`XuEUJ4RqbV@lE^5WCbL5Uu zW?%G93qoa-u20|Q4_8DBH~XtJa=bvz(zWd58kJC`e?<#o+BA4a!*i3}V0pK zxt>VPm0Br={_0dz(>uZ`irI?=ei~O6=_n(1*9ZPQN6QDYYdspfrxbe8YbF|0Q@rjo zbb~FPPDmxCWRn{6u1Ab)1mwx5?Znza10+%)Tjwps#~`O^dzTVpc5(mNnOVztnUPkj z2c%pg5;&hCpabqGGZY%T0{DKp6Od2SQ8B@Z6hu9JM}+uhc`J&*TdJS?{6$wb25-ZI zB71VyTIIzj5LTFO*16)5YcVIGFa%I*qfP9$7K}aY_I-2Fa;}RnJVNaard74?_eXGm-=`~Q@VhLt{ z;gp`koRKjpeMakP;i_9U>V{C@+#ekfGlvYE7OR@h77?cIawhAQBxXv0KaRV{EsssI zxQA#!lWps_wQE|~(wk6NmiACs`WGQKXV;uri!Zx+Otufx_S6LwB^cJmyWwqRDxa@& zb)jZhS4S6qTbb+Ak;5fVzlX&pdyrr(dT~#V-TmT$2%;S(vh4u54|203I)CkET)NNMO&=TQ4a-rAL;()${2=%WoQ>>Z@v-HrAC9m7fiCMSaP9B6;KC+f+1nJIGjwkU}WzR`M5s&d{wP+}GWX z%x=Xt!g3fD0VnHwrC+$3*0T$okQYI&Zst|w-=U0zL&D7Z>3&PJ{LOm$*ak)Lh)J(1 zY-iJHx00`3Ew@6^V@`Hlk#Qva9wODZC0ms$UK?5>qe)WMvizf#e9n_uyIkRf%>Aci zhe`a9O{;vLU~#3Q5{CFc{3vuNRXkV<-YSxMsaCxXCdn#y@T9-Ha`ad)(H42P{_A zRi}!dIY8I-BXM+lfHiHW#I>nr7KX(|?&yhmCR?l|^7$dn<_AKN5z1Ku`ab(G|Ew9) z0sbW_uwtkK2@0+sWFaZ_P<)HglY9pc-A=MOk(oq|gF=w%KL}N}^$-(bvU!=|$t$>; z?3fO{)ySqRDX%>(?PXLTGR$H6*Q5>tRqT^EM6VY`-7e0LYmiJ9RxT z^h&ab;tG{BM_ijq+VHUU6Jd;hb1OUS3l-JnDYo$8DCT_1!C*=r z;XuAI*1g>y=_c14~+>#(~$)qiq8qqnU{y@AycJ1p=voh~8inzE|` zXLWSs!z4%)M)i=8ezA}2^rP!SURIZ=uahh>1j?`-)W)o z&YCp|4BGFcNmjEg5o^mNDv2{oEjL<0YfB7K)~*$hrs8=WGTlxB!{!xPpezlhHh7x2Lf3G2krlfjQDnu&GDMSBj{#S z9za#(Jb`rVvLV9-){>;@r#<=4=RF@M{2;P%#fEnK`^^mE#dmwa zw;Ek_J7iJW7?O`LId~fE7!rJfa0>`qU*s+I)-#1&3URcT`Z!O_eE8z<|*Y)@6=oD6<9eO#;_QhqQKPjH8p=9C}gew5f63$sG}Sqcch;>CS)U8Ru#Ip_$2dP@EGj z=L7H+WP$E;CdpfzvuiR|PA%eiA$?_w73GP66oEJZRHS!Lt;3@vD#>vTbXh}GCw6#1 zxlZ7qBrZy)L^OGV6RvSOos_M4o$)0Shm^BpQqFnr(9jz5wiVEXllFm z=POQS3SZIAwA@1EBCmdYf6ZisliaA#6AwF~E8!s;J}K=EdZm*b`So7}`w8D^TE+=C z^38FbnezwbSQ5dtUd~XZP82c7MHx*#z{BtzzC2+QatXoVDphZ;?bg~fI*L04Qj+XGhiaNqIXLerei_)J4c-RI_S>B-H?rO zHAv2)?|F<+n9l4o!Dx$2kY>7*P0&Q6PQX2t_xkyoP}{ij!TARa1kTcD%BHkmQ5i`j zw=vj*egq4N7~~8a{ca8Z9@LtAG|3l}aC4Y7F^)cyV~T3VLpp`W5X~A?W>kz^q}}bv zH;(i@G1wXOa{W3$ zTolHMtsmLe15;X25K8OKgxW?Kyn4Ykf5%nA99?f04@g4fqQRd~4C2Z#`_H5k_3thg z(@}jI1vs^~?JpB%2f!i3_d$scUdI?Ae7RUbf+dxImOd?XY1oZViy8W6s2qWp%&8Me zQ?mM==hNM0Q$>yIBRoT&>h)E(r#>C4iR}JX+BMv4G?)5>WqZJu%B4-VAq8KgN<7tF#*V&qiZ@6lt5GAbRtyL4TLw%^q{Utn=RJW;NQm#p1n ziwb2X7x(OGvRuq2mXLML2{;$?ek!}h`^RZCH#9Dw+i8sxfGeE8D4{p=r}GCTNgjXu zf&N0hf9BeFmW=^+;35fBGQx6z9R zZzq#o!Fr#2B>LM|uWl7_>pFNDc`_b6c!hXZF^@R6?0bBXqAZoJ z%8gM!!WSf0nt3^!tK4ohFY7(C`9kLuMCl+(Sd~Wm+ z>Z0gRvKK{OS|DvtRXHnfkoz~1mvm8#PL_$eaa_$Rr)#~&?9}U(GAwRqiO&L%uw+yKO$a$B$Rdk}{ffBn|saFmaPXMSu zIDlMr0`M!#oEge#=C@cbG^YA`Ima$XDxV zT40O#Ju&>hss++|5b<#`^5k#>>GbKX(B=Jp8HbLo7PMvb~-&{NpKBWKyk^$y-UBB}$8|L`0J z{tFLhWm<|-cGF1}WZOY~>?fv?U#a8l z(zfEK_v`J)$#yor&LHr0jrkPYIi?+M=d2+KM*aq9ps*eAg|6k8FC|QI^FbFTRK<7! z#)=vA4bF(H2kR2Eazj=tF&F9ww#BiARTO0<8%PYXKP`5TZ!s!SA^ysXR> zOzcv3%2Cj{21_oO!oZ0xcFaNTBypr8?&SsmPvL79mGl^^h;##z7s za7{%DZN8R61tdJg$CQWsOIm?G4h(he+#4U7#7)N2h7Nc_E#^8nW1KkF!_+FNYjl zuu!qqf;{?szQSbT#r^ot`Su-AEy*zC<=hUtO~;p;Te>CG5_@81JrqJ+5!xbVt*peU zu)#`CA?>gd{*h%h$t460R_3vw>$-$2XF@E)yo%lmiO_@e zPDz7yWZ^b&eFeAPj_*a=>}sf}GQzI-%7R~6YN8HV&VS(&TMDs-(a`6?6&_O-UdF_{UgDvhLY>1YFXm)rVJ)(xg^bylrb zM9#C#azYr5MKRw9V!`J(b>(Q~OT4Kql}T!yl>|EQLsdlZYE*3@h(z}`WsAi!U&_|( zjQsloyqTC}#PS|0Z4?7NFhGK>*M9r5w2e(;_Xk;g2kWUJkQ%#U;1QyBqmmjKg2F#U z6#ikFFxaf-E5~-dl7>D11x8UrRknfTt8oSsjw6QKskd69|;@3vjWNGPRAIt8gd@^4}biwP)s)?&g&eS8V7%$EJxn=UoTqAo>(fY|5#@+v_1XcM6U{Tt9_VtAR|#qRyVwUiC=gE1TV(8NXA&Mq zY`$pQ%D`?2n;7qs^>Rj5KBAu}mS?jtldkS#$qu+U1-+#8 zbIi6NW;m)sTNSwf$28$OR9=-Ri~Fn#?|Q>Xd~h4qcrryI)MCc`xUgkx;6%?~sN1V*8h*$OGED_0*~OA=W}HRj23e2CDz(afWyPEx`iCR42w^r_n9lf;K|dA^BbuO(vX2CTmPGAOe&dH6v%CI;UCKHUFu5N3nk80FsyUXWVtJpy0Ne_3|iCnd(fAOs8ZW@!U zj6N8Zqq+_)y?K6mbVrL<&596(ALx}$G^#F3n~FJT#RiwLbF_VHL+11TX}(=fHieBk zvr49ML}eAcN!z=W3~_P)c~mVEc(aKjEuJ$?Q;9}p!-)sy^6YB{7+Gq`>{%7Um0@(C))fY*%b8XS^NlqilX-CI$|S-N*L>3yEs zz3vndUgox-2U4rJF0*@@E|9+oKoqX9RkT6#2|Pp~G9J1;wQ`$h2ey;=Q(Q(;^_beDQMM zv`VV-+&6JDPiSeUC|dDHz>7;B>xOXRl)!4v?#SsHg$+D_LcY*P2K6XDq;1>l$h>bO zsiL5&y>g`;vAF6K=t)EE&;jW>4sn_qi* z^X8SE^BPY_DCk3VKv{BXl{84(4Vr>@)a1UJpVC6gjnB0bFQo-apK2BnU@ZJJqU~m8 z+_&ahLC;c)u9YUuuZ2BOTS!#4#EtMrum@~W^-Vs6i#S!Q2(Il@Z?0~BG)h+E1*x3{ zZh>j{uj8ap8#y^8f|)3|dfnL=9ILunT&uLa=wL9c|J z(kbt9(Wi;7E(2c8z1Wd(6$dHPkZybMe2UD9jReUH6x>!iZh!#A7w6ji&c)E^eK3BC z!0pCu#N~J5HsT8RwJGs6!&t%y7?Lk(gcyOa%j92(`Q+`3r$petgFpUE=8I{S_mgEl z|L(d08PFl zEP<#IZ`U*B%f;$p1V0c%;BtOH*)MnW#~J?0f4bU2KcMX#z9X`Wtl?+;i3kZX3Cgk%Sz;P9){jFezh^^sL7WJ1cLl=nLk1lAjR^*{MtI2|DY(f9LKhZ*I@ z+>NgKWlvKgDYh9Av|?me8TLcWu3u**5fb@Yv2UE{hRU9U8tS9ou1dY{ZqlmM>LXS^ zt%lGeIBD^PITpKRS9D}>n`nMWFKy!HlFLWWyIctho zy~Be2p6kZ4O(%MnNiQQ@66L|C&Lmld^@#x`t@x$y(VwH?J3oyY-Voe28ugvS-_k1W=hXU zV)6Y!e@f7$ULvgr30$d$eU(>F%6#7a&~AR43MzhA-{%mk=vB8 zETfuibVGFDGe@qeLbl(0W#ZmjEjbWpuiM{~jhKo7f#qTxLx0cQmN3yHgIQ*m-+5;O`5*$4FR8`TH)m9P(%nTS_gM|F_OD{G#H%^N%o zg$WE-?`&;XI$d449AD4=Ao{VajZN?N&>uS=U0vY=ti>vIL3OF08_jy^esV$gb<^%i z3fEz>f&lIlDIA%C*q4y0Q=l4`M&iPEpiWw7fV)`lbJ1v1#Pa2~6-URlUi4oJMV!DO z=D&z}8z)WyiAND6P8}E*#*uYy7%Hsvna)hZ?_NZI%pv#OYh zntg?HezLV1XpeY3pUhx(JdGqIB(8eVC^oMqekiNf)C46Vzs3um;008u(LRyP{4di9 zWWoE_veOv${V8>GeQcZ=&*~3GC3m|j$xhCixGEbP47g-qH$C>S=Nd>tb{g!X0_{)V zk|!+m^HNzGQF}Jo{t3kngo5al#_VXZL2nHET+6F?m5pw@;B>orm0~t{nopj{GUT-7 zXRKOO)kWnlM^*jTDcQ;_ClZbroiGR;XRp_B`4G{As5%h!ELMeFR3zlzj+=alZgO||?B$iQdojCTVzodw##DMw7J%66jU zZ+uNM0p4he=Ml9GwFt|AM_3|a;8-wPc~Mr24rU4^GV~}uN)i=tj^Z$usjmE{9iDXE`dHy| z_hFY3S&VXdzM@GbGi*>lS^mJ1B@_tk@_^ts-vwW(A^H@vg*1#KKy3d+i|tnr(YhnF zTIl!0LvpaNS)#yp5^)@a*!gKOoAbhUlOO5c09QPxjAyFuFvAvvasr{--ib_zzpmx1 zNq`*ZTT}b$rPq{De|yJ?3<-Fk8t1zI${bc^25B#C3X`ekE!05D)D4pMBl30fMAgIT zL)$g+sGH}1e5d~YjYIrZvT7Zv!-SjM5Q1B(7Ijg?;UpDBT`Z8087Z${$sv;M6G5E? zLU`DcrNvF1tajr&ypA3&cvcf(!2E)GZ=e?PDy!0yqOZMW4g%^4H{=OfX&j@^k65ZF zU`!p@yQO6ewWy};Aqne?*Q_~%i@}u4OnN-Y+8AkA;7c0w>`C?;{j#o8X++ej+mx73 zkiYLJduf)T*S!CdYXK$kbd|F>zgu&@^JdYp)D2uU$Z~?L?rVuL*>2KIPjz{h75E!` zPO}0NyQj1Jwic|-q3)4 zbvdB+GEafrSz<$y{zy-TqD??nroM1a8;bgcyOv+LzV`|GjuvDq2Vjb*A{q190CHhV zE+k(H=!Imv`?Sgvo+o_}26O@zjm?DG&lXf%NIYa^rRhrNm73Ta=Bz8L3a#u}3o18{ zNpew(ECxEhiL9>m%tS1oUmU5K*-ee2dPQyMVup|H{3%`4i#?b2ccxF@7;7YzuddgpK154K06fpaxiK<%SX=#Y(6}g!#>BXB zCpyb-q2!B<{Jk&hna)Z_%n3CyOPdPVN)%l!Ez0U@a_G{CUfK@VGoDfKTFonV6>T(VSF>anjoe|0@>%ZrG^zz; z9;CFl>}q!HY2B^@p*y-s1N-jkj`rr~z=CG}eMop0!lx z?$zl2ewSDEhwgVTbk3*L%@<^wH1}#syt=cr2+yjlwAsl2jFwH%v9k#x9gZ-BbS*R2 zA&RC;nd<6L3Pt^8{mL!1D^%aD=(7SRDh*Xjm_{8aPL|u}_}fYT1P;tpmP<#8BFH0d z5n=`hBzvg}LYc!x1OPJGph4r@?{5wh_iz=cxT$aPX+%sQB6y0x{;QswP`E1c2aYUS;x)(haAoN4hkgN1toWtD_PYma{621`LNq@ucGC9XFHPS|FgX1ywt z{}$8IKauB6cQM@_1`fMmNULBuc1Oe1=Z>lxLM4B`rM)^|r7o{U3ud9m!Ev-z9+>(1 z$cLkZ-+DbaSP6@h4@I0@tv@gd5NcLxxYz(#`>ayqEM@SG2A5Z2Lx{%Ru9m2wPsU3^ zuGTd!WqHZ5qL#riX?^p6~Y0MO2N;svYv4hb#`@mJ^@{MIpNr z9sB^)Y)8^fEmqLu-d4&97WpMv!reT2+5neMnx`iOFTF zAcBZgV-k1Jwl2+kEtz3o;t(J9MGnuKeUYikGqc{*g486e1B&U&2nvEgzM?E0Ss6k2 zqd6o5ht=jx4?nd~z`co02d;1h=_&4|tdR&Yb?2gH?<89`GQ^2{>mmU{}97q-v;vol-#!<~G3%AY#TPM3IRmw}0?at7I z#%(#FYgKDMvJnNHI|Va3psJh_K^9H~&YX2d1#gR~;5;>*8Rry=da?Wb8`N~pcupzJ zbyI~ic;JR9Il!=0XMi062ogVH%Kr%S-|B0yjWUdBfnj>TUriZTaT(D^;d?@ak*+I^ ztK-V^#T>3XD~X$9=+<^ZIQfs;QSglhWGfs%RlNivai^wL?1eHxeVQSeM68ZCJI=b( z=d4>${$Y9muZadM-}1Y>sJ17_ni$+kYoc6A@V0099u<=)^`)NPl1)qf zzYX>WeOs*4^KPBD8ylj|3upDU7?fD_!0rSuX;v5>t5e9^!GrP!(;+ZE=f+H74NTvNiaiAR^=Jl1%g zM5${%q(}KmMyn_f_rj+nUiOU37vju~3iEZ)tlzS2bL`q|9ygPBpriUJ9oo6SO814H z3WO0o>FulH{n++_70VJSF#lAD>sLMW$70~Z5lgYGYG<}6;p~!J#B3~vX0pqrT7Cq3uLsps~uF3HtsHR z5_ue|S&=BHLdpZp;sruV2r%Z1MVM@J=RY=?8${tRweYK|~z@2E;C@B0*%s`jYWY%f!u;gKGFN7eO zdaJ~g;*p`5{L%ovL3U@3^fb>>RO$rvq_l!cOnNrM$}!9$B9tht9V*sZ8#*vbxoyL6 z*VpCe9Hz#N*RKJj*{A#jH~cI@AUv~C-l*=W!w`l+7Kl!5v7%FFurJIlo7#0f1ryWC zdZ60*Dk}7iQDx@Bz2Q)@fAvo*OV%UQ?2G7tmbYGGBEu`pV;C!7R7D9urLrnenJ{vW za9A7^@GCWph0~{Axj8w?!?;IT*&+*S|5*x=UmPfoNekCpM~tm+RS+W#h|w#j6AEch z?9$UFjV?0Y=%Of7&8snD*4i-jCp{b(Sp|W~mh*d#_^;H65;1azM+1Q0lY9;#V57^i z1&i_9Meja^wCwE@f*PdjB_!Oe7KpA};63+kW~T0@>K?D>ek(i|Xs#a$4#ugOsxb}s z1&k3RO}YA+H;k`Dk1WTuR}pW8Irx_AkMpg>2y~d=KIlNVRUV{B>FCZ8+L1J|sJk86 zh=#1eF#XzU0)~n<^7Ty{v+4*3l)yvDWVPNs&bK2^&kL$ir=s&LOH*+28EZ~d)p!N; zmKgeAL(B?8&2HP}tF?1IaJpc`UV$Q%7sJv~oO7ZHOO2$mmO3l>%TB)4{7HJ93Jer%ZS{0<5syg92?b@kO;sUYCm3NMvQC*FhokNz;FCq(Ay=v^50EexWS=ohDt4i*MQ=kH8uOA7VNRMe1lk}JPBRD zoQTJ4vz!-mW_K^@D!nV*HW;utYJ;7mLXuUpy(A_nnKRYDqb!dRO8v?dL8bp#JH{~W zZ(Fz|Prg}v4hjMzSTA;NcR)8qKDgtq_gvu45Ma6$5C7|bpl@|U$ z5psGZR20iwTmW(DN-FxH<48O&$i_9>C{%Bv0C`DOvM?|jfjwYLb6*dVP1DyZ35(F? zHcLdCTeZ$xV#I-TfZMN(hYXFrVPsc%680fzYDk-y?YeA$b>(tCJDMrtB7XZ)NqN0i z#un7ZHT_W`KX>{}^Dd57TR3$Iv2L(ur7iVoDLWTjQ4mlwJa^}!B?%Zxpze~>3iOwi z^hc_$REyFE_tZIJQ7`4yEEwYoz|+V~)vifmmfid$aC)0Jbb9sL4yp!y)XYJ`z=|>l zmEE|@Sh!cTU2fH5$+r81bc zvMP4KDOpvXz^q$uea&Cax|DoHv<|&CxtEXkZ50$>5D*rG98w#lIc3y9=)m$U{Fb|> zmA8v5B;m#(XeFpj%-k^)WJ5)@UKd?m?NHilYZ;`Kb1~%9vxPehO4r$Pe_*OL*>R)% zk%ro7pOvC&i;Vdg^x%k=y&NNZNpA-El`t5Qv(-CD+aC(J4eIS14S@dFQvq(lbf|uC z?g+diuzn^)=6Xhg(iV|C(DnM&p88vwNk1= zgX|O)<}KTxw$xXpcY+>J3qwc!Hb^`5r6YsVt~3n&x=zEnKnh_M_JHb6zc_%S|5P{a z@H?`KC4Ep%G!su~zfQ*|*0Ify>2pyPD3BUU=C_>smO(@X&TV6vSv6(y|E#ZCIKU4Ps? zvdIUoSyxFK7-fkCG^f|{U-rH>l~_rQwlyRlu2eRvaI~z6R2v{Bwu-u^{el>Ka;tXWK0jaT>l>)+k zEejOhJOLuF&VWb@aoCnB2*QBMFs}uqema}%CL&>0@pe)TAou!9z^$F2WM0j9#yxG; zY&%T@M54>3$OUn|TZOm@&OGO7y9cRVrBLM5t5pQH8v$ih4IvIw07At;@#XCl=-@`? z8sBfy`%Nd!H`AriEg)iXzrk@sxjhX!Lce)F_A)0(6Wo!qk{Bm4lwOZKNO7ef53#W) z^w6+i*4wmxvEz?Jm~VIFAzutTD}C*qinF41eLcLs*K-?S0pieDKG5g0(a| zOH*62FTG&qym0P8fiBoNjQ1E5IhTm^OTfJU@wF_OzbkYT~mHMU!h z_(r;)=QWMGY|M*Qz9O@y+hykt>%FtY1n{Za%_qt}>b&q-5}d0!mh4*SD>B?-d018& zDE*ZsTnv&2ZZK4B<^~)X-u^z>uO{2iqDHrx{@|^Uaz}ViwsT6d=wDLQqA2}@O4KAJ zge5dV!8%L*rd`Vo?+QtLRf@oAgJj_1Nb%+k#9&-I0VVhaUKZw?U?B!dZ8bDRWoGOf zGCLozEzuOU`9#F@k~(TZ=|Z1ss%Ryygr*um(!G%{lH`a8n3`}jd}~DZDz1C1Rqnyc zIqD+{1cS;uGGElx&irl>0QLybR|(!L)*?EQPgDhkiN3}xDHK)4rmjB`)P*0 zDx15SaMc~e;yT+oYk6<$`iS+Ka$3s!UR3hNRm7kj3AUqUtn(k6JQidjnoc&NqY%EA z3BWCM`^Iq=5nj$zA2LvIl5S-~8V=|GPkvX6KL8%^huznuhEN0YCr2B*6OmmY>saod zO-R$OWto}cfD9D!Am}$YRAXt-R?_Lf=n33xbYKYFZ1P^(d$^Eqc?w8nnPeQOizuZi zAz?#oQ7LRyZ*{%qxn;fb+$Hud*s9xfe7U)$9!GbrJ-B&KY8kJJv0cMwk_ljeuY^S) zhd1LcqngPJG%Vwf*_44cI4~@0#0fe)PC)(OqJTOqGX-!X)~l3Zdvvjwm1t(4fH@h3 zZ-tSQ8gV1OLiKLtD<2+l+I(%qE@7m+LD0@BqHl=GDMM=aA z2&Dk766979sFx#B(Ww`y=oyg;tqP`LFNi{yo~0uwM`gMkUzeMD$OdWO(*>bWmGc4P zgAI94afoirCe4HpXx4v8M`oaTC30W0wmMyTsfz z((4+T&kij8uY?VDdn`yo@dC}%Z1=;@FpVXj??!h1W3T7NkOgG3N;1Ex#3y7#4v8$0 zBKuaqwxMUWj<&8k-|P|OYx-gIK8t8RNtk?}^G_lugyK;7(OA_cMAa4U;Z%54Tmbu3 ztGX#Ay;?5SUF@FO$gK#tZ7G`2<(aTD!Q4PudsuHj+x(;>i|IH5pIdJokCu_V8$i{7 zfMGi~;*m~|cb#B@ov;(Ft$mp-?oEXrV6xUz9TIV6stb=2dtlYR4l~KO<9IAMcxtx< zZ6&-@2#3W%$b_e>0Q8H>JxE@om3+AX{dM}afx2TJp$P79x1^$Tc+^n4-y(-{WWc#$ zLc@vneU<6;aIMF!7oV7yJhgaUD;3Zmuq6-~jl-#E^6t?=x^bwA9QL*;)l(t3O{+Rq zp~c(oP|{a*+%$z*%}}VaSgo{|Of}T)g!SP(RD*BZe|F5ZjufkmIvL2)Nh^?6H~3<` zh3Va2W2fH}I1Mg4>T6j6(Z?De;O4s@&ENPK9 zN8gPaWuO*v{A%v@joe+oE(BHsWT%*^*Vu2Hh$fbRfXxGg`qerDwK4KYSg%Sr#VI@^ zWx--_Urc7VpH@y+Y#lFDnDh1w)47y}1K>C3P6o!lT~2m4>*#jGt!t$t=hq_Gu%r<@ zD4Xs4X|dktT1lhD7plfPFv@2Us;!Rl4BSdjj@ezb*VjEsG_@RjNYY2-ck2=hA;%XW zRan^ps~yV^7^dtx2Liv8RJ_@$bwXrXxhb5OdJ+`Q0vhL?Q{#0>A!m{iAQ6sC#MO!I zE?8R*z;nsd$-T&5{Ax~Q&kYVySXY(R$dCol>yJK24O!kST;2XQwUO*xeK@@2i1r4u zDW$wc5TSD<;22%mdAfPir!Y+D;)J6UGiQ^s6{YiCQE-N0#wlUsADEUM8kMlq&Du(t z_F~=EVI7;LY*^GZdST>zsl~jG%&*hxnO`UA)y)Nl@h(jld;p3J>}%ZS+FJ7=U%Tph z!HfAXDwcI676m=1*qwH2xs1hCFZ~t9tXP=DQatLEP#9%nIQKD1TPDs?@V_NMY?aTLs!Pz(vl|tQ5(+y3JaC zZ9=ObsfVkRLh2}HAJq464UH%i`nas#43LLK{#S@ptUJsDGAje!) zPt*BkSK3(Di;mRSV2egqG8?Jg!~yEt)9kkpRN~wi)n=@1?xUrxlz|Hck2a>{l;&@0OF0ucgAnB4j7I2Z@)mfCIUs|pAA#m zbLH)1)3|5iKf-QWu$wGKj)7Dig`sMOs!lie@kyx89zZKqFiK7gplM}S3$*rbVR8%Y-IggW;-e4{0K$;j6}XAt(mwYHyM>3ocII20 zQ5s`=BHB=udM7fdNQ3IsD^l#cb&XDCTpgLxOuLMz=6E+vwEzt!m86S2&8L&)WQ&Lg z#AK)BLagtTl-b-Tv`-0$9Y^4>Zd||&9oBu0h%i)x2;gq9x9N1hO{}~$_gZ5s07^JS z-I#tr93MQsyKSoaVTu$>XJ$DgKguC!2`$jabgTQ5=D##g#`>C?rZSkT5sYfF`}~i( zcN@BQ4OJWF3jSt)Cztmn`9&23r0O!IA?6{`9q$&i#deOUj>>sq4#c`wIfX+7Va_Y^U^-PAKo-m|LefYw+89UOpWNk`Bdzpl6} zwWO6wDP=2Ps}Nhqo3qjF9f9t2xU#LKi@L=H1X2q~7Hq2_~Ck8{&@q1f!RRm|O>*v1PT4Ww%N;rlH4A~*HO z#RVk!>_Fg6(Yaz3a1BMaIL8SgZqlzvm1&TisoQn15# z2%4vuM}1Z+&Lkq=L|4#5uGGKS3^3vAk!w6(^{2GF${tcgMIu!zxE&fJq`q8b<-gG| zzC}ewjUrNBtyBjk$S%I&HoYRAoqQ7dlnR)`<^ca@GT>NZ#+w=U_uDnr{_AE$g}h*g zry0tf(8ruE=TPMIdTQ4VpG){E18;4y+U$3BR$K!lv=avsT9Z`9iykz_=%qAAT;wp- zDOpwvT)q;%QW1C|qK0tF;u2KdHnJ|hNHU(rFeh?FOixkJoi5)BgamNcyS26twzt= zf6*6ii?VckGD|mI?PDf{pc%&)xk#vVB;MTom=>g3wq{d$Ov;PY zi@Pn9wIC!TL^^Sv1*O8lLZ1pk%&p>!qix6~K~W7GRj7}=BhQNR(MUywa(+}xt%1=J zgwE26Z}#g;&ZN(AS{y^&;t=q2PR9Y!rIc*JHf5sKC86EYeYF^=EgzE!VGHFez!)G< zFnO5M?pdq9?6-8}Jl=cbZaUC81qPm2l+30*P~0SQk=_$@=n&BI+2%{>MT^ zm1bnrXU3${zN%Wq&fQ2^5%>DO4wO-Ocdw3F*^V(ljtt#ZPEBYj;TgZjT|{_x4cJ$c z$!_=&JZGb;A%J1+68^Pz4Pfw2h(5iV0k$Q(q1(Crw0b*PkpsU?(!YE2{>N8u(lp=S zrQ=k+c>okIp0ECLLdQKiW8>c$&r~m+uCt6h#(gP&I9dMbehUW|^@QDaz5LrPd&1vL zHyiDd1DKOJ4dwSU-&EDbo7}CpzELIn6&>}CFnWAao>=Rcz+=+M6FE@i$!91SC#%m_ zuOAm+<}c@~gn#Fp9{fnBX6?Y~#bh^Gt{>P2yq^9AkMPOGdb!V5m^e3GFVoc|no16w zJpO*M&8ZcisK?g4EsUUvu>LTg8Jl9fknoF?j4pZe>h|L2bo6JMcER2RYREaZ8``ed za5ZcV%mrA^?r~;cjG5M~H__GU-A?iY^)ho1=I^KUF-z?s_}%i}epm-LjJZDe<)`$^ zT{3=mIr?+@?)|$_vYe2$oqqxdenOY`342STJS^E|8~Qq!>WBGf`*kG;R=c*p-#lyy zm2krKt_WRa7}coTd04LRfTK^c>>O5`$mnz@R|52)4@3+TgEV=?gsg2nhDw-Z(;-z6~zRenF~2ah)i3J zM9@ltE-LyZKF}V>(0GxyN@7@l0SqBBhTS8wB#?0Y?W^57g+V*#S!MOv6Bk6&MZ6$( za&CUcH9@+XJ}#Cs!g)8l#{|9rUBgLB{po%;`U@k`@w=PR^{sVH*ip}kD&(YAAJ@*7 zNxnzjk4*qi2oODvm>+Pt7zzG2x8E?xcd+F!d-z*lK}A%HHTE3$<-K;?>7rbZUR@^n z;{>w!$Xb&-!17e~fMy<3>R8@$GK5Y^GATK1MI6WXOr;(`3tV{!FJqWV+U-na2-PrI z?K2<)dkuRX7nv5kN^(4V&?oA%ESi?j(X=T2j)eTMp+hCCC1)j4&SeA+qAlZ{p=aaO znpQ3s)4^QT^CJ08mgq#r7JxTj4%^^FoMt*d2KSXav|!ghdYO_SyYhu5g4>X&^rG8u!F~vMj*2t*6$P6Q4bYw0giv7s1Wj2*~FaFGJOMl+})#+QpB*+aT zUW3&gUR~Y%em~!SX1{d1Xs?rPz1!c9uBPRV1Nl%7q&4_K7<%sbN?Z-Ds3*i21c*us zG)2ZU_=)<>_;C6-ocrxMOLw1Eh7nAJKbpQ&rFu2};J8apLy0QLQA`kXMQso2bLOk_ zJV^y)F^4VbYH;q|&YSfEyIwYVFr2{FD3~?OhyDxfOW2*5=P@P6WGDQeX4@m{9vN2u zhj+c+?bXG_#d1MTvPuq@9T_Jyo6E`t*(_<3*27 znp-4i?=U>Hg99?2$p_~CRWq(6T_|4{5yRrs$P7bS*Yp*L*HU^30w)YPwrcCto}HM_ zF8lUd8O~N3_!MqoSf?JdjfqWDJfR#`zE94;b-rPj2$nOr+Ri~{uzRSL5kx>!r3HFjWe2J7woIo+Oi z8hgd3RX=DU1Z8*LDq@lfggF`7$=_ex{OFb)&Vy{r8Yi1pS!c-;iw>w(@<^2x< zUT4RCqhA&t6o^!6^#oRucwvlH98o>A%D=V}l=u%AYJKrC`9jvv-gu|ztiN_j_{Myy zLSkR65u5;7#-a%K9sQrkKIM}8~$6T_`q4JT}`^_7_|+kSi7Ar^%CCuO?toS zr1@sL6nP6^k=<|b1}N;HolvN}Gt#g4;>%P@weDC-Hv2liCSx2hle?BODYqdKz}!4$ zP_Ib2l*isY+$trQRHCpgzqUbWhL&)OlJde+rW9cqOC}gl3D0NZ%FGYZPnfN)cFMVa zSVu#syMe3+53g5*L6&CugJt;_D;y!Vz0oL4IXI32_kQ&PcXF0)&haooeUW0Ig)q<} z-XQ?4Y&}U?Hgo!B_N1b4mYh7UvfJJ&e({ibB$&aJGY#K&%3KczG2_*t1JYX5ojnzG zBvi<4KJ!%1bhF#;AW}&UbO+NC8KnNRnk`0!&FYk)^iS1sXu?*|5&%S1l1?hS?;+Lp z%qCV$*fMV%WW-Yo=v=5`noj`yb2NeRH2k1<`}yN`vHAdq@LqAZlnVJi@O-08$){}! zcBa$$8TSa5OIjBoYKcXug6V2js@smWJPOXsJfiBN+>sz0DmI%8xVwAqsE-&6UiYN* z<|weS=P08y>BunbGt&%$E#9(uJ1yBF2L6yv@p_sDKV>lo!<~ebL8u6%LoVC485V}J zd%At$Be*grrDrz93I_sgqMG9_Y%_VWZC3OYL)DPcT@UHG?PT?8Q~5GhID(9YL_^MS zkdoY@)poNh?Ui+jD!>^1sx_~iErC52t0|}LqWRnKutGxxOK|C73JLC=o&@7%?cOH5ts^f z|GC!2@>evnlc|@;WhXm|&@4lU?T*8eGU>pz3f_~hTw*dw$~U4qCli0Iyxg6h$gv-! z0`bPXiO@47D{z`Q7Ndv*SZz`Q^t1}SzO;S775<`p;kQ(jZPKM@h!h7cMj<|IEdXy}a9|4cR;QFvMq?skhsJH}BeNiA+E zbk(lg(fq}&aU?1O4LXDF*Bgw^tKgIgq+;7=Ol==a>8<99L=(*w9rdZ(RVgF1Qii)B zq+;t;f>e#)bnyfnU?|763?@VEG0$O08iO|=QCDf}fn&rQzV;ewUYEEQYVk=TCvIr4 zJkrVLM3N0eW41Fw;jl*dZ(>}K{atdaB49mEH3jyGIY})xUmnrY{d7Ii%E=L~ERIa} zIndb&n(bfQid3iv#vbh#r=?m?G$gQkDMiXDiW@4Y%QkaW_i8shqomM@ruCpNmb(Zj zS&^YgQ@PlgG@JWXSEt@nEq$aQ0w_+b>&<0CBESw-BmMH6gak)Ur$VX!qH8cEyTucF zJiZoHLe`7sH(*mQ+#Yo$I94h&oo%$F-`d$m%T|sz>rKi{WKYf>OW1R;EmfT{gkZtK z2Y3@@o|Rz;d7No(@+&pAyKa@mt1K0B^|Cg4rkz#n^A9@NLKuP1_lXN4TNmYrTRD10 zfZbzn1}eMy!y;;8&Z=d2Qkc`gJ$yr{GhBggVhWz2qeY$FGTv6)1V6xh1 zjg*x;n^o^B?1onH4l(`dBn=rCuxr%-ELdF4Sh0M!MmWZ|>lJN|6F9G*;H8{-V&p{4 z<~0mv)1-2GCya}V_FVWmf~2_W#_(|tYE)VYS~}BK8J#C!Ud`!-Fl5~BmWP$h&DLeh z0@=!3N*GB|yA;kK3>QRz;Hk==5Xa+-8|+q1!PMPZf&p=?GFDnKM~4O7T;x~mN6@t{ zL&vR9VkF^7g75EH9(~n&USenj`iQOgsjfW;f3P=UTQ!m8%T8$Uyij0s{l39^C@G)f z$PDz*qk4F|9r4?G#9`oES-MKsuL5n6yL0RZRM4l?DwJZ5&GLUD##p+eQTa3%pIE_E zfPJYDLqWxbyMBU_nzsLC`CiK1CLKEqGen}6>4GTC{51GxK>C9rS1jXt;xZG;!zG38 zwP0!M+^(=1Addg$abOnuKb@BuTt${$8C(dzmwBbilJWLIPEj7Lw;N)oIEz3~k%V70 z@*6@jJF4fBqkP3kE=Eoy?0ON8dQ({KC?vaDQ&iR32}q&QS_4B03?xu|ap`rY!zUz( z?@ao)r5PuqVUA;SQJ5nwel1J;QYg9SFl@q{@{Ccl0e^7>LB42~FpZTM=JL(1KPYEA zW6h}IL!r9t5Ui`~+v0Z6sxa=0I#Fj3v{#^I1X##&|3V1t9I|DBMLUXQ{Gocq7weI2 z0q#{rWjAAXrXULNVYp?f;Si{*H(?4JN63ScNR}w;Gs`{2uYx=4o|zyAQ={C4z&usg zlWm-Axh_F?*#SH@%Q(_w@kM2%Z^54W;~zTOcBwv?uP{{`BGmaXG25ZSX{MTfBi z%;)7IV~AAdt@j^ij$4(Q|C~cnVcCB^U(E=E1C%T3odGmW`QvAe)Y(r#Q`wXp= z9ji3t%_Z1gyPukp2O7`2gO-^@KHq6X;Pfk2+8o36c$x!*wR5+Iw3@i0^|e!XEH;}>BpE!nRoM6bQyuds?d9;5y4MXd+C zD0XVgy$eiawGc=odvIYkS!yr2ke=ok;!f!|-~QR~ml+nNi59)TXTDz*TxTgF3DA}u zBL|j%;GvlOLcZmCs%c<&iC)RfiL-oaoxvF^K`X1XRx|*LO*`FflSX90sX{ss#J@Of zAR9B)H0|CExBPkl?gm5ao(%nd@i4*^5OeXbf#;N>i3s`+K9QwBryk2sfeJK80;9jK zJ~oY&Kno629`~@x9vJy0G`cFL;b3JiBUl1N?p(j-YOVL6G9)6+5N%DL|Mr_06Wc8L z#EO-A&!^|H}p?9w3q zE3XW4BnrFquP}z(Mk1z~VPcF&&^MP}!b#)RKWx|8Sht@?97o3yHRX3z3Yu1TzVX?d zrr{wvVG@*`zaZ^w}3>E3@1n96`x9?tS1MaW( z8PButD(XzZ)QRSN4W}6Dj5D>XNula4?spYel#H!IC-cnA)g63% zoS?VHBikB!`08;#nUPTQ?xzMa0MT;j)zeANv+ZezCcNbuJCO1RP>(;++^3VzG~Tz{ zE;hhc2%|)H@(%1ekbwLPOlo}(1o}nngUWDBzCvZA$mA%)loKdl@b1=hWCI$$)#6q zo>$+U=heDVUfl>AYE6||h}V@$V+J%>(~wq7gr-a&iy^E~xo{X*@dGMt#|z*Ms_9l| zcaS|ZjBi8miSh$(!BvMbkE6W@1NRe?ZMM$H1$9y|6?a3``&c1HSm~Oyhkcc6Qdzb3 z{~HHQ5Uy#!RJTlaMwlvu-AcKZLwfbvAt4%hlGOG$A|Jrip(`wD^b`{h%xW2Ine^O- zGghC#P7^y}cL3Lhy zqIzUuCn6={KoRp7_YfO_qFnB|ECa^jtK!7PxiS0Ov8$c!?W*!l#Tiibz9+YSZCzTx zl!mIZU6`*ho9nshCOz?ZA6+s%&{ovWm)}ppDR@%}HPM7T>m=t{ON)iqR?})8)F_2w zcu2(A#BdG4ohM1c-15;CR&k3k=WqrOaNVmTmz2KgOzW9~ zFHN>dBo&H0GbJ|r8O)cx8$1J^^c-vuxOOBQT$t?e{JA{mDQ)j7=lFP91u3Nu+wgW+rD+o1wh!thwiM#1sfLRr1epQ$Rq zF;s@Q)Y`3lgrG36$0+cH@_ib$8zzVRNqY7D6Iaiu!uKx#93sKHs=h01i)eY9!iSI> zaup6(xq`334yhDLf&52;0<+#z3VZF96NLkpFGL)C}eU#TRN#e**MWF=Zh}HHJkGC(v+}W#Rru{>-kzow;fp{3K9LiGstN{9GgF z0kZOmia2jmr3;Z3IReiOJZv?c^ZtU0G%4LAXMgBo^5-@PRn@tT4oIIt8ne1$;&ovx zpil0lZv~ELTgm2mHdmt1`UoS|zIs(4;{t{eB>AlVSK(ZOlXp)w_)WzVlyi=}6s%#O zV_cIk+OjV3y-J8h9)v2(qp-Ws`4 z&r@{X5WVc42*yx*V`w-a0`^1cp{D7F99qzDWhUwM{JxeJ_Zp*cZ~6LS%%+@5w|ah2 zn7#Z)qy+h&%v-<}QX#hC!JV>AplX)U3rK_5gtnb3lz6{2 z|19%r-|g>tB6qPM(hg~f5~cFX5E^HUqvWIxe3}*6LYN9tb$R$jYEt3enL(I;NkPB} zc3)^ESy$L5wR8&8I#Z|?b{gujJ1f3b`h;G`C2kEzq-LB3NHSDGx0BVwoHocARrRtd z)?sLvPY=C4C6+VZ2y^D@3{OmN8#NPMYEO_otUJ=8x>I?Utv9r!YU^bbs`YFsUuTz@ zSNH-dwsrTI!xwf!6`k|P`DDAhn`4FX15{#BY~U^TL@Hj$)%qj;mV8`qKP=Z1<})!{ zOq>HwEZM&8XFeqKHNL{cj;l4rT<~)MEbAbAayMBlyPfpsN&aYLG<3VK=bx{E)JLn` zIr;aW7c=rNnj?jHohF)hw>!C8Z+H5rgb@EdAlxz@na_VAgu8Oj%=s9-g9g5w>P!e( zG{FSeZ?T#)-$7)5JIUsR*uMWBs|Tz9U}cmlV-na6vM?qS%a)y7?{ZitvmT}|>tQmi zhUrs7LL_~Wc|mOguCD@4KsRRx)d^#5Pt@cvWq;t&gLGtUuowv8tRLo|84n}WJy~`K z@{33EDoA<)4Prf0zFe#xFdK?+)l23Q!yjk(EC1ClLIEuAZ)M(;ExH-+7|&UUzy?HM4`) ztl$u?u2kIuhZ6*luMIJ%W7-WM`ED0$A|x1FF()c_UrONa>BTw&c=K0q;RxSGwg&5# zX?Z84?MOLVwu*YqXPKM{?D%0U2DYD@EI&>@=k&w^^IHQcZ_n47t_TBl1v|aMD}r=Kbw5wH%L)N7pN?yT01d3UQ|2> zyBkeeVzQ5vYERYSjD_GEQtgw@PY zZ{_Kvf2~Vby`#Ok+mL-TU(V7E$mab9a-#kSsra|d*Ar&-2oV7VDa!W%8V==sgia=q z30y@*>1&brkqE-8M}~`<(o?60hl;N)>_uiPin=a^E5Yob#6;TCU)Qz3@nKnKY09q!&)@L}L?#3c!w_ za1*p|MV`=R95nwHtti;B-)}$TraV9`=e62!gBM{r5n9beXGOF7?uAh8xCT^i2`N&P z*|>6%ou-7U)rVLUl({Hb{ZxDkqWJ!Mizq@lucZPSZ25(#zCm3O>kh6R;^e(MCH|IY z#J{Kbix_LtUJ=XU!X^JgmmleeQ;se|Pt!5QUiX+>UDM>0QKD1tt{^81CgmsVy&vLz}C(ogysT3`Ixkd~6LbFicGbx)wz?AsVPRZ)S!qd{6 ztFu2bhipdc(;w%AG-JqC6rR>@SQ0M+_|Apxe<)IYjnGg(%?v4do{m7S5w`eSlaq>! zlu9XUUrqBqFjtl*&H}$GGd`u4Lvn;5!}3ykyTv(*>+4R*x-XOUen(ggtuq29L;rya zH9C2=^XYu?G@tR_#;VfboQ{_R^qBK?pc@)Njw}_sg#|15LFEd5x2r@2EYpl%q}pb` zq>EW;Mv`Ei8e6uxLj`|Sp@FLU4NjSb&Js$B9mJ~Nnc1%&W_K*&BDM3fxE!<&fSoE= z_|8&BpJ)t6rp?k#VP>*)LF*KQPH0ieA4Fr}c!?|sB`7KG+#eK6miG}w28ZVpoe9*V zicwy?j2z-19a2w2h-TwUmABht&<@g7T+AT#J#eQbL~yk_0RO7GLE#{TVY-ElhZv+> zJ!9k^mQ7GIoB+hFA_{FjD>*!q7@=XRZ3rLg19{1IuB7?IBDekyGoHUlK3R#z?8==| zypn(o<)9^A-Burjnyebd3*?I_3-Q%eLh)9hljrCK{J8!UX46l#bInrd#$xsoR0j^Wqv(uj^Ru@1kH z?G~hZl|g=oWpvOuvV1Pt?x)3eN45(0T8N@Rwxnj56FK>D3C91-UU|j!^sQLU61D5?BjMGZgGkIEZ1w#B0hjBy%BtKEsagri}Bl*uc{O485;Mqbv!Xib3$Tu|3 zb5(L+2YICY#dNWm?8ul|iVKq`$rn{nRuI^D(5#bB)eJ?zs#_L8#bJ^F-HvhHaESeb zC_p-0``mM1OL`vJz)T~|9|f^u`us4AP6xWa2oSs(*}SC7AB9*P-&m z5A6{n2Z|z`8>s<-K6@j*vR1I@8+Vi{$cyO;U4c|X%Ssq8>Y?waKhE#LEJn^fM#DR; zr5A(2jkY#zn9Hz-W4I>XD3)yT!RB>LwSvA%Mk}+?;E2%TM9|WO%d;%W)|F4uqWUc& z2j&~LW6z0=p+qPHq=BG zZjd^?;OD&be%tLb|26FFNT9wFJ2(3a`|o+|{fCp`uy?XwzO2O` zd2Cng4=4lj54)AGo$_BEtW>=@wc;5O9Z|F3E+Y*}>s;5WfrS z>XN4OPapJ*9+hOv!#mhPaziGzob1S+laaGDd0s;1OC^%^2|VQF4&)%YmXG5!mSCgy z7O|ZdD-rRmOqF(x0&Td*YZNFurtSyWf*>a&)EBCy4iMV{m|}2+JZ#BCk#Z)h-S`gi zr%kP*r-rA0TS0lA-uT!JSxH%YUwj=c1O3On_C$EUKIh z##L0+h0eYCC-kdC_rAJ3Y&Cpu1wM@86fz}2qp#I(j6HJ6-4K~f1zh;xk4l^LQBFZYBBW0<|R>@~6Zd>4&sK>Pu4+u|D zb4Qlc$C2|Wld24BZ)o^FV6muPLKAvz0C_-$zl3$4xd=I>(p)6`fvCsXe#5HgZB{RW zaNHPX3K$)^OjVoM>7EhO5*QF$SUDDVd5~EtE)NUHCfLOtAxiTi%qG&~d#xrfgjE6P znu}cq9z*Hwj>@XXEOP9J`Bk{@AYHL$0pZvg^gV+#V2LbW8>A3e9nYKtlu?{s-=jJ? z3?;agFg?~UDTOf9d=-|YMwRm*^IR=~EP1G>8$j5L+z2qGce%j-zv$eiN+8$ch*$j| z1&+xIR)t8fyj;Kun2IvnunIVi(x`bgf#E+R~UIdW1;5tbSm+KN(%85aKI{J8#veF$240I z1%M)LNcFTg^d?k{uI?08p@bSdwsu){z6dd$i<+Z2v2afu{N@#e!V`^&HLs3leZ>LR z81j2+=%m5fdEJpowvOby%JH`MAb;wsz4vj$52(wUbE=w>B)NBkbQ6Q9Em>DUg6#5^=AKu~qR zQfC>YB@fR0WnYSa079N>2V*r*7y+xw+lQ@^JD?P$$=5>5olfrLHRYV90*IZ0zGo(r zERqKnRVMu6X{m->0^tp~j}5Yo6{hw@({t+R2IciFRkD_X%j^Y3@YFudE_7tN=(sEe zFRB!Zj|~pQ(F4l!Y;-v2<{5jA%J`5JfR4#9Btlwn6(33>>bm3ERN8JLST8DOprH}7 zhbO$iB7qKr#Ja!71Dqx1H);hp&8nZzsxZagnQ$F=%Q9kQD-E!Xwtymo0c$xcRY7RT ziVA}*f#pLMvf!|eFis;EZ!DAgP~ldC#U6dz?cd<`ig z;kHrjV~C5T_fOH|>nx2dNOJl*HbqE-;K-Dcikw(6l+Qx{ZBd-?47ux}3Px?*IEG(V z5y%4fhar{cMdP1}gt+IeZk zv3?O0dLXBFv!q>0%G56HP_Wvv7%ASnYASN~9E!)G=dO|P$$?;E4J=z=?)euzG*X=T zq4?~1+J~<*ljXQCs`oT=;~XBPz_OQOEDJ5j83ZUDiwc%J(Vu7SI`g^tkE(j&g0!|w zgct^xl3ZyRVAYPEr*x1!f7YaQuyJ;zLR2TBtcq0wn)x91?yx=r56ku4WXXEcLo7$F zs;sb1A!bdH7l{|>?Y6ruz-FN8X!t#KG0!HDFEUVZ0ZIjDVYgK1c5W6KLtCNiK$NX~ zBO$1FCuD%xVmf{|#O%T|UPy4lgC4ud11vik-S{0j0Nnxn3MK{=rcOVQFT1Hw-UUy2 z2jLWvs5nGrctkdb{BJbC-W)LfAJH!*9*EzMAOJU|qC1^`nm!^)0M{ZEaeebs3jZVQ zEh9337`Ygpx*4Yl+yY5qbgbzv0mUDQ!9BB+<>JG9`FV5)eV~3&OB?K4T=R2GZwOqJ zPLI&$6^J@Qttqd_sI%bVYfHGn8DHBGhv~aWll@BChBIUglmnpz6{@dl{i=l?WH~&0 zK`53!y3RA{8vI}tuh2F4{(HFw_BAxmQ`xZZzlTYK!{|a;Y0vWZkTq^5pMe!Q zNPi3>kB*Z(9Mo|N1xuVdP9Yvgo-^9k3M*^iDbk+m`CE$~Bm4 z5BdIRq)LOQ6ME%hLIL1^%IIZ6YfmP$g1;xFl9>8Kd#HtJ zMQ`MCFhx3mxdlot21<9^rPhNDfNKwdl@uh=3q zLu3bD@p+SKhYqI4kSAdC~W1)bw1kr0j1lc))T`c(M zbzdo4Y4jQq0WqWHLB~R{-R}Go;oVcp@UH*(8kO@u9*k;xT}ys`oKHRwUjHLFA}md2 zq-=G!w_2}&fuJ<$c9p-l&Uq}$jQY+cMOO+FT?ZJ{DPyNNG;AvzykzwRE3U#hU4eU?11zAGF0T8TtC13Q7vS_A`K601=18otFcDmm}6#}aKckBIXmJ)WD7j0&2owNgdm@1c4 z9YyEPu4o87wqD3f&L22eAp~ORx5D;SSgQ9VDavHRp_ddBuiV0O36FGA$$e6Gwqu?s z>P8}}K@*P+zeXpDVD-St;H%&gQeMiPM4>cu%49!dDF>qTF51>KZGbF2>dERx;#J3| zWm9ibsQz-QdCZq$Y5wsw^KX@z44WlwZx0oLjbm{)rB2~CGhq&ln4EENPQJfdxeu-Pwl5+o`NW`BMzk+%OOuG zxTcOt3eDzDx~`_R&DQ7v8)Kk*bjKWFH;ziymq-BAJI9j_DtPHy;^@$G<`tGi-KO=z zVMl7XgmSEN;bcahCG+MLMjezi&l0iVE}S||CR07we>_}(+~Zyx=a2}!Sk7-3+585a zP6>nB`DuC;` z2ad>T)i@(f@z+a7Du!HWqjr&(pf5F3ijj(sg@K>4+!FwB!F0_V@ZF-xb{_pPqB6w7DCU>ZY4V)vj|Xx@@D~fzn-LDdis&UCR(1Q`i&q`;e_ir_ zy_f9UzY4rq)bae&7yta@V)yvs_QmfMW#pfctH~E0h+gt*xA50q(XUlUNSvEElDr z?&i%i8s|TO5&&9oj2tbAV%;dcqNfTq%DAeV4F~32%@!}H*_}o;T_Qs`@B(676lB_y z>+metnf95;aXO>fZkR^^dIcAIJgxaT!o63ldg)lr@#>MFu=IIVbLge4%uxlFHL6aAO`2kJJA0lVw+b*tMfbkS5d=6GPcM(xlF775M$ly)4KI$b4m zfX%5pB38l4mb_t|rL1Ftlx0M>J>&Q2yF{q&3Sjd*6Uq0u5upK(e? z!d{rAudO)d6~tu>@)w+B{at?N2^Dnswyqn}=b8y`DP}kcwdoVnE9R zRHFW-X?nD!B|&v1c(yQCmn%Xovkj#o3@AU+6Iq%ODGC9O^Ssf_$-hg5o0X=w`)71m z;t}=1?fVQa%aG+vEy<{q1;bELl8#h6R>H1sUHEW&%j**yJYbx^BNqV%!7N$rmrJE$ zuPi0!4Nb{;j+F1hJlG@7(Rl{fd!mW7ACwTzaUL7NCN-OY!u(*Z0V_92v;r_SHr0N0 z63u`|mjzTlAi&;nXNQ3<%G0)3#hmb{A#G7>wy}9L(D4Ik9_s-^-bzjQf!I=CJ6~hf z3w^wYtX}GCVEC&h28E2{hU9~SWx!o@7GG36=9B%W@4weiYIt5<^Fq0v%Cba-9GTpi zqhz!^HmL?C53?gQ#yFi2;vpm6CBNmEdBVXgpXS@$;_kR`3seuzWx6O&ML&1cP}>>l zji|e$Gyn=ZwgRS<7e|J4HIX znbGpZY4=%1&{alov+EDa(}2fDT|L))sE#~@0{iP*>@Sl^q^k0qDW;N8`1b;@|2O2) z-8Ri8`3H3Af|ERvM(J0BDOVtF|LD#tUmXlsf) zj9ws?w#J@YR)c4A*3_xrE6dx}MU{2_Fu@7M7N*JX%s4><@4wT}cSvUG;6TU8D@)^b zzaAb>^LnM$Q|4J@slIQEQ+?I!r-Fvwix^T6;l!eo^uY0%>L8!9eU^RZ9sdNOgB(-vll+l&GpiD}|1-84cmNndX9nx`wN?w-_z~~!mykEEb?7;D>i)gJz5j-CD(udEu%_0oY9W1nLJNi}1whMAPOz`YWZ-^x zQAryMoo`r724~kv(?e~J*q>lBK6gu>CZ(Aat2hqz@2pM>wV#!ZX=^4&9~@jqGrVUt zvC!V(>|+sS&a7WoMOIW&JklJR+Bka-bm}ORXRJNavjPPQOu2+dqNlCCGR>=HjFB1zGoq8@4`O@2|K8eO=R(u{HM>B6_rl_YFGD~>ic~`@Z^Y_6 z?LZpgm%wIsGHKDhXPM!6?@4j=)8XID(MVZYMwt7OYV}bL%AD_ z!Ck2PnO*r{(a$4yvMp26)ub?Y8(DW=7*_&WW|$TCbQ>WYjYFSzSckbXHCk5w7>mr3 zO?dwD?|$bPT=5Z!rESm@r9rAg#rqpIDhpQ}lD3tK!a68(DMckzBpcnv%yg`HycfRV z%5ao3uJDWi0kH{oGYCl9kcU1wJKDHuqb%a;Am;Kh$ZVESDec2#SJ9iUjU6b0a2f~* zCr2`0z?qpY7vvlA#OYJIT+=3M-QN5CZnNJ}DOMYSwmRv*EX!hQvQC*-sNHKhL?>hHTn$MfKpe}aPf4bAF>?PYVICH zHC^ulx)N@m$gH)kC_k&kZ=MCq_2TC!$6eb?wj3PVvFT<(B!t?+uOLj9OdsbE2qC+H zCN(r&rxEEwt*)FVzkAW}0YKKa`$JusVLspOH-S!<;>G9w7ME-O7#6}8-ibmDRIR7v z(0nPYNWtPKaV6K-_U^fZW}{F67oyD{V~mEHtc^Jsu~xq*3t?!@K0a#5nogVp6YBda zeN2qeNPQOb)y35#!8{F*M$>Z>=I?lwCK-Lq7Mqn%SGzpM!9Z_-Vn%Rg;WQzN^aM@} z`uRFBH5Ll+Cl&t)3{4HT#^8@dCcQ}wjn`j#z4f!D3Z%w+ymT|a6H|vFuQQDtgB~<1 ztjS_q-bQT~!p*m!)7*E4?jjxBl33p>Zg9j^lRKuGe3)&K73Ss2xBMNdg7Ls?2~lrX z6u5SMe@|$fCzbJ8=5TjTR9Ip$&HTx_@A7@R(+9(To0^vwWAEpHli461j+yE2gqN&2LJ08(A|0 z$TZKA>3T^t#rN=?3IkqCh=EU`r4Off_Xva;-O zou+TGOo{auE6sHAt*KXRh#^>0pWKjh-8I~Y=HU-?AHoaH((602D04j0ir6{D%+qu? zLi)Nvc*$@6@|iv@hHME?si5%IDi%C=oJknVeB@qLT+empbdn-=-ta zAs^%)CmT#0L|2=9-X7l^Wez{8(e4;E-2G;`1@bQY?WGA{gJLi1AST0k|rhz~VIJqk&$^*0R@|dJ3 zN^+4^7gRqQ`&rIc&^B|L{90^B-<*b1=`$;r{oNs94U^@^$>%(s|FWMf!GQx@A?Hpt zpVt7ArvPc^b|W=8+fiMl=~4Zph;d2abVcX!TyC2kZWr9hS2=W&hAR9$8aks2zm{fB zR*Tutm`jGI^IRA-NSbI?_szIy(e|v?yT|SNV~TvIFjX4YOt|hq^UlgQ#6YKakd%yh zb)+Aa{DME~nTy5d9s09a4#~$QPaY8-#9oi`Qp(TCyjRo`8!7vjT@7I^c7-JZRfs`N z$gD{Mb?QYWZBPuUKDOF_UVF3>hY` zi=EbivR9Mceiwo=-(RH@!J)RG+X-D=%;L!Z+nrLyQH=xuJHco`1#(sJ%?G-p4|!p? zBfeatJXowI+1yO5BNqnsLoAyNnz^P;zFdHYk?*!eib=3C)}_jr;Aq`0nw2@xF|x@B z)C)((Uo2Il4JEE5iiMR=vQVNYR^r2gT^?GBN7W zSGV&!vUL#yTyD}-Y#+zEwi*@=EqDP5Xcf71)FPKczbDWIqGNd6o(?Mw+-04zee0tU ztH-0GQ1Wpoeohnae!E^Nc@5sB0eaSn*{D@%LnQcvm1a<_XkQh5%{RSM83thJ*YpTE zS^tz7y(K|V<}AaT?6mM8GYpovFz2MKpp|*5?V{yQs)AO?G8%8jO8o8hOoYr9*>Z{T9m5PQFz#E$=8!nn5lgcU-ywwN+7e?G2RWOnFvsw<$ z*P4O>dr_7;;VUhI1T>c7T__ySL{PAzh_o}mT`o24|l z3t<_|>)KTS0?VnB+YrUU3t<>$SFe4Q&Ez^>UF7|>%ou@Ks(e@3+78ZauBj#TQ2q&S zSW^k`EsXHr#^8VNz3lH~J4f;n(n@OY*yD!cSz_aw*g0h1y}&je+8)Pq%!ENP#Le?8 zQnWn!-WzUc*?PyB)H`G>KSZf0qDIBFZBV1a_R5n4(0num=CMmkUS34z*y*w$UkSU(K6i7AV_K&t7*CwZX0P(u>WgBjlyrTm14%|bt#Xa-7 z1tq|rvi6YWvZU|O!1?LLNN~xUq{ucAeSRq%%6WTC$GOv$KcbDCpzM$pul895+?36L8KwApcqvo<`~*Gi&P8LE%hXIhZ-hJ8)_X3@!1FNF)5 ze`7nf6o|31-`K9qEnF;TO3D$IQ@C{JFy8MZP|oEz#hG`vnTdTYDH~*pblID7qy5zDio^k*8KfOO`uasbN5< zT9#NlWvN8a_jrb6ikrU<#BI+Hfj@%^m`(uVZ3ejw&#VA3*>{BMj{;v;;E0J8l{(&a z&}7GnsT5LT^9h%moXZpy>!;AKRp@6ZAbmf!YA&HwOC6rPI9t?|mZWtQxHFml%<@Z} zLq1i?WhR>qoJgOfx!@V`RXWGqU|kCNuTq&Jo5g5^dTb;Y5GU-IUJ6#OaKD%@XXv8r zb`hyp0gC#feBs3AQ+`*WkhC9kXi5s0siRZsFNUqdJe0@TVwT=-*BPXwETFcJW>k?U zrBgD)4^K%p-#(BnoPA0^%s+G7O~kFC*Pqj>QTqMEa(y>h<`h1I{{>eK;He+Us`1B? zhjrmUJ@`)_E;+#$Qy?aGQ3?Z@!d>}ty@FnNj+Z6oeTn|A1lmF6oB0%8g6TJ#30a@T z?CJ@>A@7F*0r)cGOGw2ITRdPP3uSJ*r<5?0X`(F@E}gbkS(drJbZqkLGjc*QvJ*RK zrv3URb=-Fa59@VYyOzO-a-5&uT?@AoXTO_dKsT6MoaT>&60D0);bL;&wHwTfaQPVO zn(Jq5zm*~ZLKPJ*{A88F<|PlP?c`)@wq&~UHRe;!;T^Bm5}YzVub@GERno8Pw*!?wPg2ky;%|}U9c%6i#*K;+g;G%IHm!- z8wRWyNQ(qXAgyo*xn;eZEK|lNpjR3U23RK9A5Y)38}eJu;f>hTrt2lTDmRa?H3)LL zSWUO-684Ks?w(wpKhpNv>d-`r`*g~ha3evIzwThQ)bG@{vz4`|uGfK8geJ`ZUP&(6 z5Lqy{uR{V?$l#21ve==ul*6`e$he_T9|IW7?M3C;dkgT1Lx()kGEk#+aasI;;gyf1>dSdz_eG zOBafs`CPl69>3{2%NF`>b-N0)A-B!ulrok?(O=DXI3l_}yNP4Er)(;YS@zU-+S`0C zrsiN!oPW~&Gk-mIFcdNXx`z5@C$Pjob4d2qMreoG#VBEMR{IUoBiScwmS^M%d=mO{ z`I$FR^=1tWmYj#tHP>_TOwqlj{BFPeK>qcx$g%2(Y92t-aQ-clKV=(-snv9CWRFGJ zhp1F zEjiAVJcy=A=rl*EjlSH$TG(3v4212Q#ie>;$n&YfG9BwebJ}sT^vG?A`n!O}n4Gy; z?`O+|N8X&)6Vb|N5T|hrn;kN;_T;@_@!%ym=2VM#8rQIBV%JEdMcaK0%@=O~H z%O>%aZ@qh6r@&`hC)ttpNcb7AGykCC6&}t?BS`k^vT}P zEBNg(oX}^uD6-qvWQfh;dmY!P9P>Q2D3Or})v+jWiIQMXj5A6OUQT*S&adxSPNu)? z7h5h}pA2!Qa3?Y&q+4(!+Ammferoe7^PJ=AIrcJPubuOMSfp_x#3MgJ80UviMMoDu zrrX^rQF&aVsS>svl_bixPt#RS_}!dx=|yt2bbgv;)K)U7M5TRlQF3$p>iSkvG19N( zSBYYqIF$k_Xs*tGBqRGh5(s?DMk3c%dj>oQQ_!YLHMCTm8YMngd_^LG9Y-;AM1C4?w%+DIlLP*B!2x!TTlnSu&~vdkud zgL$h+89nU&Lb>ga&Sm8fMfXndp?Nozo(=4 z{(CuX|26tZ?dx!yj+OuZdl;JK{jPZb%NH+|A+T?X<0Vy&NVkl%=oxvH)?!yZ7lW-% zUFXo=McL^eT^x2a8i4O`WU`K09PY3K?{zJ9_;Eh@K$ziADg4i5hU4^EPPKoSPM&>0 zA~kU2&(o~V0v&eKL3jHpTvur(Al&N5u_;Lc>GIeHMhsO@El1BH(oCIVai30Ed#_q@ ztwi3GKNTY$FT<^lW~7UT1W@f2>+yB$%)CIi^|EtT#!_{!kQ@)hV{P!hqn1A0V)(U~ zHV0-ZLn$yZ9Y&n4!;S+}Bsff?cnFVj9Ns*hKEbhmax6rBJCjJYD+Z?>X85IlK<D=0gi z&t5E6yMOU3FlFmIk`8#Zr%!h^9f;3mX&u}fg=ugUg6Eke>=_n`K$bsZhK`<)MAYrT z%ML#t<&k+bE2k|0J?iZiPQ&Il&b*)aKUI)l_zoIz}n18QO1Y$-$ z!&z`Qn(zD`GHHJgckqDraeDi%2(RBAGg%Cr8b$ z!QICf-8%Y;#WUG|`u=+?Hcuzp2L$wSaHarZcPRg$g^zXQ%3EbeEzapUQZ{1fbSjcT zjOP)4?usfka-3l=b?!YoZgLW~K$Dz@>1Nx~WF~(>qisvn)t>5L^EGb!9X9 z*>o97n4`2Xa9B)u00shSyqX{F8JU2x42u*2iQQ({qwQSN(7 zukZDYe9M%q%;bJvmJ||G6@_wemK=731}7U`m3UyYrW-^ zFk+Wo9_%2q>ZVtz&q?c`lUjb;!!bh0W)KECdpJGV)eR}yx+PX3-E577KSpd|?7iYt zhiaCe->vtnnRT`fAESv_ircsv~(0$dW3?+98pYG|TQd zfu4Av`1mh`s}$5+Y(2m#%u zSFdkQ;N;RAPuk|deqB1j7hb8iga7-so8ER{0dEGf$%DKn*m18L#v7{bs(($THuQ_zBcEs2%fq*o3Et+opEVq$5-I=Udq?dIi&w8PSz^ zCx5;r%5Yy!8anUL?t?IXe1+IrdzG<^1YKl)+W-5|9a}tJ9UU9q{14nil*e;xko{q5ku=t62q+G{CdQ0Sw-@R~L z$oq83pXd^?w3v|P{@w39FZo9OqC6XZ>a;nnzy0R(F#yylWu;6SFfH_H3d}r^EruiVx7+@&lw%W!UN|cLd#F zRd}6{3q<3DtJl-yZn2sm00eCV?Aq9%6NAk*Cy>*!22^m!uq_%HL+)7OXeerj!jcT8 zkbNdw0e>aw*m()_H@>u6s<~v7dy-W*;LhZ$@35EG*i99zq1O%mG-BShUiSj=ns0!k zkM0SC-2!!A2nq66MFF*qHO5zas1LLe1T|l!*-FkNstX~5VjbH zKp}4JN<-_NYVRE1!eBoh=TH1=`MgA5gk&*W&J|>Q=NS0X+QaR?VLICHK`FaXz-L5W zmx4fp7mYZwigEKP>SN^h>ns6v4O+b6KR`2eT|ZyZ>$61rzM-+JfFHNzo~S>%Gk~s! zH@67Y;!(bpS63@CieYLLzq|ona1EpH2A+&+C%3qIH+BSFU8SQe(~uiVyJOTV!*-PQQ(k|yUN4#ECpu=;nBS;XH;5|HXdtF!|ZwHB!!doQ-?s)pJdu$n@PrFv0?uUeD6#wyW_ zt%Qi1N(ls`dbFFnv^kSx1-X8&;79*KVteTcZR^O$P`0&xTy@G}bJV-7Ra z0CV=2p$3OFSweGjEJFJ*6@m~};%`M~uTsOX_JaoYfi-#wFmJQly`Ax&VsC%O>@tuGxZ}r097=J=r18V*m)@M zBnGR`g+Rgevii$jSs9A{`22#>zjQb`6R|YwP&P!}8o}cYt=2P!eHz;VwG@{{T+tN~ zE{bH&vl_rLRSbRuLFaG|hQmTnmu`7AmI`g@wE$*w0pdW5!M8|H>C2|k{Bp_NLJ?mj z6-M_u)*;5K`6{*PFkGXp1OxO8ih|}%i)N=2z3Qw^gjT%8iqW>pY#H>rP|Lr2AvN^C z_F$UBHZ%>w>E%647(F7M$)VJt5@^ihwRKdylS6WFhCI^5Uagi96fK9*?hFvmM_0hJ zt974%?RvDS=#i>< zY6g@2DT7h;;HLb1R)0aNdzV8|dn4sD==OaP8f;)@h(pCcq(%dd!ygZtm=-A`rR}&O zC*lKH4;DiKZw0ev8l@)iFh)xq@}8^GuCZgb%I4H^+%zDZqJTg^=f@gt0r(rsTX<%Z zPgrTe(p(A{V3?y$1;RdL54I@o1y{E!H4?O0gEGKtov87W9^<7Ege4+Xl4|aZA0?& z3w*j5JBAfCIQ=efY5#91@tMP1AB$&Q2LrCw^ViB-p~i8Wg3O~~wfRb;-C7Ie7^R%x zs7-c}iddz=hqL}(^!8{F^Qd6Zm%7J}G`3N(h=CD9tHMrgtlOeXby~IRgjqvvXf~hWJlpI5Qy zj6hxtbFG@cU#)sOYIHzw`)}uWi`6VFzIn`veg_S($RwE~2H7k)&poxJuTE*u??RRZ z#Mbm&sDz>Z-3S5tX9RAogg|`sMM#I^0(C}rtVyB*v8GuzP)$(QIxlU%P}xdv3FHQm zp;4Wjp^DaF7iPpzJgUlw_GRW_oX6@(Ife{oclAe$K4hBy>qJR=wm_YVc+jLHa#g+7 znE`jSZV7)aMV#n*oKkBR_peZ6)ucm(nswD~KEtdXxV301fb>{IiN81HYgQxPmeUh? z7FZ4Mx1u-J@O&R8$o#8pYQyrcp1Ih|V+?uHL6kc3Kz+>V=a0*K+)6@0MtnHzluROR zKWwC`9!HsHQXL(!$@;4yp2PV2h5u0X(v;*9v=|Z6QUnhXYBANl82GME$J3$Q?hGa1 zP_H|DzIm;h>?2Axoj%>U3v0s5>Rd+3A>DW}f`kV^_m>gH!(nDvNur^SA{Q!}8#Tj6 zHv!oS2H8~UilhjEwwfY2UJ>YIv+fk_hmOe(ZpmJJ20e$Tbsx|%BjwsLHdysIVk+hT zI>=wRbq`#XAFZUWaeSUZ9$eN#Ppp<$8VPpiz+UUa$+lLimYZgzR4$LKsU05!NKXxW zTw}B0F0+Hd$sEAl9%*Y-*terVx-t5WAFCI-xNDq7##IgK<7y-(@W~G2|NV93*J*LQ zV>mThFzRR_zFH3K#fZ>ucJ-0RYB}s6J{;C(#W zm|UIiYqfptCCy;s3YSt5cPt8Tla!tcMM0h@_wg~52qYPC+0@$eI;MP`rrc&n6)m1j zoj~8c;Fyv@R-d~~=HU`trN{X|rNRZ!y2t4fiAna+T}#53b$slipj(<>_XzS}be{TK{wCZ}+V_csB9P%AyQT0BK$Iy5YpwSg!qjytq|>Oc{ocpc@UWv2zA zGT1wDw5jpMZs)WGeE;}yh8B5Qh>F-WCtrv6J(%8Bp*=#=8EUI|gr>5emMSEhRqEnf zk)e3|C?AWLJ2sl{VG8Y=?6=nXx!ux3t5zVdU(-sIJMv2HWK%?(g1y6hV?$(c~KS`L!ZTN8*!IJGmW4 z8y6Yv(yJ?!bOyV;qDd#N3PHp+I<{9QxcGphZ4}cz3s#^fs$D5cT1|Ir1B#?Lq7fbP z#ZCnGRrRR=eW8-4dE4fy+TUS|JmXp4_43JEkEyB(=WoQRQ#Td=FwGXqfHhih4L5F3 zSi^6ql`YoIozM)gW8BYrlzGgy@-cw1W$0&6N zFJ2Z+RomH?#}NV5)0Gfi*i!oh4G^LVJN0jv0r8eu>iW*a!Y{n7Zxoo{0x#OvMr2Lw1>Ys@M;?+-84Hur;B3 zHAtta=31!qoxPt$;aXbij!%5 zto7%|Su<9wMzxkMp%sQS$#3I^T#HqXw$Jn^L0;-&Qs^wYqAgjJ)v89Qn{IQ2PSgjq z9U}xUI9(ql(~vH*_CZk2vdJgR7O9dObAYm-CioXs%Jkd?sfUAS?5_69C0E9tVq~tk zq8$gssc@!PKMRa;`=-G~k5cdT>)W)Zn5^VzY$v=JNF5B||N6R&?8@c%v zRP!Dr{X?rcI$CdOjD8Wvieb@&6stIU53q)@PDE^t+^3GtS;0|%s3C>7kSkC1u#3vPnI1>vO&4;`a7{KyaXRYwVm%&u zfK>1zcmI)gsyGlg4d!eJNq+7$1u7vv6lcu;7W6B&5l7>7@wQHTo>V_NoLU^w8HG7c zlBs!m581T44J?Bywn1c!p0M;nWMilC+B?VUxVKR{Jo{SJg@fRf8vhmZ2hECrCaLBM z!#`Xmj-&K1IMdu&HCQPpCwiwX&6fGCsDsToPqnNQ(ZIJM&uwDDAEZxoLlnEgcAn3- zPjg;R=Sl#sr2d_m>YrM@-+tbxYMMufvW%lTxVU%qs^V&#MX3l00vXrKv!m&jalFei z%6LHe(rzIWkuJp`c5c-7_DU0)xYZ6*VJfr4i@ZzWAy~dPVu8z_M)qs|sU|vE`x$ml zK68A-6tyf&hS{6gr9c>#mCuJOk@4z;dj?;P9R`@lBJE%k{3^g)` z2rgGUU%Pq|N_aTopcTw*8#bI!q+3*K*bw8W+eH8H49P_DlZ24MndKFB^ zBGkvY9-p%f*#zP8SsYIYjPK>a;JYfO;_tSLc^)0^@K=YH-x&I^ef0k4%x=-sgOA7o zc-$SwN}&-C(|wL7@%ynwDq)6s?aF7fbJZl{rqEbw)VM8B$3j%5;2<~FK*a`#H(R6} zI%ww4RA^EkR~(BvPW9Bk636MfWhHN6XdPmSbi9r@{(FOlgT43F&>hSuK_S4yAu?`D z5pUUG`dyB7OdkMf$0@OmQ}}u!p^rmRIGf6pW@&*3sU0rQTGnYUIAuAQ*$21yYyoeg zxF^_=7aAXL(UH=7us}5nl5Z-gX9Y9OWMR>*H2Vc%Mv)bPEwPDw=HTO(4a?<KlOJE{Z&;Mv=JTEQ6^%$+ReCSWDPD7hFSy< zd$f_%jf&T4Sm{jgJz(LFYXB{SoD}q|4$nqcQ;s5aGl`_WX|CI&bR5=$-)k-LsMQra zl)l?G1i6to)o$cpEs;h)PFCWB2!@`&jDRUy!5(Z@VN(rg&An(f=%UI_HO;3x6x^L? zkx-e9RKa@FImrRQ9DfzdU!C3il2pHY@v1}quS@=~_mX}4SAiF!uDbiYng7!l|NP@( z_xR%W#qSvG@IND0l0WRYB+irk+AaLGSM+Pu(UE5@$Of>2A;eOfE;v=YKE`-keHjYH!?rEMfTDwV zg6_<24~@5$6-~Mb<6zWJEMf*}dXye$9i>`?-oASwqj0rc^_3EMF_Eu$53QhJv|Pjp z$Q}ZD=a?G*ZLsa?A#0=}27F!BQ7sx5W$EydVV1*jTS{H;{^T}R|5D~cj+nbF_&59L z?3doWDy2xaO5ex2X;wAdw-!EhgJ4EQRNvyRM{U;d75HzT)A8yCdJppL_=8r=XdA^3 z%lx`hYZ?bqfTqm_om(HPLA z3=?0`p&i;cn5n@TsNqM&ta9r3EjWbZffF92A6;!#zh1&%i*m_POnt~Cf7t=(xP(t* zho@s*k05(K$VqqvOPZd-VhigRuiyW>+kVj#NT{~(+MILEsr4o5L z&ZO{G)-Fa=^0|S;WhkXZ*b?c>KOjbNrD?Uy>S8QFjpDwVDclF_yzOj`*sh)*tAwQ* zL6(B4HFLandw1(SF&fRDAU-(!AiU|wxz<(Kl9GtnzUSgH4yt1@Cc*(#@1wJSm@0f; zUlp#L#pPryhr$vl$ss!?pN^1BjTnW8`5cP5Mz0Eqh_Z6LomgWu9IJ(Qq#y#dj4QBEB@}ZogZ!wV;2b5*2P#H#_CJn;>q1j<&JKu=RMiv@KuEIivb-2c z2lC0)k24&+tm;Sva!?Ld3l^`@(-n9*?df{R)Yhm7uTJRymTOEUAn0pYyTHhJ+-^q) zFMtomlZ>STMC!TG?JQP{-D0v7)rSo|Ze`CagVIvpqXTMH$cl94Swv2ZjGoKEsP-5f z^E!A`TUu-gY+p^*2h(h&deEwWUv0L1v>7y|@UD^Yx(YgvKVxb{IZRS}A*Yxn z2(98NH9MFUn;g`|0X)7s%VTM&5+gaFq6HkNxfpuYLHeW8!nx;^ex+c}mHY^9c!C3} z;m=ym6wM>&%7v}qknRb-nqc)gUTP=v2xy7A~`%rLJK2QH4k-Gl^R5!Yp*i?CNzp_Ch4iRXI8nlh+isO+MB% zxYnA490arOXdT=&Km!k=K%$9ItuL8{jCMTrb5G%cw3-O9T72wS&v31J>@rU~pCt@n#bHq#FUCf>Gbj=*m?_9XOKEGVhs=bE zg)apF)1^?dZNv2#`*4nP;PushqzCNyR zT{vog)p>6Cvs2|6rNbr3$zfl{QhIVKz8I8Ps$J^k&RK8GJ?wpPOpABz+OCp}L)BlT z3PlEP!FRmN6R*en^z*gHZ(j0Xj)p_yn-@Tv4=hxa-_y%}HXq3Ss}<9*^#1s(q0p== zC9Ywk8p^K-W$jAe9pCTu8Tw*l{B!(Jt^L8Lo`%7`Cg3|&&-B%QeAL+A`mSZ|_?Dc* z$=D_tEjwy-9oUqA+~JludPg+l6~p1`i;@E(D2_p?#v3;Ud@Q0kY^j(rzhnGr z!R^au@4sI<^F)4-dNzxEJxIyx^_Ll^pV-#xU%Db!I9Of1-GQrKh1#_EAN5;@%x-P= zG#5tTS~hyTQ*^E`Fg~^);|AW3^cvJJ-a5ED$|iVfzKd*~ttTsSbW7oh=nu(1&6_43 zXs_Hj(L4I9JiIDawYK1}yT;GcLpt}F!R&0xECYIi7 zp5A-*;?A)D9@ZR0%97Vl2sNLjTwMN`ZU!fAKPFXpAC~r= zJd%=%Sy}10?H#&u@6*yc!~i3yF(mUeR+a3QQZN>(q!V|*ko-5xh#XV(RuevYT;r8; zz+=tSdcQOcc=hd%f1ZsTmNGmqb4g=<_hkdd%k8r%c5Ry;tVMz^y?#%t+(cT~6r1Zu zQB<=No&E{=tC;wCkEO}-`=>08T?O*h;`<3um!f@#J4QPs?J`O55O#LWFTvmene0(t z$~QgAF_!Dsx>IdFe*PB}*2xFOC9IiY+Ao6WR@3mozchTDnDNQ_&I=an7xabbWCLzk z-tHik`EVU2KP{^o-vGn-efPqRb}b-|%qg5XJ_xfEpSpQ``SgaR&*SSe!cq^RE_Kpv z<@XH3)GoR+Av96-~>35h+aaq`LrQvZi&+bA{RfG17uNA;g&3sq77ysP*9ny3%>1X7|<6HcW zKeH<)d=KMSvFt`Dw5iwnn+!ei#-nPl&E1pqO;3z(AvXWce3Xad#xmDa%FW7)og$xg zvsx7j*IwSG#}C`?Y3RSRGe^lA9tk<(eJr%wYP2!={r5fWI+cd@6QgGH-84{NhUXqb zC)3kq@2&MBNI^Ceqnh$r8?RfiTFR&56m-UO;h6KyLdhD4Tc*-z+217G@A2IsfA>FC zfbKCKez?^6n$Im6g$28ZsD3a^j(z;%L|XN`7mj`1J!wfte9<#+#<{0on*b|IEV`p= zR{6K^-nn^pvNx&zrRbDDsr}|;mR?Eb=Q!o@A6Hy6Gwb6MEB6-cwarpr+0Xre>rw+-%x!kD zI($ihExo&1eP#ZG@yiIJ{z%3jznVXdQ?u|Dn!YxO1PEJ8T)P`SjJN0 ziUy{k3liF;y?JT7Pj8HV&DC>`-v9dB;sk+74<3M@@p4o9vlaJm_oK@9x0PP6tNfV7 zrWM4Gt7Qe@uO{6(4X3AiSh+7d{P@;i;;_iLf$^=>y3`jvttoM%*3I46#B?eLFaLhQ zgPDCo=scN!?PW|@?pZmVwb!3)QAZA1JMQFOAP!l{dY3J%18C)%7VQN++Yi9 zep+3P7hLT>Ja|VP@6}fRH1Xxi$;Gv(?sed!o61s~9T&catd@bPlabL!Mvj{@bH^Re z^raj)5bT90c=Rn+(0$^{=Pk`&I&WP-O$hIexc=wxx;|O3Q%SNWYE;F>3?^J@ml0`lKuR zu1@CK*|9OU*N*QDFbEHBHjC#*%P9t%nBZ+*c#7My<6o$&w@Vz%$(KE|GVR^6O84wD5Ub!=NKY2wA*hdk^y%@lZrn;-M?1LVz*d7s{7UoZCdy<{BvWc$}A|8c>^pTCAo zJp$Ik1?_)b@g!dF>Vys+$1St>4V?eCaM9FVMe$ub>@0WjNITQxmv8ysEV$N*+pZ~X z&c-)KKKxSDQyA22)P$^RlrxVmom{z~?399(VG7TqUwyiPvDPD>*!GbPt$tb*G_uF- zQO}`MHos&1>n#!oB~G2&Qt;X{UXM=jI=lg%Z2SDt>Hs?XX%*P;rvHWG%!G=dmnw3% z@@}jk_Y@rSENk)XH_|GaJ`)?f=}^ax->OrtyHI*P8;Hwp`O5Ao2Q-<+#fbA!_eZCg zuX&l%@^8#fdvW#bzLkIUdU^K6eBA9{SBfI5%SS=F4cJZSdRg7)!fZwPRa4pM*KZYb zFRXl`8{%{N?~F-CJvmLd?vw4LvQax3X$8+$E}{vH^<@|Wr!&TU@*78M!@uWr=O*xYUXr~T7Ssv=w` zm;9C$`*@~e&OuhB5g^T}lZ}}1MU-sH`yT2l7zy>Pq7q-@IRolccmQ=Ip@U5@3-zVvtR!P6W0vDbFqW5wrEn5g(^S=j(g0 zM-nooO9qEkRyH0E5RyL3HhKmsb6h(EvoxXpExkro6nf z{N+JdQni#oV1UZcYWn8FCOy}{vho1*;l&q zY=_KpNz#Zu@c?k#dj8j#hno(m#NPiYQvvq+={g@#qA;v;PtXvs*`wnHZ-5`T$MZbk z?=2bYV||r@`jDA%Icf_j+_S;uF<*uqdfYE(U;eUK^U$@Ewx7DwYklATIi~5A?gVYu z-jW<_31bEN^kg;V&$k&>LS)EzsfrhNWCL80+ub=t(;dE1FYN44Z5?4Dwb%lWi+P}F5`%|>KHtNu0i zC%CB)L;VCs_$kChhz$La4`;9N6ALQ(@y)4AyN`se+{vUMg@E=JWZXJ27+-b+CJ;PJK5yUc93lN| z@{mO2u3M1}B^Ay0yoGPaY6JSR1lKaR0vk*0LC9-tUD#Hw`?~n}Oz>Sv%{bElCzyVP zPWy$6Nu%EzJX$C3^Ur=VkDco?WM=-BP7ze`4 z4KtabeloJ#QLMAd*RCatf6@BM;v)iK1CU(-+xD>Izs!y}iamgT?Q;}It@6PeQmc-u ze9#(mg(EEx@_>XBG@wED3xu@KWU-0he@!v=|Efy(0TPEYILI)B2t3S00?n8W)KJL! zNfz%B2*E%bC<%mQAeTZmpLXsq6KE&};9=zP(pLUuGm*Af&-bi+jmy`9qWSJ4sxGSs zdsOWLyN}lI*q?pw1=0KI%^DZ^yhjJ`V1HeHT4jFj#oT!hFPEnd=I02a!~m35E*WRR z8?}F*z!I+}+S`|DvG@oOjk8fQozTZb^w}nop3~K_J95)H1Wm4cm}y4DQ|6~#RH9a+ zWaI;hH`w>Qt;S;PU0Y=!duMxQ`kfBrlaf$(8w(?pTGG#9!S;ugb0b1?_S>A&$W=Ie z{cXsI0mbi4b|dDHBqRX?+TH4-nz@4>W`03<>AOW|k;+NpS@WwUIxYJ|7sgU>m?3Y< zBl=m56bq7#`SG!XNvd~T+BopdnGW=;N)nh98}AZ5M^GPjs|7I%(#@{!HQyRua&2HC z#&uawHOuW~7`fsJ(q@=@{D z2#03EkL@aA9o@ve$%*@v)kKKI=c2f4Ubz(u(ev%pp{Tl$hgc=?Jj2}~siB`;x8@Mg z?z$t)Vbx}k#;(vJ-{Qe9=d!qKjTZe}$6)b2Epdprb@w>TyOLkS25rEHT!R#Lbsh;B zi(Iww$wh8xf4&t3LU4{ z#X&Llp*@yoqX8ia9oqOeJuED@AylNM)kY8TSI<-+-h6LX>=YX7udj6sxq+_tTQE68 z)tX(c-#vYR$oFlopv>s}$`-9Fd?6eYNE~?2^bvjnwXS&~@6CZXHdiCLQdrS%?Q8!p z5*dPQo$1#jOjoi^?;-|q!j7r%Qj4Sq`sBDm6gkPMTe>rZio$UJJH7zM4sI0Buj>C{ zC&da>z99GEy2Nc?I&20QV!|pVOKc&TkSO{lRkjoTNIh#B}6V?je zd?9p$#gA95?;wAI1wEaF)k1$Uau~cyL4Mdki`Fgbke&kTI`MzFjnWbAPaCD;1%Y^Y z0l9Gj*|fq47FVuz1H46V!peIuS z&Epg1HUxiI!fUa}aN$OaumUBX`yQ`h6sG8wemX-H=rOEMszAwbry7r5@z0dpn>h)| z>iCi1=Ry4NJNu{2=W?i=ZD+-y?sfz-gAWdrv& ztIR=U=hMB2^$yt!OK*oh7n*P9@T`owJhbrv_>avy)q7>+LAiT_O(yh zrsJ2HIZfPW?ke2tc8&U^dOv+TTh}ioJoi?@y|^yyYWuj28^Z0oTu)BS29TohEG2A6 zQ!2BVh)lE9hF0kV39!dpI_9>w}GN9C^X0M4UQ$QE^We0ekGHz2Y=GM#4FE%|gksD7}xzE@&!??$QH zPtoDT;rNlniKB8-lL)pyyJQGb5%R3)0VM(PlpqRSApb5bt#0bVH?XWw`@@_ZP=7p$c`a;VVWa}lR<{nwI>&xDv>QPuR0qCtp_K)(7ng-=Nh|Gx1 z)hZ3?+KkQ3SCYGzZb%{-xrCxx3}knxYzx}@Jl_gE9SA=4k0mr8WBlu#{QG5by1kuM1} zRL8Rre=2v6Mk+TLTQ4V-_7l>KRp;`EGZjQV%j`B)(>^)tbUV^Xx)KIzLK&t@W4BnR zZ?5xqq8kV$xiL=>P6`yVxn|V11Oh>{q31>lRQ=J86Y4JCG|B$7R9rAV-S7L{{(T+B zVt3ere~X8D9=gNY{9QJTAL{R-wdWhJ%k3n-M`iB%@Z3YzL2_&6jGQ;I!{kZ!pCqR6lye(1eGVe?cn zsVicqsk{e~L!WG`Hj_24Zu7^g=VqilY8uas!APwVKd5G(qX)saX6}kg^z+MtV%=T# zuvEj0v+qMxpcytE_WKJoCPzF=j5{;Hfa$D0*`&c>tJ|mNIW?K8Q0Pa;OvdfM0iWt9 z)rsw22zMlzl~3jgwOqPvAti8^yNAcQPR$vx3lVs)yE#n+^%IW%!Ws7wg-qAzg^cSq z$Hxp>%w|wGjPGd@$La8rdpqa>=FA(EK1ehCk}}h+`0A-Hb&2>zv&DK=<4RcQyMOc~|!TX7skSE)!>xgBL@}bCA7^PShskA-xTDmmd7W3l( zK-Z8O_hgiDu6wN0KR~8!C|2(oq`QtDh<~({(;TA7e(DWR4{=~We^(8Rp=uS`G^Ii{ zqw5J6wCeuOv|^~VR@bh|#*%3nCnBy|nV_KFGO=ESb#30K>^r$v?@T6}Ze{Lo4=fA* zS*NnvsYLIhH^6sBRYsfW*2|wH=|}9clSo}vK$X0~xzM|FtLID7Ue zr5)YmDhKYgEYh2~%8Dp@`k{Mh&m(UuZZbBYlkB=Q%l=A?9%booUe(w8EQr$hcenCgU&`zgo zTlD~FsJ=L3=1Dq+*lzc4bO5jZA7_wieo%+oJ9q7&4R|a$;a`)Fc4Uz-d#pM|?|I3p z#~e?W7$)V$gAj?Ll5sF!p5^SzntCrDB!?u^`USp!xRv$ect~GBbwxbRbD?87Gm&%}LTKrX$O4QAMe~=a5D(~k zn+txrWpdIFYaQ}L`-&S>x-yJN{&Yj2w_*t)KA4=fdp7P_dsNcqNMz!&gr9mkIUSvW zBf6N2k5T05ist9+4=8I-jd+*rGgas(euCgr{Sz`XiJ^2|%*r*&VQ5CtL9IQRvd~at zSGmIUJM=4<@r#sk`T=M${G74FcT1O&1A6IB7r|DjwY0flmsa&IwJ3TE`1`rFP{BYL{T67jWF0b^)RHfyA)~#>fZtgj@zZy9hqdv=z zFBZ(;l5+m8(W9!->0rhVMB;s@PMM+w$y3_jDNUM4g}m?%e)5yXZ`<_E0Y79TQJ7{% zQuCS|Ey@y*-q8Or{R=ag#7oXuoBvIjZIIVR51K&NIVYU`SxQprWT5#rfU5sELWzX< z-c5Z1$(gP`O+5dvN9|J4Pu~G>4IKR9cSTMoPBQZ(=?*;vyE&?PV&vGoVKp!@+InIo z)1Ler@{lqW|GD%kQZ?O^{aW?&ulHyRv)b`$^L3mSt-#J8z=z?FB*f?ep7oF?6hHNs zIk|Ol;REa{E7ZO|1=d*Wdh&4y4En&v&0cRE7_iBS&)c`W^8SY*w*6UGivKU%@#T+pl4FZunVa zY)4)FkYe$qaTdw)A4-QHCPpp`;f3r?<4vR9suH9YdY+9Yi1eSme&<5WhDN{n(n*RW zBwcY(Jckf(K{DK(mm6b|hj-y@Jl`cWR9Nbf2`l_p#`T{#LU+1bh{>@DB+Q+MmKGh-+5`CbKvsk8`vyc>#b{ED_r|7Cvn+Y*w60S$ z{px9A1t|r>Pp-Bk-4^z4^n3+%&Lx7LN(>}yjX|J$SsMf1fcg^AJkGcuitlho>o@Ri zR$w4!U(=m+;;%CnL_Yl%TLJ@r5n^k8F-xv6BLu2hp5a6^f-Dkno~Mz#6Xbi6z*Y;*fRr2fx1q-tqF$+vZ z`>DOaYkWf2W4|wAXx}AF{WhjfVQdzq>jS~?LhaZRu6>91&W+eK?t-NG5b1gxk}(7p`W3@hlHf4Msle^-51TLXE5^oX_>*U0N)% znUWeb%Tf&d$H%*fJG}sF@V?FVH$)q@f_>Vyr0A-Q``%v72PDBUGEP+O2L5?yAwW0z z-J!5i(915_dOscW%Oz&j01kYhQy}Kxw7_ix47Flw<8TWM=!uHl7`({|LR=e(qOSMqp%tYGc>B`G}mVO$UPi(-=4b34i zXxY%42N?Z6m4=sPtj}@d8T(zs$jIBs_p4sFk>ynt54@%8ko_|N)htXKJq6aKWIzl6 zy=0X#6e&S8q`R00j2Ua4T#&74WSLSDh#0yt+lZ}?Idzj_1(AiO6WQ9f2ChU)x;Ze` zM@0!X(-7h|`gv%vcdZt(5IR=(b@WvZlENOZ_k)?s#~{As(CVklU*-f+*wp$l&U?m( z!pGW*=(LzQ+-fBYZ;v{N)cv{^Xi+cG3s@^*x0lzSnVo2SY5c9Q9PyLpBhr4BaH*UT zp*+37n;mKY!&>u2Bc&OM9T(B5>aLDTZ~mF-I7oFtb;I>N2#q%p`B;hmGsS;J@}VNz zaz<5ERtnp(G8KPSJ%OPR>a7KRUUYEgPRRF65>f9TJDHSKjp8_b1XKbQ0b^513Z`h^ zVyAmxHlUq;={Mi0@YVWNFDjVKI`+035GssU(?YK7A}Z6bLHBkp+4gAv*U13P5VQ3A znts~ys7|$^zxxA&N({B+k?p#S@6or?n8c?H|Kd03Hy@ax18kzLzH0Hc!;bflj>Grz zQ}g`I0`*3iV}CedmH%I5&Esq3!j3$03|pRd!!EYrRqc8$Puu6X52))`1NH)lenq2y zIL2|7{kT^)1C(~(-%tBQV!)HS*1YOW^W6>Ut8pjl$E)6xrEB`+3ex}!6Y|KLYZ$oC zbcTNpT4bOlmz%x~6>DNND34@u@+zT_*WSoSn9Zxosc%A=xD$N*elj~NM9KWDhOw(+ zAQ6yy=g5$FOsT4&s|p2}8k5*>i_8XpJ6eA_vT(_HmohH%3FHg*7~+b(@vYa6#&1AEaN%k zni=H`#0&agPMZlNXZ%d!uyE75omTzy&Q)kte-}>VF5%-?uy@0O7Pn`5@YSl>?8d$o zzQ$@|TaO8IQ=D-l1MYqa*4)^C(d z%O_T=KFXa`bWtX>2Ns3Ynp=CyCzB%n)sh2m8^n?74tTbEK^?S|ElBqWje|<5nMOoe zVjjKJ*S{EI0RXfdr)7FwzPf#bu4YcNq5#aigM?mEE!)GvFI?3!x`tIX3sWMrnz1vy zjfc7W=hMvT01uU+KZN?b73y{m(-PWV7UD!wc`s;w4d|D3>% zSxr)@0F5n zH@Z({>^M$%b@{V&XMifK4Tl(KxwI_3hVHOh2jUlmcze&zAk+9lRMbzL=#kF=sH}NR zm*H@IK0VVUWAHXiSf=A8l@3-8bi-6s(m;ZjW2@*J3R{k87So z8fLD$DgVcRd!o~znd8Y?28}_M?VlOl(~*uV%r&0!M?N>61$hljd4yZLcHuG-3JLcK zGyu(>jN*ITnyENZhR*=f@ZR*R|9T|GJvwm+Em4xXa@Vs-AHY{u3BOy&bw9GQjIJkL`K{+@MGvetKHGIQL zbCd3qigISXC0Nt2x2CJDWj0E0*l~Uj%$5>rw}4tp*G$UVV`;eE#N#$u3(e!`2phg% zNoqJmKIx%=?UAJYYYEU$ruqKw?`3~Bw+gb;esD6vpzjQl(H4Vf$Pt&FbTDH8Yh-D8 z+_fEAMD3-W;~X7<%+PtjIGDUqnef}v9g#-ElT^cIy+F6I)4a)#$fF_j2qH9C09jD|* zfCjO@E!V9mfSy&Jrbd@JT|~oPsk}14^>FEEBKZfNZwl))fgb}D2Sbvu6Gn>PT#cIC zv+EFJZ-PFD=hmWi5{>>bXEq=GKhE2{Z``lXTMm|y-GdV;O?%< z3%<)}AVNmDBF!v=H5u!&r=M6Hyq9x5rt*FuF$KGwMm*@EKu$j$+*r`Ha}7X-gKVJA zC3XHi>HFz&8X5gW6FRdfhcx?7Hd;#u49HV7d^Ml=NcG{yVGXa0e|AN-{#|^GzfqbA z(Nr}91=(9B7v7Y+j;S8<(a?9yb&kk`Uuv!^!yK-c*X}SZs%V+>_f`u@KThAC)fxnK z)KWyY8hL-bZ@wv+coF(wO|f(0g3O)pU2;I3cPm!_?#$Gp2WpVN`zSN24-`lMybXrm z5Q1?@7C1`aEH^(su{-HjGd>Z$W;;^U24*p}cs`RU;HH`b(y*6X{RQC&=E=0e2d zwK}+mU7(|}sU*NR)1-<(s``5A0+R1Y|G4+1N*%|03()eSeOd|}&~4*;`NTrf|J1lV zddco;p8bu=M^w@dx;<38oW7s^03PKOc>J#ZZop~<+@@LzsnJJ76;!}oN8t!?NnkXO zGRNPbf?MnR`)wpt0HsChh^=c=gGh{NXTJ~B(iC#;Z5wuiwm}=?iA}3CF!rYLhtPgEE zNklmK8)fzq%l?UwhW`vfv-HvUMlEHtjFfmB(6>}gTJ9ME-wgM6#q1Uh^JqT={zHGg zb;4ATC&1u9e~k1a2pDq-M3KV)il6R3AG%qZb*j2F;4|L0yFH)oi8)pfues=NSUJo6|N!%K0q#H(XLNDu5%Hq$2w7?-L56lmBRdlo z-{7>8`n@5s)AukG1>-+Ayc+~H47k8HMKT;&>y#VrVh`=-h=nAEU|Rc~rJyeVH@l^h}^`v+UeIH8GjE_4^|HWa9Y4s-R+3LO*xQ zEJumUPZO1aUy=!{JmLJjqxPt4P`ZET)1j@&7@VphpxLO_jdB5B8?ZrzGwYQ@Z5#-m zsMSDV!bZt)MO?&TQ8qW+=$}MqMoPO(QDu7$GTMh^a10yFMptz*$-8+_5Hz zS2_l1J-czOR^0RxmW&R_p|uFkfOms~$ig$=w?Sq74PPzD(>)1qyvjx!ILc`I+;I1E zXnVBTt7l$Gd1m`tjmXToh*YmK8mzp=E1=cuPZ(Nw3mh+lZhnc5qA6?fO+c*tgy|H7 z#K$iyU&FcF(#d?4)hgrR5gkHrL+zwoZgZO1t0!Io0}bOAW;4#q-@|$S!Ss9;aU5qc zzi^EoL^Lw{>r9{-nQ@E1Pi^*@g57vh*muAz?{t7wrm&B8!&)dbt6cg?+2%~b4SsbQBkF_sudz@;V>+*Hm z3mXaV2?l(6i8wy)EOICz?$2Y=@)8Mf`*svQB@m;_WzFMsmpi6zroIrG-a#GJX&%*& zOM?mKHRx2w4=2Y~4WIN3fZ`vHI___D;s5u6`NU7$M17hX-!OX8=gX+wN&M)7e|Lqs zL(3jL*0GkY1?*x!bqN!ENt%ic`di`bRlIr_91Re)D&9LJZ;4Vo!N+O@%qL=GsA@j zEdHo@CSTAF+~7_ukHi(_zPS*Pk2n~&ejA4OcGj}&oSI%>KGn~KG81~6zoRjFvIleb zqc_6);Mt8^BDVuS>H2noPkRP(g7y4~8SL33aVFH(DWAz<D0xif1-^1*pyI*U*aGa&??md{>n9hYh?e=|A@l-z#bbEBa z_MG4bY-6V`&tYbguv~QjIG$No;W10MHF2)8MRWPsr2{?W4hVW(tVGr%4{RmHo&S=$77PRWL zS=c67v42kFUO8sJX0S9qQJs5Jcs@t$4V*>Hj=F((laYqfVd&q-&B%vKwn&djj4Rrs zIQQJPvM%n3bKLJJBUFf>=|@uSw=9-934NBF4!uc~=@S@vJsShFlfG-~j(&n`TY4o02&FxR)uiGpHsa5D? z!?h~j?CRt04z8l8+k(-sZwPz<8R5gaJAiAhtF*Q~hBq&W?=az-ei^`hoe*TK`(8*@ zU|NhJU9Xf2!`1l6ZLs7he9j@FPS)Dhi6>_e7E6X_5V8@ud&I6vE1zyRlBZUiv_Cc! z>Rb&+ANd)da3!N)!4kc5I-KfW?}fB+TR) z1Mhmpk9@)wwQCdazEm=LE6n&nfQs-xY{-)m?Xt>8!py1o|K!G`#x)R{*g#B)EOImK zK4HuF8gxo3e5>Q0G0ZcYh6G7$$cN^><=;=b(pa*K7I1qk!{a$qHbMn1y)@{y4+IZf zGKfI!L28U)T$T@6K1M$O&QZq7YK^dC9@rJgF$Fx|lA!b~*{bxp|KPi@jKXuE z{cZ=wC-T}fF*Q`)eH`Q_t`M=4A2=@b!bn6fyjkeMoP6fLVOqjg1EP@+^rSlGtMeQQ&`Tn(oU^D4WztKC>-fc} z+68`lJT<7ijn$eQlDsl(vwb5X*^f6&CVNGL`ed3=6TqdX{ub4C{2Azv%HN=?7w>UU zK-|GmK3S4VKAKEUk?K0rNV_Hb+$%=5!dR=%+kQ<()@gE*=JhUBZL>YrYF6uMsNivS zQ|iTJW=*Qi-&c41g;bkiH@$la^eM;ZU8QEO+AucEgqfipgA!#ok>|62F~^(!G{D}G zYh$z*`_<3_7tGqO3`*jl<=V|Pb~0g?sNG@>wdW>>_RjXX1VbAfJN%i4lZxc-KERAyygARU+ ziQ9|?xyK7suu--14Q>w7;^OJ1F@-VdK4vy%Le#q+?_XQK2s+}<1L?Z+Sm&OJknn=g^erZz<{}2j{9Tqn42u-3A4ad-47S z@%?u>Z{LkyOvcT=0qOS$=5pKoCuS0MD~!%1x%vo8Fl%h}q?}f_s|kPgt?!}IZcxdd zqqdLPGX8?NGYA1$nlRvE~{Zf3dhJLTX^?4w#fWP zUuFBq*AtTMVilM?D-Zz2xK`vQ-eSSVLi(B8P7y6=?ahlLCrfBGx^@o-rYv5LJQ$gdgF?*VK-8r7e-v^5oo!h9n zoChl&pJb*%xO3}wR9a6Gw^2JBNBKiQU;vO0sysJd$As&O8JIJlP1NKjl^D#)$XpC> zc{jdM5YM_gYw~%(*ZefPAq9-4OjG6-=!M)ICp^{T1|G9{R)#aj4g2$nGTM)(jP{@@ zc3UYHAKq44k6l8KUJ8Hc&WaxpBz~-x@@7;pWs1*o|KbU*3jK3^e9;UY+Ic z<(8em+p65a$8DbF`pjn64isPiVBJ6QZWJ=+|4e|{J<*aGNgyWe4!~4asF=+CJx$FO zyk4=un@pRrGglN;CLBkeyc481tQi7<;hm+0`OVD=YYq`iUAi!Cl1?tZ%zC@dzV$ar zz9t&xvH1K}ftO87ZI(u{zn+K}jQPiWlkNn@?eOOxuMhOL# zyxL9Nbz^Q=O}2_N{<&mscq(65Gv-t($@41^-2b=$b&w1S-vAHbZO!J!9{|@2zk>1c z+iv_qyaB$-RP!1k`ZTZLHanJ`v1rmWkvG|vXTr*@uhm}4nc%gSdZiP>;0bSQ7pt7> z7fpb0iBt3Rc7)1>Z$i*5^m>FUzW$CR%M@vJGQ~H<52-l3&uIQ86-(`3`>i zeXP-g$#!9Ktj$SkV<_hma^9zub`I+oGCV>Xp171UkyA`8op5R^wVqB)e4g`%JR#I_ z4~gi~t^v770VQbk(Ze!jZDmymUg=G1{GLQ2PDa)&`h@?4kWbt{p*8ilo6^m(wO?xN z-I7Bv#NUia>X6`(301!YLG3YkWO)EZz+9ZGK`M)|0Y4En=U2(?+WCk-e4z>ONALBZ zRNr{TzTw0P_DqmsyMv`2X>##AGLX?G=+cskiGn>t9v)j+_uk+_QkI#8L z-nY-|^?bj5C&R-x%aXvcjfvYotJ{{7ib*;Gy>2;WE6;^QvaQFQW9&P$Ih=vFtQh~2&A>zqwO+C9v^fU10!y1@4Y3Zd&-XYO zSri~`uDeP?K4&ioq};cVqvxXrSnIz54iJz74~DUCX%2r+*g!yw&$5`EH1KuFmK)xZ zE#BUe(Ze8z$`{xTg*`1(wACYe*Zw%nR@49gh%->c(z<~Mw{j%b5i!Vv+8oJBDWYB{ z8&9hszQbB53v%<-*D4qAuX=`!;d0iug&TynminB+Psm}P`NcDP>BF~{qwxe|rnukZ z!1waGxGAySnfvug$jhqIcB*)Bmu4ug_746xpAq6xAC$-V z_(hUPd{DpFD5_o*wM|9r&?3w`)ZukQmB`R4uwkN>sfj|xpgSQ<6ejf7xzeuy6pU*< zIw>jlKHMQ1m2er{E7Csm31dTaUi3pFc#`!-4qH9U&)Eey(Flvm69kY^^MpD9f}at5 z8JE4cG#5i^4BG-E#=1U}DU%9XUYh;>c+MM$d@dr~6xlXv3I05->)JTlr^a8oJO^9s80|P3PS4#N9psmUJR`J)M|D2HcWzY;iJ^;=r-7P)GD~- z`S<$KtW@7C>%9OJLiqN1h5vwMqci!u;zIPadZUecNQ(l>=*bWgxfgMfO)Uux+n8$o zjuzgDT;Pvo1+e0bU|PAqVR~PNph6ebajp*ShzD!o{@n8BOrZZ#bJV%pIpX}YHa}=K zeOKWA>rLc`y&!y~a}3nec|JI{AO>V$a!@trD0rB83?uZo7X0YIn8IP1&gwLOhT9`{ zUk4n)jX~Gwq{LI}lm{H=P3D~&v5N)LkE^Gno}~J2U)H5RCXhz$QwuseF0(|_E5Ey8 zyTgT!h@ll7y}b7*Cj97Fut|Y*jVJZIpjFs-dT})eHXRnD*238gIH8-00Q(p}&WMF@gf43K z*dX*Dz-R8o4;L_L^7Fq&o2^QwYvTFcW8z0n+L#{gL3cF1FM`bvi7Ulu&qT`t$FPsx zRC`~hU_9^{TDx$Vs&`z2-n_R4%#lkpn2+rQWQF7R5)N~+75oeq&sM>L*Dql-ZB0D1 zxUZb{?m(ZzqPckBx7;a$IW3Zx>H(l)A@yI;khoXdpPaJ{$T~ zYp;rDmswyfwPZ$aqg8Cl#+1a3t5>A7NFbt`!;sftcVv1g<@gYB@W?NBDQYu?HgtE# z!~w~!A7L1iwOy18zeS5Bck6uH>~CV`ZEtv|9E`Q+^n?r5#NATFuhrxr*XZRN?$Q!Z zYlssnV0QYLHo;AawG7VAg>eH2Z+>J*@3LIECQb1o#^*EW0C!H|3ME1Y`7=}`lAM%VX99bY>%%yTSz`ZFYh7fdW9yRxNvt#g%zF|EDl+A$+ zvP5OH);l@8eSD9M=TwB#9I~SIPhBGg)5JY(GUnslF8exra~6YoiM5 zz1R$Ws8|S&2wBxHF>A+cgl`|)9oeDUa$H+t%=yXbzxo|}aoJhe|3r-el6w=&AqwiA zUoBE``5{4P`Xku2rQj#9ryBEnlf;rFiVw5qLUP+h!3-SNtmM7>`BbST{k0ksdF)34 z85%xsLw_bcXagMO?`3E*BwK$FTjCkcxR~b)k+LxJ)t~P`jLc{x{ZX@ZZnzDjE{$q` zjI%a>H8AS-V$m_+9q$<@gep07safM+jsEuett-*@j{gwJ0bz|a>ohqFEXX@#y4Sk3LY?ZiiCeFy6y~EWGU}MV7D`c+bVOx z3i6#5Ldm)RxU%(%-R$|v3shR;8Lk@&_@wVpRelc8UXyz#$D84`Wm~gph|e!^ zROegvl;O7{JUk%{@bazMObt76n|JW138m>g&F&UN>BAPg-x5cUvl^Uvw&5!oyKgVF zH51THh&bhqSK(zo2Ss5o$?j{}gvJ)`E0ZMi8?vj?o3nMB1vQ|2WoBqc@j#`6I$6)t6iJ}GDPIE~bj>Im01zvhBSJw(;&NY~wHc~PY^cN1tQ zfr2aLZOA+b;*g|H2*r9MVp}S3d;e zHUKv2IMk`lnql;V%0F6YBk!6bftlpE?^IX`#y$KqnP$`VAcvFl@D++}z%sz!+Ax~ zA2_ve?HM%7TsZ989tN8Co)(~rVLUuZpy40?Xfd!I%%UiRB*TTGCqxZZwwbav=%pZb z7Q46M9x#vjSIcO9N}KAhYH$-Zti6kfg@xh{zd@Am@U~co^vRs+w)x3DY6`smbEqgf zjRuqCY$P0qNkP%G(&}eahHqQwCNgKIKenxr6kaYOt5*3zU3clX*%tS%)D-9`W@TCH z@J7QU3&YV;yEgups>=)VB)_|iBIW5c>Qlw<5b63!PL?33thwNCC8z7Q^xGDDD(FW? zn21H(j?H+fBSX3>KCM%DBDutU&2sjDNOBxC`FOa?BUCsNd#lGp?2k)q1Km-(%kKw} z+hP9(^8`-w#k)C?hp&#S_m+}ghH?I@bmnEBlpY?-eXP+yIft{~LE4+P5*MeqGy9J? zu{RC4-Aoy#gR_1fR*({+H0i{xNrQ!WG9s-N>xA@Gv*f6-vUcEnl}I7_QOox!8XeA^ zMawP8u0|0j;K)hc?^)5dgFYd#9t>U4N$+)=cq;)ADKJ7oIsAl}X8#i83oItWlc6CGO}!_4LNYGSUEc z$rCOST0sm|Cpg`f%}7gapN3Y#CT*o1mD=JX(5wV@>^bJ$h2FZ7BFJ1Qz*YPdr~*q= zWb=H7B*T{~nc$VVlVeqGG_y$%BQ>sz=*r{tul9F#$T}-Gdx@^{U21Z+ix_&dM_=-j zUGSd8S9&;iwo;06(qUaNI zYxP)$pK^t8wc((s$hTZ@Dx6oNesgGiZ2B)T+x4@n&$ES;p7ZvSTe8NA~PTi+jw;MHG60QPzvIZZs6$otl}J70~4#Jr4kpGj`Q+A z$>?KG&%9Ix39#)P+rvDX3Uha}yvI4$47AvjdP2R`%-M19Cuwh^*_hd49^Su1mw_U+ z7tsd{9XW2(YBQ$w3s_+=bz&3zzMcm}M^G;~7+URchLvZSNS<_X=uZotVB{`laqO0O z2zxxY)Tbe-Tx@$+&_m~;=ftss*Xyd4iI`MzgK0aC&)fz3hD(B4L1hI|v-x0+9Ojwe z98)3j;Q+ij0B(;#1~FXHB%A5M%X0&okJ+!X#p}|jX>75g2N0GCu}!vp&u;;i=m5(gR(rqcY|s?Q+8zukupx(bQ0}*mlRwa zYmIitkpSok=h<|t9@X(lk;u?V^?TZ?YeWy%-#!D4wGQ;B4nEBKW+=fR0AQFSVGWS6p97rjQdryywNkkCK)JmgXRbKirCe=D8cPw}qJE*?U5C1afddJc7j z&$$H;ywX6f7+gGZ?M?N^h-#I{f9M@*@xpi7oy6=^MSeSR71wZ z24);C$)6|nj%j;cq0~{N3!MJ$_H$Ied(oq69&A2=6U;%`@y3vPNL2ZUVVfBjwb@8s zgE7-pz|>i$9II$o-5(m5KvOS+#8dtemq{ez#X%A6g@ zFG@`Te3J)uX-#8KU&_ZUpyw*=%QE_hWrB4hX5afQHpOQ|2#tFqUa5MSLw2vOw_|N& zk{Vc?-gJPn_cKYrwSKA45JZujFtw0CPi_)D8x3q&V)Wy5E#5yX4O52$yDR(M1ObY(zX{jXy2$^CN$JFA{Db}+=qA*^ zgc4@WD&X1Zw9>X`vCXuHgK+*z=^yJrPvv%0lsn0UWVF>Aj&GMw)vk^d86=MGWmd?k za{Yn6wzJ;K@-LfaJ>@EtmZJB+@R(#Bh1HX?ZsiL zlQ-YO8|&=)He%)`(f%M0bmaC>=2{^98app$wl-{&s*zS5HWl1#AO5t<8BVmiL2dMD z=9E@*=u195I6VzP%1Z>OKur(nW9DZWV-DshBqrCy=<$&2;jB1^hJB9s+^v;(0dng@=BEzinBAWeT;z(l5li}XpdsRtog*@?(sd6ZI2Uiy9GzhoK!ny+mh6tSm?+D zUgp<=9fZ0F*vtydC|eI5ml7#_steVGKz?^fp5aLrp0pnh@Z0W&w1W}_D{eh(b&B=>V8zAU?;)g^4P#r3t7} zi)m}RhDo#LrgxmjO0qh9c6$NNc9r8Bxt@VL2A(6kOzpzp52Z0B#-UfFHt;R;SASau z#d65OJeH;4CC-YmBl--^@Y+STWX7S`aF(;H+QFTrlgqBJ^!BG-nr(S<47eb7Uy11n zrpFg4Da*U!Y{V{g!60YHe{15pWQ5={Kp69@zM^n=7VFPzpy@llUDBxMJXy5j2)#&$ zFEDn2@EtZi00Ldx;pg`z++RS;a0yW)lab1kn{%Wm^GQ#YKx@gUH+h7NA;rN)Wq@y9#F}H)P0F722}m%UlX9 zHYMM?ZmVJ;dX_rW?`o)gCPNLh9_?YZC`ugOug36J8}c{9_w%!^xGhYnM2lx;=DTiT zL=b=zwJmZM42{8mR=LS`)%g1RQTkbu_I<97jWa+ksIr|wef8^oM8j4y9?kC6=D}RZ zYLb(rtUTo#F~=@DImM=6@|=CRN`m|jekxqs(ycSpS(@P+7MC$T(p^@%lG)cZd1;b; znLz4q-IcKmIKf`q^W;-bVV5cbDC={WMP6S@6yH1x|FUQaMiQnlnc+w0L9^K%{h+Rs zD&8YM3}i`$ALge}*Usrpscspf)8&6}7j$dm(gJyn8N!X!>0pTmg@Op;{!kyq9ESSN zHTju*GmbK)Y;{<|jF0}fJtVvF`^>`YL;Edga^Wr$)8)zC$02GHGyxU0n)LyuiMhb0 zrfK|@Bq49Zzv={|X7pKsF+9}z*o;RH#sjiO4_qp7n0*I@M^yhFN3Ep7X>)2rR$7+| zaSTtU{hVlC&60^UF`=;~mXa9guWhOg3GhO~7XLO}2?vc|j z1atk;B^v!9d~EBO;5A<#u87i?q_sm%W3)l~dL{hLphMt_{1PBsW!oB^UkRg7MIB+L zl;kB$G+||kwK{7BpA|U1BU7-3)8J8P+HAg{tqg9;+LpFhJgLfQ)s^pt{g>Fzt;<@8 zzd-+x+^G#$@U18qJzQN+mwM4DULH}29(vqT$ado<>m>Ve?ut3rh-Cp+Eu z7UrPQ+~iu*SDnbJ+K0*|8}@j5iQ+d!28lR*=dRqi!1uyS+$op*94MMvw?^KlO`;N? zx7l$5eCJla+rLW$Q?^O|z?5~BW?LNV&d!Mfk1iEm4lb4?9Ak-UBp+5$UaRce?t3oC zcQ8ONQ8&%)p_5I~{8FqUbs>3{kD3#ObrAO7YTfT$e7G z<52Bg91THi^nKI`>X_us!kJn>Q)X(-1A&VvaN$o^%e3H5fg@`VYQ&250nfYqA?!$Z z7m<-4hKIDILD}TqsMikp`8j~Y>l{^bJ9$qyyQPNqIs8X_$NEVA56N@p*C1-%@Po7J zNyI?eFCBjQ0w8?IES2y1Uex|`b!#(FV7%!!jDHd;A9(l=HIVK6X8DedMB?3q5lHzO3EOF81Lg{_omc_o<8I9x!Rwa^1k;%n5}f8&CDSlAbH% zZ257O=;2z{t?PjfGh5-l!fyuHL9bJbtaQKXWbQWMDa*6ywTkgq*^z<8Ip1^}YRjv7 zmpMsSBR?+wqXAl?lvb(T$e$co*_w9Vq_jv%$~;MLoZ+%`itjvf(y=TdsbKS$?<&!s z!pImBGt(9jDcZf8JW<vv8R514X=i3n)uEG~?3p!~D^mU`D`SX)UUw8;TiEvu=%o{w4l zOGHQCyq*>*;_Hm+c1jwr9WXnt{p6ESNsfPGIRhUZ3kAUDPew~P!QuW zTPwPFqFaamJ^sS=7RJDRYGUNq^T?>`a>ODu6;t&>;3fzjg;Z4{csYWp&>pJCXx`Vb z!=h-_8v&wkqBg#5y}SCsZlTM7#$OZjTdOhm*T@Xu`%#_{WNA_izc#Rqn_@8FH*n>H z#xJh9P?g9-Xg5k$=OuU8RG(}x5aM2Urt{azUa2mP=jX&`{%I2USHxwQ&I|OTX29RL z=GqMhzxVrjF1!nW>*;WWs#d#`_HkqQn;#<^iVsl5XFI>HM)>0GX4C5f9e!d3XtgfF0SImE{AWO9M@lBs z-jJ>MH!4co`5ecZnd#M$l+LvEl(uL@4iU?JrSf9?o&X^LGR+@>4!mr4+mtWqf5Vjl z4r7L=7LE8D`K^)pIF!Z;@7GAuZHc2+!zeV1FV{zt6Qc=kArw_VND#GIl?=8vVVHQY zwf7vy9u;JXc(x?{2FstVex3b#s%jCvV05YcaQPQlA3VHZsaAfXN|~?bZu~#1$pO1b)cYq=7d^l1r+QsLb{yX(+xPA) z`hZY5Iw#37X^On!T)>HU-@Rn}b5bAjBBK%gN0s2Whqr;{+0VBRJl!C>;{gfTHrJXI zYoHm)b@gp3SbP&PQ^WT=M5T{PJ55&p;uzeZY6y-r6#b|Av9zK){a5s6I>EIO6aoZ4 zM<4zh2R|3;uSTtaxKsO;rT(WCcRz?@k7c#1rl71IK$IZR znODcv1pYnoXF){%oQt`shnU;XFxSRC@nE=PB<%lY_T3u#enrnnju07)h}|PR^_pt><{{Tzm``UO98tdpy_UgC?IV)yBS~mZ9Ca z+nb4mEr=@860s5J={MeoZ!U1d?4L4{pS8se!d;rV!iIFs^N=b2-oR7n z9Zc(&F~r~l;QMdI+&ornLhvK9GX6$(fpPwF*{OSdG%v5%;ZNDS1&{cf{%Xm|hR`=& z1-nNNkS3xD)5xkfi)TL%%g81TSUK&?BWT~9gcPsPnPKjlM3vxy6_jRvbK(B|Vff!; zQuUObXv%~z`Mhmw6|Ld3L11BS)eX^OS0{f$^oFZ0aWB?&Z|y8P75DYTd*OxaZuiWp zT+R%?%-?^ic=O(*sxqtf*WbeY9mlh4IdT!q(f60cQBq4CsSV?Fg>#9sXQ4OOP7_%I zW*YxZfRgytqRa&{h^PQ5>^Kf$WVS}izkZV1ja6Gsmf_&XA5RQIHP19eKQqRfk5)V$ zQhvX{*94sbvu_!Hl_Z!kwM*q6qgkDiLn3Erj*1k1cIv)9)Pr`ftwk#;8NcVVao!M(tF z&aek1ALTL2*y9g@1e#N_hM^0<=Y;146=-s!=yNW|cqZd3u7?*#Xn!#7+QJGxWE!*r zuK@&qpSEfhcNFRGeN(A#ram1%Xm6FjJv{^H8rCKc6Z`5LPxtjh$B+b6-)C z&{Y84x}*4Y!z#a#Byj50W_+9D>(h*+w(Y#G$fd?oid|!hy;$dSq#mj4OUdiu{Zdah z3~^`tj%;~1CO=XLh&>ApG{gPbBKt`g48O1rTv<`+EQjzl7S6bH)kZH!VqK(U=i$hq zNe+O&OL+sY(9fZL-U+#rwM;v_4rsmmveH@Ek|Q|Tb>flZM;Mevrv-u}V5 zL2It+=OkfnW?F`XB%-#9Ln>XnW4&KrqIopLZCM6HR zHnMXbOC6%mPs=#>-BJPJGmMMVZA%%-4=bd%Ye3~d3PQ+{+6JNZQ<`wA1lZRdWEiU`#83O zwXzG56tvtLG`(3V^loPE@xF2reh|fTWZ9=;VsKVczYltn9%oaa!Cp^^(hw78JQY07 z_8R^9F#@u8-JI?n3V|e8zgQKH`F7@CK@B0$yKN2p#s&n#cOC;DL-wl=9ZwD4i0G!y zm^Bh~XkHs(n_-j|oQA&rdi&W~dG-rZc*})N`_zx~LrQ4Z{J*vHi}zECLSy3v@2ZOH zJB$yHlwd~;y?YCNEOpS9-_eoG7G*t;-)}TFXi~kyln33EipIS*UT#L2>jCWcYDm)Y_yNX7s|CQM^E|8%9!_;C9C5C-8rOJ4HQVC8?|<}ZHy{fOm!FV4SVX(QZ<8!>ih-N>S$##Pa%Bza# zZFi_ew<)G8=jOOx24}$J(%%58Wq*az&+`4^H{e$ed8vtR_k4G&Fy|_5DOkFZP0cPx zH{Yu9a4s6NK}TAJLX4LD1aLESjgI%BUvrqX|7-x*`%A*G%|5NeqSwBxJnoQqR5V^T z+*R+lQqb#4e|g|Bb97i1qjT$1+?XUnCt#-So8`9V~yuIL6xf` zzya|b!XpvZ|59TL{l1bNQj^6bZN&Yk^~>Rt%`VteBg>fXnF*$p5ZrHAjursg7Zkh#hsj--T^?Y`w0r{-Fm%;8EkDF|7^mux&g3WNXBs=D9>(Y+E_=6XI{JV;d|t zc_b*%3_P`#1f>Dz`tM3t&9!o8E^TLgN||UI-PL4u_$}s@ppI=nU31WWtvcP#DawSb zEzGmC5!nl`*Xo_5oycGv@Lh#dm4p_Yc0+*9TRB#&!kzNc^P;Z1l;?mM4$DaEJ*z5l z=ONF>VUvg|PGoPqGbVtlr-InLi*2*f_l14gB&+1@e}WH5kutce=lWT?T|Oab2GQCBbc z^53BUz+?E!!!32%a@=h?<1-7txgwIAjmKiFT8Bg(6`5^W!~9%XfFJd*zbQf0XVwlG zQ;@pse^0Ilrar`28<;dXJorlasn_hztWwG>6ib1u+t!oYQP0C*H#=(=V%>`z%bW|^@HdwQ{QeXq`mj!m& z?U$@dOX;W%{dPg~EPDEiJ>zyu+f^cr=`^*9%HL}s%YzI>FFuAHgL zEuqaii38!$={Bul=Jr6RMtYdkj>3+#@_C|7gxA2Y%#1)=OlJhKy$qitVd!LPC~~bq(^$L|u=iOIpprjesUi zzMg8c0=gi-%s<_BUOZt6v$#HFn@}?)?{rdi==c*U&q$m%W2|mhI_2zgB(c_HY=Ybx zZ%i})w`~yHBl?sv+BwLvfZ7`tzg=vzkw~Ay4hRbYvyqiR+_yhV09(N#{x+s+?%+a0VE&_g8+2D` zxVlTOe*O7jt}`W%)b3kZ!3@WV*}K%cmS~T?m!f8IZg}zm)G#*!BRYth@VA2c%&wy< zDgLWv7RCIhMh^qGIQSb5OHl*=u#g6W(dB-g@^=DWig4D>Yvlz5u^KXBbyLY{?e;WSv!PEO4D&JnQGH*w5O{;-ms{?sI;>V6tGg zGOzJbf-QGWOr20VW3CXoTvd$^*|e+bOWX}3O4p$Zv*Fg>S9@6iccQAr<9u#gJ~TO1>Gu7oz9kczCdx_^y8t+QysiXlg6fUZt@$CGIwM#g{MJSba4}rVa+}XEk*Sf zwMpm*Tqh9M*V~YBYWNdoa=UKB%ZRR1jx9eW9`TCr#m@>bdd_H|uw>s$6FS~*!GUj1 z?}Dwxj4IB#bz5$y6wL!nAa92Mi9$o(fJ_X{^c;Y{nuVb!b_bm~5Dc!Ts0W6{XJcUwQ~ z@9;u=@P#yS4p4s9X_Vv!9xm#fs=cJ#m}A|^-{N4{-4ape-e)`zHdc3=W*wq|cv|J; zh+7x^n(SeHV7szHI3#-Qp9%=RPu1ufIDqmg~&2I+raBNQ2Q^O5>U5@_T% z@ZU9&+_w$ipzyYaT-bP-`nlOv(CP74fvnK32Hvyi@AHn@CeB9TU}0uqglcF*%A_K> z)hUIqL*Zsuq@*S&aFec%1Jq-nLr=zTzeBeIMrLRITL_YGXz6u5$g&#rV9 z%_?admRwh?nD2`alB%Y#>omYA__{s8d6nI2^DT|0&!zfFP=1;igGjpe`y#O~{ zbY-<(CCq_U-Z3?86*YDvYDh$OrQJ)1UCdcs=@IzF2j-Zqj5YSfBG=M0#rDg$*tAh( zp(ZqEr_er)xfaA4P|F3`(bbq$087f#4Ao!qcSFHRj?o4Aadbv__M(S+cQfBsa*7H$ zJ<>Pt`z8gBrl|J?Kyosm12xLAJhqzpK4PX04iScS*?w?wR^!87I{(npNU4gjVIJ)s z?@!!;zKABaJu$>&VHKwpruBeF)S!+5$!vJ%h4;pi#N1VwCY60Sym?f&wca0X zy?yRP7p{Pz87$AEW5^o8Z|>7}>-OqH&Ra3jhrz>zfW;l&B%+x6IHwsiiOP0#|9)T^ zh))@?ZgTB9-C#(~mlX}Ou%>5I8Zs0GPSk-cQvzaVI8;PVnzb2Rl@d*F^?0Q^s4$ho zX4DJPchQ-q{Xwr|3G41-9n~^KeIU4%edaGYM{+E#O~?5<($TO1U-!ojbpL_C zQ|FV?PoSWbc_&sPE(4p>bHJ_Vr2B<$pBe?lWK8)hzj#ot1he!!ppKZ&?IccweM{oE zl;Xu*huwyN$6lhY7%lPIDVMzN8RG}rp<_m=pb>etU^{Vn=wnN02GS}++pRe8!;mZt zTHhqJF&X=cGoLqilk#X0(Z!t@5M|9Tr^nuiMmjkEkkojF?)6;mwZ&WVud(|_J$5bn znhjxm;ugyz$nSQ2AQIT##}F_9)17V*erW86QATk>6+j`d|#MP7%~BE4?1H5&6k z^PXJ}DV3uqG6};Z$!4!{)Gd7(Jzlz6 zoR;#W%gpLDIufDSJ{kX}cTyABgF2ZKj>Qc0C8raEH)5_0O!^0s&u5p! z=Qt$d7|o{+tnqXb};V_J2$Kourp&9!@}x__<@Wp;!)?V=Dqcon>@ zwHT=<25nU6&P>gyW{<*e`*-JsPL@V4C%P&X^^<)Mu9GdALMtD#`8sMEf_)5}4&L6^ z3wBh0)k(W*KEO^6e`Ynh0w@_z8gVGP3FP(-oQlGzL~H=;LrzeT=$s;XPXM0KL|#?{-r zQ&ARyYJK>yzg4oA%8^Ryp7f%|X{__05XWH69P(pPZ!-)3&!CNHvviLTd;(PZeYN6! zS+(~iv4$z7tx%`WQ>H~~@Q^GL5o9vbl_RK)D5z6*g~Rz5a!J zQU$lB7U0mPZ`D#@%XymIg!j0|dnVb<+I65=-s0b)Gc!o83R_k+q8h3e$%exCGqa8X zn?_245!!PtwYQV9)+#MVez(~uh`(TtT}uli%pNr`HO2WRovQ^-joNuT<3EK@H#0FT z@Ug}!U?Q1s=f`;@J;?^7x__38l$>#N9A08+q+*PGMR-t)vyFtRg^bB5_Gt@K=qM0f zmNN}Ew}O?=e{*e;aY!*wBK!|wlHeBp9^H#*qMA$GWXHrjm5M6(1K~Nkrg=8o2Yo~H z-(#e`B7@yLa1{U{K{=OXH)v~irzZI<>vkBi(R{U z=k-l_8=e6bSoJW#B3tw#6Ty!3F;BqV#}O}jcf*pSuje=$H0AXVq6gMR@;}&3xM%kJQM(Ku;?bg8%wN&#M!BDQ|^I;%q`4bad<3>9O;YO7}qw6<*EW~ zz~tAz$CG}VQ4INi^*xdm7lgk~;Ft@xtcsywgrYGl*NkhA@TS9R5)=x4fckg`2+Xl0 znE*FNaoNOy~gM_a4;jqRz6pNh3hxl8xi^zeDF32xk!jl^O<`CxcZc#h$% z%L{;wTV=@CL^#}h4jUbTUmtZfTRzBda<=89A-8WeIc;=C`D(em=2*e*vVs(g{%||V zg-7ztbPG?o~=d$qnYa&G`twtB;A=#4l2;Sz6WANE4tsleiX;3^z%!uT$IMPML2q`1&RylZL-fc%;~$ssz{gh7}0|)z!7aU z^(XYE7L@lGW36v8e0X%4IfM6nrm=QN{4n87GZPrl=6nBq88-2YJm-Z&<}<~Q4^}~` zMcb6$hDtHLE(!HX_h47Y^NAM{&=}vGtN%R>NzDqT9njPFa ztP1eFAyv*;p-tAObotW?{6c7$pc}4BJge}yzmQD_%!EJZtpKteick2YbkFD5V9g_7 zcLXajlaK3@#}xE^o3B&~{vEV({8JedLY(v5F;Z`R-+TmUU(BBiT8m&@MfW$<-@XE` zs94UB^1xAZ;01`k$5B)1OKUOK&~?S{Sz-|KHVn`|iC@wR-sYM&FLFevjfl7<@hT$#4JTO))P&emr4x z;_R2gZAY`Oz1!9o2BigyZT*>0RVV)zb!m~rRL<4+5BU=|p`fLN=iK$d?SNJc` z0F|OX6E@x)c1}R!??}{I45eaJ3{{SQdOkplZOC>=yd=5hA{8`+nyxdr`z#q4fVwz3B1Eec3a1ywhrY1lNiMbA=#3jK?i8IhfW zrACe^jtX4q0SZg$0~!7E${v%Xq7?Wown&HIrraP9Wm=WKdyf0QbJF2A$jR~Gk7SW) zUtES?0FOA)N5;_XN3WEbOoQOqnE{Avw#Dq)GItJan{0Qb@40aPB10dZ^szrV`li<; z*2vcw)9~UoacFmm+JpRJ;mmwQ4}N;hJ_Fh)BFBaoQiB9GZG<(73H3)q{KNu>03S&vDMb$?$IB&nR~ z&ZrZ5x_~w?lTq9{Q(%+r+7jxKg2NHv|9KU>-^r|O_?_5rg@%NvlNEvpD@aJVgCF#h z^H3h2d(A;nGh~$#bUL~}exiRaN_>4*hl9IE@y!o9lUkt_aZ+{ilLNtFStwwe(c&U5 zX9gc6`*|4>OopCGY}$uJZY%=ozGzKQlTVr93GXYp9|e0jCc|@^C+Y*j8knr*vg`>Y zmc${^8tHbHnVah=ZCULY$@5BQ&hTc{fas@{+5)p1LCMq&^lsWe!;$cIeJYu>IR1uz zl=C_V^Wnr+<(xxpY#JzXsAJh6oArqM>Gvrr^xdqCaJ|wpFxf#}V<_85FUG&yz#RK- zyV}6A^z&`ZeQ%#`*jERUC6%Nvdq18J5u@Xt6A~2KbMZziV8Rcj6(%B*45laB2>J>4 z#;UdpJ`Gs~8O_&C)egATENNdMjH}C2{*!slx2GI<#9NHI6i1w|2(7*>y*-PG=5s&5 z@q~vb9-wzaPjaYqfol3Sl$~OwWAfXvYBIz78APi>-lgO4%P^WJO~C@j&_H7|Ch`+g zsQZl*fe%bpkBzup-aa?n*y`?aT+cyi8K~lTw3EUMe4E=ADnoJQE2Yz2wwD3qb>f(( zMC6vrQCt0KpFb^zDft&sz_>gcC4n5H0LIH^2#4wgTWKg!>?3L++`UZ z@Y@EVsF_#SyRPAx5+t-_vaXU)ZyCCXH2R(MQGSF~OR2@kYw=MxU zm77~|F!aZ-owB(%$9Rz+l1!{kOh)Do%%?{T*g6;EtBQ>mcgcu#luX4o2m3V8`1dO* zl|J<(9}cHT5o9qlY>xSp99?F(*f6c&m6>S_DT}Z25HQ;a3fw|y_MwCS*m3c^biDez zNGv}MrQi2U=??}DpMr-J|8Dcxfa%o76T-LQ`mZdkX|Zn{j~t$-7|pdBc0S#zs&k`; z7?GR&?D6~;&i3M^Cw4zYOC#y%KT##2=wrdCjD3nvi($Uqz2QYkBH9a*tdTw%gr>jk z`rhL93E!u6>$T!u0Yi8LeoXFGH>Zxlp?=46#_Qj5Pm_QA)C?SOVoP-2piSZ+hFT!K z)93>#THBPq(Tuc0@C3LO)Mt0Z3&9U(*H-U@m1TuUygz*w6ub6Qc5LQH(wDb8(QiVT zGsri6lwQ=v&BV|y55cF$5zLT)Z-VpOlAP2nzrg3CS11{hbx1z;-Y#iq zmt!()eW)(Su_~gSQ}kG3?cOA}mq*{4$^`mI_)pUKOG#e7MUp#?(6=UTkg^S^6P#NM za*JU%>D4)N8sEWquJ&P@sHlFx`LoHDD_v_BxO;^KTLZ|-ttdzFQf2bxDn_muRU;Q; zpz|P+VG5*;3|VGHab%YGPcPG<ZNp|O-|6p=BOiy(Z3hUZ1BabE#1iIgk9`}ygfIB^MRpjNe=!4ngvE(M& zqm(BoK3+4VZH^~Nz+GpcH$$_WKfF-TLL*>#cQBJ!w?(6=15$%FH2fmHpsM%(0&8Ge zBp3d6{e->oE>He0-a2N;2u}SWf22^JV|@`G749E=F@_{Ll&vXhXgI#3G19Jo(m47^ zqdYRr{^U|cbafJda%77=vzFGfI+FSz(%@zNQ)-t>@NRy80)2g?2xHRdmQyp23sD%G zb%klo^^3^fw-`Q?q8{8P_;cb-jY43q>dqPXRhKL?{mqn#5n|QqhD4FgW9VcvM?Pp1 z_I-FDoEu;wUB)!~s+Fo?2Bj@ZyV$vEw(gtd*n!Y%Z2HnB!2c*Z^FXHmKaO{+$SReD zDJtJ6D#Yz#A-jU9IV_WSqq z$LDx|-kS?kLSze2mWb$+=PP}_$&(-9L!~Gggs{*#oPwURoMaYbz%xO9uj+c zVG6YK*BZ@e%EW4|R-oj@!m~yV6ViKy<(mlVRq4cM@CwDA7cUXZB40J7;Fj^Mnv+KE zo^02lD<2ugdnHFx46hiNjj~G?@q^l1LA$^s^91zQp>+xkFOq`}=(tNY9d(-e zjfkyg@JA}-9{DAYB2x|DH?hZh8N4@Je18{`9tG_dK`sQbb@lcLh>={o?t7Ae-}>;R ze8hnao08PFiLU6BL$4I+vFRt_v|H3*0jTK*F`R3>q^|8f#Izhv=nhBGb__J zUcMKc+17i%oSz&oLLS(D0n6|WM1v$}Bqb}FBC({G*j1tcYqzTpw1g~96pdAM=yL$W zzb-U#n^Xt%#i$P|G)z?ROWv5Cf1$g+LZ%tP2pKE$;U6RyOxa)eGl*(GS2rhCk2t|O zDOIEae~@+Okf5V)?Ivje>@HK;Z8U-`akG>E$NGE(NAz|o=L($j`p$DHx zcef;sgjLstI%os`{X+4q=!g33q#W<&RXk2pFw4Oq<{afbD>iy2pz>)|)=h4*r#j>t ztV!4msh*mRy90TrG?)uTSMhiEM3h!!Ys@r{Ex8`&UtJ3$SN}~zPfLa9V%qhf!`$PT5@rOwhE-)wbIfpj7H16gX0rGW`lm@$cLZQ= z60{8gS%8+@7T)>Tkek$D+qd)zjcc;~y`_YSFc_^zvzN9=$Fe>PfRR3ul_;Eo_O`t2 zw``U-TE=$2PoxkQ(#owiNgK|J3JVgknSB1)NmX-{(&e#-pp;1%y)t`@jcR@oW;A{@ zmmZuC$Ke3Yq2(1(HzY?U0|L;F%TXD%Uc+QX-rf4Cp(a#8UO^&aXXL?0qXSuPMCVG- z;Gb17xU(D*<}o{@Oxe?}H?*$!yWvA1_Jj|z8?CK6hO!ZP#1j2_HH>+9Dc~bu9Yy!P zj9Zb>gd6dvG-IEo7Y3+Xi8hbP0+8S>*lvaQHxebjm(0BT9B|t&c86fT@A;qFg#h}Z z?hvwG_cNdOZ3tPU^JW5>UEn5*f%&nzv`dBOAuu=Ag^ zEOO;i|0BwMY|SII!v}86E(f51cKB$n2hV%y`@C0#!Le<{!# zb@v1hc%0!)tdq8+PxD1=r)^U1g3C!u}L)$=iZ7~+ySGRjHr|2^rc?~r`lU_fXor&(z zIf2vy@xbc2)aLZqls&|raexei|9idoT!g{35g2`GptaD+A$>L@w|Um-bUox0nzGb{ z>@kujv>Q3>Ug~$kI~mDtRe;z-26J--(KjCZ82T}<#L@$^Cu)v>Z!Mf)#M(vY(|9W+ z2>JeOw5U-B23@M(;FbT+Ncp1XOA=)_c&kh||5=JkgSw3)WI0jgqtOsJ>R%Tn6um6Eed&We0bJ_{A)`0iyJ z{=q%P%Y(3lumG?j)^IPk2gchABkP`s68O%k7YO~d_pYjUs0*xqWoTuV_-bcsBDqA z08j)I?pg{ic?4&HHKijiQ8Yvge0-&w;SUb~gd36^-w7F6{7M~Ea}3O+CgI_bey4r4 z%T>rac}Y?{OtM~36*-1phC5?$H74)PP-+2}VEE(G5(B6>_%gECNN~&D5v{~C0~`e6 zqG7~fP&-B0pF~-g`K&-o_yKi&87A~LTWFq1pp0xiS~i!S5;dcM@1H~AzvMb>=OW}$7G>CsDIEuM?Ox`!t3_P91Dd_; z7dvR@Q`ly`4I*LkmK6MCR(is7_D_6)$ae>#TPKs^c}Jg?UIrN10z5-F%hU=C6D!k~ zMoQ~||B#GBdDeu#JsJDV;~ZMDYJP_QWaK+) zE_jno_~{h;j}|T3M}3kG3gB}8#oje|A11h=BmRkI{4N@i`lyF+T=oM`tP%?CBn?-l zjk+y&R6`}KTLa2bB6Qf!KdoH&YEEMp?j`uM=+5-Y79Yz*6iD2+#i`6hWCmYjuo1*1 zRS6k7)sU-op<6|7raGzvM(mXO1Akox=Ej!ZEChVlp`CSxETbi&qILh2mH!;0?aNAG zQ)KQ-5$IRLrq))cAY6SxUG1C=r6Hv7mZDLIUnl0;21adkNUdGC&wgfjM?I+0+!Qqx z;s#u@T7$K1BjYj|QqEA!K7A!0C_OD1vjjHbrN5S}uWHYaRaA*a5U?=6I@&vx*X*J3 zqv(nGrnvUMf0S9PNt;dIek>4+d3+m(&WLGbwUWjt=-XNn{(;5~f6s93|IfaRm0Dw&m>aR)PvYiIs8)&H)DnX#3wc~Yqys$mMe(m$cCI2R^GdD#-1k^9q?-moaAg1>~`?alQDnuhvINO@~| zT9txR*B!LvZcu%S-7?Jf!O?c`lREYu6?==48JKB$aJBNGx|QD^h%lR6N%J#soJ^@O zTJOK!a%5!5a4W-w^@QX2$Hsm3mE5iV-=&OR@PX{uE4pemgbf3czd*v5&EYI8X+6ZC zUhobhnI4Fnt@yMp;74v&tsaPBm>pX#ZUX%d6_$he8|sU(a!)E7ciFQ=1xZ8|dkpM$ zU2x1tB@LHmGuDw6`<>}Nq)KIAV;REI@Bvb}IiU0;a5%hIv7a*?aFnuZy)?;99bB>S z$>{3G%Q{!H6z~xgFv3j|Gnb?8lp0Hq<_tytXaqDV3MrqElGTJ`Co^eN(Lm{Nl<(5o zIci(@nmMdVT>$~J80TBtV9yy11+FJ`ITpqgc+r_zu;DV@(%25wB?lpz5rR}=EY5*V zZAHE8cGK2>y!oSqZK%?v8VKE7cPKJvZV$sVbQqcEr|zj%uFh_r#mvs_k)qtQWCVea zKXChf8OdI}GucpHNo2@WwG`RrGW|H01OX?vPn#-pQJchn^(X`>Ea$ z$WDu9fd!LWy>B8W?aT!;mNIA?PqS3$Yq`L>b5>SC?B30CKCme!J3XWsYfXC#{5;O6RN@78NuimqsM58aB__mIu6r?|_Y# zZT}>qA6`wGzlKDnO@5eR#8`G1>81nOvU$w5j1oL6+%^F8S{Kc$pejggt>@_q=?W zSK4>&@|&}MiEB@^UzKgXaq9bp1N%N+KDWRBZ2z0QnQz(o--?GzzEybyUp*Zo`^cM* z32-8DNC>bWR_H*9nf#q$6`;)y^JFgxh_B>(c|8GfzLbHb4XRg)AP)ecGm@c!nF@E% z4iWl$c#9tZgvpd!xM8Gov@#KqqTjOocRg?=V;WUUd*56%Fc33Lw9%_-2^fvO#NNxi zMR3Act()8Wh1Z1mo-&9QIKfOM)bQYW=) z5mHM_i*Us{B*|WEYgRp%a{=Yxi;AP1;}M~-9SC$KFrFQ%1CD`IJ5an9qEjsEuj3LE zp6ljP6TJp;aX7=zLg30dwN|7sT2kV5Pu0c-3_$afpqkZVmQ;~O%<(=QS*Mr8Q(`vr z;N9IO*eVF&i*WuMb*n;T(8vjk_1(D~ds4AMH~L&$0O>1Dwj9=B^N7^H_hW;OBh4<2}EpS0f75h54&XmdTguqpgz@z3+O0+320V{W3LZ%Tc z2|cJ_BX~o>;vlCjhCds|HLZ%-iRjf1EEqx0u7=*3Ow8lg40-8dhUbqB^D@5(my&kk zqP_9%oyt9mZI{nVj>Fc<`^*>?s)KWuJ?_bHS;*K8dJa3>cVZV0nM&5rS_l5ci{yN~ z%Ae7H1neurJhPe06K}fT%yqg{n+hhQ)^jZx6N(S`o!Chcr>=p6`788aL%5y4(3}eU zncla{B_WMnc|wJ0ubL`mcWbmmck;v$u)GyijG{KM6<_3WY+;uFH=KD#V!<3dAk73P zMNqB9cNzz^dlol~bJ^!zLD;&jTa@ODyM3Ib4NrTO=9!OtCr+^<=I)c`tDXu*E%uVi zzgD%2tz-pALOm!6XHD&kWuUg{lE&h(>-!QO3jc43Dulj5RZ+YuliO|B4i9OO&XRY_ zhsmr4^GswBLh{7k*l2yI_+3~Xe#y?!@+2?*y*Pzt&B!PFty|a>;{{#XjktPJ;nN4Z z0b3Dy@LSVJQ!Jogs;_o-92}fp#5R6S*VH1JE9(Z z{l{7+qlAoZ-)}64Vc*TFBcvnw+4IIKQ~4UWpipN5>s9(6t!rO>3CZ`$f@CA^5!>XP zuAd{JP<*wSzCk=C9+G%2b@yq0TqAyS1Z7BIyDnw<6plA>rO(~?*Jpxi!u2%(vTNcI z3s_&eJ#ooobk4*hCMi5fj!WXdnj}iJ@tu<2%{a)D07p}W=SO(B1%d26!eui3i9N~u)0e5h zp11SOjzhnvcLC=HevKs?=@z3y_Y))@O=Cpqodxy(Q3bDcM4N@l?vGkL?~(!edmh_* zm1TKR_t(GDro2&WeU!eDM`R=*mD51ZF99t7l zt|}j8U#=){B6${;Php%26}@}&PGjDv5Nq+)*C=JQh9c97%Or6I`+0hsQypx&ft?5H zNm&B2wy<(N?kP;^(2sJ_xx3FGYx|U~W)i@m8VYv$$x>jWdgH)w3_l?{e^+$1pYwZeO@<}Z~!eaj;_+3M2h zQhJh?vhL{u#=|4ql&>!c>`M<*cneoECaN(F|BC2p{Zhinb4nZe)GpfH0&=M1I?EHN z{2)m2t0viH-S#)l75tzfNEMpllMoZ|Qp7Q)AB9HW-4n>pj)mhUb_&LBxPt2?=}oxG-~eP6&pu2*qj{62rW7* zb2#4<^GMuN7GCYkJ5t!`*k!M9@iCDcnxR%p$2ZH5y{p6>C|Vc#TMS$ey?kLf!oY#F ziMSjX;j!Cw-Up4r{%suQaeWOP&MUu_sW|k?5Qc78EJR@^$@z~9In&Rd6(<$%;ySu! z-7!Q2ZlH)5+XVo(SMp`3L413_CXKZxAr~(&Dp8BaB_A#tYB(84(MP{M_3(v&sJDIZ zWPOOZlj-|TG>Y_C7!6xeuf#t(CF{UXjjGdV{XLL{KD6)f^c?P09CR0r`X=?)RLzd> zLaKRR(_Dsd(_cmu4GnhO4F21nQw!~SGjgyW$5rHktfln@^m(N*^hbFT4tJ8+b-M@m zI|3QhCBE7}dh$kb<<$IPwlb+XxIVur5*7jgX$Ljw)I{&!LCs4lH;ux-Hm|aLzYK7Q z?Ls>Zxwq0#HR|px$31LSN%ND2BA`|@pA(SoqR+JY^pMEs6lQF6OgodlwJ>px*rvlD z=*x*zjzlbeAQ>;B8sU^+?uuXwp0+iJA8ey;AZmdC9kJ0U zdZgsU+$PyFryo!F+)2kK7>vBL-r{T=&xW07(^PiecWE`OTe&pqU8puEI;kEQ3w$dn zr#-z*H_VHJMDA8P<0EdtEYlU>Lgo>0oFMx5EWy8sYTy#zs-R zVrSJ{h#u=7IoerC#ld}Hre~LO{y6n8MF|5YxXoMg7jVx;A}lBxv8WL4%^sdulV-_` zIeSo8Q3IHZWmSRR(m0ce4((M3*^>xpYYFk2Fv1t@xv)@I!fjp4>iPkUR`xpZ^MfBb zw%MG5nXx%Oa=Yar%zEiAtl~UvZ3d-@)7QZ;uZIDqI(0kAIAz-v}##w0bj9MMtu*4RU= z*GW_QJi?>=;8qmo3~1pFx`5LkdIs`5VVEXc7s3mk53%6lu3cXWe(N=8qbo&C`ZitS z8<68`VO@`4o1>`3>X!9`AK*c*UNDjCV53*xUR=EB$o&r3!N_|ibdgg9i0_kM;xTrS zVFVb6>0;7%vAXJ)saAyu>q?qTx)JHaYGesIGvf_M;bJc zDhM>cz2uEE)q0fB@_h8+NENHOAY)1D6#PM~KO@Jr9PK4HoV!6WX4MI)KBEuJ5p3tC zF~``oPSfRNHUyxfP@+3wnQK)?&a=4Ex*-1O8GG!;KkvmAo~jZ(KL5rrR<1$hy;4%+ znoB(t3r>D&mDepe)f4Du@IfA&ZnPL!&E_pcFYNwc|Ji3`o_O9Ds!bR@6fCxAa((N; zn=GW&=-N_7HRV^HwTF6r=ibq&9^*}|2Hz4{R-S?R0=9)x>`QW}wDa)+4|-8b&uWlL za7Bahq*Op$s#{z;N=>X?O(fNj(O-L0Xo=`?_2CB0Msx(Fd#0V(AE+?o9;Xg07jau6 zy6YJoe4n8=ntT(!V}$Q_aZ!_>Z~x*3YJ7CpUu78L3p?D}?k%dslo?@)i1;#;dXGt) z+yxc~De6a`j>tQfMboy4PoLQsYIohIx){H;$8+J`QSr{#aW+Lyaj&t>*%=y`XqNDF&^#?AW$@31(2>CxgS?rJR@tNWr+cd%#vmFfxZ=;9U4XdP5o zf=Fjgb2B_pCR*n7f?(ni%@G9M4ycXv2S4Y1z8*b$l~@U=uPqBX%)ZxZYy|u|lA(?F z@E&Fg6OjX*I z?pc_pZS6_zhfK~V=408{SeS5&hI%}63P(m>FTs`3wxIGqqA+5{VkxDVKHq~KQH2~) zuA2{Ldpw8}7aHU*WW|plUj-^kQ)e}5kiQ=u`mLK8i7?T^`i)D==ryyM)wUg%tBe1l zbg++3j^LiJlvteizN?9NS_pw{58=2gG_Z@$7vhBIpSSNSHyjc22Ch>SaF=(avS%62L^(8kvbMtPF{xPmxhk?q+0t_ zdqHV&u?OCXs_o04jH-UVM%JG}BnQUvQ&aP@$tuTXmfQm70RUqki&?Y8ULJQh%fO0l z`*FiI>21YAO~NI9_M~H<6HKyPLABI+kNV30S^*Eq*wvK!^`tG3x)B?BR`w+B1q@8Z z*xsGd+_MY%J#S&;?@$MTk<-0^C=XaGY8g%ULHvjM`HwaqKPYqMbm*BanWI|lE(mU- zx0@+qh8Ngd7bF(_G+q|0N9V=r2=VAdYnd;TNVvxWG!~U&JhwU_wu}Bq^iApd^R8pW z))-hRdD8L3({j_QH;&QPh!aoS+aka(%Y@t)nySXWzYY%G3#T6XcKo`9ikDsORd^mv ziELYD=p4L?B>p^Cm6I@D74R{_I5ipl!>x;U_8mK)IuP^dx$_U@ja~3jnHlKm;-Z)F z^ep<%+R2IpxbHp9s+cAuqu}E?u&o1lJrVX87^>1^{PUH*Zoz(ldq+CI!t&HE3q~Ql zz(xH%a5v`;USxRAWbP>{HXUQ|Yia5ySvZS97?mY?tq}7HNMexVV0`R|4=B$y*HN}^ zxy#fcssFyPSncqLw^Ly2Cysi=Tzm>inxXW)@y1^+?&H*D@NZ4}4hQk|CP$IohgcI2 zjl^MtVE*i9d(xg@En#5wT-72U&&Q3~;hU#2#<0?-w8-GszcC)?$I`%m{3t6cFKnwT z@0%QKh3dQwopjX=U%ZR6}?-ip-98F zkwk=xJ7jSi;cP+WH}sM+PU7;ET$Qzs!Yg4Ob*7if%9UU`QTWIKXGkIV6Y*4LhnJPG z@9{kAcqt0M2KNGMJyHRZ0;%uh2)1rNGLxqNMZwJuQ|*Ogzd0R;_3h_YEoATH7S>+F z>aT>HQ0|Z1KG{S%t=zImF`BR6^06I8_f}nD)j@WHSx=`5$3>6tdvUJdBR=1yyQiB#9D#- zwP~2E=#CWl_W@xO7I}^BHJNK_{Wb!$z#iE5J%~JooB{EzB$vn(OWU-?9t78B4P*~Z zc_F5xES15p*b7x`STHyuwmcut(;856A?|tLwvXYcpl@uRqA*Y*?a9HYq7H)?GS6sR zFnW!gaVFbTWr(+ z^E<>anM0i_QTca@6fl|i=?X=#sjx-k?IYA|Tj5ZK*Z*%T{F_cYq$ZD5!*O1y!wVBS>x>KS;9Mxv67A$=oHu|A* zH86Di)!oVURqP~(W^Vo04!%oYaF`UV%YNHNj%JC1sBM%4#W7TUV(dEi{r zC-AWl)z>ZrHJtzu09OBoERw6!N`Al!NK9? zgp)7G&i15ZC|>_IfwzqkZw&4JK6u}fRUiG1#%VpdQi4U_m!7Jwhp+-97g90Y`j_ET zctxprn~Ou$yOj5UJKo&WRH_57;<{u|!U$2We*vh$%g~!0ldCfl(wU+ zIC^JYIJUW$%;78B2etY*)p&Zr`$U3J==Xly)SzF<2JruS8uP|8Hc)kZKM1``+-_<) zz7{^V0GFLwqr`M17HN>&FR;VwwJjsuDVEOk!WKUt<<;LZ33#@vj?nfd%&Xw*>|uuf z2uCr$lJB~*9O<@?wFvXk+nhsc``I<&&~3$O+tKBTwmulO66@v8Hlq5F2@vGtb^P__ zF9$*DtqDIn(orcuHbfPA50cX7jKdt8q7%dL8}exB5W*_{H1tf(yJw_5JS-TNjYl~ju!b;*J}us@rSkB z)Zh-qf8OTW)1A5{ zp3;=^fPZe&lq$VYXal})lVZ+*hM%hGMz*=|ML`J|q&dl47nD1A7!&$;aa(?I9?tJe zc0HZble&4Q0UV+Si3nS-bM2JXdd z3gI0PC_bRHH%dW#t!hky{(~0)rjxUcwpXz(>WOftgyae}p9}Pc5O1W9TK=uwK(42GLk`2q7}XwsFrb>|Ql3u2>1u8)b@EsPZ>W zxgYS^BpZ0{)V^#>(qMde<`Y6_0E0|gT7hk>xx|ild~90YA5Kold^Tu;BbYgAgz)-{ zu?OUbIgN|_3~91ilc;wR^0d_)N^1z)!0&rsiWY9(!#A- zH)5_q8d+AkPK@bi>k8-@*^AOf4nHs}AQTesrc|eqrs8x6XoNC1;;H*Vj_c>Yw1$&p zyX7qh$0&mg6|h)reINaTc5jAP5r@HjkBK*6cz(whG!C*}A`{Q{iK2p%VtK&eQ9F>YgisOy7Y}H{b*4+nJ-Y*IBf|iF`u+tMv?9dL&W4xm05GAiw7s)t#6(ild zbY=H_7t+{GU)Wqkj~|bd!6#*9#~kbLuWSo%k1^|heLftU?AemBam$uXTUQmz!)@7* zof*f%E*>n{kALq!X>ILpWo5mXb~3$uOZSt$W8JQkXY*~Jy_yV*m^1XI_16VO&WK7> z^WoWxBP7L0vzjTWKPvfL`cr{l3Eonm&eJ|;7s2Q~Ug1=BP;WDnv7()pl&t7M>bG7^ z?bE5+Fu$%nmLjXMYH$cPQ5ZFZ5;nq<_PT=QRdn;WUzEqCSAiYhJ!pqOMr@}OE);-4 zRWbyARNY%ofqF*B`!=c(`ZJrQk&#D=-VI}w^;*s^uQoY5?0TAhLH8|?j2jKm7>L$q z)rKCCB*6kP*(;!PkcrVXzAE$kp}DOc1e*h-CJAP7zbxMQu~CbYHOT`gnf3TWBmQz5 za&^CpI6dU{7SQ=VD$uyP&VDdP*Ks39Q#5jlYwT2opDoCY>WL60r6QvHMh>;hy3@mv zo9b?6dB<2k+R;@kn~iK{nin>I}x@-FV7Dm{>lE z2PZRI-T0)5_Q-$q`s=E1NQBI{51=mBsoik}8{Uz|O~Q~=mKH4Li2)8N$^mP?WA(frNxVap4SE~tpl~I%jaCj^15309JpS=^NIJ{n-+WZjo^XbHe-je@bC^I3O zD6KFQK(NcMMd~{|K-;KVhI&ks|E6P8dP~e#;Xcnq^ysi4%JTTx0*{@l411#^gyd=f zd7U6ep7H#phxA0{$e!fr{d;0W`mk*^m8NXnOQ059zM$nZ*5)z0`@L|u(bzHi{X%N` z2~|GlA=Gw$*?e8}7gfaY@z1Yg+=1g9p zSWosw*s0wGj|)t=*OW!6f83wiM)?AWk!uy@spY0#2-k_4*RZ2RBRhfDTl@@uQj_0s zDh9jI-TWaSjTSg|t54+(r|o`+wye&xAcx1{;<4?^YJ9sCrs3J?Fzsq0M7~S%YST|c zqR)AR?d%~G{_3xG%}aa5iK^w&y;Hi5v<)NTP~|UA_fWa)?jm za{L|HdAp}E-qJwbryNH!=LXlLPI0X!@oS|)+ZiM##z3~#Ak>i?+j6LKFX(Rr=`n%m z@p<~vZ{BurjE~it(dB5%K`$rCDpta{EXB3KWbl$pQ$wtQNeQoGZ0%ePbgm1!+A=Dg zH^Q+UE`EjfUF(D|o7JUYAA^feah-8Hr8?SnApwt#u8HG*+b;+A-+RlJ5y2XkF+0Uq zF~=YX>uJ@4=(iHB=xGd6$D7>`MfEPiD_05H#Ho%rtNN8COc!IfOQ7@nQczf3NQ%6J zd<9hrj*ip4o>1l!u8m;DxBRo5x%9MJ;kIBXY&_Yh(`R?vdEG!wX(L8CsU)ru1f*b+ zMpRLJc+pgSwU3W^xDVJG)nI?Ob{69V{scwu6MNBC55`E3J~86$=a%#TwnQ5nS>x)Y zZGrH)C(x<-AvDoQkVEN0N*lqq4czCSA<3V>d)r0mwca#Rj3$D1vbULQCfGmQq4iH$ z9N7<5?rns91B)nw8k+(ca` z9JUrKgT(j_p@5?Mue{kn5QH-|(204pTAQ{)UoXBA?W{eu#Q8@Q{Mnta_`^jHQx1BN@7bYV3}iLqxr(Ys)VtfE_W zbF91f!SnZ_%)_i`)B!c}5V=}NzgVNnTy?@&F z#AfL9gx)iF`#w`pE>E4dt`IN|d__r!zv?DR+WPl;Faow8hrZX_3xSl9Rlm%zSh^h|71))!y=7?(HW@1AeEm_pRm!I^KG#$C~xn;YRxR`H%e_$rs`Uisu!e& z(1X_pPCA4kp#gxfY}L%>YBj+=A3Rj`*9AP{;ofL@^xb@FH*e#h*iuFfAHx{W{SgaJ zpzKgI-5k?zRpnk5PsH#`WZAChgtq)nrS0lbDpXXLNni5qyCHtbar8@_+Xd9(M5EGI zC*z%tFR7U~rZ14SizSq4*iCfeFoa z{}z`q+EX&^i8Y*1p^5;SGHL>Yt=o@ELDh z5m$p6Rkl!+wH*9?+=lRNlVx-|^VTK_Rr{gbrO<70Kv}yWgnV-oEP0F0wL6>kiceQX zb;TiSYHhd{tn|uVs1=0B4R2}12l#6!T|CL2 zY9e?EVQ9uSj^s5X+c}P>Cu{!$lbQSo+A`itVP%$4J_IywZ~5muzqQ@3S(#2MbMLY*ZZ$cGW5%wt}y64fx4~6DO(Hs zdeL&E$h={YLEH_*S6ZuA4829o2GoeyX7s0IX5r;TKVWPhag@N()} zr7;kvR)P-;wYIXME2M>H^y2_IRF3SR|ESCrhPv%R`vM!A9G zlwH10M{b$&Pa|1QWPko&BulnUy*4TcqeZploW08BXj=BdgAe;GS8=aAVR`KJ_07C|R*sO^Vc6BZFeww4@!5X`H%I3b9 z;4razH))GEq2s>FkDdg51yxmCwyUG>JoQ>06Yp=lV=dLtds0Kt6X zSto$dZ<8d*(j63rkezm{f}QyRo8w<=Y5OL9WB{X7?54=*&KXAOyhuI7Zt{F7>E4;3 z@k|Aa7_2zjqWdl4`>o)wa_p@uC@0cEJ%MoWts}-YvtfjiGXKVUc=O==StVT;ycdMP zb!Amx#?i`y?a9A?w85RkC~|k60T4#{BcTOb(?TitjS(oTbXEaf}+nY zbVN`dG?(ng)x2PN9Vg|QcLZb^OVg6knxnaKqa?49ikaNlhoGhj0tv9x6;1=8(=Uf1 zLwzcCzINqDJVabE4Kp09*K=ISJjhOz#M%s%y65>+5%nvoF5UM@21rM|Sn#meXgF=1 z*H^jYoZ(7m1<;p8!hm z;2JB=b~OatM89g2>cVr3-n@%yKfw2&A&jKfA3_((YK9l{#WRY>GfxyFrSt&%-U!`> zoP$K0X`{HU%PG*z2HngrxP$qC+2r%nDgvN{H;-`qP)(%S={p|Fw)9l0E=RW|^Vid=75J_Hjj$()UjmRBs;})Xq5xvs4~ZT%Z4$pc zeZrURa`p+rc>IRcTN=wKM?KiMtBsxZ=P&zhdBC}x0_trze%%{y zu1}W2)Xe{tD<}#v#ET#1^ zK(UpLKBPpf1DOwWJp{(dzibIKJ+kBFV(iay{rU#ethch7m5nF0dabrP>L8GN>}cGT zQ0{>dO!V%wvO9ojw)D}>-80T(!rQA!wnwi|b!ZHtu*UrCnNjHC@s`M}lZRnBRawzV zaiPkyCCvBEw}8Ks=ifumr1*rNl~TCX(8KoUhEGGCQkhDe4XF@>Wy&S1pT$|&a1 zKh@}eNlVk?7xkk1_G?FJk9Wd|Q#x!o3asZm@!%C~C6!mFEiFhf!m^*c&9``Hr-_DY zVZ9NO|E3w$b@=hZY|AU*39=m1TTd23`}CefCX*b&{Q$)7IcFvh`0f}2<`tNp)$6=@kX=aAKr?^zrD{0oQYK=A%U~W^_}?qUM-D1mI_D!Y zp2Yk(zr-OvLpVo5`vcnn8`6~2H3>rj(31$wH7!Z>*whJWBP!v#%|xeCV!^6v0x}~< zE%^CYzhsB4hQq(f;2$$yRvB3^-&Z|0I_;!^#n_wXAkTb4{n^#_IEVz_1&g!qHL`9! z?@i0BSuJ097&v&fs)5Q+Req%$I6}5`O+n?HXvce#>YcV{dd$#4$sL=|6Y$Gd)kGs7cSN=)1R8ff8w1q1FG z#NJj_M8|gY72o`zKV`oyx@ZSiD_o`Gf&6N$?s_#;5z#nmgwuP@o7+c8FE%mJId?=;(A;W8I0dZGci-IOBjCj@IZk-MtrhpKc=$weHg&P{!Q zV>c8SLkz2oNQbT{AFsLM=A>(PN2|kmCu#j4WgGuF=L=eCUrnyNY_)X};o7>KxVV2} z>|-vGmzhj)2H%biw3O&=#fYt7l(}Buhm;pfm!eLXJ1iB}8r^@JJ>0RYLR;}?ZkSZ6 z>xeJ<9uQ$aKr+)t7)ze->%}W|B+{UtRJeaN7Si@KH2dsQO?i4_fid+1Qw?rDQ=FSk z_gN)ICa}b?PFv~(y_;}X7Ht(^|I^@KM~AP!P4o6Y(O);|9opY|aCHB``Jh(^x^8tJ zF$jENXFV3u{qWrN-Z$_17IwRTyA}Q=z+W$a)*xW)%iS+G46h}6d_t#NlstcZCv(jI z!(ponH81+-+J8s7l8@whZg7pdaic_NsuHC$-aT4-DWVqi@BR2)a(h^pb-*4y%e!7y z5k`u@-C7Z+mZG|Tcy0ebw!Em!;>4HvZg{rk25So_n2%lEBX z8N5%laK1>0dG;Ue(C%_H0tbP$E-c1JN*9V;d5aFuglh4+_yKN7*nxB&#zgI zKtT*MLXxz~Jhg6<*S}7f8%b}~B&iPYd~Wad6e>Ouk9t3NzzAw=s(pOtNy@>uZF(t` z@tE48pP+w{ZqaW3R4n7%MsnxtZ=H5}88L@{eyiiX*s%Y{M#0nPzdALO3C9KNW8(PQ ziCa&6zrHhc=h|6-2; zx(s7%oPU;nN5O{;A`Ap~VP`+KiNgP51T-K@w*MJ0HNr)O1z$+wHk3*lJ7DGB#qDRi z-2N)VRr?(J?H~Yh*^LmK4QyY9#qAb+4*ALva^s5+h`Wzo1$Jo=!b-ItN$r!1u{SjZ z`1Yi`$3Qv?7TY8KP4^S5?QXxweEY1h?wjx1xR zZq@$-OhB{0jy){D6eJ$cIwXE6*0Y#pB6OMrPjl{B(snMU+seiC;4DQkU9IoVzM{T7 zSA$a}yZlqOKawPlzOFlRrlQF;DJM$AiOxGu+SUbiTe_fLTNl)C>4FC1bFXALKJyYr zW4sgczca7oN}Q<471awY%oP_`JXmlKkIOPo&pNtaD?HK9WrruQ`9J2{LwBb3Z9NX2@!~XCON8c~Y(~cx*WThAG>(V^CGy(v$(`In-==cR4u9c?S0 z<*R+g;OLU@q2W$$9NNQ;9Ihy0CpC_(zm1#MU1Jw_9ZEtmcn7d6#7ykaDUxx6GYt3{ zj{Eh~s_Au@XK8dPLw1t#>2TO?=uX+jX_{P2sy^BB?#o$^$9J+eFDz~I!g_6pr^!=Jd-@wYZ{m5+)@YdfPS$Lk`_9&Ep!?3& z=pEp!c{;4g?!n$=^ZmegvZVQ<&Q8{Ri!#sBX#Uj-J6*>@bPyAC29K>3a_VQYBhD2W zG9;}uDo&$o<=gP*Q=asoT!S$Vt*g|jjXBOoFU7tRJ)FB1-%QfY4muk5+s(t{Y5eQZ zB89-n<8I88*X^a$r~^8sHW(2@EQkLutDUg*sE7}O_pSOS3fM5r}_`$s?Mcb*Mc9) z*9v$s`_)QJ@ZpSpV?d{oeo1T~MSl`MnLP^n9}cJM>twKkg=@LZYCi&Yf*wBsU^~jk zaXP!Md4|A{8deV```Y}KKoIKrdBp}a`($C%O%KV6V7kRt|z@$P0ULK!n$7j3!?rFCn*;D;90Wb>A zghPYm&u1OJIrDh+@X+!46ThO!GIF4HhDOK#I^qP@u#>mL(r7m5?oP)%mpN;qe773o zr2YC8iI~>ealfx|O#Il^4`Xix5_;`<-qk&W^-j+|L9vZKMWYF(Kl5VwV@{^lI)`f* z-ks>bV=tgro}iorjZOG^Ok&sV{tg;i%c7|NOy~$8>(0G?rmM~RbG8KVO8slBbIv+p zwQHoqW+IJiyb0qvE*xhkR z+c>t)lm34H(CkSo2iEw!f#AF}`c(VyI-f0A56wQ?I=seb_c?yM(MMZH$A7YqK!)M! zJdGfNnTHORheN(wM;_G z`2D1V2)H{ewFHw`{Ww4x)M|%oNAslRbX@Mp@^m~Yyes}Kr~^UW;GVKgLxn2sxZWMf zj>5Gj@w-EE?p?mBU;xVBA06}6b4H$OjRJk}j#xm<3ek{5oXQ&K9%}G{=T{_Q(B8Lw zF=UOTub^L&{OSO$H@l@kf8**gCmHq~8C2xAD1X>>)`H9n!Qy>YZi=j+7v-zzcIKPH zxNaDy2u@J=L2SVM0=_-WclhIRAviO^v8o@u&e_2;adeGdrFtrUy#V;cd`*^~N#cM_ z$h5O5$rB*cX|sDkWGI#lrX&8(;82sN;mynp=g5*0N7<7d7d1MZ;*|X25nP}?ZpSNn z4Zow^@@8+XB*|oVcsl9BDHv-izn=^kv;t?;cE7K6Y?&XQv4K>1tfP41xN7?B1shE- zZq3UGq`dFosVrXdvxJIl;xyh0be$90W5Fc7(XkL*GLi%bgX@9uBHMC4p52CW_oQ3o z$A>(F!q<=amtq>21Lp76`PKMYaVsu9{|PT%OuzYQc`B2HJ{drD2Nq=Qkd%UM_%TJ` za{f?9%=eEubligzK>78Q?%A}Qg7n6#wQ=iDXWkv{{U%+aHn-n}_^3&alYzlU$5PVVYlZcQZ z_SkN@dL$F7`G>O;)cs&bWE5;9sfSj6mLo8bhbuAXgXBNGAAFBrixzP_ki|Ig703G; zQODpKzyCd1Jz`Q3T42LN=KS?GOJS@J7Mmf$BkqrR9*(NIa47s5K0gFS9rk<4i68#r z_+?7I(IxQ-d7rW{U*rAIbqCI3;(Uu&hvl)9Z)!ll+)Vw+y2XM^4#y3N*`8pS323eP zf>K(}Z1#|~gT(`e=?}t3<|q9UzfXU8csTAUxF=@nX@_#SY*@HNJ)&~V>A#+&?BcQ` z*|i&7VKNjaSb~JhF+ZGtmZsM-5NG-6_$51*jV>isPjcS9z*Ufx`gGn|AU|t*mQ+1U zlN0p$2_S=q`odWkasO%EUy%9t@j+u)u3< z_}f&z&4(z&V@S+)_0!X4^-S@A5m|T;eX>xIE{Tm3{5SQ@b?c4cyku6@o`F;!!@%`|J^1;1#Wq-Jsdm3eM z;K%;mo&@;_c!U8lpbA+@=d>h2#TrzeChtiEn&5ERZc5BwRzH$&cCtQ>4-u}upJ!JH z)W}aHHGAHZByl_+W#s?IJ*?%-my`MHY&=f7;$-;!G2)%cM~$cR8@wN>-eePi$dBiz zZm~Q}iouLzQoGaq)Z3EJpA`5Br`}>HG>o?26!6(ghfVs0dEXPv@VK3}jGGDLe3j zsy~t>>#yPAk_VAy*$y5-c1I$m$#i-JbwoVX7@kv-y_Y{-knE$&pI3GQh{C*=u_ro^ zGK8li$rH;7c?0U{#^kf+Qp|8duJj!wG-LRnt9*w~d~-kfRe5|r?`EJrCVrVI1duCu zcXL?a%j`cdw@<(p@8N~a=4m!1cX@O8Kt|asOVlXo)5vE+?)C$)KFNBAPXN0M6ZPQ_ z$s^exi{)01jcGAI4W9EA{JS9cRgeq7_650?1q^HQ$@m=LmSxPT47fD=h=;T1EPn~c zDLjR1U>M$#bCLsg%i_E5{>t~0H`l-VRo4Ak@0E=0lP+5rK_B3_9v6YZ8Jei_#Z(Sb zxWX%Pg(I%NH~Ic9A@~1`tARQL@Yk9RWwCHnkKaU$U%f~$f?5TlfRPtdZvH5zkKfo$ zDKqRje4XT#b;TM1AM9Bl#y9L8*Jr=uQ2`Ku1*d8Fs?}3Ozw9eHQQ>WWf7iibU;aog`fUdPPnH4_ zc-xwpdF8(pw3oMx_EibWGxWuyQr#1p;K8I`S z@SYB8vQB=n_4p>?pFkssEBX?uf`}dx%NOQyJXyyQL!GUsGz&gS`+JiMeljgvmmM2(Ao$Q9GpW@Hf_(S%S>2XuQYlUxdT~s*NFoXUI zTPNv|7q7g#)pjxyFIyV|%4;WsX|dXN$#qP= z-*m>~)mBVGvVz_p;NCxobrVEfpLRlGm%LGog7C$V0nL6!zX?Mer>=a`GNFY>Vg^C< z8D7C|Oc#(1n<)tyM&vp35QqdcG>G9L5P7RVNZsF@>;wmAd=m)&)??vl+7p)HoY>0-`;eCp19s_RKd$-^D!{ z|73&744?=(+3(4L?`Cw99zRbPu-=n%MkhfP8KSbw zHq8-72Q1*RByq!@zbmIJ#$UGw9z-o6Q|0G-Niid?#_k`wRWa2H?zkVuVFD5%uRZikv?z%V>y12z` zVV@sf(~tza&|?f1o);N;sU(OYLu8TCv37MJt5S=f?fG2tQgJ+G`SG~hXE+qevtt=g zmi{dLS-)8l!B_9f93ttgb9TBMii<(NpAIl|caCQMLV5lvXf!B50G-fc$u=Aa^f{UW6D zB=b0m#QTnje!9E@G=R8(9G0e^X!4H99mK}V;}_6-RHw+4oOGmR4LH&uP9QnLZ0blV zGG$(k$pZR3hRllZ%ckZM(34+pw{L-OphwI;qg zix)n|SMDjNv6(9ZN%7-NaoF-1(xASoRZc2*l^Z32W3P{7fMj3ICTnv0Fs(^SsV0{N zU1zrW{b}qO75bI$a%KFvGaM3=-qHlj+O~1eC*$WjSiK3CzT`RqpQVP4gKR=(&nZnD z)-@SPSNo@@!#1BxW_X=s>P{x(F-u(Z(gjIZ?hl=;Jg8Yr2htcUX3WSlr*Y~0=QO?* zJK&An+`JKfxbmrF3+^{cVr}>1FqasTPohlamin ze|}_VfgG`mTL<|W9S)(JD75Kakn1j*&DIW|t$lYIrc6oC3N9kaPR7O-WW9h6Raf5Zq75<;PU4_sH9eE#hJ6LuP0-c?_OQu?z|e#j zD;~JH9Q2jtfLsWx(}{W_hOVmgHC~EEjS>P~a4l5V@Dq7?;AXb^kylJB5{Z;05}4tT zAq6=v1~abW^f`4Bv*uD=!3%F~y*qm6$Q2^0c7fR!3KP)_T3KxN+Z!oeJ7ohFNuaUGvVED>Bzf`c9Fdvxs&y4z zW}{e_cCBtQ3A*;X2NE&7f%2_u%l55-K|Dx!KX<-xtTd5}T5m}pdh17nv|RY2TWE%q z5Vj^kZ9THmC?fM3g~pacz5$7zf6Tv(r?-yPs?US+rUOi0XX6UOWFR@#n-J95ScM}o zQ?zkHb3Xx@#3tDC`N1(WlYV*Fl6-P|&&h!51QnA~5v$TuAT2+K{yQWiV<>jqcto`0a_6LUu{@Q<`kvOykLk%*%PuC2_YAixp6YwhA)ULac3;!WIg4lVnFHd|^ zafAvyvedf@JbI99aP~Wc5+4|)&{KN)duPlF^$ghm&KZs5xNe4RdfFDgBhLi#?`)ak z{;M@Buv(p9+pnKB+{Y>)RBCPQ3=9Ra9<_x>JG6uj3IU^(#)DY)T#|)N=+5gelbss4*tv8s&%m>e02TdlfY+ z79$<+#uu4e?_hvswI?e#P2!?6dKg-K#6$X_QJ?r2m#|)VP~jE~YpFL>e}|zu043n+ z#=JD`fad`fHW2kirhx#lA)nHv^?k}g5sVB;0l*OxqcM-C5i<9zGE6(4c9G3h1r%Fq z6l17aze!y_V{p)CA=!rOeFlIJmZ(9epi4WSqKZpiXDog*vWWbyts?Smt<9blS#Mb& z=7qm?qTp}P&FKo<8*lxFY9Aq5jI-=<8@&pS_%=rm6dK`(zoWmx#;rz&=n1#z@&qCR z8;XE2P`I3+3_t1vbwZK4Q-BplIbRfU*%B<8a?Nt~0S)~{^M`!%d5p=Ir_@O1$laK? zh9XMf*G>AiDajoH$d$c^POW%7e7g&10yZgA#$zV*66LM+c7lrTdP}N ztwTN#!#}We>L6K2?2I(Xhmd8cW3^*F$|eBhCR5mgI^Ld7M_1bRLOzvS<$phgYq{4R?P8)sjWi?~TT}pEr{*;*ovErg+`4F5(}HI` zuQL{e1r}G8y~Rt=4#><+^+0W7j~6hQaWTDh)Wco6T=emc9Q&JVEAy=exbnippqt!P zM&CTyJFn!5OQ{JVIK&?Xic}P$L zg-6b*!$D#9JRCRsBZ*uy5tO*``Vw5=LhCm|G?JWU8M8P+OX@s}9Os2M8T~2vLEjlS+sDRy5k$rj$teHF{id!&yk{O5}{*DJx zu5r{=Lbuy*C^Uz#86h;xi3*oj^rtPBJ0p%YnHpD0$PL}gZ29zgA|TSwaiOr>CX?>d z4p%53$}SHRPcg`RaMqJmiT?nbP8fKIO0?jvM*g6vR*yC!ua9234IuPK0;2RZbGOj@ zxa2H@Fd0fDR!iM8@@xP}EdV#zJ3>ju1ff;)1@|SdrCASF47%)C27pJ%urSUpYXIZV;NEPz6Dv)x1SnsJV97G@=wQwd3qMxE!)V zMutpYMfz9L8(JjqX~<1qXkR5QHJ7>7JGwD9G(%lO~Q*GtiCbhkkawp$;}}7-U9kWrzUNYyIZTSe%Zs8$)+1REc6!hC# zzq^;wquZ|&ZyXDWL3cl42 zEABTK12(tcR-oTdiB_akVhjkn8RrxG`btPSwic|S zp)_r+oJ|1uykcYcguT055RmfKo#+w+t1hg!O-+8ui^-i@ke6_2MTf4o}IT$k{m3zSQr zjh%9My*w?q`-dUaj92^Zc)BW>#NrFBFwx!BNX|wxUK>&|$a&}@G4Zj}g}oOyzT+hj zAVTy}1)YnE8Z|tLt0`u;g(8kA77P==-6w0%j#K3J+j4BH(|<)82l48lK3OZO8QRaR zGP#~hkViwy<=7FCVmj_^KT+^&w7(Dn(Tb$ov5zMyOVNHpn5u5^;qcg!3%;r8*OfpW z)^$-Q!ZMWNGoSb0oqE1Wk+pX6<5Z`DMe}#oxk`928j=|@}QN%TUlv?d?z8{ z-{%b|26`k9R6tTA8X6D`+8luhRS%=k@xGq6M{_=rf;{n6yJ4M3BIVDNWhN+q7A`S~ zh1w_+Me2MhX{NpfJ!ET`EC=#X8N@1}vKd{v@T!{mEOb)CLPyuQpk3D2+pW;JXgS&C z5lrnYpazFeO9H$bGK?;@q*t;LcRsy#xOys2w`d0*Do@2Ise-T78PyVH^^C&_hco62 zRm2?v)#ToFjcW1-hDuQI-kdU!u~}}*Dgd*BccL*`H(rUNSpq7dF)#obG={uAv=))e znhx;7@CkV^8JRx?d3p%!(&S61eGaa@0t`m0m2wWk!-1|4Q~N0lZ3xU;_;NudtCJqA zN3a@DGk0(|x0;cfL`4_f!N5fkYW$V@uyyo;=_{(@NNTpkZeY5O)lf@;l0%#f1TQhx zJNNllnd-GKCR*=)S-tu4c^>QE=h<4- zfNCn$+^;jr(;;UsKaoXiTHq!KsZOz6o;a+vHb=OsU0A8y6&d>b`NY*^eW!N1hmTuX z#%)U25^vYWtg?I?;cv8zQOocq6t<@(rcvjLzk^?Z&q2Dl!51IRP9;VlAbpavdM?+?c{rRRZT+U?7Es7(RZ^q`8~MrAiD&DCW0Sti}^I7^Oh6}A~-ws6%;*}a+3j-Q< znTtulQMP{2R==EJ>F^ms>=W2=o)ra$B-J=J{IxB$y1`ALm#7T2xOqv|G{Ggox9pyd z1Hm|P$ZDFN?KDIG1vG3BDo8SP5=gJfXEJdc1KM3}A99A}liq}G=p;De>|RDEn`+%C z9m~$4>^guQsYt+~q*1h!c9=DD{0WSk4FK;rim0qBf@dX;?3I4f1oW`5Y^!AyCs@j%{NS|yG zCoysZ+BYuU8VKvXJ^WTv)HW%KErG3s(yyX%D^lOM?v8JJigb5SVs_?7<1=nPN-hx^ zH&YXAQ}&}_22in}@SFKflXLpGf9J>I>4cuPyr>$ZpCJ3aK>>xu+(!7cHfqBKfCl>1 zCgNx$5l8Dyc>uCUW$l*2jmW|UK3y<0X-D{exh3)4iEH~dY}9LZhDuawWdkdo4K(Ak zo}GVFi#?E9c;uHO^pV@E(m6!&6>>1OmZjCvGZXnHE)}h<&h5D=RZ6jAjnYVFOQv^H zOPupvv^eMG;i)`BiGgMmk!TFsFra1Nq>nmTKn6p|!Eszw&1+Q!M}$DXWi%uQep#1! zGM-^G42r76l?-_hEi%fK?14LO!CBJHk|8&$V6S9OIN=Ot#9Ga5?yF*v7>#(^k6Tx(sh9%zfZhQ zscDOg50tP|y@cH~=BaYWF}oMujKu5wX5%}qEB3N>TF#p0d>g`R)J^M6A8mboQo5`F zaIRUFREHht>abz9#JdJ;iO|v&u#A4!r1#+u813H23k%`a9NDZZXE{(*DNyM9f#y9Y ztE*3kHC2=bwI}-|R_8*IT@E0AKR__?kgc$lP$FcO44h{+OHCz>D%jRb)B6K*J!0=m zuJEE+pa(C3tZo4Jp4xsoMQGqhD?C~gqo2WM)%8q_Vg07yfJ}^QoESH{Md5(s5x=eO zuv;T2EJb2g{G5FT^Or_|^!~Cc?-)SpD@yW*B};gxY*54q&87{7WDj$;nWyd_#uk%Z#! zxaCnVQ~T7ovjq_giXVCl`Zx;f2Sz-d+8j{zh;Gy5K*U<*TDY?WPPL&Jy^ARsBO2$1RY(8a{otcw#B zP$0Udstp~zkkaF|G7AZ8h{A&?#}!t-XS`q6){~}6!3(z8>}gjn?}g|fNOIW?z*i`~ zVN|vBN^_j0K+CN*muz7jQysn*inbE(bUtKs={%5tcYFF0>}-eu`tq#}PhqSlVUw4o zawxh=WZ*D|F|HIJ6aZ6PKDCs#Qgyq6-^*WVn!;dpBx98v^7IWBI$+A?$15zx0ZD&c z{Ms~4tHherD?S+-@Tt&%Cvk+1p7(7ITI-m~yfJkANDB=yD^jdr+E#d~XarvdvPy#s zji!h@21vM(eU3yOvp38s8Bu!arycNsUcA^z5XYUtT(z)Lpp+7|D=T&2fO=UH| z$zrZJz6_4}>FKyrm=e`z&I*ZrGPc3g4Knp#4;H)kjh2jFjyMD z63h+h_3a#b&}1bG-ihsU?qa8&mk))CFjP1o9w9lfW2@E+9&AISC`|EPapoeX1t4)V zDC0ug5|&8E{bsw(b`#zkVL#>Ho)%==fSMx-;zTtkAbH~nLp0_^7e9c^TpEjPnoWVa z>_1(-BI!`rG74BQe6&+0w3rrLDy7H$)&ymc#5K#~X|viKmOJvOXVW`_J*fH%Ny8^> zuBWr>%Mb2^4Q|?wMTbFD7|FJqV$-(j`gZ>bP~-b2lK9W&Rq8IS!oX<=PM3?p^?v(Q z?5=HIX{>gmeB3op4PyLlY7 z_^1~L^{K6TWJH=vi=l3U&V^qIyTK9M0i1<=`@pb?%hL()-lyd~bU066vfV+VFWDki z=}BQ$*ADCk2IL|YCcW;X*F#-Xv_gWf!8U2Tzsv9$7J7B|jAnPWt(}Lw8xVS{RV~o; z-h8d><|!m_P8nGd15{9Mqm)!dm+;P7SSs-wV6UhqG)|K;^c}8XN~$AO(pOSRU!ei} zPEu}l^*{=Idmm=x_JP3w8wQSPXrqU^Jm;XTVqrunMSw6EQ60FIAMMf(py-IT-6b_^saLug`?&EQP@6eK4 zYroYiUX3hA8_}erZMnP_(dY+t%nuHQEo}XCqWbbpr1hL)%DDAgM0C+4R~nuYJP>z@ zJTd00ZADs4lB*B%QuJ@y^d?CxZxWl!?O-SbgwhSQqX9gcQ#qjUY<+L%4@jeVpRV~p2Ay=uWF=IN37~oFH-_voml#GYk+xK=nyyq$e+{$@|!}36xH8{ zFjg^&Ih)q3K!3f`m;Dt94oT94K_E$NOrg4PXjnt;NQEp8n?c@nX^xszE@j;`3tiD& zsOs86EyZ_3&T&M`yO$KyQM;0Wud}jPaW0;DiY#t9hlr@LMP^-Mmd&-PuQXIc4Bf(2 zDnQ2;ZBg5hJQ1n58mZwL&RerHbGO!wCAkxh(^Aq$o8b{&D{R?Tkgyt6mfYKJRUAx< zVi*B>x9~hm@YJ#dkI(_F*tTm0#>4eKgIW~R@VQf3d(L$i8V<0E!U7tx;8JZEa(5Gs zdTi3+t%aV_@CycF%vTFnOJ^KmC{$F35r$ktJX$rV0<(qb|)!!vB$#Y;R%I% z`SL*bVz=}nE61{~%~;23ynt-9)3S+dCaU>Jou*p=8*a45+~j^!X&7n{hvgTrg~~dh z1+~`c3zoF$B|OS|lJkmDKpm;@x4h=$=_JY4p$g8x9pG3VfUC}T2xT5hvqT!wmbO)0 zV{lka+(g)oXCxc2(_2;*H)2vg=Pw@-2v&>k{9X|d9sc6@MOjgGYH!;fTJ7+dSI=b1i!|+Jx~(BDV9mnLwc7|lR#35Z zFM!chiUXpG0+o(Q!FQWt5rvjM_g$!i2-{JBq(RVSdIzvQ%cI%MQ zpS%6>T5~0&SW#|E_}(h@(P7x}YO2Qa} zZGXMFXSfX3y2VM_pdzPvKbti975_7bQrBcPdW9onkK(ZaxGND^N4nq>%NuV8|;?+{b<9>Uo zu76y?S$6#|D6$g8hE(ZJ=cj1Wz!n=8Gjrei;2y;bK8Tr9x0%5-_81jwU0si=mx+$K zvXEQ%)~B22C{{JCHUgkgS6KPlf-c1>-Bu=L4q{~3Bqk!Gfkpvn)4{}~JWqw!X6#y5 zP#DFCg0-{EA{(Fs$y%#c+1@83(dx8>zc0;dQ$Uu19HEv`s-u)uxu~msLLa&43raxIDTCPEu?P%*$C`3^W(R4%Pv~lb79ChVbJX3sWP{Q4W)3W4l443QY#yJP| zy_Y?CXKPI`j-@s<;%PJ*qs}<`cKG7xb)bk4P?1pbJgAJawII?>(tt`;xpWqW*+s`^ zc9B$=T?{fs3tNpYh5Wf{7|cjzbVTDVY}V#bPyttZ%5}aObbTCpZ9{0*M^pOxt`1j) zbKs?|V|0b~da`9oUg|ZSl&V|9>*Z;=-9J#y4`ygu^`%;ON+?Tc&b3wDOZSf?&WtS0&fE@nly?1EKpS?$08FIJZhdhQL~ z0|ziIbStIIb)2CCFiQ4R1dRF&U}IpT6x(VcPy34G3L9wAa%Y0X2{c+N)VR%e52wcr z74)aKE30uDCx1srhC}+Ug;sxj{ZBgPx`C%|99y5R2T+ThBIRJJ($L7A;=;<3g95%i z`GcFHFsih-Y6=lZ7kV14Fp2=B$|$p zWLvc%=0*vc@Q<+Y&sbu_S3D9CIWS+=i4t%%6X8S~#j#K>9#s)rJ%gdhPb8R=b!__1 z!|3%aVg+Kd?E_P`UCDxUAs4ZO_~l%jZt-Up7Y@){*os$n7Dispq-}t_QHdUr)rUOZ z9pYBPJ%o^Cgw}uUVbg#X9T%&u-cz_gWcPW>KkhmZL-It%}XjtLN*Oc!NA!rPAc2QRkRzJ5v))9I@6@~l61G338SA&`pCz@uYj++@RXq{>=^w|dN1KSDGL z7|hjqb(5;7q7}Ek3rb;#97z+Smi4470cewEv=GXZ&r4D!^T{MWuK>xd2z<5>k4KRF z@yP3p<8p5u2xvuR$>DlLSH9-1N7c2`x;99ZXINDY1z zdSmHUsj(|lZ+IXn{-)IY-F7sAjy?RV3)wcwRR&7RI9%Rx)3faHyFH-nAU`* zy;8)p0p-WUv&nC&t!j7OtU!BkLxZk8K)$JMF$$UnQR=(gJEGX{xASTPa%=?{CTr~D(P4(JiWt)J%$<-oPa+QWY?NS6HQE5 zK+fwg7sl^kcZp-=X<_nGX!)wXT|7=+z-Ss4NK9m@zYS$oGD^IX(XHbjm*i2Xo`9+Hk2; zzphZFS))2LMw{L02o%UM`!wD7TtRhxS{{q116jw87l>Wj!131%TjrCXpeL;jGE8I$ zJ|}1>=l7Chp=|xn@P`6qwCGpH>&CHP4jz&2;nG6!Jipl3hkPLs12l=0uuR@9mO=5 z;0l~1*YdTM@8DhN?@TAEBa4$Q=PV+ZmQ(U2)=Ca)d-c_K^w7hnN)6!}b$k99Kt1E5 z#%Y424PVOR>8jnZLPN}56qD^#fpFs=ib?`r%Rb$G!-q*2FtuH!i1cB-@TTt;eo0yo zeyQMGnWDksHFL+95nXKdpT-Ko?M22wEzzdt(luhS@`~?Z#DCsPi0s_hN`3zL?wpXN zkvE!H)}hey!KkzREP+x>(*I%kWBz)3cwEj;$Ib3xv!Un@r$Yi+jD7O5YKcbh2Pk;0 zN&gRU$`t25${Iv90pQOWZ=r5@J<<@oW^nCMct`p=O_~MzuZRHri59VMmkeFK#%B`E zw;_oT-fo}D$9!$^bH7$e0vRh%|7iRs{8Ku6xCtmT<}F>1n(Ogv7l26r>xiiZ7%$|- z6f~F!!38xD75%Zr!~mwy#xFohB9-=>P_=iuDa_Lj_iu995aD{TUuI3%DjI82ES-#M zu?WLJtTfT@&3jn|0&U@9x!-B;ZQ0KQq zfkU8uoA49D;}|9H7P&z(OYEbmpsQhxSy81-l#aMG-bR{nQUJe2C&6ZP*dM4!!XhirwKvDpzJW13BU9Kpq!2h}u7 zi?b!@?$%D9^vQNiBRje&M??$w9>&jP8KXelQ`%vOdkcD7myh}~QF$K+!8kq$r!_QA zh=HL-jc+;Q8G1L`*&MEh$;5&?Myaigfy4=d;50b2sDTMQSA0}i3Z31%qL_vStQ;c- zkbcS_X-{|8gFjL%!DA# z>XH%~Bqy|6iM5!)RTQIJM}D9Mk@X!}jWVrgIfh@pPA4-Lpf@u@A+mWXOst3ORI(|G zub-uAHSAF<#T#8o6PSb1%A^o$yr3X*jQK^y0#j+|q$x38Q9d>Km;UBu$6hp3jjlXv zYrH|vtUGd_I zZ+*>(J!kWH6uRUfBYyzJ4joBZzn=N7CFwf1E$Ix>KLQjlvKfEfntT5_9aKA_KD2uoY^l2X-o}2r9zMkY8$2J**8bwF`#>#bPxC zkra>#mzp1!CF$lnyfRioQPQxNs4ggTn#IGaz)@4wyuxBPA%3AalSY{)WYc1t>H!|w zg7!ZgPS@AT0Eqq&C_a;bhSiBhVwxyXwx+kn1%h{K9vEIV)G?Z zDGFRLaaBzZ)y%_AA22y$Ep!~5_##;G?@mI5*)0|8mP79qIOs7$AJE=AR*><)aT{>p7f(yd~al z>TP(z6TYPPwU{IWp)sg5o+9|Vs1?t23KNCt+(^${askx90AoO$zhSt}SI2BC9bQ{N z!wCQ<1^7{&QjD;6Kmzys@)rc{Ao$1T+Thn*{`nbAd5<1-N1`Vfd*u2P@1!O zYxPS@@$_W1#%eG_DOMi@^2YBFEIS8T+MQm5fje_L2A%qHokT z5~bYGH{2u3QLYYNlz^u^t_@AJ9sXj~5c3*)k)4yCJ0Y>!HB|fjoDLi04w?Ryy{65v z8mLnX7w=`Y8D7G+e0~F&J{~9fM`X&m$~Yt^$XTA5++-Y*6W@@WXhU+M4N3RI9c(v0 z=46w+6M;=tKS@5mTBdJ5kOXtj&7GX;cqXhQ6=HYX4YO5SKYO>@l(0kYDtD`BD7}Jp zZ~`82^0-uW>IW5Y6_5&F;0$^K{T1)E1!E1j`9< zXjh`Wk2VSP&hUwPMA`AP_kGMS$Ilj4t3f>D2(sdIM${pw=i00*JG0udwHC$3R$fiC z8BHaU^M&w4WFnIp#$R5OBTvH0N0F-lmt|P;e+d@Lu%Q%YI;461Y-Sek*}ZXaOoC&} zFnWjyrr2c9%|1Qy%_!D|Madm(BNkqmmh89k6GTI(g5YhZJ3H}8X7*xa!FtjLQEd$L z5Q}jDq}q0`xdEWVZLC5+(^*1%hvAl1MAY(JpYva1(M_d18mD4s;iCdb@IhHR`0Bwm;)- z6gA7pfwALGe|NRy4)(2y@fpIw<~rHSxbc^qg1Z&j6Un;aK}hNm&_lMObp>*aA#7O( zWD6{L-6BV>kviyJ8695_fa=U0$9jrNNYDVlotQ9g`?1{R(HQC047Lm1?`P z`dYAGk(eQM+sJgmYWGfsP(?)b-TinP7e)bnPNjWqG$v2Ru)|CSu`R(bRGQH!L#h$fUk8**r=hbXwUCxwOFReJ$)9$- zL=Mi`n8|o6@z~SvQjbRRDjOHF&4ntylmDYA3w1=Ah2FjqQgZ{1R zNn@2zF>(YORftg;q~U%|N&dRS^X1r`o9r;aw+Ac0&B zla0!Et7Z+s;AI5ODiBPh&s)0d^w@gI?R5&3Ub8ek>l{&PhexSfnZkZEMG1t&Q>7OQ z!4&m~IF_`Vd+&^nbOg>HZ4URQ>6$fKSRo4ZmuK+68x`i`kqopR4^Ryp2kCA%gbzR` z($;g^D}B3H(p%i~t5Q-v!y+qxy|KnSdpW&3UU?_O=^Rh=E%!u^v7M^dq;X zSig@n;s&9CZgQYOnJB_SP2N_dm}_;ab-Bsr21i{G|2#TC8v;HIZVq}^i@8e35FQ41 z%i|IB6ropZB4g*L?P;=tuxa(U6ussZJjoU49pBFHXnh>QJSx<*m=84+pg%Wt(LJv) zRRI#vaJ4V)Hai$mCWPD9vSM(=l-66MopkLgOPsQa(N5{X!ajDX3;7%N(Xc5kv>#-3 zx>`4)t5x65a>(s0e~zzqBArLw@s7n8bq2E4#KpGTK*=7NQq^m(z#hv_Tx0%3u6lnK2=1ysc_RSH$F z9uhYm9-B}Y$2nz5UV*|@>(h_xyNrzAYz4C$^J#d-0C`Wl`SO*MA2E4 z6^XIk%7>zUdXf4q7bmNd!K{%i>F&01xzY@azA{-dx+VSqT3@v5>+UHC{cmL75Wt+aL0s0|xFX%trA@+oP_E z-%C0;>1F>;%SzIO>pE|jCB^5%b$ewFadX=3vix}5?P*oTW|>-RS_>F`vtfJ1lpNji zr?i=Y@6~MRy5uKmVI6pR9FQq040K^<>$>hBD6QZ%M*y>tLhi6nBVID5cDSZ8ZVJM$ z$p^x&iN6m9mjF=WP9|hhULa|1!;!ELBQ_sJ}Z`h3+2U|hgo^h8OUUadZGAwf75}+KQA`r z0cBo-b>X(Xf7`gou^pBN~KrE)gpYl8e0du_U>2l_@|REnTe88zKo2 zio~E_NTix5+bTn-j)Op3RO=ge@}7)fm&K{a^Y)J3gR6<)lrWi8fys=>Ct`zuzoQbq z7`w#_RedwHZCeydrK^shtjQSeXI3#gNy#pI4}lUa>SG~yQZ!lL8+9T0itY9}I8O^# zavjNRwOME9%b*^ZiLZ|(s6fG8s9LRXw)m(4A9&DrIBxbw5@BUx0=QvxQa?EvUel^E z8pw~SaD&jfaU+1)Bq*B+)1B>rQMGc?6}OXBY;huZvp2U(CPZNqzZC04hvgS|tDW@g5o##NxzyZG3r$#z4^``#R9R@p@m)-|(5`krdr% zFM3p*+zaimGy*aeV`|<3Yhq<7O-0&?P+Gv0ha@fBfTeM>JLL~Y@{%y4UhYnlJ3JAus|DEQAX=U_ zbwbm?#P!lY?V(oSJ9K~XryYWwok=pGQ0+aD%1tV%CDR~VGIA*%v zZ%0V^A%lc(5EwPHl}Bm^e=E<+h8$OTOSae!RJ*ft)2?w^#F;PBMIh;;p-5&fj5=;`Rka1}zIN3!tMf;=fheySlT>czmKnS2D$QSe=DQQqs>D(D1qN z2H-5x73FTWU}>5$A;`j5=Er9;9cXcd%VS5Uo`@|B%2&3sXmFGaNs(8FFA~E=#b|5N zMdsNN<+X!QB`jc!R)?qT>9pC7r=x80A$vRdzO^m6H7yVY%j8+SN*$I`GIgLPp!^O8 zj6w=x9THsF`7C$qsiMHqatw6=qSQY<`#R$*_=rO?`1 zsB;RPoMcm_xxnhFJiVU+92EQ5%v}^Ue2)1~T%e{|uPff?$rE5-sQ6PuO!*wfrVs>b zS;jCD_Egt_8N>n1O7bP)vkI{&J|?BxYP{m-Yp(byc43qY0wx-8BTrAqoifg+N$;1p zH*bFUILm)REZbR0-*COpfWX6A0(XkPNV^2^3T5ls1L30#h{)*9LDmZ3HAVrtXPC$OT=kZ`|1L zn!`EZjjM9az24X<0>52YA=4xK5`5*@;E(f_Y4B%yZ>zZXH`Iaw%W1I2SfKPs_#v7O z-NK7QMOlY0@);E@>EHQs1}L^}Y1l)H*N2;A#dS66)TCH6$253ko2B1&I-#oO+zo2Z zg$h$=NxmxLR?_Y|jkUWD?7qrmED*$ePKUM|-0L-UC*7V6PUI%YM%uHb%98i3fGzuq z8qL?m&Ic?Gi&kVnj45eYw>NV&Wf?UN)eo6XeRo-!-TB|qV z2Qx^E4ap=+Q7q2Am92EhaNcE=-is+v_Fv-r<=2U6`e=nVL?k)fJCPSblKaYNsQo= zs9aJLCC2Lzo*IytTn^z3yb$!hAS3Ftt*EM0Uzk4_)lxHpHdD({2w)5-rw61al{P)u zf{LdD0t7rmlT5|+IYaa8k%&VL2HGPpb%4nVxkJPyah2B>lWMlmkuTh~7wa=jHbp*? z;y^AcTZrl2=T~xuqYQKmetOvApaa>UI$jkOXqEtxyweQCCFS*1cM<@ikGXca7wz8 zIJk^0h$xA)wsAb>3dg|hfW>1YBy{q4ES%)U3%>@{7%#UGDDRO+MN|9%$zaLmAe=oy zU=+>b=WvMEXXU?u>e#R^9`>JXd0}-e7l58N3QvM}?r}d>&5wh^9IZ7SD$2j+V&AnE zd&rbX91>XWFQ@S@cr_0IvB*9_IaXNlSaDy<;y%^N=vHEU0-i=a-P0&6c}DwR4^#pV zCCJE;)g^F`9dGKe<2BT%9n9jwRGUsO(Ijrq{II4_xZ1d*bvt;@!k$kr^zg{ub#}Llxn5px3f5{s zLk?R(icunq0A^#)t*X*gUr47q!29Uiq3s2;Q(5pFDWH5!Xl)2Xa`$wQ5^F4366GFI z64KceeN;CBTUc$4Zl{L@8{9U(Kl$XCdEQbvYyD}9N(@p;Sj|YYiZ5j&gBg=9d$z+& zGWcQnWB&fBxXX|8(~;~}n+;b8@=~|_4-2+l%@U7rP0=m3>Df) zX9-$BDu?gqUx~81ut-+cN~6%&f{kgDmbI`Wa&@eooU|l7xQ%YzyH>h&8c6_%1q;9? zV75yR0?!MeA#xpq#Y6!TW;T5hO)cQ1g8Y_9k79|vsUY^&F=p|AC|VBA+#Eax%TDekqY5svS%Z3C`}rBM>HnP${`p`ri`i)okgL)P1=!~EbYT#o$yi+YH6 zMHXZh-~DoPdi(*L-5}80oY|?WE#24*GTkK7PfVkDOCX0VAn;p&M#Wsu1wOi}uY5Bi z3-uUdtGAgubGqhC)*|~Kq*k`D4tVonQ79J`tA$FY+yO~_TqG%Gd-imYN(Ry-L4 zzR_jyjc_HS)#|MUo2%nU{FaBG9&a)cwE5bN6(qdY?lPvHXX)Dw@!H_&pD25bDF{$X4uqI7!pG6+!OF<>k$0JbR z=e0uh%43v9Pkh z5M#Fnpa<5v>3+}d;1{~+GY<31ddEo`%Cnh#x{1AUiD*lCKum6}%jY{u3&B9ZE>KW@ zsyilNsYfGy_4+C_P7>p9C@^IokKK3Z$sEb6+TXjLA4!^LTu+yI=%8Q(6Nwt%wODX)=g z2uD_TC`Pb;*3u6`;i|^Zu8!&uI;!Lu3HMY(5!MMmgxX_w+J*dg39-Uu}gyx}=TM}87d9M;Ad~6o_vfxP^$lYh3mIAJ_MEyWcqq4$I@gYqj z0j1FEAPKln;Kz^*ua~FgcK?v1@bmjkzFh-si2BCPPumi<8q+r#6mq)EUz*!XFR&d* zjx)O{YTuZas@rKC52YAX@w{3MmQ>wMiz7J6Ld+kCpA0jAONj}jrkKF}YP&CU7h}$g zzDb}Vci0~?wBG{BN%Gd{3&vSPj^BMUI{Xie#;Az>>8-r(>ghE8HBJ+;F0rcn;-l(N zi>2n`3lxnR9-yt%v5mQoaCD|ij-vps2#|uidy+q&r~~)_;k_pj%IS;k6=Ze1mc>cJ z^^GwQQq0<;@U<^E^VyQV&OTHTp07aj2^D#zILB9}Tr849R?;iRUDSLI4H}<{yG=c` z)ZFXR+JrH88?-i;f@jK9L$T;pStg@`o&YZ6>sxdWqhpt%xEOAPaEnoq6uOPLLSl4A zW1G#)taO~=9IeRghFsYaVaU`4%_{;d}DbwpN27?U4P6D-P+6 z^gDWmx^*Xqyz^`)<(wfHnmn`zpgSx)9C)d>G+-9ZH@k;zt|%Sd@nA&nCWWLWB>cP71kfZ# zK$#NNHKiUCd=#n%71LkAA4n*{i`8s`{@nqy<^oHI$IG+Wm7f-Fgn)b9SM<^ z6Y4kT@g;B-m$dk5nbNHV&~Op}=po~o8VLx*kR2;wE{uI10fC}4MC*l%;=b}o-^|B8rQ~a zdh4p?@ds3aCIgvLEJRiaLeV3h6mr!Cw_%(|ajuEiXLCUc4O-&^tc917j){j91uUI^ z+2MxfTX=xGT}InTZQ}_NR(!%O$fPi}=yQ!#Wv+1R#wE?KGXdmFJGywp{bsw(b`uq$ zS-@C-MsZT1m7r=cL17EZvkc$sF6o)lWpa-Qq8ensBMG~IIJew@I)*R0D%9{wmB09{ za!&NBA@h*EP~Jd|i7B%#-qw~Ap`x+9`3!K$BU_K6gWG|njrxs=iwFs>DsRQGOX+22Hq+~dFsUBG z=+xWrf@U?&4eo!U7MMm5Zr<8JB>PBE;la%24{Ms~7|VkZ*056ds`zOz1*JBwnv zTHhJSgBUMSZ?}A~DWNGx1}ty2HCCoGL-P3lgDgTz*BER{<(&x=2=idcu|P=rnuCo;SzS6A3v` z)`qRBFR@EL*I5G<#6)lz6kxrc1ncd{bwB(CY5FPA6S70K>NW>0oF=BQBW;!o1m&9^iq8MT#9GFmoLy85ypb)^@i zc(o^{MFYBz7Ob#O3vqP$(^)}tnFd#!UgE7U==AE@h~!?&Ls!1(I{m}kTa*McYtR^_ z9OYYwzs_njmAE|Yp}BsfC1?qS?|~y9D?9niU}4R)fVZ`oXPWD)&!m}*vhov@xMN)~ z0hK3uUEbx~gYiP$7I&7p$^|0!^6rS;Ox+TBce+^aXuZP}y?2B^bBB_@sq}1Bm2S?)7u9v? ztSgw!IAI#gp-VPRq-dhwNF|>@shCP+SE>kmwvCm5b}GmriSXJCqWg}Bz7oPbka0Vs zdn1s!%0^NQ^g30{3K%Hfrp~zxg5)LRcJMu#Cnd=}xYoSESeP!bRx!$@Txc-;g!E-} ztCrJGeyjE_X~kO~ht0fK6je3E2^SDqZ8B2|a>5|r-^1ByTMrhB=oeipG%AUJ(F^Xwa=otGQna(| zrVfopmi<)}JzegZ3``++MNtkkc0RUQ(nv;FV_rIsH}c@C%rGP87czvdb}rpZB01)% zFcgwLvOcG zr>GF+!)VsPXGWFJvDC*IcDhx`)uzl=s|?m4NLI-(;L=YmRYMiKJr8TN(%!Mb;Ej|| zss(Q_8S5~2sFEH+k`85dAY(swp`Dsyl1&iwFynn0 z8)iXHgN7JrweYNm|05X3``z|Sb&*hFeyaCjKzwK%Urm`9ims+Ku}}kP4Jh6dtQs)* zPJ-n8l>NcI)nO9ZgrWY9TF&4w7LInGrRYfFdJqrIX@=O!agaml!#PAQ9e z+H>%-XHb8T#n-pBimIZ6&7Ptn>r-NH-nP4@PgqKDD7qW%I=W8Wj;{67FmE&|JKS+(@nG6Yt@9h$f}Z_L+$&PeJ#6fRQ^#v8z=sSp}N62R3)`K>Ap zkFcFVcP3c!pD}6EE4}u8&(SWfGD)&s=(57Ao%!~@UdQ{MM8_)c>EBbK)J*}Cqj8yX# z*dWPlaoex(U`l6t_M|WQ^%I#%)Rw$gkd?_&c1qISeg{hz4*4Wez7qR={cVDW#Wf`_ zePDf1+X0<}@jHl##_y1}H8bg1U^RjN#(@Yk5YLdYU;0(a`0hAH;VZ-p`1;+GnQ64q zhTqe)&8k@o273n|?@NaFJb;Rj?bI-{*gT@Yxmu#qmJEyz$NieDAEnifA8d9jGVbrU zn}^4flpH)aNB}g7goa$95GFVbsb;W7Mw0fJHY0?!<=q#bL}N_~Q4N%+$Cd8#rnSEz z>35Z6{<4FSyYjwpQ2vgvvn*o*&Ed5&}DqhaTE2$UnC743cT!6fTiX2;|-mw`* z)wWi%=ypG0<@MqufRxmSU1iJW~nR-$1L7`!|^dX*7TL71bVEsUm9XY2CiYPBYih?;=Y4kzh( zMUN{D!UqUV#{CgrL^+{-P3XUGPl_q~U$0eAVZs)faC zEsl*bCTK8MLJ%m|WI0dfJE=^7QLf|y`7e!$(A!I^-fL;uI#O;l{xX!lkr3qVt)F;*SsTbb!0wrN|0>`+TSQ?E zHL*iZro;zPIO36NT%MpZnE{Fw}Q z`3cd9ClaD&AbQypjZrtEaG*uNbVCD-kUwa3dPttLEsBBbc(&dEP=9qs8>%n6PIQ1l zE2_WV+_ME*G^61EgW@RXMVc<4Xq@8Nv!0PDO7`{0E=^^$D^}l72wgYfpPzR5nKjK9 ze?wu3r$9kBR4GkOX;h=#6gq8b^`@3?ooPna|Hbi(*Ym7Rtd3!vm?pHS8ps>Zl(lF8 zx7B#iAroCX>Ju=@%noFCTauR!sazFJI#9>(aip~v8r-v~+LLT#IZt_sS|`OSnx zTtesyZRsBK<)Lz$^uGCS#&aY0yMIPmKK6E!lulhOXaY~B*Q+1hj#VL-81s>P9PTgV ze+)M?C3#dgM)@qGFvj+JBg(RQA>WQIzopli?eZN&?mk0Nl@q&<_Rn|`iqCyed3AnXph8n=$ z?+^LTd^3>xqihlabHer4`hhCR(4C@Qwl+U9FyIkP!wP z`a?Uu8Hw|i=BT?lyb7{ao1_j^cpV4Sw1Vwo=!cKSRrDQ5h z;xdw4zg0+QgW|$o;7IuTh#sax94Kz++NG$)+((pT`$v#LIj@FeR zP5>7MqEJ-2o!dwA442zr$kTXQ+KP#tp#6xv7?6H2)>$8g)~mqPrLY-%RSjezz$X@h z4`GewL~kajs++wO7+q&Iqh3JkHK*iR&y%85=VC%3Av zp{UMi_yZ!$%D`G+9>sX2!Lj2^VHVr^%McTiVNC+uZ4R0Ow<{VueRw(vTy!6S6}3c> z5+RD@({L9Nw^P3TB@kvrbL}F+Q@h(9Bd>yxQcJ&Teu7M!auKnd^&ZeT*>VjY zAoml@xUt%mkpTm}%*n5yf3Mc}v9e2VQwSOktYqXYoMp5H#I@4`q8Bz2t5XR!x;Uud zX=d8VaJha4BurN3KV|u0zY>W2mnyC`6fJHHwUu6XU!|ZwyS<1i5AI*!*aRCu_L+S4 z3i3@{iny6mpDMSE81Bf{r;3!aA`8c?p~X_IB*GVkR;sx>!Q*P+7Ss+mkS!M9Bp%~r zDgk?6enJ;4c2Uhln?8T5Vtqm>R8lvo03m;V%QtaRk6CxGH& zlB#H$I5Cvhm9Qthl`@&=$S2t8iY2H_?YHbq)tb|i+YOKMnJJ`d`;yb6r}xX-n>V^o z4^x9xu2PTx#cj+nw7YhtCMg3tND1@zA6p4-&(?$k#n^iIC zV~m0u@6#b!)`v9l3J=gy`e+FL38W}9k%PSBAGiao6fUW_auH;nXyN5^@-M;aQWG8 zb~(AJ!qGeNO7(QdGgD5YO=MV=Ur{T3xt99@Q2e7LsMgGc_Ei#HeZ-~za$}~1g0!Lx;uZ6>X^`(NFUwv z{cXv?-7-I6RN$6H^@n^l6x33x;>BguUaV{f$t=niEIyjDwXcE-qg8p&ty-pWr#@3! zJYk4}Yp9~BLZreDb3m8ZK=sR2+Yh&kuLLSC>9Q@EN(EFR|Cu3IMrN*u7WlNrZ_dEo2!wvkqnQFR_F-eVhSJ&V3m zhb-FMwx*`#jok04>;oi@aZ=gRUDUzeOjYIj#&p+8c0fxFAhr<|^kL@E zUM55En1GZc4Ur+{8rK+UOsSe z(L@w0xJs=`{tE(8X-rX7v@f|R|JpFvO8J_0)D|_G57NTESODoEut~D2JJSy0)Gn=h zuijy`1_gyci@;g|=V7?bpR?ht$YI99v4!FHcw;FV#8#4Ly6){k`_`i50>wNxVXy!W4= zt31?cg^~WCzPcb*NELHX>LnDeio0DVES-CNa%~eIJDYK+Sk- zC&lN-L{WZZ0(+Kp0Om}Q?To?}ND7| zj1;#j5zuPhKuor<5;AAO+5vE+8$4GT@{RP6CY|ykga@AqYePERitN^$E2puy0aggm zCq}@dBqfhT+O>N>#b!1rFl30HdLVz1Wddk@yC%*2?U%uas2zJ;9=OFKJy2p}5_MXDl6LVG$b1d}>yY`Fxxbc)LoJH@ z{VXHQ5t)#y9|2Jps_(w|`|{u!RS^%D~JiB!!c)xpZz>_QM3{C)No&S%c7}SSjseGX@dQam2m9X;alLw z^!QRT#UPF5OuZ&duV~PX$a73Jer%F5ulKAAVdq+Voi$3nSnricKoL?>H}#Tdh0F7E zb@G|G+F~PmLBp=$_42gb?jMpqjQ#sfzU5stOUmcbg zr9BhwNu9m2rDkSbP|FzA>I;#ZDURF4#8&xiTy1k`-8;JaQp$G7+6G(&cR`jzEOkn7 z)iW!w>hu}%&B6OWAQN;=YoLf}_)Oj!MBcEr;at}^0aFbKN(T68bN>af0pPbL6sl?r zK#7ge$o&`@sl1c&!r0Dc49it!}zNcn+@FAk) z!S?=S9QHIBkN7c4YX>f63S~?Pdag;SX&6MX;TX{ZEcv8tudU=WJMN|6DG=}r2`gep&l3!^jSy4mR z_roq(;wkd;5800XrOZ}v)gG-iI~I4yqrmU*MOR%M@1k{rB^5^cn;D|txGJo$vw+aT zDwCl)IJasPr(UmYO<0C*l-I|GAr+)LvAvFtl?nnir5BP! z1rE&wUZH{0V^Zn#IDiH2R0NtSYeM>ojmBLhqsE+70GB=)_kF1_)0R69K$s!s<5e zHY%QeXU5aEl!pZS#=sKQhmqn2p4w=wW_2nRC1tkLBI^U)Oof)}7xf~NzzrNy>Mapw z;j^n3KJ|{^fC@gfN3rMOUbth>Llk5&U9IobHjuuRezJ*tmd6AUn2mnB1=j>`jA z27iGk3QZ!7;h4D3+BElJ?N<=>tkxW9@Fcg+WxHk{^9D zyf*bR-nW9mlK(WBlK1ZQS?=3G()s8uB~Xgegtx4o(la;FIty=OrQmObgU!wA>4`9V zGD`}*O#c3PFRr0&cWpHTwG-GyP<=r-5R z>CFOa!X^yhyBoDZi!t((k!36$cp4BOmHgDAEycxZsg|HNC?O1a3E}4g4C!Xs|(YP2K^p+EER2-L8dlZBDAH?hVUwN`)YB02Me0s z*@bw}A?GZnAC_dC-3LTMr_`dO$`KaYTuek;$HWcMhiYk22Ve_*&E8lu2F2zat^;AO zjrP#zoXVme@_tk^8s1(`$BqP~F|2&3 z^w6lrfb;=@dFClVl4F$xQtKX82&c9Wm9%6$FD?>yV~^4^dioU)Ok*q|`;>;jRkGHm zy~{h@-sR;=n+-)iFB~BNOau2W6wxMs&>&SVib)4HDJGNx!u$`}r$@H%(Y}atIbKYB zG?m~!FZMDLIn6T;Uz^azl6!w2fUMGIEdAMHvxV5!NACDfwX;>7QNtdkwHB8+BNtED zpqF{%4w0mr5?;!V>MLq~Pr_`pVoH6jRZ|=CP5rW|Pj%-+wqAIkWYkZGun>?(7A@Lq zI+E4W&Q;<+OEWj%9#$J)saS~BsOyPfA9gM(4bb)OTzzflItL=4v!fEMbsENBs#a{c z_TrCVhgt-y$)HIf3lyuE&fq;08gz&ff>HAxrj$eKH7wf~g$SESMA*cK2s=YY*293i zu{o%|@;qPMu0*W^7Ya1e#CeL<&bXejU9Iv6aJbCx+7S2W6eTa5FKGkLcZSVYOp3&({7b=LrgpBlNZE)p8Sj7TsP6(4rN5Jn8=+VL(gFE@}wzOCPmSW7}#1tdqq zg1e2YdWprey9A!d zKL3SmF7B}(Y}<^6p@x|LuSIu~(t6S9=$QY+3OsxPmIWSO^ijIPvITr*6_et|El0j^ zZ&4xnd4_5o6U^ayk3AeV=I$`3qop>}&p9wD1{^W{Oji00*+qK@F_5jLz8U*oKu70Y z+d4W)3d4yb`uM|6@w*OzCLXSo%Q=V!I!ysusCiUqBemY*@xbyOtGPg}>8#=S7aCa2 zUaPBFE4omX4dY5W(nCA;y*)*1*x<=J%(ur>%NkeX`1pvKH*U8Ny6eHcF(j(L6#|-)}OiRTBwb}x98J@O;O_2j z!5xCTySrO(cX!tW5ALqP-3jg%SR}YR?0);a-;b%&Q#)OK@9iIZX1cp7K=DVrz$Nd_ zj-oTFiO<-aq9a$K4pWz!T%4!BUsh4M?`(?H*Wbk@`&6*z&97gjJS-!09052?QpHo8 zNq=+pdo}ymRw(!$kui}DXbssi<|!{#)m%&mvoWNV3?;$^Lc+)!ceHS(l`8trreivF zcMd!{h%%N{*hrjtW-Kp%7Lrb`TIJN_rtWCDNuerL9X8k z%|(%D#BL~T%#kSk8coMe+NVvBr#bOAfVm#PX5>tty(VU_>o~q-@acR1B&Gz3vqO zjldz%iPg2btBChGm*24B^7jjyv15q$sCZ2^m5CCmTLu=?YI#0diB3hI@Z6pcey2l= zqCH%f_Rj%aC04bZG@*o2Ni??!mljJ~=I-A|(3655>U*g!?06C6{Ya()6XLhQ)@IAsx`mX4|i%=V;8 z9yDf%X&GwtHizQ4^jmP9TPy~pv-f*YKz^q5{D>bm)Q0#09TiG!vPQfoQ|X{>=etS6 zFt!eCjGs;kl%~bN?3bZ4#N_=Jg{cpQMp1n?B;yIQ^9_5hR2YmJnV#u~>Dkj;xb^*_ zs(!nI+H>JDrI;@1>L6j24wB>o+;!|Or8)HCm`{6dapJm>tKVW1o5l9a?l=YJB#qUW z)U3ie+fO>E<9}#@;fC5xLmT(<`&Px-uo^m~B!rAycNUJ>W2!F4@D?ClquHYsBwIvF)j=51rZwpqIT8pDFtn|**BgJ7xHZKil zwYu2Qov!H;Tp%@R!rT}R7DI2I9Mj!|FePa^otLhzL>s6bo4+n#duEoXaa>UdAYDcHX$EIV5Cx6TU))5kA6Hd zL=|{~t$xZ7qRm8^+gydLf0Uv8Ls8~~O)+Y+e~ij{$72yUdBcO$K7BcqpB&o6l!Uw& zm2he6Y}ZInNT!gOILP&ZDRTc0w!{}>?9rE`E?xl>d-j5z(>S4~##q~QR(-#wZ+)%D z{beieG}JXdIOfJ{ITV_Fl{XfhVT&S^5^^kxI$Tv4Gi%CHi;czJ|6Kc2p2F)NhP%>JylH_# zWvm`z$HI7g*4{xSGvYEqPb^`0b)tBhk^PPyxUu2o-Z7dtrAef0DIbC;oWs7NH^+%^_QjBCPF>Uf6Y-WBqQ+_F%U z&~5Tdlq1g4t0u3d_#80`Y0-*TrUvr&%fAJt>X}0l);5yDzc;|Log|HLIAYPnFlJxh zie8lM1Hr(w#xP{3u0E1}{+f(4%Kp>gVZ{Iigcgzeevmkd<4Cy$+pd4k*H@g;+?0zQ z1a3Vcl|quLfVR78Cqh}&dBWeF1;4ZzvBdOe(lfFytpZ(*{X$rrV#DvTuKY1I_4EwC zQc`T^mI*5h6)dRQ2qo#vmsDd&C5RGO$&*<#{KaGaAp{k5JsTg#OKViu!@+(?lvz&C z^?kF{qeQqNq-BA1OE=3=hZ50KzRMXgg@?jl5ygJ{P^3Dptwcz2Z#DYKGQ z`IDJv3e5>AH(rTynx>T7u7yELj(#CfBt6c*P2CQtTL1AL8d;sp5a@&Z*QvbqR?k@) zAt-T1RQXG9y=LT0J^FTaH*F$0uUG?gKL+Cl*JWRe1f=eHP+@YykMoT>5uzG|mql5v zy44v*?9BIV^;KyeW&CC}7rU+b2C;7CfQ0Q*jklKs)4jdxb`zf>T|1*>`FVMRAFYEC zAuU<6i_AmA^h=+|U%r@eW9#uHdL5pjR_`E}%>ED%FJmHLoXs}iPR_K?l70PpGM9h} zUG?!?!JcdxPw=og5x`V{%4pxs-TlVzu@Sbo=eerK;o#H!$Lhm5l7ly}K)gt&QZm`c zD_-jrQ)7cVH`O76JUjBNnnD{X6vdWL+loiqcr&**C|IM%?HTXEOriT!}nj0bUpjL<78 z{C@o_7rtM8<~Jlo*lPRDWm!bLtwZ>}Nnklova!(8rpYIAD@`}bBo-8EVt`Q@oynw% zoX`ihPTT&@=O<77B*ov6)^W8XDU7CX22TOKS>tJR3BAA3H5%nf?!QHuTHg@m zRNVaZ(2&IYdT``iYg!VIFovU3LCgOmnK^QVy1L4Kb9pP{n=xFq6^^qklt<-EQ8e-{ znu~HXhlsF7aD1}Bm&O${;y)lMjufwDe3_Kq${1WO%tgozt2JsXOFqaA2xH*^L$%~6 z$r!~O2FWj$4H}tAt&S9-gxy~&`8aG0c?QxT#<1#Y3s7%>aYyxa1FbOfkmh9k%!a;? zx=CRJ(bfl(5Oqm6y*5mpw%u9kL>KI_kp9#{YLpVi0(FPjp`vY=vzB<|KXWw~MUE>f zsMOOqd}R4ZjN`wf~U`E`g=g(C;OXDXnIH;OeuwH-7S|zgWap-z;$Eq30xj3|Qt5|; z@Vt`oht28fmv4hKB}Ta8H=@#Y9kDo3`7gcXIHF)*71i z^9hLKJjB0TCnZttcnJY=qy4Kv#?C=x3>kNRwd(NucIAz~qSu`i3Xd)k+Y$UQCJm$7 zWv3&{iZXz8A&9G-Nu5^ufJ95xkUj`YY^S{jIYG4fvt2^ z$4wX?wpwEORu?D!Nc|J%2XSHcVeZUcJCy{8*?0G-B(&v0r%ODEY7_rz|9Hh&!T?F_#cP!YhCDdxTlU_FL@9vsxiX`Cjo; zZugB6vclhN=3@i-SUMh{vbvWJQRD3$i@p#~uxK_ww|*jqJe3Do8CcT>MkHx)wXDw@ zZmmjqeJP_I0ddMPNfW^De>tly_-ZY@czY=7#>bT7W=BG-y}2bsawuE?rD<-iQ=Q1&~xfo3R@)?28WUP^I+LU_UYK-LOIlZ zI%)!sq9s;jBFn)~jQWx3ogb%{0NQfOdaVa+xuu`eQI51rEIaJ#mF@U*eix~fqs{6C z@vb-~>*cmRwriYRkp-xeM>dD>jPqFb>tn~V?T{G~8XTUs@>B5ciVMxExxDAS%2ouo zhGm8qAuuR8G|iB-37(M zOVD+TFh}8QpK=OgXju+1q+E5dHMsL3mfQ7nhO+T}pzQtiPRRUWRojZgnbkue3@4*4 zS0bu#`JSxSRk9(_M-5&@HEAKGt_*DD8aV=-o4fbIv~Wo}<>Y0cKMOKuwTi8Cg2(mS zIvR_3s%BQ9%SD+#ZanU?g2Qk|y~bYJh-f$l&KUIa<13ahamY6I) zD~IOkJy2Sh8Fh&kMwDUD2o=t`_yr;dXHNN8XXz6jXu_+X5k@C!=Dg^IUQ;}@!zgz(n(yAk2Rp8tASg*V3`+1kX~ zfken%j*9Tj;Snz)vcgCg_7jtMD6E?t0C*)Ett(E4Ya9q6)+hgh^qOqeHY%$=U{a@N zB!)vb+3E9ueXo_)Ef_DX@*&LdqTDYj+CNOoBtM5uA&jdr+1>34?I;EWzP-qP>(cYI zUO#rnu~W*l)@0hWe3fJHtPZEQ%^SF9MeAHCW-WE8wCmpneJ2pGuorAA1o zJm#4&u;5o%nU(BtPT@!+c@yA>dxQpzN#i-7 z(g;WDlwoZ)>onaaeurr`tEf%?MMmfrXTHApUddz^+2n+(uD9YDTlDUM9ORR3^ku5QYDg`%c)>tWrQU)9#HxDI3EfMJFe}nxXkkJf%=6d zdN9!&BDC_IIZ!E!EY9Fnwdt$##|Po*zrV|7Dy)`{=VgP~k*7IJhX=WAk;RU_23On> z9Cs7aP|u_tW=mIzJdlz-8gC>XZQyNWN%^FyWcy(VgqHLlAyR?fTDRh?<)o@A4cVGV z7cyDW7EiVmYTJm9y>747Hs3Rv5uTCwgcRIx)732Ht^yEjT9S0&-W-;Fs`hjAv9%lf z2-{T<7Cp#4;S8v2--bLNqaSi1gI=ALrzaU`@XeJfNLM|ubXaL@*6dqSa6LJC8wu<- zmOKi1@_e8%=;U~53|Fr3IP6_A$#Mu~JAT2Q{+;7h%3I;8&Yq|+PUMsnF0zhrk3@$5 z!~e@uz~HH(dCZ|&A*!)V|9Ut@SFv-1(yfb@zKxHQ1}Ali`_{FKmaxLXyc0?iz7cxF zX)deV>H9t=&EAH0Ryr%b%)6LJd@OTatpW&ojk=j!2+-9q@kLLZt6C&x$+}gBCQJC9 zD;$<9$nB{*lBIe!sP~^aRfaBCRC4h(vBmQ_mxi2Q!(f5dcjze||Mq{~^=!XibSZ{+ zG8D1C57A1u<>t20#1LffG}lYOi&a3^MGijdR z#*^dJm_2+75StHmu-h66t_i6M0C)&}+V^ziVGNtHwn@L8QUanMy))C0UL8dp#cMG% z9L%KTYYx>DztkCo7m2t^h*F{dB6ix|)vfhGX`{B3xKmsdEY?=8z@`XC*fBrAM00tF zViJZXYy3|9Ot??aD9?|fzJ_Nt4!3YyP~7!nmL|g3o{t}%C8iZ>l&pCs`n&B{L#?<xa z(irbJ3#Z$}rRV~M+bXtV_E>4rX1blwtS7B=B~GA3?D82TY=Wt6q8VuCV!4rcE;Wnn zB@nVqaundS1!x%~rB_&*BxF$HTvIyz4R2gMVvlpH_`J#(l9+|hydpQhj9#1|SqyR1 zWNtLfIn0<~+Kz4Cwf^I<`gQ-|-ZzDs91@;YZJ<>8efM|S_deXP#%@Ymo=5+m08-Sl z&En(;IJVdT{Sk@^JD>C|t5Ooro-*-(^wHrqCCHky+* zaW)GOPeRh2nGiZg%9X=~zogT$va4b*mCHOptYq2N{VnndHQdlDxjlK+HJ%crVN1-e z`nFGQ(nyljI+U@moBHYP>T)M|HhET$B41KV$e#!O?O9H&^e&Ic{$Y8_b5KM4md{P$$Nzf$ z+9rl&-}uRJRDvIF&4gbwms%v$mjMY!6?0wpeW%Bo0{%)!&Sjk38A@$V4N^N;$u4A; z$yOzyD5q?(#tQ~pFXHDv`w~56M7phdEwg9q)oLw7qEO2?mGLJnj^ZvIM{OP{nu~-S z+Q#uc4swXe?8srAn2W^v>h#7^(w5tIpcfLOHu&z)q zEcn@Y@&HrM`=q{`XG4{VOlx=x4AHkFYtCkx$Uq1+@~1~IUktoy-?ky5YP z;)xgM1zjX$&v3|}V)MQ1RcFYSO|A&L4ZJWvy%YOAWU0Ff*5R`p>s+pPB!|X20rI|6 z8=no4R+R~=DN^_pa2{4;LfQ|J5}~r2Q}9DB%-zIx;khm+C%wG-YnG6%vb1H^_f-W2 zeIlYMeWffXF{IDXTX(pfw|( zFl6Uh0vYc%g@00|*OQI&$@QlzF9rnuawJ_2*xz-&fL0R^vw7=EmAl{RQy#Q+9U8mOk=_4Em5mW zlWLF$-GPJk195cPvK?0sE*OJVrq}vU*J{~?zB`X^NZ8CHa`WY}Q)b;1UGvQ~k5)^s zxwvfEJK|z!*!8lBIl6;rSM!v3K5-rEnDQx3XaRM$}(O@>P~C$TGL$EP{2 zkz}Nf!=L=w6VL1>CR*&*+GscBh_$P~W8PF(W=~a;*ilHO#yu3i#d@fi*jD@5Re}o$ zQ1Wp6I_rfvcrk-|&ZUHn5I)BZ)=&aGDjyLlEoVRzv36UI?^)jfSQAEO8qd zOR+f9Xi%d>&iu+^!_2~>D)qF;mgPLj&O(93aTa~6vb4--HNxeooMsSj>g$f=vA6pj zj|)NW#q`B6#U4&b>Tmd88|(-Au?!~iDWdSu{qX6O`oIB~{RJV}1BG}}>~>g7VlMYB zM{-DxLriiJXK2lMSObTDT#(PFW^%g+_vPrg>lD9>(CNw=nQCISn+%YfwBumL-te*M zc;cpLCIA^%&29%wOe#HAM@eeh_2^{kk*BoR$Z`U1U+e0X$}Mk6Svl_9YoieM49hHr zu`PUJi5|BL0bOVUUUD; z?}45ZJL^AcmPj=2s0&{wV1q-93xV}{LyQ;=RTbJ>OB4cI-UaGAeQGg_tY4EUU$y<)b#)R6(&jIN!P$}J_YsIgS{E82 zCipCSDxFi_^;~#E;q_#trDG1XVF(IR240l)ZX!+|Vo4QS6I}nsvyH zXvo&nD@e)jgJJb??yMTbFZ%Fl7dR}((s3j#bY~wf$76L1iuARX9cpp*0r{m!JN~a! zchu?ihD(hb%bbmJqqNF;5vf{r+OJ>Q9nj^rw_A=9g3!Zu8Ll)6ALL{H<~>nJhFAIS zSZVL;>i>A{Plj}1KCqGpe`|oz7Dlwx4Cbk~~=*ml{ zwYf>QcTHZu5S=<;9KrPhR?GsSM?xa1*YK-%eafWtTxxCO%cU*ty#ifls@2YrT%Qf0 z>_o@Jv&nchDljK$_(Yv9gWD{wFC%Xdbo(<(OScy~cS?DM!bbCNwqXPyW{QS`<~GG{ z3&<*S544g)RR8uARO$EEGG+A7UUQ4`Q+-X5DbMVo?jjMM+I(jpd3^x9u^4A-L_*6q zTxbiDtC~xU^vr=%Y>l*wax>9+7F0!|v245SiBlAKuoY=aJ?K+fwl0xySK+gk*UaL8 z(@djljWX3iQ~tE>xk|I|J30JE0`o076M)EL+EHtdo<=YXlNIFM_H}e5c3zon4Y9%N ziwRqvG)vX=L>X{>)SPcvjz5}NegN0nprIbx*s}A&s{&K$>&DFYR9mbzdrc&HaXkSP z0{8sPlUsb;HT5bsZ9XZlNV5r#dF7 z?GL7hv6J5ZwFCJ+v|Gl6c6J&$FLR@GyR5t7#b470*(-&i%*sbOGA zOGzH#4EN{;3#C<<*x@o8aYt%Bm|wL{--%5!m29`mvEjTfT6yg0CsjBy{Sb&^a{j$9 zk7LzdO-?1=P>k=KlSNKLBpNR9(1Oq)#1q1Y%r~;n?EyV`xirRTd+?Jxo7(7v>Ga>r zITAKHAdVLGQBoL-nLvN-3*r^8*I$Ftaf}}6o*xdcU&Q0D1&Jf0H0yVD<@||ZtKX*y zt+ia~rR~1!q?c0bk zD^(Nmenr2Qn|26>bsCuSr5#3nY$1H=DK5uV%__A8CiS{;rh6Y=pWO2O{jOzd(yGcn zWFn=%Cr~V;gtIp+(@0}^96c+E|AAOG*qq;Yy6(2y8avyVD>E@1^wy4P3-SGz0`_zK zS$8c84%Wn0SG9C|`AK%PnMk!^2 zmf)e{ZgOtNFv@k6Ly_;h&5C?K%{RszZi4`eOgwZE`z>^Ew&)&p@k&{qsdr+_+h9U8 zTpFK3J%adSKnijt1S`M!W1izP@|LVL17oTdlT(e`mgA)ab0oWQ3zZ5cy83P709-F} zT229609$2p`X$j{C?(TcUjm9I5nyl3s6SU%zs246wNiqCAsZGDNi>8#zi;A>8qoar*@o@;czqW= z`{&sY30rq5Y;K^BVC@R)h!2_kA7jNt^53DM$o>c8K*89hjnsxLj!?b&;yiN9N%xmd zm}pFI*QQH;1YaYXs##3Vbd=Q-!Keqa*RXm%O1{iM3K4T6fae58vSo3KA)i43J#wv2 z+ZLot4|T;JnW5jcQoyQGZsG5E9+DkB4_<57xMerFu!GGD!VVWS2?v2E)CP~_;A`21 z@id$a)4P|c?9da^oGL2O{Y`WOk9w~eorv%Mudt0X~ zbQ`_xx29<`S$`di=A@X=kp4)?#HHinu^)l_S6?5_SFl3*L~xaF{2*W~LQLO~p*7}l z){d$lMXmSD;+Ij0{R2bV=%tXF))XFlA>+?{!?f?}lP68o^x?VbzjjeiB}&#sY^i*{ z1A^#k3o`{fvqtf$7DYH~S3;A`rArV7&F5?$JYZBr>6n-*WcgoaNR$l=IH3~jTarz=7N?%*3L4q{HQqS= z?^ZHr_3t>*@xvXCR>DHX9qF1rQkeB7fIFvyfDQW$@SJI8h}Y-H|7?Kv)6- z)A*ua!_uQF0aSr6F$1zPr&H!SQ|KDoIf+p`iqvQa)6VB|jK}5TuY}d@K0YeXaHTyE zLI3i1artvks*phyBv*NdEM^_I#J0jB=a3HFYIH3hP%LQTs@lH5^@^A9*F;OXU?C4# zULn!rBE;R{J9|3=Y7uHyzXH*|8dQcu^~bXkzu~E4W-Lj%MU+E1O^E}mI1CFY_el2a z2mp+{$RN?-)hJ{v(_Q=*T+}@mIuWQ)k{?7}bSI|R8o9@#wk+=K9qa9^K6tSRW;(t zk(IBt{tz4Mvf-8$=P8Wj9P-V3mg7G8r0I>Y?`zdBVV&C1vpS)XZ%p00j2v8|ZL)7y zL@O+%pw3nM=KKf1yxzr-PTR!*d}=Am{URG&LSBo_8xYBDtptDOPg@~0R4`|d4>62k zq)<^c``PWs^UP7Dvonu$BJA+~{??uD8rzC}kQILsBS2XfbZFf!-dy7JS=+cxufD~h z&?q5YJjDttd7aD?{qEWn)E4T+tUHqN2abw;bvwLG3w5qLi|<=@eHJW=SG2Bv9e9Hr zbV&Yocd=dHp6u%?Mh%sw8p_%v*|w{m8(k@@TQ<~iY=V-IS0^La4Y%VXwtP*6DM|s^ z5DMwjg1xsi;>Oowsy{upe13|07!Ld-mQ4@s8N!^>&hE9nC2tPbDLwJte5lTP1X12( zf6&tH-w>M0;##g-^P(8}h3Tyeg#as|?|-`u@q}LfdJ715-u^=&9BXfRyLsI3@OMs? zHDPAKhEN@s{Qai`PlvUT@9fA?k8aH_$gNg1El4lZ`-{vk{jitA3hF0NvnuHd^?O{7 zB`?CTeW2|p-^I$@6f2Cc+Trz5D)4gx6uCGWts}B^sq#8!+@JkHb7#7)W9bOm*jcjf z1}fw}GJPO&Eb53D1aG9?FZ8R(yrrLf=ze+8_@tx~5j@_a`JjAXGxHBi-cAuwd9}Ht z6R`Ze=!6?y*AbZ}n>?rTE)c3uzGHG*TwyGk!9(mWKbgp46aL5l(jVL_a1hBnxhS5r zRd|E;_WObJYU*xfPP8axhWxJgiIy%+k5;YJGgDIdQ_?14xC=fT+@&ngV#tn0T(Pl+PVA3zbafPDP% z!u4Car^J3$*AJA}YYHvoJPyaF71(Ed@&uJ2aSQ`Nw@gReShdJJBkcj1Y zznO^&X!L(!`(G;#Z-f81egsdk+0*o3G4@L^99}N>^1kFdIK#-A3?J^Zy)b9VA4}bV2=Ku z&!8UHk3Ehg6Oco2*GlI3yMJI}n3RK7bLQO4lEt zmlN z@zOt=1lqzGzXyF5HvH>883&Pgee9Wy2al5?laYP+2qyuHZeKw+dmD}YfO-&!J1O{a zC+brv85Dg0cLfN3_D%peuix@MynrTsfWf<+1tOn<4~F2lBIV;C6^kce0)ho8$Y$fj zJK_2s07|?4++zmjI1pG7D4pfb?Y z-cUbi5L6w!_hICDRRel=2Oae%1_uKRPchKxK6rz-jY0d&pRV_&cm4f9vViE|vLz!5lus#dng~8dbbQB_Kaxo$wVd74X9ap$ zI~$WeUfgcl2x1g&Ue=UJ-3u+<)-F4zzW|aWWmcZ+{?1ySP8R+A_=-B8!PkB7yP#ej zt%gP6<4y-7d-=G=AobDwFDtUK`K>#LO76tB_}!J*dN;pCw<&2u+MD>g8|jEGtnJT# z+KrVBItzSgmlJkztQ5H9IgIIzV|%qC04-Gbf{ao#U9gMEjnUo(Iv4+jGYKJ#%WYUc z5T~lLuGFq|OjUxfbeGoL&yJ+5evfBb(Xko99SKV z?u)t-JTj~$7zKMnjT!)SO`m+b*j6F3oL>$fSbLKCUmCbYUWViQ1O8qIxAz~<&NbBz z*G5yhvVEQoWn^UJDH`}qnRdwzHp}dLi+tejzSy|e5MKvzbh5s0s~Cd!S9}ah?B#Yg z$S}XWscY|P6er9ByalE+DT>U z&M#_EMcRu{nimrFtyJ1Ah)Ay6q@3(FB=f+}Nc7u@&l{ z@o4T1SWZt6<$&+h0cD52x5d=J9!q24lo6A(n>Ff>VoPG$H)6MuO-$8sBZqegaIBWQBto zn#*0*+jl6rg3~mwdzugC$*xVB$wG$T%DnP#zOtCXavVTUOkk^}5VFD>Kl$(Lov)Mq zT9_u(1RYgFe(rJ~zKXI}bZJ14@ggXh8t~+X+n&!VO+4lw{zz&$H|8C>allL45!91% zVjY8bj=XDoCmJ>QzD9TFH{7iHFnwVW7%HH{CykuWrxEuKt@iNWz2WwQ=I1@P2MXSe@UizBRNswP074CVb=MBwO^w+O!J?Md%cs4pdmDhgHo8@n9)0NE zI(aWqMrYu9%}}5~pm#R}Y4I=r$Sai3BIY7jdL&eRKA}_;cV%t6&j+c*sV+AB**adu zUi>Hh=zZgr7qfnZTQ>Yz9mVXaw$V+M!@L60#qyKxytv>OQW42cfxP9uYR}HrUsnha z+v*KJw5mO4tCL_T>NZY2-;8oLF~RGw`DS(P#;hc0H*niIo5-E@#@w8+TjDvJR|uz$ z%B+X?f`K=_&tra{UNQHbnkwXmfH3N^dTkr{WNiJvyy||#BD@I9`!%6a!G6lW8L1; zo{EQ#P$IaaS0wor!-zCq5{iBcU2Ox<92z0=f}UUKxfNh5`Xoun$T%z>>bsUN0(zW7 zMOHfQL{;xCY<_*O(#L|Yd4{+VV>*VvK=t)Nf$Fg~pqRC(d zX6&9YP- zzr6w|j@)zx@I0cp;1rE?3$${Ue^Pb1*um$vU6OV}33%!-?Q#nWEdRnqg!@o#kl8C~ z|A8OQwVQaxK^X4WyNzSJl*oOFvV{EVO~li?pF=G%f$KCtcskqoooU(G`<4ia_jScH zkf6FDSS@R@_+ozLIKOMyMF;gc(0Q>(jyUJXF$Z^$6n^5;{8AvM)9c5oGR%A!H`Q_3 zCMns!O;69qP`|D&yV8aeX^fY#M01NY!BI~m_~UgWcZ7j|Rc0#9HRNU_U2W%j1*W`x z?d(mrrtI|rnFTwyFzG(-oa2+1ZKPju9@x0*`yw31PlmB?T%NM$tU5o#Hm|~>GjIQD z6Mb~=R~4_??ei2yMIO5o#48-2*_q_ldxq$t86u1YiIwq>{zi5X)|EE<%rT|kBal%x zLfhXR+z2B===}RJ=%d%diG62FLFF$FL-|vk63pM|CkO$FAMHLz}IGEUxf~y!OwH}V^*8^XeO4@z240E{jaaqiKvC{g> zwur9M7%Gje{1Il8dkUIX6Q?fsUAz#>OSiKFv-;TUOqt#> z>QN!`3#)jO4|_y(UXf5uNUce?wh^LxKd?Thy3JnCmEZzgs(JAUP;qp-R5p6-YeBXA zm6fGVG2`fq@|xyKW!b2LZ|p$-M@6iMSwLVK?6}AM+KaNO;l^M0FL@Qi1Y-o>lq~17 ze_1g0B%9h1O2MbX&}`h`nvT#OE0=9nSu>6GbKTo=PIJx@p5Eq2Z)v}u-u6f{Q+=7H z8{Jam?(c5WR|$nD3NV*L{7~SWbJWC=^DMs&(tzl1>$u9MC(pGGa*jNj*7Y?I21ZgF zyc`_a6;n^skMl;K6a?Y!rqIR-ZNU0Rd1UdK+Lr_g)D$x2SpzWx=CTuyutw0Z4wiHS zx?bD|cgM}=$_@6y^yH??0wR` z&V9)@g$pLr=lvr{;AGwte@m4>X1eW%CIw^ztiIFU$>0}S@%lvJgX$9w2vn?kQf|4% z6!2ASdeU5hLY4Vo^J~Zl7SNVp!?8Qzg9}hfu;JXDdXXFpPf#)M3BR38xV8#F1gNkT z4Evw~ekYJw2QUI;@K1vK`KDe_5}rAP^KXU6?(wf}0$>5*33HYKF}HdNXq>{iw-{q& zR^O(4gaH-_b7tShUJS=Zb6kU{hO-m)MtoQR_xOdQK9B&IguNLb3cx)9tJ#NOf(}Oz z62NN=kFB09hzX2pZ_I}Z5ShTsZam_{1VAD{T39L2&KX2v7Wbpg*Z|MPGw?zOA zfPL)R)KD|=UJKcVBZv-6ufaM17d$=^zR55clomK@UlzDm4M7Lzm8qdw9;mE2>-I5$ zm!qC-cf_Bobstyj8)uekzFe)HA7*$Qe zoOw^|?U%9q1U!!286N}y%NP@ZH>Z=0p@pGYPvousSO@3s#EaNiF8^fS|EtHd50MdVtuNKf&Ip4;g@B?497`{a$R$b1WJk zBn%i%=wKHf@(~26jd^nlkG%jAn2ZW78F$(nY_JiIO#7YUuVzGFq>mX&KI})O=)1c9 zVg?+~v^LrID>V^KG`Ld}JUvkZXa}@LJWwom z!jLhOe^T3T`z0Tz?Sg}EmxOuH*>Bq?Cw*dg!h5p3()B_;YTl`I5j=9;srVtC5lx7k z3M?;8ikzZU-hmqXQSZWLCaw4 zL3c)T2x7_!UZw%NP?yWVF3vNK|IzrbO>*W2ZbO|Rg6SbX{^y4|I|BO&&g8*uinA?n z?AJ;iFbuE-(_2#A6Z?;bu@q3QqPQ>pBfXD<6N_T zN8i=2?yjl0MRR!@3GS((5I9v%&3OfOg! z;fPHzRFT+C88Bd(OE6tQHMogjZ~`{Z6fo3KKfM1a2uK3uoW)4Mks1Twkg)L>%g_YDi zU;orcl$MwDCaxGAN~ozxq?*hOila+iB28f@O<}mq%n7>^pl=IsS1TB9j%eNYv3#iDWZYmEN@=fWMMbVjWp&L;@KET7%cI)4;DveD6KFV+tT>A1b zZiQ;>H;xYhCqm^1CQ=M$pJm#Nt0*%X^-O|5bFr=gVK2d`OegnxZCutC?BKDADlHBHkTi3wlFG)m|e7~ zLzyPwr`s5Y6dajz@t|)tkL|Kx;*LV3P~_sy&+O8F-i@FCqDrraFQkj?a;pD1_lG=n z6SIBMEvXTSsUr(lwJM{^xiFH=aaOvodI}WuoB_vc_0sm)MG;mo)R+c4R{3J`u_OspbVjc$dILxN!fD;oW2^ ze!=T59skqin_n~R!YO{>7`t>y`-uIKr#&Vkh+bs3RS5N&^1>~l%wwzlXkN0xBjHkb zw7U~SM|;=)t5C(ZuqAgN@2(F85AX#q)@ZgwUvF)76R$xlzU}HWtV@w8=)rq+ox1+# zWDEM5HQ^8H9r`{r|KY1i5L=n-{7TSk%LMwvw*!1R^-mqn+abR7!h7Ue$lj?0+Xz4m z!R_gHLM^HRYi7zAb^0@(xHjcrlKh;))_B3n#CqMhREv7Oogl|Y_ZGWWEY@*;&W)p= z?l)6piEY>>B2O=Gv0TUnt^raSHcI!%0A+Yyv2pzEOOvK_uAG78+05|^GrMwYIiaot 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

    18%!}MM_5wDV)*MKBh_xJ3}EFNO(!C_s*)Jy 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%0Dxf2Z(r7QnRa_K<1zXYPi=z@GL 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

    3tMLvNqFEocQZ-p;k{faCJkSAKx)qsr7 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 y2~WmxZO`!x;oh$q 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%0AxdHm zT6$wrudjju`Hj7RJdr}T^1gf;VYY&=+`e*J<`|nto zB_*oG*H;x%P}3t-)x$=D0a(4pyTs3fQe&0@$q#J8WIU4LJMxD=#2cE5fM+Ei)6JGC z6T_aE6~0KDW1S-FOA1iFO;u7Rpd%^~Z-w~>fk*n@@pK(vE!GLA=)`*CC*p%dq{A~IC~jTcJ@t4FWvj$e z3ecYY9*dk!=9)t8D-S>3=s5O+ZBDAu?D&oL7eM2AZ1_ja^PT+tNe?^#VVeb~ue zue9>jh>i7QSByiI3YZg!fwpWJeb`|JP}}|&IyCy6kng+cJO17~gT*-!;M@&onYlAR zuCnsx8E}*Q(35b|xvHZIpLpWm_m80dC9`o;ONN(3h)4w~I$`y@UJYSuB*}|oQ1_078_`Kf0tcBr@KVnGxDdXtOSOC?tKRqb$OgT!#JFUkmXItZ_h;0ob-Ic6>-2kiKk=dh_GxyhiG=X=;B;Ea50juG#VNtO5F&g!r{wcB2(d^g} z@z&4~{V&0A*^nc(mkwB>WOtg3C5dCK{SiSa!}u0v&}bHN@?=qL_Xc*;+(MW?##ZT< zjQW!uyq)JLT117U?#8p$8hpp9m88|F>1%~;6^19eZC4byF3xLC-wpfw0{5O*(4T)2 z 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�hGy07cN|27 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 i9V_LXaQ6prxmH{@8E)sT}Dpg&wv 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

    3|CqxBZK~Ng@^O=8r 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

    HsMvFvB@vMPUUk#V z-U<}g4jGCW2b{DKM0z*<@ph$l<{w4I`hy`ym!$f_EvuB6ccS%WJR_0hhfQ>aA=)Z1 z3WM+aKrLc`xIsq4>wd&DGa-(?@Kis?Yq|Yx!w)#E!Q|jl9KmbA15WJL;Ge?T1Q

    aBpnD9$_JxAW*Z=Qzn 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

    (&tU4-PmJh6RGk4` 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%0D=4Bqn5k0$$LJKmu{s6tZsqy(3VNb0c(17C-6!gB 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

    CI7KW6w}V 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

    C#p*)*-a|kYgr_8dgvjbE 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

    +-%(5rz&2v~(DD*I1YuSi-Hwu}N6 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 dd6CQh?Qf0K4P>1F0LYMEiI~V?5Qzc+{vS obj/deps - sed '/^[^ ]/s/^/obj\//g' obj/deps > obj/deps.tmp - mv obj/deps.tmp obj/deps --include obj/deps - -unit_test : $(OBJS_UNIT) -# $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -./obj/%.o: transport/%.cpp -# $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -./obj/%.o: unit_tests/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: benchmarks/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: storage/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: system/%.cpp - $(CC) -c -DSTATS_ENABLE=false $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: concurrency_control/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: client/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: %.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - - -rundb : $(OBJS_DB) - $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -# $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -./obj/%.o: transport/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -# $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -#./deps/%.d: %.cpp -# $(CC) -MM -MT $*.o -MF $@ $(CFLAGS) $< -./obj/%.o: benchmarks/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: storage/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: system/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: statistics/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: concurrency_control/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: client/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: %.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - - -runcl : $(OBJS_CL) - $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -# $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -./obj/%.o: transport/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -# $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -#./deps/%.d: %.cpp -# $(CC) -MM -MT $*.o -MF $@ $(CFLAGS) $< -./obj/%.o: benchmarks/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: storage/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: system/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: statistics/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: concurrency_control/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: client/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -./obj/%.o: %.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - -.PHONY: clean -clean: - rm -f obj/*.o obj/.depend rundb runcl runsq unit_test diff --git a/contrib/deneva/README b/contrib/deneva/README deleted file mode 100644 index 6b7b7316..00000000 --- a/contrib/deneva/README +++ /dev/null @@ -1,130 +0,0 @@ -SETUP ------------------------------ -== Dependencies == -nanomsg (nanomsg.org) -jemalloc (www.canonware.com/jemalloc) - - -HOW TO RUN ------------------------------ - -Create a file called ifconfig.txt with IP addresses for the servers and clients, one per line. - -$ make -$ ./rundb -nid[unique server ID] & -$ ./runcl -nid[unique client ID] & - -DBMS BENCHMARK ------------------------------- - -== General Features == - - ddbms is a OLTP database benchmark with the following features. - - 1. Seven different concurrency control algorithms are supported. - NO_WAIT[1] : no wait two phase locking - WAIT_DIE[1] : wait and die two phase locking - TIMESTAMP[1] : basic T/O - MVCC[2] : multi-version T/O - OCC[3] : optimistic concurrency control (MaaT) - CALVIN[4] : Calvin - BOCC[5] : Basic optimistic concurrency control - FOCC[5] : Forward oriented optimistic concurrency control - SILO[6] : SILO - Sundial[7] : Sundial - SSI[8,9] : Serializable Snapshot Isolation - WSI[10] : Write Snapshot Isolation - - [1] Phlip Bernstein, Nathan Goodman, "Concurrency Control in Distributed Database Systems", Computing Surveys, June 1981 - [2] Phlip Bernstein, Nathan Goodman, "Multiversion Concurrency Control -- Theory and Algorithms", Transactions on Database Systems, Dec 1983 - [3] H. Mahmoud et al, "MaaT: Effective and Scalable Coordination of Distributed Transactions in the Cloud", VLDB 2014 - [4] A. Thomson et al, "Calvin: Fast Distributed Transactions for Partitioned Database Systems", SIGMOD 2012 - [5] Theo Härder: Observations on optimistic concurrency control schemes. Inf. Syst. 9(2): 111-120 (1984) - [6] Stephen Tu, Wenting Zheng, Eddie Kohler, Barbara Liskov, Samuel Madden: Speedy transactions in multicore in-memory databases. SOSP 2013: 18-32 - [7] Xiangyao Yu, Yu Xia, Andrew Pavlo, Daniel Sánchez, Larry Rudolph, Srinivas Devadas: -Sundial: Harmonizing Concurrency Control and Caching in a Distributed OLTP Database Management System. Proc. VLDB Endow. 11(10): 1289-1302 (2018) - [8] Alan D. Fekete, Dimitrios Liarokapis, Elizabeth J. O'Neil, Patrick E. O'Neil, Dennis E. Shasha: Making snapshot isolation serializable. ACM Trans. Database Syst. 30(2): 492-528 (2005) - [9] Michael J. Cahill, Uwe Röhm, Alan D. Fekete: Serializable isolation for snapshot databases. SIGMOD Conference 2008: 729-738 - [10] Maysam Yabandeh, Daniel Gómez Ferro: A critique of snapshot isolation. EuroSys 2012: 155-168 - - - 2. Three benchmarks are supported. - 2.1 YCSB[5] - 2.2 TPCC[6] - Only Payment and New Order transactions are modeled. - 2.2 Product-Parts-Supplier (PPS) - - [5] B. Cooper et al, "Benchmarking Cloud Serving Systems with YCSB", SoCC 201 - [6] http://www.tpc.org/tpcc/ - -== Config File == - -dbms benchmark has the following parameters in the config file. Parameters with a * sign should not be changed. - - CORE_CNT : number of cores modeled in the system. - NODE_CNT : number of computation nodes modeled in the system - PART_CNT : number of logical partitions in the system; Should equal CORE_CNT * NODE_CNT - THREAD_CNT : number of worker threads - REM_THREAD_CNT : number of message receiver threads - SEND_THREAD_CNT : number of message sender threads - TPORT_TYPE : communication protocol (TCP, IPC) - ENVIRONMENT_EC2 : true if running on Amazon EC2 - - PAGE_SIZE : memory page size - CL_SIZE : cache line size - - DONE_TIMER : number of nanoseconds to run experiment - WARMUP_TIMER : number of nanoseconds to run for warmup - SEQ_BATCH_TIMER : number of nanoseconds between CALVIN batches - WORKLOAD : workload supported (TPCC, YCSB, or PPS) - CC_ALG : concurrency control algorithm (WAIT_DIE, NO_WAIT, TIMESTAMP, MVCC, CALVIN, or MAAT) - ISOLATION_LEVEL : system isolation level (SERIALIZABLE, READ_COMMITTED, READ_UNCOMMITTED, or NOLOCK) - - THREAD_ALLOC : per thread allocator. - * MEM_PAD : enable memory padding to avoid false sharing. - MEM_ALLIGN : allocated blocks are alligned to MEM_ALLIGN bytes - - * ROLL_BACK : roll back the modifications if a transaction aborts. - - ENABLE_LATCH : enable latching in btree index - * CENTRAL_INDEX : centralized index structure - * CENTRAL_MANAGER : centralized lock/timestamp manager - INDEX_STRCT : data structure for index. - BTREE_ORDER : fanout of each B-tree node - - TS_TWR : enable Thomas Write Rule (TWR) in TIMESTAMP - HIS_RECYCLE_LEN : in MVCC, history will be recycled if they are too long. - MAX_WRITE_SET : the max size of a write set in OCC. - - MAX_ROW_PER_TXN : max number of rows touched per transaction. - QUERY_INTVL : the rate at which database queries come - MAX_TXN_PER_PART : maximum transactions to run per partition. - - // for YCSB Benchmark - SYNTH_TABLE_SIZE : table size - ZIPF_THETA : theta in zipfian distribution (rows accessed follow zipfian distribution) - READ_PERC : - WRITE_PERC : - SCAN_PERC : percentage of read/write/scan queries. they should add up to 1. - SCAN_LEN : number of rows touched per scan query. - PART_PER_TXN : number of logical partitions to touch per transaction - PERC_MULTI_PART : percentage of multi-partition transactions - REQ_PER_QUERY : number of queries per transaction - FIRST_PART_LOCAL : with this being true, the first touched partition is always the local partition. - - // for TPCC Benchmark - NUM_WH : number of warehouses being modeled. - PERC_PAYMENT : percentage of payment transactions. - DIST_PER_WH : number of districts in one warehouse - MAX_ITEMS : number of items modeled. - CUST_PER_DIST : number of customers per district - ORD_PER_DIST : number of orders per district - FIRSTNAME_LEN : length of first name - MIDDLE_LEN : length of middle name - LASTNAME_LEN : length of last name - - // for PPS Benchmark - MAX_PPS_PART_KEY : number of parts in the parts table - MAX_PPS_PRODUCT_KEY : number of products in the products table - MAX_PPS_SUPPLIER_KEY : number of suppliers in the suppliers table - MAX_PPS_PARTS_PER : number of parts per product or supplier diff --git a/contrib/deneva/README.md b/contrib/deneva/README.md deleted file mode 100644 index d5ae2508..00000000 --- a/contrib/deneva/README.md +++ /dev/null @@ -1,45 +0,0 @@ -DDBMS -======= - -DDBMS is a testbed of an OLTP distributed database management system (DBMS). It supports 6 concurrency control algorithms. - -This testbed is based on the DBx1000 system, whose concurrency control scalability study can be found in the following paper: - - Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores - Xiangyao Yu, George Bezerra, Andrew Pavlo, Srinivas Devadas, Michael Stonebraker - http://voltdb.com/downloads/datasheets_collateral/vdb_whitepaper_staring_into_the_abyss.pdf - -Build & Test ------------- - -To build the database. - - make deps - make -j - -Configuration -------------- - -DBMS configurations can be changed in the config.h file. Please refer to README for the meaning of each configuration. Here we only list several most important ones. - - NODE_CNT : Number of server nodes in the database - THREAD_CNT : Number of worker threads running per server - WORKLOAD : Supported workloads include YCSB and TPCC - CC_ALG : Concurrency control algorithm. Twelve algorithms are supported - (NO_WAIT, WAIT_DIE, TIMESTAMP, MVCC, OCC, CALVIN, SUNDIAL, SILO, BOCC, FOCC, SSI, WSI) - MAX_TXN_IN_FLIGHT : Maximum number of active transactions at each server at a given time - DONE_TIMER : Amount of time to run experiment - -Configurations can also be specified as command argument at runtime. Run the following command for a full list of program argument. - - ./rundb -h - -Run ---- - -The DBMS can be run with - - ./rundb -nid[N] - ./runcl -nid[M] - -where N and M are the ID of a server and client, respectively diff --git a/contrib/deneva/benchmarks/PPS_schema.txt b/contrib/deneva/benchmarks/PPS_schema.txt deleted file mode 100644 index b4baf0ac..00000000 --- a/contrib/deneva/benchmarks/PPS_schema.txt +++ /dev/null @@ -1,63 +0,0 @@ -TABLE=PARTS - 8,int64_t,PART_KEY - 8,int64_t,PART_AMOUNT - 10,string,FIELD1 - 10,string,FIELD2 - 10,string,FIELD3 - 10,string,FIELD4 - 10,string,FIELD5 - 10,string,FIELD6 - 10,string,FIELD7 - 10,string,FIELD8 - 10,string,FIELD9 - 10,string,FIELD10 - -TABLE=PRODUCTS - 8,int64_t,PRODUCT_KEY - 10,string,FIELD1 - 10,string,FIELD2 - 10,string,FIELD3 - 10,string,FIELD4 - 10,string,FIELD5 - 10,string,FIELD6 - 10,string,FIELD7 - 10,string,FIELD8 - 10,string,FIELD9 - 10,string,FIELD10 - -TABLE=SUPPLIERS - 8,int64_t,SUPPLIER_KEY - 10,string,FIELD1 - 10,string,FIELD2 - 10,string,FIELD3 - 10,string,FIELD4 - 10,string,FIELD5 - 10,string,FIELD6 - 10,string,FIELD7 - 10,string,FIELD8 - 10,string,FIELD9 - 10,string,FIELD10 - -TABLE=USES - 8,int64_t,PRODUCT_KEY - 8,int64_t,PART_KEY - -TABLE=SUPPLIES - 8,int64_t,SUPPLIER_KEY - 8,int64_t,PART_KEY - -INDEX=PARTS_IDX - PARTS,0 - -INDEX=PRODUCTS_IDX - PRODUCTS,0 - -INDEX=SUPPLIERS_IDX - SUPPLIERS,0 - -INDEX=SUPPLIES_IDX - SUPPLIES,0 - -INDEX=USES_IDX - USES,0 - diff --git a/contrib/deneva/benchmarks/TPCC_full_schema.txt b/contrib/deneva/benchmarks/TPCC_full_schema.txt deleted file mode 100644 index 9d9e8087..00000000 --- a/contrib/deneva/benchmarks/TPCC_full_schema.txt +++ /dev/null @@ -1,134 +0,0 @@ -//size,type,name -TABLE=WAREHOUSE - 8,int64_t,W_ID - 10,string,W_NAME - 20,string,W_STREET_1 - 20,string,W_STREET_2 - 20,string,W_CITY - 2,string,W_STATE - 9,string,W_ZIP - 8,double,W_TAX - 8,double,W_YTD - -TABLE=DISTRICT - 8,int64_t,D_ID - 8,int64_t,D_W_ID - 10,string,D_NAME - 20,string,D_STREET_1 - 20,string,D_STREET_2 - 20,string,D_CITY - 2,string,D_STATE - 9,string,D_ZIP - 8,double,D_TAX - 8,double,D_YTD - 8,int64_t,D_NEXT_O_ID - -TABLE=CUSTOMER - 8,int64_t,C_ID - 8,int64_t,C_D_ID - 8,int64_t,C_W_ID - 16,string,C_FIRST - 2,string,C_MIDDLE - 16,string,C_LAST - 20,string,C_STREET_1 - 20,string,C_STREET_2 - 20,string,C_CITY - 2,string,C_STATE - 9,string,C_ZIP - 16,string,C_PHONE - 8,int64_t,C_SINCE - 2,string,C_CREDIT - 8,int64_t,C_CREDIT_LIM - 8,int64_t,C_DISCOUNT - 8,double,C_BALANCE - 8,double,C_YTD_PAYMENT - 8,uint64_t,C_PAYMENT_CNT - 8,uint64_t,C_DELIVERY_CNT - 500,string,C_DATA - -TABLE=HISTORY - 8,int64_t,H_C_ID - 8,int64_t,H_C_D_ID - 8,int64_t,H_C_W_ID - 8,int64_t,H_D_ID - 8,int64_t,H_W_ID - 8,int64_t,H_DATE - 8,double,H_AMOUNT - 24,string,H_DATA - -TABLE=NEW-ORDER - 8,int64_t,NO_O_ID - 8,int64_t,NO_D_ID - 8,int64_t,NO_W_ID - -TABLE=ORDER - 8,int64_t,O_ID - 8,int64_t,O_C_ID - 8,int64_t,O_D_ID - 8,int64_t,O_W_ID - 8,int64_t,O_ENTRY_D - 8,int64_t,O_CARRIER_ID - 8,int64_t,O_OL_CNT - 8,int64_t,O_ALL_LOCAL - -TABLE=ORDER-LINE - 8,int64_t,OL_O_ID - 8,int64_t,OL_D_ID - 8,int64_t,OL_W_ID - 8,int64_t,OL_NUMBER - 8,int64_t,OL_I_ID - 8,int64_t,OL_SUPPLY_W_ID - 8,int64_t,OL_DELIVERY_D - 8,int64_t,OL_QUANTITY - 8,double,OL_AMOUNT - 8,int64_t,OL_DIST_INFO - -TABLE=ITEM - 8,int64_t,I_ID - 8,int64_t,I_IM_ID - 24,string,I_NAME - 8,int64_t,I_PRICE - 50,string,I_DATA - -TABLE=STOCK - 8,int64_t,S_I_ID - 8,int64_t,S_W_ID - 8,int64_t,S_QUANTITY - 24,string,S_DIST_01 - 24,string,S_DIST_02 - 24,string,S_DIST_03 - 24,string,S_DIST_04 - 24,string,S_DIST_05 - 24,string,S_DIST_06 - 24,string,S_DIST_07 - 24,string,S_DIST_08 - 24,string,S_DIST_09 - 24,string,S_DIST_10 - 8,int64_t,S_YTD - 8,int64_t,S_ORDER_CNT - 8,int64_t,S_REMOTE_CNT - 50,string,S_DATA - -INDEX=ITEM_IDX - ITEM,0 - -INDEX=WAREHOUSE_IDX - WAREHOUSE,0 - -INDEX=DISTRICT_IDX - DISTRICT,0 - -INDEX=CUSTOMER_ID_IDX - CUSTOMER,0 - -INDEX=CUSTOMER_LAST_IDX - CUSTOMER,0 - -INDEX=STOCK_IDX - STOCK,0 - -INDEX=ORDER_IDX - ORDER,0 - -INDEX=ORDER-LINE_IDX - ORDER-LINE,0 diff --git a/contrib/deneva/benchmarks/TPCC_short_schema.txt b/contrib/deneva/benchmarks/TPCC_short_schema.txt deleted file mode 100644 index 13ef9dd7..00000000 --- a/contrib/deneva/benchmarks/TPCC_short_schema.txt +++ /dev/null @@ -1,100 +0,0 @@ -//size,type,name -TABLE=WAREHOUSE - 8,int64_t,W_ID - 10,string,W_NAME - 20,string,W_STREET_1 - 20,string,W_STREET_2 - 20,string,W_CITY - 2,string,W_STATE - 9,string,W_ZIP - 8,double,W_TAX - 8,double,W_YTD - -TABLE=DISTRICT - 8,int64_t,D_ID - 8,int64_t,D_W_ID - 10,string,D_NAME - 20,string,D_STREET_1 - 20,string,D_STREET_2 - 20,string,D_CITY - 2,string,D_STATE - 9,string,D_ZIP - 8,double,D_TAX - 8,double,D_YTD - 8,int64_t,D_NEXT_O_ID - -TABLE=CUSTOMER - 8,int64_t,C_ID - 8,int64_t,C_D_ID - 8,int64_t,C_W_ID - 2,string,C_MIDDLE - 16,string,C_LAST - 2,string,C_STATE - 2,string,C_CREDIT - 8,int64_t,C_DISCOUNT - 8,double,C_BALANCE - 8,double,C_YTD_PAYMENT - 8,uint64_t,C_PAYMENT_CNT - -TABLE=HISTORY - 8,int64_t,H_C_ID - 8,int64_t,H_C_D_ID - 8,int64_t,H_C_W_ID - 8,int64_t,H_D_ID - 8,int64_t,H_W_ID - 8,int64_t,H_DATE - 8,double,H_AMOUNT - -TABLE=NEW-ORDER - 8,int64_t,NO_O_ID - 8,int64_t,NO_D_ID - 8,int64_t,NO_W_ID - -TABLE=ORDER - 8,int64_t,O_ID - 8,int64_t,O_C_ID - 8,int64_t,O_D_ID - 8,int64_t,O_W_ID - 8,int64_t,O_ENTRY_D - 8,int64_t,O_CARRIER_ID - 8,int64_t,O_OL_CNT - 8,int64_t,O_ALL_LOCAL - -TABLE=ORDER-LINE - 8,int64_t,OL_O_ID - 8,int64_t,OL_D_ID - 8,int64_t,OL_W_ID - 8,int64_t,OL_NUMBER - 8,int64_t,OL_I_ID - -TABLE=ITEM - 8,int64_t,I_ID - 8,int64_t,I_IM_ID - 24,string,I_NAME - 8,int64_t,I_PRICE - 50,string,I_DATA - -TABLE=STOCK - 8,int64_t,S_I_ID - 8,int64_t,S_W_ID - 8,int64_t,S_QUANTITY - 8,int64_t,S_REMOTE_CNT - -INDEX=ITEM_IDX - ITEM,0 - -INDEX=WAREHOUSE_IDX - WAREHOUSE,0 - -INDEX=DISTRICT_IDX - DISTRICT,0 - -INDEX=CUSTOMER_ID_IDX - CUSTOMER,0 - -INDEX=CUSTOMER_LAST_IDX - CUSTOMER,0 - -INDEX=STOCK_IDX - STOCK,0 - diff --git a/contrib/deneva/benchmarks/YCSB_schema.txt b/contrib/deneva/benchmarks/YCSB_schema.txt deleted file mode 100644 index 6db84cf9..00000000 --- a/contrib/deneva/benchmarks/YCSB_schema.txt +++ /dev/null @@ -1,15 +0,0 @@ -//size, type, name -TABLE=MAIN_TABLE - 100,string,F0 - 100,string,F1 - 100,string,F2 - 100,string,F3 - 100,string,F4 - 100,string,F5 - 100,string,F6 - 100,string,F7 - 100,string,F8 - 100,string,F9 - -INDEX=MAIN_INDEX - MAIN_TABLE,0 diff --git a/contrib/deneva/benchmarks/creator.cpp b/contrib/deneva/benchmarks/creator.cpp deleted file mode 100644 index e395773c..00000000 --- a/contrib/deneva/benchmarks/creator.cpp +++ /dev/null @@ -1,195 +0,0 @@ - -#include - -#include "creator.h" - - - InputActionSequenceCreator::InputActionSequenceCreator(const std::string &path) : path_(path) {} - InputActionSequenceCreator::~InputActionSequenceCreator() {} - void InputActionSequenceCreator::DeliverActionSequences( - const std::function &handle) const { - std::ifstream fs(path_); - if (!fs) { - std::cerr << "Open Action Sequences File Failed" << std::endl; - return; - } - uint64_t seq_id=0; - ActionSequence act_seq; - while (fs >> act_seq) { - handle(std::move(act_seq),seq_id); - } - } - - - - -uint64_t TraversalActionSequenceCreator::cut_down_ = 0; -//uint64_t TraversalActionSequenceCreator::seq_id_ = 0; - - TraversalActionSequenceCreator::TraversalActionSequenceCreator(const Options &opt) - : trans_num_(opt.trans_num), - item_num_(opt.item_num), - dml_act_num_(opt.max_dml), - subtask_num_(opt.subtask_num), - dfs_cnt_(opt.subtask_num - opt.subtask_id), - with_abort_(opt.with_abort), - tail_dtl_(opt.tail_dtl), - save_history_with_empty_opt_(opt.save_history_with_empty_opt), - dynamic_seq_len_(opt.dynamic_seq_len), - seq_id_(0) {} - - void TraversalActionSequenceCreator::DeliverActionSequences(const std::function &handle) const { - std::vector tmp_actions; - RecursiveFillDMLActionSeq( - [this, &handle](const ActionSequence &dml_act_seq,uint64_t seq_id, const uint64_t max_trans_id) { - HandleDMLActionSeq(handle, seq_id, dml_act_seq, max_trans_id); - }, - tmp_actions, 0, 0); - } - - - void TraversalActionSequenceCreator::HandleActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &act_seq) const { - ActionSequence act_seq_copy = act_seq; // copy ActionSequence - handle(std::move(act_seq_copy),seq_id); - } - void TraversalActionSequenceCreator::HandleDTLActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &dml_act_seq, - const ActionSequence &dtl_act_seq) const { - // Firstly, append every dml_act_seq with dtl_act_seq. - ActionSequence act_seq_tot = dml_act_seq + dtl_act_seq; - // Then move dtl_act_seq at a suitable location, forward. - RecursiveMoveForwardDTLAction( - [this, &handle,seq_id](const ActionSequence &act_seq) { HandleActionSeq(handle, seq_id ,act_seq); }, - act_seq_tot, dml_act_seq.size()); - } - void TraversalActionSequenceCreator::HandleDMLActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &dml_act_seq, const uint64_t max_trans_id) const { - std::vector dtl_act_types; - RecursiveFillDTLActionSeq( - [this, &handle, &dml_act_seq,seq_id](const ActionSequence &dtl_act_seq) { - HandleDTLActionSeq(handle, seq_id,dml_act_seq, dtl_act_seq); - }, - dtl_act_types, max_trans_id, 0); - } - - bool TraversalActionSequenceCreator::SkipDMLAction(const std::vector &actions) const { - assert(!actions.empty()); - if (actions.size() == 1) { - return false; - } - const Action &last_action = actions[actions.size() - 2]; - const Action &cur_action = actions[actions.size() - 1]; - const bool is_same_trans = (last_action.trans_id() == cur_action.trans_id()); - const bool is_same_item = (last_action.item_id() == cur_action.item_id()); - return - /* WW WR same item in same transaction is meaningless */ - (is_same_trans && is_same_item && - (Action::Type::WRITE == last_action.type() || Action::Type::READ == cur_action.type())) || - /* actions for different items in same transaction can be swapped, so we support item_id - must be ascending */ - (is_same_trans && last_action.item_id() > cur_action.item_id()) || - /* read actions in different transactions can be swapped */ - //(Action::Type::READ == last_action.type() && Action::Type::READ == cur_action.type() && - // last_action.trans_id() > cur_action.trans_id()) || - false; - } - - bool TraversalActionSequenceCreator::OnlyOneTrans(const std::vector &actions) const { - for (uint64_t i = 1; i < actions.size(); ++i) { - if (actions[i].trans_id() != actions[i - 1].trans_id()) { - return false; - } - } - return true; - } - - void TraversalActionSequenceCreator::RecursiveFillDMLActionSeq( - const std::function &handle, - std::vector &actions, uint64_t max_trans_id, uint64_t max_item_id) const { - size_t cur = actions.size(); - if (dynamic_seq_len_ || cur == dml_act_num_) { - if (dfs_cnt_ == subtask_num_) { - if (max_trans_id == trans_num_ || save_history_with_empty_opt_) - handle(ActionSequence(max_trans_id, item_num_, actions),seq_id_, max_trans_id); - else - cut_down_++; - dfs_cnt_ -= subtask_num_; - } - ++seq_id_; - ++dfs_cnt_; - } - if (cur != dml_act_num_) { - // Make sure trans id is increment - for (uint64_t trans_id = 0; trans_id < std::min(max_trans_id + 1, trans_num_); ++trans_id) - for (uint64_t item_id = 0; item_id < std::min(max_item_id + 1, item_num_); ++item_id) - for (Action::Type dml_act_type : {Action::Type::READ, Action::Type::WRITE}) { - // Continuous read in same transaction is meaningless - if (cur > 0 && dml_act_type == Action::Type::READ && - dml_act_type == actions[cur - 1].type() && - trans_id == actions[cur - 1].trans_id() && item_id == actions[cur - 1].item_id()) { - continue; - } - actions.emplace_back(dml_act_type, trans_id, item_id); - // if (!SkipDMLAction(actions)) { RecursiveFillDMLActionSeq(handle, actions, versions); - // } - RecursiveFillDMLActionSeq(handle, actions, std::max(trans_id + 1, max_trans_id), - std::max(item_id + 1, max_item_id)); - actions.pop_back(); - } - } - } - /***************************************************************************** - * Just like backtrace structure, condition-if includes the end-condition. And condition-else - *does the loop works. This function firstly build the Full Permutation of DTL. And then merge - *it with DML. At last handle() it. args: dtl_act_types: set of DTL - * - * - ****************************************************************************/ - void TraversalActionSequenceCreator::RecursiveFillDTLActionSeq(const std::function &handle, - std::vector &dtl_act_types, - const uint64_t max_trans_id, uint64_t abort_trans_num) const { - if (!with_abort_) { - dtl_act_types.assign(max_trans_id, Action::Type::COMMIT); - } - if (dtl_act_types.size() == max_trans_id) { - std::vector trans_order; - for (uint64_t trans_id = 0; trans_id < max_trans_id; ++trans_id) { - trans_order.push_back(trans_id); - } - do { - std::vector dtl_actions; - for (uint64_t trans_id : trans_order) { - dtl_actions.emplace_back(dtl_act_types[trans_id], trans_id); - } - handle(ActionSequence(max_trans_id, item_num_, dtl_actions, abort_trans_num)); - } while (std::next_permutation(trans_order.begin(), trans_order.end())); - } else { - for (Action::Type dtl_act_type : {Action::Type::COMMIT, Action::Type::ABORT}) { - dtl_act_types.emplace_back(dtl_act_type); - if (dtl_act_type == Action::Type::ABORT) abort_trans_num++; - RecursiveFillDTLActionSeq(handle, dtl_act_types, max_trans_id, abort_trans_num); - dtl_act_types.pop_back(); - } - } - } - - void TraversalActionSequenceCreator::RecursiveMoveForwardDTLAction(const std::function &handle, - ActionSequence &act_seq, const size_t pos) const { - if (pos == act_seq.size() || tail_dtl_) { - handle(act_seq); - } else { - RecursiveMoveForwardDTLAction(handle, act_seq, pos + 1); - size_t i = pos; - while (i > 0 && act_seq[i - 1].trans_id() != act_seq[i].trans_id() && - (act_seq[i - 1].IsPointDML() || act_seq[i - 1].type() == Action::Type::SCAN_ODD)) { - std::swap(act_seq[i - 1], act_seq[i]); - RecursiveMoveForwardDTLAction(handle, act_seq, pos + 1); - --i; - } - while (i < pos) { - std::swap(act_seq[i], act_seq[i + 1]); - ++i; - } - } - } diff --git a/contrib/deneva/benchmarks/creator.h b/contrib/deneva/benchmarks/creator.h deleted file mode 100644 index b9ad90de..00000000 --- a/contrib/deneva/benchmarks/creator.h +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once -#include - -#include "generic.h" - - -class ActionSequenceCreator { - public: - ActionSequenceCreator() {} - ~ActionSequenceCreator() {} - virtual void DeliverActionSequences(const std::function &handle) const = 0; -}; - -class InputActionSequenceCreator : public ActionSequenceCreator { - public: - InputActionSequenceCreator(const std::string &path); - ~InputActionSequenceCreator(); - virtual void DeliverActionSequences( - const std::function &handle) const; - - private: - const std::string path_; -}; - - - - -class TraversalActionSequenceCreator : public ActionSequenceCreator { - public: - TraversalActionSequenceCreator(const Options &opt); - - void DeliverActionSequences(const std::function &handle) const; - static uint64_t cut_down_; - - - private: - void HandleActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &act_seq) const ; - void HandleDTLActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &dml_act_seq, - const ActionSequence &dtl_act_seq) const ; - void HandleDMLActionSeq(const std::function &handle,uint64_t seq_id, - const ActionSequence &dml_act_seq, const uint64_t max_trans_id) const ; - - bool SkipDMLAction(const std::vector &actions) const ; - bool OnlyOneTrans(const std::vector &actions) const ; - void RecursiveFillDMLActionSeq( - const std::function &handle, - std::vector &actions, uint64_t max_trans_id, uint64_t max_item_id) const ; - /***************************************************************************** - * Just like backtrace structure, condition-if includes the end-condition. And condition-else - *does the loop works. This function firstly build the Full Permutation of DTL. And then merge - *it with DML. At last handle() it. args: dtl_act_types: set of DTL - * - * - ****************************************************************************/ - void RecursiveFillDTLActionSeq(const std::function &handle, - std::vector &dtl_act_types, - const uint64_t max_trans_id, uint64_t abort_trans_num) const ; - - void RecursiveMoveForwardDTLAction(const std::function &handle, - ActionSequence &act_seq, const size_t pos) const ; - - const uint64_t trans_num_; - const uint64_t item_num_; - const uint64_t dml_act_num_; - const uint64_t subtask_num_; - mutable uint64_t dfs_cnt_; - const bool with_abort_; - const bool tail_dtl_; - const bool save_history_with_empty_opt_; - const bool dynamic_seq_len_; - mutable uint64_t seq_id_; - -}; diff --git a/contrib/deneva/benchmarks/da.h b/contrib/deneva/benchmarks/da.h deleted file mode 100644 index 967d2189..00000000 --- a/contrib/deneva/benchmarks/da.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _DA_H_ -#define _DA_H_ -#include "config.h" -#include "query.h" -#include "row.h" -#include "txn.h" -#include "wl.h" -#include "creator.h" - -class DAQuery; -class DAQueryMessage; -struct Item_no; - -class table_t; -class INDEX; -class DAQuery; - -class DAWorkload : public Workload { - public: - RC init(); - RC init_table(); - RC init_schema(const char* schema_file); - RC get_txn_man(TxnManager*& txn_manager); - void reset_tab_idx(); - table_t* t_datab; - uint64_t nextstate; - INDEX* i_datab; - bool** delivering; - - private: - //void init_tab_DAtab(int id, uint64_t w_id); - void init_tab_DAtab(); - static void* threadInitDAtab(void* This); -}; - -struct DA_thr_args { - DAWorkload* wl; - UInt32 id; - UInt32 tot; -}; - -class DATxnManager : public TxnManager { - public: - void init(uint64_t thd_id, Workload* h_wl); - void reset(); - RC acquire_locks(); - RC run_txn(); - RC run_txn_post_wait(); - RC run_calvin_txn(); - - void copy_remote_items(DAQueryMessage* msg); - - private: - DAWorkload* _wl; - volatile RC _rc; - row_t* row; - - uint64_t next_item_id; - - bool is_done(); - bool is_local_item(uint64_t idx); - RC send_remote_request(); - RC run_delivery(DAQuery* query); -}; -#endif diff --git a/contrib/deneva/benchmarks/da_block_queue.cpp b/contrib/deneva/benchmarks/da_block_queue.cpp deleted file mode 100644 index 8bf0dd61..00000000 --- a/contrib/deneva/benchmarks/da_block_queue.cpp +++ /dev/null @@ -1,82 +0,0 @@ - -#include "da_block_queue.h" - - -void DABlockQueue::LockQueue() //queue lock -{ - pthread_mutex_lock(&mutex); -} -void DABlockQueue::UnlockQueue() -{ - pthread_mutex_unlock(&mutex); -} -void DABlockQueue::ProductWait() -{ - pthread_cond_wait(&full,&mutex); -} -void DABlockQueue::ConsumeWait() -{ - pthread_cond_wait(&empty,&mutex); -} -void DABlockQueue::NotifyProduct() -{ - pthread_cond_signal(&full); -} -void DABlockQueue::NotifyConsume() -{ - pthread_cond_signal(&empty); -} -bool DABlockQueue::IsEmpty() -{ - return (q.size() == 0 ? true : false); -} -bool DABlockQueue::IsFull() -{ - return (q.size() == cap ? true : false); -} - -DABlockQueue::DABlockQueue(size_t _cap = 50):cap(_cap) -{ - pthread_mutex_init(&mutex,NULL); - pthread_cond_init(&full,NULL); - pthread_cond_init(&empty,NULL); -} -DABlockQueue::~DABlockQueue() -{ - pthread_mutex_destroy(&mutex); - pthread_cond_destroy(&full); - pthread_cond_destroy(&empty); -} -void DABlockQueue::push_data(BaseQuery* data) -{ - LockQueue(); - while(IsFull()) - { - NotifyConsume(); - std::cout<<"queue full,notify consume data,product stop!!"<().swap(q); - ConsumeWait(); - } - - data = q.front(); - q.pop_front(); - NotifyProduct(); - UnlockQueue(); - return data; -} - diff --git a/contrib/deneva/benchmarks/da_block_queue.h b/contrib/deneva/benchmarks/da_block_queue.h deleted file mode 100644 index 669c1138..00000000 --- a/contrib/deneva/benchmarks/da_block_queue.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "global.h" - - -class DABlockQueue -{ - private: - //std::queue q; - std::list q; - size_t cap; - pthread_mutex_t mutex; - pthread_cond_t full; - pthread_cond_t empty; - void LockQueue(); - void UnlockQueue(); - void ProductWait(); - void ConsumeWait(); - void NotifyProduct(); - void NotifyConsume(); - bool IsEmpty(); - bool IsFull(); - public: - DABlockQueue(size_t _cnt); - ~DABlockQueue(); - void push_data(BaseQuery* data); - BaseQuery* pop_data(); -}; diff --git a/contrib/deneva/benchmarks/da_const.h b/contrib/deneva/benchmarks/da_const.h deleted file mode 100644 index e681ee7a..00000000 --- a/contrib/deneva/benchmarks/da_const.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -enum { - X, - Y, - Z, - }; - -enum{ - ID, - VALUE -}; diff --git a/contrib/deneva/benchmarks/da_query.cpp b/contrib/deneva/benchmarks/da_query.cpp deleted file mode 100644 index 1c349831..00000000 --- a/contrib/deneva/benchmarks/da_query.cpp +++ /dev/null @@ -1,139 +0,0 @@ - -#include "query.h" -#include "da_query.h" -#include "da.h" -#include "mem_alloc.h" -#include "wl.h" -#include "table.h" -#include "message.h" - - -void DAQuery::init(uint64_t thd_id, Workload * h_wl){ - BaseQuery::init(); -} - -void DAQuery::init() { - BaseQuery::init(); -} - - -void DAQuery::release() { - BaseQuery::release(); -} - -void DAQuery::print() -{ - std::cout<< - "trans_id:"< DAQuery::participants(Message * msg, Workload * wl) { - std::set participant_set; - return participant_set; -} - -uint64_t DAQueryGenerator::action_2_state(ActionSequence& act_seq,size_t i, uint64_t seq_id) -{ - - //turn to 64bit in order to not overflow - uint64_t ret=0, trans_id2=0, item_id2=0, type2=0, seq_id2=0, number2=0; - if(i<0||i>=act_seq.actions().size()) - return ret; - trans_id2=act_seq.actions()[i].trans_id(); - if(act_seq.actions()[i].IsPointDML()) - item_id2=act_seq.actions()[i].item_id(); - type2=static_cast(act_seq.actions()[i].type()); - seq_id2=seq_id; - number2=i; - - - ret = ret | trans_id2; - ret = ret | (item_id2 << 8 ); - ret = ret | (type2 << 16); - ret = ret | (seq_id2 << 24); - ret = ret | (number2 << 32); - return ret; -} -DATxnType type_trans(char type) -{ - if(type=='R') - return DA_READ; - else if(type=='W') - return DA_WRITE; - else if(type=='C') - return DA_COMMIT; - else if(type=='A') - return DA_ABORT; - else - return DA_SCAN; -} -uint64_t DAQueryGenerator::seq_num=0; -BaseQuery * DAQueryGenerator::create_query(Workload * h_wl, uint64_t home_partition_id) -{ - #if CREATOR_USE_T - struct Options opt; - opt.trans_num=TRANS_CNT; - opt.item_num=ITEM_CNT; - opt.subtask_num=SUBTASK_NUM; - opt.subtask_id=SUBTASK_ID; - if(opt.subtask_num>1) - opt.subtask_id=home_partition_id; - opt.max_dml=MAX_DML; - opt.with_abort=WITH_ABORT; - opt.tail_dtl=TAIL_DTL; - opt.save_history_with_empty_opt=SAVE_HISTROY_WITH_EMPTY_OPT; - opt.dynamic_seq_len=DYNAMIC_SEQ_LEN; - TraversalActionSequenceCreator creator(opt); - #else - InputActionSequenceCreator creator(string(INPUT_FILE_PATH)); - #endif - BaseQuery * ret=NULL; - const auto handle = [this](ActionSequence &&act_seq,uint64_t seq_id) { - size_t seq_size=act_seq.actions().size(); - int* t_version=(int*)malloc(act_seq.item_num()*sizeof(int)); - memset(t_version,0,act_seq.item_num()*sizeof(int)); - //bool pu=false; - for(size_t i=0;itrans_id=act_seq.actions()[i].trans_id(); - DAQ_t->item_id=act_seq.actions()[i].item_id(); - DAQ_t->seq_id=seq_num;//*opt.subtask_num+opt.subtask_id; - DAQ_t->state=action_2_state(act_seq,i,DAQ_t->seq_id); - DAQ_t->next_state=action_2_state(act_seq,i+1,DAQ_t->seq_id); - DAQ_t->last_state=action_2_state(act_seq,i-1,DAQ_t->seq_id); - DAQ_t->txn_type=type_trans(static_cast(act_seq.actions()[i].type())); - if(act_seq.actions()[i].type()==Action::Type::WRITE) - t_version[DAQ_t->item_id]++; - DAQ_t->write_version=t_version[DAQ_t->item_id]; - da_gen_qry_queue.push_data(DAQ_t); - /* - while(!(pu=da_query_queue.push(DAQ_t))); - if(pu) - printf("true "); - else - printf("false "); - fflush(stdout); - */ - } - free(t_version); - seq_num++; - printf("product: %lu\n",seq_num); - fflush(stdout); - }; - - creator.DeliverActionSequences(handle); - printf("history thread exit\n"); - fflush(stdout); - return ret; -} diff --git a/contrib/deneva/benchmarks/da_query.h b/contrib/deneva/benchmarks/da_query.h deleted file mode 100644 index 94987f33..00000000 --- a/contrib/deneva/benchmarks/da_query.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _DAQuery_H_ -#define _DAQuery_H_ - -#include "global.h" -#include "helper.h" -#include "query.h" -#include "da.h" -//#include "creator.h" - -class Workload; -class Message; - -class DAQuery : public BaseQuery { -public: - DAQuery() - { - trans_id=0; - item_id=0; - seq_id=0; - state=0; - next_state=0; - last_state=0; - } - void init(); - void init(uint64_t thd_id, Workload * h_wl); - void release(); - void print(); - bool readonly(); - - static std::set participants(Message * msg, Workload * wl); - DATxnType txn_type; - uint64_t trans_id; - uint64_t item_id; - uint64_t seq_id; - uint64_t write_version; - uint64_t state; - uint64_t next_state; - uint64_t last_state; - - -}; - -class DAQueryGenerator : public QueryGenerator { -public: - BaseQuery * create_query(Workload * h_wl, uint64_t home_partition_id); - static uint64_t seq_num; -private: - uint64_t action_2_state(ActionSequence& act_seq,size_t i, uint64_t seq_id); -}; -#endif diff --git a/contrib/deneva/benchmarks/da_query_queue.cpp b/contrib/deneva/benchmarks/da_query_queue.cpp deleted file mode 100644 index a91e38d8..00000000 --- a/contrib/deneva/benchmarks/da_query_queue.cpp +++ /dev/null @@ -1,16 +0,0 @@ - -/*#include"da_query_queue.h" -#include"da_query.h" - - -bool DAQueryQueue::push(DAQuery query) -{ - if(!queue.push(query)) - return false; - else - return true; -} -int DAQueryQueue::pop(); -int DAQueryQueue::is_full(); -int DAQueryQueue::is_empty(); -*/ diff --git a/contrib/deneva/benchmarks/da_query_queue.h b/contrib/deneva/benchmarks/da_query_queue.h deleted file mode 100644 index 5e0eea27..00000000 --- a/contrib/deneva/benchmarks/da_query_queue.h +++ /dev/null @@ -1,14 +0,0 @@ -/*#include - - -class DAQueryQueue -{ - public: - bool push(); - bool pop(); - bool is_full(); - bool is_empty(); - private: - boost::lockfree::queue> q{100}; - uint64_t size; -};*/ diff --git a/contrib/deneva/benchmarks/da_txn.cpp b/contrib/deneva/benchmarks/da_txn.cpp deleted file mode 100644 index 2f87cfa8..00000000 --- a/contrib/deneva/benchmarks/da_txn.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include - -#include "config.h" -#include "da.h" -#include "da_const.h" -#include "da_query.h" -#include "index_btree.h" -#include "index_hash.h" -#include "message.h" -#include "msg_queue.h" -#include "query.h" -#include "row.h" -#include "table.h" -#include "thread.h" -#include "transport.h" -#include "wl.h" - -void DATxnManager::init(uint64_t thd_id, Workload *h_wl) { - TxnManager::init(thd_id, h_wl); - _wl = (DAWorkload *)h_wl; - reset(); -} -RC DATxnManager::run_txn_post_wait() { - get_row_post_wait(row); - return RCOK; -} -RC DATxnManager::acquire_locks(){return RCOK;} -RC DATxnManager::run_calvin_txn(){return RCOK;} -void DATxnManager::reset(){TxnManager::reset();} -RC DATxnManager::run_txn() { -#if MODE == SETUP_MODE - return RCOK; -#endif - RC rc = RCOK; - //uint64_t starttime = get_sys_clock(); - if (IS_LOCAL(txn->txn_id)) { - DEBUG("Running txn %ld\n", txn->txn_id); -#if DISTR_DEBUG - query->print(); -#endif - query->partitions_touched.add_unique(GET_PART_ID(0, g_node_id)); - } - DAQuery *da_query = (DAQuery *)query; - uint64_t trans_id = da_query->trans_id; - uint64_t item_id = da_query->item_id; // item_id from 0-2 represent X,Y,Z - //uint64_t seq_id = da_query->seq_id; - uint64_t state = da_query->state; - uint64_t version = da_query->write_version; - //uint64_t next_state = da_query->next_state; - //uint64_t last_state = da_query->last_state; - DATxnType txn_type = da_query->txn_type; - bool jump=false; - - switch (txn_type) - { - case DA_WRITE: - DA_history_mem.push_back('W'); - break; - case DA_READ: - DA_history_mem.push_back('R'); - break; - case DA_COMMIT: - DA_history_mem.push_back('C'); - break; - case DA_ABORT: - DA_history_mem.push_back('A'); - break; - case DA_SCAN: - DA_history_mem.push_back('S'); - break; - } - DA_history_mem.push_back(static_cast('0'+trans_id));//trans_id - if(txn_type==DA_WRITE || txn_type==DA_READ) - DA_history_mem.push_back(static_cast('a'+item_id));//item_id - DA_history_mem.push_back(' '); - #if WORKLOAD ==DA - printf("thd_id:%lu check: state:%lu nextstate:%lu \n",h_thd->_thd_id, state, _wl->nextstate); - fflush(stdout); - #endif - if(_wl->nextstate!=0) - { - while (state != _wl->nextstate&&!simulation->is_done()); - } - - if(already_abort_tab.count(trans_id)>0) - { - if(txn_type==DA_WRITE || txn_type==DA_READ||txn_type==DA_COMMIT||txn_type==DA_ABORT) - { - jump=true; - if(txn_type==DA_ABORT) - INC_STATS(get_thd_id(), positive_txn_abort_cnt, 1); - } - //else if(txn_type==DA_COMMIT) - //txn_type=DA_ABORT; - } - - if(!jump) - { - //enum RC { RCOK = 0, Commit, Abort, WAIT, WAIT_REM, ERROR, FINISH, NONE }; - itemid_t *item; - INDEX *index = _wl->i_datab; - uint64_t value[3]; - - item = index_read(index, item_id, 0); - assert(item != NULL); - row_t *TempRow = ((row_t *)item->location); - - switch (txn_type) { - case DA_WRITE: { - rc = get_row(TempRow, WR, row); - if(rc == RCOK) - row->set_value(VALUE, version); - else - { - rc = start_abort(); - already_abort_tab.insert(trans_id); - } - break; - } - case DA_READ: { - rc = get_row(TempRow, RD, row); - if(rc == RCOK) - row->get_value(VALUE, value[0]); - else - { - rc = start_abort(); - already_abort_tab.insert(trans_id); - } - break; - } - case DA_COMMIT: { - rc=start_commit(); - break; - } - case DA_ABORT: { - INC_STATS(get_thd_id(), positive_txn_abort_cnt, 1); - rc = start_abort(); - break; - } - case DA_SCAN: { - row_t *TempRow; - for (int i = 0; i < ITEM_CNT; i++) { - item = index_read(index, item_id, 0); - assert(item != NULL); - TempRow = ((row_t *)item->location); - rc = get_row(TempRow, WR, row); - row->get_value(VALUE, value[i]); - } - break; - } - } - //if(rc==Abort||rc==WAIT) - //{ - // rc = start_abort(); - //} - } - _wl->nextstate = da_query->next_state; - if(_wl->nextstate==0) - { - if(abort_history) - abort_file<reset_tab_idx(); - already_abort_tab.clear(); - da_start_trans_tab.clear(); - } - return rc; -} diff --git a/contrib/deneva/benchmarks/da_wl.cpp b/contrib/deneva/benchmarks/da_wl.cpp deleted file mode 100644 index 9d979365..00000000 --- a/contrib/deneva/benchmarks/da_wl.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "da.h" -#include "da_const.h" -#include "global.h" -#include "helper.h" -#include "index_btree.h" -#include "index_hash.h" -#include "mem_alloc.h" -#include "query.h" -#include "row.h" -#include "table.h" -#include "thread.h" -#include "txn.h" -#include "wl.h" -#include - -RC DAWorkload::init() { - Workload::init(); - char *cpath = getenv("SCHEMA_PATH"); - string path; - if (cpath == NULL) - path = "./benchmarks/"; - else { - path = string(cpath); - } - path += "da_schema.txt"; - cout << "reading schema file: " << path << endl; - delivering = new bool *[g_num_wh + 1]; - for (UInt32 wid = 1; wid <= g_num_wh; wid++) - delivering[wid] = (bool *)mem_allocator.alloc(CL_SIZE); - printf("Initializing schema... "); - fflush(stdout); - init_schema(path.c_str()); - printf("Done\n"); - printf("Initializing table... "); - fflush(stdout); - init_table(); - printf("Done\n"); - fflush(stdout); - nextstate=0; - return RCOK; -} - -RC DAWorkload::init_schema(const char *schema_file) { - Workload::init_schema(schema_file); - printf("base Workload init_schema over"); - t_datab = tables["DAtab"]; - i_datab = indexes["DAtab_IDX"]; - return RCOK; -} - -RC DAWorkload::init_table() { - //pthread_t *p_thds = new pthread_t[g_init_parallelism - 1]; - DA_thr_args *tt = new DA_thr_args[g_init_parallelism]; - for (UInt32 i = 0; i < g_init_parallelism; i++) { - tt[i].wl = this; - tt[i].id = i; - } - // DA table - threadInitDAtab(&tt[0]); - nextstate=0; - printf("DAtab Done\n"); - return RCOK; -} - -void DAWorkload::init_tab_DAtab() { - row_t *row; - uint64_t row_id; - for (int i = 0; i < ITEM_CNT; i++) { - t_datab->get_new_row(row, 0, row_id); - row->set_value(ID, i); - row->set_value(VALUE, 0); - //insert_row(row, _wl->t_datab); - index_insert(i_datab, i, row, 0); - } -} - -void DAWorkload::reset_tab_idx() -{ - index_delete_all(); - init_tab_DAtab(); -} - -void *DAWorkload::threadInitDAtab(void *This) { - DAWorkload *wl = ((DA_thr_args *)This)->wl; - wl->init_tab_DAtab(); - return NULL; -} - -RC DAWorkload::get_txn_man(TxnManager *&txn_manager) { - DEBUG_M("DAWorkload::get_txn_man DATxnManager alloc\n"); - txn_manager = (DATxnManager *)mem_allocator.align_alloc(sizeof(DATxnManager)); - new (txn_manager) DATxnManager(); - // txn_manager->init( this); - return RCOK; -} diff --git a/contrib/deneva/benchmarks/generic.cpp b/contrib/deneva/benchmarks/generic.cpp deleted file mode 100644 index b2e697e5..00000000 --- a/contrib/deneva/benchmarks/generic.cpp +++ /dev/null @@ -1,484 +0,0 @@ -#include"generic.h" - -std::unordered_map Anomally2Name= -{ - //I, II - {DIRTY_WRITE,"DIRTY_WRITE"}, - {EDGE_CROESS,"EDGE_CROESS"}, - {LOST_UPDATE,"LOST_UPDATE"}, - {READ_SKEW,"READ_SKEW"}, - {READ_WRITE_SKEW,"READ_WRITE_SKEW"}, - {THREE_TRANS_WRITE_SKEW,"THREE_TRANS_WRITE_SKEW"}, - {MULTI_TRANS_ANOMALY,"MULTI_TRANS_ANOMALY"}, - //WSI - {WRITE_SKEW, "WRITE_SKEW"}, - {WW_CONFLICT,"WW_CONFLICT"}, - //SSI - {RW_CONFLICT,"RW_CONFLICT"}, - //BOCC FOCC UNKNOWN - {UNKNOWN,"UNKNOWN"} -}; - -std::ostream& operator<<(std::ostream& os, const Anomally e) { - switch (e) { - case DIRTY_WRITE: \ - return os << "DIRTY_WRITE"; - case EDGE_CROESS: \ - return os << "EDGE_CROESS"; - case LOST_UPDATE: \ - return os << "LOST_UPDATE"; - case READ_SKEW: \ - return os << "READ_SKEW"; - case READ_WRITE_SKEW: \ - return os << "READ_WRITE_SKEW"; - case THREE_TRANS_WRITE_SKEW: \ - return os << "THREE_TRANS_WRITE_SKEW"; - case MULTI_TRANS_ANOMALY: \ - return os << "MULTI_TRANS_ANOMALY"; - case WRITE_SKEW: \ - return os << "WRITE_SKEW"; - case WW_CONFLICT: \ - return os << "WW_CONFLICT"; - case RW_CONFLICT: \ - return os << "RW_CONFLICT"; - default: - return os << "UNKNOWN"; - } -} - - -enum class SerializeReadPolicy { UNCOMMITTED_READ, COMMITTED_READ, REPEATABLE_READ, SI_READ }; - -template -std::unique_ptr MakeUnique(Ts&&... args) { - return std::unique_ptr(new T(std::forward(args)...)); -} - - template - Optional::Optional() : has_value_(false), value_(nullptr) {} - template - Optional::Optional(const T& value) : has_value_(true), value_(new T(value)) {} - template - Optional::Optional(T&& value) : has_value_(true), value_(new T(std::forward(value))) {} - template - Optional::Optional(const Optional& o) - : has_value_(o.has_value_), value_(o.value_ ? new T(*o.value_) : nullptr) {} - template - Optional::Optional(Optional&& o) = default; - template - Optional::~Optional() {} - template - Optional& Optional::operator=(const Optional& o) { - has_value_ = o.has_value_; - value_ = o.value_ ? MakeUnique(*o.value_) : nullptr; - return *this; - } - template - Optional& Optional::operator=(Optional&&) = default; - template - bool Optional::HasValue() const { return has_value_; } - template - void Optional::Set(T&& value) { - value_ = MakeUnique(std::move(value)); - has_value_ = true; - } - template - void Optional::Set(const T& value) { - value_ = MakeUnique(value); - has_value_ = true; - } - template - T& Optional::Get() { - if (!has_value_) { - throw "Empty Optional"; - } - return *value_; - } - template - const T& Optional::Get() const { - if (!has_value_) { - throw "Empty Optional"; - } - return *value_; - } - - - - - Action::Action() : type_(Type::UNKNOWN), trans_id_(0) {} - Action::Action(const Type dtl_type, const uint64_t trans_id) : type_(dtl_type), trans_id_(trans_id) { - if (!IsDTL()) { - throw std::to_string(static_cast(dtl_type)) + " is not a DTL Action"; - } - } - Action::Action(const Type dml_type, const uint64_t trans_id, const uint64_t item_id, - const Optional version) - : type_(dml_type), trans_id_(trans_id), item_id_(item_id), version_(version) { - if (!IsPointDML()) { - throw std::to_string(static_cast(dml_type)) + " is not a Point DML Action"; - } - } - Action& Action::operator=(const Action& action) = default; - Action::~Action() {} - - Action::Type Action::type() const { return type_; } - uint64_t Action::trans_id() const { return trans_id_; } - uint64_t Action::item_id() const { - if(item_id_.HasValue()) - return item_id_.Get(); - else - return 0; - } - uint64_t Action::version() const { return version_.Get(); } - void Action::SetTransId(uint64_t trans_id) { trans_id_ = trans_id; } - void Action::SetItemId(const uint64_t item_id) { - if (IsDTL()) { - throw "DTL actions update item id is meaningless"; - } - item_id_.Set(item_id); - } - void Action::UpdateVersion(const uint64_t version) { - if (IsDTL()) { - throw "DML actions update version is meaningless"; - } - version_.Set(version); - } - - std::ostream& operator<<(std::ostream& os, const Action& action) { - os << static_cast(action.type_) << action.trans_id_; - if (action.IsPointDML()) { - if (action.item_id_.Get() >= 26) { - throw "Not support item_id equal or larger than 26 yet"; - } - os << static_cast('a' + action.item_id_.Get()); - } - - return os; - } - - std::istream& operator>>(std::istream& is, Action::Type& type) { - char c; - is >> c; - switch (c) { - case 'W': - type = Action::Type::WRITE; - break; - case 'R': - type = Action::Type::READ; - break; - case 'C': - type = Action::Type::COMMIT; - break; - case 'A': - type = Action::Type::ABORT; - break; - case 'S': - type = Action::Type::SCAN_ODD; - break; - default: - type = Action::Type::UNKNOWN; - is.setstate(std::ios::failbit); - } - return is; - } - - std::istream& operator>>(std::istream& is, Action& action) { - if (!(is >> action.type_) || !(is >> action.trans_id_)) { - return is; - } - if (action.type_ == Action::Type::WRITE || action.type_ == Action::Type::READ) { - char item_c; - if (!(is >> item_c) || !std::islower(item_c)) { - is.setstate(std::ios::failbit); - return is; - } - action.item_id_ = item_c - 'a'; - } - return is; - } - - bool Action::IsPointDML() const { return IsPointDML(type_); } - bool Action::IsDTL() const { return IsDTL(type_); } - bool Action::IsPointDML(const Type& type) { return type == Type::READ || type == Type::WRITE; } - bool Action::IsDTL(const Type& type) { return type == Type::COMMIT || type == Type::ABORT; } - // surport std::map - bool Action::operator<(const Action& r) const { - if (trans_id() == r.trans_id()) { - uint64_t l_item_id = item_id_.HasValue() ? item_id() : -1; - uint64_t r_item_id = r.item_id_.HasValue() ? r.item_id() : -1; - if (l_item_id == r_item_id) { - uint64_t l_version = version_.HasValue() ? version() : -1; - uint64_t r_version = r.version_.HasValue() ? r.version() : -1; - if (l_version == r_version) return type() < r.type(); - return l_version < r.version(); - } - return l_item_id < r_item_id; - } - return trans_id() < r.trans_id(); - } - - - - ActionSequence::ActionSequence() : ActionSequence(0, 0, {}) {} - ActionSequence::ActionSequence(const uint64_t trans_num, const uint64_t item_num, - const std::vector& actions) - : trans_num_(trans_num),abort_trans_num_(0), item_num_(item_num), actions_(actions) {} - ActionSequence::ActionSequence(const uint64_t trans_num, const uint64_t item_num, std::vector&& actions) - : trans_num_(trans_num), abort_trans_num_(0),item_num_(item_num), actions_(actions) {} - ActionSequence::ActionSequence(const uint64_t trans_num, const uint64_t item_num, - const std::vector& actions, const uint64_t abort_trans_num) - : trans_num_(trans_num), - abort_trans_num_(abort_trans_num), - item_num_(item_num), - actions_(actions) - {} - ActionSequence::ActionSequence(ActionSequence&& act_seq) = default; - ActionSequence::ActionSequence(const ActionSequence& act_seq) = default; - ActionSequence::~ActionSequence() {} - - ActionSequence& ActionSequence::operator=(ActionSequence&& act_seq) = default; - ActionSequence ActionSequence::operator+(const ActionSequence& act_seq) const { - if (trans_num_ != act_seq.trans_num_ || item_num_ != act_seq.item_num_) { - throw "Action sequence mismatch"; - } - std::vector new_actions = actions_; - for (const auto& action : act_seq.actions_) { - new_actions.push_back(action); - } - return ActionSequence(trans_num_, item_num_, std::move(new_actions), - abort_trans_num_ + act_seq.abort_trans_num_); - } - std::string ActionSequence::to_string() const { - std::string ret; - for (size_t i = 0; i < actions_.size(); i++) { - ret.push_back(static_cast(actions_[i].type())); - ret.push_back('0' + actions_[i].trans_id()); - if (actions_[i].IsPointDML()) ret.push_back('a' + actions_[i].item_id()); - } - return ret; - } - std::vector& ActionSequence::actions() { return actions_; } - const std::vector& ActionSequence::actions() const { return actions_; } - uint64_t ActionSequence::trans_num() const { return trans_num_; } - uint64_t ActionSequence::abort_trans_num() const { return abort_trans_num_; } - uint64_t ActionSequence::item_num() const { return item_num_; } - size_t ActionSequence::size() const { return actions_.size(); } - - std::ostream& operator<<(std::ostream& os, const ActionSequence& act_seq) { - for (const Action& action : act_seq.actions_) { - os << action << ' '; - } - return os; - } - - std::istream& operator>>(std::istream& is, ActionSequence& act_seq) { - std::string s; - if (std::getline(is, s)) { - std::stringstream ss(s); - std::vector actions; - uint64_t trans_num = 0; - uint64_t item_num = 0; - for (std::stringstream ss(s); !ss.eof() && !ss.fail();) { - Action action; - if (ss >> action) { - actions.emplace_back(action); - trans_num = std::max(trans_num, action.trans_id() + 1); - if (action.IsPointDML()) { - item_num = std::max(item_num, action.item_id() + 1); - } - } - } - if (ss.fail()) { - std::cerr << "Invalid action sequence: \'" << s << "\'" << std::endl; - } else { - act_seq = ActionSequence(trans_num, item_num, actions); - } - } - return is; - } - - Action& ActionSequence::operator[](const size_t index) { return actions_[index]; } - - void ActionSequence::UpdateWriteVersions() { - std::vector item_version(item_num_, 0); - for (Action& action : actions_) { - if (action.type() == Action::Type::WRITE) { - action.UpdateVersion(++item_version[action.item_id()]); - } - } - } - // add - // update write version, clean up read version - void ActionSequence::FillWriteVersions() { - std::vector item_version(item_num_, 0); - for (Action& action : actions_) { - if (action.type() == Action::Type::WRITE) { - action.UpdateVersion(++item_version[action.item_id()]); - } else if (action.type() == Action::Type::READ) { - action.UpdateVersion(-1); // clear read version as -1 - } - } - } - -/* -template <> -void ActionSequence::FillReadVersions( - ActionSequence& act_seq) { - std::vector>> trans_write_item_versions( - act_seq.trans_num(), std::vector>(act_seq.item_num())); - std::vector>> item_version_link( - act_seq.item_num(), {0}); - - const auto latest_version = [&item_version_link](const uint64_t item_id) { - const std::vector>& version_link = item_version_link[item_id]; - uint64_t i = version_link.size() - 1; - for (; i >= 0 && !version_link[i].HasValue(); --i) - ; - assert(i < version_link.size()); - return version_link[i].Get(); - }; - const auto release_version = [&item_version_link](const uint64_t item_id, - const uint64_t version) { - for (Optional& cur_version : item_version_link[item_id]) { - if (cur_version.HasValue() && cur_version.Get() == version) { - cur_version = {}; - return; - } - } - assert(false); // cannot found the version - }; - for (Action& action : act_seq.actions()) { - if (action.type() == Action::Type::READ) { - // we did not change version when resort actions, so we use latest version instead of - // action.version() - // act_seq.PushTransReadResult(action.trans_id(), action.item_id(), - // latest_version(action.item_id())); - Optional read_version = - trans_write_item_versions[action.trans_id()][action.item_id()]; - if (read_version.HasValue()) { - action.UpdateVersion(read_version.Get()); - } else - action.UpdateVersion(0); - } else if (action.type() == Action::Type::WRITE) { - item_version_link[action.item_id()].push_back(action.version()); - Optional& my_last_write_version = - trans_write_item_versions[action.trans_id()][action.item_id()]; - if (my_last_write_version.HasValue()) { - release_version(action.item_id(), my_last_write_version.Get()); - } - my_last_write_version = action.version(); - } else if (action.type() == Action::Type::ABORT) { - for (uint64_t item_id = 0; item_id < act_seq.item_num(); ++item_id) { - const Optional& my_last_write_version = - trans_write_item_versions[action.trans_id()][item_id]; - if (my_last_write_version.HasValue()) { - release_version(item_id, my_last_write_version.Get()); - } - } - } else if (action.type() == Action::Type::COMMIT) { - } else { - throw "Unexpected action type:" + std::to_string(static_cast(action.type())); - } - } - - std::vector final_versions(act_seq.item_num()); - for (uint64_t item_id = 0; item_id < act_seq.item_num(); ++item_id) { - final_versions[item_id] = latest_version(item_id); - } - // act_seq.SetItemFinalVersions(std::move(final_versions)); -} -template <> -void ActionSequence::FillReadVersions( - ActionSequence& act_seq) { - std::vector>> trans_write_item_versions( - act_seq.trans_num(), std::vector>(act_seq.item_num())); - std::vector latest_versions(act_seq.item_num(), 0); - for (Action& action : act_seq.actions()) { - if (action.type() == Action::Type::READ) { - Optional read_version = - trans_write_item_versions[action.trans_id()][action.item_id()]; - if (read_version.HasValue()) - action.UpdateVersion(read_version.Get()); - else - action.UpdateVersion(latest_versions[action.item_id()]); - } else if (action.type() == Action::Type::WRITE) { - trans_write_item_versions[action.trans_id()][action.item_id()] = action.version(); - } else if (action.type() == Action::Type::ABORT) { - } else if (action.type() == Action::Type::COMMIT) { - for (uint64_t item_id = 0; item_id < act_seq.item_num(); item_id++) { - Optional write_version = trans_write_item_versions[action.trans_id()][item_id]; - if (write_version.HasValue()) { - latest_versions[item_id] = write_version.Get(); - } - } - } else { - throw "Unexpected action type:" + std::to_string(static_cast(action.type())); - } - } -} -template <> -void ActionSequence::FillReadVersions( - ActionSequence& act_seq) { - std::vector>> trans_read_item_versions( - act_seq.trans_num(), std::vector>(act_seq.item_num())); - std::vector>> trans_write_item_versions( - act_seq.trans_num(), std::vector>(act_seq.item_num())); - std::vector latest_versions(act_seq.item_num(), 0); - for (Action& action : act_seq.actions()) { - if (action.type() == Action::Type::READ) { - const Optional& write_version = - trans_write_item_versions[action.trans_id()][action.item_id()]; - if (write_version.HasValue()) { // item has written - action.UpdateVersion(write_version.Get()); - } else { - Optional& read_version = - trans_read_item_versions[action.trans_id()][action.item_id()]; - if (!read_version.HasValue()) { // item has read - read_version = latest_versions[action.item_id()]; - } - action.UpdateVersion(read_version.Get()); - } - } else if (action.type() == Action::Type::WRITE) { - trans_write_item_versions[action.trans_id()][action.item_id()] = action.version(); - } else if (action.type() == Action::Type::ABORT) { - } else if (action.type() == Action::Type::COMMIT) { - for (uint64_t item_id = 0; item_id < act_seq.item_num(); item_id++) { - Optional write_version = trans_write_item_versions[action.trans_id()][item_id]; - if (write_version.HasValue()) { - latest_versions[item_id] = write_version.Get(); - } - } - } else { - throw "Unexpected action type:" + std::to_string(static_cast(action.type())); - } - } -} -template <> -void ActionSequence::FillReadVersions(ActionSequence& act_seq) { - std::vector latest_versions(act_seq.item_num(), 0); - std::vector> trans_item_versions_backup(act_seq.trans_num()); - std::vector> trans_item_versions_snapshot(act_seq.trans_num()); - for (Action& action : act_seq.actions()) { - if (trans_item_versions_snapshot[action.trans_id()].empty()) { - trans_item_versions_snapshot[action.trans_id()] = latest_versions; - trans_item_versions_backup[action.trans_id()] = latest_versions; - } - if (action.type() == Action::Type::READ) { - uint64_t read_version = trans_item_versions_snapshot[action.trans_id()][action.item_id()]; - action.UpdateVersion(read_version); - } else if (action.type() == Action::Type::WRITE) { - trans_item_versions_snapshot[action.trans_id()][action.item_id()] = action.version(); - } else if (action.type() == Action::Type::ABORT) { - } else if (action.type() == Action::Type::COMMIT) { - for (uint64_t item_id = 0; item_id < act_seq.item_num(); ++item_id) { - if (trans_item_versions_snapshot[action.trans_id()][item_id] != - trans_item_versions_backup[action.trans_id()][item_id]) { - latest_versions[item_id] = trans_item_versions_snapshot[action.trans_id()][item_id]; - } - } - } else { - throw "Unexpected action type:" + std::to_string(static_cast(action.type())); - } - } -} -*/ diff --git a/contrib/deneva/benchmarks/generic.h b/contrib/deneva/benchmarks/generic.h deleted file mode 100644 index 36c206d6..00000000 --- a/contrib/deneva/benchmarks/generic.h +++ /dev/null @@ -1,179 +0,0 @@ -#pragma once -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -enum Anomally -{ - //I, II - DIRTY_WRITE, - EDGE_CROESS, - LOST_UPDATE, - READ_SKEW, - READ_WRITE_SKEW, - THREE_TRANS_WRITE_SKEW, - MULTI_TRANS_ANOMALY, - //WSI - WRITE_SKEW, - WW_CONFLICT, - //SSI - RW_CONFLICT, - //BOCC FOCC UNKNOWN - UNKNOWN -}; - -extern std::unordered_map Anomally2Name; - - -std::ostream& operator<<(std::ostream& os, const Anomally e) ; - - -enum class SerializeReadPolicy; - -template -std::unique_ptr MakeUnique(Ts&&... args) ; - -template -class Optional final { - public: - Optional(); - Optional(const T& value); - Optional(T&& value); - Optional(const Optional& o); - Optional(Optional&& o); - ~Optional(); - Optional& operator=(const Optional& o); - Optional& operator=(Optional&&); - - bool HasValue() const; - void Set(T&& value) ; - void Set(const T& value) ; - T& Get(); - const T& Get() const; - - private: - bool has_value_; - std::unique_ptr value_; -}; - -class Action { - public: - enum class Type : char { - UNKNOWN = '?', - READ = 'R', - WRITE = 'W', - COMMIT = 'C', - ABORT = 'A', - SCAN_ODD = 'S' - }; - Action() ; - Action(const Type dtl_type, const uint64_t trans_id); - Action(const Type dml_type, const uint64_t trans_id, const uint64_t item_id, - const Optional version = {}); - Action& operator=(const Action& action); - virtual ~Action(); - - Type type() const; - uint64_t trans_id() const; - uint64_t item_id() const; - uint64_t version() const; - void SetTransId(uint64_t trans_id); - void SetItemId(const uint64_t item_id); - void UpdateVersion(const uint64_t version); - - friend std::ostream& operator<<(std::ostream& os, const Action& action); - - friend std::istream& operator>>(std::istream& is, Type& type); - - friend std::istream& operator>>(std::istream& is, Action& action); - - bool IsPointDML() const; - bool IsDTL() const; - static bool IsPointDML(const Type& type); - static bool IsDTL(const Type& type); - // surport std::map - bool operator<(const Action& r) const; - private: - Type type_; - uint64_t trans_id_; - Optional item_id_; - Optional version_; // version_ identify a unique version, but it CANNOT be compared to - // judge new or old -}; - -class ActionSequence { - public: - ActionSequence() ; - ActionSequence(const uint64_t trans_num, const uint64_t item_num, - const std::vector& actions); - ActionSequence(const uint64_t trans_num, const uint64_t item_num, std::vector&& actions); - ActionSequence(const uint64_t trans_num, const uint64_t item_num, - const std::vector& actions, const uint64_t abort_trans_num); - ActionSequence(ActionSequence&& act_seq); - ActionSequence(const ActionSequence& act_seq); - ~ActionSequence(); - - ActionSequence& operator=(ActionSequence&& act_seq); - ActionSequence operator+(const ActionSequence& act_seq) const; - std::string to_string() const; - std::vector& actions(); - const std::vector& actions() const; - uint64_t trans_num() const; - uint64_t abort_trans_num() const; - uint64_t item_num() const; - size_t size() const; - - friend std::ostream& operator<<(std::ostream& os, const ActionSequence& act_seq); - - friend std::istream& operator>>(std::istream& is, ActionSequence& act_seq); - - Action& operator[](const size_t index); - void UpdateWriteVersions(); - // add - // update write version, clean up read version - void FillWriteVersions(); - /* - - template - inline void FillReadVersions(ActionSequence& act_seq); -*/ - private: - uint64_t trans_num_; - uint64_t abort_trans_num_; - uint64_t item_num_; // 1 - std::vector actions_; -}; - -struct Options { - uint64_t trans_num; - uint64_t item_num; - - uint64_t subtask_num; - uint64_t subtask_id; - uint64_t max_dml; - - bool with_abort; - bool tail_dtl; - bool save_history_with_empty_opt; - bool dynamic_seq_len; -}; - diff --git a/contrib/deneva/benchmarks/pps.h b/contrib/deneva/benchmarks/pps.h deleted file mode 100644 index c048aba3..00000000 --- a/contrib/deneva/benchmarks/pps.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _PPS_H_ -#define _PPS_H_ - -#include "wl.h" -#include "txn.h" -#include "query.h" -#include "row.h" - -class PPSQuery; -class PPSQueryMessage; -struct Item_no; - -class table_t; -class INDEX; -class PPSQuery; -enum PPSRemTxnType { - PPS_GETPART_S=0, - PPS_GETPART0, - PPS_GETPART1, - PPS_GETPRODUCT_S, - PPS_GETPRODUCT0, - PPS_GETPRODUCT1, - PPS_GETSUPPLIER_S, - PPS_GETSUPPLIER0, - PPS_GETSUPPLIER1, - PPS_GETPARTBYPRODUCT_S, - PPS_GETPARTBYPRODUCT0, - PPS_GETPARTBYPRODUCT1, - PPS_GETPARTBYPRODUCT2, - PPS_GETPARTBYPRODUCT3, - PPS_GETPARTBYPRODUCT4, - PPS_GETPARTBYPRODUCT5, - PPS_GETPARTBYSUPPLIER_S, - PPS_GETPARTBYSUPPLIER0, - PPS_GETPARTBYSUPPLIER1, - PPS_GETPARTBYSUPPLIER2, - PPS_GETPARTBYSUPPLIER3, - PPS_GETPARTBYSUPPLIER4, - PPS_GETPARTBYSUPPLIER5, - PPS_ORDERPRODUCT_S, - PPS_ORDERPRODUCT0, - PPS_ORDERPRODUCT1, - PPS_ORDERPRODUCT2, - PPS_ORDERPRODUCT3, - PPS_ORDERPRODUCT4, - PPS_ORDERPRODUCT5, - PPS_UPDATEPRODUCTPART_S, - PPS_UPDATEPRODUCTPART0, - PPS_UPDATEPRODUCTPART1, - PPS_UPDATEPART_S, - PPS_UPDATEPART0, - PPS_UPDATEPART1, - PPS_FIN, - PPS_RDONE -}; - -class PPSWorkload : public Workload { -public: - RC init(); - RC init_table(); - RC init_schema(const char * schema_file); - RC get_txn_man(TxnManager *& txn_manager); - table_t * t_suppliers; - table_t * t_products; - table_t * t_parts; - table_t * t_supplies; - table_t * t_uses; - - INDEX * i_parts; - INDEX * i_products; - INDEX * i_suppliers; - INDEX * i_supplies; - INDEX * i_uses; - -private: - void init_tab_suppliers(); - void init_tab_products(); - void init_tab_parts(); - void init_tab_supplies(); - void init_tab_uses(); - - static void * threadInitSuppliers(void * This); - static void * threadInitProducts(void * This); - static void * threadInitParts(void * This); - static void * threadInitSupplies(void * This); - static void * threadInitUses(void * This); -}; - -struct pps_thr_args{ - PPSWorkload * wl; - UInt32 id; - UInt32 tot; -}; - -class PPSTxnManager : public TxnManager { -public: - void init(uint64_t thd_id, Workload * h_wl); - void reset(); - RC acquire_locks(); - RC run_txn(); - RC run_txn_post_wait(); - RC run_calvin_txn(); - RC run_pps_phase2(); - RC run_pps_phase5(); - PPSRemTxnType state; - void copy_remote_items(PPSQueryMessage * msg); -private: - PPSWorkload * _wl; - volatile RC _rc; - row_t * row; - - uint64_t parts_processed_count; - - void next_pps_state(); - RC run_txn_state(); - bool is_done(); - bool is_local_item(uint64_t idx); - RC send_remote_request(); - -inline void getThreeFields(row_t *& r_local); -inline void getAllFields(row_t *& r_local); -inline RC run_getpart_0(uint64_t part_key, row_t *& r_local); -inline RC run_getpart_1(row_t *& r_local); -inline RC run_getproduct_0(uint64_t product_key, row_t *& r_local); -inline RC run_getproduct_1(row_t *& r_local); -inline RC run_getsupplier_0(uint64_t supplier_key, row_t *& r_local); -inline RC run_getsupplier_1(row_t *& r_local); -inline RC run_getpartsbyproduct_0(uint64_t product_key, row_t *& r_local); -inline RC run_getpartsbyproduct_1(row_t *& r_local); -inline RC run_getpartsbyproduct_2(uint64_t product_key, row_t *& r_local); -inline RC run_getpartsbyproduct_3(uint64_t &part_key, row_t *& r_local); -inline RC run_getpartsbyproduct_4(uint64_t part_key, row_t *& r_local); -inline RC run_getpartsbyproduct_5(row_t *& r_local); -inline RC run_getpartsbysupplier_0(uint64_t supplier_key, row_t *& r_local); -inline RC run_getpartsbysupplier_1(row_t *& r_local); -inline RC run_getpartsbysupplier_2(uint64_t supplier_key, row_t *& r_local); -inline RC run_getpartsbysupplier_3(uint64_t &part_key, row_t *& r_local); -inline RC run_getpartsbysupplier_4(uint64_t part_key, row_t *& r_local); -inline RC run_getpartsbysupplier_5(row_t *& r_local); -inline RC run_orderproduct_0(uint64_t product_key, row_t *& r_local); -inline RC run_orderproduct_1(row_t *& r_local); -inline RC run_orderproduct_2(uint64_t product_key, row_t *& r_local); -inline RC run_orderproduct_3(uint64_t &part_key, row_t *& r_local); -inline RC run_orderproduct_4(uint64_t part_key, row_t *& r_local); -inline RC run_orderproduct_5(row_t *& r_local); -inline RC run_updateproductpart_0(uint64_t product_key, row_t *& r_local); -inline RC run_updateproductpart_1(uint64_t part_key, row_t *& r_local); -inline RC run_updatepart_0(uint64_t part_key, row_t *& r_local); -inline RC run_updatepart_1(row_t *& r_local); -}; - -#endif diff --git a/contrib/deneva/benchmarks/pps_helper.cpp b/contrib/deneva/benchmarks/pps_helper.cpp deleted file mode 100644 index 168d299a..00000000 --- a/contrib/deneva/benchmarks/pps_helper.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "pps_helper.h" - -uint64_t parts_to_partition(uint64_t part_key) { return (part_key) % g_part_cnt; } - -uint64_t products_to_partition(uint64_t product_key) { return (product_key) % g_part_cnt; } - -uint64_t suppliers_to_partition(uint64_t supplier_key) { return (supplier_key) % g_part_cnt; } - -/* -uint64_t URand(uint64_t x, uint64_t y) { - return x + RAND(y - x + 1); -} -uint64_t RAND(uint64_t max) { - return rand() % max; -} -*/ diff --git a/contrib/deneva/benchmarks/pps_helper.h b/contrib/deneva/benchmarks/pps_helper.h deleted file mode 100644 index 374f7155..00000000 --- a/contrib/deneva/benchmarks/pps_helper.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _PPS_HELPER_H_ -#define _PPS_HELPER_H_ - -#include "global.h" -#include "helper.h" -#include "tpcc_helper.h" - -enum { - FIELD1=1, - FIELD2, - FIELD3, - FIELD4, - FIELD5, - FIELD6, - FIELD7, - FIELD8, - FIELD9, - FIELD10, - PART_AMOUNT, -}; - - -uint64_t parts_to_partition(uint64_t part_key); -uint64_t products_to_partition(uint64_t product_key); -uint64_t suppliers_to_partition(uint64_t supplier_key); - -/* -// return random data from [0, max-1] -uint64_t RAND(uint64_t max); -// random number from [x, y] -uint64_t URand(uint64_t x, uint64_t y); -*/ - -#endif diff --git a/contrib/deneva/benchmarks/pps_query.cpp b/contrib/deneva/benchmarks/pps_query.cpp deleted file mode 100644 index c6580ce0..00000000 --- a/contrib/deneva/benchmarks/pps_query.cpp +++ /dev/null @@ -1,501 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "query.h" -#include "pps_query.h" -#include "pps.h" -#include "pps_helper.h" -#include "mem_alloc.h" -#include "wl.h" -#include "table.h" -#include "message.h" - -BaseQuery * PPSQueryGenerator::create_query(Workload * h_wl,uint64_t home_partition_id) { - double x = (double)(rand() % 100) / 100.0; - if (x < g_perc_getparts) { - return gen_requests_parts(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers) { - return gen_requests_suppliers(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts) { - return gen_requests_products(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts + g_perc_getpartbysupplier) { - return gen_requests_partsbysupplier(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts + g_perc_getpartbysupplier + - g_perc_getpartbyproduct) { - return gen_requests_partsbyproduct(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts + g_perc_getpartbysupplier + - g_perc_getpartbyproduct + g_perc_orderproduct) { - return gen_requests_orderproduct(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts + g_perc_getpartbysupplier + - g_perc_getpartbyproduct + g_perc_orderproduct + g_perc_updateproductpart) { - return gen_requests_updateproductpart(home_partition_id); - } - if (x < g_perc_getparts + g_perc_getsuppliers + g_perc_getproducts + g_perc_getpartbysupplier + - g_perc_getpartbyproduct + g_perc_orderproduct + g_perc_updateproductpart + - g_perc_updatepart) { - return gen_requests_updatepart(home_partition_id); - } - assert(false); - return NULL; - -} - -void PPSQuery::init(uint64_t thd_id, Workload * h_wl) { - BaseQuery::init(); - part_keys.init(MAX_PPS_PART_PER_PRODUCT); -} - -void PPSQuery::init() { - BaseQuery::init(); - part_keys.init(MAX_PPS_PART_PER_PRODUCT); -} - -void PPSQuery::print() { - std::cout << "part_key: " << part_key << "supplier_key: " << supplier_key - << "product_key: " << product_key << std::endl; -} - -std::set PPSQuery::participants(Message * msg, Workload * wl) { - std::set participant_set; - PPSClientQueryMessage* pps_msg = ((PPSClientQueryMessage*)msg); - uint64_t id; - - switch(pps_msg->txn_type) { - case PPS_GETPART: - id = GET_NODE_ID(parts_to_partition(pps_msg->part_key)); - participant_set.insert(id); - break; - case PPS_GETPRODUCT: - id = GET_NODE_ID(products_to_partition(pps_msg->product_key)); - participant_set.insert(id); - break; - case PPS_GETSUPPLIER: - id = GET_NODE_ID(suppliers_to_partition(pps_msg->supplier_key)); - participant_set.insert(id); - break; - case PPS_GETPARTBYSUPPLIER: - id = GET_NODE_ID(suppliers_to_partition(pps_msg->supplier_key)); - participant_set.insert(id); - for (uint64_t key = 0; key < pps_msg->part_keys.size(); key++) { - uint64_t tmp = pps_msg->part_keys[key]; - id = GET_NODE_ID(parts_to_partition(tmp)); - participant_set.insert(id); - } - break; - case PPS_GETPARTBYPRODUCT: - id = GET_NODE_ID(products_to_partition(pps_msg->product_key)); - participant_set.insert(id); - for (uint64_t key = 0; key < pps_msg->part_keys.size(); key++) { - uint64_t tmp = pps_msg->part_keys[key]; - id = GET_NODE_ID(parts_to_partition(tmp)); - participant_set.insert(id); - } - break; - case PPS_ORDERPRODUCT: - id = GET_NODE_ID(products_to_partition(pps_msg->product_key)); - participant_set.insert(id); - for (uint64_t key = 0; key < pps_msg->part_keys.size(); key++) { - uint64_t tmp = pps_msg->part_keys[key]; - id = GET_NODE_ID(parts_to_partition(tmp)); - participant_set.insert(id); - } - break; - case PPS_UPDATEPRODUCTPART: - id = GET_NODE_ID(products_to_partition(pps_msg->product_key)); - participant_set.insert(id); - break; - case PPS_UPDATEPART: - id = GET_NODE_ID(parts_to_partition(pps_msg->part_key)); - participant_set.insert(id); - break; - default: - assert(false); - } - - return participant_set; -} - -// Depreciated -uint64_t PPSQuery::participants(bool *& pps,Workload * wl) { - int n = 0; - for (uint64_t i = 0; i < g_node_cnt; i++) pps[i] = false; - uint64_t id; - - switch(txn_type) { - case PPS_GETPART: - id = GET_NODE_ID(parts_to_partition(part_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case PPS_GETPRODUCT: - id = GET_NODE_ID(products_to_partition(product_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case PPS_GETSUPPLIER: - id = GET_NODE_ID(suppliers_to_partition(supplier_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case PPS_GETPARTBYSUPPLIER: - id = GET_NODE_ID(suppliers_to_partition(supplier_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - id = GET_NODE_ID(parts_to_partition(part_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case PPS_GETPARTBYPRODUCT: - id = GET_NODE_ID(products_to_partition(product_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - id = GET_NODE_ID(parts_to_partition(part_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case PPS_ORDERPRODUCT: - id = GET_NODE_ID(products_to_partition(product_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - id = GET_NODE_ID(parts_to_partition(part_key)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - - default: - assert(false); - } - - return n; -} - -bool PPSQuery::readonly() { - if (txn_type == PPS_ORDERPRODUCT || txn_type == PPS_UPDATEPRODUCTPART || - txn_type == PPS_UPDATEPART) { - return false; - } - return true; -} - -BaseQuery * PPSQueryGenerator::gen_requests_parts(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_GETPART; - uint64_t part_key; - // select a part - if (FIRST_PART_LOCAL) { - while (parts_to_partition(part_key = URand(1, g_max_part_key)) != home_partition) { - } - } else - part_key = URand(1, g_max_part_key); - - query->part_key = part_key; - partitions_accessed.insert(parts_to_partition(part_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * PPSQueryGenerator::gen_requests_suppliers(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_GETSUPPLIER; - uint64_t supplier_key; - // select a part - if (FIRST_PART_LOCAL) { - while (suppliers_to_partition(supplier_key = URand(1, g_max_supplier_key)) != home_partition) { - } - } else - supplier_key = URand(1, g_max_supplier_key); - - query->supplier_key = supplier_key; - partitions_accessed.insert(suppliers_to_partition(supplier_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - - -BaseQuery * PPSQueryGenerator::gen_requests_products(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_GETPRODUCT; - uint64_t product_key; - // select a part - if (FIRST_PART_LOCAL) { - while (products_to_partition(product_key = URand(1, g_max_product_key)) != home_partition) { - } - } else - product_key = URand(1, g_max_product_key); - - query->product_key = product_key; - partitions_accessed.insert(products_to_partition(product_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * PPSQueryGenerator::gen_requests_partsbysupplier(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_GETPARTBYSUPPLIER; - uint64_t supplier_key; - // select a part - if (FIRST_PART_LOCAL) { - while (suppliers_to_partition(supplier_key = URand(1, g_max_supplier_key)) != home_partition) { - } - } else - supplier_key = URand(1, g_max_supplier_key); - - query->supplier_key = supplier_key; - partitions_accessed.insert(suppliers_to_partition(supplier_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * PPSQueryGenerator::gen_requests_partsbyproduct(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_GETPARTBYPRODUCT; - uint64_t product_key; - // select a part - if (FIRST_PART_LOCAL) { - while (products_to_partition(product_key = URand(1, g_max_product_key)) != home_partition) { - } - } else - product_key = URand(1, g_max_product_key); - - query->product_key = product_key; - partitions_accessed.insert(products_to_partition(product_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * PPSQueryGenerator::gen_requests_orderproduct(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_ORDERPRODUCT; - uint64_t product_key; - // select a part - if (FIRST_PART_LOCAL) { - while (products_to_partition(product_key = URand(1, g_max_product_key)) != home_partition) { - } - } else - product_key = URand(1, g_max_product_key); - - query->product_key = product_key; - partitions_accessed.insert(products_to_partition(product_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * PPSQueryGenerator::gen_requests_updateproductpart(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_UPDATEPRODUCTPART; - uint64_t product_key; - // select a part - if (FIRST_PART_LOCAL) { - while (products_to_partition(product_key = URand(1, g_max_product_key)) != home_partition) { - } - } else - product_key = URand(1, g_max_product_key); - - query->product_key = product_key; - partitions_accessed.insert(products_to_partition(product_key)); - query->part_key = URand(1, g_max_part_key); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - - -BaseQuery * PPSQueryGenerator::gen_requests_updatepart(uint64_t home_partition) { - PPSQuery * query = new PPSQuery; - set partitions_accessed; - - query->txn_type = PPS_UPDATEPART; - uint64_t part_key; - // select a part - if (FIRST_PART_LOCAL) { - while (parts_to_partition(part_key = URand(1, g_max_part_key)) != home_partition) { - } - } else - part_key = URand(1, g_max_part_key); - - query->part_key = part_key; - partitions_accessed.insert(parts_to_partition(part_key)); - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - - -uint64_t PPSQuery::get_participants(Workload * wl) { - uint64_t participant_cnt = 0; - uint64_t active_cnt = 0; - assert(participant_nodes.size()==0); - assert(active_nodes.size()==0); - for(uint64_t i = 0; i < g_node_cnt; i++) { - participant_nodes.add(0); - active_nodes.add(0); - } - assert(participant_nodes.size()==g_node_cnt); - assert(active_nodes.size()==g_node_cnt); - uint64_t id; - - if (txn_type == PPS_GETPART) { - id = GET_NODE_ID(parts_to_partition(part_key)); - participant_nodes.set(id,1); - participant_cnt++; - } - if (txn_type == PPS_GETPRODUCT) { - id = GET_NODE_ID(products_to_partition(product_key)); - participant_nodes.set(id,1); - participant_cnt++; - } - if (txn_type == PPS_GETSUPPLIER) { - id = GET_NODE_ID(suppliers_to_partition(supplier_key)); - participant_nodes.set(id,1); - participant_cnt++; - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - id = GET_NODE_ID(products_to_partition(product_key)); - participant_nodes.set(id,1); - participant_cnt++; - for (uint64_t key = 0; key < part_keys.size(); key++) { - id = GET_NODE_ID(parts_to_partition(part_keys[key])); - if (participant_nodes[id] == 0) { - participant_nodes.set(id,1); - participant_cnt++; - } - } - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - id = GET_NODE_ID(suppliers_to_partition(supplier_key)); - participant_nodes.set(id,1); - participant_cnt++; - for (uint64_t key = 0; key < part_keys.size(); key++) { - id = GET_NODE_ID(parts_to_partition(part_keys[key])); - if (participant_nodes[id] == 0) { - participant_nodes.set(id,1); - participant_cnt++; - } - } - } - if (txn_type == PPS_ORDERPRODUCT) { - id = GET_NODE_ID(products_to_partition(product_key)); - participant_nodes.set(id,1); - participant_cnt++; - for (uint64_t key = 0; key < part_keys.size(); key++) { - id = GET_NODE_ID(parts_to_partition(part_keys[key])); - if (participant_nodes[id] == 0) { - participant_nodes.set(id,1); - participant_cnt++; - } - if (active_nodes[id] == 0) { - active_nodes.set(id,1); - active_cnt++; - } - } - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - id = GET_NODE_ID(products_to_partition(product_key)); - participant_nodes.set(id,1); - participant_cnt++; - active_nodes.set(id,1); - active_cnt++; - } - if (txn_type == PPS_UPDATEPART) { - id = GET_NODE_ID(parts_to_partition(part_key)); - participant_nodes.set(id,1); - participant_cnt++; - active_nodes.set(id,1); - active_cnt++; - } - - return participant_cnt; -} - -void PPSQuery::reset() { - BaseQuery::clear(); - part_keys.clear(); -} - -void PPSQuery::release() { - BaseQuery::release(); - part_keys.release(); - DEBUG_M("PPSQuery::release() free\n"); -} - diff --git a/contrib/deneva/benchmarks/pps_query.h b/contrib/deneva/benchmarks/pps_query.h deleted file mode 100644 index 878ff371..00000000 --- a/contrib/deneva/benchmarks/pps_query.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _PPSQUERY_H_ -#define _PPSQUERY_H_ - -#include "global.h" -#include "helper.h" -#include "query.h" - -class Workload; -class Message; -class PPSQueryMessage; -class PPSClientQueryMessage; - -class PPSQueryGenerator : public QueryGenerator { -public: - BaseQuery * create_query(Workload * h_wl, uint64_t home_partition_id); - -private: - BaseQuery * gen_requests_parts(uint64_t home_partition_id); - BaseQuery * gen_requests_suppliers(uint64_t home_partition_id); - BaseQuery * gen_requests_products(uint64_t home_partition_id); - BaseQuery * gen_requests_partsbysupplier(uint64_t home_partition_id); - BaseQuery * gen_requests_partsbyproduct(uint64_t home_partition_id); - BaseQuery * gen_requests_orderproduct(uint64_t home_partition_id); - BaseQuery * gen_requests_updateproductpart(uint64_t home_partition_id); - BaseQuery * gen_requests_updatepart(uint64_t home_partition_id); - myrand * mrand; -}; - -class PPSQuery : public BaseQuery { -public: - void init(uint64_t thd_id, Workload * h_wl); - void init(); - void reset(); - void release(); - void print(); - static std::set participants(Message * msg, Workload * wl); - uint64_t participants(bool *& pps,Workload * wl); - uint64_t get_participants(Workload * wl); - bool readonly(); - virtual bool isReconQuery() { - bool result = (txn_type == PPS_GETPARTBYSUPPLIER) || (txn_type == PPS_GETPARTBYPRODUCT) || - (txn_type == PPS_ORDERPRODUCT); - return result; - } - - PPSTxnType txn_type; - // txn input - - uint64_t rqry_req_cnt; - uint64_t part_key; - uint64_t supplier_key; - uint64_t product_key; - - // part keys from secondary lookup - Array part_keys; - - // track number of parts we've read - // in a getpartsbyX query - -}; - -#endif diff --git a/contrib/deneva/benchmarks/pps_txn.cpp b/contrib/deneva/benchmarks/pps_txn.cpp deleted file mode 100644 index f69cc294..00000000 --- a/contrib/deneva/benchmarks/pps_txn.cpp +++ /dev/null @@ -1,1246 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "pps.h" -#include "pps_query.h" -#include "pps_helper.h" -#include "query.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "row.h" -#include "index_hash.h" -#include "index_btree.h" -#include "transport.h" -#include "msg_queue.h" -#include "message.h" - -void PPSTxnManager::init(uint64_t thd_id, Workload * h_wl) { - TxnManager::init(thd_id, h_wl); - _wl = (PPSWorkload *) h_wl; - reset(); - TxnManager::reset(); -} - -void PPSTxnManager::reset() { - PPSQuery* pps_query = (PPSQuery*) query; - state = PPS_GETPART0; - - int txn_type = pps_query->txn_type; - - if (txn_type == PPS_GETPART) { - state = PPS_GETPART0; - } - if (txn_type == PPS_GETPRODUCT) { - state = PPS_GETPRODUCT0; - } - if (txn_type == PPS_GETSUPPLIER) { - state = PPS_GETSUPPLIER0; - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - state = PPS_GETPARTBYPRODUCT0; - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - state = PPS_GETPARTBYSUPPLIER0; - } - if (txn_type == PPS_ORDERPRODUCT) { - state = PPS_ORDERPRODUCT0; - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - state = PPS_UPDATEPRODUCTPART0; - } - if (txn_type == PPS_UPDATEPART) { - state = PPS_UPDATEPART0; - } - - parts_processed_count = 0; - pps_query->part_keys.clear(); - TxnManager::reset(); -} - -RC PPSTxnManager::run_txn_post_wait() { - get_row_post_wait(row); - next_pps_state(); - return RCOK; -} - - -RC PPSTxnManager::run_txn() { -#if MODE == SETUP_MODE - return RCOK; -#endif - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - -#if CC_ALG == CALVIN - rc = run_calvin_txn(); - return rc; -#endif - - if(IS_LOCAL(txn->txn_id) && - (state == PPS_GETPART0 || state == PPS_GETPRODUCT0 || state == PPS_GETSUPPLIER0 || - state == PPS_GETPARTBYSUPPLIER0 || state == PPS_GETPARTBYPRODUCT0 || - state == PPS_ORDERPRODUCT0 || state == PPS_UPDATEPRODUCTPART0 || state == PPS_UPDATEPART0)) { - DEBUG("Running txn %ld, type %d\n",txn->txn_id,((PPSQuery*)query)->txn_type); -#if DISTR_DEBUG - query->print(); -#endif - query->partitions_touched.add_unique(GET_PART_ID(0,g_node_id)); - } - - - while(rc == RCOK && !is_done()) { - rc = run_txn_state(); - } - - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - - if(IS_LOCAL(get_txn_id())) { - if(is_done() && rc == RCOK) - rc = start_commit(); - else if(rc == Abort) - rc = start_abort(); - } - - return rc; - -} - -bool PPSTxnManager::is_done() { - bool done = false; - done = state == PPS_FIN; - return done; -} - -RC PPSTxnManager::acquire_locks() { - uint64_t starttime = get_sys_clock(); - assert(CC_ALG == CALVIN); - locking_done = false; - RC rc = RCOK; - RC rc2 = RCOK; - INDEX * index; - itemid_t * item; - incr_lr(); - PPSQuery* pps_query = (PPSQuery*) query; - uint64_t part_key = pps_query->part_key; - uint64_t product_key = pps_query->product_key; - uint64_t supplier_key = pps_query->supplier_key; - uint64_t partition_id_part = parts_to_partition(pps_query->part_key); - uint64_t partition_id_product = products_to_partition(pps_query->product_key); - uint64_t partition_id_supplier = suppliers_to_partition(pps_query->supplier_key); - - switch(pps_query->txn_type) { - case PPS_GETPART: - if(GET_NODE_ID(partition_id_part) == g_node_id) { - index = _wl->i_parts; - item = index_read(index, part_key, partition_id_part); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - } - break; - case PPS_GETPRODUCT: - if(GET_NODE_ID(partition_id_product) == g_node_id) { - index = _wl->i_products; - item = index_read(index, product_key, partition_id_product); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - } - break; - case PPS_GETSUPPLIER: - if(GET_NODE_ID(partition_id_supplier) == g_node_id) { - index = _wl->i_suppliers; - item = index_read(index, supplier_key, partition_id_supplier); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - } - break; - case PPS_GETPARTBYSUPPLIER: - if(GET_NODE_ID(partition_id_supplier) == g_node_id) { - index = _wl->i_suppliers; - item = index_read(index, supplier_key, partition_id_supplier); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - - index = _wl->i_supplies; - int count = 0; - item = index_read(index, supplier_key, partition_id_product,count); - while (item != NULL) { - count++; - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - item = index_read(index, supplier_key, partition_id_product,count); - } - } - for (uint64_t i = 0; i < pps_query->part_keys.size(); i++) { - uint64_t key = pps_query->part_keys[i]; - uint64_t pid = parts_to_partition(key); - if(GET_NODE_ID(pid) == g_node_id) { - index = _wl->i_parts; - item = index_read(index, key, pid); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - } - } - - break; - case PPS_GETPARTBYPRODUCT: - if(GET_NODE_ID(partition_id_product) == g_node_id) { - index = _wl->i_products; - item = index_read(index, product_key, partition_id_product); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - - index = _wl->i_uses; - int count = 0; - item = index_read(index, product_key, partition_id_product,count); - while (item != NULL) { - count++; - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - item = index_read(index, product_key, partition_id_product,count); - } - } - for (uint64_t i = 0; i < pps_query->part_keys.size(); i++) { - uint64_t key = pps_query->part_keys[i]; - uint64_t pid = parts_to_partition(key); - if(GET_NODE_ID(pid) == g_node_id) { - index = _wl->i_parts; - item = index_read(index, key, pid); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - } - } - - break; - case PPS_ORDERPRODUCT: - if(GET_NODE_ID(partition_id_product) == g_node_id) { - index = _wl->i_products; - item = index_read(index, product_key, partition_id_product); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - - index = _wl->i_uses; - int count = 0; - item = index_read(index, product_key, partition_id_product,count); - while (item != NULL) { - count++; - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - item = index_read(index, product_key, partition_id_product,count); - } - } - for (uint64_t i = 0; i < pps_query->part_keys.size(); i++) { - uint64_t key = pps_query->part_keys[i]; - uint64_t pid = parts_to_partition(key); - if(GET_NODE_ID(pid) == g_node_id) { - index = _wl->i_parts; - item = index_read(index, key, pid); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,WR); - if (rc2 != RCOK) rc = rc2; - } - } - - break; - case PPS_UPDATEPRODUCTPART: - if(GET_NODE_ID(partition_id_product) == g_node_id) { - index = _wl->i_products; - item = index_read(index, product_key, partition_id_product); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,WR); - if (rc2 != RCOK) rc = rc2; - } - break; - case PPS_UPDATEPART: - if(GET_NODE_ID(partition_id_part) == g_node_id) { - index = _wl->i_parts; - item = index_read(index, part_key, partition_id_part); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,WR); - if (rc2 != RCOK) rc = rc2; - } - break; - - default: - assert(false); - } - if(decr_lr() == 0) { - if (ATOM_CAS(lock_ready, 0, 1)) rc = RCOK; - } - txn_stats.wait_starttime = get_sys_clock(); - locking_done = true; - INC_STATS(get_thd_id(),calvin_sched_time,get_sys_clock() - starttime); - return rc; -} - - -void PPSTxnManager::next_pps_state() { - switch(state) { - case PPS_GETPART_S: - state = PPS_GETPART0; - break; - case PPS_GETPART0: - state = PPS_GETPART1; - break; - case PPS_GETPART1: - state = PPS_FIN; - break; - case PPS_GETPRODUCT_S: - state = PPS_GETPRODUCT0; - break; - case PPS_GETPRODUCT0: - state = PPS_GETPRODUCT1; - break; - case PPS_GETPRODUCT1: - state = PPS_FIN; - break; - case PPS_GETSUPPLIER_S: - state = PPS_GETSUPPLIER0; - break; - case PPS_GETSUPPLIER0: - state = PPS_GETSUPPLIER1; - break; - case PPS_GETSUPPLIER1: - state = PPS_FIN; - break; - case PPS_GETPARTBYSUPPLIER_S: - state = PPS_GETPARTBYSUPPLIER0; - break; - case PPS_GETPARTBYSUPPLIER0: - state = PPS_GETPARTBYSUPPLIER1; - break; - case PPS_GETPARTBYSUPPLIER1: - state = PPS_GETPARTBYSUPPLIER2; - break; - case PPS_GETPARTBYSUPPLIER2: - if (row == NULL) { - state = PPS_FIN; - } else { - ++parts_processed_count; - state = PPS_GETPARTBYSUPPLIER3; - } - break; - case PPS_GETPARTBYSUPPLIER3: - state = PPS_GETPARTBYSUPPLIER4; - break; - case PPS_GETPARTBYSUPPLIER4: - state = PPS_GETPARTBYSUPPLIER5; - break; - case PPS_GETPARTBYSUPPLIER5: - state = PPS_GETPARTBYSUPPLIER2; - if (!IS_LOCAL(txn->txn_id)) { - state = PPS_FIN; - } - break; - case PPS_GETPARTBYPRODUCT_S: - state = PPS_GETPARTBYPRODUCT0; - break; - case PPS_GETPARTBYPRODUCT0: - state = PPS_GETPARTBYPRODUCT1; - break; - case PPS_GETPARTBYPRODUCT1: - state = PPS_GETPARTBYPRODUCT2; - break; - case PPS_GETPARTBYPRODUCT2: - if (row == NULL) { - state = PPS_FIN; - } else { - ++parts_processed_count; - state = PPS_GETPARTBYPRODUCT3; - } - break; - case PPS_GETPARTBYPRODUCT3: - state = PPS_GETPARTBYPRODUCT4; - break; - case PPS_GETPARTBYPRODUCT4: - state = PPS_GETPARTBYPRODUCT5; - break; - case PPS_GETPARTBYPRODUCT5: - state = PPS_GETPARTBYPRODUCT2; - if (!IS_LOCAL(txn->txn_id)) { - state = PPS_FIN; - } - //state = PPS_FIN; - break; - case PPS_ORDERPRODUCT_S: - state = PPS_ORDERPRODUCT0; - break; - case PPS_ORDERPRODUCT0: - state = PPS_ORDERPRODUCT1; - break; - case PPS_ORDERPRODUCT1: - state = PPS_ORDERPRODUCT2; - break; - case PPS_ORDERPRODUCT2: - if(!IS_LOCAL(txn->txn_id) && row != NULL) { - ++parts_processed_count; - state = PPS_ORDERPRODUCT3; - } else { - state = PPS_FIN; - } - break; - case PPS_ORDERPRODUCT3: - state = PPS_ORDERPRODUCT4; - break; - case PPS_ORDERPRODUCT4: - state = PPS_ORDERPRODUCT5; - break; - case PPS_ORDERPRODUCT5: - state = PPS_ORDERPRODUCT2; - if (!IS_LOCAL(txn->txn_id)) { - state = PPS_FIN; - } - break; - case PPS_UPDATEPRODUCTPART_S: - state = PPS_UPDATEPRODUCTPART0; - break; - case PPS_UPDATEPRODUCTPART0: - state = PPS_UPDATEPRODUCTPART1; - break; - case PPS_UPDATEPRODUCTPART1: - state = PPS_FIN; - break; - case PPS_UPDATEPART_S: - state = PPS_UPDATEPART0; - break; - case PPS_UPDATEPART0: - state = PPS_UPDATEPART1; - break; - case PPS_UPDATEPART1: - state = PPS_FIN; - break; - case PPS_FIN: - break; - default: - assert(false); - } - -} - -// remote request should always be on a parts key, given our workload -RC PPSTxnManager::send_remote_request() { - assert(IS_LOCAL(get_txn_id())); - PPSQuery* pps_query = (PPSQuery*) query; - PPSRemTxnType next_state = PPS_FIN; - uint64_t part_key = pps_query->part_key; - uint64_t dest_node_id = UINT64_MAX; - dest_node_id = GET_NODE_ID(parts_to_partition(part_key)); - PPSQueryMessage * msg = (PPSQueryMessage*)Message::create_message(this,RQRY); - msg->state = state; - query->partitions_touched.add_unique(GET_PART_ID(0,dest_node_id)); - msg_queue.enqueue(get_thd_id(),msg,dest_node_id); - state = next_state; - return WAIT_REM; -} - -RC PPSTxnManager::run_txn_state() { - PPSQuery* pps_query = (PPSQuery*) query; - RC rc = RCOK; - uint64_t part_key = pps_query->part_key; - uint64_t product_key = pps_query->product_key; - uint64_t supplier_key = pps_query->supplier_key; - bool part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - bool product_loc = GET_NODE_ID(products_to_partition(product_key)) == g_node_id; - bool supplier_loc = GET_NODE_ID(suppliers_to_partition(supplier_key)) == g_node_id; - switch(state) { - case PPS_GETPART0: - if (part_loc) - rc = run_getpart_0(part_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPART1: - rc = run_getpart_1(row); - break; - case PPS_GETPRODUCT0: - if (product_loc) - rc = run_getproduct_0(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPRODUCT1: - rc = run_getproduct_1(row); - break; - case PPS_GETSUPPLIER0: - if (supplier_loc) - rc = run_getsupplier_0(supplier_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETSUPPLIER1: - rc = run_getsupplier_1(row); - break; - case PPS_GETPARTBYSUPPLIER0: - if (supplier_loc) - rc = run_getpartsbysupplier_0(supplier_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYSUPPLIER1: - rc = run_getpartsbysupplier_1(row); - break; - case PPS_GETPARTBYSUPPLIER2: - if (supplier_loc) - rc = run_getpartsbysupplier_2(supplier_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYSUPPLIER3: - rc = run_getpartsbysupplier_3(pps_query->part_key, row); - break; - case PPS_GETPARTBYSUPPLIER4: - if (part_loc) - rc = run_getpartsbysupplier_4(pps_query->part_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYSUPPLIER5: - rc = run_getpartsbysupplier_5(row); - break; - case PPS_GETPARTBYPRODUCT0: - if (product_loc) - rc = run_getpartsbyproduct_0(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYPRODUCT1: - rc = run_getpartsbyproduct_1(row); - break; - case PPS_GETPARTBYPRODUCT2: - if (product_loc) - rc = run_getpartsbyproduct_2(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYPRODUCT3: - rc = run_getpartsbyproduct_3(pps_query->part_key,row); - break; - case PPS_GETPARTBYPRODUCT4: - if (part_loc) - rc = run_getpartsbyproduct_4(pps_query->part_key, row); - else - rc = send_remote_request(); - break; - case PPS_GETPARTBYPRODUCT5: - rc = run_getpartsbyproduct_5(row); - break; - case PPS_ORDERPRODUCT0: - if (product_loc) - rc = run_orderproduct_0(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_ORDERPRODUCT1: - rc = run_orderproduct_1(row); - break; - case PPS_ORDERPRODUCT2: - if (product_loc) - rc = run_orderproduct_2(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_ORDERPRODUCT3: - rc = run_orderproduct_3(pps_query->part_key,row); - break; - case PPS_ORDERPRODUCT4: - if (part_loc) - rc = run_orderproduct_4(pps_query->part_key, row); - else - rc = send_remote_request(); - break; - case PPS_ORDERPRODUCT5: - rc = run_orderproduct_5(row); - break; - case PPS_UPDATEPRODUCTPART0: - if (product_loc) - rc = run_updateproductpart_0(product_key, row); - else - rc = send_remote_request(); - break; - case PPS_UPDATEPRODUCTPART1: - rc = run_updateproductpart_1(part_key, row); - break; - case PPS_UPDATEPART0: - if (part_loc) - rc = run_updatepart_0(part_key, row); - else - rc = send_remote_request(); - break; - case PPS_UPDATEPART1: - rc = run_updatepart_1(row); - break; - case PPS_FIN: - state = PPS_FIN; - break; - default: - assert(false); - } - if (rc == RCOK) next_pps_state(); - return rc; -} - -inline RC PPSTxnManager::run_getpart_0(uint64_t part_key, row_t *& r_local) { - /* - SELECT * FROM PARTS WHERE PART_KEY = :part_key; - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_parts; - item = index_read(index, part_key, parts_to_partition(part_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpart_1(row_t *& r_local) { - /* - SELECT * FROM PARTS WHERE PART_KEY = :part_key; - */ - assert(r_local); - getAllFields(r_local); - return RCOK; -} - - -inline RC PPSTxnManager::run_getproduct_0(uint64_t product_key, row_t *& r_local) { - /* - SELECT * FROM PRODUCTS WHERE PRODUCT_KEY = :product_key; - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_products; - item = index_read(index, product_key, products_to_partition(product_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getproduct_1(row_t *& r_local) { - /* - SELECT * FROM PRODUCTS WHERE PRODUCT_KEY = :product_key; - */ - assert(r_local); - getAllFields(r_local); - return RCOK; -} - -inline void PPSTxnManager::getThreeFields(row_t *& r_local) { - //char * fields = new char[100]; - char * data __attribute__((unused)); - data = r_local->get_data(); - //r_local->get_value(FIELD1,fields); - //r_local->get_value(FIELD2,fields); - //r_local->get_value(FIELD3,fields); -} - -inline void PPSTxnManager::getAllFields(row_t *& r_local) { - char * data __attribute__((unused)); - data = r_local->get_data(); - /* - char * fields = new char[100]; - r_local->get_value(FIELD1,fields); - r_local->get_value(FIELD2,fields); - r_local->get_value(FIELD3,fields); - r_local->get_value(FIELD4,fields); - r_local->get_value(FIELD5,fields); - r_local->get_value(FIELD6,fields); - r_local->get_value(FIELD7,fields); - r_local->get_value(FIELD8,fields); - r_local->get_value(FIELD9,fields); - r_local->get_value(FIELD10,fields); - */ -} - -inline RC PPSTxnManager::run_getsupplier_0(uint64_t supplier_key, row_t *& r_local) { - /* - SELECT * FROM SUPPLIERS WHERE SUPPLIER_KEY = :supplier_key; - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_suppliers; - item = index_read(index, supplier_key, suppliers_to_partition(supplier_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; - -} - -inline RC PPSTxnManager::run_getsupplier_1(row_t *& r_local) { - /* - SELECT * FROM SUPPLIERS WHERE SUPPLIER_KEY = :supplier_key; - */ - assert(r_local); - getAllFields(r_local); - return RCOK; - -} - -inline RC PPSTxnManager::run_getpartsbyproduct_0(uint64_t product_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_products; - item = index_read(index, product_key, products_to_partition(product_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpartsbyproduct_1(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - assert(r_local); - getThreeFields(r_local); - return RCOK; -} - -inline RC PPSTxnManager::run_getpartsbyproduct_2(uint64_t product_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE PRODUCT_KEY = ? - */ - DEBUG("Getting product_key %ld count %ld\n",product_key,parts_processed_count); - RC rc; - itemid_t * item; - INDEX * index = _wl->i_uses; - item = index_read(index, product_key, products_to_partition(product_key),parts_processed_count); - if (item == NULL) { - r_local = NULL; - return RCOK; - } - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - DEBUG("From product_key %ld -- %lx\n",product_key,(uint64_t)r_local); - return rc; -} - -inline RC PPSTxnManager::run_getpartsbyproduct_3(uint64_t &part_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE PRODUCT_KEY = ? - */ - //r_local->get_value(PART_KEY,part_key); - //char * data __attribute__((unused)); - //data = r_local->get_data(); - // PART_KEY is located at column 1 - r_local->get_value(1,part_key); - DEBUG("Read part_key %ld\n",part_key); - return RCOK; -} - -inline RC PPSTxnManager::run_getpartsbyproduct_4(uint64_t part_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - DEBUG("Access part_key %ld\n",part_key); - RC rc; - itemid_t * item; - INDEX * index = _wl->i_parts; - item = index_read(index, part_key, parts_to_partition(part_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpartsbyproduct_5(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - DEBUG("run_getpartsbyproduct_5\n"); - assert(r_local); - getThreeFields(r_local); - return RCOK; -} - -inline RC PPSTxnManager::run_orderproduct_0(uint64_t product_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_products; - item = index_read(index, product_key, products_to_partition(product_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_orderproduct_1(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - assert(r_local); - getThreeFields(r_local); - return RCOK; -} - -inline RC PPSTxnManager::run_orderproduct_2(uint64_t product_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE PRODUCT_KEY = ? - */ - DEBUG("Getting product_key %ld count %ld\n",product_key,parts_processed_count); - RC rc; - itemid_t * item; - INDEX * index = _wl->i_uses; - item = index_read(index, product_key, products_to_partition(product_key),parts_processed_count); - if (item == NULL) { - r_local = NULL; - return RCOK; - } - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - DEBUG("From product_key %ld -- %lx\n",product_key,(uint64_t)r_local); - return rc; -} - -inline RC PPSTxnManager::run_orderproduct_3(uint64_t &part_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE PRODUCT_KEY = ? - */ - //r_local->get_value(PART_KEY,part_key); - //char * data __attribute__((unused)); - //data = r_local->get_data(); - // PART_KEY is located at column 1 - r_local->get_value(1,part_key); - DEBUG("Read part_key %ld\n",part_key); - return RCOK; -} - -inline RC PPSTxnManager::run_orderproduct_4(uint64_t part_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - DEBUG("Access part_key %ld\n",part_key); - RC rc; - itemid_t * item; - INDEX * index = _wl->i_parts; - item = index_read(index, part_key, parts_to_partition(part_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, WR, r_local); - return rc; -} -inline RC PPSTxnManager::run_orderproduct_5(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - DEBUG("run_orderproduct_5\n"); - assert(r_local); - // update - // If part_amount is 0, should abort - uint64_t part_amount; - r_local->get_value(PART_AMOUNT,part_amount); - r_local->set_value(PART_AMOUNT,part_amount-1); - return RCOK; -} - - -inline RC PPSTxnManager::run_getpartsbysupplier_0(uint64_t supplier_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM suppliers WHERE supplier_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_suppliers; - item = index_read(index, supplier_key, suppliers_to_partition(supplier_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpartsbysupplier_1(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM suppliers WHERE supplier_KEY = ? - */ - assert(r_local); - getThreeFields(r_local); - return RCOK; -} - -inline RC PPSTxnManager::run_getpartsbysupplier_2(uint64_t supplier_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE supplier_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_supplies; - item = - index_read(index, supplier_key, suppliers_to_partition(supplier_key), parts_processed_count); - if (item == NULL) { - r_local = NULL; - return RCOK; - } - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpartsbysupplier_3(uint64_t &part_key, row_t *& r_local) { - /* - SELECT PART_KEY FROM USES WHERE supplier_KEY = ? - */ - r_local->get_value(1,part_key); - DEBUG("Read part_key %ld\n",part_key); - return RCOK; -} -inline RC PPSTxnManager::run_getpartsbysupplier_4(uint64_t part_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_parts; - item = index_read(index, part_key, parts_to_partition(part_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, RD, r_local); - return rc; -} -inline RC PPSTxnManager::run_getpartsbysupplier_5(row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PARTS WHERE PART_KEY = ? - */ - assert(r_local); - getThreeFields(r_local); - return RCOK; -} - -inline RC PPSTxnManager::run_updateproductpart_0(uint64_t product_key, row_t *& r_local) { - /* - SELECT FIELD1, FIELD2, FIELD3 FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_uses; - // XXX this will always return the first part for this product - item = index_read(index, product_key, products_to_partition(product_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, WR, r_local); - return rc; -} -inline RC PPSTxnManager::run_updateproductpart_1(uint64_t part_key, row_t *& r_local) { - /* - UPDATE PART_KEY FROM PRODUCTS WHERE PRODUCT_KEY = ? - */ - assert(r_local); - r_local->set_value(1,part_key); - return RCOK; -} - -inline RC PPSTxnManager::run_updatepart_0(uint64_t part_key, row_t *& r_local) { - /* - SELECT * FROM PARTS WHERE PART_KEY = :part_key; - */ - RC rc; - itemid_t * item; - INDEX * index = _wl->i_parts; - item = index_read(index, part_key, parts_to_partition(part_key)); - assert(item != NULL); - row_t* r_loc = (row_t *) item->location; - rc = get_row(r_loc, WR, r_local); - return rc; -} -inline RC PPSTxnManager::run_updatepart_1(row_t *& r_local) { - /* - SELECT * FROM PARTS WHERE PART_KEY = :part_key; - */ - assert(r_local); - uint64_t amount; - r_local->get_value(1,amount); - r_local->set_value(1,amount+100); - return RCOK; -} - -RC PPSTxnManager::run_calvin_txn() { - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - PPSQuery* pps_query = (PPSQuery*) query; - DEBUG("(%ld,%ld) Run calvin txn %d (recon: %d)\n", txn->txn_id, txn->batch_id, - pps_query->txn_type, isRecon()); - while(!calvin_exec_phase_done() && rc == RCOK) { - DEBUG("(%ld,%ld) phase %d\n",txn->txn_id,txn->batch_id,this->phase); - switch(this->phase) { - case CALVIN_RW_ANALYSIS: - // Phase 1: Read/write set analysis - calvin_expected_rsp_cnt = pps_query->get_participants(_wl); - if(query->participant_nodes[g_node_id] == 1) { - calvin_expected_rsp_cnt--; - } - - DEBUG("(%ld,%ld) expects %d responses; %ld participants, %ld active\n", txn->txn_id, - txn->batch_id, calvin_expected_rsp_cnt, query->participant_nodes.size(), - query->active_nodes.size()); - - this->phase = CALVIN_LOC_RD; - break; - case CALVIN_LOC_RD: - // Phase 2: Perform local reads - DEBUG("(%ld,%ld) local reads\n",txn->txn_id,txn->batch_id); - rc = run_pps_phase2(); - //release_read_locks(pps_query); - if (isRecon()) { - this->phase = CALVIN_DONE; - } else { - this->phase = CALVIN_SERVE_RD; - } - - break; - case CALVIN_SERVE_RD: - // Phase 3: Serve remote reads - if(query->participant_nodes[g_node_id] == 1) { - rc = send_remote_reads(); - } - if(query->active_nodes[g_node_id] == 1) { - this->phase = CALVIN_COLLECT_RD; - if(calvin_collect_phase_done()) { - rc = RCOK; - } else { - assert(calvin_expected_rsp_cnt > 0); - DEBUG("(%ld,%ld) wait in collect phase; %d / %d rfwds received\n", txn->txn_id, - txn->batch_id, rsp_cnt, calvin_expected_rsp_cnt); - rc = WAIT; - } - } else { // Done - rc = RCOK; - this->phase = CALVIN_DONE; - } - break; - case CALVIN_COLLECT_RD: - // Phase 4: Collect remote reads - this->phase = CALVIN_EXEC_WR; - break; - case CALVIN_EXEC_WR: - // Phase 5: Execute transaction / perform local writes - DEBUG("(%ld,%ld) execute writes\n",txn->txn_id,txn->batch_id); - if (txn->rc == RCOK) { - rc = run_pps_phase5(); - } - this->phase = CALVIN_DONE; - break; - default: - assert(false); - } - } - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - txn_stats.wait_starttime = get_sys_clock(); - return rc; - -} - - -RC PPSTxnManager::run_pps_phase2() { - PPSQuery* pps_query = (PPSQuery*) query; - RC rc = RCOK; - uint64_t part_key = pps_query->part_key; - uint64_t product_key = pps_query->product_key; - uint64_t supplier_key = pps_query->supplier_key; - bool part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - bool product_loc = GET_NODE_ID(products_to_partition(product_key)) == g_node_id; - bool supplier_loc = GET_NODE_ID(suppliers_to_partition(supplier_key)) == g_node_id; - assert(CC_ALG == CALVIN); - - switch (pps_query->txn_type) { - case PPS_GETPART: - if (part_loc) { - rc = run_getpart_0(part_key, row); - rc = run_getpart_1(row); - } - break; - case PPS_GETSUPPLIER: - if (supplier_loc) { - rc = run_getsupplier_0(supplier_key, row); - rc = run_getsupplier_1(row); - } - break; - case PPS_GETPRODUCT: - if (product_loc) { - rc = run_getproduct_0(product_key, row); - rc = run_getproduct_1(row); - } - break; - case PPS_GETPARTBYSUPPLIER: - if (supplier_loc) { - rc = run_getpartsbysupplier_0(supplier_key, row); - rc = run_getpartsbysupplier_1(row); - rc = run_getpartsbysupplier_2(supplier_key, row); - while (row != NULL) { - ++parts_processed_count; - rc = run_getpartsbysupplier_3(part_key, row); - if (isRecon()) { - pps_query->part_keys.add(part_key); - } else { - break; - // check if the parts have changed since we did recon - if (!pps_query->part_keys.contains(part_key)) { - txn->rc = Abort; - break; - } - } - rc = run_getpartsbysupplier_2(supplier_key, row); - } - - } - if (txn->rc == Abort) { - break; - } - if (!isRecon()) { - for (uint64_t key = 0; key < pps_query->part_keys.size();key++) { - part_key = pps_query->part_keys[key]; - part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - if (part_loc) { - rc = run_getpartsbysupplier_4(part_key, row); - rc = run_getpartsbysupplier_5(row); - } - } - } - break; - case PPS_GETPARTBYPRODUCT: - if (product_loc) { - rc = run_getpartsbyproduct_0(product_key, row); - rc = run_getpartsbyproduct_1(row); - rc = run_getpartsbyproduct_2(product_key, row); - while (row != NULL) { - ++parts_processed_count; - rc = run_getpartsbyproduct_3(part_key, row); - if (isRecon()) { - pps_query->part_keys.add(part_key); - } else { - // check if the parts have changed since we did recon - if (!pps_query->part_keys.contains(part_key)) { - txn->rc = Abort; - break; - } - } - rc = run_getpartsbyproduct_2(product_key, row); - } - - } - if (txn->rc == Abort) { - break; - } - if (!isRecon()) { - for (uint64_t key = 0; key < pps_query->part_keys.size();key++) { - part_key = pps_query->part_keys[key]; - part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - if (part_loc) { - rc = run_getpartsbyproduct_4(part_key, row); - rc = run_getpartsbyproduct_5(row); - } - } - } - break; - case PPS_ORDERPRODUCT: - if (product_loc) { - rc = run_orderproduct_0(product_key, row); - rc = run_orderproduct_1(row); - rc = run_orderproduct_2(product_key, row); - while (row != NULL) { - ++parts_processed_count; - rc = run_orderproduct_3(part_key, row); - if (isRecon()) { - pps_query->part_keys.add(part_key); - } else { - // check if the parts have changed since we did recon - if (!pps_query->part_keys.contains(part_key)) { - txn->rc = Abort; - break; - } - } - rc = run_orderproduct_2(product_key, row); - } - } - break; - case PPS_UPDATEPRODUCTPART: - break; - case PPS_UPDATEPART: - break; - default: - assert(false); - } - return rc; -} - -RC PPSTxnManager::run_pps_phase5() { - PPSQuery* pps_query = (PPSQuery*) query; - RC rc = RCOK; - uint64_t part_key = pps_query->part_key; - uint64_t product_key = pps_query->product_key; - //uint64_t supplier_key = pps_query->supplier_key; - bool part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - bool product_loc = GET_NODE_ID(products_to_partition(product_key)) == g_node_id; - //bool supplier_loc = GET_NODE_ID(suppliers_to_partition(supplier_key)) == g_node_id; - assert(CC_ALG == CALVIN); - - switch (pps_query->txn_type) { - case PPS_GETPART: - break; - case PPS_GETSUPPLIER: - break; - case PPS_GETPRODUCT: - break; - case PPS_GETPARTBYSUPPLIER: - break; - case PPS_GETPARTBYPRODUCT: - break; - case PPS_ORDERPRODUCT: - for (uint64_t key = 0; key < pps_query->part_keys.size();key++) { - part_key = pps_query->part_keys[key]; - part_loc = GET_NODE_ID(parts_to_partition(part_key)) == g_node_id; - if (part_loc) { - rc = run_orderproduct_4(part_key, row); - rc = run_orderproduct_5(row); - } - } - break; - case PPS_UPDATEPRODUCTPART: - if (product_loc) { - - DEBUG("UPDATE Product %ld Part %ld\n",product_key,part_key); - rc = run_updateproductpart_0(product_key, row); - rc = run_updateproductpart_1(part_key, row); - } - break; - case PPS_UPDATEPART: - if (part_loc) { - rc = run_updatepart_0(part_key, row); - rc = run_updatepart_1(row); - } - break; - default: - assert(false); - } - return rc; -} diff --git a/contrib/deneva/benchmarks/pps_wl.cpp b/contrib/deneva/benchmarks/pps_wl.cpp deleted file mode 100644 index b419c3e8..00000000 --- a/contrib/deneva/benchmarks/pps_wl.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "pps.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "index_hash.h" -#include "index_btree.h" -#include "pps_helper.h" -#include "row.h" -#include "query.h" -#include "txn.h" -#include "mem_alloc.h" - -RC PPSWorkload::init() { - Workload::init(); - char * cpath = getenv("SCHEMA_PATH"); - string path; - if (cpath == NULL) - path = "./benchmarks/"; - else { - path = string(cpath); - } - path += "PPS_schema.txt"; - cout << "reading schema file: " << path << endl; - - printf("Initializing schema... "); - fflush(stdout); - init_schema( path.c_str() ); - printf("Done\n"); - printf("Initializing table... "); - fflush(stdout); - init_table(); - printf("Done\n"); - fflush(stdout); - return RCOK; -} - -RC PPSWorkload::init_schema(const char * schema_file) { - Workload::init_schema(schema_file); - t_suppliers = tables["SUPPLIERS"]; - t_products = tables["PRODUCTS"]; - t_parts = tables["PARTS"]; - t_supplies = tables["SUPPLIES"]; - t_uses = tables["USES"]; - - i_parts = indexes["PARTS_IDX"]; - i_suppliers = indexes["SUPPLIERS_IDX"]; - i_products = indexes["PRODUCTS_IDX"]; - i_uses = indexes["USES_IDX"]; - i_supplies = indexes["SUPPLIES_IDX"]; - return RCOK; -} - -RC PPSWorkload::init_table() { - -/******** fill in data ************/ -// data filling process: -// supplies -// --parts -// --suppliers -// uses -// --products -/**********************************/ - - pps_thr_args * tt = new pps_thr_args[g_init_parallelism]; - for (UInt32 i = 0; i < g_init_parallelism ; i++) { - tt[i].wl = this; - tt[i].id = i; - } - - threadInitParts(&tt[0]); - printf("PARTS Done\n"); - threadInitProducts(&tt[0]); - printf("PRODUCTS Done\n"); - threadInitSuppliers(&tt[0]); - printf("SUPPLIERS Done\n"); - threadInitUses(&tt[0]); - printf("USES Done\n"); - threadInitSupplies(&tt[0]); - printf("SUPPLIES Done\n"); - fflush(stdout); - printf("\nData Initialization Complete!\n\n"); - return RCOK; -} - -RC PPSWorkload::get_txn_man(TxnManager *& txn_manager) { - DEBUG_M("PPSWorkload::get_txn_man PPSTxnManager alloc\n"); - txn_manager = (PPSTxnManager *)mem_allocator.align_alloc(sizeof(PPSTxnManager)); - new(txn_manager) PPSTxnManager(); - //txn_manager->init( this); - return RCOK; -} - -void PPSWorkload::init_tab_parts() { - char * padding = new char[100]; - for (int i = 0; i < 100; i++) { - padding[i] = 'z'; - } - for (UInt32 id = 1; id <= g_max_part_key; id++) { - if (GET_NODE_ID(parts_to_partition(id)) != g_node_id) continue; - row_t * row; - uint64_t row_id; - t_parts->get_new_row(row, 0, row_id); - row->set_primary_key(id); - row->set_value(0,id); // part id - row->set_value(PART_AMOUNT,1000); // # of parts - row->set_value(FIELD1,padding); - row->set_value(FIELD2,padding); - row->set_value(FIELD3,padding); - row->set_value(FIELD4,padding); - row->set_value(FIELD5,padding); - row->set_value(FIELD6,padding); - row->set_value(FIELD7,padding); - row->set_value(FIELD8,padding); - row->set_value(FIELD9,padding); - row->set_value(FIELD10,padding); - - index_insert(i_parts, id, row, parts_to_partition(id)); - DEBUG("PARTS added (%d, ...)\n",id); - - } -} - -void PPSWorkload::init_tab_suppliers() { - char * padding = new char[100]; - for (int i = 0; i < 100; i++) { - padding[i] = 'z'; - } - for (UInt32 id = 1; id <= g_max_supplier_key; id++) { - if (GET_NODE_ID(suppliers_to_partition(id)) != g_node_id) continue; - row_t * row; - uint64_t row_id; - t_suppliers->get_new_row(row, 0, row_id); - row->set_primary_key(id); - row->set_value(0,id); - row->set_value(FIELD1,padding); - row->set_value(FIELD2,padding); - row->set_value(FIELD3,padding); - row->set_value(FIELD4,padding); - row->set_value(FIELD5,padding); - row->set_value(FIELD6,padding); - row->set_value(FIELD7,padding); - row->set_value(FIELD8,padding); - row->set_value(FIELD9,padding); - row->set_value(FIELD10,padding); - - index_insert(i_suppliers, id, row, suppliers_to_partition(id)); - - } -} - -void PPSWorkload::init_tab_products() { - char * padding = new char[100]; - for (int i = 0; i < 100; i++) { - padding[i] = 'z'; - } - for (UInt32 id = 1; id <= g_max_product_key; id++) { - if (GET_NODE_ID(products_to_partition(id)) != g_node_id) continue; - row_t * row; - uint64_t row_id; - t_products->get_new_row(row, 0, row_id); - row->set_primary_key(id); - row->set_value(0,id); - row->set_value(FIELD1,padding); - row->set_value(FIELD2,padding); - row->set_value(FIELD3,padding); - row->set_value(FIELD4,padding); - row->set_value(FIELD5,padding); - row->set_value(FIELD6,padding); - row->set_value(FIELD7,padding); - row->set_value(FIELD8,padding); - row->set_value(FIELD9,padding); - row->set_value(FIELD10,padding); - - index_insert(i_products, id, row, products_to_partition(id)); - DEBUG("PRODUCTS added (%d, ...)\n",id); - - } -} - -void PPSWorkload::init_tab_supplies() { - for (UInt32 id = 1; id <= g_max_supplier_key; id++) { - std::set parts_set; - for (UInt32 i = 0; i < g_max_parts_per; i++) { - parts_set.insert(URand(1,g_max_part_key)); - } - for(auto it = parts_set.begin(); it != parts_set.end();it++) { - row_t * row; - uint64_t row_id; - uint64_t part_id = *it; - t_supplies->get_new_row(row, 0, row_id); - row->set_primary_key(id); - //row->set_value(SUPPLIER_KEY,id); - //row->set_value(PART_KEY,part_id); - row->set_value(0,id); - row->set_value(1,part_id); - index_insert_nonunique(i_supplies, id, row, suppliers_to_partition(id)); - } - } - -} - -void PPSWorkload::init_tab_uses() { - for (UInt32 id = 1; id <= g_max_product_key; id++) { - std::set parts_set; - for (UInt32 i = 0; i < g_max_parts_per; i++) { - parts_set.insert(URand(1,g_max_part_key)); - } - for(auto it = parts_set.begin(); it != parts_set.end();it++) { - row_t * row; - uint64_t row_id; - uint64_t part_id = *it; - t_uses->get_new_row(row, 0, row_id); - row->set_primary_key(id); - //row->set_value(PRODUCT_KEY,id); - //row->set_value(PART_KEY,part_id); - row->set_value(0,id); - row->set_value(1,part_id); - index_insert_nonunique(i_uses, id, row, products_to_partition(id)); - DEBUG("USES added (%d, %ld) -- %lx\n",id,part_id,(uint64_t)row); - } - } - -} - - -/*==================================================================+ -| ROUTINE NAME -| InitPermutation -+==================================================================*/ - -void * PPSWorkload::threadInitSuppliers(void * This) { - PPSWorkload * wl = ((pps_thr_args*) This)->wl; - //int id = ((pps_thr_args*) This)->id; - wl->init_tab_suppliers(); - return NULL; -} - -void * PPSWorkload::threadInitProducts(void * This) { - PPSWorkload * wl = ((pps_thr_args*) This)->wl; - //int id = ((pps_thr_args*) This)->id; - wl->init_tab_products(); - return NULL; -} - -void * PPSWorkload::threadInitParts(void * This) { - PPSWorkload * wl = ((pps_thr_args*) This)->wl; - //int id = ((pps_thr_args*) This)->id; - wl->init_tab_parts(); - return NULL; -} - -void * PPSWorkload::threadInitSupplies(void * This) { - PPSWorkload * wl = ((pps_thr_args*) This)->wl; - //int id = ((pps_thr_args*) This)->id; - wl->init_tab_supplies(); - return NULL; -} - -void * PPSWorkload::threadInitUses(void * This) { - PPSWorkload * wl = ((pps_thr_args*) This)->wl; - //int id = ((pps_thr_args*) This)->id; - wl->init_tab_uses(); - return NULL; -} - diff --git a/contrib/deneva/benchmarks/tpcc.h b/contrib/deneva/benchmarks/tpcc.h deleted file mode 100644 index f817428d..00000000 --- a/contrib/deneva/benchmarks/tpcc.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TPCC_H_ -#define _TPCC_H_ - -#include "wl.h" -#include "txn.h" -#include "query.h" -#include "row.h" - -class TPCCQuery; -class TPCCQueryMessage; -struct Item_no; - -class table_t; -class INDEX; -class TPCCQuery; -enum TPCCRemTxnType { - TPCC_PAYMENT_S=0, - TPCC_PAYMENT0, - TPCC_PAYMENT1, - TPCC_PAYMENT2, - TPCC_PAYMENT3, - TPCC_PAYMENT4, - TPCC_PAYMENT5, - TPCC_NEWORDER_S, - TPCC_NEWORDER0, - TPCC_NEWORDER1, - TPCC_NEWORDER2, - TPCC_NEWORDER3, - TPCC_NEWORDER4, - TPCC_NEWORDER5, - TPCC_NEWORDER6, - TPCC_NEWORDER7, - TPCC_NEWORDER8, - TPCC_NEWORDER9, - TPCC_FIN, - TPCC_RDONE -}; - -class TPCCWorkload : public Workload { - -public: - RC init(); - RC init_table(); - RC init_schema(const char * schema_file); - RC get_txn_man(TxnManager *& txn_manager); - table_t * t_warehouse; - table_t * t_district; - table_t * t_customer; - table_t * t_history; - table_t * t_neworder; - table_t * t_order; - table_t * t_orderline; - table_t * t_item; - table_t * t_stock; - - INDEX * i_item; - INDEX * i_warehouse; - INDEX * i_district; - INDEX * i_customer_id; - INDEX * i_customer_last; - INDEX * i_stock; - INDEX * i_order; // key = (w_id, d_id, o_id) -// INDEX * i_order_wdo; // key = (w_id, d_id, o_id) -// INDEX * i_order_wdc; // key = (w_id, d_id, c_id) - INDEX * i_orderline; // key = (w_id, d_id, o_id) - INDEX * i_orderline_wd; // key = (w_id, d_id). - - // XXX HACK - // For delivary. Only one txn can be delivering a warehouse at a time. - // *_delivering[warehouse_id] -> the warehouse is delivering. - bool ** delivering; -// bool volatile ** delivering; - -private: - uint64_t num_wh; - void init_tab_item(int id); - void init_tab_wh(); - void init_tab_dist(uint64_t w_id); - void init_tab_stock(int id,uint64_t w_id); - // init_tab_cust initializes both tab_cust and tab_hist. - void init_tab_cust(int id, uint64_t d_id, uint64_t w_id); - void init_tab_hist(uint64_t c_id, uint64_t d_id, uint64_t w_id); - void init_tab_order(int id,uint64_t d_id, uint64_t w_id); - - UInt32 perm_count; - uint64_t * perm_c_id; - void init_permutation(); - uint64_t get_permutation(); - - static void * threadInitItem(void * This); - static void * threadInitWh(void * This); - static void * threadInitDist(void * This); - static void * threadInitStock(void * This); - static void * threadInitCust(void * This); - static void * threadInitHist(void * This); - static void * threadInitOrder(void * This); -}; - - struct thr_args{ - TPCCWorkload * wl; - UInt32 id; - UInt32 tot; - }; - -class TPCCTxnManager : public TxnManager { -public: - void init(uint64_t thd_id, Workload * h_wl); - void reset(); - RC acquire_locks(); - RC run_txn(); - RC run_txn_post_wait(); - RC run_calvin_txn(); - RC run_tpcc_phase2(); - RC run_tpcc_phase5(); - TPCCRemTxnType state; - void copy_remote_items(TPCCQueryMessage * msg); -private: - TPCCWorkload * _wl; - volatile RC _rc; - row_t * row; - - uint64_t next_item_id; - -void next_tpcc_state(); -RC run_txn_state(); - bool is_done(); - bool is_local_item(uint64_t idx); - RC send_remote_request(); - - RC run_payment_0(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, double h_amount, - row_t*& r_wh_local); - RC run_payment_1(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, double h_amount, - row_t* r_wh_local); - RC run_payment_2(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, double h_amount, - row_t*& r_dist_local); - RC run_payment_3(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, double h_amount, - row_t* r_dist_local); - RC run_payment_4(uint64_t w_id, uint64_t d_id, uint64_t c_id, uint64_t c_w_id, uint64_t c_d_id, - char* c_last, double h_amount, bool by_last_name, row_t*& r_cust_local); - RC run_payment_5(uint64_t w_id, uint64_t d_id, uint64_t c_id, uint64_t c_w_id, uint64_t c_d_id, - char* c_last, double h_amount, bool by_last_name, row_t* r_cust_local); - RC new_order_0(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t*& r_wh_local); - RC new_order_1(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t* r_wh_local); - RC new_order_2(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t*& r_cust_local); - RC new_order_3(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t* r_cust_local); - RC new_order_4(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t*& r_dist_local); - RC new_order_5(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, uint64_t ol_cnt, - uint64_t o_entry_d, uint64_t* o_id, row_t* r_dist_local); - RC new_order_6(uint64_t ol_i_id, row_t *& r_item_local); - RC new_order_7(uint64_t ol_i_id, row_t * r_item_local); - RC new_order_8(uint64_t w_id, uint64_t d_id, bool remote, uint64_t ol_i_id, - uint64_t ol_supply_w_id, uint64_t ol_quantity, uint64_t ol_number, uint64_t o_id, - row_t*& r_stock_local); - RC new_order_9(uint64_t w_id, uint64_t d_id, bool remote, uint64_t ol_i_id, - uint64_t ol_supply_w_id, uint64_t ol_quantity, uint64_t ol_number, - uint64_t ol_amount, uint64_t o_id, row_t* r_stock_local); - RC run_order_status(TPCCQuery * query); - RC run_delivery(TPCCQuery * query); - RC run_stock_level(TPCCQuery * query); -}; - -#endif diff --git a/contrib/deneva/benchmarks/tpcc_const.h b/contrib/deneva/benchmarks/tpcc_const.h deleted file mode 100644 index 8d1592a7..00000000 --- a/contrib/deneva/benchmarks/tpcc_const.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#if TPCC_SMALL -enum { - W_ID, - W_NAME, - W_STREET_1, - W_STREET_2, - W_CITY, - W_STATE, - W_ZIP, - W_TAX, - W_YTD -}; -enum { - D_ID, - D_W_ID, - D_NAME, - D_STREET_1, - D_STREET_2, - D_CITY, - D_STATE, - D_ZIP, - D_TAX, - D_YTD, - D_NEXT_O_ID -}; -enum { - C_ID, - C_D_ID, - C_W_ID, - C_MIDDLE, - C_LAST, - C_STATE, - C_CREDIT, - C_DISCOUNT, - C_BALANCE, - C_YTD_PAYMENT, - C_PAYMENT_CNT -}; -enum { - H_C_ID, - H_C_D_ID, - H_C_W_ID, - H_D_ID, - H_W_ID, - H_DATE, - H_AMOUNT -}; -enum { - NO_O_ID, - NO_D_ID, - NO_W_ID -}; -enum { - O_ID, - O_C_ID, - O_D_ID, - O_W_ID, - O_ENTRY_D, - O_CARRIER_ID, - O_OL_CNT, - O_ALL_LOCAL -}; -enum { - OL_O_ID, - OL_D_ID, - OL_W_ID, - OL_NUMBER, - OL_I_ID -}; -enum { - I_ID, - I_IM_ID, - I_NAME, - I_PRICE, - I_DATA -}; -enum { - S_I_ID, - S_W_ID, - S_QUANTITY, - S_REMOTE_CNT -}; -#else -enum { - W_ID, - W_NAME, - W_STREET_1, - W_STREET_2, - W_CITY, - W_STATE, - W_ZIP, - W_TAX, - W_YTD -}; -enum { - D_ID, - D_W_ID, - D_NAME, - D_STREET_1, - D_STREET_2, - D_CITY, - D_STATE, - D_ZIP, - D_TAX, - D_YTD, - D_NEXT_O_ID -}; -enum { - C_ID, - C_D_ID, - C_W_ID, - C_FIRST, - C_MIDDLE, - C_LAST, - C_STREET_1, - C_STREET_2, - C_CITY, - C_STATE, - C_ZIP, - C_PHONE, - C_SINCE, - C_CREDIT, - C_CREDIT_LIM, - C_DISCOUNT, - C_BALANCE, - C_YTD_PAYMENT, - C_PAYMENT_CNT, - C_DELIVERY_CNT, - C_DATA -}; -enum { - H_C_ID, - H_C_D_ID, - H_C_W_ID, - H_D_ID, - H_W_ID, - H_DATE, - H_AMOUNT, - H_DATA -}; -enum { - NO_O_ID, - NO_D_ID, - NO_W_ID -}; -enum { - O_ID, - O_C_ID, - O_D_ID, - O_W_ID, - O_ENTRY_D, - O_CARRIER_ID, - O_OL_CNT, - O_ALL_LOCAL -}; -enum { - OL_O_ID, - OL_D_ID, - OL_W_ID, - OL_NUMBER, - OL_I_ID, - OL_SUPPLY_W_ID, - OL_DELIVERY_D, - OL_QUANTITY, - OL_AMOUNT, - OL_DIST_INFO -}; -enum { - I_ID, - I_IM_ID, - I_NAME, - I_PRICE, - I_DATA -}; -enum { - S_I_ID, - S_W_ID, - S_QUANTITY, - S_DIST_01, - S_DIST_02, - S_DIST_03, - S_DIST_04, - S_DIST_05, - S_DIST_06, - S_DIST_07, - S_DIST_08, - S_DIST_09, - S_DIST_10, - S_YTD, - S_ORDER_CNT, - S_REMOTE_CNT, - S_DATA -}; -#endif diff --git a/contrib/deneva/benchmarks/tpcc_helper.cpp b/contrib/deneva/benchmarks/tpcc_helper.cpp deleted file mode 100644 index 595f014b..00000000 --- a/contrib/deneva/benchmarks/tpcc_helper.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "tpcc_helper.h" - -uint64_t distKey(uint64_t d_id, uint64_t d_w_id) { return d_w_id * g_dist_per_wh + d_id; } - -uint64_t custKey(uint64_t c_id, uint64_t c_d_id, uint64_t c_w_id) { - return (distKey(c_d_id, c_w_id) * g_cust_per_dist + c_id); -} - -uint64_t orderlineKey(uint64_t w_id, uint64_t d_id, uint64_t o_id) { - return distKey(d_id, w_id) * g_cust_per_dist + o_id; -} - -uint64_t orderPrimaryKey(uint64_t w_id, uint64_t d_id, uint64_t o_id) { - return orderlineKey(w_id, d_id, o_id); -} - -uint64_t custNPKey(char * c_last, uint64_t c_d_id, uint64_t c_w_id) { - uint64_t key = 0; - char offset = 'A'; - for (uint32_t i = 0; i < strlen(c_last); i++) key = (key << 1) + (c_last[i] - offset); - key = key << 10; - key += c_w_id * g_dist_per_wh + c_d_id; - return key; -} - -uint64_t stockKey(uint64_t s_i_id, uint64_t s_w_id) { return s_w_id * g_max_items + s_i_id; } - -uint64_t w_from_distKey(uint64_t d_key) { return d_key / g_dist_per_wh; } - -uint64_t w_from_custKey(uint64_t c_key) { return w_from_distKey(c_key / g_cust_per_dist); } - -uint64_t w_from_orderlineKey(uint64_t s_key) { return w_from_distKey(s_key / g_cust_per_dist); } - -uint64_t w_from_orderPrimaryKey(uint64_t s_key) { return w_from_orderlineKey(s_key); } - -uint64_t w_from_custNPKey(uint64_t cnp_key) { return (cnp_key / g_dist_per_wh) & 0x3ff; } - -uint64_t w_from_stockKey(uint64_t s_key) { return s_key / g_max_items; } -/* -uint64_t orderKey(uint64_t o_id, uint64_t o_d_id, uint64_t o_w_id) { - return ((o_w_id * g_dist_per_wh + o_d_id) * ORD_PER_DIST + o_id); -} -// the max of ol_number is 15. That's why there is a 15 here -uint64_t olKey(uint64_t ol_o_id, uint64_t ol_d_id, - uint64_t ol_w_id, uint64_t ol_number) { - return ((ol_w_id * g_dist_per_wh + ol_d_id) * ORD_PER_DIST + ol_o_id) * 15 - + ol_number; -} -*/ -uint64_t Lastname(uint64_t num, char* name) { - static const char* n[] = {"BAR", "OUGHT", "ABLE", "PRI", "PRES", - "ESE", "ANTI", "CALLY", "ATION", "EING"}; - strcpy(name, n[num/100]); - strcat(name, n[(num/10)%10]); - strcat(name, n[num%10]); - return strlen(name); -} - -uint64_t RAND(uint64_t max) { return rand() % max; } - -uint64_t URand(uint64_t x, uint64_t y) { return x + RAND(y - x + 1); } - -uint64_t NURand(uint64_t A, uint64_t x, uint64_t y) { - static bool C_255_init = false; - static bool C_1023_init = false; - static bool C_8191_init = false; - static uint64_t C_255, C_1023, C_8191; - int C = 0; - switch(A) { - case 255: - if(!C_255_init) { - C_255 = (uint64_t) URand(0,255); - C_255_init = true; - } - C = C_255; - break; - case 1023: - if(!C_1023_init) { - C_1023 = (uint64_t) URand(0,1023); - C_1023_init = true; - } - C = C_1023; - break; - case 8191: - if(!C_8191_init) { - C_8191 = (uint64_t) URand(0,8191); - C_8191_init = true; - } - C = C_8191; - break; - default: - M_ASSERT(false, "Error! NURand\n"); - exit(-1); - } - return(((URand(0,A) | URand(x,y))+C)%(y-x+1))+x; -} - -uint64_t MakeAlphaString(int min, int max, char* str) { - char char_list[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', - 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', - 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; - uint64_t cnt = URand(min, max); - for (uint32_t i = 0; i < cnt; i++) str[i] = char_list[URand(0L, 60L)]; - for (int i = cnt; i < max; i++) str[i] = '\0'; - - return cnt; -} - -uint64_t MakeNumberString(int min, int max, char* str) { - - uint64_t cnt = URand(min, max); - for (UInt32 i = 0; i < cnt; i++) { - uint64_t r = URand(0L,9L); - str[i] = '0' + r; - } - return cnt; -} - -uint64_t wh_to_part(uint64_t wid) { - assert(g_part_cnt <= g_num_wh); - return (wid-1) % g_part_cnt ; -} diff --git a/contrib/deneva/benchmarks/tpcc_helper.h b/contrib/deneva/benchmarks/tpcc_helper.h deleted file mode 100644 index f6c491e0..00000000 --- a/contrib/deneva/benchmarks/tpcc_helper.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TPCC_HELPER_H_ -#define _TPCC_HELPER_H_ - -#include "global.h" -#include "helper.h" - -uint64_t distKey(uint64_t d_id, uint64_t d_w_id); -uint64_t custKey(uint64_t c_id, uint64_t c_d_id, uint64_t c_w_id); -uint64_t orderlineKey(uint64_t w_id, uint64_t d_id, uint64_t o_id); -uint64_t orderPrimaryKey(uint64_t w_id, uint64_t d_id, uint64_t o_id); -// non-primary key -uint64_t custNPKey(char * c_last, uint64_t c_d_id, uint64_t c_w_id); -uint64_t stockKey(uint64_t s_i_id, uint64_t s_w_id); - -uint64_t w_from_distKey(uint64_t d_key); -uint64_t w_from_custKey(uint64_t c_key); -uint64_t w_from_orderlineKey(uint64_t s_key); -uint64_t w_from_orderPrimaryKey(uint64_t s_key); -uint64_t w_from_custNPKey(uint64_t cnp_key); -uint64_t w_from_stockKey(uint64_t s_key); -//uint64_t orderKey(uint64_t o_id, uint64_t o_d_id, uint64_t o_w_id); -// the max of ol_number is 15. That's why there is a 15 here -//uint64_t olKey(uint64_t ol_o_id, uint64_t ol_d_id, -// uint64_t ol_w_id, uint64_t ol_number); - -uint64_t Lastname(uint64_t num, char* name); - -// return random data from [0, max-1] -uint64_t RAND(uint64_t max); -// random number from [x, y] -uint64_t URand(uint64_t x, uint64_t y); -// non-uniform random number -uint64_t NURand(uint64_t A, uint64_t x, uint64_t y); -// random string with random length beteen min and max. -uint64_t MakeAlphaString(int min, int max, char * str); -uint64_t MakeNumberString(int min, int max, char* str); - -uint64_t wh_to_part(uint64_t wid); - -#endif diff --git a/contrib/deneva/benchmarks/tpcc_query.cpp b/contrib/deneva/benchmarks/tpcc_query.cpp deleted file mode 100644 index 81119b65..00000000 --- a/contrib/deneva/benchmarks/tpcc_query.cpp +++ /dev/null @@ -1,341 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "query.h" -#include "tpcc_query.h" -#include "tpcc.h" -#include "tpcc_helper.h" -#include "mem_alloc.h" -#include "wl.h" -#include "table.h" -#include "message.h" - -BaseQuery * TPCCQueryGenerator::create_query(Workload * h_wl,uint64_t home_partition_id) { - double x = (double)(rand() % 100) / 100.0; - if (x < g_perc_payment) - return gen_payment(home_partition_id); - else - return gen_new_order(home_partition_id); - -} - -void TPCCQuery::init(uint64_t thd_id, Workload * h_wl) { - items.init(g_max_items_per_txn); - BaseQuery::init(); -} - -void TPCCQuery::init() { - items.init(g_max_items_per_txn); - BaseQuery::init(); -} - -void TPCCQuery::print() { - - printf( - "TPCCQuery: %d " - "w_id: %ld, d_id: %ld, c_id: %ld, d_w_id: %ld, c_w_id: %ld, c_d_id: %ld\n", - (int)txn_type, w_id, d_id, c_id, d_w_id, c_w_id, c_d_id); - if(txn_type == TPCC_NEW_ORDER) { - printf("items: "); - for(uint64_t size = 0; size < items.size(); size++) { - printf("%ld, ", items[size]->ol_i_id); - } - printf("\n"); - } -} - -std::set TPCCQuery::participants(Message * msg, Workload * wl) { - std::set participant_set; - TPCCClientQueryMessage* tpcc_msg = ((TPCCClientQueryMessage*)msg); - uint64_t id; - - id = GET_NODE_ID(wh_to_part(tpcc_msg->w_id)); - participant_set.insert(id); - - switch(tpcc_msg->txn_type) { - case TPCC_PAYMENT: - id = GET_NODE_ID(wh_to_part(tpcc_msg->c_w_id)); - participant_set.insert(id); - break; - case TPCC_NEW_ORDER: - for(uint64_t i = 0; i < tpcc_msg->ol_cnt; i++) { - uint64_t req_nid = GET_NODE_ID(wh_to_part(tpcc_msg->items[i]->ol_supply_w_id)); - participant_set.insert(req_nid); - } - break; - default: - assert(false); - } - - return participant_set; -} - -uint64_t TPCCQuery::participants(bool *& pps,Workload * wl) { - int n = 0; - for (uint64_t i = 0; i < g_node_cnt; i++) pps[i] = false; - uint64_t id; - - switch(txn_type) { - case TPCC_PAYMENT: - id = GET_NODE_ID(wh_to_part(w_id)); - if(!pps[id]) { - pps[id] = true; - n++; - } - id = GET_NODE_ID(wh_to_part(c_w_id)); - if(!pps[id]) { - pps[id] = true; - n++; - } - break; - case TPCC_NEW_ORDER: - id = GET_NODE_ID(wh_to_part(w_id)); - if(!pps[id]) { - pps[id] = true; - n++; - } - /* - id = GET_NODE_ID(wh_to_part(c_w_id)); - if(!pps[id]) { - pps[id] = true; - n++; - } - id = GET_NODE_ID(wh_to_part(d_w_id)); - if(!pps[id]) { - pps[id] = true; - n++; - } - */ - for(uint64_t i = 0; i < ol_cnt; i++) { - uint64_t req_nid = GET_NODE_ID(wh_to_part(items[i]->ol_supply_w_id)); - if(!pps[req_nid]) { - pps[req_nid] = true; - n++; - } - } - break; - default: - assert(false); - } - - return n; -} - -bool TPCCQuery::readonly() { return false; } - -BaseQuery * TPCCQueryGenerator::gen_payment(uint64_t home_partition) { - TPCCQuery * query = new TPCCQuery; - set partitions_accessed; - - query->txn_type = TPCC_PAYMENT; - uint64_t home_warehouse; - if (FIRST_PART_LOCAL) { - while (wh_to_part(home_warehouse = URand(1, g_num_wh)) != home_partition) { - } - } else - home_warehouse = URand(1, g_num_wh); - query->w_id = home_warehouse; - query->d_w_id = home_warehouse; - - partitions_accessed.insert(wh_to_part(query->w_id)); - - query->d_id = URand(1, g_dist_per_wh); - query->h_amount = URand(1, 5000); - query->rbk = false; - double x = (double)(rand() % 10000) / 10000; - int y = URand(1, 100); - - // if(x > g_mpr) { -#ifdef NO_REMOTE - if(x >= 0) { -#else - if(x > 0.15) { -#endif - // home warehouse - query->c_d_id = query->d_id; - query->c_w_id = query->w_id; - } else { - // remote warehouse - query->c_d_id = URand(1, g_dist_per_wh); - if(g_num_wh > 1) { - while ((query->c_w_id = URand(1, g_num_wh)) == query->w_id) { - } - if (wh_to_part(query->w_id) != wh_to_part(query->c_w_id)) { - partitions_accessed.insert(wh_to_part(query->c_w_id)); - } - } else - query->c_w_id = query->w_id; - } - if(y <= 60) { - // by last name - query->by_last_name = true; - Lastname(NURand(255,0,999),query->c_last); - } else { - // by cust id - query->by_last_name = false; - query->c_id = NURand(1023, 1, g_cust_per_dist); - } - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; -} - -BaseQuery * TPCCQueryGenerator::gen_new_order(uint64_t home_partition) { - TPCCQuery * query = new TPCCQuery; - set partitions_accessed; - - query->txn_type = TPCC_NEW_ORDER; - query->items.init(g_max_items_per_txn); - if (FIRST_PART_LOCAL) { - while (wh_to_part(query->w_id = URand(1, g_num_wh)) != home_partition) { - } - } else - query->w_id = URand(1, g_num_wh); - - query->d_id = URand(1, g_dist_per_wh); - query->c_id = NURand(1023, 1, g_cust_per_dist); - // TODO TPCC rollback - //rbk = URand(1, 100) == 1 ? true : false; - query->rbk = false; - query->ol_cnt = URand(5, g_max_items_per_txn); - query->o_entry_d = 2013; - - partitions_accessed.insert(wh_to_part(query->w_id)); - - double r_mpr = (double)(rand() % 10000) / 10000; - uint64_t part_limit; -#ifdef NO_REMOTE - if(r_mpr < 0) -#else - if(r_mpr < g_mpr) -#endif - part_limit = g_part_per_txn; - else - part_limit = 1; - - std::set ol_i_ids; - while(query->items.size() < query->ol_cnt) { - Item_no * item = new Item_no; - - while (ol_i_ids.count(item->ol_i_id = NURand(8191, 1, g_max_items)) > 0) { - } - ol_i_ids.insert(item->ol_i_id); - item->ol_quantity = URand(1, 10); - double r_rem = (double)(rand() % 100000) / 100000; - if (r_rem > 0.01 || r_mpr > g_mpr || g_num_wh == 1) { - // home warehouse - item->ol_supply_w_id = query->w_id; - } else { - if(partitions_accessed.size() < part_limit) { - item->ol_supply_w_id = URand(1, g_num_wh); - partitions_accessed.insert(wh_to_part(item->ol_supply_w_id)); - } else { - // select warehouse from among those already selected - while (partitions_accessed.count(wh_to_part(item->ol_supply_w_id = URand(1, g_num_wh))) == - 0) { - } - } - } - - query->items.add(item); - } - - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - return query; - -} - -uint64_t TPCCQuery::get_participants(Workload * wl) { - uint64_t participant_cnt = 0; - uint64_t active_cnt = 0; - assert(participant_nodes.size()==0); - assert(active_nodes.size()==0); - for(uint64_t i = 0; i < g_node_cnt; i++) { - participant_nodes.add(0); - active_nodes.add(0); - } - assert(participant_nodes.size()==g_node_cnt); - assert(active_nodes.size()==g_node_cnt); - - uint64_t home_wh_node; - home_wh_node = GET_NODE_ID(wh_to_part(w_id)); - participant_nodes.set(home_wh_node,1); - active_nodes.set(home_wh_node,1); - participant_cnt++; - active_cnt++; - if(txn_type == TPCC_PAYMENT) { - uint64_t req_nid = GET_NODE_ID(wh_to_part(c_w_id)); - if(participant_nodes[req_nid] == 0) { - participant_cnt++; - participant_nodes.set(req_nid,1); - active_cnt++; - active_nodes.set(req_nid,1); - } - - } else if (txn_type == TPCC_NEW_ORDER) { - for(uint64_t i = 0; i < ol_cnt; i++) { - uint64_t req_nid = GET_NODE_ID(wh_to_part(items[i]->ol_supply_w_id)); - if(participant_nodes[req_nid] == 0) { - participant_cnt++; - participant_nodes.set(req_nid,1); - active_cnt++; - active_nodes.set(req_nid,1); - } - } - } - return participant_cnt; -} - -void TPCCQuery::reset() { - BaseQuery::clear(); -#if CC_ALG != CALVIN - release_items(); -#endif - items.clear(); -} - -void TPCCQuery::release() { - BaseQuery::release(); - DEBUG_M("TPCCQuery::release() free\n"); -#if CC_ALG != CALVIN - release_items(); -#endif - items.release(); -} - -void TPCCQuery::release_items() { - // A bit of a hack to ensure that original requests in client query queue aren't freed - if (SERVER_GENERATE_QUERIES) return; - for(uint64_t i = 0; i < items.size(); i++) { - DEBUG_M("TPCCQuery::release() Item_no free\n"); - mem_allocator.free(items[i],sizeof(Item_no)); - } - -} diff --git a/contrib/deneva/benchmarks/tpcc_query.h b/contrib/deneva/benchmarks/tpcc_query.h deleted file mode 100644 index 4ca2dee4..00000000 --- a/contrib/deneva/benchmarks/tpcc_query.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TPCCQuery_H_ -#define _TPCCQuery_H_ - -#include "global.h" -#include "helper.h" -#include "query.h" - -class Workload; -class Message; -class TPCCQueryMessage; -class TPCCClientQueryMessage; - -// items of new order transaction -struct Item_no { - uint64_t ol_i_id; - uint64_t ol_supply_w_id; - uint64_t ol_quantity; - void copy(Item_no * item) { - ol_i_id = item->ol_i_id; - ol_supply_w_id = item->ol_supply_w_id; - ol_quantity = item->ol_quantity; - } -}; - - -class TPCCQueryGenerator : public QueryGenerator { -public: - BaseQuery * create_query(Workload * h_wl, uint64_t home_partition_id); - -private: - BaseQuery * gen_requests(uint64_t home_partition_id, Workload * h_wl); - BaseQuery * gen_payment(uint64_t home_partition); - BaseQuery * gen_new_order(uint64_t home_partition); - myrand * mrand; -}; - -class TPCCQuery : public BaseQuery { -public: - void init(uint64_t thd_id, Workload * h_wl); - void init(); - void reset(); - void release(); - void release_items(); - void print(); - static std::set participants(Message * msg, Workload * wl); - uint64_t participants(bool *& pps,Workload * wl); - uint64_t get_participants(Workload * wl); - bool readonly(); - - TPCCTxnType txn_type; - // common txn input for both payment & new-order - uint64_t w_id; - uint64_t d_id; - uint64_t c_id; - // txn input for payment - uint64_t d_w_id; - uint64_t c_w_id; - uint64_t c_d_id; - char c_last[LASTNAME_LEN]; - double h_amount; - bool by_last_name; - // txn input for new-order - //Item_no * items; - Array items; - bool rbk; - bool remote; - uint64_t ol_cnt; - uint64_t o_entry_d; - // Input for delivery - uint64_t o_carrier_id; - uint64_t ol_delivery_d; - // for order-status - - // Other - uint64_t ol_i_id; - uint64_t ol_supply_w_id; - uint64_t ol_quantity; - uint64_t ol_number; - uint64_t ol_amount; - uint64_t o_id; - uint64_t rqry_req_cnt; - -}; - -#endif diff --git a/contrib/deneva/benchmarks/tpcc_txn.cpp b/contrib/deneva/benchmarks/tpcc_txn.cpp deleted file mode 100644 index effb03d4..00000000 --- a/contrib/deneva/benchmarks/tpcc_txn.cpp +++ /dev/null @@ -1,1142 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "tpcc.h" -#include "tpcc_query.h" -#include "tpcc_helper.h" -#include "query.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "row.h" -#include "index_hash.h" -#include "index_btree.h" -#include "tpcc_const.h" -#include "transport.h" -#include "msg_queue.h" -#include "message.h" - -void TPCCTxnManager::init(uint64_t thd_id, Workload * h_wl) { - TxnManager::init(thd_id, h_wl); - _wl = (TPCCWorkload *) h_wl; - reset(); - TxnManager::reset(); -} - -void TPCCTxnManager::reset() { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - state = TPCC_PAYMENT0; - if(tpcc_query->txn_type == TPCC_PAYMENT) { - state = TPCC_PAYMENT0; - } else if (tpcc_query->txn_type == TPCC_NEW_ORDER) { - state = TPCC_NEWORDER0; - } - next_item_id = 0; - TxnManager::reset(); -} - -RC TPCCTxnManager::run_txn_post_wait() { - get_row_post_wait(row); - next_tpcc_state(); - return RCOK; -} - - -RC TPCCTxnManager::run_txn() { -#if MODE == SETUP_MODE - return RCOK; -#endif - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - -#if CC_ALG == CALVIN - rc = run_calvin_txn(); - return rc; -#endif - - if(IS_LOCAL(txn->txn_id) && (state == TPCC_PAYMENT0 || state == TPCC_NEWORDER0)) { - DEBUG("Running txn %ld\n",txn->txn_id); -#if DISTR_DEBUG - query->print(); -#endif - query->partitions_touched.add_unique(GET_PART_ID(0,g_node_id)); - } - - - while(rc == RCOK && !is_done()) { - rc = run_txn_state(); - } - - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - - if(IS_LOCAL(get_txn_id())) { - if(is_done() && rc == RCOK) - rc = start_commit(); - else if(rc == Abort) - rc = start_abort(); - } - - return rc; - -} - -bool TPCCTxnManager::is_done() { - bool done = false; - TPCCQuery* tpcc_query = (TPCCQuery*) query; - switch(tpcc_query->txn_type) { - case TPCC_PAYMENT: - //done = state == TPCC_PAYMENT5 || state == TPCC_FIN; - done = state == TPCC_FIN; - break; - case TPCC_NEW_ORDER: - //done = next_item_id == tpcc_query->ol_cnt || state == TPCC_FIN; - done = next_item_id >= tpcc_query->items.size() || state == TPCC_FIN; - break; - default: - assert(false); - } - - return done; -} - -RC TPCCTxnManager::acquire_locks() { - uint64_t starttime = get_sys_clock(); - assert(CC_ALG == CALVIN); - locking_done = false; - RC rc = RCOK; - RC rc2; - INDEX * index; - itemid_t * item; - row_t* row; - uint64_t key; - incr_lr(); - TPCCQuery* tpcc_query = (TPCCQuery*) query; - - uint64_t w_id = tpcc_query->w_id; - uint64_t d_id = tpcc_query->d_id; - uint64_t c_id = tpcc_query->c_id; - uint64_t d_w_id = tpcc_query->d_w_id; - uint64_t c_w_id = tpcc_query->c_w_id; - uint64_t c_d_id = tpcc_query->c_d_id; - char * c_last = tpcc_query->c_last; - uint64_t part_id_w = wh_to_part(w_id); - uint64_t part_id_c_w = wh_to_part(c_w_id); - switch(tpcc_query->txn_type) { - case TPCC_PAYMENT: - if(GET_NODE_ID(part_id_w) == g_node_id) { - // WH - index = _wl->i_warehouse; - item = index_read(index, w_id, part_id_w); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,g_wh_update? WR:RD); - if (rc2 != RCOK) rc = rc2; - - // Dist - key = distKey(d_id, d_w_id); - item = index_read(_wl->i_district, key, part_id_w); - row = ((row_t *)item->location); - rc2 = get_lock(row, WR); - if (rc2 != RCOK) rc = rc2; - } - if(GET_NODE_ID(part_id_c_w) == g_node_id) { - // Cust - if (tpcc_query->by_last_name) { - - key = custNPKey(c_last, c_d_id, c_w_id); - index = _wl->i_customer_last; - item = index_read(index, key, part_id_c_w); - int cnt = 0; - itemid_t * it = item; - itemid_t * mid = item; - while (it != NULL) { - cnt ++; - it = it->next; - if (cnt % 2 == 0) mid = mid->next; - } - row = ((row_t *)mid->location); - - } else { - key = custKey(c_id, c_d_id, c_w_id); - index = _wl->i_customer_id; - item = index_read(index, key, part_id_c_w); - row = (row_t *) item->location; - } - rc2 = get_lock(row, WR); - if (rc2 != RCOK) rc = rc2; - } - break; - case TPCC_NEW_ORDER: - if(GET_NODE_ID(part_id_w) == g_node_id) { - // WH - index = _wl->i_warehouse; - item = index_read(index, w_id, part_id_w); - row_t * row = ((row_t *)item->location); - rc2 = get_lock(row,RD); - if (rc2 != RCOK) rc = rc2; - // Cust - index = _wl->i_customer_id; - key = custKey(c_id, d_id, w_id); - item = index_read(index, key, wh_to_part(w_id)); - row = (row_t *) item->location; - rc2 = get_lock(row, RD); - if (rc2 != RCOK) rc = rc2; - // Dist - key = distKey(d_id, w_id); - item = index_read(_wl->i_district, key, wh_to_part(w_id)); - row = ((row_t *)item->location); - rc2 = get_lock(row, WR); - if (rc2 != RCOK) rc = rc2; - } - // Items - for(uint64_t i = 0; i < tpcc_query->ol_cnt; i++) { - if (GET_NODE_ID(wh_to_part(tpcc_query->items[i]->ol_supply_w_id)) != g_node_id) continue; - - key = tpcc_query->items[i]->ol_i_id; - item = index_read(_wl->i_item, key, 0); - row = ((row_t *)item->location); - rc2 = get_lock(row, RD); - if (rc2 != RCOK) rc = rc2; - key = stockKey(tpcc_query->items[i]->ol_i_id, tpcc_query->items[i]->ol_supply_w_id); - index = _wl->i_stock; - item = index_read(index, key, wh_to_part(tpcc_query->items[i]->ol_supply_w_id)); - row = ((row_t *)item->location); - rc2 = get_lock(row, WR); - if (rc2 != RCOK) rc = rc2; - } - break; - default: - assert(false); - } - if(decr_lr() == 0) { - if (ATOM_CAS(lock_ready, false, true)) rc = RCOK; - } - txn_stats.wait_starttime = get_sys_clock(); - locking_done = true; - INC_STATS(get_thd_id(),calvin_sched_time,get_sys_clock() - starttime); - return rc; -} - - -void TPCCTxnManager::next_tpcc_state() { - //TPCCQuery* tpcc_query = (TPCCQuery*) query; - - switch(state) { - case TPCC_PAYMENT_S: - state = TPCC_PAYMENT0; - break; - case TPCC_PAYMENT0: - state = TPCC_PAYMENT1; - break; - case TPCC_PAYMENT1: - state = TPCC_PAYMENT2; - break; - case TPCC_PAYMENT2: - state = TPCC_PAYMENT3; - break; - case TPCC_PAYMENT3: - state = TPCC_PAYMENT4; - break; - case TPCC_PAYMENT4: - state = TPCC_PAYMENT5; - break; - case TPCC_PAYMENT5: - state = TPCC_FIN; - break; - case TPCC_NEWORDER_S: - state = TPCC_NEWORDER0; - break; - case TPCC_NEWORDER0: - state = TPCC_NEWORDER1; - break; - case TPCC_NEWORDER1: - state = TPCC_NEWORDER2; - break; - case TPCC_NEWORDER2: - state = TPCC_NEWORDER3; - break; - case TPCC_NEWORDER3: - state = TPCC_NEWORDER4; - break; - case TPCC_NEWORDER4: - state = TPCC_NEWORDER5; - break; - case TPCC_NEWORDER5: - if(!IS_LOCAL(txn->txn_id) || !is_done()) { - state = TPCC_NEWORDER6; - } else { - state = TPCC_FIN; - } - break; - case TPCC_NEWORDER6: // loop pt 1 - state = TPCC_NEWORDER7; - break; - case TPCC_NEWORDER7: - state = TPCC_NEWORDER8; - break; - case TPCC_NEWORDER8: // loop pt 2 - state = TPCC_NEWORDER9; - break; - case TPCC_NEWORDER9: - ++next_item_id; - if(!IS_LOCAL(txn->txn_id) || !is_done()) { - state = TPCC_NEWORDER6; - } else { - state = TPCC_FIN; - } - break; - case TPCC_FIN: - break; - default: - assert(false); - } - -} - -bool TPCCTxnManager::is_local_item(uint64_t idx) { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - uint64_t ol_supply_w_id = tpcc_query->items[idx]->ol_supply_w_id; - uint64_t part_id_ol_supply_w = wh_to_part(ol_supply_w_id); - return GET_NODE_ID(part_id_ol_supply_w) == g_node_id; -} - - -RC TPCCTxnManager::send_remote_request() { - assert(IS_LOCAL(get_txn_id())); - TPCCQuery* tpcc_query = (TPCCQuery*) query; - TPCCRemTxnType next_state = TPCC_FIN; - uint64_t w_id = tpcc_query->w_id; - uint64_t c_w_id = tpcc_query->c_w_id; - uint64_t dest_node_id = UINT64_MAX; - if(state == TPCC_PAYMENT0) { - dest_node_id = GET_NODE_ID(wh_to_part(w_id)); - next_state = TPCC_PAYMENT2; - } else if(state == TPCC_PAYMENT4) { - dest_node_id = GET_NODE_ID(wh_to_part(c_w_id)); - next_state = TPCC_FIN; - } else if(state == TPCC_NEWORDER0) { - dest_node_id = GET_NODE_ID(wh_to_part(w_id)); - next_state = TPCC_NEWORDER6; - } else if(state == TPCC_NEWORDER8) { - dest_node_id = GET_NODE_ID(wh_to_part(tpcc_query->items[next_item_id]->ol_supply_w_id)); - /* - while(GET_NODE_ID(wh_to_part(tpcc_query->items[next_item_id]->ol_supply_w_id)) != dest_node_id) - { - msg->items.add(tpcc_query->items[next_item_id++]); - } - */ - if(is_done()) - next_state = TPCC_FIN; - else - next_state = TPCC_NEWORDER6; - } else { - assert(false); - } - TPCCQueryMessage * msg = (TPCCQueryMessage*)Message::create_message(this,RQRY); - msg->state = state; - query->partitions_touched.add_unique(GET_PART_ID(0,dest_node_id)); - msg_queue.enqueue(get_thd_id(),msg,dest_node_id); - state = next_state; - return WAIT_REM; -} - -void TPCCTxnManager::copy_remote_items(TPCCQueryMessage * msg) { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - msg->items.init(tpcc_query->items.size()); - if (tpcc_query->txn_type == TPCC_PAYMENT) return; - uint64_t dest_node_id = GET_NODE_ID(wh_to_part(tpcc_query->items[next_item_id]->ol_supply_w_id)); - while (next_item_id < tpcc_query->items.size() && !is_local_item(next_item_id) && - GET_NODE_ID(wh_to_part(tpcc_query->items[next_item_id]->ol_supply_w_id)) == dest_node_id) { - Item_no * req = (Item_no*) mem_allocator.alloc(sizeof(Item_no)); - req->copy(tpcc_query->items[next_item_id++]); - msg->items.add(req); - } -} - - -RC TPCCTxnManager::run_txn_state() { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - uint64_t w_id = tpcc_query->w_id; - uint64_t d_id = tpcc_query->d_id; - uint64_t c_id = tpcc_query->c_id; - uint64_t d_w_id = tpcc_query->d_w_id; - uint64_t c_w_id = tpcc_query->c_w_id; - uint64_t c_d_id = tpcc_query->c_d_id; - char * c_last = tpcc_query->c_last; - double h_amount = tpcc_query->h_amount; - bool by_last_name = tpcc_query->by_last_name; - bool remote = tpcc_query->remote; - uint64_t ol_cnt = tpcc_query->ol_cnt; - uint64_t o_entry_d = tpcc_query->o_entry_d; - uint64_t ol_i_id = 0; - uint64_t ol_supply_w_id = 0; - uint64_t ol_quantity = 0; - if(tpcc_query->txn_type == TPCC_NEW_ORDER) { - ol_i_id = tpcc_query->items[next_item_id]->ol_i_id; - ol_supply_w_id = tpcc_query->items[next_item_id]->ol_supply_w_id; - ol_quantity = tpcc_query->items[next_item_id]->ol_quantity; - } - uint64_t ol_number = next_item_id; - uint64_t ol_amount = tpcc_query->ol_amount; - uint64_t o_id = tpcc_query->o_id; - - uint64_t part_id_w = wh_to_part(w_id); - uint64_t part_id_c_w = wh_to_part(c_w_id); - uint64_t part_id_ol_supply_w = wh_to_part(ol_supply_w_id); - bool w_loc = GET_NODE_ID(part_id_w) == g_node_id; - bool c_w_loc = GET_NODE_ID(part_id_c_w) == g_node_id; - bool ol_supply_w_loc = GET_NODE_ID(part_id_ol_supply_w) == g_node_id; - - RC rc = RCOK; - - switch (state) { - case TPCC_PAYMENT0 : - if(w_loc) - rc = run_payment_0(w_id, d_id, d_w_id, h_amount, row); - else { - rc = send_remote_request(); - } - break; - case TPCC_PAYMENT1 : - rc = run_payment_1(w_id, d_id, d_w_id, h_amount, row); - break; - case TPCC_PAYMENT2 : - rc = run_payment_2(w_id, d_id, d_w_id, h_amount, row); - break; - case TPCC_PAYMENT3 : - rc = run_payment_3(w_id, d_id, d_w_id, h_amount, row); - break; - case TPCC_PAYMENT4 : - if(c_w_loc) - rc = run_payment_4( w_id, d_id, c_id, c_w_id, c_d_id, c_last, h_amount, by_last_name, row); - else { - rc = send_remote_request(); - } - break; - case TPCC_PAYMENT5 : - rc = run_payment_5( w_id, d_id, c_id, c_w_id, c_d_id, c_last, h_amount, by_last_name, row); - break; - case TPCC_NEWORDER0 : - if(w_loc) - rc = new_order_0( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - else { - rc = send_remote_request(); - } - break; - case TPCC_NEWORDER1 : - rc = new_order_1( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - break; - case TPCC_NEWORDER2 : - rc = new_order_2( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - break; - case TPCC_NEWORDER3 : - rc = new_order_3( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - break; - case TPCC_NEWORDER4 : - rc = new_order_4( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - break; - case TPCC_NEWORDER5 : - rc = new_order_5( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - break; - case TPCC_NEWORDER6 : - rc = new_order_6(ol_i_id, row); - break; - case TPCC_NEWORDER7 : - rc = new_order_7(ol_i_id, row); - break; - case TPCC_NEWORDER8 : - if(ol_supply_w_loc) { - rc = new_order_8(w_id, d_id, remote, ol_i_id, ol_supply_w_id, ol_quantity, ol_number, o_id, - row); - } else { - rc = send_remote_request(); - } - break; - case TPCC_NEWORDER9 : - rc = new_order_9(w_id, d_id, remote, ol_i_id, ol_supply_w_id, ol_quantity, ol_number, - ol_amount, o_id, row); - break; - case TPCC_FIN : - state = TPCC_FIN; - if (tpcc_query->rbk) return Abort; - //return finish(tpcc_query,false); - break; - default: - assert(false); - } - - if (rc == RCOK) next_tpcc_state(); - return rc; -} - -inline RC TPCCTxnManager::run_payment_0(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, - double h_amount, row_t *&r_wh_local) { - - uint64_t key; - itemid_t * item; -/*====================================================+ - EXEC SQL UPDATE warehouse SET w_ytd = w_ytd + :h_amount - WHERE w_id=:w_id; - +====================================================*/ - /*===================================================================+ - EXEC SQL SELECT w_street_1, w_street_2, w_city, w_state, w_zip, w_name - INTO :w_street_1, :w_street_2, :w_city, :w_state, :w_zip, :w_name - FROM warehouse - WHERE w_id=:w_id; - +===================================================================*/ - - - RC rc; - key = w_id; - INDEX * index = _wl->i_warehouse; - item = index_read(index, key, wh_to_part(w_id)); - assert(item != NULL); - row_t * r_wh = ((row_t *)item->location); - if (g_wh_update) - rc = get_row(r_wh, WR, r_wh_local); - else - rc = get_row(r_wh, RD, r_wh_local); - - return rc; -} - -inline RC TPCCTxnManager::run_payment_1(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, - double h_amount, row_t *r_wh_local) { - - assert(r_wh_local != NULL); -/*====================================================+ - EXEC SQL UPDATE warehouse SET w_ytd = w_ytd + :h_amount - WHERE w_id=:w_id; - +====================================================*/ - /*===================================================================+ - EXEC SQL SELECT w_street_1, w_street_2, w_city, w_state, w_zip, w_name - INTO :w_street_1, :w_street_2, :w_city, :w_state, :w_zip, :w_name - FROM warehouse - WHERE w_id=:w_id; - +===================================================================*/ - - - double w_ytd; - r_wh_local->get_value(W_YTD, w_ytd); - if (g_wh_update) { - r_wh_local->set_value(W_YTD, w_ytd + h_amount); - } - return RCOK; -} - -inline RC TPCCTxnManager::run_payment_2(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, - double h_amount, row_t *&r_dist_local) { - /*=====================================================+ - EXEC SQL UPDATE district SET d_ytd = d_ytd + :h_amount - WHERE d_w_id=:w_id AND d_id=:d_id; - +=====================================================*/ - uint64_t key; - itemid_t * item; - key = distKey(d_id, d_w_id); - item = index_read(_wl->i_district, key, wh_to_part(w_id)); - assert(item != NULL); - row_t * r_dist = ((row_t *)item->location); - RC rc = get_row(r_dist, WR, r_dist_local); - return rc; -} - -inline RC TPCCTxnManager::run_payment_3(uint64_t w_id, uint64_t d_id, uint64_t d_w_id, - double h_amount, row_t *r_dist_local) { - assert(r_dist_local != NULL); - - /*=====================================================+ - EXEC SQL UPDATE district SET d_ytd = d_ytd + :h_amount - WHERE d_w_id=:w_id AND d_id=:d_id; - +=====================================================*/ - double d_ytd; - r_dist_local->get_value(D_YTD, d_ytd); - r_dist_local->set_value(D_YTD, d_ytd + h_amount); - - return RCOK; -} - -inline RC TPCCTxnManager::run_payment_4(uint64_t w_id, uint64_t d_id, uint64_t c_id, - uint64_t c_w_id, uint64_t c_d_id, char *c_last, - double h_amount, bool by_last_name, row_t *&r_cust_local) { - /*====================================================================+ - EXEC SQL SELECT d_street_1, d_street_2, d_city, d_state, d_zip, d_name - INTO :d_street_1, :d_street_2, :d_city, :d_state, :d_zip, :d_name - FROM district - WHERE d_w_id=:w_id AND d_id=:d_id; - +====================================================================*/ - - itemid_t * item; - uint64_t key; - row_t * r_cust; - if (by_last_name) { - /*==========================================================+ - EXEC SQL SELECT count(c_id) INTO :namecnt - FROM customer - WHERE c_last=:c_last AND c_d_id=:c_d_id AND c_w_id=:c_w_id; - +==========================================================*/ - /*==========================================================================+ - EXEC SQL DECLARE c_byname CURSOR FOR - SELECT c_first, c_middle, c_id, c_street_1, c_street_2, c_city, c_state, - c_zip, c_phone, c_credit, c_credit_lim, c_discount, c_balance, c_since - FROM customer - WHERE c_w_id=:c_w_id AND c_d_id=:c_d_id AND c_last=:c_last - ORDER BY c_first; - EXEC SQL OPEN c_byname; - +===========================================================================*/ - - key = custNPKey(c_last, c_d_id, c_w_id); - // XXX: the list is not sorted. But let's assume it's sorted... - // The performance won't be much different. - INDEX * index = _wl->i_customer_last; - item = index_read(index, key, wh_to_part(c_w_id)); - assert(item != NULL); - - int cnt = 0; - itemid_t * it = item; - itemid_t * mid = item; - while (it != NULL) { - cnt ++; - it = it->next; - if (cnt % 2 == 0) mid = mid->next; - } - r_cust = ((row_t *)mid->location); - - /*============================================================================+ - for (n=0; ni_customer_id; - item = index_read(index, key, wh_to_part(c_w_id)); - assert(item != NULL); - r_cust = (row_t *) item->location; - } - - /*======================================================================+ - EXEC SQL UPDATE customer SET c_balance = :c_balance, c_data = :c_new_data - WHERE c_w_id = :c_w_id AND c_d_id = :c_d_id AND c_id = :c_id; - +======================================================================*/ - RC rc = get_row(r_cust, WR, r_cust_local); - - return rc; -} - -inline RC TPCCTxnManager::run_payment_5(uint64_t w_id, uint64_t d_id, uint64_t c_id, - uint64_t c_w_id, uint64_t c_d_id, char *c_last, - double h_amount, bool by_last_name, row_t *r_cust_local) { - assert(r_cust_local != NULL); - double c_balance; - double c_ytd_payment; - double c_payment_cnt; - - r_cust_local->get_value(C_BALANCE, c_balance); - r_cust_local->set_value(C_BALANCE, c_balance - h_amount); - r_cust_local->get_value(C_YTD_PAYMENT, c_ytd_payment); - r_cust_local->set_value(C_YTD_PAYMENT, c_ytd_payment + h_amount); - r_cust_local->get_value(C_PAYMENT_CNT, c_payment_cnt); - r_cust_local->set_value(C_PAYMENT_CNT, c_payment_cnt + 1); - - //char * c_credit = r_cust_local->get_value(C_CREDIT); - - /*=============================================================================+ - EXEC SQL INSERT INTO - history (h_c_d_id, h_c_w_id, h_c_id, h_d_id, h_w_id, h_date, h_amount, h_data) - VALUES (:c_d_id, :c_w_id, :c_id, :d_id, :w_id, :datetime, :h_amount, :h_data); - +=============================================================================*/ - row_t * r_hist; - uint64_t row_id; - // Which partition should we be inserting into? - _wl->t_history->get_new_row(r_hist, wh_to_part(c_w_id), row_id); - r_hist->set_value(H_C_ID, c_id); - r_hist->set_value(H_C_D_ID, c_d_id); - r_hist->set_value(H_C_W_ID, c_w_id); - r_hist->set_value(H_D_ID, d_id); - r_hist->set_value(H_W_ID, w_id); - int64_t date = 2013; - r_hist->set_value(H_DATE, date); - r_hist->set_value(H_AMOUNT, h_amount); - insert_row(r_hist, _wl->t_history); - - return RCOK; -} - -// new_order 0 -inline RC TPCCTxnManager::new_order_0(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *&r_wh_local) { - uint64_t key; - itemid_t * item; - /*=======================================================================+ - EXEC SQL SELECT c_discount, c_last, c_credit, w_tax - INTO :c_discount, :c_last, :c_credit, :w_tax - FROM customer, warehouse - WHERE w_id = :w_id AND c_w_id = w_id AND c_d_id = :d_id AND c_id = :c_id; - +========================================================================*/ - key = w_id; - INDEX * index = _wl->i_warehouse; - item = index_read(index, key, wh_to_part(w_id)); - assert(item != NULL); - row_t * r_wh = ((row_t *)item->location); - RC rc = get_row(r_wh, RD, r_wh_local); - return rc; -} - -inline RC TPCCTxnManager::new_order_1(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *r_wh_local) { - assert(r_wh_local != NULL); - double w_tax; - r_wh_local->get_value(W_TAX, w_tax); - return RCOK; -} - -inline RC TPCCTxnManager::new_order_2(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *&r_cust_local) { - uint64_t key; - itemid_t * item; - key = custKey(c_id, d_id, w_id); - INDEX * index = _wl->i_customer_id; - item = index_read(index, key, wh_to_part(w_id)); - assert(item != NULL); - row_t * r_cust = (row_t *) item->location; - RC rc = get_row(r_cust, RD, r_cust_local); - return rc; -} - -inline RC TPCCTxnManager::new_order_3(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *r_cust_local) { - assert(r_cust_local != NULL); - uint64_t c_discount; - //char * c_last; - //char * c_credit; - r_cust_local->get_value(C_DISCOUNT, c_discount); - //c_last = r_cust_local->get_value(C_LAST); - //c_credit = r_cust_local->get_value(C_CREDIT); - return RCOK; -} - -inline RC TPCCTxnManager::new_order_4(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *&r_dist_local) { - uint64_t key; - itemid_t * item; - /*==================================================+ - EXEC SQL SELECT d_next_o_id, d_tax - INTO :d_next_o_id, :d_tax - FROM district WHERE d_id = :d_id AND d_w_id = :w_id; - EXEC SQL UPDATE d istrict SET d _next_o_id = :d _next_o_id + 1 - WH ERE d _id = :d_id AN D d _w _id = :w _id ; - +===================================================*/ - key = distKey(d_id, w_id); - item = index_read(_wl->i_district, key, wh_to_part(w_id)); - assert(item != NULL); - row_t * r_dist = ((row_t *)item->location); - RC rc = get_row(r_dist, WR, r_dist_local); - return rc; -} - -inline RC TPCCTxnManager::new_order_5(uint64_t w_id, uint64_t d_id, uint64_t c_id, bool remote, - uint64_t ol_cnt, uint64_t o_entry_d, uint64_t *o_id, - row_t *r_dist_local) { - assert(r_dist_local != NULL); - //double d_tax; - //int64_t o_id; - //d_tax = *(double *) r_dist_local->get_value(D_TAX); - *o_id = *(int64_t *) r_dist_local->get_value(D_NEXT_O_ID); - (*o_id) ++; - r_dist_local->set_value(D_NEXT_O_ID, *o_id); - - // return o_id - /*========================================================================================+ - EXEC SQL INSERT INTO ORDERS (o_id, o_d_id, o_w_id, o_c_id, o_entry_d, o_ol_cnt, o_all_local) - VALUES (:o_id, :d_id, :w_id, :c_id, :datetime, :o_ol_cnt, :o_all_local); - +========================================================================================*/ - row_t * r_order; - uint64_t row_id; - _wl->t_order->get_new_row(r_order, wh_to_part(w_id), row_id); - r_order->set_value(O_ID, *o_id); - r_order->set_value(O_C_ID, c_id); - r_order->set_value(O_D_ID, d_id); - r_order->set_value(O_W_ID, w_id); - r_order->set_value(O_ENTRY_D, o_entry_d); - r_order->set_value(O_OL_CNT, ol_cnt); - int64_t all_local = (remote? 0 : 1); - r_order->set_value(O_ALL_LOCAL, all_local); - insert_row(r_order, _wl->t_order); - /*=======================================================+ - EXEC SQL INSERT INTO NEW_ORDER (no_o_id, no_d_id, no_w_id) - VALUES (:o_id, :d_id, :w_id); - +=======================================================*/ - row_t * r_no; - _wl->t_neworder->get_new_row(r_no, wh_to_part(w_id), row_id); - r_no->set_value(NO_O_ID, *o_id); - r_no->set_value(NO_D_ID, d_id); - r_no->set_value(NO_W_ID, w_id); - insert_row(r_no, _wl->t_neworder); - - return RCOK; -} - - - -// new_order 1 -// Read from replicated read-only item table -inline RC TPCCTxnManager::new_order_6(uint64_t ol_i_id, row_t *& r_item_local) { - uint64_t key; - itemid_t * item; - /*===========================================+ - EXEC SQL SELECT i_price, i_name , i_data - INTO :i_price, :i_name, :i_data - FROM item - WHERE i_id = :ol_i_id; - +===========================================*/ - key = ol_i_id; - item = index_read(_wl->i_item, key, 0); - assert(item != NULL); - row_t * r_item = ((row_t *)item->location); - - RC rc = get_row(r_item, RD, r_item_local); - return rc; -} - -inline RC TPCCTxnManager::new_order_7(uint64_t ol_i_id, row_t * r_item_local) { - assert(r_item_local != NULL); - int64_t i_price; - //char * i_name; - //char * i_data; - - r_item_local->get_value(I_PRICE, i_price); - //i_name = r_item_local->get_value(I_NAME); - //i_data = r_item_local->get_value(I_DATA); - - return RCOK; -} - -// new_order 2 -inline RC TPCCTxnManager::new_order_8(uint64_t w_id, uint64_t d_id, bool remote, uint64_t ol_i_id, - uint64_t ol_supply_w_id, uint64_t ol_quantity, - uint64_t ol_number, uint64_t o_id, row_t *&r_stock_local) { - uint64_t key; - itemid_t * item; - - /*===================================================================+ - EXEC SQL SELECT s_quantity, s_data, - s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, - s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10 - INTO :s_quantity, :s_data, - :s_dist_01, :s_dist_02, :s_dist_03, :s_dist_04, :s_dist_05, - :s_dist_06, :s_dist_07, :s_dist_08, :s_dist_09, :s_dist_10 - FROM stock - WHERE s_i_id = :ol_i_id AND s_w_id = :ol_supply_w_id; - EXEC SQL UPDATE stock SET s_quantity = :s_quantity - WHERE s_i_id = :ol_i_id - AND s_w_id = :ol_supply_w_id; - +===============================================*/ - - key = stockKey(ol_i_id, ol_supply_w_id); - INDEX * index = _wl->i_stock; - item = index_read(index, key, wh_to_part(ol_supply_w_id)); - assert(item != NULL); - row_t * r_stock = ((row_t *)item->location); - RC rc = get_row(r_stock, WR, r_stock_local); - return rc; -} - -inline RC TPCCTxnManager::new_order_9(uint64_t w_id, uint64_t d_id, bool remote, uint64_t ol_i_id, - uint64_t ol_supply_w_id, uint64_t ol_quantity, - uint64_t ol_number, uint64_t ol_amount, uint64_t o_id, - row_t *r_stock_local) { - assert(r_stock_local != NULL); - // XXX s_dist_xx are not retrieved. - UInt64 s_quantity; - int64_t s_remote_cnt; - s_quantity = *(int64_t *)r_stock_local->get_value(S_QUANTITY); -#if !TPCC_SMALL - int64_t s_ytd; - int64_t s_order_cnt; - char * s_data __attribute__ ((unused)); - r_stock_local->get_value(S_YTD, s_ytd); - r_stock_local->set_value(S_YTD, s_ytd + ol_quantity); - // In Coordination Avoidance, this record must be protected! - r_stock_local->get_value(S_ORDER_CNT, s_order_cnt); - r_stock_local->set_value(S_ORDER_CNT, s_order_cnt + 1); - s_data = r_stock_local->get_value(S_DATA); -#endif - if (remote) { - s_remote_cnt = *(int64_t*)r_stock_local->get_value(S_REMOTE_CNT); - s_remote_cnt ++; - r_stock_local->set_value(S_REMOTE_CNT, &s_remote_cnt); - } - uint64_t quantity; - if (s_quantity > ol_quantity + 10) { - quantity = s_quantity - ol_quantity; - } else { - quantity = s_quantity - ol_quantity + 91; - } - r_stock_local->set_value(S_QUANTITY, &quantity); - - /*====================================================+ - EXEC SQL INSERT - INTO order_line(ol_o_id, ol_d_id, ol_w_id, ol_number, - ol_i_id, ol_supply_w_id, - ol_quantity, ol_amount, ol_dist_info) - VALUES(:o_id, :d_id, :w_id, :ol_number, - :ol_i_id, :ol_supply_w_id, - :ol_quantity, :ol_amount, :ol_dist_info); - +====================================================*/ - row_t * r_ol; - uint64_t row_id; - _wl->t_orderline->get_new_row(r_ol, wh_to_part(ol_supply_w_id), row_id); - r_ol->set_value(OL_O_ID, &o_id); - r_ol->set_value(OL_D_ID, &d_id); - r_ol->set_value(OL_W_ID, &w_id); - r_ol->set_value(OL_NUMBER, &ol_number); - r_ol->set_value(OL_I_ID, &ol_i_id); -#if !TPCC_SMALL - r_ol->set_value(OL_SUPPLY_W_ID, &ol_supply_w_id); - r_ol->set_value(OL_QUANTITY, &ol_quantity); - r_ol->set_value(OL_AMOUNT, &ol_amount); -#endif - insert_row(r_ol, _wl->t_orderline); - - return RCOK; -} - - -RC TPCCTxnManager::run_calvin_txn() { - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - TPCCQuery* tpcc_query = (TPCCQuery*) query; - DEBUG("(%ld,%ld) Run calvin txn\n",txn->txn_id,txn->batch_id); - while(!calvin_exec_phase_done() && rc == RCOK) { - DEBUG("(%ld,%ld) phase %d\n",txn->txn_id,txn->batch_id,this->phase); - switch(this->phase) { - case CALVIN_RW_ANALYSIS: - // Phase 1: Read/write set analysis - calvin_expected_rsp_cnt = tpcc_query->get_participants(_wl); - if(query->participant_nodes[g_node_id] == 1) { - calvin_expected_rsp_cnt--; - } - - DEBUG("(%ld,%ld) expects %d responses; %ld participants, %ld active\n", txn->txn_id, - txn->batch_id, calvin_expected_rsp_cnt, query->participant_nodes.size(), - query->active_nodes.size()); - - this->phase = CALVIN_LOC_RD; - break; - case CALVIN_LOC_RD: - // Phase 2: Perform local reads - DEBUG("(%ld,%ld) local reads\n",txn->txn_id,txn->batch_id); - rc = run_tpcc_phase2(); - //release_read_locks(tpcc_query); - - this->phase = CALVIN_SERVE_RD; - break; - case CALVIN_SERVE_RD: - // Phase 3: Serve remote reads - if(query->participant_nodes[g_node_id] == 1) { - rc = send_remote_reads(); - } - if(query->active_nodes[g_node_id] == 1) { - this->phase = CALVIN_COLLECT_RD; - if(calvin_collect_phase_done()) { - rc = RCOK; - } else { - assert(calvin_expected_rsp_cnt > 0); - DEBUG("(%ld,%ld) wait in collect phase; %d / %d rfwds received\n", txn->txn_id, - txn->batch_id, rsp_cnt, calvin_expected_rsp_cnt); - rc = WAIT; - } - } else { // Done - rc = RCOK; - this->phase = CALVIN_DONE; - } - break; - case CALVIN_COLLECT_RD: - // Phase 4: Collect remote reads - this->phase = CALVIN_EXEC_WR; - break; - case CALVIN_EXEC_WR: - // Phase 5: Execute transaction / perform local writes - DEBUG("(%ld,%ld) execute writes\n",txn->txn_id,txn->batch_id); - rc = run_tpcc_phase5(); - this->phase = CALVIN_DONE; - break; - default: - assert(false); - } - } - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - txn_stats.wait_starttime = get_sys_clock(); - return rc; - -} - - -RC TPCCTxnManager::run_tpcc_phase2() { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - RC rc = RCOK; - assert(CC_ALG == CALVIN); - - uint64_t w_id = tpcc_query->w_id; - uint64_t d_id = tpcc_query->d_id; - uint64_t c_id = tpcc_query->c_id; - //uint64_t d_w_id = tpcc_query->d_w_id; - //uint64_t c_w_id = tpcc_query->c_w_id; - //uint64_t c_d_id = tpcc_query->c_d_id; - //char * c_last = tpcc_query->c_last; - //double h_amount = tpcc_query->h_amount; - //bool by_last_name = tpcc_query->by_last_name; - bool remote = tpcc_query->remote; - uint64_t ol_cnt = tpcc_query->ol_cnt; - uint64_t o_entry_d = tpcc_query->o_entry_d; - //uint64_t o_id = tpcc_query->o_id; - - uint64_t part_id_w = wh_to_part(w_id); - //uint64_t part_id_c_w = wh_to_part(c_w_id); - bool w_loc = GET_NODE_ID(part_id_w) == g_node_id; - //bool c_w_loc = GET_NODE_ID(part_id_c_w) == g_node_id; - - - switch (tpcc_query->txn_type) { - case TPCC_PAYMENT : - break; - case TPCC_NEW_ORDER : - if(w_loc) { - rc = new_order_0( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - rc = new_order_1( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - rc = new_order_2( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - rc = new_order_3( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - rc = new_order_4( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - tpcc_query->o_id = *(int64_t *) row->get_value(D_NEXT_O_ID); - //rc = new_order_5( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - } - for(uint64_t i = 0; i < tpcc_query->ol_cnt; i++) { - - uint64_t ol_number = i; - uint64_t ol_i_id = tpcc_query->items[ol_number]->ol_i_id; - uint64_t ol_supply_w_id = tpcc_query->items[ol_number]->ol_supply_w_id; - //uint64_t ol_quantity = tpcc_query->items[ol_number].ol_quantity; - //uint64_t ol_amount = tpcc_query->ol_amount; - uint64_t part_id_ol_supply_w = wh_to_part(ol_supply_w_id); - bool ol_supply_w_loc = GET_NODE_ID(part_id_ol_supply_w) == g_node_id; - if(ol_supply_w_loc) { - rc = new_order_6(ol_i_id, row); - rc = new_order_7(ol_i_id, row); - } - } - break; - default: - assert(false); - } - return rc; -} - -RC TPCCTxnManager::run_tpcc_phase5() { - TPCCQuery* tpcc_query = (TPCCQuery*) query; - RC rc = RCOK; - assert(CC_ALG == CALVIN); - - uint64_t w_id = tpcc_query->w_id; - uint64_t d_id = tpcc_query->d_id; - uint64_t c_id = tpcc_query->c_id; - uint64_t d_w_id = tpcc_query->d_w_id; - uint64_t c_w_id = tpcc_query->c_w_id; - uint64_t c_d_id = tpcc_query->c_d_id; - char * c_last = tpcc_query->c_last; - double h_amount = tpcc_query->h_amount; - bool by_last_name = tpcc_query->by_last_name; - bool remote = tpcc_query->remote; - uint64_t ol_cnt = tpcc_query->ol_cnt; - uint64_t o_entry_d = tpcc_query->o_entry_d; - uint64_t o_id = tpcc_query->o_id; - - uint64_t part_id_w = wh_to_part(w_id); - uint64_t part_id_c_w = wh_to_part(c_w_id); - bool w_loc = GET_NODE_ID(part_id_w) == g_node_id; - bool c_w_loc = GET_NODE_ID(part_id_c_w) == g_node_id; - - - switch (tpcc_query->txn_type) { - case TPCC_PAYMENT : - if(w_loc) { - rc = run_payment_0(w_id, d_id, d_w_id, h_amount, row); - rc = run_payment_1(w_id, d_id, d_w_id, h_amount, row); - rc = run_payment_2(w_id, d_id, d_w_id, h_amount, row); - rc = run_payment_3(w_id, d_id, d_w_id, h_amount, row); - } - if(c_w_loc) { - rc = run_payment_4( w_id, d_id, c_id, c_w_id, c_d_id, c_last, h_amount, by_last_name, row); - rc = run_payment_5( w_id, d_id, c_id, c_w_id, c_d_id, c_last, h_amount, by_last_name, row); - } - break; - case TPCC_NEW_ORDER : - if(w_loc) { - //rc = new_order_4( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - rc = new_order_5( w_id, d_id, c_id, remote, ol_cnt, o_entry_d, &tpcc_query->o_id, row); - } - for(uint64_t i = 0; i < tpcc_query->ol_cnt; i++) { - - uint64_t ol_number = i; - uint64_t ol_i_id = tpcc_query->items[ol_number]->ol_i_id; - uint64_t ol_supply_w_id = tpcc_query->items[ol_number]->ol_supply_w_id; - uint64_t ol_quantity = tpcc_query->items[ol_number]->ol_quantity; - uint64_t ol_amount = tpcc_query->ol_amount; - uint64_t part_id_ol_supply_w = wh_to_part(ol_supply_w_id); - bool ol_supply_w_loc = GET_NODE_ID(part_id_ol_supply_w) == g_node_id; - if(ol_supply_w_loc) { - rc = new_order_8(w_id, d_id, remote, ol_i_id, ol_supply_w_id, ol_quantity, ol_number, - o_id, row); - rc = new_order_9(w_id, d_id, remote, ol_i_id, ol_supply_w_id, ol_quantity, ol_number, - ol_amount, o_id, row); - } - } - break; - default: - assert(false); - } - return rc; -} diff --git a/contrib/deneva/benchmarks/tpcc_wl.cpp b/contrib/deneva/benchmarks/tpcc_wl.cpp deleted file mode 100644 index e168af34..00000000 --- a/contrib/deneva/benchmarks/tpcc_wl.cpp +++ /dev/null @@ -1,623 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "tpcc.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "index_hash.h" -#include "index_btree.h" -#include "tpcc_helper.h" -#include "row.h" -#include "query.h" -#include "txn.h" -#include "mem_alloc.h" -#include "tpcc_const.h" - -RC TPCCWorkload::init() { - Workload::init(); - //char * cpath = getenv("GRAPHITE_HOME"); - char * cpath = getenv("SCHEMA_PATH"); - string path; - if (cpath == NULL) - path = "./benchmarks/"; - else { - path = string(cpath); - // Graphite: - //path += "/tests/apps/dbms/"; - } -#if TPCC_SMALL - path += "TPCC_short_schema.txt"; -#else - path += "TPCC_full_schema.txt"; -#endif - cout << "reading schema file: " << path << endl; - delivering = new bool * [g_num_wh + 1]; - for (UInt32 wid = 1; wid <= g_num_wh; wid ++) - delivering[wid] = (bool *) mem_allocator.alloc(CL_SIZE); - - printf("Initializing schema... "); - fflush(stdout); - init_schema( path.c_str() ); - printf("Done\n"); - printf("Initializing table... "); - fflush(stdout); - init_table(); - printf("Done\n"); - fflush(stdout); - return RCOK; -} - -RC TPCCWorkload::init_schema(const char * schema_file) { - Workload::init_schema(schema_file); - t_warehouse = tables["WAREHOUSE"]; - t_district = tables["DISTRICT"]; - t_customer = tables["CUSTOMER"]; - t_history = tables["HISTORY"]; - t_neworder = tables["NEW-ORDER"]; - t_order = tables["ORDER"]; - t_orderline = tables["ORDER-LINE"]; - t_item = tables["ITEM"]; - t_stock = tables["STOCK"]; - - i_item = indexes["ITEM_IDX"]; - i_warehouse = indexes["WAREHOUSE_IDX"]; - i_district = indexes["DISTRICT_IDX"]; - i_customer_id = indexes["CUSTOMER_ID_IDX"]; - i_customer_last = indexes["CUSTOMER_LAST_IDX"]; - i_stock = indexes["STOCK_IDX"]; -// i_order = indexes["ORDER_IDX"]; -// i_orderline = indexes["ORDER-LINE_IDX"]; - return RCOK; -} - -RC TPCCWorkload::init_table() { - num_wh = g_num_wh; - -/******** fill in data ************/ -// data filling process: -//- item -//- wh -// - stock -// - dist -// - cust -// - hist -// - order -// - new order -// - order line -/**********************************/ - - pthread_t * p_thds = new pthread_t[g_init_parallelism - 1]; - thr_args * tt = new thr_args[g_init_parallelism]; - for (UInt32 i = 0; i < g_init_parallelism ; i++) { - tt[i].wl = this; - tt[i].id = i; - } - // Stock table - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - pthread_create(&p_thds[i], NULL, threadInitStock, &tt[i]); - } - threadInitStock(&tt[g_init_parallelism-1]); - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - int rc = pthread_join(p_thds[i], NULL); - if (rc) { - printf("ERROR; return code from pthread_join() is %d\n", rc); - exit(-1); - } - } - printf("STOCK Done\n"); - fflush(stdout); - // Item Table - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - pthread_create(&p_thds[i], NULL, threadInitItem, &tt[i]); - } - threadInitItem(&tt[g_init_parallelism-1]); - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - int rc = pthread_join(p_thds[i], NULL); - if (rc) { - printf("ERROR; return code from pthread_join() is %d\n", rc); - exit(-1); - } - } - printf("ITEM Done\n"); - fflush(stdout); - // Customer Table - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - pthread_create(&p_thds[i], NULL, threadInitCust, &tt[i]); - } - threadInitCust(&tt[g_init_parallelism-1]); - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - int rc = pthread_join(p_thds[i], NULL); - if (rc) { - printf("ERROR; return code from pthread_join() is %d\n", rc); - exit(-1); - } - } - printf("ITEM Done\n"); - fflush(stdout); - - // Order Table - /* - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - pthread_create(&p_thds[i], NULL, threadInitOrder, &tt[i]); - } - threadInitOrder(&tt[g_init_parallelism-1]); - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - int rc = pthread_join(p_thds[i], NULL); - if (rc) { - printf("ERROR; return code from pthread_join() is %d\n", rc); - exit(-1); - } - } - printf("ORDER Done\n"); - fflush(stdout); - */ - threadInitWh(this); - printf("WAREHOUSE Done\n"); - fflush(stdout); - threadInitDist(this); - printf("DISTRICT Done\n"); - fflush(stdout); - threadInitHist(this); - printf("HISTORY Done\n"); - fflush(stdout); - - /* - UInt32 cust_thr_cnt = g_dist_per_wh/2; - thr_args * tt = new thr_args[cust_thr_cnt]; - pthread_t * p_thds = new pthread_t[2+cust_thr_cnt]; - pthread_create(&p_thds[0], NULL, threadInitStock, this); - pthread_create(&p_thds[1], NULL, threadInitHist, this); - for(UInt32 i=0;iinit( this); - return RCOK; -} - -void TPCCWorkload::init_tab_item(int id) { - if (WL_VERB) printf("[init] loading item table\n"); - for (UInt32 i = id+1; i <= g_max_items; i+=g_init_parallelism) { - row_t * row; - uint64_t row_id; - t_item->get_new_row(row, 0, row_id); - row->set_primary_key(i); - row->set_value(I_ID, i); - row->set_value(I_IM_ID, URand(1L,10000L)); - char name[24]; - //MakeAlphaString(14, 24, name); - row->set_value(I_NAME, name); - row->set_value(I_PRICE, URand(1, 100)); - char data[50]; - //MakeAlphaString(26, 50, data); - if (RAND(10) == 0) strcpy(data, "original"); - row->set_value(I_DATA, data); - - index_insert(i_item, i, row, 0); - } -} - -void TPCCWorkload::init_tab_wh() { - if (WL_VERB) printf("[init] workload table.\n"); - for (UInt32 wid = 1; wid <= g_num_wh; wid ++) { - if(GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - row_t * row; - uint64_t row_id; - t_warehouse->get_new_row(row, 0, row_id); - row->set_primary_key(wid); - - row->set_value(W_ID, wid); - char name[10]; - MakeAlphaString(6, 10, name); - row->set_value(W_NAME, name); - char street[20]; - MakeAlphaString(10, 20, street); - row->set_value(W_STREET_1, street); - MakeAlphaString(10, 20, street); - row->set_value(W_STREET_2, street); - MakeAlphaString(10, 20, street); - row->set_value(W_CITY, street); - char state[2]; - MakeAlphaString(2, 2, state); /* State */ - row->set_value(W_STATE, state); - char zip[9]; - MakeNumberString(9, 9, zip); /* Zip */ - row->set_value(W_ZIP, zip); - double tax = (double)URand(0L,200L)/1000.0; - double w_ytd=300000.00; - row->set_value(W_TAX, tax); - row->set_value(W_YTD, w_ytd); - - index_insert(i_warehouse, wid, row, wh_to_part(wid)); - } - - return; -} - -void TPCCWorkload::init_tab_dist(uint64_t wid) { - for (uint64_t did = 1; did <= g_dist_per_wh; did++) { - row_t * row; - uint64_t row_id; - t_district->get_new_row(row, 0, row_id); - row->set_primary_key(did); - - row->set_value(D_ID, did); - row->set_value(D_W_ID, wid); - char name[10]; - MakeAlphaString(6, 10, name); - row->set_value(D_NAME, name); - char street[20]; - MakeAlphaString(10, 20, street); - row->set_value(D_STREET_1, street); - MakeAlphaString(10, 20, street); - row->set_value(D_STREET_2, street); - MakeAlphaString(10, 20, street); - row->set_value(D_CITY, street); - char state[2]; - MakeAlphaString(2, 2, state); /* State */ - row->set_value(D_STATE, state); - char zip[9]; - MakeNumberString(9, 9, zip); /* Zip */ - row->set_value(D_ZIP, zip); - double tax = (double)URand(0L,200L)/1000.0; - double w_ytd=30000.00; - row->set_value(D_TAX, tax); - row->set_value(D_YTD, w_ytd); - row->set_value(D_NEXT_O_ID, 3001); - - index_insert(i_district, distKey(did, wid), row, wh_to_part(wid)); - } -} - -void TPCCWorkload::init_tab_stock(int id, uint64_t wid) { - - for (UInt32 sid = id + 1; sid <= g_max_items; sid+=g_init_parallelism) { - row_t * row; - uint64_t row_id; - t_stock->get_new_row(row, 0, row_id); - row->set_primary_key(sid); - row->set_value(S_I_ID, sid); - row->set_value(S_W_ID, wid); - row->set_value(S_QUANTITY, URand(10, 100)); - row->set_value(S_REMOTE_CNT, 0); -#if !TPCC_SMALL - char s_dist[25]; - char row_name[10] = "S_DIST_"; - for (int i = 1; i <= 10; i++) { - if (i < 10) { - row_name[7] = '0'; - row_name[8] = i + '0'; - } else { - row_name[7] = '1'; - row_name[8] = '0'; - } - row_name[9] = '\0'; - //MakeAlphaString(24, 24, s_dist); - row->set_value(row_name, s_dist); - } - row->set_value(S_YTD, 0); - row->set_value(S_ORDER_CNT, 0); - char s_data[50]; - /* - int len = MakeAlphaString(26, 50, s_data); - if (rand() % 100 < 10) { - int idx = URand(0, len - 8); - strcpy(&s_data[idx], "original"); - } - */ - row->set_value(S_DATA, s_data); -#endif - index_insert(i_stock, stockKey(sid, wid), row, wh_to_part(wid)); - } -} - -void TPCCWorkload::init_tab_cust(int id, uint64_t did, uint64_t wid) { - assert(g_cust_per_dist >= 1000); - for (UInt32 cid = id+1; cid <= g_cust_per_dist; cid += g_init_parallelism) { - row_t * row; - uint64_t row_id; - t_customer->get_new_row(row, 0, row_id); - row->set_primary_key(cid); - - row->set_value(C_ID, cid); - row->set_value(C_D_ID, did); - row->set_value(C_W_ID, wid); - char c_last[LASTNAME_LEN]; - if (cid <= 1000) - Lastname(cid - 1, c_last); - else - Lastname(NURand(255,0,999), c_last); - row->set_value(C_LAST, c_last); - /* -#if !TPCC_SMALL - char tmp[2]; - tmp[0] = 'O'; - tmp[1] = 'E'; - row->set_value(C_MIDDLE, tmp); - char c_first[FIRSTNAME_LEN]; - MakeAlphaString(FIRSTNAME_MINLEN, sizeof(c_first), c_first); - row->set_value(C_FIRST, c_first); - char street[20]; - MakeAlphaString(10, 20, street); - row->set_value(C_STREET_1, street); - MakeAlphaString(10, 20, street); - row->set_value(C_STREET_2, street); - MakeAlphaString(10, 20, street); - row->set_value(C_CITY, street); - char state[2]; - MakeAlphaString(2, 2, state); // State - row->set_value(C_STATE, state); - char zip[9]; - MakeNumberString(9, 9, zip); // Zip - row->set_value(C_ZIP, zip); - char phone[16]; - MakeNumberString(16, 16, phone); // Zip - row->set_value(C_PHONE, phone); - row->set_value(C_SINCE, 0); - row->set_value(C_CREDIT_LIM, 50000); - row->set_value(C_DELIVERY_CNT, 0); - char c_data[500]; - MakeAlphaString(300, 500, c_data); - row->set_value(C_DATA, c_data); - -#endif -*/ - if (RAND(10) == 0) { - char tmp[] = "GC"; - row->set_value(C_CREDIT, tmp); - } else { - char tmp[] = "BC"; - row->set_value(C_CREDIT, tmp); - } - row->set_value(C_DISCOUNT, (double)RAND(5000) / 10000); - row->set_value(C_BALANCE, -10.0); - row->set_value(C_YTD_PAYMENT, 10.0); - row->set_value(C_PAYMENT_CNT, 1); - uint64_t key; - key = custNPKey(c_last, did, wid); - index_insert(i_customer_last, key, row, wh_to_part(wid)); - key = custKey(cid, did, wid); - index_insert(i_customer_id, key, row, wh_to_part(wid)); - } -} - -void TPCCWorkload::init_tab_hist(uint64_t c_id, uint64_t d_id, uint64_t w_id) { - row_t * row; - uint64_t row_id; - t_history->get_new_row(row, 0, row_id); - row->set_primary_key(0); - row->set_value(H_C_ID, c_id); - row->set_value(H_C_D_ID, d_id); - row->set_value(H_D_ID, d_id); - row->set_value(H_C_W_ID, w_id); - row->set_value(H_W_ID, w_id); - row->set_value(H_DATE, 0); - row->set_value(H_AMOUNT, 10.0); -#if !TPCC_SMALL - char h_data[24]; - //MakeAlphaString(12, 24, h_data); - row->set_value(H_DATA, h_data); -#endif - -} - -void TPCCWorkload::init_tab_order(int id, uint64_t did, uint64_t wid) { - init_permutation(); /* initialize permutation of customer numbers */ - for (UInt32 oid = id+1; oid <= g_cust_per_dist; oid+=g_init_parallelism) { - row_t * row; - uint64_t row_id; - t_order->get_new_row(row, 0, row_id); - row->set_primary_key(oid); - uint64_t o_ol_cnt = 1; - uint64_t cid = get_permutation(); - row->set_value(O_ID, oid); - row->set_value(O_C_ID, cid); - row->set_value(O_D_ID, did); - row->set_value(O_W_ID, wid); - uint64_t o_entry = 2013; - row->set_value(O_ENTRY_D, o_entry); - if (oid < 2101) - row->set_value(O_CARRIER_ID, URand(1, 10)); - else - row->set_value(O_CARRIER_ID, 0); - o_ol_cnt = URand(5, 15); - row->set_value(O_OL_CNT, o_ol_cnt); - row->set_value(O_ALL_LOCAL, 1); - - // Insert to indexes -// uint64_t key = custKey(cid, did, wid); -// index_insert(i_order_wdc, key, row, wh_to_part(wid)); - -// key = orderPrimaryKey(wid, did, oid); -// index_insert(i_order_wdo, key, row, wh_to_part(wid)); - - // ORDER-LINE -#if !TPCC_SMALL - for (uint64_t ol = 1; ol <= o_ol_cnt; ol++) { - t_orderline->get_new_row(row, 0, row_id); - row->set_value(OL_O_ID, oid); - row->set_value(OL_D_ID, did); - row->set_value(OL_W_ID, wid); - row->set_value(OL_NUMBER, ol); - row->set_value(OL_I_ID, URand(1, 100000)); - row->set_value(OL_SUPPLY_W_ID, wid); - if (oid < 2101) { - row->set_value(OL_DELIVERY_D, o_entry); - row->set_value(OL_AMOUNT, 0); - } else { - row->set_value(OL_DELIVERY_D, 0); - row->set_value(OL_AMOUNT, (double)URand(1, 999999)/100); - } - row->set_value(OL_QUANTITY, 5); - char ol_dist_info[24]; - MakeAlphaString(24, 24, ol_dist_info); - row->set_value(OL_DIST_INFO, ol_dist_info); - -// uint64_t key = orderlineKey(wid, did, oid); -// index_insert(i_orderline, key, row, wh_to_part(wid)); - -// key = distKey(did, wid); -// index_insert(i_orderline_wd, key, row, wh_to_part(wid)); - } -#endif - // NEW ORDER - if (oid > 2100) { - t_neworder->get_new_row(row, 0, row_id); - row->set_value(NO_O_ID, oid); - row->set_value(NO_D_ID, did); - row->set_value(NO_W_ID, wid); - } - } -} - -/*==================================================================+ -| ROUTINE NAME -| InitPermutation -+==================================================================*/ - -void TPCCWorkload::init_permutation() { - UInt32 i; - perm_count = 0; - perm_c_id = new uint64_t[g_cust_per_dist]; - // Init with consecutive values - for(i = 0; i < g_cust_per_dist; i++) { - perm_c_id[i] = i+1; - } - - // shuffle - for(i=0; i < g_cust_per_dist-1; i++) { - uint64_t j = URand(i+1, g_cust_per_dist-1); - uint64_t tmp = perm_c_id[i]; - perm_c_id[i] = perm_c_id[j]; - perm_c_id[j] = tmp; - } - return; -} - - -/*==================================================================+ -| ROUTINE NAME -| GetPermutation -+==================================================================*/ - -uint64_t TPCCWorkload::get_permutation() { - if(perm_count >= g_cust_per_dist) { - // wrapped around, restart at 0 - perm_count = 0; - } - return (uint64_t) perm_c_id[perm_count++]; -} - -void * TPCCWorkload::threadInitItem(void * This) { - TPCCWorkload * wl = ((thr_args*) This)->wl; - int id = ((thr_args*) This)->id; - wl->init_tab_item(id); - printf("ITEM Done\n"); - return NULL; -} - -void * TPCCWorkload::threadInitWh(void * This) { - TPCCWorkload * wl = (TPCCWorkload*) This; - wl->init_tab_wh(); - printf("WAREHOUSE Done\n"); - return NULL; -} - -void * TPCCWorkload::threadInitDist(void * This) { - TPCCWorkload * wl = (TPCCWorkload*) This; - for (uint64_t wid = 1; wid <= g_num_wh; wid ++) { - if (GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - wl->init_tab_dist(wid); - } - printf("DISTRICT Done\n"); - return NULL; -} - -void * TPCCWorkload::threadInitStock(void * This) { - TPCCWorkload * wl = ((thr_args*) This)->wl; - int id = ((thr_args*) This)->id; - for (uint64_t wid = 1; wid <= g_num_wh; wid ++) { - if (GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - wl->init_tab_stock(id,wid); - } - printf("STOCK Done\n"); - return NULL; -} - -void * TPCCWorkload::threadInitCust(void * This) { - TPCCWorkload * wl = ((thr_args*) This)->wl; - int id = ((thr_args*) This)->id; - for (uint64_t wid = 1; wid <= g_num_wh; wid ++) { - if (GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - for (uint64_t did = 1; did <= g_dist_per_wh; did++) { - wl->init_tab_cust(id,did, wid); - } - } - printf("CUSTOMER %d Done\n",((thr_args *)This)->id); - return NULL; -} - -void * TPCCWorkload::threadInitHist(void * This) { - TPCCWorkload * wl = (TPCCWorkload*) This; - for (uint64_t wid = 1; wid <= g_num_wh; wid ++) { - if (GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - for (uint64_t did = 1; did <= g_dist_per_wh; did++) - for (uint64_t cid = 1; cid <= g_cust_per_dist; cid++) wl->init_tab_hist(cid, did, wid); - } - printf("HISTORY Done\n"); - return NULL; -} - -void * TPCCWorkload::threadInitOrder(void * This) { - TPCCWorkload * wl = ((thr_args*) This)->wl; - int id = ((thr_args*) This)->id; - for (uint64_t wid = 1; wid <= g_num_wh; wid ++) { - if (GET_NODE_ID(wh_to_part(wid)) != g_node_id) continue; - for (uint64_t did = 1; did <= g_dist_per_wh; did++) wl->init_tab_order(id, did, wid); - } - printf("ORDER Done\n"); - return NULL; -} - - - diff --git a/contrib/deneva/benchmarks/ycsb.h b/contrib/deneva/benchmarks/ycsb.h deleted file mode 100644 index ac1fc1ae..00000000 --- a/contrib/deneva/benchmarks/ycsb.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _SYNTH_BM_H_ -#define _SYNTH_BM_H_ - -#include "wl.h" -#include "txn.h" -#include "global.h" -#include "helper.h" - -class YCSBQuery; -class YCSBQueryMessage; -class ycsb_request; - -enum YCSBRemTxnType { - YCSB_0, - YCSB_1, - YCSB_FIN, - YCSB_RDONE -}; - -class YCSBWorkload : public Workload { -public : - RC init(); - RC init_table(); - RC init_schema(const char * schema_file); - RC get_txn_man(TxnManager *& txn_manager); - int key_to_part(uint64_t key); - INDEX * the_index; - table_t * the_table; -private: - void init_table_parallel(); - void * init_table_slice(); - static void * threadInitTable(void * This) { - ((YCSBWorkload *)This)->init_table_slice(); - return NULL; - } - pthread_mutex_t insert_lock; - // For parallel initialization - static int next_tid; -}; - -class YCSBTxnManager : public TxnManager { -public: - void init(uint64_t thd_id, Workload * h_wl); - void reset(); - void partial_reset(); - RC acquire_locks(); - RC run_txn(); - RC run_txn_post_wait(); - RC run_calvin_txn(); - void copy_remote_requests(YCSBQueryMessage * msg); -private: - void next_ycsb_state(); - RC run_txn_state(); - RC run_ycsb_0(ycsb_request * req,row_t *& row_local); - RC run_ycsb_1(access_t acctype, row_t * row_local); - RC run_ycsb(); - bool is_done() ; - bool is_local_request(uint64_t idx) ; - RC send_remote_request() ; - - row_t * row; - YCSBWorkload * _wl; - YCSBRemTxnType state; - uint64_t next_record_id; -}; - -#endif diff --git a/contrib/deneva/benchmarks/ycsb_query.cpp b/contrib/deneva/benchmarks/ycsb_query.cpp deleted file mode 100644 index f5d0ea9c..00000000 --- a/contrib/deneva/benchmarks/ycsb_query.cpp +++ /dev/null @@ -1,394 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "query.h" -#include "ycsb_query.h" -#include "mem_alloc.h" -#include "wl.h" -#include "ycsb.h" -#include "table.h" -#include "helper.h" -#include "message.h" - -uint64_t YCSBQueryGenerator::the_n = 0; -double YCSBQueryGenerator::denom = 0; - -void YCSBQueryGenerator::init() { - mrand = (myrand *) mem_allocator.alloc(sizeof(myrand)); - mrand->init(get_sys_clock()); - if (SKEW_METHOD == ZIPF) { - zeta_2_theta = zeta(2, g_zipf_theta); - uint64_t table_size = g_synth_table_size / g_part_cnt; - the_n = table_size - 1; - denom = zeta(the_n, g_zipf_theta); - } -} - -BaseQuery * YCSBQueryGenerator::create_query(Workload * h_wl, uint64_t home_partition_id) { - BaseQuery * query; - if (SKEW_METHOD == HOT) { - query = gen_requests_hot(home_partition_id, h_wl); - } else if (SKEW_METHOD == ZIPF){ - assert(the_n != 0); - query = gen_requests_zipf(home_partition_id, h_wl); - } - - return query; -} - -void YCSBQuery::print() { - - for(uint64_t i = 0; i < requests.size(); i++) { - printf("%d %ld, ",requests[i]->acctype,requests[i]->key); - } - printf("\n"); - /* - printf("YCSBQuery: %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n" - ,GET_NODE_ID(requests[0]->key) - ,GET_NODE_ID(requests[1]->key) - ,GET_NODE_ID(requests[2]->key) - ,GET_NODE_ID(requests[3]->key) - ,GET_NODE_ID(requests[4]->key) - ,GET_NODE_ID(requests[5]->key) - ,GET_NODE_ID(requests[6]->key) - ,GET_NODE_ID(requests[7]->key) - ,GET_NODE_ID(requests[8]->key) - ,GET_NODE_ID(requests[9]->key) - ); - */ -} - -void YCSBQuery::init() { - requests.init(g_req_per_query); - BaseQuery::init(); -} - -void YCSBQuery::copy_request_to_msg(YCSBQuery * ycsb_query, YCSBQueryMessage * msg, uint64_t id) { -/* - DEBUG_M("YCSBQuery::copy_request_to_msg ycsb_request alloc\n"); - ycsb_request * req = (ycsb_request*) mem_allocator.alloc(sizeof(ycsb_request)); - req->copy(ycsb_query->requests[id]); - msg->requests.add(req); -*/ - msg->requests.add(ycsb_query->requests[id]); -} - -void YCSBQuery::release_requests() { - // A bit of a hack to ensure that original requests in client query queue aren't freed - if (SERVER_GENERATE_QUERIES && requests.size() == g_req_per_query) return; - for(uint64_t i = 0; i < requests.size(); i++) { - DEBUG_M("YCSBQuery::release() ycsb_request free\n"); - mem_allocator.free(requests[i],sizeof(ycsb_request)); - } - -} - -void YCSBQuery::reset() { - BaseQuery::clear(); -#if CC_ALG != CALVIN - release_requests(); -#endif - requests.clear(); -} - -void YCSBQuery::release() { - BaseQuery::release(); - DEBUG_M("YCSBQuery::release() free\n"); -#if CC_ALG != CALVIN - release_requests(); -#endif - requests.release(); -} - -uint64_t YCSBQuery::get_participants(Workload * wl) { - - uint64_t participant_cnt = 0; - assert(participant_nodes.size()==0); - assert(active_nodes.size()==0); - for(uint64_t i = 0; i < g_node_cnt; i++) { - participant_nodes.add(0); - active_nodes.add(0); - } - assert(participant_nodes.size()==g_node_cnt); - assert(active_nodes.size()==g_node_cnt); - for(uint64_t i = 0; i < requests.size(); i++) { - uint64_t req_nid = GET_NODE_ID(((YCSBWorkload*)wl)->key_to_part(requests[i]->key)); - if(requests[i]->acctype == RD) { - if (participant_nodes[req_nid] == 0) ++participant_cnt; - participant_nodes.set(req_nid,1); - } - if (requests[i]->acctype == WR) active_nodes.set(req_nid, 1); - } - return participant_cnt; -} - -uint64_t YCSBQuery::participants(bool *& pps,Workload * wl) { - int n = 0; - for (uint64_t i = 0; i < g_node_cnt; i++) pps[i] = false; - - for(uint64_t i = 0; i < requests.size(); i++) { - uint64_t req_nid = GET_NODE_ID(((YCSBWorkload*)wl)->key_to_part(requests[i]->key)); - if (!pps[req_nid]) n++; - pps[req_nid] = true; - } - return n; -} - -std::set YCSBQuery::participants(Message * msg, Workload * wl) { - std::set participant_set; - YCSBClientQueryMessage* ycsb_msg = ((YCSBClientQueryMessage*)msg); - for(uint64_t i = 0; i < ycsb_msg->requests.size(); i++) { - uint64_t req_nid = GET_NODE_ID(((YCSBWorkload*)wl)->key_to_part(ycsb_msg->requests[i]->key)); - participant_set.insert(req_nid); - } - return participant_set; -} - -bool YCSBQuery::readonly() { - for(uint64_t i = 0; i < requests.size(); i++) { - if(requests[i]->acctype == WR) { - return false; - } - } - return true; -} - -// The following algorithm comes from the paper: -// Quickly generating billion-record synthetic databases -// However, it seems there is a small bug. -// The original paper says zeta(theta, 2.0). But I guess it should be -// zeta(2.0, theta). -double YCSBQueryGenerator::zeta(uint64_t n, double theta) { - double sum = 0; - for (uint64_t i = 1; i <= n; i++) sum += pow(1.0 / i, theta); - return sum; -} - -uint64_t YCSBQueryGenerator::zipf(uint64_t n, double theta) { - assert(this->the_n == n); - assert(theta == g_zipf_theta); - double alpha = 1 / (1 - theta); - double zetan = denom; - double eta = (1 - pow(2.0 / n, 1 - theta)) / (1 - zeta_2_theta / zetan); -// double eta = (1 - pow(2.0 / n, 1 - theta)) / -// (1 - zeta_2_theta / zetan); - double u = (double)(mrand->next() % 10000000) / 10000000; - double uz = u * zetan; - if (uz < 1) return 1; - if (uz < 1 + pow(0.5, theta)) return 2; - return 1 + (uint64_t)(n * pow(eta*u -eta + 1, alpha)); -} - - -BaseQuery * YCSBQueryGenerator::gen_requests_hot(uint64_t home_partition_id, Workload * h_wl) { - YCSBQuery * query = (YCSBQuery*) mem_allocator.alloc(sizeof(YCSBQuery)); - query->requests.init(g_req_per_query); - - uint64_t access_cnt = 0; - set all_keys; - set partitions_accessed; - double r_mpt = (double)(mrand->next() % 10000) / 10000; - uint64_t part_limit; - if(r_mpt < g_mpr) - part_limit = g_part_per_txn; - else - part_limit = 1; - uint64_t hot_key_max = (uint64_t)g_data_perc; - double r_twr = (double)(mrand->next() % 10000) / 10000; - - int rid = 0; - for (UInt32 i = 0; i < g_req_per_query; i ++) { - double r = (double)(mrand->next() % 10000) / 10000; - double hot = (double)(mrand->next() % 10000) / 10000; - uint64_t partition_id; - ycsb_request * req = (ycsb_request*) mem_allocator.alloc(sizeof(ycsb_request)); - if (r_twr < g_txn_read_perc || r < g_tup_read_perc) - req->acctype = RD; - else - req->acctype = WR; - - uint64_t row_id = 0; - if ( FIRST_PART_LOCAL && rid == 0) { - if(hot < g_access_perc) { - row_id = - (uint64_t)(mrand->next() % (hot_key_max / g_part_cnt)) * g_part_cnt + home_partition_id; - } else { - uint64_t nrand = (uint64_t)mrand->next(); - row_id = ((nrand % (g_synth_table_size / g_part_cnt - (hot_key_max / g_part_cnt))) + - hot_key_max / g_part_cnt) * - g_part_cnt + - home_partition_id; - } - - partition_id = row_id % g_part_cnt; - assert(row_id % g_part_cnt == home_partition_id); - } else { - while(1) { - if(hot < g_access_perc) { - row_id = (uint64_t)(mrand->next() % hot_key_max); - } else { - row_id = ((uint64_t)(mrand->next() % (g_synth_table_size - hot_key_max))) + hot_key_max; - } - partition_id = row_id % g_part_cnt; - - if (g_strict_ppt && partitions_accessed.size() < part_limit && - (partitions_accessed.size() + (g_req_per_query - rid) >= part_limit) && - partitions_accessed.count(partition_id) > 0) - continue; - if (partitions_accessed.count(partition_id) > 0) break; - if (partitions_accessed.size() == part_limit) continue; - break; - } - } - partitions_accessed.insert(partition_id); - assert(row_id < g_synth_table_size); - uint64_t primary_key = row_id; - //uint64_t part_id = row_id % g_part_cnt; - req->key = primary_key; - req->value = mrand->next() % (1<<8); - // Make sure a single row is not accessed twice - if (all_keys.find(req->key) == all_keys.end()) { - all_keys.insert(req->key); - access_cnt ++; - } else { - // Need to have the full g_req_per_query amount - i--; - continue; - } - rid ++; - - //query->requests.push_back(*req); - query->requests.add(req); - } - assert(query->requests.size() == g_req_per_query); - // Sort the requests in key order. - if (g_key_order) { - for(uint64_t i = 0; i < query->requests.size(); i++) { - for(uint64_t j = query->requests.size() - 1; j > i ; j--) { - if(query->requests[j]->key < query->requests[j-1]->key) { - query->requests.swap(j,j-1); - } - } - } - // std::sort(query->requests.begin(),query->requests.end(),[](ycsb_request lhs, ycsb_request - // rhs) { return lhs.key < rhs.key;}); - } - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - - return query; - -} - -BaseQuery * YCSBQueryGenerator::gen_requests_zipf(uint64_t home_partition_id, Workload * h_wl) { - YCSBQuery * query = (YCSBQuery*) mem_allocator.alloc(sizeof(YCSBQuery)); - new(query) YCSBQuery(); - query->requests.init(g_req_per_query); - - uint64_t access_cnt = 0; - set all_keys; - set partitions_accessed; - uint64_t table_size = g_synth_table_size / g_part_cnt; - - double r_twr = (double)(mrand->next() % 10000) / 10000; - - int rid = 0; - for (UInt32 i = 0; i < g_req_per_query; i ++) { - double r = (double)(mrand->next() % 10000) / 10000; - uint64_t partition_id; -#ifdef LESS_DIS - if ( rid < 5) { - partition_id = home_partition_id;; - } else { - partition_id = (home_partition_id + 1) % g_part_cnt; - } -#else - #ifdef NO_REMOTE - partition_id = home_partition_id; - #else - if ( FIRST_PART_LOCAL && rid == 0) { - partition_id = home_partition_id; - } else { - partition_id = mrand->next() % g_part_cnt; - if(g_strict_ppt && g_part_per_txn <= g_part_cnt) { - while ((partitions_accessed.size() < g_part_per_txn && - partitions_accessed.count(partition_id) > 0) || - (partitions_accessed.size() == g_part_per_txn && - partitions_accessed.count(partition_id) == 0)) { - partition_id = mrand->next() % g_part_cnt; - } - } - } - #endif -#endif - ycsb_request * req = (ycsb_request*) mem_allocator.alloc(sizeof(ycsb_request)); - if (r_twr < g_txn_read_perc || r < g_tup_read_perc) - req->acctype = RD; - else - req->acctype = WR; - uint64_t row_id = zipf(table_size - 1, g_zipf_theta); - assert(row_id < table_size); - uint64_t primary_key = row_id * g_part_cnt + partition_id; - assert(primary_key < g_synth_table_size); - - req->key = primary_key; - req->value = mrand->next() % (1<<8); - // Make sure a single row is not accessed twice - if (all_keys.find(req->key) == all_keys.end()) { - all_keys.insert(req->key); - access_cnt ++; - } else { - // Need to have the full g_req_per_query amount - i--; - continue; - } - partitions_accessed.insert(partition_id); - rid ++; - - query->requests.add(req); - } - assert(query->requests.size() == g_req_per_query); - // Sort the requests in key order. - if (g_key_order) { - for(uint64_t i = 0; i < query->requests.size(); i++) { - for(uint64_t j = query->requests.size() - 1; j > i ; j--) { - if(query->requests[j]->key < query->requests[j-1]->key) { - query->requests.swap(j,j-1); - } - } - } - // std::sort(query->requests.begin(),query->requests.end(),[](ycsb_request lhs, ycsb_request - // rhs) { return lhs.key < rhs.key;}); - } - query->partitions.init(partitions_accessed.size()); - for(auto it = partitions_accessed.begin(); it != partitions_accessed.end(); ++it) { - query->partitions.add(*it); - } - - //query->print(); - return query; - -} diff --git a/contrib/deneva/benchmarks/ycsb_query.h b/contrib/deneva/benchmarks/ycsb_query.h deleted file mode 100644 index e3441e81..00000000 --- a/contrib/deneva/benchmarks/ycsb_query.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _YCSBQuery_H_ -#define _YCSBQuery_H_ - -#include "global.h" -#include "helper.h" -#include "query.h" -#include "array.h" - -class Workload; -class Message; -class YCSBQueryMessage; -class YCSBClientQueryMessage; - - -// Each YCSBQuery contains several ycsb_requests, -// each of which is a RD, WR or SCAN -// to a single table - -class ycsb_request { -public: - ycsb_request() {} - ycsb_request(const ycsb_request& req) : acctype(req.acctype), key(req.key), value(req.value) { } - void copy(ycsb_request * req) { - this->acctype = req->acctype; - this->key = req->key; - this->value = req->value; - } -// char table_name[80]; - access_t acctype; - uint64_t key; - char value; - // only for (qtype == SCAN) - //UInt32 scan_len; -}; - -class YCSBQueryGenerator : public QueryGenerator { -public: - void init(); - BaseQuery * create_query(Workload * h_wl, uint64_t home_partition_id); - -private: - BaseQuery * gen_requests_hot(uint64_t home_partition_id, Workload * h_wl); - BaseQuery * gen_requests_zipf(uint64_t home_partition_id, Workload * h_wl); - // for Zipfian distribution - double zeta(uint64_t n, double theta); - uint64_t zipf(uint64_t n, double theta); - - myrand * mrand; - static uint64_t the_n; - static double denom; - double zeta_2_theta; -}; - -class YCSBQuery : public BaseQuery { -public: - YCSBQuery() {} - ~YCSBQuery() {} - - void print(); - - void init(uint64_t thd_id, Workload * h_wl) {}; - void init(); - void release(); - void release_requests(); - void reset(); - uint64_t get_participants(Workload * wl); - static std::set participants(Message * msg, Workload * wl); - static void copy_request_to_msg(YCSBQuery * ycsb_query, YCSBQueryMessage * msg, uint64_t id); - uint64_t participants(bool *& pps,Workload * wl); - bool readonly(); - - //std::vector requests; - Array requests; - void* orig_request; - /* - uint64_t rid; - uint64_t access_cnt; - uint64_t request_cnt; - uint64_t req_i; - ycsb_request req; - uint64_t rqry_req_cnt; - */ - -}; - -#endif diff --git a/contrib/deneva/benchmarks/ycsb_txn.cpp b/contrib/deneva/benchmarks/ycsb_txn.cpp deleted file mode 100644 index 294f4a56..00000000 --- a/contrib/deneva/benchmarks/ycsb_txn.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "ycsb.h" -#include "ycsb_query.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "row.h" -#include "index_hash.h" -#include "index_btree.h" -#include "catalog.h" -#include "manager.h" -#include "row_lock.h" -#include "row_ts.h" -#include "row_mvcc.h" -#include "mem_alloc.h" -#include "query.h" -#include "msg_queue.h" -#include "message.h" - -void YCSBTxnManager::init(uint64_t thd_id, Workload * h_wl) { - TxnManager::init(thd_id, h_wl); - _wl = (YCSBWorkload *) h_wl; - reset(); -} - -void YCSBTxnManager::reset() { - state = YCSB_0; - next_record_id = 0; - TxnManager::reset(); -} - -RC YCSBTxnManager::acquire_locks() { - uint64_t starttime = get_sys_clock(); - assert(CC_ALG == CALVIN); - YCSBQuery* ycsb_query = (YCSBQuery*) query; - locking_done = false; - RC rc = RCOK; - incr_lr(); - assert(ycsb_query->requests.size() == g_req_per_query); - assert(phase == CALVIN_RW_ANALYSIS); - for (uint32_t rid = 0; rid < ycsb_query->requests.size(); rid ++) { - ycsb_request * req = ycsb_query->requests[rid]; - uint64_t part_id = _wl->key_to_part( req->key ); - DEBUG("LK Acquire (%ld,%ld) %d,%ld -> %ld\n", get_txn_id(), get_batch_id(), req->acctype, - req->key, GET_NODE_ID(part_id)); - if (GET_NODE_ID(part_id) != g_node_id) continue; - INDEX * index = _wl->the_index; - itemid_t * item; - item = index_read(index, req->key, part_id); - row_t * row = ((row_t *)item->location); - RC rc2 = get_lock(row,req->acctype); - if(rc2 != RCOK) { - rc = rc2; - } - } - if(decr_lr() == 0) { - if (ATOM_CAS(lock_ready, false, true)) rc = RCOK; - } - txn_stats.wait_starttime = get_sys_clock(); - /* - if(rc == WAIT && lock_ready_cnt == 0) { - if(ATOM_CAS(lock_ready,false,true)) - //lock_ready = true; - rc = RCOK; - } - */ - INC_STATS(get_thd_id(),calvin_sched_time,get_sys_clock() - starttime); - locking_done = true; - return rc; -} - - -RC YCSBTxnManager::run_txn() { - RC rc = RCOK; - assert(CC_ALG != CALVIN); - - if(IS_LOCAL(txn->txn_id) && state == YCSB_0 && next_record_id == 0) { - DEBUG("Running txn %ld\n",txn->txn_id); - //query->print(); - query->partitions_touched.add_unique(GET_PART_ID(0,g_node_id)); - } - - uint64_t starttime = get_sys_clock(); - - while(rc == RCOK && !is_done()) { - rc = run_txn_state(); - } - - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - txn_stats.wait_starttime = get_sys_clock(); - - if(IS_LOCAL(get_txn_id())) { - if(is_done() && rc == RCOK) - rc = start_commit(); - else if(rc == Abort) - rc = start_abort(); - } else if(rc == Abort){ - rc = abort(); - } - - return rc; - -} - -RC YCSBTxnManager::run_txn_post_wait() { - get_row_post_wait(row); - next_ycsb_state(); - return RCOK; -} - -bool YCSBTxnManager::is_done() { return next_record_id >= ((YCSBQuery*)query)->requests.size(); } - -void YCSBTxnManager::next_ycsb_state() { - switch(state) { - case YCSB_0: - state = YCSB_1; - break; - case YCSB_1: - next_record_id++; - if(!IS_LOCAL(txn->txn_id) || !is_done()) { - state = YCSB_0; - } else { - state = YCSB_FIN; - } - break; - case YCSB_FIN: - break; - default: - assert(false); - } -} - -bool YCSBTxnManager::is_local_request(uint64_t idx) { - return GET_NODE_ID(_wl->key_to_part(((YCSBQuery*)query)->requests[idx]->key)) == g_node_id; -} - -RC YCSBTxnManager::send_remote_request() { - YCSBQuery* ycsb_query = (YCSBQuery*) query; - uint64_t dest_node_id = GET_NODE_ID(ycsb_query->requests[next_record_id]->key); - ycsb_query->partitions_touched.add_unique(GET_PART_ID(0,dest_node_id)); - msg_queue.enqueue(get_thd_id(),Message::create_message(this,RQRY),dest_node_id); - return WAIT_REM; -} - -void YCSBTxnManager::copy_remote_requests(YCSBQueryMessage * msg) { - YCSBQuery* ycsb_query = (YCSBQuery*) query; - //msg->requests.init(ycsb_query->requests.size()); - uint64_t dest_node_id = GET_NODE_ID(ycsb_query->requests[next_record_id]->key); - while (next_record_id < ycsb_query->requests.size() && !is_local_request(next_record_id) && - GET_NODE_ID(ycsb_query->requests[next_record_id]->key) == dest_node_id) { - YCSBQuery::copy_request_to_msg(ycsb_query,msg,next_record_id++); - } -} - -RC YCSBTxnManager::run_txn_state() { - YCSBQuery* ycsb_query = (YCSBQuery*) query; - ycsb_request * req = ycsb_query->requests[next_record_id]; - uint64_t part_id = _wl->key_to_part( req->key ); - bool loc = GET_NODE_ID(part_id) == g_node_id; - - RC rc = RCOK; - - switch (state) { - case YCSB_0 : - if(loc) { - rc = run_ycsb_0(req,row); - } else { - rc = send_remote_request(); - - } - - break; - case YCSB_1 : - rc = run_ycsb_1(req->acctype,row); - break; - case YCSB_FIN : - state = YCSB_FIN; - break; - default: - assert(false); - } - - if (rc == RCOK) next_ycsb_state(); - - return rc; -} - -RC YCSBTxnManager::run_ycsb_0(ycsb_request * req,row_t *& row_local) { - RC rc = RCOK; - int part_id = _wl->key_to_part( req->key ); - access_t type = req->acctype; - itemid_t * m_item; - - m_item = index_read(_wl->the_index, req->key, part_id); - - row_t * row = ((row_t *)m_item->location); - - rc = get_row(row, type,row_local); - - return rc; - -} - -RC YCSBTxnManager::run_ycsb_1(access_t acctype, row_t * row_local) { - if (acctype == RD || acctype == SCAN) { - int fid = 0; - char * data = row_local->get_data(); - uint64_t fval __attribute__ ((unused)); - fval = *(uint64_t *)(&data[fid * 100]); -#if ISOLATION_LEVEL == READ_COMMITTED || ISOLATION_LEVEL == READ_UNCOMMITTED - // Release lock after read - release_last_row_lock(); -#endif - - } else { - assert(acctype == WR); - int fid = 0; - char * data = row_local->get_data(); - *(uint64_t *)(&data[fid * 100]) = 0; -#if YCSB_ABORT_MODE - if (data[0] == 'a') return RCOK; -#endif - -#if ISOLATION_LEVEL == READ_UNCOMMITTED - // Release lock after write - release_last_row_lock(); -#endif - } - return RCOK; -} -RC YCSBTxnManager::run_calvin_txn() { - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - YCSBQuery* ycsb_query = (YCSBQuery*) query; - DEBUG("(%ld,%ld) Run calvin txn\n",txn->txn_id,txn->batch_id); - while(!calvin_exec_phase_done() && rc == RCOK) { - DEBUG("(%ld,%ld) phase %d\n",txn->txn_id,txn->batch_id,this->phase); - switch(this->phase) { - case CALVIN_RW_ANALYSIS: - - // Phase 1: Read/write set analysis - calvin_expected_rsp_cnt = ycsb_query->get_participants(_wl); -#if YCSB_ABORT_MODE - if(query->participant_nodes[g_node_id] == 1) { - calvin_expected_rsp_cnt--; - } -#else - calvin_expected_rsp_cnt = 0; -#endif - DEBUG("(%ld,%ld) expects %d responses;\n", txn->txn_id, txn->batch_id, - calvin_expected_rsp_cnt); - - this->phase = CALVIN_LOC_RD; - break; - case CALVIN_LOC_RD: - // Phase 2: Perform local reads - DEBUG("(%ld,%ld) local reads\n",txn->txn_id,txn->batch_id); - rc = run_ycsb(); - //release_read_locks(query); - - this->phase = CALVIN_SERVE_RD; - break; - case CALVIN_SERVE_RD: - // Phase 3: Serve remote reads - // If there is any abort logic, relevant reads need to be sent to all active nodes... - if(query->participant_nodes[g_node_id] == 1) { - rc = send_remote_reads(); - } - if(query->active_nodes[g_node_id] == 1) { - this->phase = CALVIN_COLLECT_RD; - if(calvin_collect_phase_done()) { - rc = RCOK; - } else { - DEBUG("(%ld,%ld) wait in collect phase; %d / %d rfwds received\n", txn->txn_id, - txn->batch_id, rsp_cnt, calvin_expected_rsp_cnt); - rc = WAIT; - } - } else { // Done - rc = RCOK; - this->phase = CALVIN_DONE; - } - - break; - case CALVIN_COLLECT_RD: - // Phase 4: Collect remote reads - this->phase = CALVIN_EXEC_WR; - break; - case CALVIN_EXEC_WR: - // Phase 5: Execute transaction / perform local writes - DEBUG("(%ld,%ld) execute writes\n",txn->txn_id,txn->batch_id); - rc = run_ycsb(); - this->phase = CALVIN_DONE; - break; - default: - assert(false); - } - } - uint64_t curr_time = get_sys_clock(); - txn_stats.process_time += curr_time - starttime; - txn_stats.process_time_short += curr_time - starttime; - txn_stats.wait_starttime = get_sys_clock(); - return rc; -} - -RC YCSBTxnManager::run_ycsb() { - RC rc = RCOK; - assert(CC_ALG == CALVIN); - YCSBQuery* ycsb_query = (YCSBQuery*) query; - - for (uint64_t i = 0; i < ycsb_query->requests.size(); i++) { - ycsb_request * req = ycsb_query->requests[i]; - if (this->phase == CALVIN_LOC_RD && req->acctype == WR) continue; - if (this->phase == CALVIN_EXEC_WR && req->acctype == RD) continue; - - uint64_t part_id = _wl->key_to_part( req->key ); - bool loc = GET_NODE_ID(part_id) == g_node_id; - - if (!loc) continue; - - rc = run_ycsb_0(req,row); - assert(rc == RCOK); - - rc = run_ycsb_1(req->acctype,row); - assert(rc == RCOK); - } - return rc; - -} - diff --git a/contrib/deneva/benchmarks/ycsb_wl.cpp b/contrib/deneva/benchmarks/ycsb_wl.cpp deleted file mode 100644 index 213266b5..00000000 --- a/contrib/deneva/benchmarks/ycsb_wl.cpp +++ /dev/null @@ -1,213 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "ycsb.h" -#include "wl.h" -#include "thread.h" -#include "table.h" -#include "row.h" -#include "index_hash.h" -#include "index_btree.h" -#include "catalog.h" -#include "manager.h" -#include "row_lock.h" -#include "row_ts.h" -#include "row_mvcc.h" -#include "mem_alloc.h" -#include "query.h" - -int YCSBWorkload::next_tid; - -RC YCSBWorkload::init() { - Workload::init(); - next_tid = 0; - char * cpath = getenv("SCHEMA_PATH"); - string path; - if (cpath == NULL) - path = "./benchmarks/YCSB_schema.txt"; - else { - path = string(cpath); - path += "YCSB_schema.txt"; - //path += "/tests/apps/dbms/YCSB_schema.txt"; - } - printf("Initializing schema... "); - fflush(stdout); - init_schema( path.c_str() ); - printf("Done\n"); - - printf("Initializing table... "); - fflush(stdout); - init_table_parallel(); - printf("Done\n"); - fflush(stdout); -// init_table(); - return RCOK; -} - -RC YCSBWorkload::init_schema(const char * schema_file) { - Workload::init_schema(schema_file); - the_table = tables["MAIN_TABLE"]; - the_index = indexes["MAIN_INDEX"]; - return RCOK; -} - -int -YCSBWorkload::key_to_part(uint64_t key) { - //uint64_t rows_per_part = g_synth_table_size / g_part_cnt; - //return key / rows_per_part; - return key % g_part_cnt; -} - -RC YCSBWorkload::init_table() { - RC rc; - uint64_t total_row = 0; - while (true) { - for (UInt32 part_id = 0; part_id < g_part_cnt; part_id ++) { - if (total_row > g_synth_table_size) - goto ins_done; - // Assumes striping of partitions to nodes - if(g_part_cnt % g_node_cnt != g_node_id) { - total_row++; - continue; - } - row_t * new_row = NULL; - uint64_t row_id; - rc = the_table->get_new_row(new_row, part_id, row_id); - // insertion of last row may fail after the table_size - // is updated. So never access the last record in a table - assert(rc == RCOK); -// uint64_t value = rand(); - uint64_t primary_key = total_row; - new_row->set_primary_key(primary_key); - new_row->set_value(0, &primary_key); - Catalog * schema = the_table->get_schema(); - for (UInt32 fid = 0; fid < schema->get_field_cnt(); fid ++) { - int field_size = schema->get_field_size(fid); - char value[field_size]; - for (int i = 0; i < field_size; i++) - value[i] = (char)rand() % (1<<8) ; - new_row->set_value(fid, value); - } - itemid_t * m_item = - (itemid_t *) mem_allocator.alloc( sizeof(itemid_t)); - assert(m_item != NULL); - m_item->type = DT_row; - m_item->location = new_row; - m_item->valid = true; - uint64_t idx_key = primary_key; - rc = the_index->index_insert(idx_key, m_item, part_id); - assert(rc == RCOK); - total_row ++; - } - } -ins_done: - printf("[YCSB] Table \"MAIN_TABLE\" initialized.\n"); - return RCOK; - -} - -// init table in parallel -void YCSBWorkload::init_table_parallel() { - enable_thread_mem_pool = true; - pthread_t * p_thds = new pthread_t[g_init_parallelism - 1]; - for (UInt32 i = 0; i < g_init_parallelism - 1; i++) { - pthread_create(&p_thds[i], NULL, threadInitTable, this); - } - threadInitTable(this); - - for (uint32_t i = 0; i < g_init_parallelism - 1; i++) { - int rc = pthread_join(p_thds[i], NULL); - //printf("thread %d complete\n", i); - if (rc) { - printf("ERROR; return code from pthread_join() is %d\n", rc); - exit(-1); - } - } - enable_thread_mem_pool = false; -} - -void * YCSBWorkload::init_table_slice() { - UInt32 tid = ATOM_FETCH_ADD(next_tid, 1); - RC rc; - assert(g_synth_table_size % g_init_parallelism == 0); - assert(tid < g_init_parallelism); - uint64_t key_cnt = 0; - while ((UInt32)ATOM_FETCH_ADD(next_tid, 0) < g_init_parallelism) {} - assert((UInt32)ATOM_FETCH_ADD(next_tid, 0) == g_init_parallelism); - uint64_t slice_size = g_synth_table_size / g_init_parallelism; - for (uint64_t key = slice_size * tid; - key < slice_size * (tid + 1); - //key ++ - ) { - if(GET_NODE_ID(key_to_part(key)) != g_node_id) { - ++key; - continue; - } - - ++key_cnt; - if(key_cnt % 500000 == 0) { - printf("Thd %d inserted %ld keys %f\n",tid,key_cnt,simulation->seconds_from_start(get_sys_clock())); - } -// printf("tid=%d. key=%ld\n", tid, key); - row_t * new_row = NULL; - uint64_t row_id; - int part_id = key_to_part(key); // % g_part_cnt; - rc = the_table->get_new_row(new_row, part_id, row_id); - assert(rc == RCOK); -// uint64_t value = rand(); - uint64_t primary_key = key; - new_row->set_primary_key(primary_key); -#if SIM_FULL_ROW - new_row->set_value(0, &primary_key,sizeof(uint64_t)); - - Catalog * schema = the_table->get_schema(); - for (UInt32 fid = 0; fid < schema->get_field_cnt(); fid ++) { -// int field_size = schema->get_field_size(fid); -// char value[field_size]; -// for (int i = 0; i < field_size; i++) -// value[i] = (char)rand() % (1<<8) ; - char value[6] = "hello"; - new_row->set_value(fid, value,sizeof(value)); - } -#endif - - itemid_t * m_item = - (itemid_t *) mem_allocator.alloc( sizeof(itemid_t)); - assert(m_item != NULL); - m_item->type = DT_row; - m_item->location = new_row; - m_item->valid = true; - uint64_t idx_key = primary_key; - - rc = the_index->index_insert(idx_key, m_item, part_id); - assert(rc == RCOK); - key += g_part_cnt; - } - printf("Thd %d inserted %ld keys\n",tid,key_cnt); - return NULL; -} - -RC YCSBWorkload::get_txn_man(TxnManager *& txn_manager){ - DEBUG_M("YCSBWorkload::get_txn_man YCSBTxnManager alloc\n"); - txn_manager = (YCSBTxnManager *) - mem_allocator.align_alloc( sizeof(YCSBTxnManager)); - new(txn_manager) YCSBTxnManager(); - //txn_manager->init(this); - return RCOK; -} - diff --git a/contrib/deneva/client/client_main.cpp b/contrib/deneva/client/client_main.cpp deleted file mode 100644 index 75a2da50..00000000 --- a/contrib/deneva/client/client_main.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "ycsb.h" -#include "tpcc.h" -#include "pps.h" -#include "da.h" -#include "thread.h" -#include "io_thread.h" -#include "client_thread.h" -#include "client_query.h" -#include "transport.h" -#include "client_txn.h" -#include "msg_queue.h" -#include "work_queue.h" -//#include - -void * f(void *); -void * g(void *); -void * worker(void *); -void * nn_worker(void *); -void * send_worker(void *); -void network_test(); -void network_test_recv(); -void * run_thread(void *); - -ClientThread * client_thds; -InputThread * input_thds; -OutputThread * output_thds; - -// defined in parser.cpp -void parser(int argc, char * argv[]); - -int main(int argc, char *argv[]) { - printf("Running client...\n\n"); - // 0. initialize global data structure - parser(argc, argv); - assert(g_node_id >= g_node_cnt); - //assert(g_client_node_cnt <= g_node_cnt); - - uint64_t seed = get_sys_clock(); - srand(seed); - printf("Random seed: %ld\n",seed); - - - int64_t starttime; - int64_t endtime; - starttime = get_server_clock(); - // per-partition malloc - printf("Initializing stats... "); - fflush(stdout); - stats.init(g_total_client_thread_cnt); - printf("Done\n"); - printf("Initializing transport manager... "); - fflush(stdout); - tport_man.init(); - printf("Done\n"); - printf("Initializing client manager... "); - Workload * m_wl; - switch (WORKLOAD) { - case YCSB : - m_wl = new YCSBWorkload; break; - case TPCC : - m_wl = new TPCCWorkload; break; - case PPS : - m_wl = new PPSWorkload; break; - case DA : - m_wl = new DAWorkload; break; - default: - assert(false); - } - m_wl->Workload::init(); - printf("workload initialized!\n"); - - printf("Initializing simulation... "); - fflush(stdout); - simulation = new SimManager; - simulation->init(); - printf("Done\n"); -#if NETWORK_TEST - tport_man.init(g_node_id,m_wl); - sleep(3); - if(g_node_id == 0) - network_test(); - else if(g_node_id == 1) - network_test_recv(); - - return 0; -#endif - - - fflush(stdout); - client_man.init(); - printf("Done\n"); - printf("Initializing work queue... "); - fflush(stdout); - work_queue.init(); - printf("Done\n"); - printf("Initializing msg pool... "); - fflush(stdout); - msg_pool.init(m_wl,g_inflight_max); - printf("Done\n"); - fflush(stdout); -/* - #if WORKLOAD==DA - g_client_rem_thread_cnt=1; - g_client_send_thread_cnt=1; - #endif -*/ - - // 2. spawn multiple threads - uint64_t thd_cnt = g_client_thread_cnt; - uint64_t cthd_cnt = thd_cnt; - uint64_t rthd_cnt = g_client_rem_thread_cnt; - uint64_t sthd_cnt = g_client_send_thread_cnt; - uint64_t all_thd_cnt = thd_cnt + rthd_cnt + sthd_cnt; - assert(all_thd_cnt == g_this_total_thread_cnt); - - pthread_t *p_thds = (pthread_t *)malloc(sizeof(pthread_t) * (all_thd_cnt)); - pthread_attr_t attr; - pthread_attr_init(&attr); - - client_thds = new ClientThread[cthd_cnt]; - input_thds = new InputThread[rthd_cnt]; - output_thds = new OutputThread[sthd_cnt]; - // query_queue should be the last one to be initialized!!! - // because it collects txn latency - printf("Initializing message queue... "); - msg_queue.init(); - printf("Done\n"); - printf("Initializing client query queue... "); - fflush(stdout); - client_query_queue.init(m_wl); - printf("Done\n"); - fflush(stdout); - -#if CREATE_TXN_FILE - return(0); -#endif - - endtime = get_server_clock(); - printf("Initialization Time = %ld\n", endtime - starttime); - fflush(stdout); - warmup_done = true; - pthread_barrier_init( &warmup_bar, NULL, all_thd_cnt); - - uint64_t cpu_cnt = 0; -#if SET_AFFINITY - cpu_set_t cpus; -#endif - // spawn and run txns again. - starttime = get_server_clock(); - simulation->run_starttime = starttime; - simulation->last_da_query_time = starttime; - uint64_t id = 0; - for (uint64_t i = 0; i < thd_cnt; i++) { -#if SET_AFFINITY - CPU_ZERO(&cpus); -#if TPORT_TYPE_IPC - CPU_SET(g_node_id * thd_cnt + cpu_cnt, &cpus); -#elif !SET_AFFINITY - CPU_SET(g_node_id * thd_cnt + cpu_cnt, &cpus); -#else - CPU_SET(cpu_cnt, &cpus); -#endif - cpu_cnt = (cpu_cnt + 1) % g_servers_per_client; - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); -#endif - client_thds[i].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], &attr, run_thread, (void *)&client_thds[i]); - } - - for (uint64_t j = 0; j < rthd_cnt ; j++) { - input_thds[j].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&input_thds[j]); - } - - for (uint64_t i = 0; i < sthd_cnt; i++) { - output_thds[i].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&output_thds[i]); - } - for (uint64_t i = 0; i < all_thd_cnt; i++) - pthread_join(p_thds[i], NULL); - - endtime = get_server_clock(); - - fflush(stdout); - printf("CLIENT PASS! SimTime = %ld\n", endtime - starttime); - if (STATS_ENABLE) stats.print_client(false); - fflush(stdout); - return 0; -} - -void * run_thread(void * id) { - Thread * thd = (Thread *) id; - thd->run(); - return NULL; -} - -void network_test() { -/* - ts_t start; - ts_t end; - double time; - int bytes; - for(int i=4; i < 257; i+=4) { - time = 0; - for(int j=0;j < 1000; j++) { - start = get_sys_clock(); - tport_man.simple_send_msg(i); - while((bytes = tport_man.simple_recv_msg()) == 0) {} - end = get_sys_clock(); - assert(bytes == i); - time += end-start; - } - time = time/1000; - printf("Network Bytes: %d, s: %f\n",i,time/BILLION); - fflush(stdout); - } -*/ -} - -void network_test_recv() { -/* - int bytes; - while(1) { - if( (bytes = tport_man.simple_recv_msg()) > 0) - tport_man.simple_send_msg(bytes); - } -*/ -} diff --git a/contrib/deneva/client/client_query.cpp b/contrib/deneva/client/client_query.cpp deleted file mode 100644 index 5ec16a77..00000000 --- a/contrib/deneva/client/client_query.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "client_query.h" -#include "mem_alloc.h" -#include "wl.h" -#include "table.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "pps_query.h" -#include "da_query.h" - -/*************************************************/ -// class Query_queue -/*************************************************/ - -typedef struct -{ - void* context; - int thd_id; -}FUNC_ARGS; - -void -Client_query_queue::init(Workload * h_wl) { - _wl = h_wl; - - -#if SERVER_GENERATE_QUERIES - if (ISCLIENT) return; - size = g_thread_cnt; -#else - size = g_servers_per_client; -#endif - query_cnt = new uint64_t * [size]; - for ( UInt32 id = 0; id < size; id ++) { - std::vector new_queries(g_max_txn_per_part+4,NULL); - queries.push_back(new_queries); - query_cnt[id] = (uint64_t*)mem_allocator.align_alloc(sizeof(uint64_t)); - } - next_tid = 0; -/* -#if WORKLOAD == DA - pthread_t * p_thds = new pthread_t[1]; - pthread_create(&p_thds[0], NULL, initQueriesHelper, this); - pthread_join(p_thds[0], NULL); -#else -*/ - - pthread_t * p_thds = new pthread_t[g_init_parallelism - 1]; - for (uint64_t i = 0; i < g_init_parallelism - 1; i++) { - FUNC_ARGS *arg=(FUNC_ARGS*)mem_allocator.align_alloc(sizeof(FUNC_ARGS)); - arg->context=this; - arg->thd_id=i; - pthread_create(&p_thds[i], NULL, initQueriesHelper, (void*)arg ); - } - FUNC_ARGS *arg=(FUNC_ARGS*)mem_allocator.align_alloc(sizeof(FUNC_ARGS)); - arg->context=this; - arg->thd_id=g_init_parallelism - 1; - #if WORKLOAD == DA - pthread_t p_thds_main; - pthread_create(&p_thds_main, NULL, initQueriesHelper, (void*)arg ); - pthread_detach(p_thds_main); - #else - initQueriesHelper(arg); - #endif - - for (uint32_t i = 0; i < g_init_parallelism - 1; i++) { - pthread_join(p_thds[i], NULL); - } -} - -void * -Client_query_queue::initQueriesHelper(void * args) { - ((Client_query_queue*)((FUNC_ARGS*)args)->context)->initQueriesParallel(((FUNC_ARGS*)args)->thd_id); - - return NULL; -} - -void -Client_query_queue::initQueriesParallel(uint64_t thd_id) { -#if WORKLOAD != DA - UInt32 tid = ATOM_FETCH_ADD(next_tid, 1); - uint64_t request_cnt; - request_cnt = g_max_txn_per_part + 4; - - uint32_t final_request; -#if CC_ALG == BOCC || CC_ALG == FOCC - if (tid == g_init_parallelism-1) { - final_request = request_cnt * g_servers_per_client; - } else { - final_request = request_cnt * g_servers_per_client / g_init_parallelism * (tid+1); - } -#else - if (tid == g_init_parallelism-1) { - final_request = request_cnt; - } else { - final_request = request_cnt / g_init_parallelism * (tid+1); - } -#endif -#endif -#if WORKLOAD == YCSB - YCSBQueryGenerator * gen = new YCSBQueryGenerator; - gen->init(); -#elif WORKLOAD == TPCC - TPCCQueryGenerator * gen = new TPCCQueryGenerator; -#elif WORKLOAD == PPS - PPSQueryGenerator * gen = new PPSQueryGenerator; -#elif WORKLOAD == DA - DAQueryGenerator * gen = new DAQueryGenerator; -#endif -#if SERVER_GENERATE_QUERIES - #if CC_ALG == BOCC || CC_ALG == FOCC - for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; query_id ++) { - queries[thread_id][query_id] = gen->create_query(_wl,g_node_id); - } - #else - for ( UInt32 thread_id = 0; thread_id < g_thread_cnt; thread_id ++) { - for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; - query_id++) { - queries[thread_id][query_id] = gen->create_query(_wl,g_node_id); - } - } - #endif -#elif WORKLOAD == DA - gen->create_query(_wl,thd_id); -#else -#if CC_ALG == BOCC || CC_ALG == FOCC - for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; query_id ++) { - queries[0][query_id] = gen->create_query(_wl,g_server_start_node); - } -#else - for ( UInt32 server_id = 0; server_id < g_servers_per_client; server_id ++) { - for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; - query_id++) { - queries[server_id][query_id] = gen->create_query(_wl,server_id+g_server_start_node); - } - } -#endif -#endif -} - -bool Client_query_queue::done() { return false; } - -BaseQuery * -Client_query_queue::get_next_query(uint64_t server_id,uint64_t thread_id) { -#if WORKLOAD == DA - BaseQuery * query; - query=da_gen_qry_queue.pop_data(); - //while(!da_query_queue.pop(query)); - return query; -#else - assert(server_id < size); - uint64_t query_id = __sync_fetch_and_add(query_cnt[server_id], 1); - if(query_id > g_max_txn_per_part) { - __sync_bool_compare_and_swap(query_cnt[server_id],query_id+1,0); - query_id = __sync_fetch_and_add(query_cnt[server_id], 1); - } - BaseQuery * query = queries[server_id][query_id]; - return query; -#endif -} diff --git a/contrib/deneva/client/client_query.h b/contrib/deneva/client/client_query.h deleted file mode 100644 index 7771f6ea..00000000 --- a/contrib/deneva/client/client_query.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _CLIENT_QUERY_H_ -#define _CLIENT_QUERY_H_ - -#include "global.h" -#include "helper.h" -#include "query.h" - -class Workload; -class YCSBQuery; -class YCSBClientQuery; -class TPCCQuery; -class tpcc_client_query; - -// We assume a separate task queue for each thread in order to avoid -// contention in a centralized query queue. In reality, more sophisticated -// queue model might be implemented. -class Client_query_queue { -public: - void init(Workload * h_wl); - bool done(); - BaseQuery * get_next_query(uint64_t server_id,uint64_t thread_id); - void initQueriesParallel(uint64_t thd_id); - static void * initQueriesHelper(void * context); - -private: - Workload * _wl; - uint64_t size; - std::vector> queries; - uint64_t ** query_cnt; - volatile uint64_t next_tid; -}; - -#endif diff --git a/contrib/deneva/client/client_txn.cpp b/contrib/deneva/client/client_txn.cpp deleted file mode 100644 index a1bb19bf..00000000 --- a/contrib/deneva/client/client_txn.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "client_txn.h" -#include "mem_alloc.h" - -void Inflight_entry::init() { - num_inflight_txns = 0; - sem_init(&mutex, 0, 1); -} - -int32_t Inflight_entry::inc_inflight() { - int32_t result; - sem_wait(&mutex); - if (num_inflight_txns < g_inflight_max) { - // if (num_inflight_txns < 1) { - result = ++num_inflight_txns; - } else { - result = -1; - } - sem_post(&mutex); - return result; -} - -int32_t Inflight_entry::dec_inflight() { - int32_t result; - sem_wait(&mutex); - if(num_inflight_txns > 0) { - result = --num_inflight_txns; - } - //assert(num_inflight_txns >= 0); - sem_post(&mutex); - return result; -} - -int32_t Inflight_entry::get_inflight() { - int32_t result; - sem_wait(&mutex); - result = num_inflight_txns; - sem_post(&mutex); - return result; -} - -void Client_txn::init() { - //inflight_txns = new Inflight_entry * [g_node_cnt]; - inflight_txns = new Inflight_entry * [g_servers_per_client]; - //for (uint32_t i = 0; i < g_node_cnt; ++i) { - for (uint32_t i = 0; i < g_servers_per_client; ++i) { - inflight_txns[i] = (Inflight_entry *)mem_allocator.alloc(sizeof(Inflight_entry)); - inflight_txns[i]->init(); - } -} - -int32_t Client_txn::inc_inflight(uint32_t node_id) { - assert(node_id < g_servers_per_client); - return inflight_txns[node_id]->inc_inflight(); -} - -int32_t Client_txn::dec_inflight(uint32_t node_id) { - assert(node_id < g_servers_per_client); - return inflight_txns[node_id]->dec_inflight(); -} - -int32_t Client_txn::get_inflight(uint32_t node_id) { - assert(node_id < g_servers_per_client); - return inflight_txns[node_id]->get_inflight(); -} diff --git a/contrib/deneva/client/client_txn.h b/contrib/deneva/client/client_txn.h deleted file mode 100644 index 52ecde61..00000000 --- a/contrib/deneva/client/client_txn.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _CLIENT_TXN_H_ -#define _CLIENT_TXN_H_ - -#include "global.h" -#include "semaphore.h" - -class Inflight_entry { -public: - void init(); - int32_t inc_inflight(); - int32_t dec_inflight(); - int32_t get_inflight(); -private: - volatile int32_t num_inflight_txns; - sem_t mutex; -}; - -class Client_txn { -public: - void init(); - int32_t inc_inflight(uint32_t node_id); - int32_t dec_inflight(uint32_t node_id); - int32_t get_inflight(uint32_t node_id); -private: - Inflight_entry ** inflight_txns; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/bocc.cpp b/contrib/deneva/concurrency_control/bocc.cpp deleted file mode 100644 index 552c4749..00000000 --- a/contrib/deneva/concurrency_control/bocc.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "global.h" -#if CC_ALG == BOCC -#include "helper.h" -#include "txn.h" -#include "bocc.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_occ.h" - - -b_set_ent::b_set_ent() { - set_size = 0; - txn = NULL; - rows = NULL; - next = NULL; -} - -void Bocc::init() { - sem_init(&_semaphore, 0, 1); - occ_cs::init(); - tnc = 0; - his_len = 0; - lock_all = false; -} - -RC Bocc::validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); - rc = central_validate(txn); - INC_STATS(txn->get_thd_id(), occ_validate_time, get_sys_clock() - starttime); - return rc; -} - -void Bocc::finish(RC rc, TxnManager * txn) { - central_finish(rc, txn); -} - -RC Bocc::central_validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); - uint64_t total_starttime = starttime; - uint64_t start_tn = txn->get_start_timestamp(); - uint64_t finish_tn; - - bool valid = true; - // OptCC is centralized. No need to do per partition malloc. - b_set_ent * wset; - b_set_ent * rset; - get_rw_set(txn, rset, wset); - - b_set_ent * his; - - int stop __attribute__((unused)); - - DEBUG("Start Validation %ld: start_ts %lu his_len %ld\n",txn->get_txn_id(),start_tn, his_len); - sem_wait(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_cs_wait_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); - assert(!g_ts_batch_alloc); - - finish_tn = glob_manager.get_ts(txn->get_thd_id()); - - his = history; - - INC_STATS(txn->get_thd_id(),occ_cs_time,get_sys_clock() - starttime); - - starttime = get_sys_clock(); - uint64_t checked = 0; - uint64_t hist_checked = 0; - stop = 0; - if (finish_tn > start_tn) { - while (his && his->tn > finish_tn) { - his = his->next; - } - while (his && his->tn > start_tn) { - ++hist_checked; - ++checked; - valid = test_valid(his, rset); -#if WORKLOAD == TPCC - if (valid) { - valid = test_valid(his, wset); - } -#endif - if (!valid) { - INC_STATS(txn->get_thd_id(),occ_hist_validate_fail_time,get_sys_clock() - starttime); - goto final; - } - his = his->next; - } - } - - INC_STATS(txn->get_thd_id(),occ_hist_validate_time,get_sys_clock() - starttime); - - starttime = get_sys_clock(); -final: - mem_allocator.free(rset->rows, sizeof(row_t *) * rset->set_size); - mem_allocator.free(rset, sizeof(b_set_ent)); - - if (valid) { - rc = RCOK; - INC_STATS(txn->get_thd_id(),occ_check_cnt,checked); - } else { - INC_STATS(txn->get_thd_id(),occ_abort_check_cnt,checked); - rc = Abort; - // Optimization: If this is aborting, remove from active set now - } - sem_post(&_semaphore); - DEBUG("End Validation %ld: hist# %ld\n",txn->get_txn_id(),hist_checked); - INC_STATS(txn->get_thd_id(),occ_validate_time,get_sys_clock() - total_starttime); - return rc; -} - -void Bocc::central_finish(RC rc, TxnManager * txn) { - b_set_ent * wset; - b_set_ent * rset; - get_rw_set(txn, rset, wset); - bool readonly = (wset->set_size == 0); - if (!readonly) { - sem_wait(&_semaphore); - // only update active & tnc for non-readonly transactions - uint64_t starttime = get_sys_clock(); - if (rc == RCOK) { - // remove the assert for performance - wset->tn = glob_manager.get_ts(txn->get_thd_id()); - STACK_PUSH(history, wset); - DEBUG("occ insert history"); - his_len ++; - } - INC_STATS(txn->get_thd_id(),occ_finish_time,get_sys_clock() - starttime); - sem_post(&_semaphore); - } -} - -RC Bocc::get_rw_set(TxnManager * txn, b_set_ent * &rset, b_set_ent *& wset) { - wset = (b_set_ent*) mem_allocator.alloc(sizeof(b_set_ent)); - rset = (b_set_ent*) mem_allocator.alloc(sizeof(b_set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR) { - wset->rows[n ++] = txn->get_access_original_row(i); - } else { - rset->rows[m ++] = txn->get_access_original_row(i); - } - } - - assert(n == wset->set_size); - assert(m == rset->set_size); - return RCOK; -} - -bool Bocc::test_valid(b_set_ent * set1, b_set_ent * set2) { - for (UInt32 i = 0; i < set1->set_size; i++) { - for (UInt32 j = 0; j < set2->set_size; j++) { - if (set1->rows[i] == set2->rows[j]) { - return false; - } - } - } - return true; -} - -#endif diff --git a/contrib/deneva/concurrency_control/bocc.h b/contrib/deneva/concurrency_control/bocc.h deleted file mode 100644 index 3fb7df70..00000000 --- a/contrib/deneva/concurrency_control/bocc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef _BOCC_H_ -#define _BOCC_H_ - -#include "row.h" -#include "semaphore.h" -#include "occ_critical_section.h" - -// For simplicity, the txn hisotry for OCC is oganized as follows: -// 1. history is never deleted. -// 2. hisotry forms a single directional list. -// history head -> hist_1 -> hist_2 -> hist_3 -> ... -> hist_n -// The head is always the latest and the tail the youngest. -// When history is traversed, always go from head -> tail order. - -class TxnManager; - -class b_set_ent{ -public: - b_set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - b_set_ent * next; -}; - -class Bocc : public occ_cs { -public: - void init(); - RC validate(TxnManager * txn); - void finish(RC rc, TxnManager * txn); - volatile bool lock_all; - uint64_t lock_txn_id; -private: - // serial validation in the original OCC paper. - RC central_validate(TxnManager * txn); - - void central_finish(RC rc, TxnManager * txn); - bool test_valid(b_set_ent * set1, b_set_ent * set2); - RC get_rw_set(TxnManager * txni, b_set_ent * &rset, b_set_ent *& wset); - - // "history" stores write set of transactions with tn >= smallest running tn - b_set_ent * history; - uint64_t his_len; - - volatile uint64_t tnc; // transaction number counter - pthread_mutex_t latch; - sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/focc.cpp b/contrib/deneva/concurrency_control/focc.cpp deleted file mode 100644 index 5574b81b..00000000 --- a/contrib/deneva/concurrency_control/focc.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "global.h" -#if CC_ALG == FOCC -#include "helper.h" -#include "txn.h" -#include "focc.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_occ.h" - - -f_set_ent::f_set_ent() { - set_size = 0; - txn = NULL; - rows = NULL; - next = NULL; -} - -void Focc::init() { - sem_init(&_semaphore, 0, 1); - occ_cs::init(); - tnc = 0; - active_len = 0; - active = NULL; - lock_all = false; -} - -RC Focc::validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); - rc = central_validate(txn); - INC_STATS(txn->get_thd_id(),occ_validate_time,get_sys_clock() - starttime); - return rc; -} - -void Focc::finish(RC rc, TxnManager * txn) { - central_finish(rc,txn); -} - -void Focc::active_storage(access_t type, TxnManager * txn, Access * access) { - f_set_ent * act = active; - f_set_ent * wset; - f_set_ent * rset; - get_rw_set(txn, rset, wset); - if (rset->set_size == 0) { - return; - } - sem_wait(&_semaphore); - while (act != NULL && act->txn != txn) { - act = act->next; - } - if (act == NULL) { - active_len ++; - STACK_PUSH(active, rset); - } else { - act = rset; - } - sem_post(&_semaphore); - DEBUG("FOCC active_storage %ld: active size %lu\n",txn->get_txn_id(),active_len); -} - -RC Focc::central_validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); - uint64_t total_starttime = starttime; - uint64_t start_tn = txn->get_start_timestamp(); - - bool valid = true; - // OptCC is centralized. No need to do per partition malloc. - f_set_ent * wset; - f_set_ent * rset; - get_rw_set(txn, rset, wset); - bool readonly = (wset->set_size == 0); - f_set_ent * ent; - uint64_t checked = 0; - uint64_t active_checked = 0; - int stop __attribute__((unused)); - - DEBUG("Start Validation %ld: start_ts %lu, active size %lu\n",txn->get_txn_id(),start_tn,active_len); - sem_wait(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_cs_wait_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); - - ent = active; - // In order to prevent cross between other read sets and the current transaction write set during - // verification, the write set is first locked. - if (!readonly) { - for (uint64_t i = 0; i < wset->set_size; i++) { - row_t * row = wset->rows[i]; - if (!row->manager->try_lock(txn->get_txn_id())) { - rc = Abort; - } - } - if (rc == Abort) { - for (uint64_t i = 0; i < wset->set_size; i++) { - row_t * row = wset->rows[i]; - row->manager->release_lock(txn->get_txn_id()); - } - } - } - stop = 1; - if (!readonly) { - for (ent = active; ent != NULL; ent = ent->next) { - f_set_ent * ract = ent; - ++checked; - ++active_checked; - valid = test_valid(ract, wset); - if (valid) { - ++checked; - ++active_checked; - } - if (!valid) { - INC_STATS(txn->get_thd_id(),occ_act_validate_fail_time,get_sys_clock() - starttime); - goto final; - } - } - } - INC_STATS(txn->get_thd_id(),occ_act_validate_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); -final: - mem_allocator.free(rset->rows, sizeof(row_t *) * rset->set_size); - mem_allocator.free(rset, sizeof(f_set_ent)); - - if (valid) { - rc = RCOK; - INC_STATS(txn->get_thd_id(),occ_check_cnt,checked); - } else { - INC_STATS(txn->get_thd_id(),occ_abort_check_cnt,checked); - rc = Abort; - // Optimization: If this is aborting, remove from active set now - f_set_ent * act = active; - f_set_ent * prev = NULL; - while (act != NULL && act->txn != txn) { - prev = act; - act = act->next; - } - if (act != NULL && act->txn == txn) { - if (prev != NULL) { - prev->next = act->next; - } else { - active = act->next; - } - active_len --; - } - } - sem_post(&_semaphore); - DEBUG("End Validation %ld: active# %ld\n",txn->get_txn_id(),active_checked); - INC_STATS(txn->get_thd_id(),occ_validate_time,get_sys_clock() - total_starttime); - return rc; -} - -void Focc::central_finish(RC rc, TxnManager * txn) { - f_set_ent * wset; - f_set_ent * rset; - get_rw_set(txn, rset, wset); - - // only update active & tnc for non-readonly transactions - uint64_t starttime = get_sys_clock(); - f_set_ent * act = active; - f_set_ent * prev = NULL; - sem_wait(&_semaphore); - while (act != NULL && act->txn != txn) { - prev = act; - act = act->next; - } - if (act == NULL) { - sem_post(&_semaphore); - return; - } - assert(act->txn == txn); - if (prev != NULL) { - prev->next = act->next; - } else { - active = act->next; - } - active_len --; - - for (uint64_t i = 0; i < wset->set_size; i++) { - row_t * row = wset->rows[i]; - row->manager->release_lock(txn->get_txn_id()); - } - - sem_post(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_finish_time,get_sys_clock() - starttime); - -} - -RC Focc::get_rw_set(TxnManager * txn, f_set_ent * &rset, f_set_ent *& wset) { - wset = (f_set_ent*) mem_allocator.alloc(sizeof(f_set_ent)); - rset = (f_set_ent*) mem_allocator.alloc(sizeof(f_set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR) { - wset->rows[n ++] = txn->get_access_original_row(i); - } else { - rset->rows[m ++] = txn->get_access_original_row(i); - } - } - - assert(n == wset->set_size); - assert(m == rset->set_size); - return RCOK; -} - -bool Focc::test_valid(f_set_ent * set1, f_set_ent * set2) { - for (UInt32 i = 0; i < set1->set_size; i++) { - for (UInt32 j = 0; j < set2->set_size; j++) { - if (set1->txn == set2->txn) - continue; - if (set1->rows[i] == set2->rows[j]) { - return false; - } - } - } - return true; -} - -#endif \ No newline at end of file diff --git a/contrib/deneva/concurrency_control/focc.h b/contrib/deneva/concurrency_control/focc.h deleted file mode 100644 index 0ac130e1..00000000 --- a/contrib/deneva/concurrency_control/focc.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef _FOCC_H_ -#define _FOCC_H_ - -#include "row.h" -#include "semaphore.h" -#include "occ_critical_section.h" - - -// For simplicity, the txn hisotry for OCC is oganized as follows: -// 1. history is never deleted. -// 2. hisotry forms a single directional list. -// history head -> hist_1 -> hist_2 -> hist_3 -> ... -> hist_n -// The head is always the latest and the tail the youngest. -// When history is traversed, always go from head -> tail order. - -class TxnManager; - -class f_set_ent{ -public: - f_set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - f_set_ent * next; -}; - -class Focc : public occ_cs { -public: - void init(); - RC validate(TxnManager * txn); - void finish(RC rc, TxnManager * txn); - void active_storage(access_t type, TxnManager * txn, Access * access); - volatile bool lock_all; - uint64_t lock_txn_id; -private: - // serial validation in the original OCC paper. - RC central_validate(TxnManager * txn); - - void central_finish(RC rc, TxnManager * txn); - bool test_valid(f_set_ent * set1, f_set_ent * set2); - RC get_rw_set(TxnManager * txni, f_set_ent * &rset, f_set_ent *& wset); - - // "history" stores write set of transactions with tn >= smallest running tn - - f_set_ent * active; - uint64_t active_len; - volatile uint64_t tnc; // transaction number counter - pthread_mutex_t latch; - sem_t _semaphore; - - sem_t _active_semaphore; - // Global verification lock of FOCC - LockEntry * owners; - LockEntry * waiters_head; - LockEntry * waiters_tail; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/hash.cpp b/contrib/deneva/concurrency_control/hash.cpp deleted file mode 100644 index 76c357d5..00000000 --- a/contrib/deneva/concurrency_control/hash.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. -// This source code is licensed under both the GPLv2 (found in the -// COPYING file in the root directory) and Apache 2.0 License -// (found in the LICENSE.Apache file in the root directory). - -#include "hash.h" - -int hash_any(register const unsigned char *k, register int keylen) -{ - register uint32_t a, b, c, len; - - /* Set up the internal state */ - len = keylen; - a = b = c = 0x9e3779b9 + len + 3923095; - - /* If the source pointer is word-aligned, we use word-wide fetches */ - if (((uintptr_t) k & UINT32_ALIGN_MASK) == 0) - { - /* Code path for aligned source data */ - register const uint32_t *ka = (const uint32_t *) k; - - /* handle most of the key */ - while (len >= 12) - { - a += ka[0]; - b += ka[1]; - c += ka[2]; - mix(a, b, c); - ka += 3; - len -= 12; - } - - /* handle the last 11 bytes */ - k = (const unsigned char *) ka; - switch (len) - { - case 11: - c += ((uint32_t) k[10] << 24); - /* fall through */ - case 10: - c += ((uint32_t) k[9] << 16); - /* fall through */ - case 9: - c += ((uint32_t) k[8] << 8); - /* the lowest byte of c is reserved for the length */ - /* fall through */ - case 8: - b += ka[1]; - a += ka[0]; - break; - case 7: - b += ((uint32_t) k[6] << 16); - /* fall through */ - case 6: - b += ((uint32_t) k[5] << 8); - /* fall through */ - case 5: - b += k[4]; - /* fall through */ - case 4: - a += ka[0]; - break; - case 3: - a += ((uint32_t) k[2] << 16); - /* fall through */ - case 2: - a += ((uint32_t) k[1] << 8); - /* fall through */ - case 1: - a += k[0]; - /* case 0: nothing left to add */ - } - } - else - { - /* Code path for non-aligned source data */ - - /* handle most of the key */ - while (len >= 12) - { - a += (k[0] + ((uint32_t) k[1] << 8) + ((uint32_t) k[2] << 16) + ((uint32_t) k[3] << 24)); - b += (k[4] + ((uint32_t) k[5] << 8) + ((uint32_t) k[6] << 16) + ((uint32_t) k[7] << 24)); - c += (k[8] + ((uint32_t) k[9] << 8) + ((uint32_t) k[10] << 16) + ((uint32_t) k[11] << 24)); - mix(a, b, c); - k += 12; - len -= 12; - } - - /* handle the last 11 bytes */ - switch (len) /* all the case statements fall through */ - { - case 11: - c += ((uint32_t) k[10] << 24); - case 10: - c += ((uint32_t) k[9] << 16); - case 9: - c += ((uint32_t) k[8] << 8); - /* the lowest byte of c is reserved for the length */ - case 8: - b += ((uint32_t) k[7] << 24); - case 7: - b += ((uint32_t) k[6] << 16); - case 6: - b += ((uint32_t) k[5] << 8); - case 5: - b += k[4]; - case 4: - a += ((uint32_t) k[3] << 24); - case 3: - a += ((uint32_t) k[2] << 16); - case 2: - a += ((uint32_t) k[1] << 8); - case 1: - a += k[0]; - /* case 0: nothing left to add */ - } - } - - final(a, b, c); - /* report the result */ - return c; -} diff --git a/contrib/deneva/concurrency_control/hash.h b/contrib/deneva/concurrency_control/hash.h deleted file mode 100644 index 494682fb..00000000 --- a/contrib/deneva/concurrency_control/hash.h +++ /dev/null @@ -1,37 +0,0 @@ - -#pragma once - -#ifndef KEY_RANGE_HASH -#define KEY_RANGE_HASH - -#include -#include -#include -#include - -#define UINT32_ALIGN_MASK (sizeof(uint32_t) - 1) -#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) -#define mix(a,b,c) \ -{ \ - a -= c; a ^= rot(c, 4); c += b; \ - b -= a; b ^= rot(a, 6); a += c; \ - c -= b; c ^= rot(b, 8); b += a; \ - a -= c; a ^= rot(c,16); c += b; \ - b -= a; b ^= rot(a,19); a += c; \ - c -= b; c ^= rot(b, 4); b += a; \ -} - -#define final(a,b,c) \ -{ \ - c ^= b; c -= rot(b,14); \ - a ^= c; a -= rot(c,11); \ - b ^= a; b -= rot(a,25); \ - c ^= b; c -= rot(b,16); \ - a ^= c; a -= rot(c, 4); \ - b ^= a; b -= rot(a,14); \ - c ^= b; c -= rot(b,24); \ -} - -int hash_any(register const unsigned char *k, register int keylen); - -#endif diff --git a/contrib/deneva/concurrency_control/maat.cpp b/contrib/deneva/concurrency_control/maat.cpp deleted file mode 100644 index 0d2104c1..00000000 --- a/contrib/deneva/concurrency_control/maat.cpp +++ /dev/null @@ -1,319 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "txn.h" -#include "maat.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_maat.h" - -void Maat::init() { sem_init(&_semaphore, 0, 1); } - -RC Maat::validate(TxnManager * txn) { - uint64_t start_time = get_sys_clock(); - uint64_t timespan; - sem_wait(&_semaphore); - - timespan = get_sys_clock() - start_time; - txn->txn_stats.cc_block_time += timespan; - txn->txn_stats.cc_block_time_short += timespan; - INC_STATS(txn->get_thd_id(),maat_cs_wait_time,timespan); - start_time = get_sys_clock(); - RC rc = RCOK; - uint64_t lower = time_table.get_lower(txn->get_thd_id(),txn->get_txn_id()); - uint64_t upper = time_table.get_upper(txn->get_thd_id(),txn->get_txn_id()); - DEBUG("MAAT Validate Start %ld: [%lu,%lu]\n",txn->get_txn_id(),lower,upper); - std::set after; - std::set before; - // lower bound of txn greater than write timestamp - if(lower <= txn->greatest_write_timestamp) { - lower = txn->greatest_write_timestamp + 1; - INC_STATS(txn->get_thd_id(),maat_case1_cnt,1); - } - // lower bound of uncommitted writes greater than upper bound of txn - for(auto it = txn->uncommitted_writes->begin(); it != txn->uncommitted_writes->end();it++) { - uint64_t it_lower = time_table.get_lower(txn->get_thd_id(),*it); - if(upper >= it_lower) { - MAATState state = time_table.get_state(txn->get_thd_id(),*it); - if(state == MAAT_VALIDATED || state == MAAT_COMMITTED) { - INC_STATS(txn->get_thd_id(),maat_case2_cnt,1); - if(it_lower > 0) { - upper = it_lower - 1; - } else { - upper = it_lower; - } - } - if(state == MAAT_RUNNING) { - after.insert(*it); - } - } - } - // lower bound of txn greater than read timestamp - if(lower <= txn->greatest_read_timestamp) { - lower = txn->greatest_read_timestamp + 1; - INC_STATS(txn->get_thd_id(),maat_case3_cnt,1); - } - // upper bound of uncommitted reads less than lower bound of txn - for(auto it = txn->uncommitted_reads->begin(); it != txn->uncommitted_reads->end();it++) { - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(lower <= it_upper) { - MAATState state = time_table.get_state(txn->get_thd_id(),*it); - if(state == MAAT_VALIDATED || state == MAAT_COMMITTED) { - INC_STATS(txn->get_thd_id(),maat_case4_cnt,1); - if(it_upper < UINT64_MAX) { - lower = it_upper + 1; - } else { - lower = it_upper; - } - } - if(state == MAAT_RUNNING) { - before.insert(*it); - } - } - } - // upper bound of uncommitted write writes less than lower bound of txn - for(auto it = txn->uncommitted_writes_y->begin(); it != txn->uncommitted_writes_y->end();it++) { - MAATState state = time_table.get_state(txn->get_thd_id(),*it); - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(state == MAAT_ABORTED) { - continue; - } - if(state == MAAT_VALIDATED || state == MAAT_COMMITTED) { - if(lower <= it_upper) { - INC_STATS(txn->get_thd_id(),maat_case5_cnt,1); - if(it_upper < UINT64_MAX) { - lower = it_upper + 1; - } else { - lower = it_upper; - } - } - } - if(state == MAAT_RUNNING) { - after.insert(*it); - } - } - if(lower >= upper) { - // Abort - time_table.set_state(txn->get_thd_id(),txn->get_txn_id(),MAAT_ABORTED); - rc = Abort; - } else { - // Validated - time_table.set_state(txn->get_thd_id(),txn->get_txn_id(),MAAT_VALIDATED); - rc = RCOK; - - for(auto it = before.begin(); it != before.end();it++) { - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper > lower && it_upper < upper-1) { - lower = it_upper + 1; - } - } - for(auto it = before.begin(); it != before.end();it++) { - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper >= lower) { - if(lower > 0) { - time_table.set_upper(txn->get_thd_id(),*it,lower-1); - } else { - time_table.set_upper(txn->get_thd_id(),*it,lower); - } - } - } - for(auto it = after.begin(); it != after.end();it++) { - uint64_t it_lower = time_table.get_lower(txn->get_thd_id(),*it); - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper != UINT64_MAX && it_upper > lower + 2 && it_upper < upper ) { - upper = it_upper - 2; - } - if((it_lower < upper && it_lower > lower+1)) { - upper = it_lower - 1; - } - } - // set all upper and lower bounds to meet inequality - for(auto it = after.begin(); it != after.end();it++) { - uint64_t it_lower = time_table.get_lower(txn->get_thd_id(),*it); - if(it_lower <= upper) { - if(upper < UINT64_MAX) { - time_table.set_lower(txn->get_thd_id(),*it,upper+1); - } else { - time_table.set_lower(txn->get_thd_id(),*it,upper); - } - } - } - - assert(lower < upper); - INC_STATS(txn->get_thd_id(),maat_range,upper-lower); - INC_STATS(txn->get_thd_id(),maat_commit_cnt,1); - } - time_table.set_lower(txn->get_thd_id(),txn->get_txn_id(),lower); - time_table.set_upper(txn->get_thd_id(),txn->get_txn_id(),upper); - INC_STATS(txn->get_thd_id(),maat_validate_cnt,1); - timespan = get_sys_clock() - start_time; - INC_STATS(txn->get_thd_id(),maat_validate_time,timespan); - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - DEBUG("MAAT Validate End %ld: %d [%lu,%lu]\n",txn->get_txn_id(),rc==RCOK,lower,upper); - sem_post(&_semaphore); - return rc; - -} - -RC Maat::find_bound(TxnManager * txn) { - RC rc = RCOK; - uint64_t lower = time_table.get_lower(txn->get_thd_id(),txn->get_txn_id()); - uint64_t upper = time_table.get_upper(txn->get_thd_id(),txn->get_txn_id()); - if(lower >= upper) { - time_table.set_state(txn->get_thd_id(),txn->get_txn_id(),MAAT_VALIDATED); - rc = Abort; - } else { - time_table.set_state(txn->get_thd_id(),txn->get_txn_id(),MAAT_COMMITTED); - // TODO: can commit_time be selected in a smarter way? - txn->commit_timestamp = lower; - } - DEBUG("MAAT Bound %ld: %d [%lu,%lu] %lu\n", txn->get_txn_id(), rc, lower, upper, - txn->commit_timestamp); - return rc; -} - -void TimeTable::init() { - //table_size = g_inflight_max * g_node_cnt * 2 + 1; - table_size = g_inflight_max + 1; - DEBUG_M("TimeTable::init table alloc\n"); - table = (TimeTableNode*) mem_allocator.alloc(sizeof(TimeTableNode) * table_size); - for(uint64_t i = 0; i < table_size;i++) { - table[i].init(); - } -} - -uint64_t TimeTable::hash(uint64_t key) { return key % table_size; } - -TimeTableEntry* TimeTable::find(uint64_t key) { - TimeTableEntry * entry = table[hash(key)].head; - while(entry) { - if (entry->key == key) break; - entry = entry->next; - } - return entry; - -} - -void TimeTable::init(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[34],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(!entry) { - DEBUG_M("TimeTable::init entry alloc\n"); - entry = (TimeTableEntry*) mem_allocator.alloc(sizeof(TimeTableEntry)); - entry->init(key); - LIST_PUT_TAIL(table[idx].head,table[idx].tail,entry); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -void TimeTable::release(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[35],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - LIST_REMOVE_HT(entry,table[idx].head,table[idx].tail); - DEBUG_M("TimeTable::release entry free\n"); - mem_allocator.free(entry,sizeof(TimeTableEntry)); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -uint64_t TimeTable::get_lower(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t value = 0; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[36],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - value = entry->lower; - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - -uint64_t TimeTable::get_upper(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t value = UINT64_MAX; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[37],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - value = entry->upper; - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - - -void TimeTable::set_lower(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[38],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - entry->lower = value; - } - pthread_mutex_unlock(&table[idx].mtx); -} - -void TimeTable::set_upper(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[39],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - entry->upper = value; - } - pthread_mutex_unlock(&table[idx].mtx); -} - -MAATState TimeTable::get_state(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - MAATState state = MAAT_ABORTED; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[40],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - state = entry->state; - } - pthread_mutex_unlock(&table[idx].mtx); - return state; -} - -void TimeTable::set_state(uint64_t thd_id, uint64_t key, MAATState value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[41],get_sys_clock() - mtx_wait_starttime); - TimeTableEntry* entry = find(key); - if(entry) { - entry->state = value; - } - pthread_mutex_unlock(&table[idx].mtx); -} diff --git a/contrib/deneva/concurrency_control/maat.h b/contrib/deneva/concurrency_control/maat.h deleted file mode 100644 index ac52d0b0..00000000 --- a/contrib/deneva/concurrency_control/maat.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MAAT_H_ -#define _MAAT_H_ - -#include "row.h" -#include "semaphore.h" - -class TxnManager; - -enum MAATState { - MAAT_RUNNING = 0, - MAAT_VALIDATED, - MAAT_COMMITTED, - MAAT_ABORTED -}; - -class Maat { -public: - void init(); - RC validate(TxnManager * txn); - RC find_bound(TxnManager * txn); -private: - sem_t _semaphore; -}; - -struct TimeTableEntry{ - uint64_t lower; - uint64_t upper; - uint64_t key; - MAATState state; - TimeTableEntry * next; - TimeTableEntry * prev; - void init(uint64_t key) { - lower = 0; - upper = UINT64_MAX; - this->key = key; - state = MAAT_RUNNING; - next = NULL; - prev = NULL; - } -}; - -struct TimeTableNode { - TimeTableEntry * head; - TimeTableEntry * tail; - pthread_mutex_t mtx; - void init() { - head = NULL; - tail = NULL; - pthread_mutex_init(&mtx,NULL); - } -}; - -class TimeTable { -public: - void init(); - void init(uint64_t thd_id, uint64_t key); - void release(uint64_t thd_id, uint64_t key); - uint64_t get_lower(uint64_t thd_id, uint64_t key); - uint64_t get_upper(uint64_t thd_id, uint64_t key); - void set_lower(uint64_t thd_id, uint64_t key, uint64_t value); - void set_upper(uint64_t thd_id, uint64_t key, uint64_t value); - MAATState get_state(uint64_t thd_id, uint64_t key); - void set_state(uint64_t thd_id, uint64_t key, MAATState value); -private: - // hash table - uint64_t hash(uint64_t key); - uint64_t table_size; - TimeTableNode* table; - TimeTableEntry* find(uint64_t key); - - TimeTableEntry * find_entry(uint64_t id); - - sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/occ.cpp b/contrib/deneva/concurrency_control/occ.cpp deleted file mode 100644 index 9e35b332..00000000 --- a/contrib/deneva/concurrency_control/occ.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "occ.h" - -#include "global.h" -#include "helper.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_occ.h" -#include "txn.h" - -set_ent::set_ent() { - set_size = 0; - txn = NULL; - rows = NULL; - next = NULL; -} - -void OptCC::init() { - sem_init(&_semaphore, 0, 1); - tnc = 0; - his_len = 0; - active_len = 0; - active = NULL; - lock_all = false; -} - -RC OptCC::validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); -#if PER_ROW_VALID - rc = per_row_validate(txn); -#else - rc = central_validate(txn); -#endif - INC_STATS(txn->get_thd_id(),occ_validate_time,get_sys_clock() - starttime); - return rc; -} - -void OptCC::finish(RC rc, TxnManager * txn) { -#if PER_ROW_VALID - per_row_finish(rc,txn); -#else - central_finish(rc,txn); -#endif -} - -RC OptCC::per_row_validate(TxnManager *txn) { - RC rc = RCOK; -#if CC_ALG == OCC - // sort all rows accessed in primary key order. - for (uint64_t i = txn->get_access_cnt() - 1; i > 0; i--) { - for (uint64_t j = 0; j < i; j ++) { - int tabcmp = strcmp(txn->get_access_original_row(j)->get_table_name(), - txn->get_access_original_row(j+1)->get_table_name()); - if (tabcmp > 0 || - (tabcmp == 0 && txn->get_access_original_row(j)->get_primary_key() > - txn->get_access_original_row(j + 1)->get_primary_key())) { - txn->swap_accesses(j,j+1); - } - } - } -#if DEBUG_ASSERT - for (uint64_t i = txn->get_access_cnt() - 1; i > 0; i--) { - int tabcmp = strcmp(txn->get_access_original_row(i-1)->get_table_name(), - txn->get_access_original_row(i)->get_table_name()); - assert(tabcmp < 0 || tabcmp == 0 && txn->get_access_original_row(i)->get_primary_key() > - txn->get_access_original_row(i-1)->get_primary_key()); - } -#endif - // lock all rows in the readset and writeset. - // Validate each access - bool ok = true; - int lock_cnt = 0; - for (uint64_t i = 0; i < txn->get_access_cnt() && ok; i++) { - lock_cnt ++; - txn->get_access_original_row(i)->manager->latch(); - ok = txn->get_access_original_row(i)->manager->validate( txn->get_start_timestamp() ); - } - rc = ok ? RCOK : Abort; -#endif - return rc; -} - -RC OptCC::central_validate(TxnManager * txn) { - RC rc; - uint64_t starttime = get_sys_clock(); - uint64_t total_starttime = starttime; - uint64_t start_tn = txn->get_start_timestamp(); - uint64_t finish_tn; - //set_ent ** finish_active; - //set_ent * finish_active[f_active_len]; - uint64_t f_active_len; - bool valid = true; - // OptCC is centralized. No need to do per partition malloc. - set_ent * wset; - set_ent * rset; - get_rw_set(txn, rset, wset); - bool readonly = (wset->set_size == 0); - set_ent * his; - set_ent * ent; - int n = 0; - int stop __attribute__((unused)); - - //pthread_mutex_lock( &latch ); - sem_wait(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_cs_wait_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); - //finish_tn = tnc; - assert(!g_ts_batch_alloc); - finish_tn = glob_manager.get_ts(txn->get_thd_id()); - ent = active; - f_active_len = active_len; - set_ent * finish_active[f_active_len]; - //finish_active = (set_ent**) mem_allocator.alloc(sizeof(set_ent *) * f_active_len); - while (ent != NULL) { - finish_active[n++] = ent; - ent = ent->next; - } - if ( !readonly ) { - active_len ++; - STACK_PUSH(active, wset); - } - his = history; - //pthread_mutex_unlock( &latch ); - DEBUG("Start Validation %ld: start_ts %ld, finish_ts %ld, active size %ld\n", txn->get_txn_id(), - start_tn, finish_tn, f_active_len); - sem_post(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_cs_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); - starttime = get_sys_clock(); - - uint64_t checked = 0; - uint64_t active_checked = 0; - uint64_t hist_checked = 0; - stop = 0; - if (finish_tn > start_tn) { - while (his && his->tn > finish_tn) his = his->next; - while (his && his->tn > start_tn) { - ++hist_checked; - ++checked; - valid = test_valid(his, rset); -#if WORKLOAD == TPCC - if (valid) - valid = test_valid(his, wset); -#endif - if (!valid) { - INC_STATS(txn->get_thd_id(),occ_hist_validate_fail_time,get_sys_clock() - starttime); - goto final; - } - his = his->next; - } - } - - INC_STATS(txn->get_thd_id(),occ_hist_validate_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); - stop = 1; - for (UInt32 i = 0; i < f_active_len; i++) { - set_ent * wact = finish_active[i]; - ++checked; - ++active_checked; - valid = test_valid(wact, rset); - if (valid) { - ++checked; - ++active_checked; - valid = test_valid(wact, wset); - } - if (!valid) { - INC_STATS(txn->get_thd_id(),occ_act_validate_fail_time,get_sys_clock() - starttime); - goto final; - } - } - INC_STATS(txn->get_thd_id(),occ_act_validate_time,get_sys_clock() - starttime); - starttime = get_sys_clock(); -final: - /* - if (valid) - txn->cleanup(RCOK); - */ - mem_allocator.free(rset->rows, sizeof(row_t *) * rset->set_size); - mem_allocator.free(rset, sizeof(set_ent)); - //mem_allocator.free(finish_active, sizeof(set_ent*)* f_active_len); - - - if (valid) { - rc = RCOK; - INC_STATS(txn->get_thd_id(),occ_check_cnt,checked); - } else { - //txn->cleanup(Abort); - INC_STATS(txn->get_thd_id(),occ_abort_check_cnt,checked); - rc = Abort; - // Optimization: If this is aborting, remove from active set now - sem_wait(&_semaphore); - set_ent * act = active; - set_ent * prev = NULL; - while (act != NULL && act->txn != txn) { - prev = act; - act = act->next; - } - if(act != NULL && act->txn == txn) { - if (prev != NULL) prev->next = act->next; - else active = act->next; - active_len --; - } - sem_post(&_semaphore); - } - DEBUG("End Validation %ld: active# %ld, hist# %ld\n", txn->get_txn_id(), active_checked, - hist_checked); - INC_STATS(txn->get_thd_id(),occ_validate_time,get_sys_clock() - total_starttime); - return rc; -} - -void OptCC::per_row_finish(RC rc, TxnManager * txn) { - if(rc == RCOK) { - // advance the global timestamp and get the end_ts - txn->set_end_timestamp(glob_manager.get_ts( txn->get_thd_id() )); - } -} - -void OptCC::central_finish(RC rc, TxnManager * txn) { - set_ent * wset; - set_ent * rset; - get_rw_set(txn, rset, wset); - bool readonly = (wset->set_size == 0); - - if (!readonly) { - // only update active & tnc for non-readonly transactions - uint64_t starttime = get_sys_clock(); - // pthread_mutex_lock( &latch ); - sem_wait(&_semaphore); - set_ent * act = active; - set_ent * prev = NULL; - while (act != NULL && act->txn != txn) { - prev = act; - act = act->next; - } - if(act == NULL) { - assert(rc == Abort); - //pthread_mutex_unlock( &latch ); - sem_post(&_semaphore); - return; - } - assert(act->txn == txn); - if (prev != NULL) - prev->next = act->next; - else - active = act->next; - active_len --; - if (rc == RCOK) { - // remove the assert for performance - /* - if (history) - assert(history->tn == tnc); - */ - // tnc ++; - wset->tn = glob_manager.get_ts(txn->get_thd_id()); - STACK_PUSH(history, wset); - DEBUG("occ insert history"); - his_len ++; - //mem_allocator.free(wset->rows, sizeof(row_t *) * wset->set_size); - //mem_allocator.free(wset, sizeof(set_ent)); - } - // pthread_mutex_unlock( &latch ); - sem_post(&_semaphore); - INC_STATS(txn->get_thd_id(),occ_finish_time,get_sys_clock() - starttime); - } -} - -RC OptCC::get_rw_set(TxnManager * txn, set_ent * &rset, set_ent *& wset) { - wset = (set_ent*) mem_allocator.alloc(sizeof(set_ent)); - rset = (set_ent*) mem_allocator.alloc(sizeof(set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR) - wset->rows[n ++] = txn->get_access_original_row(i); - else - rset->rows[m ++] = txn->get_access_original_row(i); - } - - assert(n == wset->set_size); - assert(m == rset->set_size); - return RCOK; -} - -bool OptCC::test_valid(set_ent * set1, set_ent * set2) { - for (UInt32 i = 0; i < set1->set_size; i++) - for (UInt32 j = 0; j < set2->set_size; j++) { - if (set1->rows[i] == set2->rows[j]) { - return false; - } - } - return true; -} diff --git a/contrib/deneva/concurrency_control/occ.h b/contrib/deneva/concurrency_control/occ.h deleted file mode 100644 index 0534c702..00000000 --- a/contrib/deneva/concurrency_control/occ.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _OCC_H_ -#define _OCC_H_ - -#include "row.h" -#include "semaphore.h" - -// For simplicity, the txn hisotry for OCC is oganized as follows: -// 1. history is never deleted. -// 2. hisotry forms a single directional list. -// history head -> hist_1 -> hist_2 -> hist_3 -> ... -> hist_n -// The head is always the latest and the tail the youngest. -// When history is traversed, always go from head -> tail order. - -class TxnManager; - -class set_ent{ -public: - set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - set_ent * next; -}; - -class OptCC { -public: - void init(); - RC validate(TxnManager * txn); - void finish(RC rc, TxnManager * txn); - volatile bool lock_all; - uint64_t lock_txn_id; - -private: - // per row validation similar to Hekaton. - RC per_row_validate(TxnManager * txn); - - // parallel validation in the original OCC paper. - RC central_validate(TxnManager * txn); - void per_row_finish(RC rc, TxnManager * txn); - void central_finish(RC rc, TxnManager * txn); - bool test_valid(set_ent * set1, set_ent * set2); - RC get_rw_set(TxnManager * txni, set_ent * &rset, set_ent *& wset); - - // "history" stores write set of transactions with tn >= smallest running tn - set_ent * history; - set_ent * active; - uint64_t his_len; - uint64_t active_len; - volatile uint64_t tnc; // transaction number counter - pthread_mutex_t latch; - sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/occ_critical_section.cpp b/contrib/deneva/concurrency_control/occ_critical_section.cpp deleted file mode 100644 index 3403cc73..00000000 --- a/contrib/deneva/concurrency_control/occ_critical_section.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -#include "global.h" -#include "helper.h" -#include "txn.h" -#include "occ_critical_section.h" - -void occ_cs::init() { - sem_init(&cs_semaphore, 0, 1); -} - -RC occ_cs::start_critical_section(TxnManager * txn) { - RC rc = RCOK; - sem_wait(&cs_semaphore); - LockEntry *entry = (LockEntry *)mem_allocator.alloc(sizeof(LockEntry)); - entry->txn = txn; - if (owners == NULL) { - STACK_PUSH(owners, entry); - DEBUG("OCC go into critical section %ld\n",txn->get_txn_id()); - goto scs; - } else if (owners->txn == txn) { - DEBUG("OCC wait end and go into critical section %ld\n",txn->get_txn_id()); - } else { - LIST_PUT_TAIL(waiters_head, waiters_tail, entry); - DEBUG("OCC wait for go into critical section %ld\n",txn->get_txn_id()); - rc = WAIT; - } -scs: - sem_post(&cs_semaphore); - return rc; -} - -RC occ_cs::end_critical_section(TxnManager * txn) { - RC rc = RCOK; - DEBUG("OCC want to go out from critical section %ld\n",txn->get_txn_id()); - sem_wait(&cs_semaphore); - // go out from the critical section; - if (owners->txn != txn) { - sem_post(&cs_semaphore); - return rc; - } - mem_allocator.free(owners, sizeof(LockEntry)); - owners = NULL; - DEBUG("OCC go out from critical section %ld\n",txn->get_txn_id()); - LockEntry * entry; - if (waiters_head) { - LIST_GET_HEAD(waiters_head, waiters_tail, entry); - STACK_PUSH(owners, entry); - - txn_table.restart_txn(txn->get_thd_id(), entry->txn->get_txn_id(), - entry->txn->get_batch_id()); - } - sem_post(&cs_semaphore); - return rc; -} - -bool occ_cs::check_critical_section() { - sem_wait(&cs_semaphore); - bool exist = owners == NULL; - sem_post(&cs_semaphore); - return exist; -} - -void occ_cs::set_remote_critical_section(TxnManager * txn) { - sem_wait(&cs_semaphore); - LockEntry *entry = (LockEntry *)mem_allocator.alloc(sizeof(LockEntry)); - entry->txn = txn; - if (owners == NULL) { - STACK_PUSH(owners, entry); - DEBUG("OCC remote set critical section %ld\n",txn->get_txn_id()); - } else if (owners->txn == txn) { - DEBUG("OCC remote has set critical section %ld\n",txn->get_txn_id()); - } - sem_post(&cs_semaphore); -} - -void occ_cs::unset_remote_critical_section(TxnManager * txn) { - sem_wait(&cs_semaphore); - mem_allocator.free(owners, sizeof(LockEntry)); - owners = NULL; - sem_post(&cs_semaphore); -} \ No newline at end of file diff --git a/contrib/deneva/concurrency_control/occ_critical_section.h b/contrib/deneva/concurrency_control/occ_critical_section.h deleted file mode 100644 index 70e4621f..00000000 --- a/contrib/deneva/concurrency_control/occ_critical_section.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef _OCC_CS_H_ -#define _OCC_CS_H_ - -#include "row.h" -#include "semaphore.h" - - -// For simplicity, the txn hisotry for OCC is oganized as follows: -// 1. history is never deleted. -// 2. hisotry forms a single directional list. -// history head -> hist_1 -> hist_2 -> hist_3 -> ... -> hist_n -// The head is always the latest and the tail the youngest. -// When history is traversed, always go from head -> tail order. - -class TxnManager; - -struct LockEntry { - TxnManager * txn; - LockEntry * next; - LockEntry * prev; -}; - -class occ_cs { -public: - void init(); - RC start_critical_section(TxnManager * txn); - RC end_critical_section(TxnManager * txn); - bool check_critical_section(); - void set_remote_critical_section(TxnManager * txn); - void unset_remote_critical_section(TxnManager * txn); -private: - sem_t cs_semaphore; - // Global verification lock of OCC - LockEntry * owners; - LockEntry * waiters_head; - LockEntry * waiters_tail; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_lock.cpp b/contrib/deneva/concurrency_control/row_lock.cpp deleted file mode 100644 index 6d9ddf9d..00000000 --- a/contrib/deneva/concurrency_control/row_lock.cpp +++ /dev/null @@ -1,397 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "helper.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row.h" -#include "txn.h" -#include "row_lock.h" - -void Row_lock::init(row_t * row) { - _row = row; - owners_size = 1;//1031; - owners = NULL; - owners = (LockEntry**) mem_allocator.alloc(sizeof(LockEntry*)*owners_size); - for (uint64_t i = 0; i < owners_size; i++) owners[i] = NULL; - waiters_head = NULL; - waiters_tail = NULL; - owner_cnt = 0; - waiter_cnt = 0; - max_owner_ts = 0; - - latch = new pthread_mutex_t; - pthread_mutex_init(latch, NULL); - - lock_type = LOCK_NONE; - blatch = false; - own_starttime = 0; - -} - -RC Row_lock::lock_get(lock_t type, TxnManager * txn) { - uint64_t *txnids = NULL; - int txncnt = 0; - return lock_get(type, txn, txnids, txncnt); -} - -RC Row_lock::lock_get(lock_t type, TxnManager * txn, uint64_t* &txnids, int &txncnt) { - assert (CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || CC_ALG == CALVIN); - RC rc; - uint64_t starttime = get_sys_clock(); - uint64_t lock_get_start_time = starttime; - if (g_central_man) { - glob_manager.lock_row(_row); - } else { - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock( latch ); - INC_STATS(txn->get_thd_id(),mtx[17],get_sys_clock() - mtx_wait_starttime); - } - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - lock_get_start_time); - if(owner_cnt > 0) { - INC_STATS(txn->get_thd_id(),twopl_already_owned_cnt,1); - } - bool conflict = conflict_lock(lock_type, type); -#if TWOPL_LITE - conflict = owner_cnt > 0; -#endif - if (CC_ALG == WAIT_DIE && !conflict) { - if (waiters_head && txn->get_timestamp() < waiters_head->txn->get_timestamp()) { - conflict = true; - } - } - if (CC_ALG == CALVIN && !conflict) { - if (waiters_head) conflict = true; - } - - if (conflict) { - //printf("conflict! rid%ld txnid%ld ",_row->get_primary_key(),txn->get_txn_id()); - // Cannot be added to the owner list. - if (CC_ALG == NO_WAIT) { - rc = Abort; - DEBUG("abort %ld,%ld %ld %lx\n", txn->get_txn_id(), txn->get_batch_id(), - _row->get_primary_key(), (uint64_t)_row); - //printf("abort %ld %ld %lx\n",txn->get_txn_id(),_row->get_primary_key(),(uint64_t)_row); - goto final; - } else if (CC_ALG == WAIT_DIE) { - /////////////////////////////////////////////////////////// - // - T is the txn currently running - // IF T.ts > min ts of owners - // T can wait - // ELSE - // T should abort - ////////////////////////////////////////////////////////// - - //bool canwait = txn->get_timestamp() > max_owner_ts; - bool canwait = true; - LockEntry * en; - for(uint64_t i = 0; i < owners_size; i++) { - en = owners[i]; - while (en != NULL) { - assert(txn->get_txn_id() != en->txn->get_txn_id()); - assert(txn->get_timestamp() != en->txn->get_timestamp()); - if (txn->get_timestamp() > en->txn->get_timestamp()) { - // printf("abort %ld %ld -- %ld -- - // %f\n",txn->get_txn_id(),en->txn->get_txn_id(),_row->get_primary_key(),(float)(txn->get_timestamp() - // - en->txn->get_timestamp()) / BILLION); - INC_STATS(txn->get_thd_id(), twopl_diff_time, - (txn->get_timestamp() - en->txn->get_timestamp())); - canwait = false; - break; - } - en = en->next; - } - if (!canwait) break; - } - if (canwait) { - // insert txn to the right position - // the waiter list is always in timestamp order - LockEntry * entry = get_entry(); - entry->start_ts = get_sys_clock(); - entry->txn = txn; - entry->type = type; - entry->start_ts = get_sys_clock(); - entry->txn = txn; - entry->type = type; - LockEntry * en; - //txn->lock_ready = false; - ATOM_CAS(txn->lock_ready,1,0); - txn->incr_lr(); - en = waiters_head; - while (en != NULL && txn->get_timestamp() < en->txn->get_timestamp()) { - en = en->next; - } - if (en) { - LIST_INSERT_BEFORE(en, entry,waiters_head); - } else { - LIST_PUT_TAIL(waiters_head, waiters_tail, entry); - } - - waiter_cnt ++; - DEBUG("lk_wait (%ld,%ld): owners %d, own type %d, req type %d, key %ld %lx\n", - txn->get_txn_id(), txn->get_batch_id(), owner_cnt, lock_type, type, - _row->get_primary_key(), (uint64_t)_row); - //txn->twopl_wait_start = get_sys_clock(); - rc = WAIT; - //txn->wait_starttime = get_sys_clock(); - } else { - DEBUG("abort (%ld,%ld): owners %d, own type %d, req type %d, key %ld %lx\n", - txn->get_txn_id(), txn->get_batch_id(), owner_cnt, lock_type, type, - _row->get_primary_key(), (uint64_t)_row); - rc = Abort; - } - } else if (CC_ALG == CALVIN){ - LockEntry * entry = get_entry(); - entry->start_ts = get_sys_clock(); - entry->txn = txn; - entry->type = type; - DEBUG("lk_wait (%ld,%ld): owners %d, own type %d, req type %d, key %ld %lx\n", - txn->get_txn_id(), txn->get_batch_id(), owner_cnt, lock_type, type, - _row->get_primary_key(), (uint64_t)_row); - LIST_PUT_TAIL(waiters_head, waiters_tail, entry); - waiter_cnt ++; - /* - if (txn->twopl_wait_start == 0) { - txn->twopl_wait_start = get_sys_clock(); - } - */ - //txn->lock_ready = false; - ATOM_CAS(txn->lock_ready,true,false); - txn->incr_lr(); - rc = WAIT; - //txn->wait_starttime = get_sys_clock(); - } - } else { - DEBUG("1lock (%ld,%ld): owners %d, own type %d, req type %d, key %ld %lx\n", txn->get_txn_id(), - txn->get_batch_id(), owner_cnt, lock_type, type, _row->get_primary_key(), (uint64_t)_row); -#if DEBUG_TIMELINE - printf("LOCK %ld %ld\n",entry->txn->get_txn_id(),entry->start_ts); -#endif -#if CC_ALG != NO_WAIT - LockEntry * entry = get_entry(); - entry->type = type; - entry->start_ts = get_sys_clock(); - entry->txn = txn; - STACK_PUSH(owners[hash(txn->get_txn_id())], entry); -#endif - if(owner_cnt > 0) { - assert(type == LOCK_SH); - INC_STATS(txn->get_thd_id(),twopl_sh_bypass_cnt,1); - } - if(txn->get_timestamp() > max_owner_ts) { - max_owner_ts = txn->get_timestamp(); - } - owner_cnt ++; - if(lock_type == LOCK_NONE) { - own_starttime = get_sys_clock(); - } - lock_type = type; - rc = RCOK; - - } -final: - uint64_t curr_time = get_sys_clock(); - uint64_t timespan = curr_time - starttime; - if (rc == WAIT && txn->twopl_wait_start == 0) { - txn->twopl_wait_start = curr_time; - } - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - INC_STATS(txn->get_thd_id(),twopl_getlock_time,timespan); - INC_STATS(txn->get_thd_id(),twopl_getlock_cnt,1); - - if (g_central_man) - glob_manager.release_row(_row); - else - pthread_mutex_unlock( latch ); - - - return rc; -} - - -RC Row_lock::lock_release(TxnManager * txn) { - -#if CC_ALG == CALVIN - if (txn->isRecon()) { - return RCOK; - } -#endif - uint64_t starttime = get_sys_clock(); - if (g_central_man) glob_manager.lock_row(_row); - else { - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock( latch ); - INC_STATS(txn->get_thd_id(),mtx[18],get_sys_clock() - mtx_wait_starttime); - } - - DEBUG("unlock (%ld,%ld): owners %d, own type %d, key %ld %lx\n", txn->get_txn_id(), - txn->get_batch_id(), owner_cnt, lock_type, _row->get_primary_key(), (uint64_t)_row); - - // If CC is NO_WAIT or WAIT_DIE, txn should own this lock - // What about Calvin? -#if CC_ALG == NO_WAIT - assert(owner_cnt > 0); - owner_cnt--; - if (owner_cnt == 0) { - INC_STATS(txn->get_thd_id(),twopl_owned_cnt,1); - uint64_t endtime = get_sys_clock(); - INC_STATS(txn->get_thd_id(),twopl_owned_time,endtime - own_starttime); - if(lock_type == LOCK_SH) { - INC_STATS(txn->get_thd_id(),twopl_sh_owned_time,endtime - own_starttime); - INC_STATS(txn->get_thd_id(),twopl_sh_owned_cnt,1); - } else { - INC_STATS(txn->get_thd_id(),twopl_ex_owned_time,endtime - own_starttime); - INC_STATS(txn->get_thd_id(),twopl_ex_owned_cnt,1); - } - lock_type = LOCK_NONE; - } - -#else - - // Try to find the entry in the owners - LockEntry * en = owners[hash(txn->get_txn_id())]; - LockEntry * prev = NULL; - - while (en != NULL && en->txn != txn) { - prev = en; - en = en->next; - } - - if (en) { // find the entry in the owner list - if (prev) prev->next = en->next; - else owners[hash(txn->get_txn_id())] = en->next; - return_entry(en); - owner_cnt --; - if (owner_cnt == 0) { - INC_STATS(txn->get_thd_id(),twopl_owned_cnt,1); - uint64_t endtime = get_sys_clock(); - INC_STATS(txn->get_thd_id(),twopl_owned_time,endtime - own_starttime); - if(lock_type == LOCK_SH) { - INC_STATS(txn->get_thd_id(),twopl_sh_owned_time,endtime - own_starttime); - INC_STATS(txn->get_thd_id(),twopl_sh_owned_cnt,1); - } else { - INC_STATS(txn->get_thd_id(),twopl_ex_owned_time,endtime - own_starttime); - INC_STATS(txn->get_thd_id(),twopl_ex_owned_cnt,1); - } - lock_type = LOCK_NONE; - } - - } else { - assert(false); - en = waiters_head; - while (en != NULL && en->txn != txn) en = en->next; - ASSERT(en); - - LIST_REMOVE(en); - if (en == waiters_head) waiters_head = en->next; - if (en == waiters_tail) waiters_tail = en->prev; - return_entry(en); - waiter_cnt --; - } -#endif - - if (owner_cnt == 0) ASSERT(lock_type == LOCK_NONE); -#if DEBUG_ASSERT && CC_ALG == WAIT_DIE - for (en = waiters_head; en != NULL && en->next != NULL; en = en->next) - assert(en->next->txn->get_timestamp() < en->txn->get_timestamp()); - for (en = waiters_head; en != NULL && en->next != NULL; en = en->next) - assert(en->txn->get_txn_id() !=txn->get_txn_id()); -#endif - - LockEntry * entry; - // If any waiter can join the owners, just do it! - while (waiters_head && !conflict_lock(lock_type, waiters_head->type)) { - LIST_GET_HEAD(waiters_head, waiters_tail, entry); -#if DEBUG_TIMELINE - printf("LOCK %ld %ld\n",entry->txn->get_txn_id(),get_sys_clock()); -#endif - DEBUG("2lock (%ld,%ld): owners %d, own type %d, req type %d, key %ld %lx\n", - entry->txn->get_txn_id(), entry->txn->get_batch_id(), owner_cnt, lock_type, entry->type, - _row->get_primary_key(), (uint64_t)_row); - uint64_t timespan = get_sys_clock() - entry->txn->twopl_wait_start; - entry->txn->twopl_wait_start = 0; -#if CC_ALG != CALVIN - entry->txn->txn_stats.cc_block_time += timespan; - entry->txn->txn_stats.cc_block_time_short += timespan; -#endif - INC_STATS(txn->get_thd_id(),twopl_wait_time,timespan); - -#if CC_ALG != NO_WAIT - STACK_PUSH(owners[hash(entry->txn->get_txn_id())], entry); -#endif - owner_cnt ++; - waiter_cnt --; - if(entry->txn->get_timestamp() > max_owner_ts) { - max_owner_ts = entry->txn->get_timestamp(); - } - ASSERT(entry->txn->lock_ready == false); - //if(entry->txn->decr_lr() == 0 && entry->txn->locking_done) { - if(entry->txn->decr_lr() == 0) { - if(ATOM_CAS(entry->txn->lock_ready,false,true)) { -#if CC_ALG == CALVIN - entry->txn->txn_stats.cc_block_time += timespan; - entry->txn->txn_stats.cc_block_time_short += timespan; -#endif - txn_table.restart_txn(txn->get_thd_id(), entry->txn->get_txn_id(), - entry->txn->get_batch_id()); - } - } - if(lock_type == LOCK_NONE) { - own_starttime = get_sys_clock(); - } - lock_type = entry->type; -#if CC_AlG == NO_WAIT - return_entry(entry); -#endif - } - - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - INC_STATS(txn->get_thd_id(),twopl_release_time,timespan); - INC_STATS(txn->get_thd_id(),twopl_release_cnt,1); - - if (g_central_man) - glob_manager.release_row(_row); - else - pthread_mutex_unlock( latch ); - - - return RCOK; -} - -bool Row_lock::conflict_lock(lock_t l1, lock_t l2) { - if (l1 == LOCK_NONE || l2 == LOCK_NONE) - return false; - else if (l1 == LOCK_EX || l2 == LOCK_EX) - return true; - else - return false; -} - -LockEntry * Row_lock::get_entry() { - LockEntry *entry = (LockEntry *)mem_allocator.alloc(sizeof(LockEntry)); - entry->type = LOCK_NONE; - entry->txn = NULL; - //DEBUG_M("row_lock::get_entry alloc %lx\n",(uint64_t)entry); - return entry; -} -void Row_lock::return_entry(LockEntry * entry) { - //DEBUG_M("row_lock::return_entry free %lx\n",(uint64_t)entry); - mem_allocator.free(entry, sizeof(LockEntry)); -} - diff --git a/contrib/deneva/concurrency_control/row_lock.h b/contrib/deneva/concurrency_control/row_lock.h deleted file mode 100644 index 5879b9fb..00000000 --- a/contrib/deneva/concurrency_control/row_lock.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ROW_LOCK_H -#define ROW_LOCK_H - -struct LockEntry { - lock_t type; - ts_t start_ts; - TxnManager * txn; - LockEntry * next; - LockEntry * prev; -}; - -class Row_lock { -public: - void init(row_t * row); - // [DL_DETECT] txnids are the txn_ids that current txn is waiting for. - RC lock_get(lock_t type, TxnManager * txn); - RC lock_get(lock_t type, TxnManager * txn, uint64_t* &txnids, int &txncnt); - RC lock_release(TxnManager * txn); - -private: - pthread_mutex_t * latch; - bool blatch; - - bool conflict_lock(lock_t l1, lock_t l2); - LockEntry * get_entry(); - void return_entry(LockEntry * entry); - row_t * _row; - uint64_t hash(uint64_t id) { - return id % owners_size; - }; - lock_t lock_type; - UInt32 owner_cnt; - UInt32 waiter_cnt; - - // owners is a hash table - // waiters is a double linked list - // [waiters] head is the oldest txn, tail is the youngest txn. - // So new txns are inserted into the tail. - LockEntry ** owners; - uint64_t owners_size; - LockEntry * waiters_head; - LockEntry * waiters_tail; - uint64_t max_owner_ts; - uint64_t own_starttime; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_maat.cpp b/contrib/deneva/concurrency_control/row_maat.cpp deleted file mode 100644 index 178553ef..00000000 --- a/contrib/deneva/concurrency_control/row_maat.cpp +++ /dev/null @@ -1,316 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "row.h" -#include "txn.h" -#include "row_maat.h" -#include "mem_alloc.h" -#include "manager.h" -#include "helper.h" -#include "maat.h" - -void Row_maat::init(row_t * row) { - _row = row; - - timestamp_last_read = 0; - timestamp_last_write = 0; - maat_avail = true; - uncommitted_writes = new std::set(); - uncommitted_reads = new std::set(); - assert(uncommitted_writes->begin() == uncommitted_writes->end()); - assert(uncommitted_writes->size() == 0); - -} - -RC Row_maat::access(access_t type, TxnManager * txn) { - uint64_t starttime = get_sys_clock(); -#if WORKLOAD == TPCC - read_and_prewrite(txn); -#else - if (type == RD) read(txn); - if (type == WR) prewrite(txn); -#endif - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - return RCOK; -} - -RC Row_maat::read_and_prewrite(TxnManager * txn) { - assert (CC_ALG == MAAT); - RC rc = RCOK; - - uint64_t mtx_wait_starttime = get_sys_clock(); - while (!ATOM_CAS(maat_avail, true, false)) { - } - INC_STATS(txn->get_thd_id(),mtx[30],get_sys_clock() - mtx_wait_starttime); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - mtx_wait_starttime); - DEBUG("READ + PREWRITE %ld -- %ld: lw %ld\n", txn->get_txn_id(), _row->get_primary_key(), - timestamp_last_write); - - // Copy uncommitted writes - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end(); it++) { - uint64_t txn_id = *it; - txn->uncommitted_writes->insert(txn_id); - txn->uncommitted_writes_y->insert(txn_id); - DEBUG(" UW %ld -- %ld: %ld\n",txn->get_txn_id(),_row->get_primary_key(),txn_id); - } - - // Copy uncommitted reads - for(auto it = uncommitted_reads->begin(); it != uncommitted_reads->end(); it++) { - uint64_t txn_id = *it; - txn->uncommitted_reads->insert(txn_id); - DEBUG(" UR %ld -- %ld: %ld\n",txn->get_txn_id(),_row->get_primary_key(),txn_id); - } - - // Copy read timestamp - if(txn->greatest_read_timestamp < timestamp_last_read) - txn->greatest_read_timestamp = timestamp_last_read; - - - // Copy write timestamp - if(txn->greatest_write_timestamp < timestamp_last_write) - txn->greatest_write_timestamp = timestamp_last_write; - - //Add to uncommitted reads (soft lock) - uncommitted_reads->insert(txn->get_txn_id()); - - //Add to uncommitted writes (soft lock) - uncommitted_writes->insert(txn->get_txn_id()); - - ATOM_CAS(maat_avail,false,true); - - return rc; -} - -RC Row_maat::read(TxnManager * txn) { - assert (CC_ALG == MAAT); - RC rc = RCOK; - - uint64_t mtx_wait_starttime = get_sys_clock(); - while (!ATOM_CAS(maat_avail, true, false)) { - } - INC_STATS(txn->get_thd_id(),mtx[30],get_sys_clock() - mtx_wait_starttime); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - mtx_wait_starttime); - DEBUG("READ %ld -- %ld: lw %ld\n", txn->get_txn_id(), _row->get_primary_key(), - timestamp_last_write); - - // Copy uncommitted writes - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end(); it++) { - uint64_t txn_id = *it; - txn->uncommitted_writes->insert(txn_id); - DEBUG(" UW %ld -- %ld: %ld\n",txn->get_txn_id(),_row->get_primary_key(),txn_id); - } - - // Copy write timestamp - if(txn->greatest_write_timestamp < timestamp_last_write) - txn->greatest_write_timestamp = timestamp_last_write; - - //Add to uncommitted reads (soft lock) - uncommitted_reads->insert(txn->get_txn_id()); - - ATOM_CAS(maat_avail,false,true); - - return rc; -} - -RC Row_maat::prewrite(TxnManager * txn) { - assert (CC_ALG == MAAT); - RC rc = RCOK; - - uint64_t mtx_wait_starttime = get_sys_clock(); - while (!ATOM_CAS(maat_avail, true, false)) { - } - INC_STATS(txn->get_thd_id(),mtx[31],get_sys_clock() - mtx_wait_starttime); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - mtx_wait_starttime); - DEBUG("PREWRITE %ld -- %ld: lw %ld, lr %ld\n", txn->get_txn_id(), _row->get_primary_key(), - timestamp_last_write, timestamp_last_read); - - // Copy uncommitted reads - for(auto it = uncommitted_reads->begin(); it != uncommitted_reads->end(); it++) { - uint64_t txn_id = *it; - txn->uncommitted_reads->insert(txn_id); - DEBUG(" UR %ld -- %ld: %ld\n",txn->get_txn_id(),_row->get_primary_key(),txn_id); - } - - // Copy uncommitted writes - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end(); it++) { - uint64_t txn_id = *it; - txn->uncommitted_writes_y->insert(txn_id); - DEBUG(" UW %ld -- %ld: %ld\n",txn->get_txn_id(),_row->get_primary_key(),txn_id); - } - - // Copy read timestamp - if(txn->greatest_read_timestamp < timestamp_last_read) - txn->greatest_read_timestamp = timestamp_last_read; - - // Copy write timestamp - if(txn->greatest_write_timestamp < timestamp_last_write) - txn->greatest_write_timestamp = timestamp_last_write; - - //Add to uncommitted writes (soft lock) - uncommitted_writes->insert(txn->get_txn_id()); - - ATOM_CAS(maat_avail,false,true); - - return rc; -} - -RC Row_maat::abort(access_t type, TxnManager * txn) { - uint64_t mtx_wait_starttime = get_sys_clock(); - while (!ATOM_CAS(maat_avail, true, false)) { - } - INC_STATS(txn->get_thd_id(),mtx[32],get_sys_clock() - mtx_wait_starttime); - DEBUG("Maat Abort %ld: %d -- %ld\n",txn->get_txn_id(),type,_row->get_primary_key()); -#if WORKLOAD == TPCC - uncommitted_reads->erase(txn->get_txn_id()); - uncommitted_writes->erase(txn->get_txn_id()); -#else - if(type == RD) { - uncommitted_reads->erase(txn->get_txn_id()); - } - - if(type == WR) { - uncommitted_writes->erase(txn->get_txn_id()); - } -#endif - - ATOM_CAS(maat_avail,false,true); - return Abort; -} - -RC Row_maat::commit(access_t type, TxnManager * txn, row_t * data) { - uint64_t mtx_wait_starttime = get_sys_clock(); - while (!ATOM_CAS(maat_avail, true, false)) { - } - INC_STATS(txn->get_thd_id(),mtx[33],get_sys_clock() - mtx_wait_starttime); - DEBUG("Maat Commit %ld: %d,%lu -- %ld\n", txn->get_txn_id(), type, txn->get_commit_timestamp(), - _row->get_primary_key()); - -#if WORKLOAD == TPCC - if(txn->get_commit_timestamp() > timestamp_last_read) timestamp_last_read = txn->get_commit_timestamp(); - uncommitted_reads->erase(txn->get_txn_id()); - if(txn->get_commit_timestamp() > timestamp_last_write) timestamp_last_write = txn->get_commit_timestamp(); - uncommitted_writes->erase(txn->get_txn_id()); - // Apply write to DB - write(data); - - uint64_t txn_commit_ts = txn->get_commit_timestamp(); - // Forward validation - // Check uncommitted writes against this txn's - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end();it++) { - if(txn->uncommitted_writes->count(*it) == 0) { - // apply timestamps - // these write txns need to come AFTER this txn - uint64_t it_lower = time_table.get_lower(txn->get_thd_id(),*it); - if(it_lower <= txn_commit_ts) { - time_table.set_lower(txn->get_thd_id(),*it,txn_commit_ts+1); - DEBUG("MAAT forward val set lower %ld: %lu\n",*it,txn_commit_ts+1); - } - } - } - - uint64_t lower = time_table.get_lower(txn->get_thd_id(),txn->get_txn_id()); - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end();it++) { - if(txn->uncommitted_writes_y->count(*it) == 0) { - // apply timestamps - // these write txns need to come BEFORE this txn - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper >= txn_commit_ts) { - time_table.set_upper(txn->get_thd_id(),*it,txn_commit_ts-1); - DEBUG("MAAT forward val set upper %ld: %lu\n",*it,txn_commit_ts-1); - } - } - } - - for(auto it = uncommitted_reads->begin(); it != uncommitted_reads->end();it++) { - if(txn->uncommitted_reads->count(*it) == 0) { - // apply timestamps - // these write txns need to come BEFORE this txn - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper >= lower) { - time_table.set_upper(txn->get_thd_id(),*it,lower-1); - DEBUG("MAAT forward val set upper %ld: %lu\n",*it,lower-1); - } - } - } - -#else - uint64_t txn_commit_ts = txn->get_commit_timestamp(); - if(type == RD) { - if (txn_commit_ts > timestamp_last_read) timestamp_last_read = txn_commit_ts; - uncommitted_reads->erase(txn->get_txn_id()); - - // Forward validation - // Check uncommitted writes against this txn's - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end();it++) { - if(txn->uncommitted_writes->count(*it) == 0) { - // apply timestamps - // these write txns need to come AFTER this txn - uint64_t it_lower = time_table.get_lower(txn->get_thd_id(),*it); - if(it_lower <= txn_commit_ts) { - time_table.set_lower(txn->get_thd_id(),*it,txn_commit_ts+1); - DEBUG("MAAT forward val set lower %ld: %lu\n",*it,txn_commit_ts+1); - } - } - } - - } - /* -#if WORKLOAD == TPCC - if(txn_commit_ts > timestamp_last_read) - timestamp_last_read = txn_commit_ts; -#endif -*/ - - if(type == WR) { - if (txn_commit_ts > timestamp_last_write) timestamp_last_write = txn_commit_ts; - uncommitted_writes->erase(txn->get_txn_id()); - // Apply write to DB - write(data); - uint64_t lower = time_table.get_lower(txn->get_thd_id(),txn->get_txn_id()); - for(auto it = uncommitted_writes->begin(); it != uncommitted_writes->end();it++) { - if(txn->uncommitted_writes_y->count(*it) == 0) { - // apply timestamps - // these write txns need to come BEFORE this txn - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper >= txn_commit_ts) { - time_table.set_upper(txn->get_thd_id(),*it,txn_commit_ts-1); - DEBUG("MAAT forward val set upper %ld: %lu\n",*it,txn_commit_ts-1); - } - } - } - - for(auto it = uncommitted_reads->begin(); it != uncommitted_reads->end();it++) { - if(txn->uncommitted_reads->count(*it) == 0) { - // apply timestamps - // these write txns need to come BEFORE this txn - uint64_t it_upper = time_table.get_upper(txn->get_thd_id(),*it); - if(it_upper >= lower) { - time_table.set_upper(txn->get_thd_id(),*it,lower-1); - DEBUG("MAAT forward val set upper %ld: %lu\n",*it,lower-1); - } - } - } - - } -#endif - - ATOM_CAS(maat_avail,false,true); - return RCOK; -} - -void Row_maat::write(row_t* data) { _row->copy(data); } diff --git a/contrib/deneva/concurrency_control/row_maat.h b/contrib/deneva/concurrency_control/row_maat.h deleted file mode 100644 index af9ab0b0..00000000 --- a/contrib/deneva/concurrency_control/row_maat.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ROW_MAAT_H -#define ROW_MAAT_H - -class Row_maat { -public: - void init(row_t * row); - RC access(access_t type, TxnManager * txn); - RC read_and_prewrite(TxnManager * txn); - RC read(TxnManager * txn); - RC prewrite(TxnManager * txn); - RC abort(access_t type, TxnManager * txn); - RC commit(access_t type, TxnManager * txn, row_t * data); - void write(row_t * data); - -private: - volatile bool maat_avail; - - row_t * _row; - - std::set * uncommitted_reads; - std::set * uncommitted_writes; - uint64_t timestamp_last_read; - uint64_t timestamp_last_write; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_mvcc.cpp b/contrib/deneva/concurrency_control/row_mvcc.cpp deleted file mode 100644 index c35cfeef..00000000 --- a/contrib/deneva/concurrency_control/row_mvcc.cpp +++ /dev/null @@ -1,380 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -//#include "mvcc.h" -#include "txn.h" -#include "row.h" -#include "manager.h" -#include "row_mvcc.h" -#include "mem_alloc.h" - -void Row_mvcc::init(row_t * row) { - _row = row; - readreq_mvcc = NULL; - prereq_mvcc = NULL; - readhis = NULL; - writehis = NULL; - readhistail = NULL; - writehistail = NULL; - blatch = false; - latch = (pthread_mutex_t *)mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(latch, NULL); - whis_len = 0; - rhis_len = 0; - rreq_len = 0; - preq_len = 0; -} - -row_t * Row_mvcc::clear_history(TsType type, ts_t ts) { - MVHisEntry ** queue; - MVHisEntry ** tail; - switch (type) { - case R_REQ: - queue = &readhis; - tail = &readhistail; - break; - case W_REQ: - queue = &writehis; - tail = &writehistail; - break; - default: - assert(false); - } - MVHisEntry * his = *tail; - MVHisEntry * prev = NULL; - row_t * row = NULL; - while (his && his->prev && his->prev->ts < ts) { - prev = his->prev; - assert(prev->ts >= his->ts); - if (row != NULL) { - row->free_row(); - mem_allocator.free(row, sizeof(row_t)); - } - row = his->row; - his->row = NULL; - return_his_entry(his); - his = prev; - if (type == R_REQ) { - rhis_len--; - } else { - whis_len--; - } - } - *tail = his; - if (*tail) { - (*tail)->next = NULL; - } - if (his == NULL) { - *queue = NULL; - } - return row; -} - -MVReqEntry * Row_mvcc::get_req_entry() { - return (MVReqEntry *) mem_allocator.alloc(sizeof(MVReqEntry)); -} - -void Row_mvcc::return_req_entry(MVReqEntry * entry) { - mem_allocator.free(entry, sizeof(MVReqEntry)); -} - -MVHisEntry * Row_mvcc::get_his_entry() { - return (MVHisEntry *) mem_allocator.alloc(sizeof(MVHisEntry)); -} - -void Row_mvcc::return_his_entry(MVHisEntry * entry) { - if (entry->row != NULL) { - entry->row->free_row(); - mem_allocator.free(entry->row, sizeof(row_t)); - } - mem_allocator.free(entry, sizeof(MVHisEntry)); -} - -void Row_mvcc::buffer_req(TsType type, TxnManager *txn) { - MVReqEntry * req_entry = get_req_entry(); - assert(req_entry != NULL); - req_entry->txn = txn; - req_entry->ts = txn->get_timestamp(); - req_entry->starttime = get_sys_clock(); - if (type == R_REQ) { - rreq_len ++; - STACK_PUSH(readreq_mvcc, req_entry); - } else if (type == P_REQ) { - preq_len ++; - STACK_PUSH(prereq_mvcc, req_entry); - } -} - -// for type == R_REQ -// debuffer all non-conflicting requests -// for type == P_REQ -// debuffer the request with matching txn. -MVReqEntry * Row_mvcc::debuffer_req( TsType type, TxnManager * txn) { - MVReqEntry ** queue; - MVReqEntry * return_queue = NULL; - switch (type) { - case R_REQ: - queue = &readreq_mvcc; - break; - case P_REQ: - queue = &prereq_mvcc; - break; - default: - assert(false); - } - - MVReqEntry * req = *queue; - MVReqEntry * prev_req = NULL; - if (txn != NULL) { - assert(type == P_REQ); - while (req != NULL && req->txn != txn) { - prev_req = req; - req = req->next; - } - assert(req != NULL); - if (prev_req != NULL) - prev_req->next = req->next; - else { - assert( req == *queue ); - *queue = req->next; - } - preq_len --; - req->next = return_queue; - return_queue = req; - } else { - assert(type == R_REQ); - // should return all non-conflicting read requests - // The following code makes the assumption that each write op - // must read the row first. i.e., there is no write-only operation. - uint64_t min_pts = UINT64_MAX; - //uint64_t min_pts = (1UL << 32); - for (MVReqEntry * preq = prereq_mvcc; preq != NULL; preq = preq->next) - if (preq->ts < min_pts) min_pts = preq->ts; - while (req != NULL) { - if (req->ts <= min_pts) { - if (prev_req == NULL) { - assert(req == *queue); - *queue = (*queue)->next; - } else prev_req->next = req->next; - rreq_len --; - req->next = return_queue; - return_queue = req; - req = (prev_req == NULL)? *queue : prev_req->next; - } else { - prev_req = req; - req = req->next; - } - } - } - - return return_queue; -} - -void Row_mvcc::insert_history(ts_t ts, row_t *row) { - MVHisEntry * new_entry = get_his_entry(); - new_entry->ts = ts; - new_entry->row = row; - if (row != NULL) - whis_len ++; - else - rhis_len++; - MVHisEntry **queue = (row == NULL) ? &(readhis) : &(writehis); - MVHisEntry **tail = (row == NULL) ? &(readhistail) : &(writehistail); - MVHisEntry * his = *queue; - while (his != NULL && ts < his->ts) { - his = his->next; - } - - if (his) { - LIST_INSERT_BEFORE(his, new_entry,(*queue)); - //if (his == *queue) - // *queue = new_entry; - } else LIST_PUT_TAIL((*queue), (*tail), new_entry); -} - -bool Row_mvcc::conflict(TsType type, ts_t ts) { - // find the unique prewrite-read couple (prewrite before read) - // if no such couple found, no conflict. - // else - // if exists writehis between them, NO conflict!!!! - // else, CONFLICT!!! - ts_t rts; - ts_t pts; - if (type == R_REQ) { - rts = ts; - pts = 0; - MVReqEntry * req = prereq_mvcc; - while (req != NULL) { - if (req->ts < ts && req->ts > pts) { - pts = req->ts; - } - req = req->next; - } - if (pts == 0) // no such couple exists - return false; - } else if (type == P_REQ) { - rts = 0; - pts = ts; - MVHisEntry * his = readhis; - while (his != NULL) { - if (his->ts > ts) { - rts = his->ts; - } else - break; - his = his->next; - } - if (rts == 0) // no couple exists - return false; - assert(rts > pts); - } - MVHisEntry * whis = writehis; - while (whis != NULL && whis->ts > pts) { - if (whis->ts < rts) return false; - whis = whis->next; - } - return true; -} - -RC Row_mvcc::access(TxnManager * txn, TsType type, row_t * row) { - RC rc = RCOK; - ts_t ts = txn->get_timestamp(); - uint64_t starttime = get_sys_clock(); - - if (g_central_man) { - glob_manager.lock_row(_row); - } else { - pthread_mutex_lock(latch); - } - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - uint64_t acesstime = get_sys_clock(); - if (type == R_REQ) { - // figure out if ts is in interval(prewrite(x)) - bool conf = conflict(type, ts); - if ( conf && rreq_len < g_max_read_req) { - rc = WAIT; - DEBUG("buf R_REQ %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - buffer_req(R_REQ, txn); - txn->ts_ready = false; - } else if (conf) { - rc = Abort; - printf("\nshould never happen. rreq_len=%ld", rreq_len); - } else { - // return results immediately. - rc = RCOK; - MVHisEntry * whis = writehis; - while (whis != NULL && whis->ts > ts) whis = whis->next; - row_t *ret = (whis == NULL) ? _row : whis->row; - txn->cur_row = ret; - insert_history(ts, NULL); - assert(strstr(_row->get_table_name(), ret->get_table_name())); - } - } else if (type == P_REQ) { - if (conflict(type, ts)) { - rc = Abort; - } else if (preq_len < g_max_pre_req) { - DEBUG("buf P_REQ %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - buffer_req(P_REQ, txn); - rc = RCOK; - } else { - rc = Abort; - } - } else if (type == W_REQ) { - rc = RCOK; - // the corresponding prewrite request is debuffered. - insert_history(ts, row); - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - MVReqEntry * req = debuffer_req(P_REQ, txn); - assert(req != NULL); - return_req_entry(req); - update_buffer(txn); - } else if (type == XP_REQ) { - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - MVReqEntry * req = debuffer_req(P_REQ, txn); - assert (req != NULL); - return_req_entry(req); - update_buffer(txn); - } else { - assert(false); - } - INC_STATS(txn->get_thd_id(), trans_mvcc_access, get_sys_clock() - acesstime); - if (rc == RCOK) { - uint64_t clear_his_starttime = get_sys_clock(); - if (whis_len > g_his_recycle_len || rhis_len > g_his_recycle_len) { - ts_t t_th = glob_manager.get_min_ts(txn->get_thd_id()); - if (readhistail && readhistail->ts < t_th) { - clear_history(R_REQ, t_th); - } - // Here is a tricky bug. The oldest transaction might be - // reading an even older version whose timestamp < t_th. - // But we cannot recycle that version because it is still being used. - // So the HACK here is to make sure that the first version older than - // t_th not be recycled. - if (whis_len > 1 && writehistail->prev->ts < t_th) { - row_t * latest_row = clear_history(W_REQ, t_th); - if (latest_row != NULL) { - assert(_row != latest_row); - _row->copy(latest_row); - } - } - } - uint64_t clear_his_timespan = get_sys_clock() - clear_his_starttime; - INC_STATS(txn->get_thd_id(), trans_mvcc_clear_history, clear_his_timespan); - } - - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - - if (g_central_man) { - glob_manager.release_row(_row); - } else { - pthread_mutex_unlock(latch); - } - - return rc; -} - -void Row_mvcc::update_buffer(TxnManager * txn) { - MVReqEntry * ready_read = debuffer_req(R_REQ, NULL); - MVReqEntry * req = ready_read; - MVReqEntry * tofree = NULL; - - while (req != NULL) { - // find the version for the request - MVHisEntry * whis = writehis; - while (whis != NULL && whis->ts > req->ts) { - whis = whis->next; - } - row_t *row = (whis == NULL) ? _row : whis->row; - req->txn->cur_row = row; - insert_history(req->ts, NULL); - assert(row->get_data() != NULL); - assert(row->get_table() != NULL); - assert(row->get_schema() == _row->get_schema()); - - req->txn->ts_ready = true; - #if WORKLOAD!=DA //DA do not need restart - uint64_t timespan = get_sys_clock() - req->starttime; - req->txn->txn_stats.cc_block_time += timespan; - req->txn->txn_stats.cc_block_time_short += timespan; - txn_table.restart_txn(txn->get_thd_id(),req->txn->get_txn_id(),0); - #endif - tofree = req; - req = req->next; - // free ready_read - return_req_entry(tofree); - } -} diff --git a/contrib/deneva/concurrency_control/row_mvcc.h b/contrib/deneva/concurrency_control/row_mvcc.h deleted file mode 100644 index 2175ff03..00000000 --- a/contrib/deneva/concurrency_control/row_mvcc.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ROW_MVCC_H -#define ROW_MVCC_H - -class table_t; -class Catalog; -class TxnManager; - -struct MVReqEntry { - TxnManager * txn; - ts_t ts; - ts_t starttime; - MVReqEntry * next; -}; - -struct MVHisEntry { - ts_t ts; - // only for write history. The value needs to be stored. -// char * data; - row_t * row; - MVHisEntry * next; - MVHisEntry * prev; -}; - - - -class Row_mvcc { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type, row_t * row); -private: - pthread_mutex_t * latch; - bool blatch; - - row_t * _row; - MVReqEntry * get_req_entry(); - void return_req_entry(MVReqEntry * entry); - MVHisEntry * get_his_entry(); - void return_his_entry(MVHisEntry * entry); - - bool conflict(TsType type, ts_t ts); - void buffer_req(TsType type, TxnManager * txn); - MVReqEntry * debuffer_req( TsType type, TxnManager * txn = NULL); - void update_buffer(TxnManager * txn); - void insert_history( ts_t ts, row_t * row); - - row_t * clear_history(TsType type, ts_t ts); - - MVReqEntry * readreq_mvcc; - MVReqEntry * prereq_mvcc; - MVHisEntry * readhis; - MVHisEntry * writehis; - MVHisEntry * readhistail; - MVHisEntry * writehistail; - uint64_t whis_len; - uint64_t rhis_len; - uint64_t rreq_len; - uint64_t preq_len; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_null.cpp b/contrib/deneva/concurrency_control/row_null.cpp deleted file mode 100644 index 0e4e075d..00000000 --- a/contrib/deneva/concurrency_control/row_null.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "row_null.h" - -#include "helper.h" -#include "manager.h" -#include "mem_alloc.h" -#include "txn.h" - -void Row_null::init(row_t* row) { - _row = row; - blatch = false; - latch = (pthread_mutex_t*)mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(latch, NULL); -} - -RC Row_null::access(TsType type, TxnManager* txn, row_t* row, uint64_t& version) { - uint64_t starttime = get_sys_clock(); - RC rc = RCOK; - // rc = read_and_write(type, txn, row, version); - row = this->_row; - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - return rc; -} - -RC Row_null::abort(access_t type, TxnManager* txn) { - return Abort; -} - -RC Row_null::commit(access_t type, TxnManager* txn, row_t* data, uint64_t& version) { - return RCOK; -} diff --git a/contrib/deneva/concurrency_control/row_null.h b/contrib/deneva/concurrency_control/row_null.h deleted file mode 100644 index 115657aa..00000000 --- a/contrib/deneva/concurrency_control/row_null.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef ROW_NULL_H -#define ROW_NULL_H -#include "../storage/row.h" -class table_t; -class Catalog; -class TxnManager; - -class Row_null { -public: - void init(row_t* row); - RC access(TsType type, TxnManager* txn, row_t* row, uint64_t& version); - RC abort(access_t type, TxnManager* txn); - RC commit(access_t type, TxnManager* txn, row_t* data, uint64_t& version); - -private: - row_t* _row; - - pthread_mutex_t* latch; - bool blatch; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_occ.cpp b/contrib/deneva/concurrency_control/row_occ.cpp deleted file mode 100644 index ed496d12..00000000 --- a/contrib/deneva/concurrency_control/row_occ.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "txn.h" -#include "row.h" -#include "row_occ.h" -#include "mem_alloc.h" - -void Row_occ::init(row_t *row) { - _row = row; - _latch = (pthread_mutex_t *)mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(_latch, NULL); - sem_init(&_semaphore, 0, 1); - wts = 0; - lock_tid = 0; - blatch = false; -} - -RC Row_occ::access(TxnManager *txn, TsType type) { - RC rc = RCOK; - //pthread_mutex_lock( _latch ); - uint64_t starttime = get_sys_clock(); - sem_wait(&_semaphore); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - if (type == R_REQ) { -#if CC_ALG == FOCC - if (lock_tid != 0 && lock_tid != txn->get_txn_id()) { - rc = Abort; - } else if (txn->get_start_timestamp() < wts) { -#else - if (txn->get_start_timestamp() < wts) { -#endif - INC_STATS(txn->get_thd_id(),occ_ts_abort_cnt,1); - rc = Abort; - } else { - txn->cur_row->copy(_row); - rc = RCOK; - } - } else assert(false); - // pthread_mutex_unlock( _latch ); - sem_post(&_semaphore); - return rc; -} - -void Row_occ::latch() { - //pthread_mutex_lock( _latch ); - sem_wait(&_semaphore); -} - -bool Row_occ::validate(uint64_t ts) { - if (ts < wts) - return false; - else - return true; -} - -void Row_occ::write(row_t *data, uint64_t ts) { - _row->copy(data); - if (PER_ROW_VALID) { - assert(ts > wts); - wts = ts; - } -} - -void Row_occ::release() { - //pthread_mutex_unlock( _latch ); - sem_post(&_semaphore); -} - -/* --------------- only used for focc -----------------------*/ - -bool Row_occ::try_lock(uint64_t tid) { - bool success = true; - sem_wait(&_semaphore); - if (lock_tid == 0 || lock_tid == tid) { - lock_tid = tid; - } else success = false; - sem_post(&_semaphore); - return success; -} - -void Row_occ::release_lock(uint64_t tid) { - sem_wait(&_semaphore); - if (lock_tid == tid) { - lock_tid = 0; - } - sem_post(&_semaphore); -} - -uint64_t Row_occ::check_lock() { - sem_wait(&_semaphore); - uint64_t tid = lock_tid; - sem_post(&_semaphore); - return tid; -} - -/* --------------- only used for focc -----------------------*/ diff --git a/contrib/deneva/concurrency_control/row_occ.h b/contrib/deneva/concurrency_control/row_occ.h deleted file mode 100644 index b4549244..00000000 --- a/contrib/deneva/concurrency_control/row_occ.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ROW_OCC_H -#define ROW_OCC_H -#include "semaphore.h" - -class table_t; -class Catalog; -class TxnManager; -struct TsReqEntry; - -class Row_occ { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type); - void latch(); - // ts is the start_ts of the validating txn - bool validate(uint64_t ts); - void write(row_t * data, uint64_t ts); - void release(); - - /* --------------- only used for focc -----------------------*/ - bool try_lock(uint64_t tid); - void release_lock(uint64_t tid); - uint64_t check_lock(); - /* --------------- only used for focc -----------------------*/ -private: - pthread_mutex_t * _latch; - sem_t _semaphore; - bool blatch; - - row_t * _row; - // the last update time - ts_t wts; - - /* --------------- only used for focc -----------------------*/ - uint64_t lock_tid; - /* --------------- only used for focc -----------------------*/ -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_silo.cpp b/contrib/deneva/concurrency_control/row_silo.cpp deleted file mode 100644 index f1ac6e26..00000000 --- a/contrib/deneva/concurrency_control/row_silo.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: zhanhaozhao@ruc.edu.cn - * - */ - -#include "txn.h" -#include "row.h" -#include "row_silo.h" -#include "mem_alloc.h" - -#if CC_ALG==SILO - -void -Row_silo::init(row_t * row) -{ - _row = row; -#if ATOMIC_WORD - _tid_word = 0; -#else - _latch = (pthread_mutex_t *) _mm_malloc(sizeof(pthread_mutex_t), 64); - pthread_mutex_init( _latch, NULL ); - _tid = 0; -#endif -} - -RC -Row_silo::access(TxnManager * txn, TsType type, row_t * local_row) { - - if (type == R_REQ) { - DEBUG("READ %ld -- %ld, table name: %s \n",txn->get_txn_id(),_row->get_primary_key(),_row->get_table_name()); - } else if (type == P_REQ) { - DEBUG("WRITE %ld -- %ld \n",txn->get_txn_id(),_row->get_primary_key()); - } - -#if ATOMIC_WORD - uint64_t v = 0; - uint64_t v2 = 1; - - while (v2 != v) { - v = _tid_word; - while (v & LOCK_BIT) { - PAUSE_SILO - v = _tid_word; - } - local_row->copy(_row); - COMPILER_BARRIER - v2 = _tid_word; - } - txn->last_tid = v & (~LOCK_BIT); -#else - if (!try_lock()) - { - return Abort; - // break; - } - DEBUG("silo %ld read lock row %ld \n", txn->get_txn_id(), _row->get_primary_key()); - local_row->copy(_row); - txn->last_tid = _tid; - release(); - DEBUG("silo %ld read release row %ld \n", txn->get_txn_id(), _row->get_primary_key()); -#endif - return RCOK; -} - -bool -Row_silo::validate(ts_t tid, bool in_write_set) { -#if ATOMIC_WORD - uint64_t v = _tid_word; - if (in_write_set) - return tid == (v & (~LOCK_BIT)); - - if (v & LOCK_BIT) - return false; - else if (tid != (v & (~LOCK_BIT))) - return false; - else - return true; -#else - if (in_write_set) - return tid == _tid; - if (!try_lock()) - return false; - - DEBUG("silo %ld validate lock row %ld \n", tid, _row->get_primary_key()); - bool valid = (tid == _tid); - release(); - DEBUG("silo %ld validate release row %ld \n", tid, _row->get_primary_key()); - return valid; -#endif -} - -void -Row_silo::write(row_t * data, uint64_t tid) { - _row->copy(data); -#if ATOMIC_WORD - uint64_t v = _tid_word; - if (tid > (v & (~LOCK_BIT)) && (v & LOCK_BIT)) - _tid_word = (tid | LOCK_BIT); -#else - _tid = tid; -#endif -} - -void -Row_silo::lock() { -#if ATOMIC_WORD - uint64_t v = _tid_word; - while ((v & LOCK_BIT) || !__sync_bool_compare_and_swap(&_tid_word, v, v | LOCK_BIT)) { - PAUSE_SILO - v = _tid_word; - } -#else - pthread_mutex_lock( _latch ); -#endif -} - -void -Row_silo::release() { -#if ATOMIC_WORD - assert(_tid_word & LOCK_BIT); - _tid_word = _tid_word & (~LOCK_BIT); -#else - pthread_mutex_unlock( _latch ); -#endif -} - -bool -Row_silo::try_lock() -{ -#if ATOMIC_WORD - uint64_t v = _tid_word; - if (v & LOCK_BIT) // already locked - return false; - return __sync_bool_compare_and_swap(&_tid_word, v, (v | LOCK_BIT)); -#else - return pthread_mutex_trylock( _latch ) != EBUSY; - -#endif -} - -uint64_t -Row_silo::get_tid() -{ -#if ATOMIC_WORD - assert(ATOMIC_WORD); - return _tid_word & (~LOCK_BIT); -#else - return _tid; -#endif -} - -#endif diff --git a/contrib/deneva/concurrency_control/row_silo.h b/contrib/deneva/concurrency_control/row_silo.h deleted file mode 100644 index 4dfeb5be..00000000 --- a/contrib/deneva/concurrency_control/row_silo.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: zhanhaozhao@ruc.edu.cn - * - */ - -#pragma once - -class table_t; -class Catalog; -class txn_man; -struct TsReqEntry; - -#if CC_ALG==SILO -#define LOCK_BIT (1UL << 63) - -class Row_silo { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type, row_t * local_row); - - bool validate(ts_t tid, bool in_write_set); - void write(row_t * data, uint64_t tid); - - void lock(); - void release(); - bool try_lock(); - uint64_t get_tid(); -#if ATOMIC_WORD - void assert_lock() {assert(_tid_word & LOCK_BIT); } -#else - void assert_lock() { } -#endif - -private: -#if ATOMIC_WORD - volatile uint64_t _tid_word; -#else - pthread_mutex_t * _latch; - ts_t _tid; -#endif - row_t * _row; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_ssi.cpp b/contrib/deneva/concurrency_control/row_ssi.cpp deleted file mode 100644 index de71c42d..00000000 --- a/contrib/deneva/concurrency_control/row_ssi.cpp +++ /dev/null @@ -1,428 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@tencent.com - * - */ - -#include "txn.h" -#include "row.h" -#include "manager.h" -#include "ssi.h" -#include "row_ssi.h" -#include "mem_alloc.h" - -void Row_ssi::init(row_t * row) { - _row = row; - si_read_lock = NULL; - write_lock = NULL; - - prereq_mvcc = NULL; - readhis = NULL; - writehis = NULL; - readhistail = NULL; - writehistail = NULL; - blatch = false; - latch = (pthread_mutex_t *) mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(latch, NULL); - whis_len = 0; - rhis_len = 0; - - preq_len = 0; -} - -row_t * Row_ssi::clear_history(TsType type, ts_t ts) { - SSIHisEntry ** queue; - SSIHisEntry ** tail; - switch (type) { - case R_REQ: - queue = &readhis; - tail = &readhistail; - break; - case W_REQ: - queue = &writehis; - tail = &writehistail; - break; - default: - assert(false); - } - SSIHisEntry * his = *tail; - SSIHisEntry * prev = NULL; - row_t * row = NULL; - while (his && his->prev && his->prev->ts < ts) { - prev = his->prev; - assert(prev->ts >= his->ts); - if (row != NULL) { - row->free_row(); - mem_allocator.free(row, sizeof(row_t)); - } - row = his->row; - his->row = NULL; - return_his_entry(his); - his = prev; - if (type == R_REQ) rhis_len --; - else whis_len --; - } - *tail = his; - if (*tail) (*tail)->next = NULL; - if (his == NULL) *queue = NULL; - return row; -} - -SSIReqEntry * Row_ssi::get_req_entry() { - return (SSIReqEntry *) mem_allocator.alloc(sizeof(SSIReqEntry)); -} - -void Row_ssi::return_req_entry(SSIReqEntry * entry) { - mem_allocator.free(entry, sizeof(SSIReqEntry)); -} - -SSIHisEntry * Row_ssi::get_his_entry() { - return (SSIHisEntry *) mem_allocator.alloc(sizeof(SSIHisEntry)); -} - -void Row_ssi::return_his_entry(SSIHisEntry * entry) { - if (entry->row != NULL) { - entry->row->free_row(); - mem_allocator.free(entry->row, sizeof(row_t)); - } - mem_allocator.free(entry, sizeof(SSIHisEntry)); -} - -void Row_ssi::buffer_req(TsType type, TxnManager * txn) -{ - SSIReqEntry * req_entry = get_req_entry(); - assert(req_entry != NULL); - req_entry->txn = txn; - req_entry->ts = txn->get_start_timestamp(); - req_entry->starttime = get_sys_clock(); - if (type == P_REQ) { - preq_len ++; - STACK_PUSH(prereq_mvcc, req_entry); - } -} - -// for type == R_REQ -// debuffer all non-conflicting requests -// for type == P_REQ -// debuffer the request with matching txn. -SSIReqEntry * Row_ssi::debuffer_req( TsType type, TxnManager * txn) { - SSIReqEntry ** queue = &prereq_mvcc; - SSIReqEntry * return_queue = NULL; - - SSIReqEntry * req = *queue; - SSIReqEntry * prev_req = NULL; - if (txn != NULL) { - assert(type == P_REQ); - while (req != NULL && req->txn != txn) { - prev_req = req; - req = req->next; - } - assert(req != NULL); - if (prev_req != NULL) - prev_req->next = req->next; - else { - assert( req == *queue ); - *queue = req->next; - } - preq_len --; - req->next = return_queue; - return_queue = req; - } - return return_queue; -} - -void Row_ssi::insert_history(ts_t ts, TxnManager * txn, row_t * row) -{ - SSIHisEntry * new_entry = get_his_entry(); - new_entry->ts = ts; - new_entry->txn = txn->get_txn_id(); - new_entry->row = row; - if (row != NULL) { - whis_len ++; - } else { - rhis_len ++; - } - SSIHisEntry ** queue = (row == NULL)? - &(readhis) : &(writehis); - SSIHisEntry ** tail = (row == NULL)? - &(readhistail) : &(writehistail); - SSIHisEntry * his = *queue; - while (his != NULL && ts < his->ts) { - his = his->next; - } - - if (his) { - LIST_INSERT_BEFORE(his, new_entry,(*queue)); - } else - LIST_PUT_TAIL((*queue), (*tail), new_entry); -} - -SSILockEntry * Row_ssi::get_entry() { - SSILockEntry * entry = (SSILockEntry *) - mem_allocator.alloc(sizeof(SSILockEntry)); - entry->type = LOCK_NONE; - entry->txn = 0; - - return entry; -} - -void Row_ssi::get_lock(lock_t type, TxnManager * txn) { - SSILockEntry * entry = get_entry(); - entry->type = type; - entry->start_ts = get_sys_clock(); - entry->txn = txn->get_txn_id(); - if (type == LOCK_SH) - STACK_PUSH(si_read_lock, entry); - if (type == LOCK_EX) - STACK_PUSH(write_lock, entry); - if (type == LOCK_COM) - commit_lock = txn->get_txn_id(); -} - -void Row_ssi::release_lock(lock_t type, TxnManager * txn) { - if (type == LOCK_SH) { - SSILockEntry * read = si_read_lock; - SSILockEntry * pre_read = NULL; - while (read != NULL) { - if (read->txn == txn->get_txn_id()) { - assert(read != NULL); - if (pre_read != NULL) - pre_read->next = read->next; - else { - assert( read == si_read_lock ); - si_read_lock = read->next; - } - read->next = NULL; - } - pre_read = read; - read = read->next; - } - } - if (type == LOCK_EX) { - SSILockEntry * write = write_lock; - SSILockEntry * pre_write = NULL; - while (write != NULL) { - if (write->txn == txn->get_txn_id()) { - assert(write != NULL); - if (pre_write != NULL) - pre_write->next = write->next; - else { - assert( write == write_lock ); - write_lock = write->next; - } - write->next = NULL; - } - pre_write = write; - write = write->next; - } - } - if (type == LOCK_COM) { - if (commit_lock == txn->get_txn_id()) commit_lock = 0; - } -} - -RC Row_ssi::access(TxnManager * txn, TsType type, row_t * row) { - RC rc = RCOK; - ts_t ts = txn->get_commit_timestamp(); - ts_t start_ts = txn->get_start_timestamp(); - uint64_t starttime = get_sys_clock(); - txnid_t txnid = txn->get_txn_id(); - if (g_central_man) { - glob_manager.lock_row(_row); - } else { - pthread_mutex_lock(latch); - } - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - if (type == R_REQ) { - // Add the si-read lock - get_lock(LOCK_SH, txn); - // Traverse the whole write lock - SSILockEntry * write = write_lock; - while (write != NULL) { - if (write->txn == txnid) { - write = write->next; - continue; - } - inout_table.set_inConflict(txn->get_thd_id(), write->txn, txnid); - inout_table.set_outConflict(txn->get_thd_id(), txnid, write->txn); - DEBUG("ssi read the write_lock in %ld out %ld\n",write->txn, txnid); - write = write->next; - } - // Read the row - rc = RCOK; - SSIHisEntry * whis = writehis; - while (whis != NULL && whis->ts > start_ts) { - whis = whis->next; - } - row_t * ret = (whis == NULL) ? _row : whis->row; - txn->cur_row = ret; - assert(strstr(_row->get_table_name(), ret->get_table_name())); - // Iterate over a version that is newer than the one you are currently reading. - whis = writehis; - while (whis != NULL && whis->ts > start_ts) { - whis = whis->next; - } - // Check to see if two RW dependencies exist. - // Add RW dependencies - whis = writehis; - while (whis != NULL && whis->ts > start_ts) { - bool out = inout_table.get_outConflict(txn->get_thd_id(),whis->txn); - if (out) { //! Abort - rc = Abort; - DEBUG("ssi txn %ld read the write_commit in %ld abort, whis_ts %ld current_start_ts %ld\n",txnid, whis->txn, inout_table.get_commit_ts(txn->get_thd_id(), whis->txn), start_ts); - goto end; - } - inout_table.set_inConflict(txn->get_thd_id(), whis->txn, txnid); - inout_table.set_outConflict(txn->get_thd_id(), txnid, whis->txn); - DEBUG("ssi read the write_commit in %ld out %ld\n",whis->txn, txnid); - whis = whis->next; - } - } else if (type == P_REQ) { - // Add the write lock - get_lock(LOCK_EX, txn); - // Traverse the whole read his - SSILockEntry * si_read = si_read_lock; - while (si_read != NULL) { - if (si_read->txn == txnid) { - si_read = si_read->next; - continue; - } - if (inout_table.get_state(txn->get_thd_id(), si_read->txn) == SSI_COMMITTED && - inout_table.get_commit_ts(txn->get_thd_id(), si_read->txn) > start_ts) { - bool in = inout_table.get_inConflict(txn->get_thd_id(), si_read->txn); - if (in) { //! Abort - rc = Abort; - DEBUG("ssi txn %ld write the read_commit in %ld abort, rhis_ts %ld current_start_ts %ld\n",txnid, si_read->txn, inout_table.get_commit_ts(txn->get_thd_id(), si_read->txn), start_ts); - goto end; - } - } - si_read = si_read->next; - } - // Traverse the whole read lock - si_read = si_read_lock; - while (si_read != NULL) { - if (si_read->txn == txnid) { - si_read = si_read->next; - continue; - } - if (inout_table.get_state(txn->get_thd_id(), si_read->txn) == SSI_ABORTED) { - si_read = si_read->next; - continue; - } - if (inout_table.get_state(txn->get_thd_id(), si_read->txn) == SSI_COMMITTED && - inout_table.get_commit_ts(txn->get_thd_id(), si_read->txn) <= start_ts) { - si_read = si_read->next; - continue; - } - inout_table.set_outConflict(txn->get_thd_id(), si_read->txn, txnid); - inout_table.set_inConflict(txn->get_thd_id(), txnid, si_read->txn); - DEBUG("ssi write the si_read_lock out %ld in %ld\n", si_read->txn, txnid); - si_read = si_read->next; - } - - if (preq_len < g_max_pre_req){ - DEBUG("buf P_REQ %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - buffer_req(P_REQ, txn); - rc = RCOK; - } else { - rc = Abort; - } - } else if (type == W_REQ) { - rc = RCOK; - release_lock(LOCK_EX, txn); - release_lock(LOCK_COM, txn); - //TODO: here need to consider whether need to release the si-read lock. - // release_lock(LOCK_SH, txn); - - // the corresponding prewrite request is debuffered. - insert_history(ts, txn, row); - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - SSIReqEntry * req = debuffer_req(P_REQ, txn); - assert(req != NULL); - return_req_entry(req); - } else if (type == XP_REQ) { - release_lock(LOCK_EX, txn); - release_lock(LOCK_COM, txn); - //TODO: here need to consider whether need to release the si-read lock. - release_lock(LOCK_SH, txn); - - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - SSIReqEntry * req = debuffer_req(P_REQ, txn); - assert (req != NULL); - return_req_entry(req); - } else { - assert(false); - } - - if (rc == RCOK) { - if (whis_len > g_his_recycle_len || rhis_len > g_his_recycle_len) { - ts_t t_th = glob_manager.get_min_ts(txn->get_thd_id()); - if (readhistail && readhistail->ts < t_th) { - clear_history(R_REQ, t_th); - } - // Here is a tricky bug. The oldest transaction might be - // reading an even older version whose timestamp < t_th. - // But we cannot recycle that version because it is still being used. - // So the HACK here is to make sure that the first version older than - // t_th not be recycled. - if (whis_len > 1 && writehistail->prev->ts < t_th) { - row_t * latest_row = clear_history(W_REQ, t_th); - if (latest_row != NULL) { - assert(_row != latest_row); - _row->copy(latest_row); - } - } - } - } -end: - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - - if (g_central_man) { - glob_manager.release_row(_row); - } else { - pthread_mutex_unlock(latch); - } - - return rc; -} - -RC Row_ssi::validate_last_commit(TxnManager * txn) { - RC rc = RCOK; - SSIHisEntry * whis = writehis; - ts_t start_ts = txn->get_start_timestamp(); - if (g_central_man) { - glob_manager.lock_row(_row); - } else { - pthread_mutex_lock(latch); - } - // INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - - if (commit_lock != 0 && commit_lock != txn->get_txn_id()) { - DEBUG("si last commit lock %ld, %ld\n",commit_lock, txn->get_txn_id()); - rc = Abort; - goto last_commit_end; - } - get_lock(LOCK_COM, txn); - // Iterate over a version that is newer than the one you are currently reading. - while (whis != NULL && whis->ts < start_ts) { - whis = whis->next; - } - if (whis != NULL) { - DEBUG("si last commit whis %ld, %ld, %ld\n",whis->ts, start_ts, txn->get_txn_id()); - release_lock(LOCK_COM, txn); - rc = Abort; - } -last_commit_end: - if (g_central_man) { - glob_manager.release_row(_row); - } else { - pthread_mutex_unlock(latch); - } - return rc; -} diff --git a/contrib/deneva/concurrency_control/row_ssi.h b/contrib/deneva/concurrency_control/row_ssi.h deleted file mode 100644 index b8a64c99..00000000 --- a/contrib/deneva/concurrency_control/row_ssi.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@tencent.com - * - */ - -#ifndef ROW_SSI_H -#define ROW_SSI_H - -class table_t; -class Catalog; -class TxnManager; - -struct SSIReqEntry { - TxnManager * txn; - ts_t ts; - ts_t starttime; - SSIReqEntry * next; -}; - -struct SSIHisEntry { - // TxnManager * txn; - txnid_t txn; - ts_t ts; - // only for write history. The value needs to be stored. -// char * data; - row_t * row; - SSIHisEntry * next; - SSIHisEntry * prev; -}; - -struct SSILockEntry { - lock_t type; - ts_t start_ts; - // TxnManager * txn; - txnid_t txn; - SSILockEntry * next; - SSILockEntry * prev; -}; - -class Row_ssi { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type, row_t * row); - RC validate_last_commit(TxnManager * txn); -private: - pthread_mutex_t * latch; - - SSILockEntry * si_read_lock; - SSILockEntry * write_lock; - - txnid_t commit_lock; - - bool blatch; - - row_t * _row; - void get_lock(lock_t type, TxnManager * txn); - void release_lock(lock_t type, TxnManager * txn); - - void insert_history(ts_t ts, TxnManager * txn, row_t * row); - - SSIReqEntry * get_req_entry(); - void return_req_entry(SSIReqEntry * entry); - SSIHisEntry * get_his_entry(); - void return_his_entry(SSIHisEntry * entry); - - bool conflict(TsType type, ts_t ts); - void buffer_req(TsType type, TxnManager * txn); - SSIReqEntry * debuffer_req( TsType type, TxnManager * txn = NULL); - - - SSILockEntry * get_entry(); - row_t * clear_history(TsType type, ts_t ts); - - SSIReqEntry * prereq_mvcc; - SSIHisEntry * readhis; - SSIHisEntry * writehis; - SSIHisEntry * readhistail; - SSIHisEntry * writehistail; - - uint64_t whis_len; - uint64_t rhis_len; - uint64_t preq_len; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_sundial.cpp b/contrib/deneva/concurrency_control/row_sundial.cpp deleted file mode 100644 index ba9f1935..00000000 --- a/contrib/deneva/concurrency_control/row_sundial.cpp +++ /dev/null @@ -1,461 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "row.h" -#include "txn.h" -#include "row_sundial.h" -#include "mem_alloc.h" -#include "manager.h" -#include "helper.h" -#include "sundial.h" -#if CC_ALG == SUNDIAL - -#if OCC_LOCK_TYPE == WAIT_DIE || OCC_WAW_LOCK -bool -Row_sundial::CompareWait::operator() (TxnManager * en1, TxnManager * en2) const -{ - return en1->get_priority() < en2->get_priority(); -} -#endif - -Row_sundial::Row_sundial(row_t * row) { - _row = row; - _latch = new pthread_mutex_t; - _blatch = false; - pthread_mutex_init( _latch, NULL ); - _wts = 0; - _rts = 0; - _ts_lock = false; - _num_remote_reads = 0; - -#if OCC_LOCK_TYPE == WAIT_DIE || OCC_WAW_LOCK - _max_num_waits = g_max_num_waits; - _lock_owner = NULL; -#endif -#if SUNDIAL_MV - _hist_wts = 0; -#endif - - _deleted = false; - _delete_timestamp = 0; -} - -void Row_sundial::init(row_t * row) { - _row = row; - _latch = new pthread_mutex_t; - _blatch = false; - pthread_mutex_init( _latch, NULL ); - _wts = 0; - _rts = 0; - _ts_lock = false; - _num_remote_reads = 0; - -#if OCC_LOCK_TYPE == WAIT_DIE || OCC_WAW_LOCK - _max_num_waits = g_max_num_waits; - _lock_owner = NULL; -#endif -#if SUNDIAL_MV - _hist_wts = 0; -#endif - - _deleted = false; - _delete_timestamp = 0; -} - -void -Row_sundial::latch() -{ - pthread_mutex_lock( _latch ); -} - -void -Row_sundial::unlatch() -{ - pthread_mutex_unlock( _latch ); -} - -RC -Row_sundial::access(access_t type, TxnManager * txn, row_t *& row, - uint64_t &wts, uint64_t &rts) { - uint64_t starttime = get_sys_clock(); - RC rc = RCOK; - if(type == RD || !OCC_WAW_LOCK) - rc = read(txn, wts, rts, true); - else if(type == WR) - rc = write(txn, wts, rts); - - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - return rc; -} - -RC -Row_sundial::read(TxnManager * txn, - uint64_t &wts, uint64_t &rts, bool latch, bool remote) -{ - uint64_t starttime = get_sys_clock(); - if (latch) - this->latch(); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - wts = _wts; - rts = _rts; - - if (latch) - this->unlatch(); - return RCOK; -} - -RC -Row_sundial::write(TxnManager * txn, uint64_t &wts, uint64_t &rts, bool latch) -{ - RC rc = RCOK; - assert(OCC_WAW_LOCK); -#if OCC_LOCK_TYPE == NO_WAIT - if (_ts_lock) - return Abort; -#endif - uint64_t starttime = get_sys_clock(); - if (latch) - pthread_mutex_lock( _latch ); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - if (!_ts_lock) { - _ts_lock = true; - _lock_owner = txn; - } else if (_lock_owner != txn) { -#if OCC_LOCK_TYPE == NO_WAIT - rc = Abort; -#else - assert(OCC_LOCK_TYPE == WAIT_DIE); - if (_waiting_set.size() < _max_num_waits && - txn->get_priority() < _lock_owner->get_priority()) - { - _waiting_set.insert(txn); - rc = WAIT; - } else { - rc = Abort; - DEBUG("sundial abort 158 %ld,%lu -- %ld\n",txn->get_txn_id(),txn->_min_commit_ts,_row->get_primary_key()); - } -#endif - } - if (rc == RCOK) { - wts = _wts; - rts = _rts; - } - if (latch) - pthread_mutex_unlock( _latch ); - return rc; -} - -RC -Row_sundial::abort(access_t type, TxnManager * txn) { - return Abort; -} - -RC -Row_sundial::commit(access_t type, TxnManager * txn, row_t * data) { - uint64_t mtx_wait_starttime = get_sys_clock(); - - INC_STATS(txn->get_thd_id(),mtx[33],get_sys_clock() - mtx_wait_starttime); - DEBUG("sundial Commit %ld: %d,%lu -- %ld\n",txn->get_txn_id(),type,txn->_min_commit_ts,_row->get_primary_key()); - - uint64_t wts = txn->_min_commit_ts; - latch(); - if (_deleted) - assert(wts < _delete_timestamp); - _wts = wts; - _rts = wts; - _row->copy(data); - unlatch(); - - return RCOK; -} - -RC -Row_sundial::try_lock(TxnManager * txn) -{ -#if LOCK_ALL_DEBUG - printf("Trying to lock read set for txn_id %ld\n", txn_id); -#endif - RC rc = RCOK; - pthread_mutex_lock( _latch ); - assert(!OCC_WAW_LOCK); -#if OCC_LOCK_TYPE == NO_WAIT - if (!_ts_lock) { - _ts_lock = true; - rc = RCOK; - } else rc = Abort; -#elif OCC_LOCK_TYPE == WAIT_DIE - if (!_ts_lock) { - _ts_lock = true; - assert(_lock_owner == NULL); - _lock_owner = txn; - rc = RCOK; - } else { - if (txn->get_txn_id() == _lock_owner->get_txn_id()) - cout << "Error " << txn->get_txn_id() << " " << _lock_owner->get_txn_id() << endl; - // txn has higher priority, should wait. - if (_waiting_set.size() >= _max_num_waits){ - rc = Abort; - DEBUG("sundial abort 230 %ld,%lu -- %ld\n",txn->get_txn_id(),txn->_min_commit_ts,_row->get_primary_key()); - } else if (txn->get_priority() < _lock_owner->get_priority()) { - _waiting_set.insert(txn); - rc = WAIT; - } else { - rc = Abort; - DEBUG("sundial abort 236 %ld,%lu -- %ld\n",txn->get_txn_id(),txn->_min_commit_ts,_row->get_primary_key()); - } - } -#endif - pthread_mutex_unlock( _latch ); - return rc; -} - -bool -Row_sundial::try_renew(ts_t wts, ts_t rts, ts_t &new_rts) -{ - if (wts != _wts) { - if(_wts < rts) { - // report error - } - - if(_wts == rts + 1) { - // The latest version is right behind our version. - // report error - } - else { - // The latest version is right behind our version. - // report error - } - return false; - } - latch(); - if (_deleted) { - bool success = (wts == _wts && rts < _delete_timestamp); - unlatch(); - return success; - } - assert(!_deleted); - if (_ts_lock) { - // TODO. even if _ts_lock == true (meaning someone may write to the tuple soon) - // should check the lower bound of upcoming wts. Maybe we can still renew the current rts without - // hurting the upcoming write. - unlatch(); - return false; - } - - if (wts != _wts) { - if(_wts < rts) { - } - - if(_wts == rts + 1) { - // The latest version is right behind our version. - } - else { - // The latest version is right behind our version. - } - unlatch(); - return false; - } - new_rts = _rts; - if (rts > _rts) { - _rts = rts; - new_rts = rts; - } - unlatch(); - return true; -} - -void -Row_sundial::release(TxnManager * txn, RC rc) -{ - pthread_mutex_lock( _latch ); -#if !OCC_WAW_LOCK -#if OCC_LOCK_TYPE == NO_WAIT - _ts_lock = false; -#elif OCC_LOCK_TYPE == WAIT_DIE - if (rc == RCOK) - assert(_ts_lock && txn == _lock_owner); - if (txn == _lock_owner) { - if (_waiting_set.size() > 0) { - // TODO. should measure how often each case happens - if (rc == Abort) { - TxnManager * next = *_waiting_set.rbegin(); - set::iterator last = _waiting_set.end(); - last --; - _waiting_set.erase( last ); - _lock_owner = next; - next->set_txn_ready(RCOK); - } else { // rc == COMMIT - for (std::set::iterator it = _waiting_set.begin(); - it != _waiting_set.end(); it ++) { - (*it)->set_txn_ready(Abort); - } - _waiting_set.clear(); - _ts_lock = false; - _lock_owner = NULL; - } - } else { - _ts_lock = false; - _lock_owner = NULL; - } - } else { - assert(rc == Abort); - // the txn may not be in _waiting_set. - _waiting_set.erase(txn); - } - #endif -#else // OCC_WAW_LOCK - assert(OCC_WAW_LOCK); - if (txn != _lock_owner) { - _waiting_set.erase( txn ); - pthread_mutex_unlock( _latch ); - return; - } - - assert(_ts_lock); -#if OCC_LOCK_TYPE == NO_WAIT - _ts_lock = false; -#elif OCC_LOCK_TYPE == WAIT_DIE - if (_waiting_set.size() > 0) { - set::iterator last = _waiting_set.end(); - last --; - - TxnManager * next = *last; - _waiting_set.erase( last ); - _lock_owner = next; - next->_lock_acquire_time = get_sys_clock(); - if (rc == Abort) { - next->_lock_acquire_time_abort = get_sys_clock(); - next->_lock_acquire_time_commit = 0; - } else { - next->_lock_acquire_time_commit = get_sys_clock(); - next->_lock_acquire_time_abort = 0; - } - // COMPILER_BARRIER - sundial_man.set_txn_ready(RCOK, next); - } else { - _ts_lock = false; - _lock_owner = NULL; - } - #endif -#endif - pthread_mutex_unlock( _latch ); -} - -void -Row_sundial::get_ts(uint64_t &wts, uint64_t &rts) -{ - pthread_mutex_lock( _latch ); - wts = _wts; - rts = _rts; - pthread_mutex_unlock( _latch ); -} - -bool -Row_sundial::renew(ts_t wts, ts_t rts, ts_t &new_rts) // Renew without lock checking -{ -#if LOCK_ALL_BEFORE_COMMIT -#if ATOMIC_WORD - uint64_t v = _ts_word; - uint64_t lock_mask = (WRITE_PERMISSION_LOCK)? WRITE_BIT : LOCK_BIT; - if ((v & WTS_MASK) == wts && ((v & RTS_MASK) >> WTS_LEN) >= rts - wts) - return true; - if (v & lock_mask) - return false; - #if SUNDIAL_MV - COMPILER_BARRIER - uint64_t hist_wts = _hist_wts; - if (wts != (v & WTS_MASK)) { - if (wts == hist_wts && rts < (v & WTS_MASK)) { - return true; - } else { - return false; - } - } - #else - if (wts != (v & WTS_MASK)) - return false; - #endif - - ts_t delta_rts = rts - wts; - if (delta_rts < ((v & RTS_MASK) >> WTS_LEN)) // the rts has already been extended. - return true; - bool rebase = false; - if (delta_rts >= (1 << RTS_LEN)) { - rebase = true; - uint64_t delta = (delta_rts & ~((1 << RTS_LEN) - 1)); - delta_rts &= ((1 << RTS_LEN) - 1); - wts += delta; - } - uint64_t v2 = 0; - v2 |= wts; - v2 |= (delta_rts << WTS_LEN); - while (true) { - uint64_t pre_v = __sync_val_compare_and_swap(&_ts_word, v, v2); - if (pre_v == v) - return true; - v = pre_v; - if (rebase || (v & lock_mask) || (wts != (v & WTS_MASK))) - return false; - else if (rts < ((v & RTS_MASK) >> WTS_LEN)) - return true; - } - assert(false); - return false; -#else -#if SUNDIAL_MV - if (wts < _hist_wts) - return false; -#else - if (wts != _wts){ - if (_wts > rts + 1) - INC_INT_STATS(int_possibMVCC, 1); - return false; - } -#endif - pthread_mutex_lock( _latch ); - - if (wts != _wts) { -#if SUNDIAL_MV - if (wts == _hist_wts && rts < _wts) { - pthread_mutex_unlock( _latch ); - return true; - } -#endif - if (_wts > rts + 1) - INC_INT_STATS(int_possibMVCC, 1); - pthread_mutex_unlock( _latch ); - return false; - } - new_rts = _rts; - if (rts > _rts) { - _rts = rts; - new_rts = rts; - } -#if ENABLE_LOCAL_CACHING - if (_row) { - #if RO_LEASE - uint64_t max_rts = _row->get_table()->get_max_rts(); - if (max_rts > _rts) - new_rts = _rts = max_rts; - #endif - } -#endif - - pthread_mutex_unlock( _latch ); - return true; -#endif -#else - assert(false); // Should not be called if LOCK_ALL_BEFORE_COMMIT is false. -#endif -} - -#endif diff --git a/contrib/deneva/concurrency_control/row_sundial.h b/contrib/deneva/concurrency_control/row_sundial.h deleted file mode 100644 index eb02f3b3..00000000 --- a/contrib/deneva/concurrency_control/row_sundial.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#pragma once - -#include "global.h" -#ifndef ROW_SUNDIAL_H -#define ROW_SUNDIAL_H - -#if CC_ALG == SUNDIAL -#if WRITE_PERMISSION_LOCK - -#define LOCK_BIT (1UL << 63) -#define WRITE_BIT (1UL << 62) -#define RTS_LEN (15) -#define WTS_LEN (62 - RTS_LEN) -#define WTS_MASK ((1UL << WTS_LEN) - 1) -#define RTS_MASK (((1UL << RTS_LEN) - 1) << WTS_LEN) - -#else - -#define LOCK_BIT (1UL << 63) - -#endif - -class TxnManager; - -class Row_sundial { -public: - - Row_sundial() : Row_sundial(NULL) {}; - Row_sundial(row_t * row); - void init(row_t * row); - RC access(access_t type, TxnManager * txn, row_t *& row, - uint64_t &wts, uint64_t &rts); - RC read(TxnManager * txn, uint64_t &wts, uint64_t &rts, bool latch = true, bool remote = false); - RC write(TxnManager * txn, uint64_t &wts, uint64_t &rts, bool latch = true); - - void latch(); - void unlatch(); - - RC commit(access_t type, TxnManager * txn, row_t * data); - RC abort(access_t type, TxnManager * txn); - - void lock(); - bool try_lock(); - RC try_lock(TxnManager * txn); - void release(TxnManager * txn, RC rc); - - - - void update_ts(uint64_t cts); - - - bool try_renew(ts_t wts, ts_t rts, ts_t &new_rts); - bool renew(ts_t wts, ts_t rts, ts_t &new_rts); - - - void get_last_ts(ts_t & last_rts, ts_t & last_wts); - - ts_t get_last_rts(); - ts_t get_last_wts(); - - uint64_t get_wts() {return _wts;} - uint64_t get_rts() {return _rts;} - void get_ts(uint64_t &wts, uint64_t &rts); - void set_ts(uint64_t wts, uint64_t rts); - - TxnManager * _lock_owner; -#if OCC_LOCK_TYPE == WAIT_DIE || OCC_WAW_LOCK - - struct CompareWait { - bool operator() (TxnManager * en1, TxnManager * en2) const; - }; - std::set _waiting_set; - uint32_t _max_num_waits; -#endif - - - bool is_deleted() { return _deleted; } - void delete_row(uint64_t del_ts); - enum State { - SHARED, - EXCLUSIVE - }; - State _state; - uint32_t _owner; // host node ID - - row_t * _row; - - uint64_t _wts; // last write timestamp - uint64_t _rts; // end lease timestamp - - pthread_mutex_t * _latch; // to guarantee read/write consistency - bool _blatch; // to guarantee read/write consistency - bool _ts_lock; // wts/rts cannot be changed if _ts_lock is true. - - bool _deleted; - uint64_t _delete_timestamp; - - // for locality predictor - uint32_t _num_remote_reads; // should cache a local copy if this number is too large. -}; - - -#endif -#endif \ No newline at end of file diff --git a/contrib/deneva/concurrency_control/row_ts.cpp b/contrib/deneva/concurrency_control/row_ts.cpp deleted file mode 100644 index dc350df0..00000000 --- a/contrib/deneva/concurrency_control/row_ts.cpp +++ /dev/null @@ -1,325 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -//#include "timestamp.h" -#include "txn.h" -#include "row.h" -#include "row_ts.h" -#include "mem_alloc.h" -#include "manager.h" -#include "stdint.h" - -void Row_ts::init(row_t * row) { - _row = row; - wts = 0; - rts = 0; - min_wts = UINT64_MAX; - min_rts = UINT64_MAX; - min_pts = UINT64_MAX; - readreq = NULL; - writereq = NULL; - prereq = NULL; - preq_len = 0; - latch = (pthread_mutex_t *)mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init( latch, NULL ); - blatch = false; -} - -TsReqEntry * Row_ts::get_req_entry() { - return (TsReqEntry *) mem_allocator.alloc(sizeof(TsReqEntry)); -} - -void Row_ts::return_req_entry(TsReqEntry * entry) { - if (entry->row != NULL) { - entry->row->free_row(); - mem_allocator.free(entry->row, sizeof(row_t)); - } - mem_allocator.free(entry, sizeof(TsReqEntry)); -} - -void Row_ts::return_req_list(TsReqEntry * list) { - TsReqEntry * req = list; - TsReqEntry * prev = NULL; - while (req != NULL) { - prev = req; - req = req->next; - return_req_entry(prev); - } -} - -void Row_ts::buffer_req(TsType type, TxnManager *txn, row_t *row) { - TsReqEntry * req_entry = get_req_entry(); - assert(req_entry != NULL); - req_entry->txn = txn; - req_entry->row = row; - req_entry->ts = txn->get_timestamp(); - req_entry->starttime = get_sys_clock(); - if (type == R_REQ) { - req_entry->next = readreq; - readreq = req_entry; - if (req_entry->ts < min_rts) min_rts = req_entry->ts; - } else if (type == W_REQ) { - assert(row != NULL); - req_entry->next = writereq; - writereq = req_entry; - if (req_entry->ts < min_wts) min_wts = req_entry->ts; - } else if (type == P_REQ) { - preq_len ++; - req_entry->next = prereq; - prereq = req_entry; - if (req_entry->ts < min_pts) min_pts = req_entry->ts; - } -} - -TsReqEntry * Row_ts::debuffer_req(TsType type, TxnManager * txn) { - return debuffer_req(type, txn, UINT64_MAX); -} - -TsReqEntry *Row_ts::debuffer_req(TsType type, ts_t ts) { return debuffer_req(type, NULL, ts); } - -TsReqEntry * Row_ts::debuffer_req( TsType type, TxnManager * txn, ts_t ts ) { - TsReqEntry ** queue; - TsReqEntry * return_queue = NULL; - switch (type) { - case R_REQ: - queue = &readreq; - break; - case P_REQ: - queue = &prereq; - break; - case W_REQ: - queue = &writereq; - break; - default: - assert(false); - } - - TsReqEntry * req = *queue; - TsReqEntry * prev_req = NULL; - if (txn != NULL) { - while (req != NULL && req->txn != txn) { - prev_req = req; - req = req->next; - } - assert(req != NULL); - if (prev_req != NULL) - prev_req->next = req->next; - else { - assert( req == *queue ); - *queue = req->next; - } - preq_len --; - req->next = return_queue; - return_queue = req; - } else { - while (req != NULL) { - if (req->ts <= ts) { - if (prev_req == NULL) { - assert(req == *queue); - *queue = (*queue)->next; - } else { - prev_req->next = req->next; - } - req->next = return_queue; - return_queue = req; - req = (prev_req == NULL)? *queue : prev_req->next; - } else { - prev_req = req; - req = req->next; - } - } - } - return return_queue; -} - -ts_t Row_ts::cal_min(TsType type) { - // update the min_pts - TsReqEntry * queue; - switch (type) { - case R_REQ: - queue = readreq; - break; - case P_REQ: - queue = prereq; - break; - case W_REQ: - queue = writereq; - break; - default: - assert(false); - } - ts_t new_min_pts = UINT64_MAX; - TsReqEntry * req = queue; - while (req != NULL) { - if (req->ts < new_min_pts) new_min_pts = req->ts; - req = req->next; - } - return new_min_pts; -} - -RC Row_ts::access(TxnManager * txn, TsType type, row_t * row) { - RC rc; - uint64_t starttime = get_sys_clock(); - ts_t ts = txn->get_timestamp(); - if (g_central_man) - glob_manager.lock_row(_row); - else - pthread_mutex_lock( latch ); - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - if (type == R_REQ) { - if (ts < wts) { // read would occur before most recent write - rc = Abort; - } else if (ts > min_pts) { // read would occur after one of the prereqs already queued - // insert the req into the read request queue - buffer_req(R_REQ, txn, NULL); - txn->ts_ready = false; - rc = WAIT; - } else { // read is ok - // return the value. - txn->cur_row->copy(_row); - if (rts < ts) rts = ts; - rc = RCOK; - } - } else if (type == P_REQ) { - if (ts < rts) { // pre-write would occur before most recent read - rc = Abort; - } else { -#if TS_TWR - buffer_req(P_REQ, txn, NULL); - rc = RCOK; -#else - if (ts < wts) { //pre-write would occur before most recent write - rc = Abort; - } else { // pre-write is ok - //printf("Buffer P_REQ %ld\n",txn->txn_id); - buffer_req(P_REQ, txn, NULL); - rc = RCOK; - } -#endif - } - } else if (type == W_REQ) { - // write requests are always accepted. - rc = RCOK; -#if TS_TWR - // according to TWR, this write is already stale, ignore. - if (ts < wts) { - TsReqEntry * req = debuffer_req(P_REQ, txn); - assert(req != NULL); - update_buffer(txn->get_thd_id()); - return_req_entry(req); - row->free_row(); - mem_allocator.free(row, sizeof(row_t)); - goto final; - } -#else - if (ts > min_pts) { // write should happen after older writes are processed - buffer_req(W_REQ, txn, row); - goto final; - } -#endif - if (ts > min_rts) { // write should happen after older reads are processed - row = txn->cur_row; - buffer_req(W_REQ, txn, row); - goto final; - } else { // write is ok; - // the write is output. - _row->copy(row); - if (wts < ts) wts = ts; - // debuffer the P_REQ - TsReqEntry * req = debuffer_req(P_REQ, txn); - assert(req != NULL); - update_buffer(txn->get_thd_id()); - return_req_entry(req); - // the "row" is freed after hard copy to "_row" - row->free_row(); - mem_allocator.free(row, sizeof(row_t)); - } - } else if (type == XP_REQ) { - TsReqEntry * req = debuffer_req(P_REQ, txn); - assert (req != NULL); - update_buffer(txn->get_thd_id()); - return_req_entry(req); - } else assert(false); - -final: - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - if (g_central_man) - glob_manager.release_row(_row); - else - pthread_mutex_unlock( latch ); - return rc; -} - -void Row_ts::update_buffer(uint64_t thd_id) { - - while (true) { - ts_t new_min_pts = cal_min(P_REQ); - assert(new_min_pts >= min_pts); - if (new_min_pts > min_pts) - min_pts = new_min_pts; - else - break; // min_pts is not updated. - // debuffer readreq. ready_read can be a list - TsReqEntry * ready_read = debuffer_req(R_REQ, min_pts); - if (ready_read == NULL) break; - // for each debuffered readreq, perform read. - TsReqEntry * req = ready_read; - while (req != NULL) { - req->txn->cur_row->copy(_row); - if (rts < req->ts) { - rts = req->ts; - } - req->txn->ts_ready = true; - uint64_t timespan = get_sys_clock() - req->starttime; - req->txn->txn_stats.cc_block_time += timespan; - req->txn->txn_stats.cc_block_time_short += timespan; - #if WORKLOAD!=DA - txn_table.restart_txn(thd_id,req->txn->get_txn_id(),0); - #endif - req = req->next; - } - // return all the req_entry back to freelist - return_req_list(ready_read); - // re-calculate min_rts - ts_t new_min_rts = cal_min(R_REQ); - if (new_min_rts > min_rts) - min_rts = new_min_rts; - else - break; - // debuffer writereq - TsReqEntry * ready_write = debuffer_req(W_REQ, min_rts); - if (ready_write == NULL) break; - ts_t young_ts = UINT64_MAX; - TsReqEntry * young_req = NULL; - req = ready_write; - while (req != NULL) { - TsReqEntry * tmp_req = debuffer_req(P_REQ, req->txn); - assert(tmp_req != NULL); - return_req_entry(tmp_req); - if (req->ts < young_ts) { - young_ts = req->ts; - young_req = req; - } //else loser = req; - req = req->next; - } - // perform write. - _row->copy(young_req->row); - if (wts < young_req->ts) wts = young_req->ts; - return_req_list(ready_write); - } -} diff --git a/contrib/deneva/concurrency_control/row_ts.h b/contrib/deneva/concurrency_control/row_ts.h deleted file mode 100644 index 30bd827c..00000000 --- a/contrib/deneva/concurrency_control/row_ts.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ROW_TS_H -#define ROW_TS_H - -class table_t; -class Catalog; -class TxnManager; -struct TsReqEntry { - TxnManager * txn; - // for write requests, need to have a copy of the data to write. - row_t * row; - itemid_t * item; - ts_t ts; - uint64_t starttime; - TsReqEntry * next; -}; - -class Row_ts { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type, row_t * row); - -private: - pthread_mutex_t * latch; - bool blatch; - - void buffer_req(TsType type, TxnManager * txn, row_t * row); - TsReqEntry * debuffer_req(TsType type, TxnManager * txn); - TsReqEntry * debuffer_req(TsType type, ts_t ts); - TsReqEntry * debuffer_req(TsType type, TxnManager * txn, ts_t ts); - void update_buffer(uint64_t thd_id); - ts_t cal_min(TsType type); - TsReqEntry * get_req_entry(); - void return_req_entry(TsReqEntry * entry); - void return_req_list(TsReqEntry * list); - - row_t * _row; - ts_t wts; - ts_t rts; - ts_t min_wts; - ts_t min_rts; - ts_t min_pts; - - TsReqEntry * readreq; - TsReqEntry * writereq; - TsReqEntry * prereq; - uint64_t preq_len; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/row_wsi.cpp b/contrib/deneva/concurrency_control/row_wsi.cpp deleted file mode 100644 index 4aa00b96..00000000 --- a/contrib/deneva/concurrency_control/row_wsi.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "txn.h" -#include "row.h" -#include "helper.h" -#include "manager.h" -#include "row_wsi.h" -#include "mem_alloc.h" - -void Row_wsi::init(row_t * row) { - _row = row; - - prereq_mvcc = NULL; - readhis = NULL; - writehis = NULL; - readhistail = NULL; - writehistail = NULL; - blatch = false; - latch = (pthread_mutex_t *) mem_allocator.alloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(latch, NULL); - whis_len = 0; - rhis_len = 0; - lastCommit = 0; - preq_len = 0; -} - -void -Row_wsi::update_last_commit(uint64_t ts) { - if (lastCommit < ts) lastCommit = ts; -} - -row_t * Row_wsi::clear_history(TsType type, ts_t ts) { - WSIHisEntry ** queue; - WSIHisEntry ** tail; - switch (type) { - case R_REQ: - queue = &readhis; - tail = &readhistail; - break; - case W_REQ: - queue = &writehis; - tail = &writehistail; - break; - default: - assert(false); - } - WSIHisEntry * his = *tail; - WSIHisEntry * prev = NULL; - row_t * row = NULL; - while (his && his->prev && his->prev->ts < ts) { - prev = his->prev; - assert(prev->ts >= his->ts); - if (row != NULL) { - row->free_row(); - mem_allocator.free(row, sizeof(row_t)); - } - row = his->row; - his->row = NULL; - return_his_entry(his); - his = prev; - if (type == R_REQ) { - rhis_len --; - } else { - whis_len --; - } - } - *tail = his; - if (*tail) { - (*tail)->next = NULL; - } - if (his == NULL) { - *queue = NULL; - } - return row; -} - -WSIReqEntry * Row_wsi::get_req_entry() { - return (WSIReqEntry *) mem_allocator.alloc(sizeof(WSIReqEntry)); -} - -void Row_wsi::return_req_entry(WSIReqEntry * entry) { - mem_allocator.free(entry, sizeof(WSIReqEntry)); -} - -WSIHisEntry * Row_wsi::get_his_entry() { - return (WSIHisEntry *) mem_allocator.alloc(sizeof(WSIHisEntry)); -} - -void Row_wsi::return_his_entry(WSIHisEntry * entry) { - if (entry->row != NULL) { - entry->row->free_row(); - mem_allocator.free(entry->row, sizeof(row_t)); - } - mem_allocator.free(entry, sizeof(WSIHisEntry)); -} - -void Row_wsi::buffer_req(TsType type, TxnManager * txn) -{ - WSIReqEntry * req_entry = get_req_entry(); - assert(req_entry != NULL); - req_entry->txn = txn; - req_entry->ts = txn->get_start_timestamp(); - req_entry->starttime = get_sys_clock(); - if (type == P_REQ) { - preq_len ++; - STACK_PUSH(prereq_mvcc, req_entry); - } -} - -// for type == R_REQ -// debuffer all non-conflicting requests -// for type == P_REQ -// debuffer the request with matching txn. -WSIReqEntry * Row_wsi::debuffer_req( TsType type, TxnManager * txn) { - WSIReqEntry ** queue = &prereq_mvcc; - WSIReqEntry * return_queue = NULL; - - WSIReqEntry * req = *queue; - WSIReqEntry * prev_req = NULL; - if (txn != NULL) { - assert(type == P_REQ); - while (req != NULL && req->txn != txn) { - prev_req = req; - req = req->next; - } - assert(req != NULL); - if (prev_req != NULL) { - prev_req->next = req->next; - } else { - assert( req == *queue ); - *queue = req->next; - } - preq_len --; - req->next = return_queue; - return_queue = req; - } - return return_queue; -} - -void Row_wsi::insert_history(ts_t ts, TxnManager * txn, row_t * row) -{ - WSIHisEntry * new_entry = get_his_entry(); - new_entry->ts = ts; - // new_entry->txnid = txn->get_txn_id(); - new_entry->row = row; - if (row != NULL) { - whis_len ++; - } else { - rhis_len ++; - } - WSIHisEntry ** queue = (row == NULL) ? &(readhis) : &(writehis); - WSIHisEntry ** tail = (row == NULL) ? &(readhistail) : &(writehistail); - WSIHisEntry * his = *queue; - while (his != NULL && ts < his->ts) { - his = his->next; - } - - if (his) { - LIST_INSERT_BEFORE(his, new_entry,(*queue)); - } else - LIST_PUT_TAIL((*queue), (*tail), new_entry); -} - -RC Row_wsi::access(TxnManager * txn, TsType type, row_t * row) { - RC rc = RCOK; - ts_t ts = txn->get_commit_timestamp(); - ts_t start_ts = txn->get_start_timestamp(); - uint64_t starttime = get_sys_clock(); - - if (g_central_man) { - glob_manager.lock_row(_row); - } else { - pthread_mutex_lock(latch); - } - INC_STATS(txn->get_thd_id(), trans_access_lock_wait_time, get_sys_clock() - starttime); - if (type == R_REQ) { - // Read the row - rc = RCOK; - WSIHisEntry * whis = writehis; - while (whis != NULL && whis->ts > start_ts) { - whis = whis->next; - } - row_t * ret = (whis == NULL) ? _row : whis->row; - txn->cur_row = ret; - insert_history(start_ts, txn, NULL); - assert(strstr(_row->get_table_name(), ret->get_table_name())); - } else if (type == P_REQ) { - if (preq_len < g_max_pre_req){ - DEBUG("buf P_REQ %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - buffer_req(P_REQ, txn); - rc = RCOK; - } else { - rc = Abort; - } - } else if (type == W_REQ) { - rc = RCOK; - // the corresponding prewrite request is debuffered. - insert_history(ts, txn, row); - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - WSIReqEntry * req = debuffer_req(P_REQ, txn); - assert(req != NULL); - return_req_entry(req); - } else if (type == XP_REQ) { - DEBUG("debuf %ld %ld\n",txn->get_txn_id(),_row->get_primary_key()); - WSIReqEntry * req = debuffer_req(P_REQ, txn); - assert (req != NULL); - return_req_entry(req); - } else { - assert(false); - } - - if (rc == RCOK) { - if (whis_len > g_his_recycle_len || rhis_len > g_his_recycle_len) { - ts_t t_th = glob_manager.get_min_ts(txn->get_thd_id()); - if (readhistail && readhistail->ts < t_th) { - clear_history(R_REQ, t_th); - } - // Here is a tricky bug. The oldest transaction might be - // reading an even older version whose timestamp < t_th. - // But we cannot recycle that version because it is still being used. - // So the HACK here is to make sure that the first version older than - // t_th not be recycled. - if (whis_len > 1 && - writehistail->prev->ts < t_th) { - row_t * latest_row = clear_history(W_REQ, t_th); - if (latest_row != NULL) { - assert(_row != latest_row); - _row->copy(latest_row); - } - } - } - } - - uint64_t timespan = get_sys_clock() - starttime; - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - - if (g_central_man) { - glob_manager.release_row(_row); - } else { - pthread_mutex_unlock( latch ); - } - - return rc; -} diff --git a/contrib/deneva/concurrency_control/row_wsi.h b/contrib/deneva/concurrency_control/row_wsi.h deleted file mode 100644 index 464077fd..00000000 --- a/contrib/deneva/concurrency_control/row_wsi.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef ROW_WSI_H -#define ROW_WSI_H - -class table_t; -class Catalog; -class TxnManager; -struct TsReqEntry; - -struct WSIReqEntry { - TxnManager * txn; - ts_t ts; - ts_t starttime; - WSIReqEntry * next; -}; - -struct WSIHisEntry { - // TxnManager * txn; - ts_t ts; - // only for write history. The value needs to be stored. -// char * data; - row_t * row; - WSIHisEntry * next; - WSIHisEntry * prev; -}; - -class Row_wsi { -public: - void init(row_t * row); - RC access(TxnManager * txn, TsType type, row_t * row); - void update_last_commit(uint64_t ts); - - uint64_t get_last_commit() { return lastCommit; } -private: - pthread_mutex_t * latch; - bool blatch; - - row_t * _row; - void get_lock(lock_t type, TxnManager * txn); - void release_lock(lock_t type, TxnManager * txn); - - void insert_history(ts_t ts, TxnManager * txn, row_t * row); - - WSIReqEntry * get_req_entry(); - void return_req_entry(WSIReqEntry * entry); - WSIHisEntry * get_his_entry(); - void return_his_entry(WSIHisEntry * entry); - - bool conflict(TsType type, ts_t ts); - void buffer_req(TsType type, TxnManager * txn); - WSIReqEntry * debuffer_req( TsType type, TxnManager * txn = NULL); - - row_t * clear_history(TsType type, ts_t ts); - - WSIReqEntry * prereq_mvcc; - WSIHisEntry * readhis; - WSIHisEntry * writehis; - WSIHisEntry * readhistail; - WSIHisEntry * writehistail; - - uint64_t whis_len; - uint64_t rhis_len; - uint64_t preq_len; - - uint64_t lastCommit; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/silo.cpp b/contrib/deneva/concurrency_control/silo.cpp deleted file mode 100644 index ba2dbb94..00000000 --- a/contrib/deneva/concurrency_control/silo.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: zhanhaozhao@ruc.edu.cn - * - */ - -#include "txn.h" -#include "row.h" -#include "row_silo.h" - -#if CC_ALG == SILO - -RC -TxnManager::validate_silo() -{ - RC rc = RCOK; - // lock write tuples in the primary key order. - uint64_t wr_cnt = txn->write_cnt; - // write_set = (int *) mem_allocator.alloc(sizeof(int) * wr_cnt); - int cur_wr_idx = 0; - int read_set[txn->row_cnt - txn->write_cnt]; - int cur_rd_idx = 0; - for (uint64_t rid = 0; rid < txn->row_cnt; rid ++) { - if (txn->accesses[rid]->type == WR) - write_set[cur_wr_idx ++] = rid; - else - read_set[cur_rd_idx ++] = rid; - } - - // bubble sort the write_set, in primary key order - if (wr_cnt > 1) - { - for (uint64_t i = wr_cnt - 1; i >= 1; i--) { - for (uint64_t j = 0; j < i; j++) { - if (txn->accesses[ write_set[j] ]->orig_row->get_primary_key() > - txn->accesses[ write_set[j + 1] ]->orig_row->get_primary_key()) - { - int tmp = write_set[j]; - write_set[j] = write_set[j+1]; - write_set[j+1] = tmp; - } - } - } - } - - num_locks = 0; - ts_t max_tid = 0; - bool done = false; - if (_pre_abort) { - for (uint64_t i = 0; i < wr_cnt; i++) { - row_t * row = txn->accesses[ write_set[i] ]->orig_row; - if (row->manager->get_tid() != txn->accesses[write_set[i]]->tid) { - rc = Abort; - return rc; - } - } - for (uint64_t i = 0; i < txn->row_cnt - wr_cnt; i ++) { - Access * access = txn->accesses[ read_set[i] ]; - if (access->orig_row->manager->get_tid() != txn->accesses[read_set[i]]->tid) { - rc = Abort; - return rc; - } - } - } - - // lock all rows in the write set. - if (_validation_no_wait) { - while (!done) { - num_locks = 0; - for (uint64_t i = 0; i < wr_cnt; i++) { - row_t * row = txn->accesses[ write_set[i] ]->orig_row; - if (!row->manager->try_lock()) - { - break; - } - DEBUG("silo %ld write lock row %ld \n", this->get_txn_id(), row->get_primary_key()); - row->manager->assert_lock(); - num_locks ++; - if (row->manager->get_tid() != txn->accesses[write_set[i]]->tid) - { - rc = Abort; - return rc; - } - } - if (num_locks == wr_cnt) { - DEBUG("TRY LOCK true %ld\n", get_txn_id()); - done = true; - } else { - rc = Abort; - return rc; - } - } - } else { - for (uint64_t i = 0; i < wr_cnt; i++) { - row_t * row = txn->accesses[ write_set[i] ]->orig_row; - row->manager->lock(); - DEBUG("silo %ld write lock row %ld \n", this->get_txn_id(), row->get_primary_key()); - num_locks++; - if (row->manager->get_tid() != txn->accesses[write_set[i]]->tid) { - rc = Abort; - return rc; - } - } - } - - COMPILER_BARRIER - - // validate rows in the read set - // for repeatable_read, no need to validate the read set. - for (uint64_t i = 0; i < txn->row_cnt - wr_cnt; i ++) { - Access * access = txn->accesses[ read_set[i] ]; - bool success = access->orig_row->manager->validate(access->tid, false); - if (!success) { - rc = Abort; - return rc; - } - if (access->tid > max_tid) - max_tid = access->tid; - } - // validate rows in the write set - for (uint64_t i = 0; i < wr_cnt; i++) { - Access * access = txn->accesses[ write_set[i] ]; - bool success = access->orig_row->manager->validate(access->tid, true); - if (!success) { - rc = Abort; - return rc; - } - if (access->tid > max_tid) - max_tid = access->tid; - } - - this->max_tid = max_tid; - - return rc; -} - -RC -TxnManager::finish(RC rc) -{ - if (rc == Abort) { - if (this->num_locks > get_access_cnt()) - return rc; - for (uint64_t i = 0; i < this->num_locks; i++) { - txn->accesses[ write_set[i] ]->orig_row->manager->release(); - DEBUG("silo %ld abort release row %ld \n", this->get_txn_id(), txn->accesses[ write_set[i] ]->orig_row->get_primary_key()); - } - } else { - - for (uint64_t i = 0; i < txn->write_cnt; i++) { - Access * access = txn->accesses[ write_set[i] ]; - access->orig_row->manager->write( - access->data, this->commit_timestamp ); - txn->accesses[ write_set[i] ]->orig_row->manager->release(); - DEBUG("silo %ld commit release row %ld \n", this->get_txn_id(), txn->accesses[ write_set[i] ]->orig_row->get_primary_key()); - } - } - num_locks = 0; - memset(write_set, 0, 100); - - return rc; -} - -RC -TxnManager::find_tid_silo(ts_t max_tid) -{ - if (max_tid > _cur_tid) - _cur_tid = max_tid; - return RCOK; -} - -#endif diff --git a/contrib/deneva/concurrency_control/ssi.cpp b/contrib/deneva/concurrency_control/ssi.cpp deleted file mode 100644 index fba16f7e..00000000 --- a/contrib/deneva/concurrency_control/ssi.cpp +++ /dev/null @@ -1,303 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@tencent.com - * - */ -#include "global.h" -#include "helper.h" -#include "txn.h" -#include "ssi.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_ssi.h" -#if CC_ALG == SSI - -void ssi::init() { - sem_init(&_semaphore, 0, 1); -} - -RC ssi::validate(TxnManager * txn) { - uint64_t start_time = get_sys_clock(); - uint64_t timespan; - sem_wait(&_semaphore); - - timespan = get_sys_clock() - start_time; - txn->txn_stats.cc_block_time += timespan; - txn->txn_stats.cc_block_time_short += timespan; - - start_time = get_sys_clock(); - RC rc = RCOK; - - DEBUG("SSI Validate Start %ld\n",txn->get_txn_id()); - std::set after; - std::set before; - if (inout_table.get_inConflict(txn->get_thd_id(), txn->get_txn_id()) && - inout_table.get_outConflict(txn->get_thd_id(), txn->get_txn_id())) - { - DEBUG("ssi Validate abort, %ld\n",txn->get_txn_id()); - rc = Abort; - } else { - DEBUG("ssi Validate ok %ld\n",txn->get_txn_id()); - rc = RCOK; - } - ssi_set_ent *rset, *wset; - get_rw_set(txn, rset, wset); - // si validate - - for (UInt32 i = 0; i < wset->set_size; i++) { - if (wset->rows[i]->manager->validate_last_commit(txn) == Abort) { - DEBUG("si Validate abort, %ld\n",txn->get_txn_id()); - rc = Abort; - } - } - - if (rc != Abort) DEBUG("si Validate ok, %ld\n",txn->get_txn_id()); - txn->txn_stats.cc_time += timespan; - txn->txn_stats.cc_time_short += timespan; - DEBUG("SSI Validate End %ld: %d\n",txn->get_txn_id(),rc==RCOK); - sem_post(&_semaphore); - return rc; -} - -void ssi::gene_finish_ts(TxnManager * txn) { - txn->set_commit_timestamp(glob_manager.get_ts(txn->get_thd_id())); -} - -RC ssi::get_rw_set(TxnManager * txn, ssi_set_ent * &rset, ssi_set_ent *& wset) { - wset = (ssi_set_ent*) mem_allocator.alloc(sizeof(ssi_set_ent)); - rset = (ssi_set_ent*) mem_allocator.alloc(sizeof(ssi_set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR) { - wset->rows[n ++] = txn->get_access_original_row(i); - } else { - rset->rows[m ++] = txn->get_access_original_row(i); - } - } - - assert(n == wset->set_size); - assert(m == rset->set_size); - return RCOK; -} -#endif - -void InOutTable::init() { - table_size = g_inflight_max + 1; - pthread_mutex_init(&mtx,NULL); - DEBUG_M("InOutTable::init table alloc\n"); - table = (InOutTableNode*) mem_allocator.alloc(sizeof(InOutTableNode) * table_size); - for(uint64_t i = 0; i < table_size;i++) { - table[i].init(); - } -} - -uint64_t InOutTable::hash(uint64_t key) { - return key % table_size; -} - -InOutTableEntry* InOutTable::find(uint64_t key) { - InOutTableEntry * entry = table[hash(key)].head; - while(entry) { - if (entry->key == key) { - break; - } - entry = entry->next; - } - return entry; -} - -void InOutTable::init(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id, mtx[34],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if (!entry) { - DEBUG_M("InOutTable::init entry alloc\n"); - entry = (InOutTableEntry*) mem_allocator.alloc(sizeof(InOutTableEntry)); - entry->init(key); - LIST_PUT_TAIL(table[idx].head,table[idx].tail,entry); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -void InOutTable::release(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id, mtx[35],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if (entry) { - LIST_REMOVE_HT(entry,table[idx].head,table[idx].tail); - DEBUG_M("InOutTable::release entry free\n"); - mem_allocator.free(entry,sizeof(InOutTableEntry)); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -bool InOutTable::get_inConflict(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - bool value = 0; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[36],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - value = !entry->inConflict.empty(); - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - -bool InOutTable::get_outConflict(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - bool value = UINT64_MAX; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[37],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - value = !entry->outConflict.empty(); - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - - -void InOutTable::set_inConflict(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[38],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - entry->inConflict.insert(value); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -void InOutTable::set_outConflict(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[39],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - entry->outConflict.insert(value); - } - pthread_mutex_unlock(&table[idx].mtx); -} - -void InOutTable::down_inConflict(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t v_idx = hash(value); - if (idx != v_idx) - pthread_mutex_lock(&table[idx].mtx); - InOutTableEntry* entry = find(key); - if(entry) { - entry->inConflict.erase(value); - } - if (idx != v_idx) - pthread_mutex_unlock(&table[idx].mtx); -} - -void InOutTable::down_outConflict(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t v_idx = hash(value); - if (idx != v_idx) - pthread_mutex_lock(&table[idx].mtx); - InOutTableEntry* entry = find(key); - if(entry) { - entry->outConflict.erase(value); - } - if (idx != v_idx) - pthread_mutex_unlock(&table[idx].mtx); -} - -void InOutTable::clear_Conflict(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&mtx); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[38],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - set::iterator iter = entry->inConflict.begin(); - while (iter != entry->inConflict.end()) - { - down_outConflict(thd_id, *iter, key); - iter++; - } - iter = entry->outConflict.begin(); - while (iter != entry->outConflict.end()) - { - down_inConflict(thd_id, *iter, key); - iter++; - } - } - pthread_mutex_unlock(&table[idx].mtx); - pthread_mutex_unlock(&mtx); -} - -SSIState InOutTable::get_state(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - SSIState value = SSI_RUNNING; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[37],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - value = entry->state; - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - -void InOutTable::set_state(uint64_t thd_id, uint64_t key, SSIState value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[39],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - entry->state = value; - } - pthread_mutex_unlock(&table[idx].mtx); -} - -uint64_t InOutTable::get_commit_ts(uint64_t thd_id, uint64_t key) { - uint64_t idx = hash(key); - uint64_t value = SSI_RUNNING; - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[37],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - value = entry->commit_ts; - } - pthread_mutex_unlock(&table[idx].mtx); - return value; -} - -void InOutTable::set_commit_ts(uint64_t thd_id, uint64_t key, uint64_t value) { - uint64_t idx = hash(key); - uint64_t mtx_wait_starttime = get_sys_clock(); - pthread_mutex_lock(&table[idx].mtx); - INC_STATS(thd_id,mtx[39],get_sys_clock() - mtx_wait_starttime); - InOutTableEntry* entry = find(key); - if(entry) { - entry->commit_ts = value; - } - pthread_mutex_unlock(&table[idx].mtx); -} diff --git a/contrib/deneva/concurrency_control/ssi.h b/contrib/deneva/concurrency_control/ssi.h deleted file mode 100644 index 7c2f56f0..00000000 --- a/contrib/deneva/concurrency_control/ssi.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@tencent.com - * - */ - -#ifndef _SSI_H_ -#define _SSI_H_ - -#include "row.h" -#include "semaphore.h" - -class TxnManager; -enum SSIState { SSI_RUNNING=0,SSI_COMMITTED,SSI_ABORTED}; -struct InOutTableEntry{ - std::set inConflict; - std::set outConflict; - SSIState state; - uint64_t commit_ts; - uint64_t key; - - InOutTableEntry * next; - InOutTableEntry * prev; - void init(uint64_t key) { - this->key = key; - state = SSI_RUNNING; - commit_ts = 0; - next = NULL; - prev = NULL; - } -}; - -struct InOutTableNode { - InOutTableEntry * head; - InOutTableEntry * tail; - pthread_mutex_t mtx; - void init() { - head = NULL; - tail = NULL; - pthread_mutex_init(&mtx,NULL); - } -}; - -class InOutTable { -public: - void init(); - void init(uint64_t thd_id, uint64_t key); - void release(uint64_t thd_id, uint64_t key); - bool get_inConflict(uint64_t thd_id, uint64_t key); - bool get_outConflict(uint64_t thd_id, uint64_t key); - void set_inConflict(uint64_t thd_id, uint64_t key, uint64_t value); - void down_inConflict(uint64_t thd_id, uint64_t key, uint64_t value); - - void set_outConflict(uint64_t thd_id, uint64_t key, uint64_t value); - void down_outConflict(uint64_t thd_id, uint64_t key, uint64_t value); - - void clear_Conflict(uint64_t thd_id, uint64_t key); - - SSIState get_state(uint64_t thd_id, uint64_t key); - void set_state(uint64_t thd_id, uint64_t key, SSIState value); - uint64_t get_commit_ts(uint64_t thd_id, uint64_t key); - void set_commit_ts(uint64_t thd_id, uint64_t key, uint64_t value); - - private: - // hash table - uint64_t hash(uint64_t key); - uint64_t table_size; - InOutTableNode* table; - InOutTableEntry* find(uint64_t key); - pthread_mutex_t mtx; - InOutTableEntry * find_entry(uint64_t id); - sem_t _semaphore; -}; - -class ssi_set_ent{ -public: - ssi_set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - ssi_set_ent * next; -}; - -class ssi { -public: - void init(); - RC validate(TxnManager * txn); - void gene_finish_ts(TxnManager * txn); - RC get_rw_set(TxnManager * txn, ssi_set_ent * &rset, ssi_set_ent *& wset); -private: - sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/sundial.cpp b/contrib/deneva/concurrency_control/sundial.cpp deleted file mode 100644 index 3189ef96..00000000 --- a/contrib/deneva/concurrency_control/sundial.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -#include "global.h" -#if CC_ALG == SUNDIAL -#include "config.h" -#include "helper.h" -#include "txn.h" -#include "row.h" -#include "sundial.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_sundial.h" -bool Sundial::_pre_abort = PRE_ABORT; - -RC Sundial::get_rw_set(TxnManager * txn, sundial_set_ent * &rset, sundial_set_ent *& wset) { - wset = (sundial_set_ent*) mem_allocator.alloc(sizeof(sundial_set_ent)); - rset = (sundial_set_ent*) mem_allocator.alloc(sizeof(sundial_set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->access = (Access **) mem_allocator.alloc(sizeof(Access *) * wset->set_size); - rset->access = (Access **) mem_allocator.alloc(sizeof(Access *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR){ - wset->access[n] = txn->txn->accesses[i]; - wset->rows[n] = txn->get_access_original_row(i); - n++; - } - else { - rset->access[m] = txn->txn->accesses[i]; - rset->rows[m] = txn->get_access_original_row(i); - m++; - } - } - assert(n == wset->set_size); - assert(m == rset->set_size); - - return RCOK; -} - -void Sundial::init() { - return ; -} - -RC Sundial::validate(TxnManager * txn) -{ - if (txn->_is_sub_txn) - return validate_part(txn); - else - return validate_coor(txn); -} - -RC Sundial::validate_coor(TxnManager * txn) -{ - RC rc = RCOK; - // split _access_set into read_set and write_set - sundial_set_ent * wset; - sundial_set_ent * rset; - get_rw_set(txn, rset, wset); - // 1. lock the local write set - // 2. compute commit ts - // 3. validate local txn - - // [Compute the commit timestamp] - compute_commit_ts(txn); - -#if OCC_WAW_LOCK - if (ISOLATION_LEVEL == SERIALIZABLE) - rc = validate_read_set(rset, txn, txn->_min_commit_ts); -#else - if (rc == RCOK) { - rc = lock_write_set(wset, txn); - if (rc == Abort) { - } - } - if (rc != Abort) { - RC rc2 = RCOK; - // if any rts has been updated, update _min_commit_ts. - compute_commit_ts(txn); - // at this point, _min_commit_ts is the final min_commit_ts for the prepare phase. . - if (ISOLATION_LEVEL == SERIALIZABLE) { - rc2 = validate_read_set(rset, txn, txn->_min_commit_ts); - if (rc2 == Abort) { - rc = rc2; - } - } - } -#endif - if (rc == Abort) { - unlock_write_set(rc, wset, txn); - } - return rc; -} - -RC Sundial::validate_part(TxnManager * txn) -{ - RC rc = RCOK; - // split _access_set into read_set and write_set - sundial_set_ent * wset; - sundial_set_ent * rset; - get_rw_set(txn, rset, wset); - // 1. lock the local write set - // 2. compute commit ts - // 3. validate local txn - -#if OCC_WAW_LOCK - if (ISOLATION_LEVEL == SERIALIZABLE) - rc = validate_read_set(rset, txn, txn->_min_commit_ts); -#else - if (rc == RCOK) { - rc = lock_write_set(wset, txn); - if (rc == Abort) { - } - } - if (rc != Abort) { - if (validate_write_set(wset, txn, txn->_min_commit_ts) == Abort) - rc = Abort; - } - if (rc != Abort) { - if (validate_read_set(rset, txn, txn->_min_commit_ts) == Abort) { - rc = Abort; - } - } -#endif - if (rc == Abort) { - unlock_write_set(rc, wset, txn); - return rc; - } else { - } - - return rc; -} - -void Sundial::compute_commit_ts(TxnManager * txn) -{ - uint64_t size = txn->get_write_set_size(); - size += txn->get_read_set_size(); - for (uint64_t i = 0; i < size; i++) { - if (txn->get_access_type(i) == WR){ - txn->_min_commit_ts = txn->txn->accesses[i]->orig_rts + 1 > txn->_min_commit_ts ? txn->txn->accesses[i]->orig_rts + 1 : txn->_min_commit_ts; - } - else { - txn->_min_commit_ts = txn->txn->accesses[i]->orig_wts > txn->_min_commit_ts ? txn->txn->accesses[i]->orig_wts : txn->_min_commit_ts; - } - } - - -} - -RC -Sundial::validate_read_set(sundial_set_ent * rset, TxnManager * txn, uint64_t commit_ts) -{ - - // validate the read set. - for (UInt32 i = 0; i < rset->set_size; i++) { - if (rset->access[i]->orig_rts >= commit_ts) { - continue; - } - row_t * cur_rrow = rset->rows[i]; - if (!cur_rrow->manager->try_renew(rset->access[i]->orig_wts, commit_ts, rset->access[i]->orig_rts)) - { - return Abort; - } - } - - return RCOK; -} - -RC -Sundial::lock_write_set(sundial_set_ent * wset, TxnManager * txn) -{ - assert(!OCC_WAW_LOCK); - RC rc = RCOK; - txn->_num_lock_waits = 0; - - for (UInt32 i = 0; i < wset->set_size; i++) { - row_t * cur_wrow = wset->rows[i]; - rc = cur_wrow->manager->try_lock(txn); - if (rc == WAIT || rc == RCOK) - wset->access[i]->locked = true; - if (rc == WAIT) - ATOM_ADD_FETCH(txn->_num_lock_waits, 1); - wset->access[i]->orig_rts = cur_wrow->manager->get_rts(); - if (wset->access[i]->orig_wts != cur_wrow->manager->get_wts()) { - rc = Abort; - } - if (rc == Abort) - return Abort; - } - if (rc == Abort) - return Abort; - else if (txn->_num_lock_waits > 0) - return WAIT; - return rc; -} - -void -Sundial::cleanup(RC rc, TxnManager * txn) -{ - sundial_set_ent * wset; - sundial_set_ent * rset; - get_rw_set(txn, rset, wset); - unlock_write_set(rc, wset, txn); -} - -void -Sundial::unlock_write_set(RC rc, sundial_set_ent * wset, TxnManager * txn) -{ - for (UInt32 i = 0; i < wset->set_size; i++) { - if (wset->access[i]->locked) { - row_t * cur_wrow = wset->rows[i]; - cur_wrow->manager->release(txn, rc); - wset->access[i]->locked = false; - } - } -} - -RC -Sundial::validate_write_set(sundial_set_ent * wset, TxnManager * txn, uint64_t commit_ts) -{ - for (UInt32 i = 0; i < wset->set_size; i++) { - if (txn->_min_commit_ts <= wset->access[i]->orig_rts){ - return Abort; - } - } - return RCOK; -} - -bool -Sundial::is_txn_ready(TxnManager * txn) -{ - return txn->_num_lock_waits == 0; -} - -void -Sundial::set_txn_ready(RC rc, TxnManager * txn) -{ - // this function can be called by multiple threads concurrently - if (rc == RCOK) - ATOM_SUB_FETCH(txn->_num_lock_waits, 1); - else { - txn->_signal_abort = true; - } -} - -#endif \ No newline at end of file diff --git a/contrib/deneva/concurrency_control/sundial.h b/contrib/deneva/concurrency_control/sundial.h deleted file mode 100644 index dcc2377d..00000000 --- a/contrib/deneva/concurrency_control/sundial.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef _SUNDIAL_H_ -#define _SUNDIAL_H_ - -#include "row.h" -#include "semaphore.h" - - -class TxnManager; - -class sundial_set_ent{ -public: - sundial_set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - Access** access; - sundial_set_ent * next; -}; - -class Sundial { -public: - void init(); - RC validate(TxnManager * txn); - void cleanup(RC rc, TxnManager * txn); - void set_txn_ready(RC rc, TxnManager * txn); - bool is_txn_ready(TxnManager * txn); - static bool _pre_abort; -private: - RC get_rw_set(TxnManager * txni, sundial_set_ent * &rset, sundial_set_ent *& wset); - RC validate_coor(TxnManager * txn); - RC validate_part(TxnManager * txn); - RC validate_write_set(sundial_set_ent * wset, TxnManager * txn, uint64_t commit_ts); - RC validate_read_set(sundial_set_ent * rset, TxnManager * txn, uint64_t commit_ts); - RC lock_write_set(sundial_set_ent * wset, TxnManager * txn); - void unlock_write_set(RC rc, sundial_set_ent * wset, TxnManager * txn); - void compute_commit_ts(TxnManager * txn); - // sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/concurrency_control/wsi.cpp b/contrib/deneva/concurrency_control/wsi.cpp deleted file mode 100644 index 6d5f92b0..00000000 --- a/contrib/deneva/concurrency_control/wsi.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -#include "global.h" -#if CC_ALG == WSI -#include "helper.h" -#include "txn.h" -#include "wsi.h" -#include "manager.h" -#include "mem_alloc.h" -#include "row_wsi.h" - - -wsi_set_ent::wsi_set_ent() { - set_size = 0; - txn = NULL; - rows = NULL; - next = NULL; -} - -void wsi::init() { - sem_init(&_semaphore, 0, 1); -} - -RC wsi::validate(TxnManager * txn) { - RC rc; - rc = central_validate(txn); - return rc; -} - -RC wsi::central_validate(TxnManager * txn) { - RC rc; - uint64_t start_tn = txn->get_start_timestamp(); - bool valid = true; - - wsi_set_ent * wset; - wsi_set_ent * rset; - get_rw_set(txn, rset, wset); - bool readonly = (wset->set_size == 0); - - int stop __attribute__((unused)); - uint64_t checked = 0; - sem_wait(&_semaphore); - - if (!readonly) { - for (UInt32 i = 0; i < rset->set_size; i++) { - checked++; - if (rset->rows[i]->manager->get_last_commit() > start_tn) { - rc = Abort; - } - } - } - sem_post(&_semaphore); - mem_allocator.free(rset->rows, sizeof(row_t *) * rset->set_size); - mem_allocator.free(rset, sizeof(wsi_set_ent)); - - if (valid) { - rc = RCOK; - } else { - rc = Abort; - } - DEBUG("End Validation %ld\n",txn->get_txn_id()); - return rc; -} - -void wsi::finish(RC rc, TxnManager * txn) { - central_finish(rc,txn); -} - -void wsi::central_finish(RC rc, TxnManager * txn) { - wsi_set_ent * wset; - wsi_set_ent * rset; - get_rw_set(txn, rset, wset); - - for (UInt32 i = 0; i < rset->set_size; i++) { - rset->rows[i]->manager->update_last_commit(txn->get_commit_timestamp()); - } -} - -void wsi::gene_finish_ts(TxnManager * txn) { - txn->set_commit_timestamp(glob_manager.get_ts(txn->get_thd_id())); -} - -RC wsi::get_rw_set(TxnManager * txn, wsi_set_ent * &rset, wsi_set_ent *& wset) { - wset = (wsi_set_ent*) mem_allocator.alloc(sizeof(wsi_set_ent)); - rset = (wsi_set_ent*) mem_allocator.alloc(sizeof(wsi_set_ent)); - wset->set_size = txn->get_write_set_size(); - rset->set_size = txn->get_read_set_size(); - wset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * wset->set_size); - rset->rows = (row_t **) mem_allocator.alloc(sizeof(row_t *) * rset->set_size); - wset->txn = txn; - rset->txn = txn; - - UInt32 n = 0, m = 0; - for (uint64_t i = 0; i < wset->set_size + rset->set_size; i++) { - if (txn->get_access_type(i) == WR) { - wset->rows[n ++] = txn->get_access_original_row(i); - } else { - rset->rows[m ++] = txn->get_access_original_row(i); - } - } - - assert(n == wset->set_size); - assert(m == rset->set_size); - return RCOK; -} -#endif \ No newline at end of file diff --git a/contrib/deneva/concurrency_control/wsi.h b/contrib/deneva/concurrency_control/wsi.h deleted file mode 100644 index a236545c..00000000 --- a/contrib/deneva/concurrency_control/wsi.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef _WSI_H_ -#define _WSI_H_ - -#include "row.h" -#include "semaphore.h" - -// For simplicity, the txn hisotry for OCC is oganized as follows: -// 1. history is never deleted. -// 2. hisotry forms a single directional list. -// history head -> hist_1 -> hist_2 -> hist_3 -> ... -> hist_n -// The head is always the latest and the tail the youngest. -// When history is traversed, always go from head -> tail order. - -class TxnManager; - -class wsi_set_ent{ -public: - wsi_set_ent(); - UInt64 tn; - TxnManager * txn; - UInt32 set_size; - row_t ** rows; //[MAX_WRITE_SET]; - wsi_set_ent * next; -}; - -class wsi { -public: - void init(); - RC validate(TxnManager * txn); - void gene_finish_ts(TxnManager * txn); - void finish(RC rc, TxnManager * txn); -private: - // parallel validation in the original OCC paper. - RC central_validate(TxnManager * txn); - RC get_rw_set(TxnManager * txni, wsi_set_ent * &rset, wsi_set_ent *& wset); - void central_finish(RC rc, TxnManager * txn); - pthread_mutex_t latch; - sem_t _semaphore; -}; - -#endif diff --git a/contrib/deneva/config-debug.h b/contrib/deneva/config-debug.h deleted file mode 100644 index f9cdbf3d..00000000 --- a/contrib/deneva/config-debug.h +++ /dev/null @@ -1,366 +0,0 @@ -#ifndef _CONFIG_H_ - -#define _CONFIG_H_ - -/***********************************************/ -// Simulation + Hardware -/***********************************************/ -#define NODE_CNT 1 -#define THREAD_CNT 4 -#define REM_THREAD_CNT THREAD_CNT -#define SEND_THREAD_CNT THREAD_CNT -#define CORE_CNT 2 -// PART_CNT should be at least NODE_CNT -#define PART_CNT NODE_CNT -#define CLIENT_NODE_CNT NODE_CNT -#define CLIENT_THREAD_CNT 4 -#define CLIENT_REM_THREAD_CNT 2 -#define CLIENT_SEND_THREAD_CNT 2 -#define CLIENT_RUNTIME false - -#define LOAD_METHOD LOAD_MAX -#define LOAD_PER_SERVER 100 - -// Replication -#define REPLICA_CNT 0 -// AA (Active-Active), AP (Active-Passive) -#define REPL_TYPE AP - -// each transaction only accesses only 1 virtual partition. But the lock/ts manager and index are -// not aware of such partitioning. VIRTUAL_PART_CNT describes the request distribution and is only -// used to generate queries. For HSTORE, VIRTUAL_PART_CNT should be the same as PART_CNT. -#define VIRTUAL_PART_CNT PART_CNT -#define PAGE_SIZE 4096 -#define CL_SIZE 64 -#define CPU_FREQ 2.6 -// enable hardware migration. -#define HW_MIGRATE false - -// # of transactions to run for warmup -#define WARMUP 0 -// YCSB or TPCC or PPS -#define WORKLOAD YCSB -// print the transaction latency distribution -#define PRT_LAT_DISTR false -#define STATS_ENABLE true -#define TIME_ENABLE true //STATS_ENABLE - -#define FIN_BY_TIME true -#define MAX_TXN_IN_FLIGHT 10000 - -#define SERVER_GENERATE_QUERIES false - -/***********************************************/ -// Memory System -/***********************************************/ -// Three different memory allocation methods are supported. -// 1. default libc malloc -// 2. per-thread malloc. each thread has a private local memory -// pool -// 3. per-partition malloc. each partition has its own memory pool -// which is mapped to a unique tile on the chip. -#define MEM_ALLIGN 8 - -// [THREAD_ALLOC] -#define THREAD_ALLOC false -#define THREAD_ARENA_SIZE (1UL << 22) -#define MEM_PAD true - -// [PART_ALLOC] -#define PART_ALLOC false -#define MEM_SIZE (1UL << 30) -#define NO_FREE false - -/***********************************************/ -// Message Passing -/***********************************************/ -#define TPORT_TYPE tcp -#define TPORT_PORT 7000 -#define SET_AFFINITY true -#define TPORT_TYPE tcp -#define TPORT_PORT 7000 -#define SET_AFFINITY true - -#define MAX_TPORT_NAME 128 -#define MSG_SIZE 128 // in bytes -#define HEADER_SIZE sizeof(uint32_t)*2 // in bits -#define MSG_TIMEOUT 5000000000UL // in ns -#define NETWORK_TEST false -#define NETWORK_DELAY_TEST false -#define NETWORK_DELAY 0UL - -#define MAX_QUEUE_LEN NODE_CNT * 2 - -#define PRIORITY_WORK_QUEUE false -#define PRIORITY PRIORITY_ACTIVE -#define MSG_SIZE_MAX 4096 -#define MSG_TIME_LIMIT 0 - -/***********************************************/ -// Concurrency Control -/***********************************************/ -// WAIT_DIE, NO_WAIT, TIMESTAMP, MVCC, CALVIN, MAAT, SUNDIAL, SILO, BOCC, FOCC, SSI, WSI -#define CC_ALG MAAT -#define ISOLATION_LEVEL SERIALIZABLE -#define YCSB_ABORT_MODE false - -// all transactions acquire tuples according to the primary key order. -#define KEY_ORDER false -// transaction roll back changes after abort -#define ROLL_BACK true -// per-row lock/ts management or central lock/ts management -#define CENTRAL_MAN false -#define BUCKET_CNT 31 -#define ABORT_PENALTY 10 * 1000000UL // in ns. -#define ABORT_PENALTY_MAX 5 * 100 * 1000000UL // in ns. -#define BACKOFF true -// [ INDEX ] -#define ENABLE_LATCH false -#define CENTRAL_INDEX false -#define CENTRAL_MANAGER false -#define INDEX_STRUCT IDX_HASH -#define BTREE_ORDER 16 - -// [TIMESTAMP] -#define TS_TWR false -#define TS_ALLOC TS_CLOCK -#define TS_BATCH_ALLOC false -#define TS_BATCH_NUM 1 -// [MVCC] -// when read/write history is longer than HIS_RECYCLE_LEN -// the history should be recycled. -#define HIS_RECYCLE_LEN 10 -#define MAX_PRE_REQ MAX_TXN_IN_FLIGHT * NODE_CNT//1024 -#define MAX_READ_REQ MAX_TXN_IN_FLIGHT * NODE_CNT//1024 -#define MIN_TS_INTVL 10 * 1000000UL // 10ms -// [OCC] -#define MAX_WRITE_SET 10 -#define PER_ROW_VALID false -// [VLL] -#define TXN_QUEUE_SIZE_LIMIT THREAD_CNT -// [CALVIN] -#define SEQ_THREAD_CNT 4 - -/***********************************************/ -// Logging -/***********************************************/ -#define LOG_COMMAND false -#define LOG_REDO false -#define LOGGING false -#define LOG_BUF_MAX 10 -#define LOG_BUF_TIMEOUT 10 * 1000000UL // 10ms - -/***********************************************/ -// Benchmark -/***********************************************/ -// max number of rows touched per transaction -#define MAX_ROW_PER_TXN 64 -#define QUERY_INTVL 1UL -#define MAX_TXN_PER_PART 500000 -#define FIRST_PART_LOCAL true -#define MAX_TUPLE_SIZE 1024 // in bytes -#define GEN_BY_MPR false -// ==== [YCSB] ==== -// SKEW_METHOD: -// ZIPF: use ZIPF_THETA distribution -// HOT: use ACCESS_PERC of the accesses go to DATA_PERC of the data -#define SKEW_METHOD ZIPF -#define DATA_PERC 100 -#define ACCESS_PERC 0.03 -#define INIT_PARALLELISM 8 -#define SYNTH_TABLE_SIZE 33554432 -#define ZIPF_THETA 0.8 -#define TXN_WRITE_PERC 0.5 -#define TUP_WRITE_PERC 0.5 -#define SCAN_PERC 0 -#define SCAN_LEN 20 -#define PART_PER_TXN 2 -#define PERC_MULTI_PART MPR -#define REQ_PER_QUERY 10 -#define FIELD_PER_TUPLE 10 -#define CREATE_TXN_FILE false -#define STRICT_PPT 0 -// ==== [TPCC] ==== -// For large warehouse count, the tables do not fit in memory -// small tpcc schemas shrink the table size. -#define TPCC_SMALL false -#define MAX_ITEMS_SMALL 10000 -#define CUST_PER_DIST_SMALL 2000 -#define MAX_ITEMS_NORM 100000 -#define CUST_PER_DIST_NORM 3000 -#define MAX_ITEMS_PER_TXN 15 -// Some of the transactions read the data but never use them. -// If TPCC_ACCESS_ALL == fales, then these parts of the transactions -// are not modeled. -#define TPCC_ACCESS_ALL false -#define WH_UPDATE true -#define NUM_WH PART_CNT -// % of transactions that access multiple partitions -#define MPR 1.0 -#define MPIR 0.01 -#define MPR_NEWORDER 20 // In % -enum TPCCTable { - TPCC_WAREHOUSE, - TPCC_DISTRICT, - TPCC_CUSTOMER, - TPCC_HISTORY, - TPCC_NEWORDER, - TPCC_ORDER, - TPCC_ORDERLINE, - TPCC_ITEM, - TPCC_STOCK -}; -enum TPCCTxnType { - TPCC_ALL, - TPCC_PAYMENT, - TPCC_NEW_ORDER, - TPCC_ORDER_STATUS, - TPCC_DELIVERY, - TPCC_STOCK_LEVEL -}; -extern TPCCTxnType g_tpcc_txn_type; - -//#define TXN_TYPE TPCC_ALL -#define PERC_PAYMENT 0.0 -#define FIRSTNAME_MINLEN 8 -#define FIRSTNAME_LEN 16 -#define LASTNAME_LEN 16 - -#define DIST_PER_WH 10 - -// PPS (Product-Part-Supplier) -#define MAX_PPS_PARTS_PER 10 -#define MAX_PPS_PART_KEY 10000 -#define MAX_PPS_PRODUCT_KEY 1000 -#define MAX_PPS_SUPPLIER_KEY 1000 -#define MAX_PPS_PART_PER_PRODUCT 10 -#define MAX_PPS_PART_PER_SUPPLIER 10 -#define MAX_PPS_PART_PER_PRODUCT_KEY 10 -#define MAX_PPS_PART_PER_SUPPLIER_KEY 10 - -#define PERC_PPS_GETPART 0.00 -#define PERC_PPS_GETSUPPLIER 0.00 -#define PERC_PPS_GETPRODUCT 0.0 -#define PERC_PPS_GETPARTBYSUPPLIER 0.0 -#define PERC_PPS_GETPARTBYPRODUCT 0.2 -#define PERC_PPS_ORDERPRODUCT 0.6 -#define PERC_PPS_UPDATEPRODUCTPART 0.2 -#define PERC_PPS_UPDATEPART 0.0 - -enum PPSTxnType { - PPS_ALL = 0, - PPS_GETPART, - PPS_GETSUPPLIER, - PPS_GETPRODUCT, - PPS_GETPARTBYSUPPLIER, - PPS_GETPARTBYPRODUCT, - PPS_ORDERPRODUCT, - PPS_UPDATEPRODUCTPART, - PPS_UPDATEPART -}; - -/***********************************************/ -// DEBUG info -/***********************************************/ -#define WL_VERB true -#define IDX_VERB false -#define VERB_ALLOC true - -#define DEBUG_LOCK false -#define DEBUG_TIMESTAMP false -#define DEBUG_SYNTH false -#define DEBUG_ASSERT false -#define DEBUG_DISTR true -#define DEBUG_ALLOC false -#define DEBUG_RACE false -#define DEBUG_TIMELINE false -#define DEBUG_BREAKDOWN false -#define DEBUG_LATENCY false - -/***********************************************/ -// MODES -/***********************************************/ -// QRY Only do query operations, no 2PC -// TWOPC Only do 2PC, no query work -// SIMPLE Immediately send OK back to client -// NOCC Don't do CC -// NORMAL normal operation -#define MODE NORMAL_MODE - - -/***********************************************/ -// Constant -/***********************************************/ -// INDEX_STRUCT -#define IDX_HASH 1 -#define IDX_BTREE 2 -// WORKLOAD -#define YCSB 1 -#define TPCC 2 -#define PPS 3 -#define TEST 4 -// Concurrency Control Algorithm -#define NO_WAIT 1 -#define WAIT_DIE 2 -#define DL_DETECT 3 -#define TIMESTAMP 4 -#define MVCC 5 -#define HSTORE 6 -#define HSTORE_SPEC 7 -#define OCC 8 -#define VLL 9 -#define CALVIN 10 -#define MAAT 11 -#define WDL 12 - -// TIMESTAMP allocation method. -#define TS_MUTEX 1 -#define TS_CAS 2 -#define TS_HW 3 -#define TS_CLOCK 4 -// MODES -// NORMAL < NOCC < QRY_ONLY < SETUP < SIMPLE -#define NORMAL_MODE 1 -#define NOCC_MODE 2 -#define QRY_ONLY_MODE 3 -#define SETUP_MODE 4 -#define SIMPLE_MODE 5 -// SKEW METHODS -#define ZIPF 1 -#define HOT 2 -// PRIORITY WORK QUEUE -#define PRIORITY_FCFS 1 -#define PRIORITY_ACTIVE 2 -#define PRIORITY_HOME 3 -// Replication -#define AA 1 -#define AP 2 -// Load -#define LOAD_MAX 1 -#define LOAD_RATE 2 -// Transport -#define TCP 1 -#define IPC 2 -// Isolation levels -#define SERIALIZABLE 1 -#define READ_COMMITTED 2 -#define READ_UNCOMMITTED 3 -#define NOLOCK 4 - -// Stats and timeout -#define BILLION 1000000000UL // in ns => 1 second -#define MILLION 1000000UL // in ns => 1 second -#define STAT_ARR_SIZE 1024 -#define PROG_TIMER 10 * BILLION // in s -#define BATCH_TIMER 0 -#define SEQ_BATCH_TIMER 5 * 1 * MILLION // ~5ms -- same as CALVIN paper -#define DONE_TIMER 1 * 60 * BILLION // ~1 minutes -#define WARMUP_TIMER 1 * 10 * BILLION // ~1 minutes - -#define SEED 0 -#define SHMEM_ENV false -#define ENVIRONMENT_EC2 false - -#endif - - diff --git a/contrib/deneva/config-std.h b/contrib/deneva/config-std.h deleted file mode 100644 index f52fbecf..00000000 --- a/contrib/deneva/config-std.h +++ /dev/null @@ -1,209 +0,0 @@ -#ifndef _CONFIG_H_ -#define _CONFIG_H_ - -/***********************************************/ -// Simulation + Hardware -/***********************************************/ -#define THREAD_CNT 4 -#define PART_CNT 1 //CORE_CNT -// each transaction only accesses only 1 virtual partition. But the lock/ts manager and index are -// not aware of such partitioning. VIRTUAL_PART_CNT describes the request distribution and is only -// used to generate queries. For HSTORE, VIRTUAL_PART_CNT should be the same as PART_CNT. -#define VIRTUAL_PART_CNT 1 -#define PAGE_SIZE 4096 -#define CL_SIZE 64 -#define CPU_FREQ 2.6 -// enable hardware migration. -#define HW_MIGRATE false - -// # of transactions to run for warmup -#define WARMUP 0 -// YCSB or TPCC -#define WORKLOAD YCSB -// print the transaction latency distribution -#define PRT_LAT_DISTR false -#define STATS_ENABLE true -#define TIME_ENABLE true //STATS_ENABLE - -/***********************************************/ -// Memory System -/***********************************************/ -// Three different memory allocation methods are supported. -// 1. default libc malloc -// 2. per-thread malloc. each thread has a private local memory -// pool -// 3. per-partition malloc. each partition has its own memory pool -// which is mapped to a unique tile on the chip. -#define MEM_ALLIGN 8 - -// [THREAD_ALLOC] -#define THREAD_ALLOC true -#define THREAD_ARENA_SIZE (1UL << 22) -#define MEM_PAD true - -// [PART_ALLOC] -#define PART_ALLOC false -#define MEM_SIZE (1UL << 30) -#define NO_FREE false - -/***********************************************/ -// Concurrency Control -/***********************************************/ -// WAIT_DIE, NO_WAIT, DL_DETECT, TIMESTAMP, MVCC, HSTORE, OCC, VLL, SUNDIAL, SILO, BOCC, FOCC, SSI, WSI -#define CC_ALG DL_DETECT - -// all transactions acquire tuples according to the primary key order. -#define KEY_ORDER false -// transaction roll back changes after abort -#define ROLL_BACK true -// per-row lock/ts management or central lock/ts management -#define CENTRAL_MAN false -#define BUCKET_CNT 31 -#define ABORT_PENALTY 1000000UL // in ns. -// [ INDEX ] -#define ENABLE_LATCH false -#define CENTRAL_INDEX false -#define CENTRAL_MANAGER false -#define INDEX_STRUCT IDX_HASH -#define BTREE_ORDER 16 - -// [DL_DETECT] -#define DL_LOOP_DETECT 100000 // 100 us -#define DL_LOOP_TRIAL 1000 // 1 us -#define NO_DL KEY_ORDER -#define TIMEOUT 100000000000 -// [TIMESTAMP] -#define TS_TWR false -#define TS_ALLOC TS_CAS -#define TS_BATCH_ALLOC false -#define TS_BATCH_NUM 1 -// [MVCC] -// when read/write history is longer than HIS_RECYCLE_LEN -// the history should be recycled. -#define HIS_RECYCLE_LEN 10 -#define MAX_PRE_REQ 1024 -#define MAX_READ_REQ 1024 -#define MIN_TS_INTVL 10000000 //10 ms -// [OCC] -#define MAX_WRITE_SET 10 -#define PER_ROW_VALID true -// [HSTORE] -// when set to true, hstore will not access the global timestamp. -// This is fine for single partition transactions. -#define HSTORE_LOCAL_TS false -// [VLL] -#define TXN_QUEUE_SIZE_LIMIT THREAD_CNT - -/***********************************************/ -// Logging -/***********************************************/ -#define LOG_COMMAND false -#define LOG_REDO false - -/***********************************************/ -// Benchmark -/***********************************************/ -// max number of rows touched per transaction -#define MAX_ROW_PER_TXN 64 -#define QUERY_INTVL 1UL -#define MAX_TXN_PER_PART 100 -#define FIRST_PART_LOCAL true -#define MAX_TUPLE_SIZE 1024 // in bytes -// ==== [YCSB] ==== -#define INIT_PARALLELISM 16 -#define SYNTH_TABLE_SIZE (THREAD_CNT*1024) -#define ZIPF_THETA 0 -#define READ_PERC 0.5 -#define WRITE_PERC 0.5 -#define SCAN_PERC 0 -#define SCAN_LEN 20 -#define PART_PER_TXN 1 -#define PERC_MULTI_PART 1 -#define REQ_PER_QUERY 16 -#define FIELD_PER_TUPLE 10 -// ==== [TPCC] ==== -// For large warehouse count, the tables do not fit in memory -// small tpcc schemas shrink the table size. -#define TPCC_SMALL true -// Some of the transactions read the data but never use them. -// If TPCC_ACCESS_ALL == fales, then these parts of the transactions -// are not modeled. -#define TPCC_ACCESS_ALL false -#define WH_UPDATE true -#define NUM_WH 4 -// -enum TPCCTxnType { - TPCC_ALL, - TPCC_PAYMENT, - TPCC_NEW_ORDER, - TPCC_ORDER_STATUS, - TPCC_DELIVERY, - TPCC_STOCK_LEVEL -}; -extern TPCCTxnType g_tpcc_txn_type; - -//#define TXN_TYPE TPCC_ALL -#define PERC_PAYMENT 0.5 -#define FIRSTNAME_MINLEN 8 -#define FIRSTNAME_LEN 16 -#define LASTNAME_LEN 16 - -#define DIST_PER_WARE 10 - -/***********************************************/ -// TODO centralized CC management. -/***********************************************/ -#define MAX_LOCK_CNT (20 * THREAD_CNT) -#define TSTAB_SIZE 50 * THREAD_CNT -#define TSTAB_FREE TSTAB_SIZE -#define TSREQ_FREE 4 * TSTAB_FREE -#define MVHIS_FREE 4 * TSTAB_FREE -#define SPIN false - -/***********************************************/ -// Test cases -/***********************************************/ -#define TEST_ALL true -enum TestCases { - READ_WRITE, - CONFLICT -}; -extern TestCases g_test_case; -/***********************************************/ -// DEBUG info -/***********************************************/ -#define WL_VERB true -#define IDX_VERB false -#define VERB_ALLOC true - -#define DEBUG_LOCK false -#define DEBUG_TIMESTAMP false -#define DEBUG_SYNTH false -#define DEBUG_ASSERT false - -/***********************************************/ -// Constant -/***********************************************/ -// INDEX_STRUCT -#define IDX_HASH 1 -#define IDX_BTREE 2 -// WORKLOAD -#define YCSB 1 -#define TPCC 2 -#define TEST 3 -// Concurrency Control Algorithm -#define NO_WAIT 1 -#define WAIT_DIE 2 -#define DL_DETECT 3 -#define TIMESTAMP 4 -#define MVCC 5 -#define HSTORE 6 -#define OCC 7 -#define VLL 8 -// TIMESTAMP allocation method. -#define TS_MUTEX 1 -#define TS_CAS 2 -#define TS_HW 3 -#define TS_CLOCK 4 - -#endif diff --git a/contrib/deneva/config.cpp b/contrib/deneva/config.cpp deleted file mode 100644 index 664d125d..00000000 --- a/contrib/deneva/config.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "config.h" - -TPCCTxnType g_tpcc_txn_type = TPCC_ALL; diff --git a/contrib/deneva/config.h b/contrib/deneva/config.h deleted file mode 100644 index 33b19e36..00000000 --- a/contrib/deneva/config.h +++ /dev/null @@ -1,441 +0,0 @@ -#ifndef _CONFIG_H_ - -#define _CONFIG_H_ - -/***sundial****/ -/* -#define WRITE_PERMISSION_LOCK false -#define MULTI_VERSION false -#define ENABLE_LOCAL_CACHING false -#define OCC_LOCK_TYPE WAIT_DIE -#define SUNDIAL_MV false -#define OCC_WAW_LOCK true -#define RO_LEASE false -#define ATOMIC_WORD false -#define TRACK_LAST false -#define UPDATE_TABLE_TS true -#define WRITE_PERMISSION_LOCK false -#define LOCK_ALL_BEFORE_COMMIT false -#define LOCK_ALL_DEBUG false -#define PAUSE __asm__ ( "pause;" ); -#define COMPILER_BARRIER asm volatile("" ::: "memory"); -*/ - -/***********************************************/ -// DA Trans Creator -/***********************************************/ -//which creator to use -#define CREATOR_USE_T false - -//TraversalActionSequenceCreator -#define TRANS_CNT 2 -#define ITEM_CNT 4 -#define SUBTASK_NUM 1 -#define SUBTASK_ID 0 -#define MAX_DML 4 -#define WITH_ABORT false -#define TAIL_DTL false -#define SAVE_HISTROY_WITH_EMPTY_OPT false -#define DYNAMIC_SEQ_LEN false - -//InputActionSequenceCreator -#define INPUT_FILE_PATH "./input.txt" - -// ! Parameters used to locate distributed performance bottlenecks. -#define SECOND 100 // Set the queue monitoring time. -// #define LESS_DIS // Reduce the number of yCSB remote data to 1 -// #define NEW_WORK_QUEUE // The workQueue data structure has been modified to perform 10,000 better than the original implementation. -// #define NO_2PC // Removing 2PC, of course, would be problematic in distributed transactions. -// #define FAKE_PROCESS // Io_thread returns as soon as it gets the request from the remote. Avoid waiting in the WORK_queue. -// #define NO_REMOTE // remove all remote txn -#define TXN_QUEUE_PERCENT 0.9 // The proportion of the transaction to take from txn_queue firstly. -// ! end of these parameters - -/***********************************************/ -// Simulation + Hardware -/***********************************************/ -#define NODE_CNT 2 -#define THREAD_CNT 4 //trans_num -#define REM_THREAD_CNT 2 -#define SEND_THREAD_CNT 2 -#define CORE_CNT 2 -// PART_CNT should be at least NODE_CNT -#define PART_CNT NODE_CNT -#define CLIENT_NODE_CNT NODE_CNT -#define CLIENT_THREAD_CNT 1 -#define CLIENT_REM_THREAD_CNT 1 -#define CLIENT_SEND_THREAD_CNT 1 -#define CLIENT_RUNTIME false - -#define LOAD_METHOD LOAD_MAX -#define LOAD_PER_SERVER 100 - -// Replication -#define REPLICA_CNT 0 -// AA (Active-Active), AP (Active-Passive) -#define REPL_TYPE AP - -// each transaction only accesses only 1 virtual partition. But the lock/ts manager and index are -// not aware of such partitioning. VIRTUAL_PART_CNT describes the request distribution and is only -// used to generate queries. For HSTORE, VIRTUAL_PART_CNT should be the same as PART_CNT. -#define VIRTUAL_PART_CNT PART_CNT -#define PAGE_SIZE 4096 -#define CL_SIZE 64 -#define CPU_FREQ 2.6 -// enable hardware migration. -#define HW_MIGRATE false - -// # of transactions to run for warmup -#define WARMUP 0 -// YCSB or TPCC or PPS or DA -#define WORKLOAD YCSB -// print the transaction latency distribution -#define PRT_LAT_DISTR false -#define STATS_ENABLE true -#define TIME_ENABLE true //STATS_ENABLE - -#define FIN_BY_TIME true -#define MAX_TXN_IN_FLIGHT 1800000 - -#define SERVER_GENERATE_QUERIES false - -/***********************************************/ -// Memory System -/***********************************************/ -// Three different memory allocation methods are supported. -// 1. default libc malloc -// 2. per-thread malloc. each thread has a private local memory -// pool -// 3. per-partition malloc. each partition has its own memory pool -// which is mapped to a unique tile on the chip. -#define MEM_ALLIGN 8 - -// [THREAD_ALLOC] -#define THREAD_ALLOC false -#define THREAD_ARENA_SIZE (1UL << 22) -#define MEM_PAD true - -// [PART_ALLOC] -#define PART_ALLOC false -#define MEM_SIZE (1UL << 30) -#define NO_FREE false - -/***********************************************/ -// Message Passing -/***********************************************/ -#define TPORT_TYPE tcp -#define TPORT_PORT 7000 -#define SET_AFFINITY true - -#define MAX_TPORT_NAME 128 -#define MSG_SIZE 128 // in bytes -#define HEADER_SIZE sizeof(uint32_t)*2 // in bits -#define MSG_TIMEOUT 5000000000UL // in ns -#define NETWORK_TEST false -#define NETWORK_DELAY_TEST false -#define NETWORK_DELAY 0UL - -#define MAX_QUEUE_LEN NODE_CNT * 2 - -#define PRIORITY_WORK_QUEUE false -#define PRIORITY PRIORITY_ACTIVE -#define MSG_SIZE_MAX 4096 -#define MSG_TIME_LIMIT 0 - -/***********************************************/ -// Concurrency Control -/***********************************************/ - -// WAIT_DIE, NO_WAIT, TIMESTAMP, MVCC, CALVIN, MAAT, SUNDIAL, SILO, BOCC, FOCC, SSI, WSI -#define ISOLATION_LEVEL SERIALIZABLE -#define CC_ALG BOCC -#define YCSB_ABORT_MODE false -#define QUEUE_CAPACITY_NEW 1000000 -// all transactions acquire tuples according to the primary key order. -#define KEY_ORDER false -// transaction roll back changes after abort -#define ROLL_BACK true -// per-row lock/ts management or central lock/ts management -#define CENTRAL_MAN false -#define BUCKET_CNT 31 -#define ABORT_PENALTY 10 * 1000000UL // in ns. -#define ABORT_PENALTY_MAX 5 * 100 * 1000000UL // in ns. -#define BACKOFF true -// [ INDEX ] -#define ENABLE_LATCH false -#define CENTRAL_INDEX false -#define CENTRAL_MANAGER false -#define INDEX_STRUCT IDX_HASH -#define BTREE_ORDER 16 - -// [TIMESTAMP] -#define TS_TWR false -#define TS_ALLOC TS_CLOCK -#define TS_BATCH_ALLOC false -#define TS_BATCH_NUM 1 -// [MVCC] -// when read/write history is longer than HIS_RECYCLE_LEN -// the history should be recycled. -#define HIS_RECYCLE_LEN 10 -#define MAX_PRE_REQ MAX_TXN_IN_FLIGHT * NODE_CNT//1024 -#define MAX_READ_REQ MAX_TXN_IN_FLIGHT * NODE_CNT//1024 -#define MIN_TS_INTVL 10 * 1000000UL // 10ms -// [OCC] -#define MAX_WRITE_SET 10 -#define PER_ROW_VALID false -// [VLL] -#define TXN_QUEUE_SIZE_LIMIT THREAD_CNT -// [CALVIN] -#define SEQ_THREAD_CNT 4 -// [SUNDIAL] -#define MAX_NUM_WAITS 4 -#define PRE_ABORT true -#define OCC_LOCK_TYPE WAIT_DIE -#define OCC_WAW_LOCK true -// [SILO] -#define VALIDATION_LOCK "no-wait" // no-wait or waiting -#define PRE_ABORT2 "true" -#define ATOMIC_WORD false -/***********************************************/ -// Logging -/***********************************************/ -#define LOG_COMMAND false -#define LOG_REDO false -#define LOGGING false -#define LOG_BUF_MAX 10 -#define LOG_BUF_TIMEOUT 10 * 1000000UL // 10ms - -/***********************************************/ -// Benchmark -/***********************************************/ -// max number of rows touched per transaction -#define MAX_ROW_PER_TXN 64 -#define QUERY_INTVL 1UL -#define MAX_TXN_PER_PART 500000 -#define FIRST_PART_LOCAL true -#define MAX_TUPLE_SIZE 1024 // in bytes -#define GEN_BY_MPR false -// ==== [YCSB] ==== -// SKEW_METHOD: -// ZIPF: use ZIPF_THETA distribution -// HOT: use ACCESS_PERC of the accesses go to DATA_PERC of the data -#define SKEW_METHOD ZIPF -#define DATA_PERC 100 -#define ACCESS_PERC 0.03 -#define INIT_PARALLELISM 8 -#define SYNTH_TABLE_SIZE 16777216 -#define ZIPF_THETA 0.3 -#define TXN_WRITE_PERC 0.0 -#define TUP_WRITE_PERC 0.0 -#define SCAN_PERC 0 -#define SCAN_LEN 20 -#define PART_PER_TXN 2 -#define PERC_MULTI_PART MPR -#define REQ_PER_QUERY 10 -#define FIELD_PER_TUPLE 10 -#define CREATE_TXN_FILE false -#define STRICT_PPT 0 -// ==== [TPCC] ==== -// For large warehouse count, the tables do not fit in memory -// small tpcc schemas shrink the table size. -#define TPCC_SMALL false -#define MAX_ITEMS_SMALL 10000 -#define CUST_PER_DIST_SMALL 2000 -#define MAX_ITEMS_NORM 100000 -#define CUST_PER_DIST_NORM 3000 -#define MAX_ITEMS_PER_TXN 15 -// Some of the transactions read the data but never use them. -// If TPCC_ACCESS_ALL == fales, then these parts of the transactions -// are not modeled. -#define TPCC_ACCESS_ALL false -#define WH_UPDATE true -#define NUM_WH PART_CNT -// % of transactions that access multiple partitions -#define MPR 1.0 -#define MPIR 0.01 -#define MPR_NEWORDER 20 // In % -enum TPCCTable { - TPCC_WAREHOUSE, - TPCC_DISTRICT, - TPCC_CUSTOMER, - TPCC_HISTORY, - TPCC_NEWORDER, - TPCC_ORDER, - TPCC_ORDERLINE, - TPCC_ITEM, - TPCC_STOCK -}; -enum TPCCTxnType { - TPCC_ALL, - TPCC_PAYMENT, - TPCC_NEW_ORDER, - TPCC_ORDER_STATUS, - TPCC_DELIVERY, - TPCC_STOCK_LEVEL -}; -enum DATxnType { - DA_READ, - DA_WRITE, - DA_COMMIT, - DA_ABORT, - DA_SCAN -}; -#define MAX_DA_TABLE_SIZE 10000 - - -extern TPCCTxnType g_tpcc_txn_type; -//#define TXN_TYPE TPCC_ALL -#define PERC_PAYMENT 0.0 -#define FIRSTNAME_MINLEN 8 -#define FIRSTNAME_LEN 16 -#define LASTNAME_LEN 16 - -#define DIST_PER_WH 10 - -// PPS (Product-Part-Supplier) -#define MAX_PPS_PARTS_PER 10 -#define MAX_PPS_PART_KEY 10000 -#define MAX_PPS_PRODUCT_KEY 1000 -#define MAX_PPS_SUPPLIER_KEY 1000 -#define MAX_PPS_PART_PER_PRODUCT 10 -#define MAX_PPS_PART_PER_SUPPLIER 10 -#define MAX_PPS_PART_PER_PRODUCT_KEY 10 -#define MAX_PPS_PART_PER_SUPPLIER_KEY 10 - -#define PERC_PPS_GETPART 0.00 -#define PERC_PPS_GETSUPPLIER 0.00 -#define PERC_PPS_GETPRODUCT 0.0 -#define PERC_PPS_GETPARTBYSUPPLIER 0.0 -#define PERC_PPS_GETPARTBYPRODUCT 0.2 -#define PERC_PPS_ORDERPRODUCT 0.6 -#define PERC_PPS_UPDATEPRODUCTPART 0.2 -#define PERC_PPS_UPDATEPART 0.0 - -enum PPSTxnType { - PPS_ALL = 0, - PPS_GETPART, - PPS_GETSUPPLIER, - PPS_GETPRODUCT, - PPS_GETPARTBYSUPPLIER, - PPS_GETPARTBYPRODUCT, - PPS_ORDERPRODUCT, - PPS_UPDATEPRODUCTPART, - PPS_UPDATEPART -}; - -/***********************************************/ -// DEBUG info -/***********************************************/ -#define WL_VERB true -#define IDX_VERB false -#define VERB_ALLOC true - -#define DEBUG_LOCK false -#define DEBUG_TIMESTAMP false -#define DEBUG_SYNTH false -#define DEBUG_ASSERT false -#define DEBUG_DISTR false -#define DEBUG_ALLOC false -#define DEBUG_RACE false -#define DEBUG_TIMELINE false -#define DEBUG_BREAKDOWN false -#define DEBUG_LATENCY false - -/***********************************************/ -// MODES -/***********************************************/ -// QRY Only do query operations, no 2PC -// TWOPC Only do 2PC, no query work -// SIMPLE Immediately send OK back to client -// NOCC Don't do CC -// NORMAL normal operation -#define MODE NORMAL_MODE - - -/***********************************************/ -// Constant -/***********************************************/ -// INDEX_STRUCT -#define IDX_HASH 1 -#define IDX_BTREE 2 -// WORKLOAD -#define YCSB 1 -#define TPCC 2 -#define PPS 3 -#define TEST 4 -#define DA 5 -// Concurrency Control Algorithm -#define NO_WAIT 1 -#define WAIT_DIE 2 -#define DL_DETECT 3 -#define TIMESTAMP 4 -#define MVCC 5 -#define HSTORE 6 -#define HSTORE_SPEC 7 -#define OCC 8 -#define VLL 9 -#define CALVIN 10 -#define MAAT 11 -#define WDL 12 - -#define SUNDIAL 14 -#define FOCC 15 -#define BOCC 16 -#define SSI 17 -#define WSI 18 -#define SILO 27 -#define CNULL 28 -// TIMESTAMP allocation method. -#define TS_MUTEX 1 -#define TS_CAS 2 -#define TS_HW 3 -#define TS_CLOCK 4 -#define LTS_CURL_CLOCK 5 -#define LTS_TCP_CLOCK 6 - -#define LTS_TCP_IP "10.77.110.147" -#define LTS_TCP_PORT 62389 -// MODES -// NORMAL < NOCC < QRY_ONLY < SETUP < SIMPLE -#define NORMAL_MODE 1 -#define NOCC_MODE 2 -#define QRY_ONLY_MODE 3 -#define SETUP_MODE 4 -#define SIMPLE_MODE 5 -// SKEW METHODS -#define ZIPF 1 -#define HOT 2 -// PRIORITY WORK QUEUE -#define PRIORITY_FCFS 1 -#define PRIORITY_ACTIVE 2 -#define PRIORITY_HOME 3 -// Replication -#define AA 1 -#define AP 2 -// Load -#define LOAD_MAX 1 -#define LOAD_RATE 2 -// Transport -#define TCP 1 -#define IPC 2 -// Isolation levels -#define SERIALIZABLE 1 -#define READ_COMMITTED 2 -#define READ_UNCOMMITTED 3 -#define NOLOCK 4 - -// Stats and timeout -#define BILLION 1000000000UL // in ns => 1 second -#define MILLION 1000000UL // in ns => 1 second -#define STAT_ARR_SIZE 1024 -#define PROG_TIMER 10 * BILLION // in s -#define BATCH_TIMER 0 -#define SEQ_BATCH_TIMER 5 * 1 * MILLION // ~5ms -- same as CALVIN paper -#define DONE_TIMER 1 * 60 * BILLION // ~1 minutes -#define WARMUP_TIMER 1 * 60 * BILLION // ~1 minutes - -#define SEED 0 -#define SHMEM_ENV false -#define ENVIRONMENT_EC2 false - -#endif diff --git a/contrib/deneva/ifconfig-debug.txt b/contrib/deneva/ifconfig-debug.txt deleted file mode 100644 index 0b44da3f..00000000 --- a/contrib/deneva/ifconfig-debug.txt +++ /dev/null @@ -1,2 +0,0 @@ -10.77.110.146 -10.77.110.146 diff --git a/contrib/deneva/jemalloc/jemalloc.h b/contrib/deneva/jemalloc/jemalloc.h deleted file mode 100644 index 76eae573..00000000 --- a/contrib/deneva/jemalloc/jemalloc.h +++ /dev/null @@ -1,367 +0,0 @@ -#ifndef JEMALLOC_H_ -#define JEMALLOC_H_ -#ifdef __cplusplus -extern "C" { -#endif - -/* Defined if __attribute__((...)) syntax is supported. */ -#define JEMALLOC_HAVE_ATTR - -/* Defined if alloc_size attribute is supported. */ -#define JEMALLOC_HAVE_ATTR_ALLOC_SIZE - -/* Defined if format(gnu_printf, ...) attribute is supported. */ -#define JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF - -/* Defined if format(printf, ...) attribute is supported. */ -#define JEMALLOC_HAVE_ATTR_FORMAT_PRINTF - -/* - * Define overrides for non-standard allocator-related functions if they are - * present on the system. - */ -#define JEMALLOC_OVERRIDE_MEMALIGN -#define JEMALLOC_OVERRIDE_VALLOC - -/* - * At least Linux omits the "const" in: - * - * size_t malloc_usable_size(const void *ptr); - * - * Match the operating system's prototype. - */ -#define JEMALLOC_USABLE_SIZE_CONST - -/* - * If defined, specify throw() for the public function prototypes when compiling - * with C++. The only justification for this is to match the prototypes that - * glibc defines. - */ -#define JEMALLOC_USE_CXX_THROW - -#ifdef _MSC_VER -# ifdef _WIN64 -# define LG_SIZEOF_PTR_WIN 3 -# else -# define LG_SIZEOF_PTR_WIN 2 -# endif -#endif - -/* sizeof(void *) == 2^LG_SIZEOF_PTR. */ -#define LG_SIZEOF_PTR 3 - -/* - * Name mangling for public symbols is controlled by --with-mangling and - * --with-jemalloc-prefix. With default settings the je_ prefix is stripped by - * these macro definitions. - */ -#ifndef JEMALLOC_NO_RENAME -# define je_malloc_conf malloc_conf -# define je_malloc_message malloc_message -# define je_malloc malloc -# define je_calloc calloc -# define je_posix_memalign posix_memalign -# define je_aligned_alloc aligned_alloc -# define je_realloc realloc -# define je_free free -# define je_mallocx mallocx -# define je_rallocx rallocx -# define je_xallocx xallocx -# define je_sallocx sallocx -# define je_dallocx dallocx -# define je_sdallocx sdallocx -# define je_nallocx nallocx -# define je_mallctl mallctl -# define je_mallctlnametomib mallctlnametomib -# define je_mallctlbymib mallctlbymib -# define je_malloc_stats_print malloc_stats_print -# define je_malloc_usable_size malloc_usable_size -# define je_memalign memalign -# define je_valloc valloc -#endif - -#include -#include -#include -#include -#include - -#define JEMALLOC_VERSION "0.0.0-0-g0000000000000000000000000000000000000000" -#define JEMALLOC_VERSION_MAJOR 0 -#define JEMALLOC_VERSION_MINOR 0 -#define JEMALLOC_VERSION_BUGFIX 0 -#define JEMALLOC_VERSION_NREV 0 -#define JEMALLOC_VERSION_GID "0000000000000000000000000000000000000000" - -# define MALLOCX_LG_ALIGN(la) ((int)(la)) -# if LG_SIZEOF_PTR == 2 -# define MALLOCX_ALIGN(a) ((int)(ffs((int)(a))-1)) -# else -# define MALLOCX_ALIGN(a) \ - ((int)(((size_t)(a) < (size_t)INT_MAX) ? ffs((int)(a)) - 1 \ - : ffs((int)(((size_t)(a)) >> 32)) + 31)) -# endif -# define MALLOCX_ZERO ((int)0x40) -/* - * Bias tcache index bits so that 0 encodes "automatic tcache management", and 1 - * encodes MALLOCX_TCACHE_NONE. - */ -# define MALLOCX_TCACHE(tc) ((int)(((tc)+2) << 8)) -# define MALLOCX_TCACHE_NONE MALLOCX_TCACHE(-1) -/* - * Bias arena index bits so that 0 encodes "use an automatically chosen arena". - */ -# define MALLOCX_ARENA(a) ((((int)(a))+1) << 20) - -#if defined(__cplusplus) && defined(JEMALLOC_USE_CXX_THROW) -# define JEMALLOC_CXX_THROW throw() -#else -# define JEMALLOC_CXX_THROW -#endif - -#if _MSC_VER -# define JEMALLOC_ATTR(s) -# define JEMALLOC_ALIGNED(s) __declspec(align(s)) -# define JEMALLOC_ALLOC_SIZE(s) -# define JEMALLOC_ALLOC_SIZE2(s1, s2) -# ifndef JEMALLOC_EXPORT -# ifdef DLLEXPORT -# define JEMALLOC_EXPORT __declspec(dllexport) -# else -# define JEMALLOC_EXPORT __declspec(dllimport) -# endif -# endif -# define JEMALLOC_FORMAT_PRINTF(s, i) -# define JEMALLOC_NOINLINE __declspec(noinline) -# ifdef __cplusplus -# define JEMALLOC_NOTHROW __declspec(nothrow) -# else -# define JEMALLOC_NOTHROW -# endif -# define JEMALLOC_SECTION(s) __declspec(allocate(s)) -# define JEMALLOC_RESTRICT_RETURN __declspec(restrict) -# if _MSC_VER >= 1900 && !defined(__EDG__) -# define JEMALLOC_ALLOCATOR __declspec(allocator) -# else -# define JEMALLOC_ALLOCATOR -# endif -#elif defined(JEMALLOC_HAVE_ATTR) -# define JEMALLOC_ATTR(s) __attribute__((s)) -# define JEMALLOC_ALIGNED(s) JEMALLOC_ATTR(aligned(s)) -# ifdef JEMALLOC_HAVE_ATTR_ALLOC_SIZE -# define JEMALLOC_ALLOC_SIZE(s) JEMALLOC_ATTR(alloc_size(s)) -# define JEMALLOC_ALLOC_SIZE2(s1, s2) JEMALLOC_ATTR(alloc_size(s1, s2)) -# else -# define JEMALLOC_ALLOC_SIZE(s) -# define JEMALLOC_ALLOC_SIZE2(s1, s2) -# endif -# ifndef JEMALLOC_EXPORT -# define JEMALLOC_EXPORT JEMALLOC_ATTR(visibility("default")) -# endif -# ifdef JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF -# define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(gnu_printf, s, i)) -# elif defined(JEMALLOC_HAVE_ATTR_FORMAT_PRINTF) -# define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(printf, s, i)) -# else -# define JEMALLOC_FORMAT_PRINTF(s, i) -# endif -# define JEMALLOC_NOINLINE JEMALLOC_ATTR(noinline) -# define JEMALLOC_NOTHROW JEMALLOC_ATTR(nothrow) -# define JEMALLOC_SECTION(s) JEMALLOC_ATTR(section(s)) -# define JEMALLOC_RESTRICT_RETURN -# define JEMALLOC_ALLOCATOR -#else -# define JEMALLOC_ATTR(s) -# define JEMALLOC_ALIGNED(s) -# define JEMALLOC_ALLOC_SIZE(s) -# define JEMALLOC_ALLOC_SIZE2(s1, s2) -# define JEMALLOC_EXPORT -# define JEMALLOC_FORMAT_PRINTF(s, i) -# define JEMALLOC_NOINLINE -# define JEMALLOC_NOTHROW -# define JEMALLOC_SECTION(s) -# define JEMALLOC_RESTRICT_RETURN -# define JEMALLOC_ALLOCATOR -#endif - -/* - * The je_ prefix on the following public symbol declarations is an artifact - * of namespace management, and should be omitted in application code unless - * JEMALLOC_NO_DEMANGLE is defined (see jemalloc_mangle.h). - */ -extern JEMALLOC_EXPORT const char *je_malloc_conf; -extern JEMALLOC_EXPORT void (*je_malloc_message)(void *cbopaque, const char *s); - -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_malloc( - size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE(1); -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_calloc( - size_t num, size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE2(1, 2); -JEMALLOC_EXPORT int JEMALLOC_NOTHROW - je_posix_memalign(void **memptr, size_t alignment, - size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(nonnull(1)); -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_aligned_alloc( - size_t alignment, size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE(2); -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_realloc( - void *ptr, size_t size) JEMALLOC_CXX_THROW JEMALLOC_ALLOC_SIZE(2); -JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_free(void *ptr) JEMALLOC_CXX_THROW; - -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_mallocx( - size_t size, int flags) JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE(1); -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_rallocx( - void *ptr, size_t size, int flags) JEMALLOC_ALLOC_SIZE(2); -JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_xallocx(void *ptr, size_t size, size_t extra, int flags); -JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_sallocx(const void *ptr, int flags) JEMALLOC_ATTR(pure); -JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_dallocx(void *ptr, int flags); -JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_sdallocx(void *ptr, size_t size, int flags); -JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_nallocx(size_t size, int flags) JEMALLOC_ATTR(pure); - -JEMALLOC_EXPORT int JEMALLOC_NOTHROW - je_mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen); -JEMALLOC_EXPORT int JEMALLOC_NOTHROW - je_mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp); -JEMALLOC_EXPORT int JEMALLOC_NOTHROW je_mallctlbymib(const size_t *mib, size_t miblen, void *oldp, - size_t *oldlenp, void *newp, size_t newlen); -JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_malloc_stats_print(void (*write_cb)(void *, const char *), - void *je_cbopaque, const char *opts); -JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW - je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr) JEMALLOC_CXX_THROW; - -#ifdef JEMALLOC_OVERRIDE_MEMALIGN -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_memalign( - size_t alignment, size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc); -#endif - -#ifdef JEMALLOC_OVERRIDE_VALLOC -JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN void JEMALLOC_NOTHROW *je_valloc( - size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc); -#endif - -/* - * void * - * chunk_alloc(void *new_addr, size_t size, size_t alignment, bool *zero, - * bool *commit, unsigned arena_ind); - */ -typedef void *(chunk_alloc_t)(void *, size_t, size_t, bool *, bool *, unsigned); - -/* - * bool - * chunk_dalloc(void *chunk, size_t size, bool committed, unsigned arena_ind); - */ -typedef bool (chunk_dalloc_t)(void *, size_t, bool, unsigned); - -/* - * bool - * chunk_commit(void *chunk, size_t size, size_t offset, size_t length, - * unsigned arena_ind); - */ -typedef bool (chunk_commit_t)(void *, size_t, size_t, size_t, unsigned); - -/* - * bool - * chunk_decommit(void *chunk, size_t size, size_t offset, size_t length, - * unsigned arena_ind); - */ -typedef bool (chunk_decommit_t)(void *, size_t, size_t, size_t, unsigned); - -/* - * bool - * chunk_purge(void *chunk, size_t size, size_t offset, size_t length, - * unsigned arena_ind); - */ -typedef bool (chunk_purge_t)(void *, size_t, size_t, size_t, unsigned); - -/* - * bool - * chunk_split(void *chunk, size_t size, size_t size_a, size_t size_b, - * bool committed, unsigned arena_ind); - */ -typedef bool (chunk_split_t)(void *, size_t, size_t, size_t, bool, unsigned); - -/* - * bool - * chunk_merge(void *chunk_a, size_t size_a, void *chunk_b, size_t size_b, - * bool committed, unsigned arena_ind); - */ -typedef bool (chunk_merge_t)(void *, size_t, void *, size_t, bool, unsigned); - -typedef struct { - chunk_alloc_t *alloc; - chunk_dalloc_t *dalloc; - chunk_commit_t *commit; - chunk_decommit_t *decommit; - chunk_purge_t *purge; - chunk_split_t *split; - chunk_merge_t *merge; -} chunk_hooks_t; - -/* - * By default application code must explicitly refer to mangled symbol names, - * so that it is possible to use jemalloc in conjunction with another allocator - * in the same application. Define JEMALLOC_MANGLE in order to cause automatic - * name mangling that matches the API prefixing that happened as a result of - * --with-mangling and/or --with-jemalloc-prefix configuration settings. - */ -#ifdef JEMALLOC_MANGLE -# ifndef JEMALLOC_NO_DEMANGLE -# define JEMALLOC_NO_DEMANGLE -# endif -# define malloc_conf je_malloc_conf -# define malloc_message je_malloc_message -# define malloc je_malloc -# define calloc je_calloc -# define posix_memalign je_posix_memalign -# define aligned_alloc je_aligned_alloc -# define realloc je_realloc -# define free je_free -# define mallocx je_mallocx -# define rallocx je_rallocx -# define xallocx je_xallocx -# define sallocx je_sallocx -# define dallocx je_dallocx -# define sdallocx je_sdallocx -# define nallocx je_nallocx -# define mallctl je_mallctl -# define mallctlnametomib je_mallctlnametomib -# define mallctlbymib je_mallctlbymib -# define malloc_stats_print je_malloc_stats_print -# define malloc_usable_size je_malloc_usable_size -# define memalign je_memalign -# define valloc je_valloc -#endif - -/* - * The je_* macros can be used as stable alternative names for the - * public jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily - * meant for use in jemalloc itself, but it can be used by application code to - * provide isolation from the name mangling specified via --with-mangling - * and/or --with-jemalloc-prefix. - */ -#ifndef JEMALLOC_NO_DEMANGLE -# undef je_malloc_conf -# undef je_malloc_message -# undef je_malloc -# undef je_calloc -# undef je_posix_memalign -# undef je_aligned_alloc -# undef je_realloc -# undef je_free -# undef je_mallocx -# undef je_rallocx -# undef je_xallocx -# undef je_sallocx -# undef je_dallocx -# undef je_sdallocx -# undef je_nallocx -# undef je_mallctl -# undef je_mallctlnametomib -# undef je_mallctlbymib -# undef je_malloc_stats_print -# undef je_malloc_usable_size -# undef je_memalign -# undef je_valloc -#endif - -#ifdef __cplusplus -} -#endif -#endif /* JEMALLOC_H_ */ diff --git a/contrib/deneva/obj/deps b/contrib/deneva/obj/deps deleted file mode 100644 index c66b2a67..00000000 --- a/contrib/deneva/obj/deps +++ /dev/null @@ -1,654 +0,0 @@ -obj/config.o: config.cpp config.h -obj/da_wl.o: benchmarks/da_wl.cpp benchmarks/da.h config.h system/query.h \ - system/global.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h storage/row.h system/txn.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/wl.h benchmarks/creator.h benchmarks/generic.h \ - benchmarks/da_const.h storage/index_btree.h storage/index_base.h \ - storage/index_hash.h system/mem_alloc.h storage/table.h system/thread.h -obj/pps_helper.o: benchmarks/pps_helper.cpp benchmarks/pps_helper.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h benchmarks/tpcc_helper.h -obj/ycsb_query.o: benchmarks/ycsb_query.cpp system/query.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h benchmarks/ycsb_query.h \ - system/helper.h system/array.h system/mem_alloc.h system/wl.h \ - benchmarks/ycsb.h system/txn.h transport/message.h system/logger.h \ - storage/table.h transport/message.h -obj/tpcc_wl.o: benchmarks/tpcc_wl.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - benchmarks/tpcc.h system/wl.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/logger.h system/array.h \ - system/query.h storage/row.h system/thread.h storage/table.h \ - storage/index_hash.h storage/index_base.h storage/index_btree.h \ - benchmarks/tpcc_helper.h system/mem_alloc.h benchmarks/tpcc_const.h -obj/da_txn.o: benchmarks/da_txn.cpp config.h benchmarks/da.h system/query.h \ - system/global.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h storage/row.h system/txn.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/wl.h benchmarks/creator.h benchmarks/generic.h \ - benchmarks/da_const.h benchmarks/da_query.h storage/index_btree.h \ - storage/index_base.h storage/index_hash.h transport/message.h \ - system/msg_queue.h system/lock_free_queue.h storage/table.h \ - system/thread.h transport/transport.h transport/nn.hpp -obj/ycsb_wl.o: benchmarks/ycsb_wl.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - benchmarks/ycsb.h system/wl.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/logger.h system/array.h \ - system/thread.h storage/table.h storage/row.h storage/index_hash.h \ - storage/index_base.h storage/index_btree.h storage/catalog.h \ - system/manager.h concurrency_control/row_lock.h \ - concurrency_control/row_ts.h concurrency_control/row_mvcc.h \ - system/mem_alloc.h system/query.h -obj/generic.o: benchmarks/generic.cpp benchmarks/generic.h -obj/tpcc_query.o: benchmarks/tpcc_query.cpp system/query.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h benchmarks/tpcc_query.h \ - system/helper.h benchmarks/tpcc.h system/wl.h system/txn.h \ - transport/message.h system/logger.h system/array.h storage/row.h \ - benchmarks/tpcc_helper.h system/mem_alloc.h storage/table.h \ - transport/message.h -obj/ycsb_txn.o: benchmarks/ycsb_txn.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - benchmarks/ycsb.h system/wl.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/logger.h system/array.h \ - benchmarks/ycsb_query.h system/query.h system/thread.h storage/table.h \ - storage/row.h storage/index_hash.h storage/index_base.h \ - storage/index_btree.h storage/catalog.h system/manager.h \ - concurrency_control/row_lock.h concurrency_control/row_ts.h \ - concurrency_control/row_mvcc.h system/mem_alloc.h system/msg_queue.h \ - system/lock_free_queue.h transport/message.h -obj/da_query_queue.o: benchmarks/da_query_queue.cpp -obj/tpcc_helper.o: benchmarks/tpcc_helper.cpp benchmarks/tpcc_helper.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h -obj/pps_query.o: benchmarks/pps_query.cpp system/query.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h benchmarks/pps_query.h system/helper.h \ - benchmarks/pps.h system/wl.h system/txn.h transport/message.h \ - system/logger.h system/array.h storage/row.h benchmarks/pps_helper.h \ - benchmarks/tpcc_helper.h system/mem_alloc.h storage/table.h \ - transport/message.h -obj/tpcc_txn.o: benchmarks/tpcc_txn.cpp benchmarks/tpcc.h system/wl.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/txn.h system/array.h system/mem_alloc.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/query.h storage/row.h benchmarks/tpcc_query.h \ - benchmarks/tpcc_helper.h system/thread.h storage/table.h \ - storage/index_hash.h storage/index_base.h storage/index_btree.h \ - benchmarks/tpcc_const.h transport/transport.h transport/nn.hpp \ - system/msg_queue.h system/lock_free_queue.h transport/message.h -obj/da_block_queue.o: benchmarks/da_block_queue.cpp \ - benchmarks/da_block_queue.h system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h -obj/pps_wl.o: benchmarks/pps_wl.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - benchmarks/pps.h system/wl.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/logger.h system/array.h \ - system/query.h storage/row.h system/thread.h storage/table.h \ - storage/index_hash.h storage/index_base.h storage/index_btree.h \ - benchmarks/pps_helper.h benchmarks/tpcc_helper.h system/mem_alloc.h -obj/creator.o: benchmarks/creator.cpp benchmarks/creator.h \ - benchmarks/generic.h -obj/pps_txn.o: benchmarks/pps_txn.cpp benchmarks/pps.h system/wl.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/txn.h system/array.h system/mem_alloc.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/query.h storage/row.h benchmarks/pps_query.h \ - benchmarks/pps_helper.h benchmarks/tpcc_helper.h system/thread.h \ - storage/table.h storage/index_hash.h storage/index_base.h \ - storage/index_btree.h transport/transport.h transport/nn.hpp \ - system/msg_queue.h system/lock_free_queue.h transport/message.h -obj/da_query.o: benchmarks/da_query.cpp system/query.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h benchmarks/da_query.h system/helper.h \ - benchmarks/da.h storage/row.h system/txn.h transport/message.h \ - system/logger.h system/array.h system/wl.h benchmarks/creator.h \ - benchmarks/generic.h system/mem_alloc.h storage/table.h \ - transport/message.h -obj/client_query.o: client/client_query.cpp client/client_query.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h system/query.h \ - system/array.h system/mem_alloc.h system/mem_alloc.h system/wl.h \ - storage/table.h benchmarks/ycsb_query.h system/array.h \ - benchmarks/tpcc_query.h benchmarks/pps_query.h benchmarks/da_query.h \ - benchmarks/da.h storage/row.h system/txn.h transport/message.h \ - system/logger.h benchmarks/creator.h benchmarks/generic.h -obj/client_txn.o: client/client_txn.cpp client/client_txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/mem_alloc.h -obj/wsi.o: concurrency_control/wsi.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/wsi.h storage/row.h \ - system/manager.h system/mem_alloc.h concurrency_control/row_wsi.h -obj/row_null.o: concurrency_control/row_null.cpp \ - concurrency_control/row_null.h concurrency_control/../storage/row.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h system/manager.h \ - system/mem_alloc.h system/txn.h system/array.h system/mem_alloc.h \ - transport/message.h system/logger.h system/array.h -obj/row_wsi.o: concurrency_control/row_wsi.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h system/manager.h \ - concurrency_control/row_wsi.h system/mem_alloc.h -obj/row_occ.o: concurrency_control/row_occ.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h \ - concurrency_control/row_occ.h system/mem_alloc.h -obj/occ.o: concurrency_control/occ.cpp concurrency_control/occ.h \ - storage/row.h system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h system/manager.h \ - system/mem_alloc.h concurrency_control/row_occ.h system/txn.h \ - system/array.h system/mem_alloc.h transport/message.h system/logger.h \ - system/array.h -obj/ssi.o: concurrency_control/ssi.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/ssi.h storage/row.h \ - system/manager.h system/mem_alloc.h concurrency_control/row_ssi.h -obj/row_ts.o: concurrency_control/row_ts.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h \ - concurrency_control/row_ts.h system/mem_alloc.h system/manager.h -obj/bocc.o: concurrency_control/bocc.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/bocc.h storage/row.h \ - system/manager.h system/mem_alloc.h concurrency_control/row_occ.h -obj/focc.o: concurrency_control/focc.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/focc.h storage/row.h \ - system/manager.h system/mem_alloc.h concurrency_control/row_occ.h -obj/maat.o: concurrency_control/maat.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/maat.h storage/row.h \ - system/manager.h system/mem_alloc.h concurrency_control/row_maat.h -obj/row_mvcc.o: concurrency_control/row_mvcc.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h system/manager.h \ - concurrency_control/row_mvcc.h system/mem_alloc.h -obj/silo.o: concurrency_control/silo.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h \ - concurrency_control/row_silo.h -obj/row_ssi.o: concurrency_control/row_ssi.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h system/manager.h \ - concurrency_control/ssi.h concurrency_control/row_ssi.h \ - system/mem_alloc.h -obj/row_lock.o: concurrency_control/row_lock.cpp system/helper.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/manager.h system/mem_alloc.h storage/row.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h concurrency_control/row_lock.h -obj/sundial.o: concurrency_control/sundial.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - system/txn.h system/array.h system/mem_alloc.h transport/message.h \ - system/logger.h system/array.h storage/row.h \ - concurrency_control/sundial.h system/manager.h system/mem_alloc.h \ - concurrency_control/row_sundial.h -obj/row_maat.o: concurrency_control/row_maat.cpp storage/row.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/helper.h system/logger.h \ - system/array.h concurrency_control/row_maat.h system/mem_alloc.h \ - system/manager.h concurrency_control/maat.h -obj/row_tictoc.o: concurrency_control/row_tictoc.cpp storage/row.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/helper.h system/logger.h \ - system/array.h concurrency_control/row_sundial.h system/mem_alloc.h \ - system/manager.h concurrency_control/sundial.h -obj/row_silo.o: concurrency_control/row_silo.cpp system/txn.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h storage/row.h \ - concurrency_control/row_silo.h system/mem_alloc.h -obj/hash.o: concurrency_control/hash.cpp concurrency_control/hash.h -obj/catalog.o: storage/catalog.cpp storage/catalog.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h -obj/index_hash.o: storage/index_hash.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h storage/index_hash.h \ - system/helper.h storage/index_base.h system/mem_alloc.h storage/row.h -obj/index_btree.o: storage/index_btree.cpp system/mem_alloc.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - storage/index_btree.h system/helper.h storage/index_base.h storage/row.h -obj/row.o: storage/row.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h storage/table.h storage/catalog.h \ - system/helper.h storage/row.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/logger.h system/array.h \ - system/mem_alloc.h concurrency_control/row_lock.h \ - concurrency_control/row_maat.h concurrency_control/row_mvcc.h \ - concurrency_control/row_occ.h concurrency_control/row_ts.h \ - concurrency_control/row_sundial.h concurrency_control/row_ssi.h \ - concurrency_control/row_wsi.h concurrency_control/row_null.h \ - concurrency_control/../storage/row.h concurrency_control/row_silo.h \ - system/manager.h -obj/table.o: storage/table.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h storage/table.h \ - storage/catalog.h storage/row.h system/mem_alloc.h -obj/message.o: transport/message.cpp system/mem_alloc.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/query.h system/array.h system/mem_alloc.h benchmarks/ycsb_query.h \ - system/helper.h system/array.h benchmarks/ycsb.h system/wl.h \ - system/txn.h transport/message.h system/logger.h benchmarks/tpcc_query.h \ - benchmarks/tpcc.h storage/row.h benchmarks/pps_query.h benchmarks/pps.h \ - transport/message.h concurrency_control/maat.h benchmarks/da.h \ - benchmarks/creator.h benchmarks/generic.h benchmarks/da_query.h \ - benchmarks/da.h concurrency_control/sundial.h -obj/msg_thread.o: transport/msg_thread.cpp transport/msg_thread.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/helper.h transport/nn.hpp \ - system/msg_queue.h system/lock_free_queue.h transport/message.h \ - system/logger.h system/array.h system/mem_alloc.h system/mem_alloc.h \ - transport/transport.h system/query.h system/array.h \ - benchmarks/ycsb_query.h benchmarks/tpcc_query.h system/pool.h -obj/transport.o: transport/transport.cpp transport/transport.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/global.h system/helper.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h transport/nn.hpp system/query.h \ - system/array.h system/mem_alloc.h system/manager.h transport/message.h \ - system/helper.h system/logger.h system/array.h benchmarks/tpcc_query.h -obj/io_thread.o: system/io_thread.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/manager.h system/thread.h system/io_thread.h transport/message.h \ - system/helper.h system/logger.h system/array.h system/global.h \ - system/helper.h system/mem_alloc.h system/query.h system/array.h \ - benchmarks/ycsb_query.h system/query.h benchmarks/tpcc_query.h \ - system/mem_alloc.h transport/transport.h transport/nn.hpp \ - transport/msg_thread.h system/msg_queue.h system/lock_free_queue.h \ - client/client_txn.h system/work_queue.h system/txn.h transport/message.h \ - benchmarks/ycsb.h system/wl.h system/txn.h -obj/manager.o: system/manager.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/manager.h storage/row.h system/txn.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h system/http.h system/libtcpforcpp.h -obj/client_thread.o: system/client_thread.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/thread.h system/client_thread.h system/query.h system/array.h \ - system/mem_alloc.h benchmarks/ycsb_query.h system/helper.h \ - system/query.h system/array.h benchmarks/tpcc_query.h \ - client/client_query.h transport/transport.h transport/nn.hpp \ - client/client_txn.h transport/msg_thread.h system/msg_queue.h \ - system/lock_free_queue.h system/wl.h transport/message.h system/logger.h -obj/thread.o: system/thread.cpp system/thread.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/manager.h transport/message.h system/helper.h system/logger.h \ - system/array.h system/global.h system/helper.h system/mem_alloc.h \ - system/msg_queue.h system/lock_free_queue.h system/query.h \ - system/array.h system/txn.h transport/message.h system/wl.h -obj/global.o: system/global.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/mem_alloc.h system/manager.h system/query.h \ - system/array.h client/client_query.h system/helper.h system/query.h \ - concurrency_control/occ.h storage/row.h concurrency_control/bocc.h \ - concurrency_control/focc.h concurrency_control/ssi.h \ - concurrency_control/wsi.h transport/transport.h transport/nn.hpp \ - system/work_queue.h system/abort_queue.h client/client_txn.h \ - concurrency_control/maat.h system/msg_queue.h system/lock_free_queue.h \ - system/sequencer.h concurrency_control/sundial.h system/http.h \ - system/libtcpforcpp.h -obj/sim_manager.o: system/sim_manager.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h -obj/log_thread.o: system/log_thread.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/thread.h system/log_thread.h -obj/txn.o: system/txn.cpp system/helper.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/global.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/helper.h system/logger.h \ - system/array.h storage/row.h system/wl.h system/query.h system/thread.h \ - concurrency_control/occ.h concurrency_control/focc.h \ - concurrency_control/bocc.h concurrency_control/row_occ.h storage/table.h \ - storage/catalog.h storage/index_btree.h storage/index_base.h \ - storage/index_hash.h concurrency_control/maat.h system/manager.h \ - transport/message.h system/msg_queue.h system/lock_free_queue.h \ - benchmarks/ycsb_query.h system/query.h benchmarks/tpcc_query.h \ - benchmarks/pps_query.h concurrency_control/sundial.h \ - concurrency_control/ssi.h concurrency_control/wsi.h -obj/msg_queue.o: system/msg_queue.cpp system/msg_queue.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/lock_free_queue.h system/mem_alloc.h system/query.h \ - system/array.h transport/message.h system/helper.h system/logger.h \ - system/array.h -obj/pool.o: system/pool.cpp system/pool.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/txn_table.h system/helper.h \ - system/logger.h system/concurrentqueue.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/global.h system/txn.h system/array.h \ - system/mem_alloc.h transport/message.h system/helper.h system/logger.h \ - system/array.h system/wl.h benchmarks/ycsb_query.h system/query.h \ - system/global.h system/helper.h system/array.h benchmarks/ycsb.h \ - system/wl.h system/txn.h benchmarks/tpcc_query.h benchmarks/pps_query.h \ - benchmarks/da.h storage/row.h benchmarks/creator.h benchmarks/generic.h \ - benchmarks/da_query.h benchmarks/da.h system/query.h system/msg_queue.h \ - system/lock_free_queue.h -obj/txn_table.o: system/txn_table.cpp system/txn_table.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/global.h system/mem_alloc.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/global.h system/helper.h system/mem_alloc.h system/query.h \ - system/array.h storage/row.h benchmarks/tpcc.h system/wl.h system/txn.h \ - system/array.h transport/message.h system/query.h \ - benchmarks/tpcc_query.h system/txn.h system/work_queue.h \ - benchmarks/ycsb.h benchmarks/ycsb_query.h -obj/abort_queue.o: system/abort_queue.cpp system/mem_alloc.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/abort_queue.h transport/message.h system/helper.h system/logger.h \ - system/array.h system/global.h system/helper.h system/mem_alloc.h \ - system/work_queue.h -obj/sequencer.o: system/sequencer.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/sequencer.h system/query.h system/array.h system/mem_alloc.h \ - benchmarks/ycsb_query.h system/helper.h system/query.h system/array.h \ - benchmarks/da_query.h benchmarks/da.h storage/row.h system/txn.h \ - system/global.h system/helper.h system/array.h transport/message.h \ - system/logger.h system/wl.h benchmarks/creator.h benchmarks/generic.h \ - benchmarks/tpcc_query.h benchmarks/pps_query.h transport/transport.h \ - transport/nn.hpp system/wl.h system/msg_queue.h system/lock_free_queue.h \ - transport/msg_thread.h system/work_queue.h transport/message.h -obj/ltsrpc.pb.o: system/ltsrpc.pb.cpp system/ltsrpc.pb.h -obj/abort_thread.o: system/abort_thread.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/thread.h system/abort_thread.h system/abort_queue.h -obj/helper.o: system/helper.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/mem_alloc.h -obj/http.o: system/http.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/manager.h system/http.h system/libtcpforcpp.h \ - system/mem_alloc.h -obj/wl.o: system/wl.cpp system/wl.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - storage/catalog.h system/helper.h storage/index_btree.h \ - storage/index_base.h storage/index_hash.h system/mem_alloc.h \ - storage/row.h storage/table.h -obj/work_queue.o: system/work_queue.cpp system/work_queue.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/mem_alloc.h system/query.h system/array.h transport/message.h \ - system/helper.h system/logger.h system/array.h client/client_query.h \ - system/query.h -obj/logger.o: system/logger.cpp system/logger.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/global.h system/work_queue.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/global.h system/helper.h system/mem_alloc.h system/mem_alloc.h -obj/calvin_thread.o: system/calvin_thread.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/manager.h system/thread.h system/calvin_thread.h system/txn.h \ - system/array.h system/mem_alloc.h transport/message.h system/helper.h \ - system/logger.h system/array.h system/wl.h system/query.h \ - benchmarks/ycsb_query.h system/query.h benchmarks/tpcc_query.h \ - transport/transport.h transport/nn.hpp transport/msg_thread.h \ - system/msg_queue.h system/lock_free_queue.h system/sequencer.h \ - transport/message.h system/work_queue.h -obj/lock_free_queue.o: system/lock_free_queue.cpp system/helper.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/lock_free_queue.h -obj/worker_thread.o: system/worker_thread.cpp system/worker_thread.h \ - system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h system/thread.h system/abort_queue.h \ - concurrency_control/maat.h storage/row.h system/manager.h \ - transport/message.h system/helper.h system/logger.h system/array.h \ - system/global.h system/helper.h system/mem_alloc.h system/msg_queue.h \ - system/lock_free_queue.h transport/msg_thread.h transport/nn.hpp \ - system/query.h system/array.h benchmarks/tpcc_query.h system/query.h \ - system/txn.h transport/message.h system/wl.h system/work_queue.h \ - benchmarks/ycsb_query.h concurrency_control/sundial.h \ - concurrency_control/wsi.h concurrency_control/ssi.h \ - concurrency_control/focc.h concurrency_control/bocc.h -obj/parser.o: system/parser.cpp system/global.h config.h statistics/stats.h \ - statistics/../system/global.h statistics/stats_array.h system/pool.h \ - system/helper.h system/concurrentqueue.h system/txn_table.h \ - system/logger.h system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h -obj/libtcpforcpp.o: system/libtcpforcpp.cpp system/libtcpforcpp.h \ - system/manager.h system/helper.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/concurrentqueue.h \ - system/txn_table.h system/logger.h system/sim_manager.h \ - benchmarks/da_block_queue.h system/global.h system/ltsrpc.pb.h -obj/main.o: system/main.cpp system/abort_thread.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/thread.h system/calvin_thread.h client/client_query.h \ - system/helper.h system/query.h system/global.h system/helper.h \ - system/array.h system/mem_alloc.h system/io_thread.h transport/message.h \ - system/logger.h system/array.h system/log_thread.h \ - concurrency_control/maat.h storage/row.h system/manager.h \ - system/msg_queue.h system/lock_free_queue.h concurrency_control/occ.h \ - benchmarks/pps.h system/wl.h system/txn.h transport/message.h \ - system/query.h system/sequencer.h system/abort_queue.h benchmarks/tpcc.h \ - transport/transport.h transport/nn.hpp system/work_queue.h \ - system/worker_thread.h benchmarks/ycsb.h benchmarks/ycsb_query.h \ - benchmarks/da.h benchmarks/creator.h benchmarks/generic.h \ - concurrency_control/ssi.h concurrency_control/wsi.h \ - concurrency_control/focc.h concurrency_control/bocc.h \ - concurrency_control/sundial.h system/http.h system/libtcpforcpp.h -obj/hash.o: system/hash.cpp system/hash.h -obj/mem_alloc.o: system/mem_alloc.cpp system/mem_alloc.h system/global.h \ - config.h statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h -obj/query.o: system/query.cpp system/query.h system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/global.h \ - system/array.h system/mem_alloc.h system/wl.h storage/table.h \ - benchmarks/ycsb_query.h system/helper.h system/query.h system/array.h \ - benchmarks/tpcc_query.h benchmarks/pps_query.h benchmarks/da_query.h \ - benchmarks/da.h storage/row.h system/txn.h system/global.h \ - system/helper.h system/array.h transport/message.h system/logger.h \ - system/wl.h benchmarks/creator.h benchmarks/generic.h -obj/stats.o: statistics/stats.cpp statistics/stats.h \ - statistics/../system/global.h config.h statistics/stats.h \ - statistics/../system/pool.h statistics/../system/global.h \ - statistics/../system/helper.h statistics/../system/concurrentqueue.h \ - statistics/../system/txn_table.h statistics/../system/logger.h \ - statistics/../system/sim_manager.h benchmarks/da_block_queue.h \ - system/global.h statistics/stats_array.h client/client_txn.h \ - system/helper.h system/mem_alloc.h system/global.h system/work_queue.h \ - system/helper.h -obj/stats_array.o: statistics/stats_array.cpp system/global.h config.h \ - statistics/stats.h statistics/../system/global.h \ - statistics/stats_array.h system/pool.h system/global.h system/helper.h \ - system/concurrentqueue.h system/txn_table.h system/logger.h \ - system/sim_manager.h benchmarks/da_block_queue.h system/helper.h \ - statistics/stats.h system/mem_alloc.h client/client_txn.h \ - system/work_queue.h diff --git a/contrib/deneva/patch b/contrib/deneva/patch deleted file mode 100644 index d507b514..00000000 --- a/contrib/deneva/patch +++ /dev/null @@ -1,123 +0,0 @@ -diff --git a/Makefile b/Makefile -index 6526488..bfd3f1b 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,19 +1,18 @@ - CC=g++ - CFLAGS=-Wall -g -gdwarf-3 -std=c++0x - #CFLAGS += -fsanitize=address -fno-omit-frame-pointer --JEMALLOC=./jemalloc-4.0.3 - NNMSG=./nanomsg-0.5-beta - - .SUFFIXES: .o .cpp .h - - SRC_DIRS = ./ ./benchmarks/ ./client/ ./concurrency_control/ ./storage/ ./transport/ ./system/ ./statistics/#./unit_tests/ --DEPS = -I. -I./benchmarks -I./client/ -I./concurrency_control -I./storage -I./transport -I./system -I./statistics -I$(JEMALLOC)/include #-I./unit_tests -+DEPS = -I. -I./benchmarks -I./client/ -I./concurrency_control -I./storage -I./transport -I./system -I./statistics #-I./unit_tests - - CFLAGS += $(DEPS) -D NOGRAPHITE=1 -Werror -Wno-sizeof-pointer-memaccess --LDFLAGS = -Wall -L. -L$(NNMSG) -L$(JEMALLOC)/lib -Wl,-rpath,$(JEMALLOC)/lib -pthread -gdwarf-3 -lrt -std=c++0x -+LDFLAGS = -Wall -L. -L$(NNMSG) -Wl,-rpath -pthread -gdwarf-3 -lrt -std=c++0x - #LDFLAGS = -Wall -L. -L$(NNMSG) -L$(JEMALLOC)/lib -Wl,-rpath,$(JEMALLOC)/lib -pthread -gdwarf-3 -lrt -std=c++11 - LDFLAGS += $(CFLAGS) --LIBS = -lnanomsg -lanl -ljemalloc -+LIBS = -lnanomsg -lanl - - DB_MAINS = ./client/client_main.cpp ./system/sequencer_main.cpp ./unit_tests/unit_main.cpp - CL_MAINS = ./system/main.cpp ./system/sequencer_main.cpp ./unit_tests/unit_main.cpp -@@ -41,10 +40,10 @@ deps:$(CPPS_DB) - -include obj/deps - - unit_test : $(OBJS_UNIT) --# $(CC) -static -o $@ $^ $(LDFLAGS) $(LIBS) -+# $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - ./obj/%.o: transport/%.cpp --# $(CC) -static -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -+# $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - ./obj/%.o: unit_tests/%.cpp - $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< -@@ -63,10 +62,10 @@ unit_test : $(OBJS_UNIT) - - - rundb : $(OBJS_DB) -- $(CC) -static -o $@ $^ $(LDFLAGS) $(LIBS) -+ $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - # $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - ./obj/%.o: transport/%.cpp -- $(CC) -static -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -+ $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - # $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - #./deps/%.d: %.cpp - # $(CC) -MM -MT $*.o -MF $@ $(CFLAGS) $< -@@ -87,10 +86,10 @@ rundb : $(OBJS_DB) - - - runcl : $(OBJS_CL) -- $(CC) -static -o $@ $^ $(LDFLAGS) $(LIBS) -+ $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - # $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) - ./obj/%.o: transport/%.cpp -- $(CC) -static -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< -+ $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - # $(CC) -c $(CFLAGS) $(INCLUDE) $(LIBS) -o $@ $< - #./deps/%.d: %.cpp - # $(CC) -MM -MT $*.o -MF $@ $(CFLAGS) $< -diff --git a/config.h b/config.h -index 3e3da75..6410412 100644 ---- a/config.h -+++ b/config.h -@@ -5,11 +5,11 @@ - /***********************************************/ - // Simulation + Hardware - /***********************************************/ --#define NODE_CNT 2 -+#define NODE_CNT 1 - #define THREAD_CNT 4 - #define REM_THREAD_CNT THREAD_CNT - #define SEND_THREAD_CNT THREAD_CNT --#define CORE_CNT 8 -+#define CORE_CNT 4 - // PART_CNT should be at least NODE_CNT - #define PART_CNT NODE_CNT - #define CLIENT_NODE_CNT NODE_CNT -diff --git a/system/mem_alloc.cpp b/system/mem_alloc.cpp -index 1a78f3f..8443303 100644 ---- a/system/mem_alloc.cpp -+++ b/system/mem_alloc.cpp -@@ -17,9 +17,9 @@ - #include "mem_alloc.h" - #include "helper.h" - #include "global.h" --#include "jemalloc/jemalloc.h" -+//#include "jemalloc/jemalloc.h" - --//#define N_MALLOC -+#define N_MALLOC - - void mem_alloc::free(void * ptr, uint64_t size) { - if (NO_FREE) {} -diff --git a/transport/transport.cpp b/transport/transport.cpp -index 83780c7..3d36323 100644 ---- a/transport/transport.cpp -+++ b/transport/transport.cpp -@@ -13,7 +13,8 @@ - See the License for the specific language governing permissions and - limitations under the License. - */ -- -+#include -+#include - #include "global.h" - #include "manager.h" - #include "transport.h" -@@ -40,6 +41,7 @@ void Transport::read_ifconfig(const char * ifaddr_file) { - printf("%ld: %s\n",cnt,ifaddr[cnt]); - cnt++; - } -+ printf("%lu %u\n", cnt, g_total_node_cnt); - assert(cnt == g_total_node_cnt); - } - - diff --git a/contrib/deneva/statistics/stats.cpp b/contrib/deneva/statistics/stats.cpp deleted file mode 100644 index 3ffa56fd..00000000 --- a/contrib/deneva/statistics/stats.cpp +++ /dev/null @@ -1,1539 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "stats.h" - -#include -#include -#include - -#include "client_txn.h" -#include "global.h" -#include "helper.h" -#include "mem_alloc.h" -#include "stats_array.h" -#include "work_queue.h" - -void Stats_thd::init(uint64_t thd_id) { - DEBUG_M("Stats_thd::init part_cnt alloc\n"); - part_cnt = (uint64_t*) mem_allocator.align_alloc(sizeof(uint64_t)*g_part_cnt); - DEBUG_M("Stats_thd::init part_acc alloc\n"); - part_acc = (uint64_t*) mem_allocator.align_alloc(sizeof(uint64_t)*g_part_cnt); - DEBUG_M("Stats_thd::init worker_process_cnt_by_type alloc\n"); - worker_process_cnt_by_type= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * NO_MSG); - DEBUG_M("Stats_thd::init worker_process_time_by_type alloc\n"); - worker_process_time_by_type= (double *) mem_allocator.align_alloc(sizeof(double) * NO_MSG); - - DEBUG_M("Stats_thd::init work_queue_wq_cnt alloc\n"); - work_queue_wq_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - DEBUG_M("Stats_thd::init work_queue_tx_cnt alloc\n"); - work_queue_tx_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - - DEBUG_M("Stats_thd::init work_queue_ewq_cnt alloc\n"); - work_queue_ewq_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - DEBUG_M("Stats_thd::init work_queue_dwq_cnt alloc\n"); - work_queue_dwq_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - - DEBUG_M("Stats_thd::init work_queue_etx_cnt alloc\n"); - work_queue_etx_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - DEBUG_M("Stats_thd::init work_queue_dtx_cnt alloc\n"); - work_queue_dtx_cnt= (uint64_t *) mem_allocator.align_alloc(sizeof(uint64_t) * SECOND); - - DEBUG_M("Stats_thd::init mtx alloc\n"); - mtx= (double *) mem_allocator.align_alloc(sizeof(double) * 40); - - //all_lat.init(g_max_txn_per_part,ArrIncr); - - client_client_latency.init(g_max_txn_per_part,ArrIncr); - last_start_commit_latency.init(g_max_txn_per_part,ArrIncr); - first_start_commit_latency.init(g_max_txn_per_part,ArrIncr); - start_abort_commit_latency.init(g_max_txn_per_part,ArrIncr); - - clear(); - -} - -void Stats_thd::clear() { - - total_runtime=0; - - // Execution - txn_cnt=0; - remote_txn_cnt=0; - local_txn_cnt=0; - local_txn_start_cnt=0; - total_txn_commit_cnt=0; - local_txn_commit_cnt=0; - remote_txn_commit_cnt=0; - total_txn_abort_cnt=0; - unique_txn_abort_cnt=0; - local_txn_abort_cnt=0; - remote_txn_abort_cnt=0; - txn_run_time=0; - multi_part_txn_cnt=0; - multi_part_txn_run_time=0; - single_part_txn_cnt=0; - single_part_txn_run_time=0; - txn_write_cnt=0; - record_write_cnt=0; - parts_touched=0; - - // Breakdown - ts_alloc_time=0; - abort_time=0; - txn_manager_time=0; - txn_index_time=0; - txn_validate_time=0; - txn_cleanup_time=0; - - trans_total_run_time=0; - trans_process_time=0; - trans_2pc_time=0; - trans_prepare_time=0; - trans_validate_time=0; - trans_finish_time=0; - trans_commit_time=0; - trans_abort_time=0; - - trans_access_lock_wait_time=0; - // trans mvcc - trans_mvcc_clear_history=0; - trans_mvcc_access=0; - - // Transaction stats - txn_total_process_time=0; - txn_process_time=0; - txn_total_local_wait_time=0; - txn_local_wait_time=0; - txn_total_remote_wait_time=0; - txn_remote_wait_time=0; - txn_total_twopc_time=0; - txn_twopc_time=0; - - // Client - txn_sent_cnt=0; - cl_send_intv=0; - - // Abort queue - abort_queue_enqueue_cnt=0; - abort_queue_dequeue_cnt=0; - abort_queue_enqueue_time=0; - abort_queue_dequeue_time=0; - abort_queue_penalty=0; - abort_queue_penalty_extra=0; - - // Work queue - work_queue_wait_time=0; - work_queue_cnt=0; - work_queue_enq_cnt=0; - work_queue_mtx_wait_time=0; - work_queue_new_cnt=0; - work_queue_new_wait_time=0; - work_queue_old_cnt=0; - work_queue_old_wait_time=0; - work_queue_enqueue_time=0; - work_queue_dequeue_time=0; - work_queue_conflict_cnt=0; - - // Worker thread - worker_idle_time=0; - worker_activate_txn_time=0; - worker_deactivate_txn_time=0; - worker_release_msg_time=0; - worker_process_time=0; - worker_process_cnt=0; - for(uint64_t i = 0; i < NO_MSG; i ++) { - worker_process_cnt_by_type[i]=0; - worker_process_time_by_type[i]=0; - } - - for(uint64_t i = 0; i < SECOND; i ++) { - work_queue_wq_cnt[i]=0; - work_queue_tx_cnt[i]=0; - work_queue_ewq_cnt[i]=0; - work_queue_dwq_cnt[i]=0; - work_queue_etx_cnt[i]=0; - work_queue_dtx_cnt[i]=0; - } - // IO - msg_queue_delay_time=0; - msg_queue_cnt=0; - msg_queue_enq_cnt=0; - msg_send_time=0; - msg_recv_time=0; - msg_recv_idle_time=0; - msg_batch_cnt=0; - msg_batch_size_msgs=0; - msg_batch_size_bytes=0; - msg_batch_size_bytes_to_server=0; - msg_batch_size_bytes_to_client=0; - msg_send_cnt=0; - msg_recv_cnt=0; - msg_unpack_time=0; - mbuf_send_intv_time=0; - msg_copy_output_time=0; - - // Concurrency control, general - cc_conflict_cnt=0; - txn_wait_cnt=0; - txn_conflict_cnt=0; - - // 2PL - twopl_already_owned_cnt=0; - twopl_owned_cnt=0; - twopl_sh_owned_cnt=0; - twopl_ex_owned_cnt=0; - twopl_sh_bypass_cnt=0; - twopl_owned_time=0; - twopl_sh_owned_time=0; - twopl_ex_owned_time=0; - twopl_diff_time=0; - twopl_wait_time=0; - twopl_getlock_cnt=0; - twopl_getlock_time=0; - twopl_release_cnt=0; - twopl_release_time=0; - - // Calvin - seq_txn_cnt=0; - seq_batch_cnt=0; - seq_full_batch_cnt=0; - seq_ack_time=0; - seq_batch_time=0; - seq_process_cnt=0; - seq_complete_cnt=0; - seq_process_time=0; - seq_prep_time=0; - seq_idle_time=0; - seq_queue_wait_time=0; - seq_queue_cnt=0; - seq_queue_enq_cnt=0; - seq_queue_enqueue_time=0; - seq_queue_dequeue_time=0; - sched_queue_wait_time=0; - sched_queue_cnt=0; - sched_queue_enq_cnt=0; - sched_queue_enqueue_time=0; - sched_queue_dequeue_time=0; - calvin_sched_time=0; - sched_idle_time=0; - sched_txn_table_time=0; - sched_epoch_cnt=0; - sched_epoch_diff=0; - - //OCC - occ_validate_time=0; - occ_cs_wait_time=0; - occ_cs_time=0; - occ_hist_validate_time=0; - occ_act_validate_time=0; - occ_hist_validate_fail_time=0; - occ_act_validate_fail_time=0; - occ_check_cnt=0; - occ_abort_check_cnt=0; - occ_ts_abort_cnt=0; - occ_finish_time=0; - - // WSI - wsi_validate_time=0; - wsi_cs_wait_time=0; - wsi_check_cnt=0; - wsi_abort_check_cnt=0; - - // MAAT - maat_validate_cnt=0; - maat_validate_time=0; - maat_cs_wait_time=0; - maat_case1_cnt=0; - maat_case2_cnt=0; - maat_case3_cnt=0; - maat_case4_cnt=0; - maat_case5_cnt=0; - maat_range=0; - maat_commit_cnt=0; - - // Logging - log_write_cnt=0; - log_write_time=0; - log_flush_cnt=0; - log_flush_time=0; - log_process_time=0; - - // Transaction Table - txn_table_new_cnt=0; - txn_table_get_cnt=0; - txn_table_release_cnt=0; - txn_table_cflt_cnt=0; - txn_table_cflt_size=0; - txn_table_get_time=0; - txn_table_release_time=0; - txn_table_min_ts_time=0; - - for(uint64_t i = 0; i < 40; i ++) { - mtx[i]=0; - } - - lat_work_queue_time=0; - lat_msg_queue_time=0; - lat_cc_block_time=0; - lat_cc_time=0; - lat_process_time=0; - lat_abort_time=0; - lat_network_time=0; - lat_other_time=0; - - lat_l_loc_work_queue_time=0; - lat_l_loc_msg_queue_time=0; - lat_l_loc_cc_block_time=0; - lat_l_loc_cc_time=0; - lat_l_loc_process_time=0; - lat_l_loc_abort_time=0; - - lat_short_work_queue_time=0; - lat_short_msg_queue_time=0; - lat_short_cc_block_time=0; - lat_short_cc_time=0; - lat_short_process_time=0; - lat_short_network_time=0; - lat_short_batch_time=0; - - lat_s_loc_work_queue_time=0; - lat_s_loc_msg_queue_time=0; - lat_s_loc_cc_block_time=0; - lat_s_loc_cc_time=0; - lat_s_loc_process_time=0; - - lat_l_rem_work_queue_time=0; - lat_l_rem_msg_queue_time=0; - lat_l_rem_cc_block_time=0; - lat_l_rem_cc_time=0; - lat_l_rem_process_time=0; - - lat_s_rem_work_queue_time=0; - lat_s_rem_msg_queue_time=0; - lat_s_rem_cc_block_time=0; - lat_s_rem_cc_time=0; - lat_s_rem_process_time=0; - - ano_2_trans_write_skew_1 = 0; - ano_2_trans_write_skew_2 = 0; - ano_3_trans_write_skew_1 = 0; - ano_3_trans_write_skew_2 = 0; - ano_2_trans_read_skew = 0; - ano_3_trans_read_skew_1 = 0; - ano_3_trans_read_skew_2 = 0; - ano_4_trans_read_skew = 0; - ano_unknown = 0; - - client_client_latency.clear(); - last_start_commit_latency.clear(); - first_start_commit_latency.clear(); - start_abort_commit_latency.clear(); -} - -void Stats_thd::print_client(FILE * outf, bool prog) { - double txn_run_avg_time = 0; - double tput = 0; - if (txn_cnt > 0) txn_run_avg_time = txn_run_time / txn_cnt; - if (total_runtime > 0) tput = txn_cnt / (total_runtime / BILLION); - fprintf(outf, - "total_runtime=%f" - ",tput=%f" - ",txn_cnt=%ld" - ",txn_sent_cnt=%ld" - ",txn_run_time=%f" - ",txn_run_avg_time=%f" - ",cl_send_intv=%f", - total_runtime / BILLION, tput, txn_cnt, txn_sent_cnt, txn_run_time / BILLION, - txn_run_avg_time / BILLION, cl_send_intv / BILLION); - // IO - double mbuf_send_intv_time_avg = 0; - double msg_unpack_time_avg = 0; - double msg_send_time_avg = 0; - double msg_recv_time_avg = 0; - double msg_batch_size_msgs_avg = 0; - double msg_batch_size_bytes_avg = 0; - double msg_queue_delay_time_avg = 0; - if (msg_queue_cnt > 0) msg_queue_delay_time_avg = msg_queue_delay_time / msg_queue_cnt; - if(msg_batch_cnt > 0) { - mbuf_send_intv_time_avg = mbuf_send_intv_time / msg_batch_cnt; - msg_batch_size_msgs_avg = msg_batch_size_msgs / msg_batch_cnt; - msg_batch_size_bytes_avg = msg_batch_size_bytes / msg_batch_cnt; - } - if(msg_recv_cnt > 0) { - msg_recv_time_avg = msg_recv_time / msg_recv_cnt; - msg_unpack_time_avg = msg_unpack_time / msg_recv_cnt; - } - if(msg_send_cnt > 0) { - msg_send_time_avg = msg_send_time / msg_send_cnt; - } - fprintf(outf, - ",msg_queue_delay_time=%f" - ",msg_queue_cnt=%ld" - ",msg_queue_enq_cnt=%ld" - ",msg_queue_delay_time_avg=%f" - ",msg_send_time=%f" - ",msg_send_time_avg=%f" - ",msg_recv_time=%f" - ",msg_recv_time_avg=%f" - ",msg_recv_idle_time=%f" - ",msg_batch_cnt=%ld" - ",msg_batch_size_msgs=%ld" - ",msg_batch_size_msgs_avg=%f" - ",msg_batch_size_bytes=%ld" - ",msg_batch_size_bytes_avg=%f" - ",msg_batch_size_bytes_to_server=%ld" - ",msg_batch_size_bytes_to_client=%ld" - ",msg_send_cnt=%ld" - ",msg_recv_cnt=%ld" - ",msg_unpack_time=%f" - ",msg_unpack_time_avg=%f" - ",mbuf_send_intv_time=%f" - ",mbuf_send_intv_time_avg=%f" - ",msg_copy_output_time=%f", - msg_queue_delay_time / BILLION, msg_queue_cnt, msg_queue_enq_cnt, - msg_queue_delay_time_avg / BILLION, msg_send_time / BILLION, msg_send_time_avg / BILLION, - msg_recv_time / BILLION, msg_recv_time_avg / BILLION, msg_recv_idle_time / BILLION, - msg_batch_cnt, msg_batch_size_msgs, msg_batch_size_msgs_avg, msg_batch_size_bytes, - msg_batch_size_bytes_avg, msg_batch_size_bytes_to_server, msg_batch_size_bytes_to_client, - msg_send_cnt, msg_recv_cnt, msg_unpack_time / BILLION, msg_unpack_time_avg / BILLION, - mbuf_send_intv_time / BILLION, mbuf_send_intv_time_avg / BILLION, - msg_copy_output_time / BILLION); - - if (!prog) { - client_client_latency.quicksort(0,client_client_latency.cnt-1); - fprintf(outf, - ",ccl0=%f" - ",ccl1=%f" - ",ccl10=%f" - ",ccl25=%f" - ",ccl50=%f" - ",ccl75=%f" - ",ccl90=%f" - ",ccl95=%f" - ",ccl96=%f" - ",ccl97=%f" - ",ccl98=%f" - ",ccl99=%f" - ",ccl100=%f", - (double)client_client_latency.get_idx(0) / BILLION, - (double)client_client_latency.get_percentile(1) / BILLION, - (double)client_client_latency.get_percentile(10) / BILLION, - (double)client_client_latency.get_percentile(25) / BILLION, - (double)client_client_latency.get_percentile(50) / BILLION, - (double)client_client_latency.get_percentile(75) / BILLION, - (double)client_client_latency.get_percentile(90) / BILLION, - (double)client_client_latency.get_percentile(95) / BILLION, - (double)client_client_latency.get_percentile(96) / BILLION, - (double)client_client_latency.get_percentile(97) / BILLION, - (double)client_client_latency.get_percentile(98) / BILLION, - (double)client_client_latency.get_percentile(99) / BILLION, - (double)client_client_latency.get_idx(client_client_latency.cnt - 1) / BILLION); - } - -} - -void Stats_thd::print(FILE * outf, bool prog) { - fprintf(outf, "total_runtime=%f", total_runtime / BILLION); - // Execution - double tput = 0; - double txn_run_avg_time = 0; - double multi_part_txn_avg_time = 0; - double single_part_txn_avg_time = 0; - double avg_parts_touched = 0; - if (total_runtime > 0) tput = txn_cnt / (total_runtime / BILLION); - if(txn_cnt > 0) { - txn_run_avg_time = txn_run_time / txn_cnt; - avg_parts_touched = ((double)parts_touched) / txn_cnt; - } - if(multi_part_txn_cnt > 0) - multi_part_txn_avg_time = multi_part_txn_run_time / multi_part_txn_cnt; - if(single_part_txn_cnt > 0) - single_part_txn_avg_time = single_part_txn_run_time / single_part_txn_cnt; - fprintf(outf, - ",tput=%f" - ",txn_cnt=%ld" - ",remote_txn_cnt=%ld" - ",local_txn_cnt=%ld" - ",local_txn_start_cnt=%ld" - ",total_txn_commit_cnt=%ld" - ",local_txn_commit_cnt=%ld" - ",remote_txn_commit_cnt=%ld" - ",total_txn_abort_cnt=%ld" - ",positive_txn_abort_cnt=%ld" - ",unique_txn_abort_cnt=%ld" - ",local_txn_abort_cnt=%ld" - ",remote_txn_abort_cnt=%ld" - ",txn_run_time=%f" - ",txn_run_avg_time=%f" - ",multi_part_txn_cnt=%ld" - ",multi_part_txn_run_time=%f" - ",multi_part_txn_avg_time=%f" - ",single_part_txn_cnt=%ld" - ",single_part_txn_run_time=%f" - ",single_part_txn_avg_time=%f" - ",txn_write_cnt=%ld" - ",record_write_cnt=%ld" - ",parts_touched=%ld" - ",avg_parts_touched=%f", - tput, txn_cnt, remote_txn_cnt, local_txn_cnt, local_txn_start_cnt, total_txn_commit_cnt, - local_txn_commit_cnt, remote_txn_commit_cnt, total_txn_abort_cnt,positive_txn_abort_cnt, unique_txn_abort_cnt, - local_txn_abort_cnt, remote_txn_abort_cnt, txn_run_time / BILLION, - txn_run_avg_time / BILLION, multi_part_txn_cnt, multi_part_txn_run_time / BILLION, - multi_part_txn_avg_time / BILLION, single_part_txn_cnt, - single_part_txn_run_time / BILLION, single_part_txn_avg_time / BILLION, txn_write_cnt, - record_write_cnt, parts_touched, avg_parts_touched); - - // Breakdown - fprintf(outf, - ",ts_alloc_time=%f" - ",abort_time=%f" - ",txn_manager_time=%f" - ",txn_index_time=%f" - ",txn_validate_time=%f" - ",txn_cleanup_time=%f", - ts_alloc_time / BILLION, abort_time / BILLION, txn_manager_time / BILLION, - txn_index_time / BILLION, txn_validate_time / BILLION, txn_cleanup_time / BILLION); - // trans - fprintf(outf, - ",trans_total_run_time=%f" - ",trans_process_time=%f" - ",trans_2pc_time=%f" - ",trans_prepare_time=%f" - ",trans_validate_time=%f" - ",trans_finish_time=%f" - ",trans_commit_time=%f" - ",trans_abort_time=%f" - ",trans_access_lock_wait_time=%f" - ",trans_mvcc_clear_history=%f" - ",trans_mvcc_access=%f", - trans_total_run_time / BILLION, trans_process_time / BILLION, trans_2pc_time / BILLION, - trans_prepare_time / BILLION, trans_validate_time / BILLION, trans_finish_time / BILLION, - trans_commit_time / BILLION, trans_abort_time / BILLION, trans_access_lock_wait_time / BILLION, - trans_mvcc_clear_history / BILLION, trans_mvcc_access / BILLION); - - - // Transaction stats - double txn_total_process_time_avg=0; - double txn_process_time_avg=0; - double txn_total_local_wait_time_avg=0; - double txn_local_wait_time_avg=0; - double txn_total_remote_wait_time_avg=0; - double txn_remote_wait_time_avg=0; - double txn_total_twopc_time_avg=0; - double txn_twopc_time_avg=0; - if(local_txn_commit_cnt > 0) { - txn_total_process_time_avg = txn_total_process_time / local_txn_commit_cnt; - txn_process_time_avg = txn_process_time / local_txn_commit_cnt; - txn_total_local_wait_time_avg = txn_total_local_wait_time / local_txn_commit_cnt; - txn_local_wait_time_avg = txn_local_wait_time / local_txn_commit_cnt; - txn_total_remote_wait_time_avg = txn_total_remote_wait_time / local_txn_commit_cnt; - txn_remote_wait_time_avg = txn_remote_wait_time / local_txn_commit_cnt; - txn_total_twopc_time_avg = txn_total_twopc_time / local_txn_commit_cnt; - txn_twopc_time_avg = txn_twopc_time / local_txn_commit_cnt; - } - fprintf(outf, - ",txn_total_process_time=%f" - ",txn_process_time=%f" - ",txn_total_local_wait_time=%f" - ",txn_local_wait_time=%f" - ",txn_total_remote_wait_time=%f" - ",txn_remote_wait_time=%f" - ",txn_total_twopc_time=%f" - ",txn_twopc_time=%f" - ",txn_total_process_time_avg=%f" - ",txn_process_time_avg=%f" - ",txn_total_local_wait_time_avg=%f" - ",txn_local_wait_time_avg=%f" - ",txn_total_remote_wait_time_avg=%f" - ",txn_remote_wait_time_avg=%f" - ",txn_total_twopc_time_avg=%f" - ",txn_twopc_time_avg=%f", - txn_total_process_time / BILLION, txn_process_time / BILLION, - txn_total_local_wait_time / BILLION, txn_local_wait_time / BILLION, - txn_total_remote_wait_time / BILLION, txn_remote_wait_time / BILLION, - txn_total_twopc_time / BILLION, txn_twopc_time / BILLION, - txn_total_process_time_avg / BILLION, txn_process_time_avg / BILLION, - txn_total_local_wait_time_avg / BILLION, txn_local_wait_time_avg / BILLION, - txn_total_remote_wait_time_avg / BILLION, txn_remote_wait_time_avg / BILLION, - txn_total_twopc_time_avg / BILLION, txn_twopc_time_avg / BILLION); - - // Abort queue - double abort_queue_penalty_avg = 0; - double abort_queue_penalty_extra_avg = 0; - if(abort_queue_enqueue_cnt > 0) - abort_queue_penalty_extra_avg = abort_queue_penalty_extra / abort_queue_enqueue_cnt; - if(abort_queue_dequeue_cnt > 0) - abort_queue_penalty_avg = abort_queue_penalty / abort_queue_enqueue_cnt; - fprintf(outf, - ",abort_queue_enqueue_cnt=%ld" - ",abort_queue_dequeue_cnt=%ld" - ",abort_queue_enqueue_time=%f" - ",abort_queue_dequeue_time=%f" - ",abort_queue_penalty=%f" - ",abort_queue_penalty_extra=%f" - ",abort_queue_penalty_avg=%f" - ",abort_queue_penalty_extra_avg=%f" - // Abort queue - , - abort_queue_enqueue_cnt, abort_queue_dequeue_cnt, abort_queue_enqueue_time / BILLION, - abort_queue_dequeue_time / BILLION, abort_queue_penalty / BILLION, - abort_queue_penalty_extra / BILLION, abort_queue_penalty_avg / BILLION, - abort_queue_penalty_extra_avg / BILLION); - - double work_queue_wait_avg_time = 0; - double work_queue_mtx_wait_avg = 0; - double work_queue_new_wait_avg_time = 0; - double work_queue_old_wait_avg_time = 0; - if(work_queue_cnt > 0) { - work_queue_wait_avg_time = work_queue_wait_time / work_queue_cnt; - work_queue_mtx_wait_avg = work_queue_mtx_wait_time / work_queue_cnt; - } - if(work_queue_new_cnt > 0) - work_queue_new_wait_avg_time = work_queue_new_wait_time / work_queue_new_cnt; - if(work_queue_old_cnt > 0) - work_queue_old_wait_avg_time = work_queue_old_wait_time / work_queue_old_cnt; - // Work queue - fprintf(outf, - ",work_queue_wait_time=%f" - ",work_queue_cnt=%ld" - ",work_queue_enq_cnt=%ld" - ",work_queue_wait_avg_time=%f" - ",work_queue_mtx_wait_time=%f" - ",work_queue_mtx_wait_avg=%f" - ",work_queue_new_cnt=%ld" - ",work_queue_new_wait_time=%f" - ",work_queue_new_wait_avg_time=%f" - ",work_queue_old_cnt=%ld" - ",work_queue_old_wait_time=%f" - ",work_queue_old_wait_avg_time=%f" - ",work_queue_enqueue_time=%f" - ",work_queue_dequeue_time=%f" - ",work_queue_conflict_cnt=%ld", - work_queue_wait_time / BILLION, work_queue_cnt, work_queue_enq_cnt, - work_queue_wait_avg_time / BILLION, work_queue_mtx_wait_time / BILLION, - work_queue_mtx_wait_avg / BILLION, work_queue_new_cnt, work_queue_new_wait_time / BILLION, - work_queue_new_wait_avg_time / BILLION, work_queue_old_cnt, - work_queue_old_wait_time / BILLION, work_queue_old_wait_avg_time / BILLION, - work_queue_enqueue_time / BILLION, work_queue_dequeue_time / BILLION, - work_queue_conflict_cnt); - - // Worker thread - double worker_process_avg_time = 0; - if (worker_process_cnt > 0) worker_process_avg_time = worker_process_time / worker_process_cnt; - fprintf(outf, - ",worker_idle_time=%f" - ",worker_activate_txn_time=%f" - ",worker_deactivate_txn_time=%f" - ",worker_release_msg_time=%f" - ",worker_process_time=%f" - ",worker_process_cnt=%ld" - ",worker_process_avg_time=%f", - worker_idle_time / BILLION, worker_activate_txn_time / BILLION, - worker_deactivate_txn_time / BILLION, worker_release_msg_time / BILLION, - worker_process_time / BILLION, worker_process_cnt, worker_process_avg_time / BILLION); - for(uint64_t i = 0; i < NO_MSG; i ++) { - fprintf(outf, - ",proc_cnt_type%ld=%ld" - ",proc_time_type%ld=%f", - i, worker_process_cnt_by_type[i], i, worker_process_time_by_type[i] / BILLION); - } - - for(uint64_t i = 0; i < SECOND; i ++) { - fprintf(outf, - ",work_queue_wq_cnt%ld=%ld" - ",work_queue_tx_cnt%ld=%ld" - ,i - ,work_queue_wq_cnt[i] - ,i - ,work_queue_tx_cnt[i] - ); - } - - for(uint64_t i = 0; i < SECOND; i ++) { - fprintf(outf, - ",work_queue_ewq_cnt%ld=%ld" - ",work_queue_dwq_cnt%ld=%ld" - ,i - ,work_queue_ewq_cnt[i] - ,i - ,work_queue_dwq_cnt[i] - ); - } - - for(uint64_t i = 0; i < SECOND; i ++) { - fprintf(outf, - ",work_queue_etx_cnt%ld=%ld" - ",work_queue_dtx_cnt%ld=%ld" - ,i - ,work_queue_etx_cnt[i] - ,i - ,work_queue_dtx_cnt[i] - ); - } - - // IO - double mbuf_send_intv_time_avg = 0; - double msg_unpack_time_avg = 0; - double msg_send_time_avg = 0; - double msg_recv_time_avg = 0; - double msg_batch_size_msgs_avg = 0; - double msg_batch_size_bytes_avg = 0; - double msg_queue_delay_time_avg = 0; - if (msg_queue_cnt > 0) msg_queue_delay_time_avg = msg_queue_delay_time / msg_queue_cnt; - if(msg_batch_cnt > 0) { - mbuf_send_intv_time_avg = mbuf_send_intv_time / msg_batch_cnt; - msg_batch_size_msgs_avg = msg_batch_size_msgs / msg_batch_cnt; - msg_batch_size_bytes_avg = msg_batch_size_bytes / msg_batch_cnt; - } - if(msg_recv_cnt > 0) { - msg_recv_time_avg = msg_recv_time / msg_recv_cnt; - msg_unpack_time_avg = msg_unpack_time / msg_recv_cnt; - } - if(msg_send_cnt > 0) { - msg_send_time_avg = msg_send_time / msg_send_cnt; - } - fprintf(outf, - ",msg_queue_delay_time=%f" - ",msg_queue_cnt=%ld" - ",msg_queue_enq_cnt=%ld" - ",msg_queue_delay_time_avg=%f" - ",msg_send_time=%f" - ",msg_send_time_avg=%f" - ",msg_recv_time=%f" - ",msg_recv_time_avg=%f" - ",msg_recv_idle_time=%f" - ",msg_batch_cnt=%ld" - ",msg_batch_size_msgs=%ld" - ",msg_batch_size_msgs_avg=%f" - ",msg_batch_size_bytes=%ld" - ",msg_batch_size_bytes_avg=%f" - ",msg_batch_size_bytes_to_server=%ld" - ",msg_batch_size_bytes_to_client=%ld" - ",msg_send_cnt=%ld" - ",msg_recv_cnt=%ld" - ",msg_unpack_time=%f" - ",msg_unpack_time_avg=%f" - ",mbuf_send_intv_time=%f" - ",mbuf_send_intv_time_avg=%f" - ",msg_copy_output_time=%f", - msg_queue_delay_time / BILLION, msg_queue_cnt, msg_queue_enq_cnt, - msg_queue_delay_time_avg / BILLION, msg_send_time / BILLION, msg_send_time_avg / BILLION, - msg_recv_time / BILLION, msg_recv_time_avg / BILLION, msg_recv_idle_time / BILLION, - msg_batch_cnt, msg_batch_size_msgs, msg_batch_size_msgs_avg, msg_batch_size_bytes, - msg_batch_size_bytes_avg, msg_batch_size_bytes_to_server, msg_batch_size_bytes_to_client, - msg_send_cnt, msg_recv_cnt, msg_unpack_time / BILLION, msg_unpack_time_avg / BILLION, - mbuf_send_intv_time / BILLION, mbuf_send_intv_time_avg / BILLION, - msg_copy_output_time / BILLION); - - // Concurrency control, general - fprintf(outf, - ",cc_conflict_cnt=%ld" - ",txn_wait_cnt=%ld" - ",txn_conflict_cnt=%ld", - cc_conflict_cnt, txn_wait_cnt, txn_conflict_cnt); - - // 2PL - double twopl_sh_owned_avg_time = 0; - if (twopl_sh_owned_cnt > 0) twopl_sh_owned_avg_time = twopl_sh_owned_time / twopl_sh_owned_cnt; - double twopl_ex_owned_avg_time = 0; - if (twopl_ex_owned_cnt > 0) twopl_ex_owned_avg_time = twopl_ex_owned_time / twopl_ex_owned_cnt; - fprintf(outf, - ",twopl_already_owned_cnt=%ld" - ",twopl_owned_cnt=%ld" - ",twopl_sh_owned_cnt=%ld" - ",twopl_ex_owned_cnt=%ld" - ",twopl_sh_bypass_cnt=%ld" - ",twopl_owned_time=%f" - ",twopl_sh_owned_time=%f" - ",twopl_ex_owned_time=%f" - ",twopl_sh_owned_avg_time=%f" - ",twopl_ex_owned_avg_time=%f" - ",twopl_diff_time=%f" - ",twopl_wait_time=%f" - ",twopl_getlock_cnt=%ld" - ",twopl_getlock_time=%f" - ",twopl_release_cnt=%ld" - ",twopl_release_time=%f", - twopl_already_owned_cnt, twopl_owned_cnt, twopl_sh_owned_cnt, twopl_ex_owned_cnt, - twopl_sh_bypass_cnt, twopl_owned_time / BILLION, twopl_sh_owned_time / BILLION, - twopl_ex_owned_time / BILLION, twopl_sh_owned_avg_time / BILLION, - twopl_ex_owned_avg_time / BILLION, twopl_diff_time / BILLION, twopl_wait_time / BILLION, - twopl_getlock_cnt, twopl_getlock_time / BILLION, twopl_release_cnt, - twopl_release_time / BILLION); - - // Calvin - double seq_queue_wait_avg_time = 0; - if (seq_queue_cnt > 0) seq_queue_wait_avg_time = seq_queue_wait_time / seq_queue_cnt; - double sched_queue_wait_avg_time = 0; - if (sched_queue_cnt > 0) sched_queue_wait_avg_time = sched_queue_wait_time / sched_queue_cnt; - fprintf(outf, - ",seq_txn_cnt=%ld" - ",seq_batch_cnt=%ld" - ",seq_full_batch_cnt=%ld" - ",seq_ack_time=%f" - ",seq_batch_time=%f" - ",seq_process_cnt=%ld" - ",seq_complete_cnt=%ld" - ",seq_process_time=%f" - ",seq_prep_time=%f" - ",seq_idle_time=%f" - ",seq_queue_wait_time=%f" - ",seq_queue_cnt=%ld" - ",seq_queue_enq_cnt=%ld" - ",seq_queue_wait_avg_time=%f" - ",seq_queue_enqueue_time=%f" - ",seq_queue_dequeue_time=%f" - ",sched_queue_wait_time=%f" - ",sched_queue_cnt=%ld" - ",sched_queue_enq_cnt=%ld" - ",sched_queue_wait_avg_time=%f" - ",sched_queue_enqueue_time=%f" - ",sched_queue_dequeue_time=%f" - ",calvin_sched_time=%f" - ",sched_idle_time=%f" - ",sched_txn_table_time=%f" - ",sched_epoch_cnt=%ld" - ",sched_epoch_diff=%f", - seq_txn_cnt, seq_batch_cnt, seq_full_batch_cnt, seq_ack_time / BILLION, - seq_batch_time / BILLION, seq_process_cnt, seq_complete_cnt, seq_process_time / BILLION, - seq_prep_time / BILLION, seq_idle_time / BILLION, seq_queue_wait_time / BILLION, - seq_queue_cnt, seq_queue_enq_cnt, seq_queue_wait_avg_time / BILLION, - seq_queue_enqueue_time / BILLION, seq_queue_dequeue_time / BILLION, - sched_queue_wait_time / BILLION, sched_queue_cnt, sched_queue_enq_cnt, - sched_queue_wait_avg_time / BILLION, sched_queue_enqueue_time / BILLION, - sched_queue_dequeue_time / BILLION, calvin_sched_time / BILLION, - sched_idle_time / BILLION, sched_txn_table_time / BILLION, sched_epoch_cnt, - sched_epoch_diff / BILLION); - - //OCC - fprintf(outf, - ",occ_validate_time=%f" - ",occ_cs_wait_time=%f" - ",occ_cs_time=%f" - ",occ_hist_validate_time=%f" - ",occ_act_validate_time=%f" - ",occ_hist_validate_fail_time=%f" - ",occ_act_validate_fail_time=%f" - ",occ_check_cnt=%ld" - ",occ_abort_check_cnt=%ld" - ",occ_ts_abort_cnt=%ld" - ",occ_finish_time=%f", - occ_validate_time / BILLION, occ_cs_wait_time / BILLION, occ_cs_time / BILLION, - occ_hist_validate_time / BILLION, occ_act_validate_time / BILLION, - occ_hist_validate_fail_time / BILLION, occ_act_validate_fail_time / BILLION, - occ_check_cnt, occ_abort_check_cnt, occ_ts_abort_cnt, occ_finish_time / BILLION); - - //MAAT - double maat_range_avg = 0; - double maat_validate_avg = 0; - double maat_cs_wait_avg = 0; - uint64_t maat_commit_avg = 0; - if (maat_commit_cnt > 0) maat_range_avg = maat_range / maat_commit_cnt; - if(maat_validate_cnt > 0) { - maat_validate_avg = maat_validate_time / maat_validate_cnt; - maat_cs_wait_avg = maat_cs_wait_time / maat_validate_cnt; - maat_commit_avg = maat_commit_cnt / maat_validate_cnt; - } - fprintf(outf, - ",maat_validate_cnt=%ld" - ",maat_validate_time=%f" - ",maat_validate_avg=%f" - ",maat_cs_wait_time=%f" - ",maat_cs_wait_avg=%f" - ",maat_case1_cnt=%ld" - ",maat_case2_cnt=%ld" - ",maat_case3_cnt=%ld" - ",maat_case4_cnt=%ld" - ",maat_case5_cnt=%ld" - ",maat_range=%f" - ",maat_commit_cnt=%ld" - ",maat_commit_avg=%ld" - ",maat_range_avg=%f", - maat_validate_cnt, maat_validate_time / BILLION, maat_validate_avg / BILLION, - maat_cs_wait_time / BILLION, maat_cs_wait_avg / BILLION, maat_case1_cnt, maat_case2_cnt, - maat_case3_cnt, maat_case4_cnt, maat_case5_cnt, maat_range / BILLION, maat_commit_cnt, - maat_commit_avg, maat_range_avg); - - - // Logging - double log_write_avg_time = 0; - if (log_write_cnt > 0) log_write_avg_time = log_write_time / log_write_cnt; - double log_flush_avg_time = 0; - if (log_flush_cnt > 0) log_flush_avg_time = log_flush_time / log_flush_cnt; - fprintf(outf, - ",log_write_cnt=%ld" - ",log_write_time=%f" - ",log_write_avg_time=%f" - ",log_flush_cnt=%ld" - ",log_flush_time=%f" - ",log_flush_avg_time=%f" - ",log_process_time=%f", - log_write_cnt, log_write_time / BILLION, log_write_avg_time / BILLION, log_flush_cnt, - log_flush_time / BILLION, log_flush_avg_time / BILLION, log_process_time / BILLION); - - // Transaction Table - double txn_table_get_avg_time = 0; - if (txn_table_get_cnt > 0) txn_table_get_avg_time = txn_table_get_time / txn_table_get_cnt; - double txn_table_release_avg_time = 0; - if(txn_table_release_cnt > 0) - txn_table_release_avg_time = txn_table_release_time / txn_table_release_cnt; - fprintf(outf, - ",txn_table_new_cnt=%ld" - ",txn_table_get_cnt=%ld" - ",txn_table_release_cnt=%ld" - ",txn_table_cflt_cnt=%ld" - ",txn_table_cflt_size=%ld" - ",txn_table_get_time=%f" - ",txn_table_release_time=%f" - ",txn_table_min_ts_time=%f" - ",txn_table_get_avg_time=%f" - ",txn_table_release_avg_time=%f" - // Transaction Table - , - txn_table_new_cnt, txn_table_get_cnt, txn_table_release_cnt, txn_table_cflt_cnt, - txn_table_cflt_size, txn_table_get_time / BILLION, txn_table_release_time / BILLION, - txn_table_min_ts_time / BILLION, txn_table_get_avg_time / BILLION, - txn_table_release_avg_time / BILLION); - - for(uint64_t i = 0; i < 40; i ++) { - fprintf(outf, ",mtx%ld=%f", i, mtx[i] / BILLION); - } - fprintf(outf, - ",lat_work_queue_time=%f" - ",lat_msg_queue_time=%f" - ",lat_cc_block_time=%f" - ",lat_cc_time=%f" - ",lat_process_time=%f" - ",lat_abort_time=%f" - ",lat_network_time=%f" - ",lat_other_time=%f" - - ",lat_l_loc_work_queue_time=%f" - ",lat_l_loc_msg_queue_time=%f" - ",lat_l_loc_cc_block_time=%f" - ",lat_l_loc_cc_time=%f" - ",lat_l_loc_process_time=%f" - ",lat_l_loc_abort_time=%f" - - ",lat_short_work_queue_time=%f" - ",lat_short_msg_queue_time=%f" - ",lat_short_cc_block_time=%f" - ",lat_short_cc_time=%f" - ",lat_short_process_time=%f" - ",lat_short_network_time=%f" - ",lat_short_batch_time=%f" - - ",lat_s_loc_work_queue_time=%f" - ",lat_s_loc_msg_queue_time=%f" - ",lat_s_loc_cc_block_time=%f" - ",lat_s_loc_cc_time=%f" - ",lat_s_loc_process_time=%f" - - ",lat_l_rem_work_queue_time=%f" - ",lat_l_rem_msg_queue_time=%f" - ",lat_l_rem_cc_block_time=%f" - ",lat_l_rem_cc_time=%f" - ",lat_l_rem_process_time=%f" - ",lat_s_rem_work_queue_time=%f" - ",lat_s_rem_msg_queue_time=%f" - ",lat_s_rem_cc_block_time=%f" - ",lat_s_rem_cc_time=%f" - ",lat_s_rem_process_time=%f", - lat_work_queue_time / BILLION, lat_msg_queue_time / BILLION, lat_cc_block_time / BILLION, - lat_cc_time / BILLION, lat_process_time / BILLION, lat_abort_time / BILLION, - lat_network_time / BILLION, lat_other_time / BILLION, lat_l_loc_work_queue_time / BILLION, - lat_l_loc_msg_queue_time / BILLION, lat_l_loc_cc_block_time / BILLION, - lat_l_loc_cc_time / BILLION, lat_l_loc_process_time / BILLION, - lat_l_loc_abort_time / BILLION, lat_short_work_queue_time / BILLION, - lat_short_msg_queue_time / BILLION, lat_short_cc_block_time / BILLION, - lat_short_cc_time / BILLION, lat_short_process_time / BILLION, - lat_short_network_time / BILLION, lat_short_batch_time / BILLION, - lat_s_loc_work_queue_time / BILLION, lat_s_loc_msg_queue_time / BILLION, - lat_s_loc_cc_block_time / BILLION, lat_s_loc_cc_time / BILLION, - lat_s_loc_process_time / BILLION, lat_l_rem_work_queue_time / BILLION, - lat_l_rem_msg_queue_time / BILLION, lat_l_rem_cc_block_time / BILLION, - lat_l_rem_cc_time / BILLION, lat_l_rem_process_time / BILLION, - lat_s_rem_work_queue_time / BILLION, lat_s_rem_msg_queue_time / BILLION, - lat_s_rem_cc_block_time / BILLION, lat_s_rem_cc_time / BILLION, - lat_s_rem_process_time / BILLION); - fprintf(outf, - ",ano_2_trans_write_skew_1=%ld" - ",ano_2_trans_write_skew_2=%ld" - ",ano_3_trans_write_skew_1=%ld" - ",ano_3_trans_write_skew_2=%ld" - ",ano_2_trans_read_skew=%ld" - ",ano_3_trans_read_skew_1=%ld" - ",ano_3_trans_read_skew_2=%ld" - ",ano_4_trans_read_skew=%ld" - ",ano_unknown=%ld", - ano_2_trans_write_skew_1, ano_2_trans_write_skew_2, ano_3_trans_write_skew_1, - ano_3_trans_write_skew_2, ano_2_trans_read_skew, ano_3_trans_read_skew_1, - ano_3_trans_read_skew_2, ano_4_trans_read_skew, ano_unknown); - - if (!prog) { - last_start_commit_latency.quicksort(0,last_start_commit_latency.cnt-1); - first_start_commit_latency.quicksort(0,first_start_commit_latency.cnt-1); - start_abort_commit_latency.quicksort(0,start_abort_commit_latency.cnt-1); - - fprintf( - outf, - ",fscl0=%f" - ",fscl1=%f" - ",fscl10=%f" - ",fscl25=%f" - ",fscl50=%f" - ",fscl75=%f" - ",fscl90=%f" - ",fscl95=%f" - ",fscl96=%f" - ",fscl97=%f" - ",fscl98=%f" - ",fscl99=%f" - ",fscl100=%f" - ",fscl_avg=%f" - ",fscl_cnt=%ld", - (double)first_start_commit_latency.get_idx(0) / BILLION, - (double)first_start_commit_latency.get_percentile(1) / BILLION, - (double)first_start_commit_latency.get_percentile(10) / BILLION, - (double)first_start_commit_latency.get_percentile(25) / BILLION, - (double)first_start_commit_latency.get_percentile(50) / BILLION, - (double)first_start_commit_latency.get_percentile(75) / BILLION, - (double)first_start_commit_latency.get_percentile(90) / BILLION, - (double)first_start_commit_latency.get_percentile(95) / BILLION, - (double)first_start_commit_latency.get_percentile(96) / BILLION, - (double)first_start_commit_latency.get_percentile(97) / BILLION, - (double)first_start_commit_latency.get_percentile(98) / BILLION, - (double)first_start_commit_latency.get_percentile(99) / BILLION, - (double)first_start_commit_latency.get_idx(first_start_commit_latency.cnt - 1) / BILLION, - (double)first_start_commit_latency.get_avg() / BILLION, first_start_commit_latency.cnt); - - fprintf(outf, - ",lscl0=%f" - ",lscl1=%f" - ",lscl10=%f" - ",lscl25=%f" - ",lscl50=%f" - ",lscl75=%f" - ",lscl90=%f" - ",lscl95=%f" - ",lscl96=%f" - ",lscl97=%f" - ",lscl98=%f" - ",lscl99=%f" - ",lscl100=%f" - ",lscl_avg=%f" - ",lscl_cnt=%ld", - (double)last_start_commit_latency.get_idx(0) / BILLION, - (double)last_start_commit_latency.get_percentile(1) / BILLION, - (double)last_start_commit_latency.get_percentile(10) / BILLION, - (double)last_start_commit_latency.get_percentile(25) / BILLION, - (double)last_start_commit_latency.get_percentile(50) / BILLION, - (double)last_start_commit_latency.get_percentile(75) / BILLION, - (double)last_start_commit_latency.get_percentile(90) / BILLION, - (double)last_start_commit_latency.get_percentile(95) / BILLION, - (double)last_start_commit_latency.get_percentile(96) / BILLION, - (double)last_start_commit_latency.get_percentile(97) / BILLION, - (double)last_start_commit_latency.get_percentile(98) / BILLION, - (double)last_start_commit_latency.get_percentile(99) / BILLION, - (double)last_start_commit_latency.get_idx(last_start_commit_latency.cnt - 1) / BILLION, - (double)last_start_commit_latency.get_avg() / BILLION, last_start_commit_latency.cnt); - - fprintf( - outf, - ",sacl0=%f" - ",sacl1=%f" - ",sacl10=%f" - ",sacl25=%f" - ",sacl50=%f" - ",sacl75=%f" - ",sacl90=%f" - ",sacl95=%f" - ",sacl96=%f" - ",sacl97=%f" - ",sacl98=%f" - ",sacl99=%f" - ",sacl100=%f" - ",sacl_avg=%f" - ",sacl_cnt=%ld", - (double)start_abort_commit_latency.get_idx(0) / BILLION, - (double)start_abort_commit_latency.get_percentile(1) / BILLION, - (double)start_abort_commit_latency.get_percentile(10) / BILLION, - (double)start_abort_commit_latency.get_percentile(25) / BILLION, - (double)start_abort_commit_latency.get_percentile(50) / BILLION, - (double)start_abort_commit_latency.get_percentile(75) / BILLION, - (double)start_abort_commit_latency.get_percentile(90) / BILLION, - (double)start_abort_commit_latency.get_percentile(95) / BILLION, - (double)start_abort_commit_latency.get_percentile(96) / BILLION, - (double)start_abort_commit_latency.get_percentile(97) / BILLION, - (double)start_abort_commit_latency.get_percentile(98) / BILLION, - (double)start_abort_commit_latency.get_percentile(99) / BILLION, - (double)start_abort_commit_latency.get_idx(start_abort_commit_latency.cnt - 1) / BILLION, - (double)start_abort_commit_latency.get_avg() / BILLION, start_abort_commit_latency.cnt); - } - -} - -void Stats_thd::combine(Stats_thd * stats) { - if (stats->total_runtime > total_runtime) total_runtime = stats->total_runtime; - - last_start_commit_latency.append(stats->first_start_commit_latency); - first_start_commit_latency.append(stats->first_start_commit_latency); - start_abort_commit_latency.append(stats->start_abort_commit_latency); - client_client_latency.append(stats->client_client_latency); - // Execution - txn_cnt+=stats->txn_cnt; - remote_txn_cnt+=stats->remote_txn_cnt; - local_txn_cnt+=stats->local_txn_cnt; - local_txn_start_cnt+=stats->local_txn_start_cnt; - total_txn_commit_cnt+=stats->total_txn_commit_cnt; - local_txn_commit_cnt+=stats->local_txn_commit_cnt; - remote_txn_commit_cnt+=stats->remote_txn_commit_cnt; - total_txn_abort_cnt+=stats->total_txn_abort_cnt; - positive_txn_abort_cnt += stats->positive_txn_abort_cnt; - unique_txn_abort_cnt+=stats->unique_txn_abort_cnt; - local_txn_abort_cnt+=stats->local_txn_abort_cnt; - remote_txn_abort_cnt+=stats->remote_txn_abort_cnt; - txn_run_time+=stats->txn_run_time; - multi_part_txn_cnt+=stats->multi_part_txn_cnt; - multi_part_txn_run_time+=stats->multi_part_txn_run_time; - single_part_txn_cnt+=stats->single_part_txn_cnt; - single_part_txn_run_time+=stats->single_part_txn_run_time; - txn_write_cnt+=stats->txn_write_cnt; - record_write_cnt+=stats->record_write_cnt; - parts_touched+=stats->parts_touched; - - // Breakdown - ts_alloc_time+=stats->ts_alloc_time; - abort_time+=stats->abort_time; - txn_manager_time+=stats->txn_manager_time; - txn_index_time+=stats->txn_index_time; - txn_validate_time+=stats->txn_validate_time; - txn_cleanup_time+=stats->txn_cleanup_time; - // trans - trans_total_run_time+=stats->trans_total_run_time; - trans_process_time+=stats->trans_process_time; - trans_2pc_time+=stats->trans_2pc_time; - trans_prepare_time+=stats->trans_prepare_time; - trans_validate_time+=stats->trans_validate_time; - trans_finish_time+=stats->trans_finish_time; - trans_commit_time+=stats->trans_commit_time; - trans_abort_time+=stats->trans_abort_time; - trans_access_lock_wait_time+=stats->trans_access_lock_wait_time; - // trans mvcc - trans_mvcc_clear_history+=stats->trans_mvcc_clear_history; - trans_mvcc_access+=stats->trans_mvcc_access; - // Transaction stats - txn_total_process_time+=stats->txn_total_process_time; - txn_process_time+=stats->txn_process_time; - txn_total_local_wait_time+=stats->txn_total_local_wait_time; - txn_local_wait_time+=stats->txn_local_wait_time; - txn_total_remote_wait_time+=stats->txn_total_remote_wait_time; - txn_remote_wait_time+=stats->txn_remote_wait_time; - txn_total_twopc_time+=stats->txn_total_twopc_time; - txn_twopc_time+=stats->txn_twopc_time; - - // Client - txn_sent_cnt+=stats->txn_sent_cnt; - cl_send_intv+=stats->cl_send_intv; - - // Abort queue - abort_queue_enqueue_cnt+=stats->abort_queue_enqueue_cnt; - abort_queue_dequeue_cnt+=stats->abort_queue_dequeue_cnt; - abort_queue_enqueue_time+=stats->abort_queue_enqueue_time; - abort_queue_dequeue_time+=stats->abort_queue_dequeue_time; - abort_queue_penalty+=stats->abort_queue_penalty; - abort_queue_penalty_extra+=stats->abort_queue_penalty_extra; - - // Work queue - work_queue_wait_time+=stats->work_queue_wait_time; - work_queue_cnt+=stats->work_queue_cnt; - work_queue_enq_cnt+=stats->work_queue_enq_cnt; - work_queue_mtx_wait_time+=stats->work_queue_mtx_wait_time; - work_queue_new_cnt+=stats->work_queue_new_cnt; - work_queue_new_wait_time+=stats->work_queue_new_wait_time; - work_queue_old_cnt+=stats->work_queue_old_cnt; - work_queue_old_wait_time+=stats->work_queue_old_wait_time; - work_queue_enqueue_time+=stats->work_queue_enqueue_time; - work_queue_dequeue_time+=stats->work_queue_dequeue_time; - work_queue_conflict_cnt+=stats->work_queue_conflict_cnt; - - // Worker thread - worker_idle_time+=stats->worker_idle_time; - worker_activate_txn_time+=stats->worker_activate_txn_time; - worker_deactivate_txn_time+=stats->worker_deactivate_txn_time; - worker_release_msg_time+=stats->worker_release_msg_time; - worker_process_time+=stats->worker_process_time; - worker_process_cnt+=stats->worker_process_cnt; - for(uint64_t i = 0; i < NO_MSG; i ++) { - worker_process_cnt_by_type[i]+=stats->worker_process_cnt_by_type[i]; - worker_process_time_by_type[i]+=stats->worker_process_time_by_type[i]; - } - for(uint64_t i = 0; i < SECOND; i ++) { - work_queue_wq_cnt[i]+=stats->work_queue_wq_cnt[i]; - work_queue_tx_cnt[i]+=stats->work_queue_tx_cnt[i]; - - work_queue_ewq_cnt[i]+=stats->work_queue_ewq_cnt[i]; - work_queue_dwq_cnt[i]+=stats->work_queue_dwq_cnt[i]; - work_queue_etx_cnt[i]+=stats->work_queue_etx_cnt[i]; - work_queue_dtx_cnt[i]+=stats->work_queue_dtx_cnt[i]; - } - // IO - msg_queue_delay_time+=stats->msg_queue_delay_time; - msg_queue_cnt+=stats->msg_queue_cnt; - msg_queue_enq_cnt+=stats->msg_queue_enq_cnt; - msg_send_time+=stats->msg_send_time; - msg_recv_time+=stats->msg_recv_time; - msg_recv_idle_time+=stats->msg_recv_idle_time; - msg_batch_cnt+=stats->msg_batch_cnt; - msg_batch_size_msgs+=stats->msg_batch_size_msgs; - msg_batch_size_bytes+=stats->msg_batch_size_bytes; - msg_batch_size_bytes_to_server+=stats->msg_batch_size_bytes_to_server; - msg_batch_size_bytes_to_client+=stats->msg_batch_size_bytes_to_client; - msg_send_cnt+=stats->msg_send_cnt; - msg_recv_cnt+=stats->msg_recv_cnt; - msg_unpack_time+=stats->msg_unpack_time; - mbuf_send_intv_time+=stats->mbuf_send_intv_time; - msg_copy_output_time+=stats->msg_copy_output_time; - - // Concurrency control, general - cc_conflict_cnt+=stats->cc_conflict_cnt; - txn_wait_cnt+=stats->txn_wait_cnt; - txn_conflict_cnt+=stats->txn_conflict_cnt; - - // 2PL - twopl_already_owned_cnt+=stats->twopl_already_owned_cnt; - twopl_owned_cnt+=stats->twopl_owned_cnt; - twopl_sh_owned_cnt+=stats->twopl_sh_owned_cnt; - twopl_ex_owned_cnt+=stats->twopl_ex_owned_cnt; - twopl_sh_bypass_cnt+=stats->twopl_sh_bypass_cnt; - twopl_owned_time+=stats->twopl_owned_time; - twopl_sh_owned_time+=stats->twopl_sh_owned_time; - twopl_ex_owned_time+=stats->twopl_ex_owned_time; - twopl_diff_time+=stats->twopl_diff_time; - twopl_wait_time+=stats->twopl_wait_time; - twopl_getlock_cnt+=stats->twopl_getlock_cnt; - twopl_release_cnt+=stats->twopl_release_cnt; - twopl_release_time+=stats->twopl_release_time; - twopl_getlock_time+=stats->twopl_getlock_time; - - // Calvin - seq_txn_cnt+=stats->seq_txn_cnt; - seq_batch_cnt+=stats->seq_batch_cnt; - seq_full_batch_cnt+=stats->seq_full_batch_cnt; - seq_ack_time+=stats->seq_ack_time; - seq_batch_time+=stats->seq_batch_time; - seq_process_cnt+=stats->seq_process_cnt; - seq_complete_cnt+=stats->seq_complete_cnt; - seq_process_time+=stats->seq_process_time; - seq_prep_time+=stats->seq_prep_time; - seq_idle_time+=stats->seq_idle_time; - seq_queue_wait_time+=stats->seq_queue_wait_time; - seq_queue_cnt+=stats->seq_queue_cnt; - seq_queue_enq_cnt+=stats->seq_queue_enq_cnt; - seq_queue_enqueue_time+=stats->seq_queue_enqueue_time; - seq_queue_dequeue_time+=stats->seq_queue_dequeue_time; - sched_queue_wait_time+=stats->sched_queue_wait_time; - sched_queue_cnt+=stats->sched_queue_cnt; - sched_queue_enq_cnt+=stats->sched_queue_enq_cnt; - sched_queue_enqueue_time+=stats->sched_queue_enqueue_time; - sched_queue_dequeue_time+=stats->sched_queue_dequeue_time; - calvin_sched_time+=stats->calvin_sched_time; - sched_idle_time+=stats->sched_idle_time; - sched_txn_table_time+=stats->sched_txn_table_time; - sched_epoch_cnt+=stats->sched_epoch_cnt; - sched_epoch_diff+=stats->sched_epoch_diff; - - //OCC - occ_validate_time+=stats->occ_validate_time; - occ_cs_wait_time+=stats->occ_cs_wait_time; - occ_cs_time+=stats->occ_cs_time; - occ_hist_validate_time+=stats->occ_hist_validate_time; - occ_act_validate_time+=stats->occ_act_validate_time; - occ_hist_validate_fail_time+=stats->occ_hist_validate_fail_time; - occ_act_validate_fail_time+=stats->occ_act_validate_fail_time; - occ_check_cnt+=stats->occ_check_cnt; - occ_abort_check_cnt+=stats->occ_abort_check_cnt; - occ_ts_abort_cnt+=stats->occ_ts_abort_cnt; - occ_finish_time+=stats->occ_finish_time; - - // MAAT - maat_validate_cnt+=stats->maat_validate_cnt; - maat_validate_time+=stats->maat_validate_time; - maat_cs_wait_time+=stats->maat_cs_wait_time; - maat_case1_cnt+=stats->maat_case1_cnt; - maat_case2_cnt+=stats->maat_case2_cnt; - maat_case3_cnt+=stats->maat_case3_cnt; - maat_case4_cnt+=stats->maat_case4_cnt; - maat_case5_cnt+=stats->maat_case5_cnt; - maat_range+=stats->maat_range; - maat_commit_cnt+=stats->maat_commit_cnt; - - // Logging - log_write_cnt+=stats->log_write_cnt; - log_write_time+=stats->log_write_time; - log_flush_cnt+=stats->log_flush_cnt; - log_flush_time+=stats->log_flush_time; - log_process_time+=stats->log_process_time; - - // Transaction Table - txn_table_new_cnt+=stats->txn_table_new_cnt; - txn_table_get_cnt+=stats->txn_table_get_cnt; - txn_table_release_cnt+=stats->txn_table_release_cnt; - txn_table_cflt_cnt+=stats->txn_table_cflt_cnt; - txn_table_cflt_size+=stats->txn_table_cflt_size; - txn_table_get_time+=stats->txn_table_get_time; - txn_table_release_time+=stats->txn_table_release_time; - txn_table_min_ts_time+=stats->txn_table_min_ts_time; - - for(uint64_t i = 0; i < 40; i ++) { - mtx[i]+=stats->mtx[i]; - } - - // Latency - - lat_work_queue_time+=stats->lat_work_queue_time; - lat_msg_queue_time+=stats->lat_msg_queue_time; - lat_cc_block_time+=stats->lat_cc_block_time; - lat_cc_time+=stats->lat_cc_time; - lat_process_time+=stats->lat_process_time; - lat_abort_time+=stats->lat_abort_time; - lat_network_time+=stats->lat_network_time; - lat_other_time+=stats->lat_other_time; - - lat_l_loc_work_queue_time+=stats->lat_l_loc_work_queue_time; - lat_l_loc_msg_queue_time+=stats->lat_l_loc_msg_queue_time; - lat_l_loc_cc_block_time+=stats->lat_l_loc_cc_block_time; - lat_l_loc_cc_time+=stats->lat_l_loc_cc_time; - lat_l_loc_process_time+=stats->lat_l_loc_process_time; - lat_l_loc_abort_time+=stats->lat_l_loc_abort_time; - - lat_short_work_queue_time+=stats->lat_short_work_queue_time; - lat_short_msg_queue_time+=stats->lat_short_msg_queue_time; - lat_short_cc_block_time+=stats->lat_short_cc_block_time; - lat_short_cc_time+=stats->lat_short_cc_time; - lat_short_process_time+=stats->lat_short_process_time; - lat_short_network_time+=stats->lat_short_network_time; - lat_short_batch_time+=stats->lat_short_batch_time; - - lat_s_loc_work_queue_time+=stats->lat_s_loc_work_queue_time; - lat_s_loc_msg_queue_time+=stats->lat_s_loc_msg_queue_time; - lat_s_loc_cc_block_time+=stats->lat_s_loc_cc_block_time; - lat_s_loc_cc_time+=stats->lat_s_loc_cc_time; - lat_s_loc_process_time+=stats->lat_s_loc_process_time; - - lat_l_rem_work_queue_time+=stats->lat_l_rem_work_queue_time; - lat_l_rem_msg_queue_time+=stats->lat_l_rem_msg_queue_time; - lat_l_rem_cc_block_time+=stats->lat_l_rem_cc_block_time; - lat_l_rem_cc_time+=stats->lat_l_rem_cc_time; - lat_l_rem_process_time+=stats->lat_l_rem_process_time; - - lat_s_rem_work_queue_time+=stats->lat_s_rem_work_queue_time; - lat_s_rem_msg_queue_time+=stats->lat_s_rem_msg_queue_time; - lat_s_rem_cc_block_time+=stats->lat_s_rem_cc_block_time; - lat_s_rem_cc_time+=stats->lat_s_rem_cc_time; - lat_s_rem_process_time+=stats->lat_s_rem_process_time; - - ano_2_trans_write_skew_1 += stats->ano_2_trans_write_skew_1; - ano_2_trans_write_skew_2 += stats->ano_2_trans_write_skew_2; - ano_3_trans_write_skew_1 += stats->ano_3_trans_write_skew_1; - ano_3_trans_write_skew_2 += stats->ano_3_trans_write_skew_2; - ano_2_trans_read_skew += stats->ano_2_trans_read_skew; - ano_3_trans_read_skew_1 += stats->ano_3_trans_read_skew_1; - ano_3_trans_read_skew_2 += stats->ano_3_trans_read_skew_2; - ano_4_trans_read_skew += stats->ano_4_trans_read_skew; - ano_unknown += stats->ano_unknown; -} - -void Stats::init(uint64_t thread_cnt) { - if (!STATS_ENABLE) return; - - thd_cnt = thread_cnt; - _stats = new Stats_thd * [thread_cnt]; - totals = new Stats_thd; - - for(uint64_t i = 0; i < thread_cnt; i++) { - _stats[i] = (Stats_thd *)mem_allocator.align_alloc(sizeof(Stats_thd)); - _stats[i]->init(i); - _stats[i]->clear(); - } - - totals->init(0); - totals->clear(); -} - -void Stats::clear(uint64_t tid) {} - -void Stats::print_client(bool prog) { - fflush(stdout); - if (!STATS_ENABLE) return; - - totals->clear(); - for (uint64_t i = 0; i < thd_cnt; i++) totals->combine(_stats[i]); - - FILE * outf; - if (output_file != NULL) - outf = fopen(output_file, "w"); - else - outf = stdout; - if(prog) - fprintf(outf, "[prog] "); - else - fprintf(outf, "[summary] "); - totals->print_client(outf,prog); - mem_util(outf); - cpu_util(outf); - - if(prog) { - fprintf(outf,"\n"); - //for (uint32_t k = 0; k < g_node_id; ++k) { - for (uint32_t k = 0; k < g_servers_per_client; ++k) { - printf("tif_node%u=%d, ", k, client_man.get_inflight(k)); - } - printf("\n"); - } else { - } - - if (output_file != NULL) { - fflush(outf); - fclose(outf); - } - fflush(stdout); -} - -void Stats::print(bool prog) { - fflush(stdout); - if (!STATS_ENABLE) return; - - totals->clear(); - for (uint64_t i = 0; i < thd_cnt; i++) totals->combine(_stats[i]); - FILE * outf; - if (output_file != NULL) - outf = fopen(output_file, "w"); - else - outf = stdout; - if(prog) - fprintf(outf, "[prog] "); - else - fprintf(outf, "[summary] "); - totals->print(outf,prog); - mem_util(outf); - cpu_util(outf); - - fprintf(outf,"\n"); - fflush(outf); - if(!prog) { - } - fprintf(outf,"\n"); - fflush(outf); - if (output_file != NULL) { - fclose(outf); - } -} - -uint64_t Stats::get_txn_cnts() { - if (!STATS_ENABLE || g_node_id >= g_node_cnt) return 0; - uint64_t limit = g_thread_cnt + g_rem_thread_cnt; - uint64_t total_txn_cnt = 0; - for (uint64_t tid = 0; tid < limit; tid ++) { - total_txn_cnt += _stats[tid]->txn_cnt; - } - - return total_txn_cnt; -} - -void Stats::print_lat_distr() { -#if PRT_LAT_DISTR - printf("\n[all_lat] "); - uint64_t limit = 0; - if(g_node_id < g_node_cnt) - limit = g_thread_cnt; - else - limit = g_client_thread_cnt; - for (UInt32 tid = 0; tid < limit; tid++) _stats[tid]->all_lat.print(stdout); -#endif -} - -void Stats::print_lat_distr(uint64_t min, uint64_t max) { -#if PRT_LAT_DISTR - printf("\n[all_lat] "); - _stats[0]->all_lat.print(stdout,min,max); -#endif -} - -void Stats::util_init() { - struct tms timeSample; - lastCPU = times(&timeSample); - lastSysCPU = timeSample.tms_stime; - lastUserCPU = timeSample.tms_utime; -} - -void Stats::print_util() {} - -int Stats::parseLine(char* line){ - int i = strlen(line); - while (*line < '0' || *line > '9') line++; - line[i-3] = '\0'; - i = atoi(line); - return i; -} - -void Stats::mem_util(FILE * outf) { - FILE* file = fopen("/proc/self/status", "r"); - int result = -1; - char line[128]; - -// Physical memory used by current process, in KB - while (fgets(line, 128, file) != NULL){ - if (strncmp(line, "VmRSS:", 6) == 0){ - result = parseLine(line); - fprintf(outf, ",phys_mem_usage=%d", result); - } - if (strncmp(line, "VmSize:", 7) == 0){ - result = parseLine(line); - fprintf(outf, ",virt_mem_usage=%d", result); - } - } - fclose(file); - -} - -void Stats::cpu_util(FILE * outf) { - clock_t now; - struct tms timeSample; - double percent; - - now = times(&timeSample); - if (now <= lastCPU || timeSample.tms_stime < lastSysCPU || timeSample.tms_utime < lastUserCPU) { - //Overflow detection. Just skip this value. - percent = -1.0; - } else { - percent = (timeSample.tms_stime - lastSysCPU) + (timeSample.tms_utime - lastUserCPU); - percent /= (now - lastCPU); - if(ISSERVER) { - percent /= (g_total_thread_cnt);//numProcessors; - } else if(ISCLIENT){ - percent /= (g_total_client_thread_cnt);//numProcessors; - } - percent *= 100; - } - fprintf(outf, ",cpu_ttl=%f", percent); - lastCPU = now; - lastSysCPU = timeSample.tms_stime; - lastUserCPU = timeSample.tms_utime; -} - - diff --git a/contrib/deneva/statistics/stats.h b/contrib/deneva/statistics/stats.h deleted file mode 100644 index 1e4d4c3e..00000000 --- a/contrib/deneva/statistics/stats.h +++ /dev/null @@ -1,366 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _STATS_H_ -#define _STATS_H_ -#include -#include -#include - -#include "../system/global.h" -#include "stats_array.h" -class StatValue { -public: - StatValue() : value(0) {} - void operator+=(double value) { this->value += value; } - void operator=(double value) { this->value = value; } - double get() {return value;} - -private: - double value; -}; - -class Stats_thd { -public: - void init(uint64_t thd_id); - void combine(Stats_thd * stats); - void print(FILE * outf, bool prog); - void print_client(FILE * outf, bool prog); - void clear(); - - char _pad2[CL_SIZE]; - - uint64_t* part_cnt; - uint64_t* part_acc; - - double total_runtime; - - uint64_t parts_touched; - - // Execution - uint64_t txn_cnt; - uint64_t remote_txn_cnt; - uint64_t local_txn_cnt; - uint64_t local_txn_start_cnt; - uint64_t total_txn_commit_cnt; - uint64_t local_txn_commit_cnt; - uint64_t remote_txn_commit_cnt; - uint64_t total_txn_abort_cnt; - uint64_t positive_txn_abort_cnt; - uint64_t unique_txn_abort_cnt; - uint64_t local_txn_abort_cnt; - uint64_t remote_txn_abort_cnt; - double txn_run_time; - uint64_t multi_part_txn_cnt; - double multi_part_txn_run_time; - uint64_t single_part_txn_cnt; - double single_part_txn_run_time; - uint64_t txn_write_cnt; - uint64_t record_write_cnt; - - // Transaction stats - double txn_total_process_time; - double txn_process_time; - double txn_total_local_wait_time; - double txn_local_wait_time; - double txn_total_remote_wait_time; - double txn_remote_wait_time; - double txn_total_twopc_time; - double txn_twopc_time; - - // Client - uint64_t txn_sent_cnt; - double cl_send_intv; - - // Breakdown - double ts_alloc_time; - double abort_time; - double txn_manager_time; - double txn_index_time; - double txn_validate_time; - double txn_cleanup_time; - // trans - double trans_total_run_time=0; - double trans_process_time=0; - double trans_2pc_time=0; - double trans_prepare_time=0; - double trans_validate_time=0; - double trans_finish_time=0; - double trans_commit_time=0; - double trans_abort_time=0; - - double trans_access_lock_wait_time=0; - // trans mvcc - double trans_mvcc_clear_history=0; - double trans_mvcc_access=0; - // Work queue - double work_queue_wait_time; - uint64_t work_queue_cnt; - uint64_t work_queue_enq_cnt; - double work_queue_mtx_wait_time; - uint64_t work_queue_new_cnt; - double work_queue_new_wait_time; - uint64_t work_queue_old_cnt; - double work_queue_old_wait_time; - double work_queue_enqueue_time; - double work_queue_dequeue_time; - uint64_t work_queue_conflict_cnt; - - // Abort queue - uint64_t abort_queue_enqueue_cnt; - uint64_t abort_queue_dequeue_cnt; - double abort_queue_enqueue_time; - double abort_queue_dequeue_time; - double abort_queue_penalty; - double abort_queue_penalty_extra; - - // Worker thread - double worker_idle_time; - double worker_activate_txn_time; - double worker_deactivate_txn_time; - double worker_release_msg_time; - double worker_process_time; - uint64_t worker_process_cnt; - uint64_t * worker_process_cnt_by_type; - double * worker_process_time_by_type; - uint64_t * work_queue_wq_cnt; - uint64_t * work_queue_tx_cnt; - - uint64_t * work_queue_ewq_cnt; - uint64_t * work_queue_dwq_cnt; - uint64_t * work_queue_etx_cnt; - uint64_t * work_queue_dtx_cnt; - // IO - double msg_queue_delay_time; - uint64_t msg_queue_cnt; - uint64_t msg_queue_enq_cnt; - double msg_send_time; - double msg_recv_time; - double msg_recv_idle_time; - uint64_t msg_batch_cnt; - uint64_t msg_batch_size_msgs; - uint64_t msg_batch_size_bytes; - uint64_t msg_batch_size_bytes_to_server; - uint64_t msg_batch_size_bytes_to_client; - uint64_t msg_send_cnt; - uint64_t msg_recv_cnt; - double msg_unpack_time; - double mbuf_send_intv_time; - double msg_copy_output_time; - - // Concurrency control, general - uint64_t cc_conflict_cnt; - uint64_t txn_wait_cnt; - uint64_t txn_conflict_cnt; - - // 2PL - uint64_t twopl_already_owned_cnt; - uint64_t twopl_owned_cnt; - uint64_t twopl_sh_owned_cnt; - uint64_t twopl_ex_owned_cnt; - uint64_t twopl_get_cnt; - uint64_t twopl_sh_bypass_cnt; - double twopl_owned_time; - double twopl_sh_owned_time; - double twopl_ex_owned_time; - double twopl_diff_time; - double twopl_wait_time; - uint64_t twopl_getlock_cnt; - uint64_t twopl_release_cnt; - double twopl_getlock_time; - double twopl_release_time; - - // Calvin - uint64_t seq_txn_cnt; - uint64_t seq_batch_cnt; - uint64_t seq_full_batch_cnt; - double seq_ack_time; - double seq_batch_time; - uint64_t seq_process_cnt; - uint64_t seq_complete_cnt; - double seq_process_time; - double seq_prep_time; - double seq_idle_time; - double seq_queue_wait_time; - uint64_t seq_queue_cnt; - uint64_t seq_queue_enq_cnt; - double seq_queue_enqueue_time; - double seq_queue_dequeue_time; - double sched_queue_wait_time; - uint64_t sched_queue_cnt; - uint64_t sched_queue_enq_cnt; - double sched_queue_enqueue_time; - double sched_queue_dequeue_time; - double calvin_sched_time; - double sched_idle_time; - double sched_txn_table_time; - uint64_t sched_epoch_cnt; - double sched_epoch_diff; - - // OCC - double occ_validate_time; - double occ_cs_wait_time; - double occ_cs_time; - double occ_hist_validate_time; - double occ_act_validate_time; - double occ_hist_validate_fail_time; - double occ_act_validate_fail_time; - uint64_t occ_check_cnt; - uint64_t occ_abort_check_cnt; - uint64_t occ_ts_abort_cnt; - double occ_finish_time; - - // WSI - double wsi_validate_time; - double wsi_cs_wait_time; - uint64_t wsi_check_cnt; - uint64_t wsi_abort_check_cnt; - - // MAAT - uint64_t maat_validate_cnt; - double maat_validate_time; - double maat_cs_wait_time; - uint64_t maat_case1_cnt; - uint64_t maat_case2_cnt; - uint64_t maat_case3_cnt; - uint64_t maat_case4_cnt; - uint64_t maat_case5_cnt; - double maat_range; - uint64_t maat_commit_cnt; - - // // SSI - // uint64_t ssi_validate_cnt; - // double ssi_validate_time; - // uint64_t ssi_commit_cnt; - - // Logging - uint64_t log_write_cnt; - double log_write_time; - uint64_t log_flush_cnt; - double log_flush_time; - double log_process_time; - - // Transaction Table - uint64_t txn_table_new_cnt; - uint64_t txn_table_get_cnt; - uint64_t txn_table_release_cnt; - uint64_t txn_table_cflt_cnt; - uint64_t txn_table_cflt_size; - double txn_table_get_time; - double txn_table_release_time; - double txn_table_min_ts_time; - - // Latency - StatsArr client_client_latency; - StatsArr first_start_commit_latency; - StatsArr last_start_commit_latency; - StatsArr start_abort_commit_latency; - - // stats accumulated - double lat_work_queue_time; - double lat_msg_queue_time; - double lat_cc_block_time; - double lat_cc_time; - double lat_process_time; - double lat_abort_time; - double lat_network_time; - double lat_other_time; - - // stats from committed local transactions from the first starttime of the transaction - double lat_l_loc_work_queue_time; - double lat_l_loc_msg_queue_time; - double lat_l_loc_cc_block_time; - double lat_l_loc_cc_time; - double lat_l_loc_process_time; - double lat_l_loc_abort_time; - - // stats from committed local transactions only from the most recent start time - double lat_s_loc_work_queue_time; - double lat_s_loc_msg_queue_time; - double lat_s_loc_cc_block_time; - double lat_s_loc_cc_time; - double lat_s_loc_process_time; - - // stats from message-managed latency - double lat_short_work_queue_time; - double lat_short_msg_queue_time; - double lat_short_cc_block_time; - double lat_short_cc_time; - double lat_short_process_time; - double lat_short_network_time; - double lat_short_batch_time; - - // stats from committed non-local transactions - double lat_l_rem_work_queue_time; - double lat_l_rem_msg_queue_time; - double lat_l_rem_cc_block_time; - double lat_l_rem_cc_time; - double lat_l_rem_process_time; - - // stats from aborted non-local transactions - double lat_s_rem_work_queue_time; - double lat_s_rem_msg_queue_time; - double lat_s_rem_cc_block_time; - double lat_s_rem_cc_time; - double lat_s_rem_process_time; - - // stats for anomaly - uint64_t ano_2_trans_write_skew_1; - uint64_t ano_2_trans_write_skew_2; - uint64_t ano_3_trans_write_skew_1; - uint64_t ano_3_trans_write_skew_2; - uint64_t ano_2_trans_read_skew; - uint64_t ano_3_trans_read_skew_1; - uint64_t ano_3_trans_read_skew_2; - uint64_t ano_4_trans_read_skew; - uint64_t ano_unknown; - - double * mtx; - - char _pad[CL_SIZE]; -}; - -class Stats { -public: - // PER THREAD statistics - Stats_thd ** _stats; - Stats_thd * totals; - - void init(uint64_t thread_cnt); - void clear(uint64_t tid); - //void add_lat(uint64_t thd_id, uint64_t latency); - void commit(uint64_t thd_id); - void abort(uint64_t thd_id); - void print_client(bool prog); - void print(bool prog); - void print_cnts(FILE * outf); - void print_lat_distr(); - void print_lat_distr(uint64_t min, uint64_t max); - void print_abort_distr(); - uint64_t get_txn_cnts(); - void util_init(); - void print_util(); - int parseLine(char* line); - void mem_util(FILE * outf); - void cpu_util(FILE * outf); - void print_prof(FILE * outf); - - clock_t lastCPU, lastSysCPU, lastUserCPU; -private: - uint64_t thd_cnt; -}; - -#endif diff --git a/contrib/deneva/statistics/stats_array.cpp b/contrib/deneva/statistics/stats_array.cpp deleted file mode 100644 index 4a54af23..00000000 --- a/contrib/deneva/statistics/stats_array.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "stats.h" -#include "mem_alloc.h" -#include "client_txn.h" -#include "work_queue.h" -#include -#include -#include - -void StatsArr::quicksort(int low_idx, int high_idx) { - int low = low_idx; - int high = high_idx; - uint64_t pivot = arr[(low+high) / 2]; - uint64_t tmp; - - while(low < high) { - while (arr[low] < pivot) low++; - while (arr[high] > pivot) high--; - if(low <= high) { - tmp = arr[low]; - arr[low] = arr[high]; - arr[high] = tmp; - low++; - high--; - } - } - - if (low_idx < high) quicksort(low_idx, high); - if (low < high_idx) quicksort(low, high_idx); -} - -void StatsArr::init(uint64_t size,StatsArrType type) { - arr = (uint64_t *)mem_allocator.alloc(sizeof(uint64_t) * (size + 1)); - for(uint64_t i=0;isize = size+1; - this->type = type; - cnt = 0; - pthread_mutex_init(&mtx,NULL); -} - -void StatsArr::clear() { cnt = 0; } - -void StatsArr::resize() { - size = size * 2; - arr = (uint64_t *)mem_allocator.realloc(arr, sizeof(uint64_t) * size); - for(uint64_t i=size/2;i= size) { - ATOM_ADD(arr[size-1],1); - } else { - ATOM_ADD(arr[item],1); - } - ATOM_ADD(cnt,1); - } - pthread_mutex_unlock(&mtx); -} - -void StatsArr::append(StatsArr array) { - for(uint64_t i = 0; i < array.cnt; i++) { - insert(array.get_idx(i)); - } -} - -void StatsArr::print(FILE * f) { - if(type == ArrIncr) { - for (UInt32 i = 0; i < cnt; i ++) { - fprintf(f,"%ld,", arr[i]); - } - } else if (type == ArrInsert) { - for (UInt64 i = 0; i < size; i ++) { - if (arr[i] > 0) fprintf(f, "%ld=%ld,", i, arr[i]); - } - } -} - -void StatsArr::print(FILE * f,uint64_t min, uint64_t max) { - if(type == ArrIncr) { - for (UInt32 i = min * cnt / 100; i < max * cnt / 100; i ++) { - fprintf(f,"%ld,", arr[i]); - } - } -} - -uint64_t StatsArr::get_idx(uint64_t idx) { return arr[idx]; } - -uint64_t StatsArr::get_percentile(uint64_t ile) { return arr[ile * cnt / 100]; } - -uint64_t StatsArr::get_avg() { - uint64_t sum = 0; - for(uint64_t i = 0;i < cnt;i++) { - sum+=arr[i]; - } - if (cnt > 0) return sum / cnt; - return 0; -} diff --git a/contrib/deneva/statistics/stats_array.h b/contrib/deneva/statistics/stats_array.h deleted file mode 100644 index 2d7e831e..00000000 --- a/contrib/deneva/statistics/stats_array.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _STATS_ARR_H_ -#define _STATS_ARR_H_ - -enum StatsArrType { - ArrInsert, - ArrIncr -}; -class StatsArr { -public: - void init(uint64_t size,StatsArrType type); - void clear(); - void quicksort(int low_idx, int high_idx); - void resize(); - void insert(uint64_t item); - void append(StatsArr arr); - void print(FILE * f); - void print(FILE * f,uint64_t min, uint64_t max); - uint64_t get_idx(uint64_t idx); - uint64_t get_percentile(uint64_t ile); - uint64_t get_avg(); - - uint64_t * arr; - uint64_t size; - uint64_t cnt; - StatsArrType type; -private: - pthread_mutex_t mtx; -}; - -#endif diff --git a/contrib/deneva/storage/catalog.cpp b/contrib/deneva/storage/catalog.cpp deleted file mode 100644 index 6913f18d..00000000 --- a/contrib/deneva/storage/catalog.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "catalog.h" -#include "global.h" -#include "helper.h" - -void Catalog::init(const char* table_name, uint32_t table_id, int field_cnt) { - this->table_name = table_name; - this->table_id = table_id; - this->field_cnt = 0; - this->_columns = new Column [field_cnt]; - this->tuple_size = 0; -} - -void Catalog::add_col(char * col_name, uint64_t size, char * type) { - _columns[field_cnt].size = size; - strcpy(_columns[field_cnt].type, type); - strcpy(_columns[field_cnt].name, col_name); - _columns[field_cnt].id = field_cnt; - _columns[field_cnt].index = tuple_size; - tuple_size += size; - field_cnt ++; -} - -uint64_t Catalog::get_field_id(const char * name) { - UInt32 i; - for (i = 0; i < field_cnt; i++) { - if (strcmp(name, _columns[i].name) == 0) break; - } - assert (i < field_cnt); - return i; -} - -char* Catalog::get_field_type(uint64_t id) { return _columns[id].type; } - -char* Catalog::get_field_name(uint64_t id) { return _columns[id].name; } - -char* Catalog::get_field_type(char* name) { return get_field_type(get_field_id(name)); } - -uint64_t Catalog::get_field_index(char* name) { return get_field_index(get_field_id(name)); } - -void Catalog::print_schema() { - printf("\n[Catalog] %s\n", table_name); - for (UInt32 i = 0; i < field_cnt; i++) { - printf("\t%s\t%s\t%ld\n", get_field_name(i), get_field_type(i), get_field_size(i)); - } -} diff --git a/contrib/deneva/storage/catalog.h b/contrib/deneva/storage/catalog.h deleted file mode 100644 index e17b37d3..00000000 --- a/contrib/deneva/storage/catalog.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _CATALOG_H_ -#define _CATALOG_H_ - -#include -#include -#include "global.h" -#include "helper.h" - -class Column { -public: - Column() { - this->type = new char[80]; - this->name = new char[80]; - } - Column(uint64_t size, char *type, char *name, uint64_t id, uint64_t index) { - this->size = size; - this->id = id; - this->index = index; - this->type = new char[80]; - this->name = new char[80]; - strcpy(this->type, type); - strcpy(this->name, name); - }; - - UInt64 id; - UInt32 size; - UInt32 index; - char * type; - char * name; - char pad[CL_SIZE - sizeof(uint64_t)*3 - sizeof(char *)*2]; -}; - -class Catalog { -public: - // abandoned init function - // field_size is the size of each each field. - void init(const char * table_name, uint32_t table_id, int field_cnt); - void add_col(char * col_name, uint64_t size, char * type); - - UInt32 field_cnt; - const char * table_name; - uint32_t table_id; - - UInt32 get_tuple_size() { - return tuple_size; - }; - - uint64_t get_field_cnt() { - return field_cnt; - }; - uint64_t get_field_size(int id) { - return _columns[id].size; - }; - uint64_t get_field_index(int id) { - return _columns[id].index; - }; - char * get_field_type(uint64_t id); - char * get_field_name(uint64_t id); - uint64_t get_field_id(const char * name); - char * get_field_type(char * name); - uint64_t get_field_index(char * name); - - void print_schema(); - Column * _columns; - UInt32 tuple_size; -private: - char pad[CL_SIZE - sizeof(uint64_t)*2 - sizeof(int) - sizeof(char *)*2 - sizeof(uint32_t)]; -}; - -#endif diff --git a/contrib/deneva/storage/index_base.h b/contrib/deneva/storage/index_base.h deleted file mode 100644 index 2467199a..00000000 --- a/contrib/deneva/storage/index_base.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _INDEX_BASE_H_ -#define _INDEX_BASE_H_ - -#include "global.h" - -class table_t; - -class index_base { -public: - virtual RC init() { - return RCOK; - }; - - virtual RC init(uint64_t size) { - return RCOK; - }; - - virtual bool index_exist(idx_key_t key)=0; // check if the key exist. - - virtual RC index_insert(idx_key_t key, itemid_t *item, int part_id = -1) = 0; - - virtual RC index_insert_nonunique(idx_key_t key, itemid_t *item, int part_id = -1) = 0; - - virtual RC index_read(idx_key_t key, itemid_t *&item, int part_id = -1) = 0; - - virtual RC index_read(idx_key_t key, itemid_t *&item, int part_id = -1, int thd_id = 0) = 0; - - // TODO implement index_remove - virtual RC index_remove(idx_key_t key) { - return RCOK; - }; - - // the index in on "table". The key is the merged key of "fields" - table_t * table; -}; - -#endif diff --git a/contrib/deneva/storage/index_btree.cpp b/contrib/deneva/storage/index_btree.cpp deleted file mode 100644 index b4de38bc..00000000 --- a/contrib/deneva/storage/index_btree.cpp +++ /dev/null @@ -1,579 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "mem_alloc.h" -#include "index_btree.h" -#include "row.h" - -RC index_btree::init(uint64_t part_cnt) { - this->part_cnt = part_cnt; - order = BTREE_ORDER; - // these pointers can be mapped anywhere. They won't be changed - roots = (bt_node **) malloc(part_cnt * sizeof(bt_node *)); - // "cur_xxx_per_thd" is only for SCAN queries. - ARR_PTR(bt_node *, cur_leaf_per_thd, g_thread_cnt); - ARR_PTR(UInt32, cur_idx_per_thd, g_thread_cnt); - // the index tree of each partition musted be mapped to corresponding l2 slices - for (UInt32 part_id = 0; part_id < part_cnt; part_id ++) { - RC rc; - rc = make_lf(part_id, roots[part_id]); - assert (rc == RCOK); - } - return RCOK; -} - -RC index_btree::init(uint64_t part_cnt, table_t * table) { - this->table = table; - init(part_cnt); - return RCOK; -} - -bt_node * index_btree::find_root(uint64_t part_id) { - assert (part_id < part_cnt); - return roots[part_id]; -} - -bool index_btree::index_exist(idx_key_t key) { - assert(false); // part_id is not correct now. - glob_param params; - params.part_id = key_to_part(key) % part_cnt; - bt_node * leaf; - // does not matter which thread check existence - find_leaf(params, key, INDEX_NONE, leaf); - if (leaf == NULL) return false; - for (UInt32 i = 0; i < leaf->num_keys; i++) - if (leaf->keys[i] == key) { - // the record is found! - return true; - } - return false; -} - -RC index_btree::index_next(uint64_t thd_id, itemid_t * &item, bool samekey) { - int idx = *cur_idx_per_thd[thd_id]; - bt_node * leaf = *cur_leaf_per_thd[thd_id]; - idx_key_t cur_key = leaf->keys[idx] ; - - *cur_idx_per_thd[thd_id] += 1; - if (*cur_idx_per_thd[thd_id] >= leaf->num_keys) { - leaf = leaf->next; - *cur_leaf_per_thd[thd_id] = leaf; - *cur_idx_per_thd[thd_id] = 0; - } - if (leaf == NULL) - item = NULL; - else { - assert( leaf->is_leaf ); - if ( samekey && leaf->keys[ *cur_idx_per_thd[thd_id] ] != cur_key) - item = NULL; - else - item = (itemid_t *) leaf->pointers[ *cur_idx_per_thd[thd_id] ]; - } - return RCOK; -} - -RC index_btree::index_read(idx_key_t key, itemid_t *& item) { - assert(false); - return RCOK; -} - -RC index_btree::index_read(idx_key_t key, itemid_t *&item, int part_id) { - - return index_read(key, item, 0, part_id); -} - -RC index_btree::index_read(idx_key_t key, itemid_t *&item, uint64_t thd_id, int64_t part_id) { - RC rc = Abort; - glob_param params; - assert(part_id != -1); - params.part_id = part_id; - bt_node * leaf; - find_leaf(params, key, INDEX_READ, leaf); - if (leaf == NULL) M_ASSERT(false, "the leaf does not exist!"); - for (UInt32 i = 0; i < leaf->num_keys; i++) - if (leaf->keys[i] == key) { - item = (itemid_t *)leaf->pointers[i]; - release_latch(leaf); - (*cur_leaf_per_thd[thd_id]) = leaf; - *cur_idx_per_thd[thd_id] = i; - return RCOK; - } - // release the latch after reading the node - - printf("key = %ld\n", key); - M_ASSERT(false, "the key does not exist!"); - return rc; -} - -RC index_btree::index_insert(idx_key_t key, itemid_t * item, int part_id) { - glob_param params; - if (WORKLOAD == TPCC) assert(part_id != -1); - assert(part_id != -1); - params.part_id = part_id; - // create a tree if there does not exist one already - RC rc = RCOK; - bt_node * root = find_root(params.part_id); - assert(root != NULL); - int depth = 0; - // TODO tree depth < 100 - bt_node * ex_list[100]; - bt_node * leaf = NULL; - bt_node * last_ex = NULL; - rc = find_leaf(params, key, INDEX_INSERT, leaf, last_ex); - assert(rc == RCOK); - - bt_node * tmp_node = leaf; - if (last_ex != NULL) { - while (tmp_node != last_ex) { - ex_list[depth++] = tmp_node; - tmp_node = tmp_node->parent; - assert (depth < 100); - } - ex_list[depth ++] = last_ex; - } else - ex_list[depth++] = leaf; - // from this point, the required data structures are all latched, - // so the system should not abort anymore. - // insert into btree if the leaf is not full - if (leaf->num_keys < order - 1 || leaf_has_key(leaf, key) >= 0) { - rc = insert_into_leaf(params, leaf, key, item); - // only the leaf should be ex latched. - for (int i = 0; i < depth; i++) release_latch(ex_list[i]); - } else { // split the nodes when necessary - rc = split_lf_insert(params, leaf, key, item); - for (int i = 0; i < depth; i++) release_latch(ex_list[i]); - } - return rc; -} - -RC index_btree::make_lf(uint64_t part_id, bt_node *& node) { - RC rc = make_node(part_id, node); - if (rc != RCOK) return rc; - node->is_leaf = true; - return RCOK; -} - -RC index_btree::make_nl(uint64_t part_id, bt_node *& node) { - RC rc = make_node(part_id, node); - if (rc != RCOK) return rc; - node->is_leaf = false; - return RCOK; -} - -RC index_btree::make_node(uint64_t part_id, bt_node *& node) { - - bt_node * new_node = (bt_node *) mem_allocator.alloc(sizeof(bt_node)); - assert (new_node != NULL); - new_node->pointers = NULL; - new_node->keys = (idx_key_t *) mem_allocator.alloc((order - 1) * sizeof(idx_key_t)); - new_node->pointers = (void **) mem_allocator.alloc(order * sizeof(void *)); - assert (new_node->keys != NULL && new_node->pointers != NULL); - new_node->is_leaf = false; - new_node->num_keys = 0; - new_node->parent = NULL; - new_node->next = NULL; - new_node->latch = false; - new_node->latch_type = LATCH_NONE; - - node = new_node; - return RCOK; -} - -RC index_btree::start_new_tree(glob_param params, idx_key_t key, itemid_t * item) { - RC rc; - uint64_t part_id = params.part_id; - rc = make_lf(part_id, roots[part_id % part_cnt]); - if (rc != RCOK) return rc; - bt_node * root = roots[part_id % part_cnt]; - assert(root != NULL); - root->keys[0] = key; - root->pointers[0] = (void *)item; - root->parent = NULL; - root->num_keys++; - return RCOK; -} - -bool index_btree::latch_node(bt_node * node, latch_t latch_type) { - // TODO latch is disabled - if (!ENABLE_LATCH) return true; - bool success = false; - - while (!ATOM_CAS(node->latch, false, true)) { - } - - - latch_t node_latch = node->latch_type; - if (node_latch == LATCH_NONE || (node_latch == LATCH_SH && latch_type == LATCH_SH)) { - node->latch_type = latch_type; - if (node_latch == LATCH_NONE) M_ASSERT((node->share_cnt == 0), "share cnt none 0!"); - if (node->latch_type == LATCH_SH) node->share_cnt++; - success = true; - } else // latch_type incompatible - success = false; - - bool ok = ATOM_CAS(node->latch, true, false); - assert(ok); - - return success; -} - -latch_t index_btree::release_latch(bt_node * node) { - if (!ENABLE_LATCH) return LATCH_SH; - latch_t type = node->latch_type; - - while (!ATOM_CAS(node->latch, false, true)) { - } - - M_ASSERT((node->latch_type != LATCH_NONE), "release latch fault"); - if (node->latch_type == LATCH_EX) - node->latch_type = LATCH_NONE; - else if (node->latch_type == LATCH_SH) { - node->share_cnt --; - if (node->share_cnt == 0) node->latch_type = LATCH_NONE; - } - bool ok = ATOM_CAS(node->latch, true, false); - assert(ok); - return type; -} - -RC index_btree::upgrade_latch(bt_node * node) { - if (!ENABLE_LATCH) return RCOK; - bool success = false; - - while (!ATOM_CAS(node->latch, false, true)) { - } - - M_ASSERT( (node->latch_type == LATCH_SH), "" ); - if (node->share_cnt > 1) - success = false; - else { // share_cnt == 1 - success = true; - node->latch_type = LATCH_EX; - node->share_cnt = 0; - } - - bool ok = ATOM_CAS(node->latch, true, false); - assert(ok); - - if (success) - return RCOK; - else - return Abort; -} - -RC index_btree::cleanup(bt_node * node, bt_node * last_ex) { - if (last_ex != NULL) { - do { - node = node->parent; - release_latch(node); - } while (node != last_ex); - } - return RCOK; -} - -RC index_btree::find_leaf(glob_param params, idx_key_t key, idx_acc_t access_type, bt_node *& leaf) { - bt_node * last_ex = NULL; - assert(access_type != INDEX_INSERT); - RC rc = find_leaf(params, key, access_type, leaf, last_ex); - return rc; -} - -RC index_btree::find_leaf(glob_param params, idx_key_t key, idx_acc_t access_type, bt_node *&leaf, - bt_node *&last_ex) { - UInt32 i; - bt_node * c = find_root(params.part_id); - assert(c != NULL); - bt_node * child; - if (access_type == INDEX_NONE) { - while (!c->is_leaf) { - for (i = 0; i < c->num_keys; i++) { - if (key < c->keys[i]) break; - } - c = (bt_node *)c->pointers[i]; - } - leaf = c; - return RCOK; - } - - if (!latch_node(c, LATCH_SH)) return Abort; - while (!c->is_leaf) { - assert(get_part_id(c) == params.part_id); - assert(get_part_id(c->keys) == params.part_id); - for (i = 0; i < c->num_keys; i++) { - if (key < c->keys[i]) break; - } - child = (bt_node *)c->pointers[i]; - if (!latch_node(child, LATCH_SH)) { - release_latch(c); - cleanup(c, last_ex); - last_ex = NULL; - return Abort; - } - if (access_type == INDEX_INSERT) { - if (child->num_keys == order - 1) { - if (upgrade_latch(c) != RCOK) { - release_latch(c); - release_latch(child); - cleanup(c, last_ex); - last_ex = NULL; - return Abort; - } - if (last_ex == NULL) last_ex = c; - } else { - cleanup(c, last_ex); - last_ex = NULL; - release_latch(c); - } - } else - release_latch(c); // release the LATCH_SH on c - c = child; - } - // c is leaf - // at this point, if the access is a read, then only the leaf is latched by LATCH_SH - // if the access is an insertion, then the leaf is sh latched and related nodes in the tree - // are ex latched. - if (access_type == INDEX_INSERT) { - if (upgrade_latch(c) != RCOK) { - release_latch(c); - cleanup(c, last_ex); - return Abort; - } - } - leaf = c; - assert (leaf->is_leaf); - return RCOK; -} - -RC index_btree::insert_into_leaf(glob_param params, bt_node * leaf, idx_key_t key, itemid_t * item) { - UInt32 i, insertion_point; - insertion_point = 0; - int idx = leaf_has_key(leaf, key); - if (idx >= 0) { - item->next = (itemid_t *)leaf->pointers[idx]; - leaf->pointers[idx] = (void *) item; - return RCOK; - } - while (insertion_point < leaf->num_keys && leaf->keys[insertion_point] < key) insertion_point++; - for (i = leaf->num_keys; i > insertion_point; i--) { - leaf->keys[i] = leaf->keys[i - 1]; - leaf->pointers[i] = leaf->pointers[i - 1]; - } - leaf->keys[insertion_point] = key; - leaf->pointers[insertion_point] = (void *)item; - leaf->num_keys++; - M_ASSERT( (leaf->num_keys < order), "too many keys in leaf" ); - return RCOK; -} - -RC index_btree::split_lf_insert(glob_param params, bt_node * leaf, idx_key_t key, itemid_t * item) { - RC rc; - UInt32 insertion_index, split, i, j; - idx_key_t new_key; - - uint64_t part_id = params.part_id; - bt_node * new_leaf; - - rc = make_lf(part_id, new_leaf); - if (rc != RCOK) return rc; - - M_ASSERT(leaf->num_keys == order - 1, "trying to split non-full leaf!"); - - idx_key_t temp_keys[BTREE_ORDER]; - itemid_t * temp_pointers[BTREE_ORDER]; - insertion_index = 0; - while (insertion_index < order - 1 && leaf->keys[insertion_index] < key) insertion_index++; - - for (i = 0, j = 0; i < leaf->num_keys; i++, j++) { - if (j == insertion_index) j++; - - temp_keys[j] = leaf->keys[i]; - temp_pointers[j] = (itemid_t *)leaf->pointers[i]; - } - - temp_keys[insertion_index] = key; - temp_pointers[insertion_index] = item; - - split = cut(order - 1); - leaf->num_keys = 0; - for (i = 0; i < split; i++) { - leaf->pointers[i] = temp_pointers[i]; - leaf->keys[i] = temp_keys[i]; - leaf->num_keys++; - M_ASSERT( (leaf->num_keys < order), "too many keys in leaf" ); - } - for (i = split, j = 0; i < order; i++, j++) { - - new_leaf->pointers[j] = temp_pointers[i]; - new_leaf->keys[j] = temp_keys[i]; - new_leaf->num_keys++; - M_ASSERT( (leaf->num_keys < order), "too many keys in leaf" ); - } - - new_leaf->next = leaf->next; - leaf->next = new_leaf; - - for (i = leaf->num_keys; i < order - 1; i++) leaf->pointers[i] = NULL; - for (i = new_leaf->num_keys; i < order - 1; i++) new_leaf->pointers[i] = NULL; - - new_leaf->parent = leaf->parent; - new_key = new_leaf->keys[0]; - - rc = insert_into_parent(params, leaf, new_key, new_leaf); - return rc; -} - -RC index_btree::insert_into_parent(glob_param params, bt_node *left, idx_key_t key, - bt_node * right) { - - bt_node * parent = left->parent; - - /* Case: new root. */ - if (parent == NULL) return insert_into_new_root(params, left, key, right); - - UInt32 insert_idx = 0; - while (parent->keys[insert_idx] < key && insert_idx < parent->num_keys) insert_idx++; - // the parent has enough space, just insert into it - if (parent->num_keys < order - 1) { - for (UInt32 i = parent->num_keys-1; i >= insert_idx; i--) { - parent->keys[i + 1] = parent->keys[i]; - parent->pointers[i+2] = parent->pointers[i+1]; - } - parent->num_keys ++; - parent->keys[insert_idx] = key; - parent->pointers[insert_idx + 1] = right; - return RCOK; - } - - /* Harder case: split a node in order - * to preserve the B+ tree properties. - */ - - return split_nl_insert(params, parent, insert_idx, key, right); -} - -RC index_btree::insert_into_new_root(glob_param params, bt_node *left, idx_key_t key, - bt_node *right) { - RC rc; - uint64_t part_id = params.part_id; - bt_node * new_root; - - rc = make_nl(part_id, new_root); - if (rc != RCOK) return rc; - new_root->keys[0] = key; - new_root->pointers[0] = left; - new_root->pointers[1] = right; - new_root->num_keys++; - M_ASSERT( (new_root->num_keys < order), "too many keys in leaf" ); - new_root->parent = NULL; - left->parent = new_root; - right->parent = new_root; - left->next = right; - - this->roots[part_id] = new_root; - // TODO this new root is not latched, at this point, other threads - // may start to access this new root. Is this ok? - return RCOK; -} - -RC index_btree::split_nl_insert(glob_param params, bt_node *old_node, UInt32 left_index, - idx_key_t key, bt_node *right) { - RC rc; - uint64_t i, j, split, k_prime; - bt_node * new_node, * child; - - uint64_t part_id = params.part_id; - rc = make_node(part_id, new_node); - - /* First create a temporary set of keys and pointers - * to hold everything in order, including - * the new key and pointer, inserted in their - * correct places. - * Then create a new node and copy half of the - * keys and pointers to the old node and - * the other half to the new. - */ - - idx_key_t temp_keys[BTREE_ORDER]; - bt_node * temp_pointers[BTREE_ORDER + 1]; - for (i = 0, j = 0; i < old_node->num_keys + 1; i++, j++) { - if (j == left_index + 1) j++; - temp_pointers[j] = (bt_node *)old_node->pointers[i]; - } - - for (i = 0, j = 0; i < old_node->num_keys; i++, j++) { - if (j == left_index) j++; - - temp_keys[j] = old_node->keys[i]; - } - - temp_pointers[left_index + 1] = right; - temp_keys[left_index] = key; - - /* Create the new node and copy - * half the keys and pointers to the - * old and half to the new. - */ - split = cut(order); - if (rc != RCOK) return rc; - - old_node->num_keys = 0; - for (i = 0; i < split - 1; i++) { - old_node->pointers[i] = temp_pointers[i]; - old_node->keys[i] = temp_keys[i]; - old_node->num_keys++; - M_ASSERT( (old_node->num_keys < order), "too many keys in leaf" ); - } - - new_node->next = old_node->next; - old_node->next = new_node; - - old_node->pointers[i] = temp_pointers[i]; - k_prime = temp_keys[split - 1]; - for (++i, j = 0; i < order; i++, j++) { - new_node->pointers[j] = temp_pointers[i]; - new_node->keys[j] = temp_keys[i]; - - new_node->num_keys++; - M_ASSERT( (old_node->num_keys < order), "too many keys in leaf" ); - } - new_node->pointers[j] = temp_pointers[i]; - - new_node->parent = old_node->parent; - for (i = 0; i <= new_node->num_keys; i++) { - child = (bt_node *)new_node->pointers[i]; - child->parent = new_node; - } - - /* Insert a new key into the parent of the two - * nodes resulting from the split, with - * the old node to the left and the new to the right. - */ - - return insert_into_parent(params, old_node, k_prime, new_node); -} - -int index_btree::leaf_has_key(bt_node * leaf, idx_key_t key) { - for (UInt32 i = 0; i < leaf->num_keys; i++) - if (leaf->keys[i] == key) return i; - return -1; -} - -UInt32 index_btree::cut(UInt32 length) { - if (length % 2 == 0) - return length/2; - else - return length/2 + 1; -} diff --git a/contrib/deneva/storage/index_btree.h b/contrib/deneva/storage/index_btree.h deleted file mode 100644 index 2f41cfc9..00000000 --- a/contrib/deneva/storage/index_btree.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _BTREE_H_ -#define _BTREE_H_ - -#include "global.h" -#include "helper.h" -#include "index_base.h" - - -typedef struct bt_node { - // TODO bad hack! - void ** pointers; // for non-leaf nodes, point to bt_nodes - bool is_leaf; - idx_key_t * keys; - bt_node * parent; - UInt32 num_keys; - bt_node * next; - bool latch; - pthread_mutex_t locked; - latch_t latch_type; - UInt32 share_cnt; -} bt_node; - -struct glob_param { - uint64_t part_id; -}; - -class index_btree : public index_base { -public: - RC init(uint64_t part_cnt); - RC init(uint64_t part_cnt, table_t * table); - bool index_exist(idx_key_t key); // check if the key exist. - RC index_insert(idx_key_t key, itemid_t * item, int part_id = -1); - RC index_insert_nonunique(idx_key_t key, itemid_t * item, int part_id = -1) { return RCOK;} - RC index_read(idx_key_t key, itemid_t *&item, uint64_t thd_id, int64_t part_id = -1); - RC index_read(idx_key_t key, itemid_t * &item, int part_id = -1); - RC index_read(idx_key_t key, itemid_t * &item); - RC index_next(uint64_t thd_id, itemid_t * &item, bool samekey = false); - -private: - // index structures may have part_cnt = 1 or PART_CNT. - uint64_t part_cnt; - RC make_lf(uint64_t part_id, bt_node *& node); - RC make_nl(uint64_t part_id, bt_node *& node); - RC make_node(uint64_t part_id, bt_node *& node); - - RC start_new_tree(glob_param params, idx_key_t key, itemid_t * item); - RC find_leaf(glob_param params, idx_key_t key, idx_acc_t access_type, bt_node *&leaf, - bt_node *&last_ex); - RC find_leaf(glob_param params, idx_key_t key, idx_acc_t access_type, bt_node *& leaf); - RC insert_into_leaf(glob_param params, bt_node * leaf, idx_key_t key, itemid_t * item); - // handle split - RC split_lf_insert(glob_param params, bt_node * leaf, idx_key_t key, itemid_t * item); - RC split_nl_insert(glob_param params, bt_node *node, UInt32 left_index, idx_key_t key, - bt_node *right); - RC insert_into_parent(glob_param params, bt_node * left, idx_key_t key, bt_node * right); - RC insert_into_new_root(glob_param params, bt_node * left, idx_key_t key, bt_node * right); - - int leaf_has_key(bt_node * leaf, idx_key_t key); - - UInt32 cut(UInt32 length); - UInt32 order; // # of keys in a node(for both leaf and non-leaf) - bt_node ** roots; // each partition has a different root - bt_node * find_root(uint64_t part_id); - - bool latch_node(bt_node * node, latch_t latch_type); - latch_t release_latch(bt_node * node); - RC upgrade_latch(bt_node * node); - // clean up all the LATCH_EX up tp last_ex - RC cleanup(bt_node * node, bt_node * last_ex); - - // the leaf and the idx within the leaf that the thread last accessed. - bt_node *** cur_leaf_per_thd; - UInt32 ** cur_idx_per_thd; -}; - -#endif diff --git a/contrib/deneva/storage/index_hash.cpp b/contrib/deneva/storage/index_hash.cpp deleted file mode 100644 index 04d4227c..00000000 --- a/contrib/deneva/storage/index_hash.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "index_hash.h" -#include "mem_alloc.h" -#include "row.h" - -RC IndexHash::init(uint64_t bucket_cnt) { - _bucket_cnt = bucket_cnt; - _bucket_cnt_per_part = bucket_cnt; - - _buckets = new BucketHeader * [1]; - _buckets[0] = (BucketHeader *) mem_allocator.alloc(sizeof(BucketHeader) * _bucket_cnt_per_part); - uint64_t buckets_init_cnt = 0; - for (UInt32 n = 0; n < _bucket_cnt_per_part; n ++) { - _buckets[0][n].init(); - ++buckets_init_cnt; - } - printf("Index init with %ld buckets\n",buckets_init_cnt); - return RCOK; -} - -RC IndexHash::init(int part_cnt, table_t *table, uint64_t bucket_cnt) { - init(bucket_cnt); - this->table = table; - return RCOK; -} - -void IndexHash::index_delete() { - for (UInt32 n = 0; n < _bucket_cnt_per_part; n ++) { - _buckets[0][n].delete_bucket(); - } - mem_allocator.free(_buckets[0],sizeof(BucketHeader) * _bucket_cnt_per_part); - delete _buckets; -} - -void IndexHash::index_reset() { - for (UInt32 n = 0; n < _bucket_cnt_per_part; n ++) { - _buckets[0][n].delete_bucket(); - } -} - -bool IndexHash::index_exist(idx_key_t key) { - assert(false); -} - -void -IndexHash::get_latch(BucketHeader * bucket) { - while (!ATOM_CAS(bucket->locked, false, true)) {} -} - -void -IndexHash::release_latch(BucketHeader * bucket) { - bool ok = ATOM_CAS(bucket->locked, true, false); - assert(ok); -} - - -RC IndexHash::index_insert(idx_key_t key, itemid_t * item, int part_id) { - RC rc = RCOK; - uint64_t bkt_idx = hash(key); - assert(bkt_idx < _bucket_cnt_per_part); - //BucketHeader * cur_bkt = &_buckets[part_id][bkt_idx]; - BucketHeader * cur_bkt = &_buckets[0][bkt_idx]; - // 1. get the ex latch - get_latch(cur_bkt); - - // 2. update the latch list - cur_bkt->insert_item(key, item, part_id); - - // 3. release the latch - release_latch(cur_bkt);//delete - return rc; -} -RC IndexHash::index_insert_nonunique(idx_key_t key, itemid_t * item, int part_id) { - RC rc = RCOK; - uint64_t bkt_idx = hash(key); - assert(bkt_idx < _bucket_cnt_per_part); - //BucketHeader * cur_bkt = &_buckets[part_id][bkt_idx]; - BucketHeader * cur_bkt = &_buckets[0][bkt_idx]; - // 1. get the ex latch - get_latch(cur_bkt); - - // 2. update the latch list - cur_bkt->insert_item_nonunique(key, item, part_id); - - // 3. release the latch - release_latch(cur_bkt); - return rc; -} - -RC IndexHash::index_read(idx_key_t key, itemid_t * &item, int part_id) { - uint64_t bkt_idx = hash(key); - assert(bkt_idx < _bucket_cnt_per_part); - //BucketHeader * cur_bkt = &_buckets[part_id][bkt_idx]; - BucketHeader * cur_bkt = &_buckets[0][bkt_idx]; - RC rc = RCOK; - // 1. get the sh latch - - cur_bkt->read_item(key, item); - - // 3. release the latch - return rc; - -} - -RC IndexHash::index_read(idx_key_t key, int count, itemid_t * &item, int part_id) { - uint64_t bkt_idx = hash(key); - assert(bkt_idx < _bucket_cnt_per_part); - //BucketHeader * cur_bkt = &_buckets[part_id][bkt_idx]; - BucketHeader * cur_bkt = &_buckets[0][bkt_idx]; - RC rc = RCOK; - // 1. get the sh latch - - cur_bkt->read_item(key, count, item); - - // 3. release the latch - return rc; - -} - - -RC IndexHash::index_read(idx_key_t key, itemid_t * &item, - int part_id, int thd_id) { - uint64_t bkt_idx = hash(key); - assert(bkt_idx < _bucket_cnt_per_part); - //BucketHeader * cur_bkt = &_buckets[part_id][bkt_idx]; - BucketHeader * cur_bkt = &_buckets[0][bkt_idx]; - RC rc = RCOK; - // 1. get the sh latch - - - cur_bkt->read_item(key, item); - - // 3. release the latch - return rc; -} - -/************** BucketHeader Operations ******************/ - -void BucketHeader::init() { - node_cnt = 0; - first_node = NULL; - locked = false; -} - -void BucketHeader::delete_bucket() { - BucketNode * cur_node = first_node; - while (cur_node != NULL) { - ((row_t *)cur_node->items->location)->free_row(); - cur_node = cur_node->next; - } - first_node=NULL; -} - - -void BucketHeader::insert_item(idx_key_t key, - itemid_t * item, - int part_id) -{ - - BucketNode * cur_node = first_node; - BucketNode * prev_node = NULL; - while (cur_node != NULL) { - if (cur_node->key == key) - break; - prev_node = cur_node; - cur_node = cur_node->next; - } - if (cur_node == NULL) { - BucketNode * new_node = (BucketNode *) - mem_allocator.alloc(sizeof(BucketNode)); - new_node->init(key); - new_node->items = item; - if (prev_node != NULL) { - new_node->next = prev_node->next; - prev_node->next = new_node; - } else { - new_node->next = first_node; - first_node = new_node; - } - } else { - item->next = cur_node->items; - cur_node->items = item; - } -} - - -void BucketHeader::insert_item_nonunique(idx_key_t key, - itemid_t * item, - int part_id) -{ - - BucketNode * new_node = (BucketNode *) - mem_allocator.alloc(sizeof(BucketNode)); - new_node->init(key); - new_node->items = item; - new_node->next = first_node; - first_node = new_node; -} - -void BucketHeader::read_item(idx_key_t key, itemid_t *&item) { - BucketNode * cur_node = first_node; - while (cur_node != NULL) { - if (cur_node->key == key) break; - cur_node = cur_node->next; - } - M_ASSERT_V(cur_node != NULL, "Key does not exist! %ld\n",key); - - assert(cur_node->key == key); - item = cur_node->items; -} - -void BucketHeader::read_item(idx_key_t key, uint32_t count, itemid_t *&item) { - BucketNode * cur_node = first_node; - uint32_t ctr = 0; - while (cur_node != NULL) { - if (cur_node->key == key) { - if (ctr == count) { - break; - } - ++ctr; - } - cur_node = cur_node->next; - } - if (cur_node == NULL) { - item = NULL; - return; - } - M_ASSERT_V(cur_node != NULL, "Key does not exist! %ld\n",key); - assert(cur_node->key == key); - item = cur_node->items; -} diff --git a/contrib/deneva/storage/index_hash.h b/contrib/deneva/storage/index_hash.h deleted file mode 100644 index d36d64f5..00000000 --- a/contrib/deneva/storage/index_hash.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _INDEX_HASH_H_ -#define _INDEX_HASH_H_ - -#include "global.h" -#include "helper.h" -#include "index_base.h" - -// each BucketNode contains items sharing the same key -class BucketNode { -public: - BucketNode(idx_key_t key) { - init(key); - }; - void init(idx_key_t key) { - this->key = key; - next = NULL; - items = NULL; - } - idx_key_t key; - // The node for the next key - BucketNode * next; - // NOTE. The items can be a list of items connected by the next pointer. - itemid_t * items; -}; - -// BucketHeader does concurrency control of Hash -class BucketHeader { -public: - void init(); - void delete_bucket(); - void insert_item(idx_key_t key, itemid_t * item, int part_id); - void insert_item_nonunique(idx_key_t key, itemid_t * item, int part_id); - void read_item(idx_key_t key, itemid_t * &item); - void read_item(idx_key_t key, uint32_t count, itemid_t * &item); - BucketNode * first_node; - uint64_t node_cnt; - bool locked; - -}; - -// TODO Hash index does not support partition yet. -class IndexHash : public index_base -{ -public: - RC init(uint64_t bucket_cnt); - RC init(int part_cnt, - table_t * table, - uint64_t bucket_cnt); - void index_delete(); - void index_reset(); - bool index_exist(idx_key_t key); // check if the key exist. - RC index_insert(idx_key_t key, itemid_t * item, int part_id=-1); - RC index_insert_nonunique(idx_key_t key, itemid_t * item, int part_id=-1); - // the following call returns a single item - RC index_read(idx_key_t key, itemid_t * &item, int part_id=-1); - RC index_read(idx_key_t key, int count, itemid_t * &item, int part_id=-1); - RC index_read(idx_key_t key, itemid_t * &item, - int part_id=-1, int thd_id=0); - - // the following call returns a list of items - - // TODO implement index_remove - - -private: - void get_latch(BucketHeader * bucket); - void release_latch(BucketHeader * bucket); - // TODO implement more complex hash function - uint64_t hash(idx_key_t key) { -#if WORKLOAD == YCSB - return (key / g_part_cnt) % _bucket_cnt_per_part; -#else - return key % _bucket_cnt_per_part; -#endif - } - - BucketHeader ** _buckets; - uint64_t _bucket_cnt; - uint64_t _bucket_cnt_per_part; -}; - -#endif diff --git a/contrib/deneva/storage/row.cpp b/contrib/deneva/storage/row.cpp deleted file mode 100644 index b1b60b7a..00000000 --- a/contrib/deneva/storage/row.cpp +++ /dev/null @@ -1,501 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "table.h" -#include "catalog.h" -#include "row.h" -#include "txn.h" - -#include "catalog.h" -#include "global.h" -#include "mem_alloc.h" -#include "row_lock.h" -#include "row_maat.h" -#include "row_mvcc.h" -#include "row_occ.h" -#include "row_ts.h" -#include "row_sundial.h" -#include "row_ssi.h" -#include "row_wsi.h" -#include "row_null.h" -#include "row_silo.h" -#include "mem_alloc.h" -#include "manager.h" - -#define SIM_FULL_ROW true - -RC row_t::init(table_t *host_table, uint64_t part_id, uint64_t row_id) { - part_info = true; - _row_id = row_id; - _part_id = part_id; - this->table = host_table; - Catalog * schema = host_table->get_schema(); - tuple_size = schema->get_tuple_size(); -#if SIM_FULL_ROW - data = (char *) mem_allocator.alloc(sizeof(char) * tuple_size); -#else - data = (char *) mem_allocator.alloc(sizeof(uint64_t) * 1); -#endif - return RCOK; -} - -RC row_t::switch_schema(table_t *host_table) { - this->table = host_table; - return RCOK; -} - -void row_t::init_manager(row_t * row) { -#if MODE==NOCC_MODE || MODE==QRY_ONLY_MODE - return; -#endif - DEBUG_M("row_t::init_manager alloc \n"); -#if CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || CC_ALG == CALVIN - manager = (Row_lock *) mem_allocator.align_alloc(sizeof(Row_lock)); -#elif CC_ALG == TIMESTAMP - manager = (Row_ts *) mem_allocator.align_alloc(sizeof(Row_ts)); -#elif CC_ALG == MVCC - manager = (Row_mvcc *) mem_allocator.align_alloc(sizeof(Row_mvcc)); -#elif CC_ALG == OCC || CC_ALG == BOCC || CC_ALG == FOCC - manager = (Row_occ *) mem_allocator.align_alloc(sizeof(Row_occ)); -#elif CC_ALG == MAAT - manager = (Row_maat *) mem_allocator.align_alloc(sizeof(Row_maat)); -#elif CC_ALG == SUNDIAL - manager = new Row_sundial(this); -#elif CC_ALG == SSI - manager = (Row_ssi *) mem_allocator.align_alloc(sizeof(Row_ssi)); -#elif CC_ALG == WSI - manager = (Row_wsi *) mem_allocator.align_alloc(sizeof(Row_wsi)); -#elif CC_ALG == CNULL - manager = (Row_null *) mem_allocator.align_alloc(sizeof(Row_null)); -#elif CC_ALG == SILO - manager = (Row_silo *) mem_allocator.align_alloc(sizeof(Row_silo)); -#endif - -#if CC_ALG != HSTORE && CC_ALG != HSTORE_SPEC - manager->init(this); -#endif -} - -table_t *row_t::get_table() { return table; } - -Catalog *row_t::get_schema() { return get_table()->get_schema(); } - -const char *row_t::get_table_name() { return get_table()->get_table_name(); }; -uint64_t row_t::get_tuple_size() { return get_schema()->get_tuple_size(); } - -uint64_t row_t::get_field_cnt() { return get_schema()->field_cnt; } - -void row_t::set_value(int id, void * ptr) { - int datasize = get_schema()->get_field_size(id); - int pos = get_schema()->get_field_index(id); - DEBUG("set_value pos %d datasize %d -- %lx\n", pos, datasize, (uint64_t)this); -#if SIM_FULL_ROW - memcpy( &data[pos], ptr, datasize); -#else - char d[tuple_size]; - memcpy( &d[pos], ptr, datasize); -#endif -} - -void row_t::set_value(int id, void * ptr, int size) { - int pos = get_schema()->get_field_index(id); -#if SIM_FULL_ROW - memcpy( &data[pos], ptr, size); -#else - char d[tuple_size]; - memcpy( &d[pos], ptr, size); -#endif -} - -void row_t::set_value(const char * col_name, void * ptr) { - uint64_t id = get_schema()->get_field_id(col_name); - set_value(id, ptr); -} - -SET_VALUE(uint64_t); -SET_VALUE(int64_t); -SET_VALUE(double); -SET_VALUE(UInt32); -SET_VALUE(SInt32); - -GET_VALUE(uint64_t); -GET_VALUE(int64_t); -GET_VALUE(double); -GET_VALUE(UInt32); -GET_VALUE(SInt32); - -char * row_t::get_value(int id) { - int pos __attribute__ ((unused)); - pos = get_schema()->get_field_index(id); - DEBUG("get_value pos %d -- %lx\n",pos,(uint64_t)this); -#if SIM_FULL_ROW - return &data[pos]; -#else - return data; -#endif -} - -char * row_t::get_value(char * col_name) { - uint64_t pos __attribute__ ((unused)); - pos = get_schema()->get_field_index(col_name); -#if SIM_FULL_ROW - return &data[pos]; -#else - return data; -#endif -} - -char *row_t::get_data() { return data; } - -void row_t::set_data(char * data) { - int tuple_size = get_schema()->get_tuple_size(); -#if SIM_FULL_ROW - memcpy(this->data, data, tuple_size); -#else - char d[tuple_size]; - memcpy(d, data, tuple_size); -#endif -} -// copy from the src to this -void row_t::copy(row_t * src) { - assert(src->get_schema() == this->get_schema()); -#if SIM_FULL_ROW - set_data(src->get_data()); -#else - char d[tuple_size]; - set_data(d); -#endif -} - -void row_t::free_row() { - DEBUG_M("row_t::free_row free\n"); -#if SIM_FULL - mem_allocator.free(data, sizeof(char) * get_tuple_size()); -#else - mem_allocator.free(data, sizeof(uint64_t) * 1); -#endif -} - -RC row_t::get_lock(access_t type, TxnManager * txn) { - RC rc = RCOK; -#if CC_ALG == CALVIN - lock_t lt = (type == RD || type == SCAN)? LOCK_SH : LOCK_EX; - rc = this->manager->lock_get(lt, txn); -#endif - return rc; -} - -RC row_t::get_row(access_t type, TxnManager *txn, Access *access) { - RC rc = RCOK; -#if MODE==NOCC_MODE || MODE==QRY_ONLY_MODE - access->data = this; - return rc; -#endif -#if ISOLATION_LEVEL == NOLOCK - access->data = this; - return rc; -#endif - -#if CC_ALG == CNULL - - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - rc = this->manager->access(type,txn); - txn->cur_row->copy(this); - access->data = txn->cur_row; - assert(rc == RCOK); - goto end; -#endif -#if CC_ALG == MAAT - - DEBUG_M("row_t::get_row MAAT alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - rc = this->manager->access(type,txn); - txn->cur_row->copy(this); - - access->data = txn->cur_row; - assert(rc == RCOK); - goto end; -#endif - -#if CC_ALG == SUNDIAL - DEBUG_M("row_t::get_row SUNDIAL alloc \n"); - goto end; -#endif - -#if CC_ALG == WAIT_DIE || CC_ALG == NO_WAIT - //uint64_t thd_id = txn->get_thd_id(); - lock_t lt = (type == RD || type == SCAN) ? LOCK_SH : LOCK_EX; // ! this may be wrong - rc = this->manager->lock_get(lt, txn); - if (rc == RCOK) { - access->data = this; - } else if (rc == Abort) { - } else if (rc == WAIT) { - ASSERT(CC_ALG == WAIT_DIE); - } - goto end; -#elif CC_ALG == TIMESTAMP || CC_ALG == MVCC || CC_ALG == SSI || CC_ALG == WSI - //uint64_t thd_id = txn->get_thd_id(); -// For TIMESTAMP RD, a new copy of the access->data will be returned. - - // for MVCC RD, the version will be returned instead of a copy - // So for MVCC RD-WR, the version should be explicitly copied. - // row_t * newr = NULL; -#if CC_ALG == TIMESTAMP - DEBUG_M("row_t::get_row TIMESTAMP alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), this->get_part_id()); -#endif - - if (type == WR) { - rc = this->manager->access(txn, P_REQ, NULL); - if (rc != RCOK) goto end; - } - if ((type == WR && rc == RCOK) || type == RD || type == SCAN) { - rc = this->manager->access(txn, R_REQ, NULL); - if (rc == RCOK ) { - access->data = txn->cur_row; - } else if (rc == WAIT) { - rc = WAIT; - goto end; - } else if (rc == Abort) { - } - if (rc != Abort) { - assert(access->data->get_data() != NULL); - assert(access->data->get_table() != NULL); - assert(access->data->get_schema() == this->get_schema()); - assert(access->data->get_table_name() != NULL); - } - } - if (rc != Abort && (CC_ALG == MVCC || CC_ALG == SSI || CC_ALG == WSI) && type == WR) { - DEBUG_M("row_t::get_row MVCC alloc \n"); - row_t * newr = (row_t *) mem_allocator.alloc(sizeof(row_t)); - newr->init(this->get_table(), get_part_id()); - newr->copy(access->data); - access->data = newr; - } - goto end; -#elif CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC - // OCC always make a local copy regardless of read or write - DEBUG_M("row_t::get_row OCC alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - rc = this->manager->access(txn, R_REQ); - access->data = txn->cur_row; - goto end; -#elif CC_ALG == SILO - // like OCC, sundial also makes a local copy for each read/write - DEBUG_M("row_t::get_row SILO alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - TsType ts_type = (type == RD)? R_REQ : P_REQ; - rc = this->manager->access(txn, ts_type, txn->cur_row); - access->data = txn->cur_row; - goto end; -#elif CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC || CC_ALG == CALVIN -#if CC_ALG == HSTORE_SPEC - if(txn_table.spec_mode) { - DEBUG_M("row_t::get_row HSTORE_SPEC alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - rc = this->manager->access(txn, R_REQ); - access->data = txn->cur_row; - goto end; - } -#endif - access->data = this; - goto end; -#else - assert(false); -#endif - -end: - return rc; -} - -RC row_t::get_ts(uint64_t &orig_wts, uint64_t &orig_rts) { - RC rc = RCOK; -#if CC_ALG == SUNDIAL - this->manager->get_ts(orig_wts, orig_rts); -#endif - return rc; -} - -RC row_t::get_row(access_t type, TxnManager * txn, row_t *& row, uint64_t &orig_wts, uint64_t &orig_rts) { - RC rc = RCOK; -#if MODE==NOCC_MODE || MODE==QRY_ONLY_MODE - row = this; - return rc; -#endif -#if CC_ALG == SUNDIAL - DEBUG_M("row_t::get_row sundial alloc \n"); - txn->cur_row = (row_t *) mem_allocator.alloc(sizeof(row_t)); - txn->cur_row->init(get_table(), get_part_id()); - rc = this->manager->access(type,txn,row,orig_wts,orig_rts); - txn->cur_row->copy(this); - row = txn->cur_row; - assert(rc == RCOK); -#endif - return rc; -} -// Return call for get_row if waiting -RC row_t::get_row_post_wait(access_t type, TxnManager * txn, row_t *& row) { - RC rc = RCOK; - assert(CC_ALG == WAIT_DIE || CC_ALG == MVCC || CC_ALG == TIMESTAMP || CC_ALG == SUNDIAL || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == TIMESTAMP || CC_ALG == FOCC || CC_ALG == BOCC); -#if CC_ALG == WAIT_DIE - assert(txn->lock_ready); - rc = RCOK; - //ts_t endtime = get_sys_clock(); - row = this; - -#elif CC_ALG == MVCC || CC_ALG == TIMESTAMP || CC_ALG == SUNDIAL || CC_ALG == SSI || CC_ALG == WSI - assert(txn->ts_ready); - //INC_STATS(thd_id, time_wait, t2 - t1); - row = txn->cur_row; - - assert(row->get_data() != NULL); - assert(row->get_table() != NULL); - assert(row->get_schema() == this->get_schema()); - assert(row->get_table_name() != NULL); - if (( CC_ALG == MVCC || CC_ALG == SUNDIAL || CC_ALG == SSI || CC_ALG == WSI) && type == WR) { - DEBUG_M("row_t::get_row_post_wait MVCC alloc \n"); - row_t * newr = (row_t *) mem_allocator.alloc(sizeof(row_t)); - newr->init(this->get_table(), get_part_id()); - - newr->copy(row); - row = newr; - } -#endif - return rc; -} - -// the "row" is the row read out in get_row(). For locking based CC_ALG, -// the "row" is the same as "this". For timestamp based CC_ALG, the -// "row" != "this", and the "row" must be freed. -// For MVCC, the row will simply serve as a version. The version will be -// delete during history cleanup. -// For TIMESTAMP, the row will be explicity deleted at the end of access(). -// (c.f. row_ts.cpp) -uint64_t row_t::return_row(RC rc, access_t type, TxnManager *txn, row_t *row) { -#if MODE==NOCC_MODE || MODE==QRY_ONLY_MODE - return 0; -#endif -#if ISOLATION_LEVEL == NOLOCK - return 0; -#endif - -#if CC_ALG == WAIT_DIE || CC_ALG == NO_WAIT || CC_ALG == CALVIN - assert (row == NULL || row == this || type == XP); - if (CC_ALG != CALVIN && ROLL_BACK && - type == XP) { // recover from previous writes. should not happen w/ Calvin - this->copy(row); - } - this->manager->lock_release(txn); - return 0; -#elif CC_ALG == TIMESTAMP || CC_ALG == MVCC || CC_ALG == SSI || CC_ALG == WSI - // for RD or SCAN or XP, the row should be deleted. - // because all WR should be companied by a RD - // for MVCC RD, the row is not copied, so no need to free. - if (CC_ALG == TIMESTAMP && (type == RD || type == SCAN)) { - row->free_row(); - DEBUG_M("row_t::return_row TIMESTAMP free \n"); - mem_allocator.free(row, sizeof(row_t)); - } - if (type == XP) { - row->free_row(); - DEBUG_M("row_t::return_row XP free \n"); - mem_allocator.free(row, sizeof(row_t)); - this->manager->access(txn, XP_REQ, NULL); - } else if (type == WR) { - assert (type == WR && row != NULL); - assert (row->get_schema() == this->get_schema()); - RC rc = this->manager->access(txn, W_REQ, row); - assert(rc == RCOK); - } - return 0; -#elif CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC - assert (row != NULL); - if (type == WR) manager->write(row, txn->get_end_timestamp()); - row->free_row(); - DEBUG_M("row_t::return_row OCC free \n"); - mem_allocator.free(row, sizeof(row_t)); - manager->release(); - return 0; -#elif CC_ALG == CNULL - assert (row != NULL); - if (rc == Abort) { - manager->abort(type,txn); - } else { - manager->commit(type,txn,row); - } - - row->free_row(); - DEBUG_M("row_t::return_row Maat free \n"); - mem_allocator.free(row, sizeof(row_t)); - return 0; -#elif CC_ALG == MAAT - assert (row != NULL); - if (rc == Abort) { - manager->abort(type,txn); - } else { - manager->commit(type,txn,row); - } - - row->free_row(); - DEBUG_M("row_t::return_row Maat free \n"); - mem_allocator.free(row, sizeof(row_t)); - return 0; -#elif CC_ALG == SUNDIAL - assert (row != NULL); - if (rc == Abort) { - manager->abort(type,txn); - } else { - manager->commit(type,txn,row); - } - - if (type == XP) { - row->free_row(); - DEBUG_M("row_t::return_row XP free \n"); - mem_allocator.free(row, sizeof(row_t)); - } - return 0; - -#elif CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC - assert (row != NULL); - if (ROLL_BACK && type == XP) {// recover from previous writes. - this->copy(row); - } - return 0; -#elif CC_ALG == SILO - assert (row != NULL); - row->free_row(); - DEBUG_M("row_t::return_row XP free \n"); - mem_allocator.free(row, sizeof(row_t)); - return 0; -#else - assert(false); -#endif -} diff --git a/contrib/deneva/storage/row.h b/contrib/deneva/storage/row.h deleted file mode 100644 index b2e3f936..00000000 --- a/contrib/deneva/storage/row.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _ROW_H_ -#define _ROW_H_ - -#include -#include "global.h" - - -#define DECL_SET_VALUE(type) void set_value(int col_id, type value); - -#define SET_VALUE(type) \ - void row_t::set_value(int col_id, type value) { set_value(col_id, &value); } - -#define DECL_GET_VALUE(type) void get_value(int col_id, type &value); - -#define GET_VALUE(type)\ - void row_t::get_value(int col_id, type & value) {\ - int pos = get_schema()->get_field_index(col_id);\ - DEBUG("get_value pos %d -- %lx\n",pos,(uint64_t)this); \ - value = *(type *)&data[pos];\ - } - -class table_t; -class Catalog; -class TxnManager; -class Row_lock; -class Row_mvcc; -class Row_ts; -class Row_occ; -class Row_ssi; -class Row_wsi; -class Row_maat; -class Row_specex; -class Row_sundial; -class Row_si; -class Row_null; -class Row_silo; - -class row_t { -public: - RC init(table_t * host_table, uint64_t part_id, uint64_t row_id = 0); - RC switch_schema(table_t * host_table); - // not every row has a manager - void init_manager(row_t * row); - - table_t * get_table(); - Catalog * get_schema(); - const char * get_table_name(); - uint64_t get_field_cnt(); - uint64_t get_tuple_size(); - uint64_t get_row_id() { return _row_id; }; - - void copy(row_t * src); - - void set_primary_key(uint64_t key) { _primary_key = key; }; - uint64_t get_primary_key() {return _primary_key; }; - uint64_t get_part_id() { return _part_id; }; - - void set_value(int id, void * ptr); - void set_value(int id, void * ptr, int size); - void set_value(const char * col_name, void * ptr); - char * get_value(int id); - char * get_value(char * col_name); - - DECL_SET_VALUE(uint64_t); - DECL_SET_VALUE(int64_t); - DECL_SET_VALUE(double); - DECL_SET_VALUE(UInt32); - DECL_SET_VALUE(SInt32); - - DECL_GET_VALUE(uint64_t); - DECL_GET_VALUE(int64_t); - DECL_GET_VALUE(double); - DECL_GET_VALUE(UInt32); - DECL_GET_VALUE(SInt32); - - - void set_data(char * data); - char * get_data(); - - void free_row(); - - // for concurrency control. can be lock, timestamp etc. - RC get_lock(access_t type, TxnManager * txn); - RC get_ts(uint64_t &orig_wts, uint64_t &orig_rts); - RC get_row(access_t type, TxnManager * txn, row_t *& row, uint64_t &orig_wts, uint64_t &orig_rts); - RC get_row(access_t type, TxnManager *txn, Access *access); - RC get_row_post_wait(access_t type, TxnManager * txn, row_t *& row); - uint64_t return_row(RC rc, access_t type, TxnManager *txn, row_t *row); - void return_row(RC rc, access_t type, TxnManager * txn, row_t * row, uint64_t _min_commit_ts); - - #if CC_ALG == DL_DETECT || CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || CC_ALG == CALVIN - Row_lock * manager; - #elif CC_ALG == TIMESTAMP - Row_ts * manager; - #elif CC_ALG == MVCC - Row_mvcc * manager; - #elif CC_ALG == OCC || CC_ALG == BOCC || CC_ALG == FOCC - Row_occ * manager; - #elif CC_ALG == MAAT - Row_maat * manager; - #elif CC_ALG == SUNDIAL - Row_sundial * manager; - #elif CC_ALG == HSTORE_SPEC - Row_specex * manager; - #elif CC_ALG == AVOID - Row_avoid * manager; - #elif CC_ALG == SSI - Row_ssi * manager; - #elif CC_ALG == WSI - Row_wsi * manager; - #elif CC_ALG == CNULL - Row_null * manager; - #elif CC_ALG == SILO - Row_silo * manager; - #endif - char * data; - int tuple_size; - table_t * table; -private: - // primary key should be calculated from the data stored in the row. - uint64_t _primary_key; - uint64_t _part_id; - bool part_info; - uint64_t _row_id; -}; - -#endif diff --git a/contrib/deneva/storage/table.cpp b/contrib/deneva/storage/table.cpp deleted file mode 100644 index 2e7885fe..00000000 --- a/contrib/deneva/storage/table.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "table.h" -#include "catalog.h" -#include "row.h" -#include "mem_alloc.h" - -void table_t::init(Catalog * schema) { - this->table_name = schema->table_name; - this->table_id = schema->table_id; - this->schema = schema; - cur_tab_size = new uint64_t; - // isolate cur_tab_size with other parameters. - // Because cur_tab_size is frequently updated, causing false - // sharing problems - char * ptr = new char[CL_SIZE*2 + sizeof(uint64_t)]; - cur_tab_size = (uint64_t *) &ptr[CL_SIZE]; -} - -RC table_t::get_new_row(row_t *& row) { - // this function is obsolete. - assert(false); - return RCOK; -} - -// the row is not stored locally. the pointer must be maintained by index structure. -RC table_t::get_new_row(row_t *& row, uint64_t part_id, uint64_t &row_id) { - RC rc = RCOK; - DEBUG_M("table_t::get_new_row alloc\n"); - void * ptr = mem_allocator.alloc(sizeof(row_t)); - assert (ptr != NULL); - - row = (row_t *) ptr; - rc = row->init(this, part_id, row_id); - row->init_manager(row); - - return rc; -} diff --git a/contrib/deneva/storage/table.h b/contrib/deneva/storage/table.h deleted file mode 100644 index 4a8154f3..00000000 --- a/contrib/deneva/storage/table.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TABLE_H_ -#define _TABLE_H_ - -#include "global.h" - -// TODO sequential scan is not supported yet. -// only index access is supported for table. - -class Catalog; -class row_t; - -class table_t -{ -public: - void init(Catalog * schema); - // row lookup should be done with index. But index does not have - // records for new rows. get_new_row returns the pointer to a - // new row. - RC get_new_row(row_t *& row); // this is equivalent to insert() - RC get_new_row(row_t *& row, uint64_t part_id, uint64_t &row_id); - - void delete_row(); // TODO delete_row is not supportet yet - - uint64_t get_table_size() { return *cur_tab_size; }; - Catalog * get_schema() { return schema; }; - const char * get_table_name() { return table_name; }; - uint32_t get_table_id() { return table_id; }; - - Catalog * schema; -private: - const char * table_name; - uint32_t table_id; - uint64_t * cur_tab_size; - char pad[CL_SIZE - sizeof(void *)*3 - sizeof(uint32_t)]; -}; - -#endif diff --git a/contrib/deneva/system/abort_queue.cpp b/contrib/deneva/system/abort_queue.cpp deleted file mode 100644 index 91537381..00000000 --- a/contrib/deneva/system/abort_queue.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "mem_alloc.h" -#include "abort_queue.h" -#include "message.h" -#include "work_queue.h" - -void AbortQueue::init() { pthread_mutex_init(&mtx, NULL); } - -uint64_t AbortQueue::enqueue(uint64_t thd_id, uint64_t txn_id, uint64_t abort_cnt) { - uint64_t starttime = get_sys_clock(); - uint64_t penalty = g_abort_penalty; -#if BACKOFF - penalty = max(penalty * 2^abort_cnt,g_abort_penalty_max); -#endif - penalty += starttime; - //abort_entry * entry = new abort_entry(penalty,txn_id); - DEBUG_M("AbortQueue::enqueue entry alloc\n"); - abort_entry * entry = (abort_entry*)mem_allocator.alloc(sizeof(abort_entry)); - entry->penalty_end = penalty; - entry->txn_id = txn_id; - uint64_t mtx_time_start = get_sys_clock(); - pthread_mutex_lock(&mtx); - INC_STATS(thd_id,mtx[0],get_sys_clock() - mtx_time_start); - DEBUG("AQ Enqueue %ld %f -- %f\n", entry->txn_id, float(penalty - starttime) / BILLION, - simulation->seconds_from_start(starttime)); - INC_STATS(thd_id,abort_queue_penalty,penalty - starttime); - INC_STATS(thd_id,abort_queue_enqueue_cnt,1); - queue.push(entry); - pthread_mutex_unlock(&mtx); - - INC_STATS(thd_id,abort_queue_enqueue_time,get_sys_clock() - starttime); - - return penalty - starttime; -} - -void AbortQueue::process(uint64_t thd_id) { - if (queue.empty()) return; - abort_entry * entry; - uint64_t mtx_time_start = get_sys_clock(); - pthread_mutex_lock(&mtx); - INC_STATS(thd_id,mtx[1],get_sys_clock() - mtx_time_start); - uint64_t starttime = get_sys_clock(); - while(!queue.empty()) { - entry = queue.top(); - if(entry->penalty_end < starttime) { - queue.pop(); - DEBUG("AQ Dequeue %ld %f -- %f\n", entry->txn_id, - float(starttime - entry->penalty_end) / BILLION, - simulation->seconds_from_start(starttime)); - INC_STATS(thd_id,abort_queue_penalty_extra,starttime - entry->penalty_end); - INC_STATS(thd_id,abort_queue_dequeue_cnt,1); - Message * msg = Message::create_message(RTXN); - msg->txn_id = entry->txn_id; - work_queue.enqueue(thd_id,msg,false); - //entry = queue.top(); - DEBUG_M("AbortQueue::dequeue entry free\n"); - mem_allocator.free(entry,sizeof(abort_entry)); - } else { - break; - } - } - pthread_mutex_unlock(&mtx); - - INC_STATS(thd_id,abort_queue_dequeue_time,get_sys_clock() - starttime); - -} - diff --git a/contrib/deneva/system/abort_queue.h b/contrib/deneva/system/abort_queue.h deleted file mode 100644 index 7cd442a4..00000000 --- a/contrib/deneva/system/abort_queue.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _ABORT_QUEUE_H_ -#define _ABORT_QUEUE_H_ - - -#include "global.h" -#include "helper.h" - -struct abort_entry { - uint64_t penalty_end; - uint64_t txn_id; - abort_entry() {} - abort_entry(uint64_t penalty_end, uint64_t txn_id) { - this->penalty_end = penalty_end; - this->txn_id = txn_id; - } -}; - - -struct CompareAbortEntry { - bool operator()(const abort_entry* lhs, const abort_entry* rhs) { - return lhs->penalty_end > rhs->penalty_end; - } -}; - -class AbortQueue { -public: - void init(); - uint64_t enqueue(uint64_t thd_id, uint64_t txn_id, uint64_t abort_cnt); - void process(uint64_t thd_id); -private: - std::priority_queue,CompareAbortEntry> queue; - pthread_mutex_t mtx; -}; - - - -#endif diff --git a/contrib/deneva/system/abort_thread.cpp b/contrib/deneva/system/abort_thread.cpp deleted file mode 100644 index 8f8516c4..00000000 --- a/contrib/deneva/system/abort_thread.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "thread.h" -#include "abort_thread.h" -#include "abort_queue.h" - -void AbortThread::setup() {} - -RC AbortThread::run() { - tsetup(); - printf("Running AbortThread %ld\n",_thd_id); - while (!simulation->is_done()) { - heartbeat(); - abort_queue.process(get_thd_id()); - } - return FINISH; - -} - - diff --git a/contrib/deneva/system/abort_thread.h b/contrib/deneva/system/abort_thread.h deleted file mode 100644 index c2322497..00000000 --- a/contrib/deneva/system/abort_thread.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _ABORTTHREAD_H_ -#define _ABORTTHREAD_H_ - -#include "global.h" -#include "thread.h" -class Workload; - -class AbortThread : public Thread { -public: - RC run(); - void setup(); -}; - -#endif diff --git a/contrib/deneva/system/array.h b/contrib/deneva/system/array.h deleted file mode 100644 index 5a90d20e..00000000 --- a/contrib/deneva/system/array.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _ARR_H_ -#define _ARR_H_ - -#include "global.h" -#include "helper.h" -#include "mem_alloc.h" - -template -class Array { -public: - Array() : items(NULL), capacity(0), count(0) {} - void init(uint64_t size) { - DEBUG_M("Array::init %ld*%ld\n",sizeof(T),size); - items = (T*) mem_allocator.alloc(sizeof(T)*size); - capacity = size; - assert(items); - assert(capacity == size); - count = 0; - } - - void clear() { count = 0; } - - void copy(Array a) { - init(a.size()); - for(uint64_t i = 0; i < a.size(); i++) { - add(a[i]); - } - assert(size() == a.size()); - } - - void append(Array a) { - assert(count + a.size() <= capacity); - for(uint64_t i = 0; i < a.size(); i++) { - add(a[i]); - } - } - - - void release() { - DEBUG_M("Array::release %ld*%ld\n",sizeof(T),capacity); - mem_allocator.free(items,sizeof(T)*capacity); - items = NULL; - count = 0; - capacity = 0; - } - - void add_unique(T item){ - for(uint64_t i = 0; i < count; i++) { - if (items[i] == item) return; - } - add(item); - } - - void add(T item){ - assert(count < capacity); - items[count] = item; - ++count; - } - - void add() { - assert(count < capacity); - ++count; - } - - T get(uint64_t idx) { - assert(idx < count); - return items[idx]; - } - - void set(uint64_t idx, T item) { - assert(idx < count); - items[idx] = item; - } - - bool contains(T item) { - for (uint64_t i = 0; i < count; i++) { - if (items[i] == item) { - return true; - } - } - return false; - } - - uint64_t getPosition(T item) { - for (uint64_t i = 0; i < count; i++) { - if (items[i] == item) { - return i; - } - } - return count; - } - - void swap(uint64_t i, uint64_t j) { - T tmp = items[i]; - items[i] = items[j]; - items[j] = tmp; - } - T operator[](uint64_t idx) { - assert(idx < count); - return items[idx]; - } - uint64_t get_count() {return count;} - uint64_t size() {return count;} - bool is_full() { return count == capacity;} - bool is_empty() { return count == 0;} -private: - T * items; - uint64_t capacity; - uint64_t count; - -}; - - -#endif diff --git a/contrib/deneva/system/calvin_thread.cpp b/contrib/deneva/system/calvin_thread.cpp deleted file mode 100644 index ba995b0f..00000000 --- a/contrib/deneva/system/calvin_thread.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "manager.h" -#include "thread.h" -#include "calvin_thread.h" -#include "txn.h" -#include "wl.h" -#include "query.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "mem_alloc.h" -#include "transport.h" -#include "math.h" -#include "helper.h" -#include "msg_thread.h" -#include "msg_queue.h" -#include "sequencer.h" -#include "logger.h" -#include "message.h" -#include "work_queue.h" - -void CalvinLockThread::setup() {} - -RC CalvinLockThread::run() { - tsetup(); - - RC rc = RCOK; - TxnManager * txn_man; - uint64_t prof_starttime = get_sys_clock(); - uint64_t idle_starttime = 0; - - while(!simulation->is_done()) { - txn_man = NULL; - - Message * msg = work_queue.sched_dequeue(_thd_id); - - if(!msg) { - if (idle_starttime == 0) idle_starttime = get_sys_clock(); - continue; - } - if(idle_starttime > 0) { - INC_STATS(_thd_id,sched_idle_time,get_sys_clock() - idle_starttime); - idle_starttime = 0; - } - - prof_starttime = get_sys_clock(); - assert(msg->get_rtype() == CL_QRY); - assert(msg->get_txn_id() != UINT64_MAX); - - txn_man = - txn_table.get_transaction_manager(get_thd_id(), msg->get_txn_id(), msg->get_batch_id()); - while (!txn_man->unset_ready()) { - } - assert(ISSERVERN(msg->get_return_id())); - txn_man->txn_stats.starttime = get_sys_clock(); - - txn_man->txn_stats.lat_network_time_start = msg->lat_network_time; - txn_man->txn_stats.lat_other_time_start = msg->lat_other_time; - - msg->copy_to_txn(txn_man); - txn_man->register_thread(this); - assert(ISSERVERN(txn_man->return_id)); - - INC_STATS(get_thd_id(),sched_txn_table_time,get_sys_clock() - prof_starttime); - prof_starttime = get_sys_clock(); - - rc = RCOK; - // Acquire locks - if (!txn_man->isRecon()) { - rc = txn_man->acquire_locks(); - } - - if(rc == RCOK) { - work_queue.enqueue(_thd_id,msg,false); - } - txn_man->set_ready(); - - INC_STATS(_thd_id,mtx[33],get_sys_clock() - prof_starttime); - prof_starttime = get_sys_clock(); - } - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} - -void CalvinSequencerThread::setup() {} - -bool CalvinSequencerThread::is_batch_ready() { - bool ready = get_wall_clock() - simulation->last_seq_epoch_time >= g_seq_batch_time_limit; - return ready; -} - -RC CalvinSequencerThread::run() { - tsetup(); - - Message * msg; - uint64_t idle_starttime = 0; - uint64_t prof_starttime = 0; - - while(!simulation->is_done()) { - - prof_starttime = get_sys_clock(); - - if(is_batch_ready()) { - simulation->advance_seq_epoch(); - //last_batchtime = get_wall_clock(); - seq_man.send_next_batch(_thd_id); - } - - INC_STATS(_thd_id,mtx[30],get_sys_clock() - prof_starttime); - prof_starttime = get_sys_clock(); - - msg = work_queue.sequencer_dequeue(_thd_id); - - INC_STATS(_thd_id,mtx[31],get_sys_clock() - prof_starttime); - prof_starttime = get_sys_clock(); - - if(!msg) { - if (idle_starttime == 0) idle_starttime = get_sys_clock(); - continue; - } - if(idle_starttime > 0) { - INC_STATS(_thd_id,seq_idle_time,get_sys_clock() - idle_starttime); - idle_starttime = 0; - } - - switch (msg->get_rtype()) { - case CL_QRY: - // Query from client - DEBUG("SEQ process_txn\n"); - seq_man.process_txn(msg,get_thd_id(),0,0,0,0); - // Don't free message yet - break; - case CALVIN_ACK: - // Ack from server - DEBUG("SEQ process_ack (%ld,%ld) from %ld\n", msg->get_txn_id(), msg->get_batch_id(), - msg->get_return_id()); - seq_man.process_ack(msg,get_thd_id()); - // Free message here - msg->release(); - break; - default: - assert(false); - } - - INC_STATS(_thd_id,mtx[32],get_sys_clock() - prof_starttime); - prof_starttime = get_sys_clock(); - } - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; - -} diff --git a/contrib/deneva/system/calvin_thread.h b/contrib/deneva/system/calvin_thread.h deleted file mode 100644 index 4e525b06..00000000 --- a/contrib/deneva/system/calvin_thread.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _CALVINTHREAD_H_ -#define _CALVINTHREAD_H_ - -#include "global.h" - -class Workload; - -class CalvinLockThread : public Thread { -public: - RC run(); - void setup(); -private: - TxnManager * m_txn; -}; - -class CalvinSequencerThread : public Thread { -public: - RC run(); - void setup(); -private: - bool is_batch_ready(); - uint64_t last_batchtime; -}; - -#endif diff --git a/contrib/deneva/system/client_thread.cpp b/contrib/deneva/system/client_thread.cpp deleted file mode 100644 index 93c15ea4..00000000 --- a/contrib/deneva/system/client_thread.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "thread.h" -#include "client_thread.h" -#include "query.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "client_query.h" -#include "transport.h" -#include "client_txn.h" -#include "msg_thread.h" -#include "msg_queue.h" -#include "wl.h" -#include "message.h" - -void ClientThread::setup() { - if( _thd_id == 0) { - send_init_done_to_all_nodes(); - } -#if LOAD_METHOD == LOAD_RATE - assert(g_load_per_server > 0); - // send ~twice as frequently due to delays in context switching - send_interval = (g_client_thread_cnt * BILLION) / g_load_per_server / 1.8; - printf("Client interval: %ld\n",send_interval); -#endif - -} - -RC ClientThread::run() { - - tsetup(); - printf("Running ClientThread %ld\n",_thd_id); - BaseQuery * m_query; - uint64_t iters = 0; - uint32_t num_txns_sent = 0; - int txns_sent[g_servers_per_client]; - for (uint32_t i = 0; i < g_servers_per_client; ++i) txns_sent[i] = 0; - - run_starttime = get_sys_clock(); - while(!simulation->is_done()) { - heartbeat(); -#if SERVER_GENERATE_QUERIES - break; -#endif - //uint32_t next_node = iters++ % g_node_cnt; - progress_stats(); - int32_t inf_cnt; - #if CC_ALG == BOCC || CC_ALG == FOCC - uint32_t next_node = 0; - #else - uint32_t next_node = (((iters++) * g_client_thread_cnt) + _thd_id )% g_servers_per_client; - #endif - uint32_t next_node_id = next_node + g_server_start_node; - // Just in case... - if (iters == UINT64_MAX) - iters = 0; -#if LOAD_METHOD == LOAD_MAX - #if WORKLOAD != DA - if ((inf_cnt = client_man.inc_inflight(next_node)) < 0) - continue; - #endif - m_query = client_query_queue.get_next_query(next_node,_thd_id); - if(last_send_time > 0) { - INC_STATS(get_thd_id(),cl_send_intv,get_sys_clock() - last_send_time); - } - last_send_time = get_sys_clock(); - simulation->last_da_query_time = get_sys_clock(); -#elif LOAD_METHOD == LOAD_RATE - if ((inf_cnt = client_man.inc_inflight(next_node)) < 0) - continue; - uint64_t gate_time; - while((gate_time = get_sys_clock()) - last_send_time < send_interval) { } - if(last_send_time > 0) { - INC_STATS(get_thd_id(),cl_send_intv,gate_time - last_send_time); - } - last_send_time = gate_time; - m_query = client_query_queue.get_next_query(next_node,_thd_id); -#else - assert(false); -#endif - assert(m_query); - - DEBUG("Client: thread %lu sending query to node: %u, %d, %f\n", - _thd_id, next_node_id,inf_cnt,simulation->seconds_from_start(get_sys_clock())); - - Message * msg = Message::create_message((BaseQuery*)m_query,CL_QRY); - ((ClientQueryMessage*)msg)->client_startts = get_sys_clock(); - msg_queue.enqueue(get_thd_id(),msg,next_node_id); - num_txns_sent++; - txns_sent[next_node]++; - INC_STATS(get_thd_id(),txn_sent_cnt,1); - #if WORKLOAD==DA - delete m_query; - #endif - } - - for (uint64_t l = 0; l < g_servers_per_client; ++l) - printf("Txns sent to node %lu: %d\n", l+g_server_start_node, txns_sent[l]); - - //SET_STATS(get_thd_id(), total_runtime, get_sys_clock() - simulation->run_starttime); - - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} diff --git a/contrib/deneva/system/client_thread.h b/contrib/deneva/system/client_thread.h deleted file mode 100644 index bb1a677d..00000000 --- a/contrib/deneva/system/client_thread.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _CLIENT_THREAD_H_ -#define _CLIENT_THREAD_H_ - -#include "global.h" - -class Workload; - -class ClientThread : public Thread { -public: - RC run(); - void setup(); -private: - uint64_t last_send_time; - uint64_t send_interval; -}; - -#endif diff --git a/contrib/deneva/system/concurrentqueue.h b/contrib/deneva/system/concurrentqueue.h deleted file mode 100644 index 7cf7fe5b..00000000 --- a/contrib/deneva/system/concurrentqueue.h +++ /dev/null @@ -1,3774 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Provides a C++11 implementation of a multi-producer, multi-consumer lock-free queue. -// An overview, including benchmark results, is provided here: -// http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queue-for-c++ -// The full design is also described in excruciating detail at: -// http://moodycamel.com/blog/2014/detailed-design-of-a-lock-free-queue - -// Simplified BSD license: -// Copyright (c) 2013-2016, Cameron Desrochers. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// - Redistributions in binary form must reproduce the above copyright notice, this list of -// conditions and the following disclaimer in the documentation and/or other materials -// provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -// TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#pragma once - -#if defined(__GNUC__) -// Disable -Wconversion warnings (spuriously triggered when Traits::size_t and -// Traits::index_t are set to < 32 bits, causing integer promotion, causing warnings -// upon assigning any computed values) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" - -#ifdef MCDBGQ_USE_RELACY -#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" -#endif -#endif - -#ifdef MCDBGQ_USE_RELACY -#include "relacy/relacy_std.hpp" -#include "relacy_shims.h" -// We only use malloc/free anyway, and the delete macro messes up `= delete` method declarations. -// We'll override the default trait malloc ourselves without a macro. -#undef new -#undef delete -#undef malloc -#undef free -#else -#include // Requires C++11. Sorry VS2010. -#include -#endif -#include -#include -#include -#include -#include -#include -#include // for CHAR_BIT -#include -#include // for __WINPTHREADS_VERSION if on MinGW-w64 w/ POSIX threading - -// Platform-specific definitions of a numeric thread ID type and an invalid value -#if defined(MCDBGQ_USE_RELACY) -namespace moodycamel { -namespace details { - typedef std::uint32_t thread_id_t; - static const thread_id_t invalid_thread_id = 0xFFFFFFFFU; - static const thread_id_t invalid_thread_id2 = 0xFFFFFFFEU; - static inline thread_id_t thread_id() { return rl::thread_index(); } -} -} -#elif defined(_WIN32) || defined(__WINDOWS__) || defined(__WIN32__) -// No sense pulling in windows.h in a header, we'll manually declare the function -// we use and rely on backwards-compatibility for this not to break -extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(void); -namespace moodycamel { -namespace details { -static_assert(sizeof(unsigned long) == sizeof(std::uint32_t), - "Expected size of unsigned long to be 32 bits on Windows"); - typedef std::uint32_t thread_id_t; -static const thread_id_t invalid_thread_id = - 0; // See http://blogs.msdn.com/b/oldnewthing/archive/2004/02/23/78395.aspx -static const thread_id_t invalid_thread_id2 = - 0xFFFFFFFFU; // Not technically guaranteed to be invalid, but is never used in practice. Note - // that all Win32 thread IDs are presently multiples of 4. - static inline thread_id_t thread_id() { return static_cast(::GetCurrentThreadId()); } -} -} -#else -// Use a nice trick from this answer: http://stackoverflow.com/a/8438730/21475 -// In order to get a numeric thread ID in a platform-independent way, we use a thread-local -// static variable's address as a thread identifier :-) -#if defined(__GNUC__) || defined(__INTEL_COMPILER) -#define MOODYCAMEL_THREADLOCAL __thread -#elif defined(_MSC_VER) -#define MOODYCAMEL_THREADLOCAL __declspec(thread) -#else -// Assume C++11 compliant compiler -#define MOODYCAMEL_THREADLOCAL thread_local -#endif -namespace moodycamel { -namespace details { - typedef std::uintptr_t thread_id_t; - static const thread_id_t invalid_thread_id = 0; // Address can't be nullptr -static const thread_id_t invalid_thread_id2 = - 1; // Member accesses off a null pointer are also generally invalid. Plus it's not aligned. -static inline thread_id_t thread_id() { - static MOODYCAMEL_THREADLOCAL int x; - return reinterpret_cast(&x); -} -} -} -#endif - -// Exceptions -#ifndef MOODYCAMEL_EXCEPTIONS_ENABLED -#if (defined(_MSC_VER) && defined(_CPPUNWIND)) || (defined(__GNUC__) && defined(__EXCEPTIONS)) || \ - (!defined(_MSC_VER) && !defined(__GNUC__)) -#define MOODYCAMEL_EXCEPTIONS_ENABLED -#define MOODYCAMEL_TRY try -#define MOODYCAMEL_CATCH(...) catch(__VA_ARGS__) -#define MOODYCAMEL_RETHROW throw -#define MOODYCAMEL_THROW(expr) throw (expr) -#else -#define MOODYCAMEL_TRY if (true) -#define MOODYCAMEL_CATCH(...) else if (false) -#define MOODYCAMEL_RETHROW -#define MOODYCAMEL_THROW(expr) -#endif -#endif - -#ifndef MOODYCAMEL_NOEXCEPT -#if !defined(MOODYCAMEL_EXCEPTIONS_ENABLED) -#define MOODYCAMEL_NOEXCEPT -#define MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr) true -#define MOODYCAMEL_NOEXCEPT_ASSIGN(type, valueType, expr) true -#elif defined(_MSC_VER) && defined(_NOEXCEPT) && _MSC_VER < 1800 -// VS2012's std::is_nothrow_[move_]constructible is broken and returns true when it shouldn't :-( -// We have to assume *all* non-trivial constructors may throw on VS2012! -#define MOODYCAMEL_NOEXCEPT _NOEXCEPT -#define MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr) \ - (std::is_rvalue_reference::value&& std::is_move_constructible::value \ - ? std::is_trivially_move_constructible::value \ - : std::is_trivially_copy_constructible::value) -#define MOODYCAMEL_NOEXCEPT_ASSIGN(type, valueType, expr) \ - ((std::is_rvalue_reference::value&& std::is_move_assignable::value \ - ? std::is_trivially_move_assignable::value || \ - std::is_nothrow_move_assignable::value \ - : std::is_trivially_copy_assignable::value || \ - std::is_nothrow_copy_assignable::value) && \ - MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr)) -#elif defined(_MSC_VER) && defined(_NOEXCEPT) && _MSC_VER < 1900 -#define MOODYCAMEL_NOEXCEPT _NOEXCEPT -#define MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr) \ - (std::is_rvalue_reference::value&& std::is_move_constructible::value \ - ? std::is_trivially_move_constructible::value || \ - std::is_nothrow_move_constructible::value \ - : std::is_trivially_copy_constructible::value || \ - std::is_nothrow_copy_constructible::value) -#define MOODYCAMEL_NOEXCEPT_ASSIGN(type, valueType, expr) \ - ((std::is_rvalue_reference::value&& std::is_move_assignable::value \ - ? std::is_trivially_move_assignable::value || \ - std::is_nothrow_move_assignable::value \ - : std::is_trivially_copy_assignable::value || \ - std::is_nothrow_copy_assignable::value) && \ - MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr)) -#else -#define MOODYCAMEL_NOEXCEPT noexcept -#define MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr) noexcept(expr) -#define MOODYCAMEL_NOEXCEPT_ASSIGN(type, valueType, expr) noexcept(expr) -#endif -#endif - -#ifndef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED -#ifdef MCDBGQ_USE_RELACY -#define MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED -#else -//// VS2013 doesn't support `thread_local`, and MinGW-w64 w/ POSIX threading has a crippling bug: -///http://sourceforge.net/p/mingw-w64/bugs/445 -//// g++ <=4.7 doesn't support thread_local either -//#if (!defined(_MSC_VER) || _MSC_VER >= 1900) && (!defined(__MINGW32__) && !defined(__MINGW64__) || -//!defined(__WINPTHREADS_VERSION)) && (!defined(__GNUC__) || __GNUC__ > 4 || (__GNUC__ == 4 && -//__GNUC_MINOR__ >= 8)) -//// Assume `thread_local` is fully supported in all other C++11 compilers/runtimes -//#define MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED -//#endif -#endif -#endif - -// VS2012 doesn't support deleted functions. -// In this case, we declare the function normally but don't define it. A link error will be -// generated if the function is called. -#ifndef MOODYCAMEL_DELETE_FUNCTION -#if defined(_MSC_VER) && _MSC_VER < 1800 -#define MOODYCAMEL_DELETE_FUNCTION -#else -#define MOODYCAMEL_DELETE_FUNCTION = delete -#endif -#endif - -// Compiler-specific likely/unlikely hints -namespace moodycamel { -namespace details { -#if defined(__GNUC__) - inline bool likely(bool x) { return __builtin_expect((x), true); } - inline bool unlikely(bool x) { return __builtin_expect((x), false); } -#else - inline bool likely(bool x) { return x; } - inline bool unlikely(bool x) { return x; } -#endif -} -} - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG -#include "internal/concurrentqueue_internal_debug.h" -#endif - -namespace moodycamel { -namespace details { - template - struct const_numeric_max { - static_assert(std::is_integral::value, "const_numeric_max can only be used with integers"); - static const T value = std::numeric_limits::is_signed - ? (static_cast(1) << (sizeof(T) * CHAR_BIT - 1)) - static_cast(1) - : static_cast(-1); - }; -} - -// Default traits for the ConcurrentQueue. To change some of the -// traits without re-implementing all of them, inherit from this -// struct and shadow the declarations you wish to be different; -// since the traits are used as a template type parameter, the -// shadowed declarations will be used where defined, and the defaults -// otherwise. -struct ConcurrentQueueDefaultTraits { - // General-purpose size type. std::size_t is strongly recommended. - typedef std::size_t size_t; - - // The type used for the enqueue and dequeue indices. Must be at least as - // large as size_t. Should be significantly larger than the number of elements - // you expect to hold at once, especially if you have a high turnover rate; - // for example, on 32-bit x86, if you expect to have over a hundred million - // elements or pump several million elements through your queue in a very - // short space of time, using a 32-bit type *may* trigger a race condition. - // A 64-bit int type is recommended in that case, and in practice will - // prevent a race condition no matter the usage of the queue. Note that - // whether the queue is lock-free with a 64-int type depends on the whether - // std::atomic is lock-free, which is platform-specific. - typedef std::size_t index_t; - - // Internally, all elements are enqueued and dequeued from multi-element - // blocks; this is the smallest controllable unit. If you expect few elements - // but many producers, a smaller block size should be favoured. For few producers - // and/or many elements, a larger block size is preferred. A sane default - // is provided. Must be a power of 2. - static const size_t BLOCK_SIZE = 32; - - // For explicit producers (i.e. when using a producer token), the block is - // checked for being empty by iterating through a list of flags, one per element. - // For large block sizes, this is too inefficient, and switching to an atomic - // counter-based approach is faster. The switch is made for block sizes strictly - // larger than this threshold. - static const size_t EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD = 32; - - // How many full blocks can be expected for a single explicit producer? This should - // reflect that number's maximum for optimal performance. Must be a power of 2. - static const size_t EXPLICIT_INITIAL_INDEX_SIZE = 32; - - // How many full blocks can be expected for a single implicit producer? This should - // reflect that number's maximum for optimal performance. Must be a power of 2. - static const size_t IMPLICIT_INITIAL_INDEX_SIZE = 32; - - // The initial size of the hash table mapping thread IDs to implicit producers. - // Note that the hash is resized every time it becomes half full. - // Must be a power of two, and either 0 or at least 1. If 0, implicit production - // (using the enqueue methods without an explicit producer token) is disabled. - static const size_t INITIAL_IMPLICIT_PRODUCER_HASH_SIZE = 32; - - // Controls the number of items that an explicit consumer (i.e. one with a token) - // must consume before it causes all consumers to rotate and move on to the next - // internal queue. - static const std::uint32_t EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE = 256; - - // The maximum number of elements (inclusive) that can be enqueued to a sub-queue. - // Enqueue operations that would cause this limit to be surpassed will fail. Note - // that this limit is enforced at the block level (for performance reasons), i.e. - // it's rounded up to the nearest block size. - static const size_t MAX_SUBQUEUE_SIZE = details::const_numeric_max::value; - - -#ifndef MCDBGQ_USE_RELACY - // Memory allocation can be customized if needed. - // malloc should return nullptr on failure, and handle alignment like std::malloc. -#if defined(malloc) || defined(free) - // Gah, this is 2016, stop defining macros that break standard code already! - // Work around malloc/free being special macros: - static inline void* WORKAROUND_malloc(size_t size) { return malloc(size); } - static inline void WORKAROUND_free(void* ptr) { return free(ptr); } - static inline void* (malloc)(size_t size) { return WORKAROUND_malloc(size); } - static inline void (free)(void* ptr) { return WORKAROUND_free(ptr); } -#else - static inline void* malloc(size_t size) { return std::malloc(size); } - static inline void free(void* ptr) { return std::free(ptr); } -#endif -#else - // Debug versions when running under the Relacy race detector (ignore - // these in user code) - static inline void* malloc(size_t size) { return rl::rl_malloc(size, $); } - static inline void free(void* ptr) { return rl::rl_free(ptr, $); } -#endif -}; - - -// When producing or consuming many elements, the most efficient way is to: -// 1) Use one of the bulk-operation methods of the queue with a token -// 2) Failing that, use the bulk-operation methods without a token -// 3) Failing that, create a token and use that with the single-item methods -// 4) Failing that, use the single-parameter methods of the queue -// Having said that, don't create tokens willy-nilly -- ideally there should be -// a maximum of one token per thread (of each kind). -struct ProducerToken; -struct ConsumerToken; - -template -class ConcurrentQueue; -template -class BlockingConcurrentQueue; -class ConcurrentQueueTests; - -namespace details { -struct ConcurrentQueueProducerTypelessBase { - ConcurrentQueueProducerTypelessBase* next; - std::atomic inactive; - ProducerToken* token; - - ConcurrentQueueProducerTypelessBase() : inactive(false), token(nullptr) {} - }; - -template -struct _hash_32_or_64 { - static inline std::uint32_t hash(std::uint32_t h) { - // MurmurHash3 finalizer -- see - // https://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp - // Since the thread ID is already unique, all we really want to do is propagate that - // uniqueness evenly across all the bits, so that we can use a subset of the bits while - // reducing collisions significantly - h ^= h >> 16; - h *= 0x85ebca6b; - h ^= h >> 13; - h *= 0xc2b2ae35; - return h ^ (h >> 16); - } - }; -template <> -struct _hash_32_or_64<1> { - static inline std::uint64_t hash(std::uint64_t h) { - h ^= h >> 33; - h *= 0xff51afd7ed558ccd; - h ^= h >> 33; - h *= 0xc4ceb9fe1a85ec53; - return h ^ (h >> 33); - } - }; -template -struct hash_32_or_64 : public _hash_32_or_64<(size > 4)> {}; - -static inline size_t hash_thread_id(thread_id_t id) { - static_assert(sizeof(thread_id_t) <= 8, - "Expected a platform where thread IDs are at most 64-bit values"); - return static_cast(hash_32_or_64::hash(id)); - } - - template -static inline bool circular_less_than(T a, T b) { -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4554) -#endif - static_assert(std::is_integral::value && !std::numeric_limits::is_signed, - "circular_less_than is intended to be used only with unsigned integer types"); - return static_cast(a - b) > - static_cast(static_cast(1) << static_cast(sizeof(T) * CHAR_BIT - 1)); -#ifdef _MSC_VER -#pragma warning(pop) -#endif - } - - template -static inline char* align_for(char* ptr) { - const std::size_t alignment = std::alignment_of::value; - return ptr + (alignment - (reinterpret_cast(ptr) % alignment)) % alignment; - } - - template -static inline T ceil_to_pow_2(T x) { - static_assert(std::is_integral::value && !std::numeric_limits::is_signed, - "ceil_to_pow_2 is intended to be used only with unsigned integer types"); - - // Adapted from http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 - --x; - x |= x >> 1; - x |= x >> 2; - x |= x >> 4; - for (std::size_t i = 1; i < sizeof(T); i <<= 1) { - x |= x >> (i << 3); - } - ++x; - return x; - } - - template -static inline void swap_relaxed(std::atomic& left, std::atomic& right) { - T temp = std::move(left.load(std::memory_order_relaxed)); - left.store(std::move(right.load(std::memory_order_relaxed)), std::memory_order_relaxed); - right.store(std::move(temp), std::memory_order_relaxed); - } - - template -static inline T const& nomove(T const& x) { - return x; - } - - template -struct nomove_if { - template - static inline T const& eval(T const& x) { - return x; - } - }; - - template<> -struct nomove_if { - template - static inline auto eval(U&& x) -> decltype(std::forward(x)) { - return std::forward(x); - } - }; - - template -static inline auto deref_noexcept(It& it) MOODYCAMEL_NOEXCEPT -> decltype(*it) { - return *it; - } - -#if defined(__clang__) || !defined(__GNUC__) || __GNUC__ > 4 || \ - (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) -template -struct is_trivially_destructible : std::is_trivially_destructible {}; -#else -template -struct is_trivially_destructible : std::has_trivial_destructor {}; -#endif - -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED -#ifdef MCDBGQ_USE_RELACY - typedef RelacyThreadExitListener ThreadExitListener; - typedef RelacyThreadExitNotifier ThreadExitNotifier; -#else -struct ThreadExitListener { - typedef void (*callback_t)(void*); - callback_t callback; - void* userData; - - ThreadExitListener* next; // reserved for use by the ThreadExitNotifier - }; - -class ThreadExitNotifier { - public: - static void subscribe(ThreadExitListener* listener) { - auto& tlsInst = instance(); - listener->next = tlsInst.tail; - tlsInst.tail = listener; - } - - static void unsubscribe(ThreadExitListener* listener) { - auto& tlsInst = instance(); - ThreadExitListener** prev = &tlsInst.tail; - for (auto ptr = tlsInst.tail; ptr != nullptr; ptr = ptr->next) { - if (ptr == listener) { - *prev = ptr->next; - break; - } - prev = &ptr->next; - } - } - - private: - ThreadExitNotifier() : tail(nullptr) { } - ThreadExitNotifier(ThreadExitNotifier const&) MOODYCAMEL_DELETE_FUNCTION; - ThreadExitNotifier& operator=(ThreadExitNotifier const&) MOODYCAMEL_DELETE_FUNCTION; - - ~ThreadExitNotifier() { - // This thread is about to exit, let everyone know! - assert(this == &instance() && - "If this assert fails, you likely have a buggy compiler! Change the preprocessor " - "conditions such that MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED is no longer defined."); - for (auto ptr = tail; ptr != nullptr; ptr = ptr->next) { - ptr->callback(ptr->userData); - } - } - - // Thread-local - static inline ThreadExitNotifier& instance() { - static thread_local ThreadExitNotifier notifier; - return notifier; - } - - private: - ThreadExitListener* tail; - }; -#endif -#endif - -template -struct static_is_lock_free_num { - enum { - value = 0 - }; -}; -template <> -struct static_is_lock_free_num { - enum { - value = ATOMIC_CHAR_LOCK_FREE - }; -}; -template <> -struct static_is_lock_free_num { - enum { - value = ATOMIC_SHORT_LOCK_FREE - }; -}; -template <> -struct static_is_lock_free_num { - enum { - value = ATOMIC_INT_LOCK_FREE - }; -}; -template <> -struct static_is_lock_free_num { - enum { - value = ATOMIC_LONG_LOCK_FREE - }; -}; -template <> -struct static_is_lock_free_num { - enum { - value = ATOMIC_LLONG_LOCK_FREE - }; -}; -template -struct static_is_lock_free : static_is_lock_free_num::type> {}; -template <> -struct static_is_lock_free { - enum { - value = ATOMIC_BOOL_LOCK_FREE - }; -}; -template -struct static_is_lock_free { - enum { - value = ATOMIC_POINTER_LOCK_FREE - }; -}; -} - -struct ProducerToken { - template - explicit ProducerToken(ConcurrentQueue& queue); - - template - explicit ProducerToken(BlockingConcurrentQueue& queue); - - explicit ProducerToken(ProducerToken&& other) MOODYCAMEL_NOEXCEPT : producer(other.producer) { - other.producer = nullptr; - if (producer != nullptr) { - producer->token = this; - } - } - - inline ProducerToken& operator=(ProducerToken&& other) MOODYCAMEL_NOEXCEPT { - swap(other); - return *this; - } - - void swap(ProducerToken& other) MOODYCAMEL_NOEXCEPT { - std::swap(producer, other.producer); - if (producer != nullptr) { - producer->token = this; - } - if (other.producer != nullptr) { - other.producer->token = &other; - } - } - - // A token is always valid unless: - // 1) Memory allocation failed during construction - // 2) It was moved via the move constructor - // (Note: assignment does a swap, leaving both potentially valid) - // 3) The associated queue was destroyed - // Note that if valid() returns true, that only indicates - // that the token is valid for use with a specific queue, - // but not which one; that's up to the user to track. - inline bool valid() const { return producer != nullptr; } - - ~ProducerToken() { - if (producer != nullptr) { - producer->token = nullptr; - producer->inactive.store(true, std::memory_order_release); - } - } - - // Disable copying and assignment - ProducerToken(ProducerToken const&) MOODYCAMEL_DELETE_FUNCTION; - ProducerToken& operator=(ProducerToken const&) MOODYCAMEL_DELETE_FUNCTION; - -private: - template - friend class ConcurrentQueue; - friend class ConcurrentQueueTests; - -protected: - details::ConcurrentQueueProducerTypelessBase* producer; -}; - -struct ConsumerToken { - template - explicit ConsumerToken(ConcurrentQueue& q); - - template - explicit ConsumerToken(BlockingConcurrentQueue& q); - - explicit ConsumerToken(ConsumerToken&& other) MOODYCAMEL_NOEXCEPT - : initialOffset(other.initialOffset), - lastKnownGlobalOffset(other.lastKnownGlobalOffset), - itemsConsumedFromCurrent(other.itemsConsumedFromCurrent), - currentProducer(other.currentProducer), - desiredProducer(other.desiredProducer) {} - - inline ConsumerToken& operator=(ConsumerToken&& other) MOODYCAMEL_NOEXCEPT { - swap(other); - return *this; - } - - void swap(ConsumerToken& other) MOODYCAMEL_NOEXCEPT { - std::swap(initialOffset, other.initialOffset); - std::swap(lastKnownGlobalOffset, other.lastKnownGlobalOffset); - std::swap(itemsConsumedFromCurrent, other.itemsConsumedFromCurrent); - std::swap(currentProducer, other.currentProducer); - std::swap(desiredProducer, other.desiredProducer); - } - - // Disable copying and assignment - ConsumerToken(ConsumerToken const&) MOODYCAMEL_DELETE_FUNCTION; - ConsumerToken& operator=(ConsumerToken const&) MOODYCAMEL_DELETE_FUNCTION; - -private: - template - friend class ConcurrentQueue; - friend class ConcurrentQueueTests; - -private: // but shared with ConcurrentQueue - std::uint32_t initialOffset; - std::uint32_t lastKnownGlobalOffset; - std::uint32_t itemsConsumedFromCurrent; - details::ConcurrentQueueProducerTypelessBase* currentProducer; - details::ConcurrentQueueProducerTypelessBase* desiredProducer; -}; - -// Need to forward-declare this swap because it's in a namespace. -// See -// http://stackoverflow.com/questions/4492062/why-does-a-c-friend-class-need-a-forward-declaration-only-in-other-namespaces -template -inline void swap(typename ConcurrentQueue::ImplicitProducerKVP& a, - typename ConcurrentQueue::ImplicitProducerKVP& b) MOODYCAMEL_NOEXCEPT; - -template -class ConcurrentQueue { -public: - typedef ::moodycamel::ProducerToken producer_token_t; - typedef ::moodycamel::ConsumerToken consumer_token_t; - - typedef typename Traits::index_t index_t; - typedef typename Traits::size_t size_t; - - static const size_t BLOCK_SIZE = static_cast(Traits::BLOCK_SIZE); - static const size_t EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD = - static_cast(Traits::EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD); - static const size_t EXPLICIT_INITIAL_INDEX_SIZE = - static_cast(Traits::EXPLICIT_INITIAL_INDEX_SIZE); - static const size_t IMPLICIT_INITIAL_INDEX_SIZE = - static_cast(Traits::IMPLICIT_INITIAL_INDEX_SIZE); - static const size_t INITIAL_IMPLICIT_PRODUCER_HASH_SIZE = - static_cast(Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE); - static const std::uint32_t EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE = - static_cast(Traits::EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE); -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning( \ - disable : 4307) // + integral constant overflow (that's what the ternary expression is for!) -#pragma warning(disable: 4309) // static_cast: Truncation of constant value -#endif - static const size_t MAX_SUBQUEUE_SIZE = - (details::const_numeric_max::value - static_cast(Traits::MAX_SUBQUEUE_SIZE) < - BLOCK_SIZE) - ? details::const_numeric_max::value - : ((static_cast(Traits::MAX_SUBQUEUE_SIZE) + (BLOCK_SIZE - 1)) / BLOCK_SIZE * - BLOCK_SIZE); -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - static_assert(!std::numeric_limits::is_signed && std::is_integral::value, - "Traits::size_t must be an unsigned integral type"); - static_assert(!std::numeric_limits::is_signed && std::is_integral::value, - "Traits::index_t must be an unsigned integral type"); - static_assert(sizeof(index_t) >= sizeof(size_t), - "Traits::index_t must be at least as wide as Traits::size_t"); - static_assert((BLOCK_SIZE > 1) && !(BLOCK_SIZE & (BLOCK_SIZE - 1)), - "Traits::BLOCK_SIZE must be a power of 2 (and at least 2)"); - static_assert( - (EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD > 1) && - !(EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD & (EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD - 1)), - "Traits::EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD must be a power of 2 (and greater than 1)"); - static_assert((EXPLICIT_INITIAL_INDEX_SIZE > 1) && - !(EXPLICIT_INITIAL_INDEX_SIZE & (EXPLICIT_INITIAL_INDEX_SIZE - 1)), - "Traits::EXPLICIT_INITIAL_INDEX_SIZE must be a power of 2 (and greater than 1)"); - static_assert((IMPLICIT_INITIAL_INDEX_SIZE > 1) && - !(IMPLICIT_INITIAL_INDEX_SIZE & (IMPLICIT_INITIAL_INDEX_SIZE - 1)), - "Traits::IMPLICIT_INITIAL_INDEX_SIZE must be a power of 2 (and greater than 1)"); - static_assert((INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) || - !(INITIAL_IMPLICIT_PRODUCER_HASH_SIZE & - (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE - 1)), - "Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE must be a power of 2"); - static_assert(INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0 || - INITIAL_IMPLICIT_PRODUCER_HASH_SIZE >= 1, - "Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE must be at least 1 (or 0 to disable " - "implicit enqueueing)"); - -public: - // Creates a queue with at least `capacity` element slots; note that the - // actual number of elements that can be inserted without additional memory - // allocation depends on the number of producers and the block size (e.g. if - // the block size is equal to `capacity`, only a single block will be allocated - // up-front, which means only a single producer will be able to enqueue elements - // without an extra allocation -- blocks aren't shared between producers). - // This method is not thread safe -- it is up to the user to ensure that the - // queue is fully constructed before it starts being used by other threads (this - // includes making the memory effects of construction visible, possibly with a - // memory barrier). - explicit ConcurrentQueue(size_t capacity = 6 * BLOCK_SIZE) - : producerListTail(nullptr), - producerCount(0), - initialBlockPoolIndex(0), - nextExplicitConsumerId(0), - globalExplicitConsumerOffset(0) { - implicitProducerHashResizeInProgress.clear(std::memory_order_relaxed); - populate_initial_implicit_producer_hash(); - populate_initial_block_list(capacity / BLOCK_SIZE + - ((capacity & (BLOCK_SIZE - 1)) == 0 ? 0 : 1)); - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - // Track all the producers using a fully-resolved typed list for - // each kind; this makes it possible to debug them starting from - // the root queue object (otherwise wacky casts are needed that - // don't compile in the debugger's expression evaluator). - explicitProducers.store(nullptr, std::memory_order_relaxed); - implicitProducers.store(nullptr, std::memory_order_relaxed); -#endif - } - - // Computes the correct amount of pre-allocated blocks for you based - // on the minimum number of elements you want available at any given - // time, and the maximum concurrent number of each type of producer. - ConcurrentQueue(size_t minCapacity, size_t maxExplicitProducers, size_t maxImplicitProducers) - : producerListTail(nullptr), - producerCount(0), - initialBlockPoolIndex(0), - nextExplicitConsumerId(0), - globalExplicitConsumerOffset(0) { - implicitProducerHashResizeInProgress.clear(std::memory_order_relaxed); - populate_initial_implicit_producer_hash(); - size_t blocks = - ((((minCapacity + BLOCK_SIZE - 1) / BLOCK_SIZE) - 1) * (maxExplicitProducers + 1) + - 2 * (maxExplicitProducers + maxImplicitProducers)) * - BLOCK_SIZE; - populate_initial_block_list(blocks); - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - explicitProducers.store(nullptr, std::memory_order_relaxed); - implicitProducers.store(nullptr, std::memory_order_relaxed); -#endif - } - - // Note: The queue should not be accessed concurrently while it's - // being deleted. It's up to the user to synchronize this. - // This method is not thread safe. - ~ConcurrentQueue() { - // Destroy producers - auto ptr = producerListTail.load(std::memory_order_relaxed); - while (ptr != nullptr) { - auto next = ptr->next_prod(); - if (ptr->token != nullptr) { - ptr->token->producer = nullptr; - } - destroy(ptr); - ptr = next; - } - - // Destroy implicit producer hash tables - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE != 0) { - auto hash = implicitProducerHash.load(std::memory_order_relaxed); - while (hash != nullptr) { - auto prev = hash->prev; - if (prev != - nullptr) { // The last hash is part of this object and was not allocated dynamically - for (size_t i = 0; i != hash->capacity; ++i) { - hash->entries[i].~ImplicitProducerKVP(); - } - hash->~ImplicitProducerHash(); - (Traits::free)(hash); - } - hash = prev; - } - } - - // Destroy global free list - auto block = freeList.head_unsafe(); - while (block != nullptr) { - auto next = block->freeListNext.load(std::memory_order_relaxed); - if (block->dynamicallyAllocated) { - destroy(block); - } - block = next; - } - - // Destroy initial free list - destroy_array(initialBlockPool, initialBlockPoolSize); - } - - // Disable copying and copy assignment - ConcurrentQueue(ConcurrentQueue const&) MOODYCAMEL_DELETE_FUNCTION; - ConcurrentQueue& operator=(ConcurrentQueue const&) MOODYCAMEL_DELETE_FUNCTION; - - // Moving is supported, but note that it is *not* a thread-safe operation. - // Nobody can use the queue while it's being moved, and the memory effects - // of that move must be propagated to other threads before they can use it. - // Note: When a queue is moved, its tokens are still valid but can only be - // used with the destination queue (i.e. semantically they are moved along - // with the queue itself). - ConcurrentQueue(ConcurrentQueue&& other) MOODYCAMEL_NOEXCEPT - : producerListTail(other.producerListTail.load(std::memory_order_relaxed)), - producerCount(other.producerCount.load(std::memory_order_relaxed)), - initialBlockPoolIndex(other.initialBlockPoolIndex.load(std::memory_order_relaxed)), - initialBlockPool(other.initialBlockPool), - initialBlockPoolSize(other.initialBlockPoolSize), - freeList(std::move(other.freeList)), - nextExplicitConsumerId(other.nextExplicitConsumerId.load(std::memory_order_relaxed)), - globalExplicitConsumerOffset( - other.globalExplicitConsumerOffset.load(std::memory_order_relaxed)) { - // Move the other one into this, and leave the other one as an empty queue - implicitProducerHashResizeInProgress.clear(std::memory_order_relaxed); - populate_initial_implicit_producer_hash(); - swap_implicit_producer_hashes(other); - - other.producerListTail.store(nullptr, std::memory_order_relaxed); - other.producerCount.store(0, std::memory_order_relaxed); - other.nextExplicitConsumerId.store(0, std::memory_order_relaxed); - other.globalExplicitConsumerOffset.store(0, std::memory_order_relaxed); - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - explicitProducers.store(other.explicitProducers.load(std::memory_order_relaxed), - std::memory_order_relaxed); - other.explicitProducers.store(nullptr, std::memory_order_relaxed); - implicitProducers.store(other.implicitProducers.load(std::memory_order_relaxed), - std::memory_order_relaxed); - other.implicitProducers.store(nullptr, std::memory_order_relaxed); -#endif - - other.initialBlockPoolIndex.store(0, std::memory_order_relaxed); - other.initialBlockPoolSize = 0; - other.initialBlockPool = nullptr; - - reown_producers(); - } - - inline ConcurrentQueue& operator=(ConcurrentQueue&& other) MOODYCAMEL_NOEXCEPT { - return swap_internal(other); - } - - // Swaps this queue's state with the other's. Not thread-safe. - // Swapping two queues does not invalidate their tokens, however - // the tokens that were created for one queue must be used with - // only the swapped queue (i.e. the tokens are tied to the - // queue's movable state, not the object itself). - inline void swap(ConcurrentQueue& other) MOODYCAMEL_NOEXCEPT { swap_internal(other); } - -private: - ConcurrentQueue& swap_internal(ConcurrentQueue& other) { - if (this == &other) { - return *this; - } - - details::swap_relaxed(producerListTail, other.producerListTail); - details::swap_relaxed(producerCount, other.producerCount); - details::swap_relaxed(initialBlockPoolIndex, other.initialBlockPoolIndex); - std::swap(initialBlockPool, other.initialBlockPool); - std::swap(initialBlockPoolSize, other.initialBlockPoolSize); - freeList.swap(other.freeList); - details::swap_relaxed(nextExplicitConsumerId, other.nextExplicitConsumerId); - details::swap_relaxed(globalExplicitConsumerOffset, other.globalExplicitConsumerOffset); - - swap_implicit_producer_hashes(other); - - reown_producers(); - other.reown_producers(); - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - details::swap_relaxed(explicitProducers, other.explicitProducers); - details::swap_relaxed(implicitProducers, other.implicitProducers); -#endif - - return *this; - } - -public: - // Enqueues a single item (by copying it). - // Allocates memory if required. Only fails if memory allocation fails (or implicit - // production is disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE is 0, - // or Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Thread-safe. - inline bool enqueue(T const& item) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue(item); - } - - // Enqueues a single item (by moving it, if possible). - // Allocates memory if required. Only fails if memory allocation fails (or implicit - // production is disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE is 0, - // or Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Thread-safe. - inline bool enqueue(T&& item) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue(std::move(item)); - } - - // Enqueues a single item (by copying it) using an explicit producer token. - // Allocates memory if required. Only fails if memory allocation fails (or - // Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Thread-safe. - inline bool enqueue(producer_token_t const& token, T const& item) { - return inner_enqueue(token, item); - } - - // Enqueues a single item (by moving it, if possible) using an explicit producer token. - // Allocates memory if required. Only fails if memory allocation fails (or - // Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Thread-safe. - inline bool enqueue(producer_token_t const& token, T&& item) { - return inner_enqueue(token, std::move(item)); - } - - // Enqueues several items. - // Allocates memory if required. Only fails if memory allocation fails (or - // implicit production is disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE - // is 0, or Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Note: Use std::make_move_iterator if the elements should be moved instead of copied. - // Thread-safe. - template - bool enqueue_bulk(It itemFirst, size_t count) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue_bulk(std::forward(itemFirst), count); - } - - // Enqueues several items using an explicit producer token. - // Allocates memory if required. Only fails if memory allocation fails - // (or Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed). - // Note: Use std::make_move_iterator if the elements should be moved - // instead of copied. - // Thread-safe. - template - bool enqueue_bulk(producer_token_t const& token, It itemFirst, size_t count) { - return inner_enqueue_bulk(token, std::forward(itemFirst), count); - } - - // Enqueues a single item (by copying it). - // Does not allocate memory. Fails if not enough room to enqueue (or implicit - // production is disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE - // is 0). - // Thread-safe. - inline bool try_enqueue(T const& item) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue(item); - } - - // Enqueues a single item (by moving it, if possible). - // Does not allocate memory (except for one-time implicit producer). - // Fails if not enough room to enqueue (or implicit production is - // disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE is 0). - // Thread-safe. - inline bool try_enqueue(T&& item) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue(std::move(item)); - } - - // Enqueues a single item (by copying it) using an explicit producer token. - // Does not allocate memory. Fails if not enough room to enqueue. - // Thread-safe. - inline bool try_enqueue(producer_token_t const& token, T const& item) { - return inner_enqueue(token, item); - } - - // Enqueues a single item (by moving it, if possible) using an explicit producer token. - // Does not allocate memory. Fails if not enough room to enqueue. - // Thread-safe. - inline bool try_enqueue(producer_token_t const& token, T&& item) { - return inner_enqueue(token, std::move(item)); - } - - // Enqueues several items. - // Does not allocate memory (except for one-time implicit producer). - // Fails if not enough room to enqueue (or implicit production is - // disabled because Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE is 0). - // Note: Use std::make_move_iterator if the elements should be moved - // instead of copied. - // Thread-safe. - template - bool try_enqueue_bulk(It itemFirst, size_t count) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return false; - return inner_enqueue_bulk(std::forward(itemFirst), count); - } - - // Enqueues several items using an explicit producer token. - // Does not allocate memory. Fails if not enough room to enqueue. - // Note: Use std::make_move_iterator if the elements should be moved - // instead of copied. - // Thread-safe. - template - bool try_enqueue_bulk(producer_token_t const& token, It itemFirst, size_t count) { - return inner_enqueue_bulk(token, std::forward(itemFirst), count); - } - - // Attempts to dequeue from the queue. - // Returns false if all producer streams appeared empty at the time they - // were checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - bool try_dequeue(U& item) { - // Instead of simply trying each producer in turn (which could cause needless contention on the - // first - // producer), we score them heuristically. - size_t nonEmptyCount = 0; - ProducerBase* best = nullptr; - size_t bestSize = 0; - for (auto ptr = producerListTail.load(std::memory_order_acquire); - nonEmptyCount < 3 && ptr != nullptr; ptr = ptr->next_prod()) { - auto size = ptr->size_approx(); - if (size > 0) { - if (size > bestSize) { - bestSize = size; - best = ptr; - } - ++nonEmptyCount; - } - } - - // If there was at least one non-empty queue but it appears empty at the time - // we try to dequeue from it, we need to make sure every queue's been tried - if (nonEmptyCount > 0) { - if (details::likely(best->dequeue(item))) { - return true; - } - for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - if (ptr != best && ptr->dequeue(item)) { - return true; - } - } - } - return false; - } - - // Attempts to dequeue from the queue. - // Returns false if all producer streams appeared empty at the time they - // were checked (so, the queue is likely but not guaranteed to be empty). - // This differs from the try_dequeue(item) method in that this one does - // not attempt to reduce contention by interleaving the order that producer - // streams are dequeued from. So, using this method can reduce overall throughput - // under contention, but will give more predictable results in single-threaded - // consumer scenarios. This is mostly only useful for internal unit tests. - // Never allocates. Thread-safe. - template - bool try_dequeue_non_interleaved(U& item) { - for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - if (ptr->dequeue(item)) { - return true; - } - } - return false; - } - - // Attempts to dequeue from the queue using an explicit consumer token. - // Returns false if all producer streams appeared empty at the time they - // were checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - bool try_dequeue(consumer_token_t& token, U& item) { - // The idea is roughly as follows: - // Every 256 items from one producer, make everyone rotate (increase the global offset) -> this - // means the highest efficiency consumer dictates the rotation speed of everyone else, more or - // less - // If you see that the global offset has changed, you must reset your consumption counter and - // move to your designated place - // If there's no items where you're supposed to be, keep moving until you find a producer with - // some items - // If the global offset has not changed but you've run out of items to consume, move over from - // your current position until you find an producer with something in it - - if (token.desiredProducer == nullptr || - token.lastKnownGlobalOffset != - globalExplicitConsumerOffset.load(std::memory_order_relaxed)) { - if (!update_current_producer_after_rotation(token)) { - return false; - } - } - - // If there was at least one non-empty queue but it appears empty at the time - // we try to dequeue from it, we need to make sure every queue's been tried - if (static_cast(token.currentProducer)->dequeue(item)) { - if (++token.itemsConsumedFromCurrent == EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE) { - globalExplicitConsumerOffset.fetch_add(1, std::memory_order_relaxed); - } - return true; - } - - auto tail = producerListTail.load(std::memory_order_acquire); - auto ptr = static_cast(token.currentProducer)->next_prod(); - if (ptr == nullptr) { - ptr = tail; - } - while (ptr != static_cast(token.currentProducer)) { - if (ptr->dequeue(item)) { - token.currentProducer = ptr; - token.itemsConsumedFromCurrent = 1; - return true; - } - ptr = ptr->next_prod(); - if (ptr == nullptr) { - ptr = tail; - } - } - return false; - } - - // Attempts to dequeue several elements from the queue. - // Returns the number of items actually dequeued. - // Returns 0 if all producer streams appeared empty at the time they - // were checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - size_t try_dequeue_bulk(It itemFirst, size_t max) { - size_t count = 0; - for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - count += ptr->dequeue_bulk(itemFirst, max - count); - if (count == max) { - break; - } - } - return count; - } - - // Attempts to dequeue several elements from the queue using an explicit consumer token. - // Returns the number of items actually dequeued. - // Returns 0 if all producer streams appeared empty at the time they - // were checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - size_t try_dequeue_bulk(consumer_token_t& token, It itemFirst, size_t max) { - if (token.desiredProducer == nullptr || - token.lastKnownGlobalOffset != - globalExplicitConsumerOffset.load(std::memory_order_relaxed)) { - if (!update_current_producer_after_rotation(token)) { - return false; - } - } - - size_t count = static_cast(token.currentProducer)->dequeue_bulk(itemFirst, max); - if (count == max) { - if ((token.itemsConsumedFromCurrent += static_cast(max)) >= - EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE) { - globalExplicitConsumerOffset.fetch_add(1, std::memory_order_relaxed); - } - return max; - } - token.itemsConsumedFromCurrent += static_cast(count); - max -= count; - - auto tail = producerListTail.load(std::memory_order_acquire); - auto ptr = static_cast(token.currentProducer)->next_prod(); - if (ptr == nullptr) { - ptr = tail; - } - while (ptr != static_cast(token.currentProducer)) { - auto dequeued = ptr->dequeue_bulk(itemFirst, max); - count += dequeued; - if (dequeued != 0) { - token.currentProducer = ptr; - token.itemsConsumedFromCurrent = static_cast(dequeued); - } - if (dequeued == max) { - break; - } - max -= dequeued; - ptr = ptr->next_prod(); - if (ptr == nullptr) { - ptr = tail; - } - } - return count; - } - - - - // Attempts to dequeue from a specific producer's inner queue. - // If you happen to know which producer you want to dequeue from, this - // is significantly faster than using the general-case try_dequeue methods. - // Returns false if the producer's queue appeared empty at the time it - // was checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - inline bool try_dequeue_from_producer(producer_token_t const& producer, U& item) { - return static_cast(producer.producer)->dequeue(item); - } - - // Attempts to dequeue several elements from a specific producer's inner queue. - // Returns the number of items actually dequeued. - // If you happen to know which producer you want to dequeue from, this - // is significantly faster than using the general-case try_dequeue methods. - // Returns 0 if the producer's queue appeared empty at the time it - // was checked (so, the queue is likely but not guaranteed to be empty). - // Never allocates. Thread-safe. - template - inline size_t try_dequeue_bulk_from_producer(producer_token_t const& producer, It itemFirst, - size_t max) { - return static_cast(producer.producer)->dequeue_bulk(itemFirst, max); - } - - // Returns an estimate of the total number of elements currently in the queue. This - // estimate is only accurate if the queue has completely stabilized before it is called - // (i.e. all enqueue and dequeue operations have completed and their memory effects are - // visible on the calling thread, and no further operations start while this method is - // being called). - // Thread-safe. - size_t size_approx() const { - size_t size = 0; - for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - size += ptr->size_approx(); - } - return size; - } - - // Returns true if the underlying atomic variables used by - // the queue are lock-free (they should be on most platforms). - // Thread-safe. - static bool is_lock_free() { - return details::static_is_lock_free::value == 2 && - details::static_is_lock_free::value == 2 && - details::static_is_lock_free::value == 2 && - details::static_is_lock_free::value == 2 && - details::static_is_lock_free::value == 2 && - details::static_is_lock_free::value == 2; - } - -private: - friend struct ProducerToken; - friend struct ConsumerToken; - friend struct ExplicitProducer; - friend class ConcurrentQueueTests; - - enum AllocationMode { - CanAlloc, - CannotAlloc - }; - - /////////////////////////////// - // Queue methods - /////////////////////////////// - - template - inline bool inner_enqueue(producer_token_t const& token, U&& element) { - return static_cast(token.producer) - ->ConcurrentQueue::ExplicitProducer::template enqueue(std::forward(element)); - } - - template - inline bool inner_enqueue(U&& element) { - auto producer = get_or_add_implicit_producer(); - return producer == nullptr - ? false - : producer->ConcurrentQueue::ImplicitProducer::template enqueue( - std::forward(element)); - } - - template - inline bool inner_enqueue_bulk(producer_token_t const& token, It itemFirst, size_t count) { - return static_cast(token.producer) - ->ConcurrentQueue::ExplicitProducer::template enqueue_bulk( - std::forward(itemFirst), count); - } - - template - inline bool inner_enqueue_bulk(It itemFirst, size_t count) { - auto producer = get_or_add_implicit_producer(); - return producer == nullptr - ? false - : producer->ConcurrentQueue::ImplicitProducer::template enqueue_bulk( - std::forward(itemFirst), count); - } - - inline bool update_current_producer_after_rotation(consumer_token_t& token) { - // Ah, there's been a rotation, figure out where we should be! - auto tail = producerListTail.load(std::memory_order_acquire); - if (token.desiredProducer == nullptr && tail == nullptr) { - return false; - } - auto prodCount = producerCount.load(std::memory_order_relaxed); - auto globalOffset = globalExplicitConsumerOffset.load(std::memory_order_relaxed); - if (details::unlikely(token.desiredProducer == nullptr)) { - // Aha, first time we're dequeueing anything. - // Figure out our local position - // Note: offset is from start, not end, but we're traversing from end -- subtract from count - // first - std::uint32_t offset = prodCount - 1 - (token.initialOffset % prodCount); - token.desiredProducer = tail; - for (std::uint32_t i = 0; i != offset; ++i) { - token.desiredProducer = static_cast(token.desiredProducer)->next_prod(); - if (token.desiredProducer == nullptr) { - token.desiredProducer = tail; - } - } - } - - std::uint32_t delta = globalOffset - token.lastKnownGlobalOffset; - if (delta >= prodCount) { - delta = delta % prodCount; - } - for (std::uint32_t i = 0; i != delta; ++i) { - token.desiredProducer = static_cast(token.desiredProducer)->next_prod(); - if (token.desiredProducer == nullptr) { - token.desiredProducer = tail; - } - } - - token.lastKnownGlobalOffset = globalOffset; - token.currentProducer = token.desiredProducer; - token.itemsConsumedFromCurrent = 0; - return true; - } - - /////////////////////////// - // Free list - /////////////////////////// - - template - struct FreeListNode { - FreeListNode() : freeListRefs(0), freeListNext(nullptr) { } - - std::atomic freeListRefs; - std::atomic freeListNext; - }; - - // A simple CAS-based lock-free free list. Not the fastest thing in the world under heavy - // contention, but - // simple and correct (assuming nodes are never freed until after the free list is destroyed), and - // fairly - // speedy under low contention. - template // N must inherit FreeListNode or have the same fields (and initialization - // of them) - struct FreeList { - FreeList() : freeListHead(nullptr) { } - FreeList(FreeList&& other) : freeListHead(other.freeListHead.load(std::memory_order_relaxed)) { - other.freeListHead.store(nullptr, std::memory_order_relaxed); - } - void swap(FreeList& other) { details::swap_relaxed(freeListHead, other.freeListHead); } - - FreeList(FreeList const&) MOODYCAMEL_DELETE_FUNCTION; - FreeList& operator=(FreeList const&) MOODYCAMEL_DELETE_FUNCTION; - - inline void add(N* node) { -#if MCDBGQ_NOLOCKFREE_FREELIST - debug::DebugLock lock(mutex); -#endif - // We know that the should-be-on-freelist bit is 0 at this point, so it's safe to - // set it using a fetch_add - if (node->freeListRefs.fetch_add(SHOULD_BE_ON_FREELIST, std::memory_order_acq_rel) == 0) { - // Oh look! We were the last ones referencing this node, and we know - // we want to add it to the free list, so let's do it! - add_knowing_refcount_is_zero(node); - } - } - - inline N* try_get() { -#if MCDBGQ_NOLOCKFREE_FREELIST - debug::DebugLock lock(mutex); -#endif - auto head = freeListHead.load(std::memory_order_acquire); - while (head != nullptr) { - auto prevHead = head; - auto refs = head->freeListRefs.load(std::memory_order_relaxed); - if ((refs & REFS_MASK) == 0 || - !head->freeListRefs.compare_exchange_strong(refs, refs + 1, std::memory_order_acquire, - std::memory_order_relaxed)) { - head = freeListHead.load(std::memory_order_acquire); - continue; - } - - // Good, reference count has been incremented (it wasn't at zero), which means we can read - // the - // next and not worry about it changing between now and the time we do the CAS - auto next = head->freeListNext.load(std::memory_order_relaxed); - if (freeListHead.compare_exchange_strong(head, next, std::memory_order_acquire, - std::memory_order_relaxed)) { - // Yay, got the node. This means it was on the list, which means shouldBeOnFreeList must - // be false no - // matter the refcount (because nobody else knows it's been taken off yet, it can't have - // been put back on). - assert((head->freeListRefs.load(std::memory_order_relaxed) & SHOULD_BE_ON_FREELIST) == 0); - - // Decrease refcount twice, once for our ref, and once for the list's ref - head->freeListRefs.fetch_add(-2, std::memory_order_release); - return head; - } - - // OK, the head must have changed on us, but we still need to decrease the refcount we - // increased. - // Note that we don't need to release any memory effects, but we do need to ensure that the - // reference - // count decrement happens-after the CAS on the head. - refs = prevHead->freeListRefs.fetch_add(-1, std::memory_order_acq_rel); - if (refs == SHOULD_BE_ON_FREELIST + 1) { - add_knowing_refcount_is_zero(prevHead); - } - } - - return nullptr; - } - - // Useful for traversing the list when there's no contention (e.g. to destroy remaining nodes) - N* head_unsafe() const { return freeListHead.load(std::memory_order_relaxed); } - - private: - inline void add_knowing_refcount_is_zero(N* node) { - // Since the refcount is zero, and nobody can increase it once it's zero (except us, and we - // run - // only one copy of this method per node at a time, i.e. the single thread case), then we know - // we can safely change the next pointer of the node; however, once the refcount is back above - // zero, then other threads could increase it (happens under heavy contention, when the - // refcount - // goes to zero in between a load and a refcount increment of a node in try_get, then back up - // to - // something non-zero, then the refcount increment is done by the other thread) -- so, if the - // CAS - // to add the node to the actual list fails, decrease the refcount and leave the add operation - // to - // the next thread who puts the refcount back at zero (which could be us, hence the loop). - auto head = freeListHead.load(std::memory_order_relaxed); - while (true) { - node->freeListNext.store(head, std::memory_order_relaxed); - node->freeListRefs.store(1, std::memory_order_release); - if (!freeListHead.compare_exchange_strong(head, node, std::memory_order_release, - std::memory_order_relaxed)) { - // Hmm, the add failed, but we can only try again when the refcount goes back to zero - if (node->freeListRefs.fetch_add(SHOULD_BE_ON_FREELIST - 1, std::memory_order_release) == - 1) { - continue; - } - } - return; - } - } - - private: - // Implemented like a stack, but where node order doesn't matter (nodes are inserted out of - // order under contention) - std::atomic freeListHead; - - static const std::uint32_t REFS_MASK = 0x7FFFFFFF; - static const std::uint32_t SHOULD_BE_ON_FREELIST = 0x80000000; - -#if MCDBGQ_NOLOCKFREE_FREELIST - debug::DebugMutex mutex; -#endif - }; - - /////////////////////////// - // Block - /////////////////////////// - - enum InnerQueueContext { - implicit_context = 0, - explicit_context = 1 - }; - - struct Block { - Block() - : elementsCompletelyDequeued(0), - freeListRefs(0), - freeListNext(nullptr), - shouldBeOnFreeList(false), - dynamicallyAllocated(true) { -#if MCDBGQ_TRACKMEM - owner = nullptr; -#endif - } - - template - inline bool is_empty() const { - if (context == explicit_context && BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD) { - // Check flags - for (size_t i = 0; i < BLOCK_SIZE; ++i) { - if (!emptyFlags[i].load(std::memory_order_relaxed)) { - return false; - } - } - - // Aha, empty; make sure we have all other memory effects that happened before the empty - // flags were set - std::atomic_thread_fence(std::memory_order_acquire); - return true; - } else { - // Check counter - if (elementsCompletelyDequeued.load(std::memory_order_relaxed) == BLOCK_SIZE) { - std::atomic_thread_fence(std::memory_order_acquire); - return true; - } - assert(elementsCompletelyDequeued.load(std::memory_order_relaxed) <= BLOCK_SIZE); - return false; - } - } - - // Returns true if the block is now empty (does not apply in explicit context) - template - inline bool set_empty(index_t i) { - if (context == explicit_context && BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD) { - // Set flag - assert(!emptyFlags - [BLOCK_SIZE - 1 - static_cast(i & static_cast(BLOCK_SIZE - 1))] - .load(std::memory_order_relaxed)); - emptyFlags[BLOCK_SIZE - 1 - static_cast(i & static_cast(BLOCK_SIZE - 1))] - .store(true, std::memory_order_release); - return false; - } else { - // Increment counter - auto prevVal = elementsCompletelyDequeued.fetch_add(1, std::memory_order_release); - assert(prevVal < BLOCK_SIZE); - return prevVal == BLOCK_SIZE - 1; - } - } - - // Sets multiple contiguous item statuses to 'empty' (assumes no wrapping and count > 0). - // Returns true if the block is now empty (does not apply in explicit context). - template - inline bool set_many_empty(index_t i, size_t count) { - if (context == explicit_context && BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD) { - // Set flags - std::atomic_thread_fence(std::memory_order_release); - i = BLOCK_SIZE - 1 - static_cast(i & static_cast(BLOCK_SIZE - 1)) - count + - 1; - for (size_t j = 0; j != count; ++j) { - assert(!emptyFlags[i + j].load(std::memory_order_relaxed)); - emptyFlags[i + j].store(true, std::memory_order_relaxed); - } - return false; - } else { - // Increment counter - auto prevVal = elementsCompletelyDequeued.fetch_add(count, std::memory_order_release); - assert(prevVal + count <= BLOCK_SIZE); - return prevVal + count == BLOCK_SIZE; - } - } - - template - inline void set_all_empty() { - if (context == explicit_context && BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD) { - // Set all flags - for (size_t i = 0; i != BLOCK_SIZE; ++i) { - emptyFlags[i].store(true, std::memory_order_relaxed); - } - } else { - // Reset counter - elementsCompletelyDequeued.store(BLOCK_SIZE, std::memory_order_relaxed); - } - } - - template - inline void reset_empty() { - if (context == explicit_context && BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD) { - // Reset flags - for (size_t i = 0; i != BLOCK_SIZE; ++i) { - emptyFlags[i].store(false, std::memory_order_relaxed); - } - } else { - // Reset counter - elementsCompletelyDequeued.store(0, std::memory_order_relaxed); - } - } - - inline T* operator[](index_t idx)MOODYCAMEL_NOEXCEPT { - return reinterpret_cast(elements) + - static_cast(idx & static_cast(BLOCK_SIZE - 1)); - } - inline T const* operator[](index_t idx) const MOODYCAMEL_NOEXCEPT { - return reinterpret_cast(elements) + - static_cast(idx & static_cast(BLOCK_SIZE - 1)); - } - - public: - Block* next; - std::atomic elementsCompletelyDequeued; - std::atomic emptyFlags - [BLOCK_SIZE <= EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD ? BLOCK_SIZE : 1]; - - private: - char elements[sizeof(T) * BLOCK_SIZE]; - - public: - std::atomic freeListRefs; - std::atomic freeListNext; - std::atomic shouldBeOnFreeList; - bool dynamicallyAllocated; // Perhaps a better name for this would be - // 'isNotPartOfInitialBlockPool' - -#if MCDBGQ_TRACKMEM - void* owner; -#endif - }; - - -#if MCDBGQ_TRACKMEM -public: - struct MemStats; -private: -#endif - - /////////////////////////// - // Producer base - /////////////////////////// - - struct ProducerBase : public details::ConcurrentQueueProducerTypelessBase { - ProducerBase(ConcurrentQueue* parent, bool isExplicit) - : tailIndex(0), - headIndex(0), - dequeueOptimisticCount(0), - dequeueOvercommit(0), - tailBlock(nullptr), - isExplicit(isExplicit), - parent(parent) {} - - virtual ~ProducerBase() { }; - - template - inline bool dequeue(U& element) { - if (isExplicit) { - return static_cast(this)->dequeue(element); - } else { - return static_cast(this)->dequeue(element); - } - } - - template - inline size_t dequeue_bulk(It& itemFirst, size_t max) { - if (isExplicit) { - return static_cast(this)->dequeue_bulk(itemFirst, max); - } else { - return static_cast(this)->dequeue_bulk(itemFirst, max); - } - } - - inline ProducerBase* next_prod() const { return static_cast(next); } - - inline size_t size_approx() const { - auto tail = tailIndex.load(std::memory_order_relaxed); - auto head = headIndex.load(std::memory_order_relaxed); - return details::circular_less_than(head, tail) ? static_cast(tail - head) : 0; - } - - inline index_t getTail() const { return tailIndex.load(std::memory_order_relaxed); } - protected: - std::atomic tailIndex; // Where to enqueue to next - std::atomic headIndex; // Where to dequeue from next - - std::atomic dequeueOptimisticCount; - std::atomic dequeueOvercommit; - - Block* tailBlock; - - public: - bool isExplicit; - ConcurrentQueue* parent; - - protected: -#if MCDBGQ_TRACKMEM - friend struct MemStats; -#endif - }; - - /////////////////////////// - // Explicit queue - /////////////////////////// - - struct ExplicitProducer : public ProducerBase { - explicit ExplicitProducer(ConcurrentQueue* parent) - : ProducerBase(parent, true), - blockIndex(nullptr), - pr_blockIndexSlotsUsed(0), - pr_blockIndexSize(EXPLICIT_INITIAL_INDEX_SIZE >> 1), - pr_blockIndexFront(0), - pr_blockIndexEntries(nullptr), - pr_blockIndexRaw(nullptr) { - size_t poolBasedIndexSize = details::ceil_to_pow_2(parent->initialBlockPoolSize) >> 1; - if (poolBasedIndexSize > pr_blockIndexSize) { - pr_blockIndexSize = poolBasedIndexSize; - } - - new_block_index(0); // This creates an index with double the number of current entries, i.e. - // EXPLICIT_INITIAL_INDEX_SIZE - } - - ~ExplicitProducer() { - // Destruct any elements not yet dequeued. - // Since we're in the destructor, we can assume all elements - // are either completely dequeued or completely not (no halfways). - if (this->tailBlock != nullptr) { // Note this means there must be a block index too - // First find the block that's partially dequeued, if any - Block* halfDequeuedBlock = nullptr; - if ((this->headIndex.load(std::memory_order_relaxed) & - static_cast(BLOCK_SIZE - 1)) != 0) { - // The head's not on a block boundary, meaning a block somewhere is partially dequeued - // (or the head block is the tail block and was fully dequeued, but the head/tail are - // still not on a boundary) - size_t i = (pr_blockIndexFront - pr_blockIndexSlotsUsed) & (pr_blockIndexSize - 1); - while (details::circular_less_than( - pr_blockIndexEntries[i].base + BLOCK_SIZE, - this->headIndex.load(std::memory_order_relaxed))) { - i = (i + 1) & (pr_blockIndexSize - 1); - } - assert(details::circular_less_than( - pr_blockIndexEntries[i].base, this->headIndex.load(std::memory_order_relaxed))); - halfDequeuedBlock = pr_blockIndexEntries[i].block; - } - - // Start at the head block (note the first line in the loop gives us the head from the tail - // on the first iteration) - auto block = this->tailBlock; - do { - block = block->next; - if (block->ConcurrentQueue::Block::template is_empty()) { - continue; - } - - size_t i = 0; // Offset into block - if (block == halfDequeuedBlock) { - i = static_cast(this->headIndex.load(std::memory_order_relaxed) & - static_cast(BLOCK_SIZE - 1)); - } - - // Walk through all the items in the block; if this is the tail block, we need to stop - // when we reach the tail index - auto lastValidIndex = - (this->tailIndex.load(std::memory_order_relaxed) & - static_cast(BLOCK_SIZE - 1)) == 0 - ? BLOCK_SIZE - : static_cast(this->tailIndex.load(std::memory_order_relaxed) & - static_cast(BLOCK_SIZE - 1)); - while (i != BLOCK_SIZE && (block != this->tailBlock || i != lastValidIndex)) { - (*block)[i++]->~T(); - } - } while (block != this->tailBlock); - } - - // Destroy all blocks that we own - if (this->tailBlock != nullptr) { - auto block = this->tailBlock; - do { - auto next = block->next; - if (block->dynamicallyAllocated) { - destroy(block); - } - block = next; - } while (block != this->tailBlock); - } - - // Destroy the block indices - auto header = static_cast(pr_blockIndexRaw); - while (header != nullptr) { - auto prev = static_cast(header->prev); - header->~BlockIndexHeader(); - (Traits::free)(header); - header = prev; - } - } - - template - inline bool enqueue(U&& element) { - index_t currentTailIndex = this->tailIndex.load(std::memory_order_relaxed); - index_t newTailIndex = 1 + currentTailIndex; - if ((currentTailIndex & static_cast(BLOCK_SIZE - 1)) == 0) { - // We reached the end of a block, start a new one - auto startBlock = this->tailBlock; - auto originalBlockIndexSlotsUsed = pr_blockIndexSlotsUsed; - if (this->tailBlock != nullptr && - this->tailBlock->next->ConcurrentQueue::Block::template is_empty()) { - // We can re-use the block ahead of us, it's empty! - this->tailBlock = this->tailBlock->next; - this->tailBlock->ConcurrentQueue::Block::template reset_empty(); - - // We'll put the block on the block index (guaranteed to be room since we're conceptually - // removing the - // last block from it first -- except instead of removing then adding, we can just - // overwrite). - // Note that there must be a valid block index here, since even if allocation failed in - // the ctor, - // it would have been re-attempted when adding the first block to the queue; since there - // is such - // a block, a block index must have been successfully allocated. - } else { - // Whatever head value we see here is >= the last value we saw here (relatively), - // and <= its current value. Since we have the most recent tail, the head must be - // <= to it. - auto head = this->headIndex.load(std::memory_order_relaxed); - assert(!details::circular_less_than(currentTailIndex, head)); - if (!details::circular_less_than(head, currentTailIndex + BLOCK_SIZE) || - (MAX_SUBQUEUE_SIZE != details::const_numeric_max::value && - (MAX_SUBQUEUE_SIZE == 0 || - MAX_SUBQUEUE_SIZE - BLOCK_SIZE < currentTailIndex - head))) { - // We can't enqueue in another block because there's not enough leeway -- the - // tail could surpass the head by the time the block fills up! (Or we'll exceed - // the size limit, if the second part of the condition was true.) - return false; - } - // We're going to need a new block; check that the block index has room - if (pr_blockIndexRaw == nullptr || pr_blockIndexSlotsUsed == pr_blockIndexSize) { - // Hmm, the circular block index is already full -- we'll need - // to allocate a new index. Note pr_blockIndexRaw can only be nullptr if - // the initial allocation failed in the constructor. - - if (allocMode == CannotAlloc || !new_block_index(pr_blockIndexSlotsUsed)) { - return false; - } - } - - // Insert a new block in the circular linked list - auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); - if (newBlock == nullptr) { - return false; - } -#if MCDBGQ_TRACKMEM - newBlock->owner = this; -#endif - newBlock->ConcurrentQueue::Block::template reset_empty(); - if (this->tailBlock == nullptr) { - newBlock->next = newBlock; - } else { - newBlock->next = this->tailBlock->next; - this->tailBlock->next = newBlock; - } - this->tailBlock = newBlock; - ++pr_blockIndexSlotsUsed; - } - - if (!MOODYCAMEL_NOEXCEPT_CTOR(T, U, new (nullptr) T(std::forward(element)))) { - // The constructor may throw. We want the element not to appear in the queue in - // that case (without corrupting the queue): - MOODYCAMEL_TRY { new ((*this->tailBlock)[currentTailIndex]) T(std::forward(element)); } - MOODYCAMEL_CATCH (...) { - // Revert change to the current block, but leave the new block available - // for next time - pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed; - this->tailBlock = startBlock == nullptr ? this->tailBlock : startBlock; - MOODYCAMEL_RETHROW; - } - } else { - (void)startBlock; - (void)originalBlockIndexSlotsUsed; - } - - // Add block to block index - auto& entry = blockIndex.load(std::memory_order_relaxed)->entries[pr_blockIndexFront]; - entry.base = currentTailIndex; - entry.block = this->tailBlock; - blockIndex.load(std::memory_order_relaxed) - ->front.store(pr_blockIndexFront, std::memory_order_release); - pr_blockIndexFront = (pr_blockIndexFront + 1) & (pr_blockIndexSize - 1); - - if (!MOODYCAMEL_NOEXCEPT_CTOR(T, U, new (nullptr) T(std::forward(element)))) { - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - } - - // Enqueue - new ((*this->tailBlock)[currentTailIndex]) T(std::forward(element)); - - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - - template - bool dequeue(U& element) { - auto tail = this->tailIndex.load(std::memory_order_relaxed); - auto overcommit = this->dequeueOvercommit.load(std::memory_order_relaxed); - if (details::circular_less_than( - this->dequeueOptimisticCount.load(std::memory_order_relaxed) - overcommit, tail)) { - // Might be something to dequeue, let's give it a try - - // Note that this if is purely for performance purposes in the common case when the queue is - // empty and the values are eventually consistent -- we may enter here spuriously. - - // Note that whatever the values of overcommit and tail are, they are not going to change - // (unless we - // change them) and must be the same value at this point (inside the if) as when the if - // condition was - // evaluated. - - // We insert an acquire fence here to synchronize-with the release upon incrementing - // dequeueOvercommit below. - // This ensures that whatever the value we got loaded into overcommit, the load of - // dequeueOptisticCount in - // the fetch_add below will result in a value at least as recent as that (and therefore at - // least as large). - // Note that I believe a compiler (signal) fence here would be sufficient due to the nature - // of fetch_add (all - // read-modify-write operations are guaranteed to work on the latest value in the - // modification order), but - // unfortunately that can't be shown to be correct using only the C++11 standard. - // See - // http://stackoverflow.com/questions/18223161/what-are-the-c11-memory-ordering-guarantees-in-this-corner-case - std::atomic_thread_fence(std::memory_order_acquire); - - // Increment optimistic counter, then check if it went over the boundary - auto myDequeueCount = this->dequeueOptimisticCount.fetch_add(1, std::memory_order_relaxed); - - // Note that since dequeueOvercommit must be <= dequeueOptimisticCount (because - // dequeueOvercommit is only ever - // incremented after dequeueOptimisticCount -- this is enforced in the `else` block below), - // and since we now - // have a version of dequeueOptimisticCount that is at least as recent as overcommit (due to - // the release upon - // incrementing dequeueOvercommit and the acquire above that synchronizes with it), - // overcommit <= myDequeueCount. - assert(overcommit <= myDequeueCount); - - // Note that we reload tail here in case it changed; it will be the same value as before or - // greater, since - // this load is sequenced after (happens after) the earlier load above. This is supported by - // read-read - // coherency (as defined in the standard), explained here: - // http://en.cppreference.com/w/cpp/atomic/memory_order - tail = this->tailIndex.load(std::memory_order_acquire); - if (details::likely( - details::circular_less_than(myDequeueCount - overcommit, tail))) { - // Guaranteed to be at least one element to dequeue! - - // Get the index. Note that since there's guaranteed to be at least one element, this - // will never exceed tail. We need to do an acquire-release fence here since it's possible - // that whatever condition got us to this point was for an earlier enqueued element (that - // we already see the memory effects for), but that by the time we increment somebody else - // has incremented it, and we need to see the memory effects for *that* element, which is - // in such a case is necessarily visible on the thread that incremented it in the first - // place with the more current condition (they must have acquired a tail that is at least - // as recent). - auto index = this->headIndex.fetch_add(1, std::memory_order_acq_rel); - - - // Determine which block the element is in - - auto localBlockIndex = blockIndex.load(std::memory_order_acquire); - auto localBlockIndexHead = localBlockIndex->front.load(std::memory_order_acquire); - - // We need to be careful here about subtracting and dividing because of index wrap-around. - // When an index wraps, we need to preserve the sign of the offset when dividing it by the - // block size (in order to get a correct signed block count offset in all cases): - auto headBase = localBlockIndex->entries[localBlockIndexHead].base; - auto blockBaseIndex = index & ~static_cast(BLOCK_SIZE - 1); - auto offset = static_cast( - static_cast::type>(blockBaseIndex - headBase) / - BLOCK_SIZE); - auto block = - localBlockIndex->entries[(localBlockIndexHead + offset) & (localBlockIndex->size - 1)] - .block; - - // Dequeue - auto& el = *((*block)[index]); - if (!MOODYCAMEL_NOEXCEPT_ASSIGN(T, T&&, element = std::move(el))) { - // Make sure the element is still fully dequeued and destroyed even if the assignment - // throws - struct Guard { - Block* block; - index_t index; - - ~Guard() { - (*block)[index]->~T(); - block->ConcurrentQueue::Block::template set_empty(index); - } - } guard = { block, index }; - - element = std::move(el); - } else { - element = std::move(el); - el.~T(); - block->ConcurrentQueue::Block::template set_empty(index); - } - - return true; - } else { - // Wasn't anything to dequeue after all; make the effective dequeue count eventually - // consistent - this->dequeueOvercommit.fetch_add( - 1, std::memory_order_release); // Release so that the fetch_add on - // dequeueOptimisticCount is guaranteed to happen - // before this write - } - } - - return false; - } - - template - bool enqueue_bulk(It itemFirst, size_t count) { - // First, we need to make sure we have enough room to enqueue all of the elements; - // this means pre-allocating blocks and putting them in the block index (but only if - // all the allocations succeeded). - index_t startTailIndex = this->tailIndex.load(std::memory_order_relaxed); - auto startBlock = this->tailBlock; - auto originalBlockIndexFront = pr_blockIndexFront; - auto originalBlockIndexSlotsUsed = pr_blockIndexSlotsUsed; - - Block* firstAllocatedBlock = nullptr; - - // Figure out how many blocks we'll need to allocate, and do so - size_t blockBaseDiff = - ((startTailIndex + count - 1) & ~static_cast(BLOCK_SIZE - 1)) - - ((startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1)); - index_t currentTailIndex = (startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1); - if (blockBaseDiff > 0) { - // Allocate as many blocks as possible from ahead - while ( - blockBaseDiff > 0 && this->tailBlock != nullptr && - this->tailBlock->next != firstAllocatedBlock && - this->tailBlock->next->ConcurrentQueue::Block::template is_empty()) { - blockBaseDiff -= static_cast(BLOCK_SIZE); - currentTailIndex += static_cast(BLOCK_SIZE); - - this->tailBlock = this->tailBlock->next; - firstAllocatedBlock = - firstAllocatedBlock == nullptr ? this->tailBlock : firstAllocatedBlock; - - auto& entry = blockIndex.load(std::memory_order_relaxed)->entries[pr_blockIndexFront]; - entry.base = currentTailIndex; - entry.block = this->tailBlock; - pr_blockIndexFront = (pr_blockIndexFront + 1) & (pr_blockIndexSize - 1); - } - - // Now allocate as many blocks as necessary from the block pool - while (blockBaseDiff > 0) { - blockBaseDiff -= static_cast(BLOCK_SIZE); - currentTailIndex += static_cast(BLOCK_SIZE); - - auto head = this->headIndex.load(std::memory_order_relaxed); - assert(!details::circular_less_than(currentTailIndex, head)); - bool full = !details::circular_less_than(head, currentTailIndex + BLOCK_SIZE) || - (MAX_SUBQUEUE_SIZE != details::const_numeric_max::value && - (MAX_SUBQUEUE_SIZE == 0 || - MAX_SUBQUEUE_SIZE - BLOCK_SIZE < currentTailIndex - head)); - if (pr_blockIndexRaw == nullptr || pr_blockIndexSlotsUsed == pr_blockIndexSize || full) { - if (allocMode == CannotAlloc || full || !new_block_index(originalBlockIndexSlotsUsed)) { - // Failed to allocate, undo changes (but keep injected blocks) - pr_blockIndexFront = originalBlockIndexFront; - pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed; - this->tailBlock = startBlock == nullptr ? firstAllocatedBlock : startBlock; - return false; - } - - // pr_blockIndexFront is updated inside new_block_index, so we need to - // update our fallback value too (since we keep the new index even if we - // later fail) - originalBlockIndexFront = originalBlockIndexSlotsUsed; - } - - // Insert a new block in the circular linked list - auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); - if (newBlock == nullptr) { - pr_blockIndexFront = originalBlockIndexFront; - pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed; - this->tailBlock = startBlock == nullptr ? firstAllocatedBlock : startBlock; - return false; - } - -#if MCDBGQ_TRACKMEM - newBlock->owner = this; -#endif - newBlock->ConcurrentQueue::Block::template set_all_empty(); - if (this->tailBlock == nullptr) { - newBlock->next = newBlock; - } else { - newBlock->next = this->tailBlock->next; - this->tailBlock->next = newBlock; - } - this->tailBlock = newBlock; - firstAllocatedBlock = - firstAllocatedBlock == nullptr ? this->tailBlock : firstAllocatedBlock; - - ++pr_blockIndexSlotsUsed; - - auto& entry = blockIndex.load(std::memory_order_relaxed)->entries[pr_blockIndexFront]; - entry.base = currentTailIndex; - entry.block = this->tailBlock; - pr_blockIndexFront = (pr_blockIndexFront + 1) & (pr_blockIndexSize - 1); - } - - // Excellent, all allocations succeeded. Reset each block's emptiness before we fill them - // up, and - // publish the new block index front - auto block = firstAllocatedBlock; - while (true) { - block->ConcurrentQueue::Block::template reset_empty(); - if (block == this->tailBlock) { - break; - } - block = block->next; - } - - if (MOODYCAMEL_NOEXCEPT_CTOR(T, decltype(*itemFirst), - new (nullptr) T(details::deref_noexcept(itemFirst)))) { - blockIndex.load(std::memory_order_relaxed)->front.store( - (pr_blockIndexFront - 1) & (pr_blockIndexSize - 1), std::memory_order_release); - } - } - - // Enqueue, one block at a time - index_t newTailIndex = startTailIndex + static_cast(count); - currentTailIndex = startTailIndex; - auto endBlock = this->tailBlock; - this->tailBlock = startBlock; - assert((startTailIndex & static_cast(BLOCK_SIZE - 1)) != 0 || - firstAllocatedBlock != nullptr || count == 0); - if ((startTailIndex & static_cast(BLOCK_SIZE - 1)) == 0 && - firstAllocatedBlock != nullptr) { - this->tailBlock = firstAllocatedBlock; - } - while (true) { - auto stopIndex = (currentTailIndex & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - if (details::circular_less_than(newTailIndex, stopIndex)) { - stopIndex = newTailIndex; - } - if (MOODYCAMEL_NOEXCEPT_CTOR(T, decltype(*itemFirst), - new (nullptr) T(details::deref_noexcept(itemFirst)))) { - while (currentTailIndex != stopIndex) { - new ((*this->tailBlock)[currentTailIndex++]) T(*itemFirst++); - } - } else { - MOODYCAMEL_TRY { - while (currentTailIndex != stopIndex) { - // Must use copy constructor even if move constructor is available - // because we may have to revert if there's an exception. - // Sorry about the horrible templated next line, but it was the only way - // to disable moving *at compile time*, which is important because a type - // may only define a (noexcept) move constructor, and so calls to the - // cctor will not compile, even if they are in an if branch that will never - // be executed - new ((*this->tailBlock)[currentTailIndex]) T(details::nomove_if< - (bool)!MOODYCAMEL_NOEXCEPT_CTOR( - T, decltype(*itemFirst), new (nullptr) - T(details::deref_noexcept(itemFirst)))>::eval(*itemFirst)); - ++currentTailIndex; - ++itemFirst; - } - } - MOODYCAMEL_CATCH (...) { - // Oh dear, an exception's been thrown -- destroy the elements that - // were enqueued so far and revert the entire bulk operation (we'll keep - // any allocated blocks in our linked list for later, though). - auto constructedStopIndex = currentTailIndex; - auto lastBlockEnqueued = this->tailBlock; - - pr_blockIndexFront = originalBlockIndexFront; - pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed; - this->tailBlock = startBlock == nullptr ? firstAllocatedBlock : startBlock; - - if (!details::is_trivially_destructible::value) { - auto block = startBlock; - if ((startTailIndex & static_cast(BLOCK_SIZE - 1)) == 0) { - block = firstAllocatedBlock; - } - currentTailIndex = startTailIndex; - while (true) { - auto stopIndex = (currentTailIndex & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - if (details::circular_less_than(constructedStopIndex, stopIndex)) { - stopIndex = constructedStopIndex; - } - while (currentTailIndex != stopIndex) { - (*block)[currentTailIndex++]->~T(); - } - if (block == lastBlockEnqueued) { - break; - } - block = block->next; - } - } - MOODYCAMEL_RETHROW; - } - } - - if (this->tailBlock == endBlock) { - assert(currentTailIndex == newTailIndex); - break; - } - this->tailBlock = this->tailBlock->next; - } - - if (!MOODYCAMEL_NOEXCEPT_CTOR(T, decltype(*itemFirst), - new (nullptr) T(details::deref_noexcept(itemFirst))) && - firstAllocatedBlock != nullptr) { - blockIndex.load(std::memory_order_relaxed)->front.store( - (pr_blockIndexFront - 1) & (pr_blockIndexSize - 1), std::memory_order_release); - } - - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - - template - size_t dequeue_bulk(It& itemFirst, size_t max) { - auto tail = this->tailIndex.load(std::memory_order_relaxed); - auto overcommit = this->dequeueOvercommit.load(std::memory_order_relaxed); - auto desiredCount = static_cast( - tail - (this->dequeueOptimisticCount.load(std::memory_order_relaxed) - overcommit)); - if (details::circular_less_than(0, desiredCount)) { - desiredCount = desiredCount < max ? desiredCount : max; - std::atomic_thread_fence(std::memory_order_acquire); - - auto myDequeueCount = - this->dequeueOptimisticCount.fetch_add(desiredCount, std::memory_order_relaxed); - assert(overcommit <= myDequeueCount); - - tail = this->tailIndex.load(std::memory_order_acquire); - auto actualCount = static_cast(tail - (myDequeueCount - overcommit)); - if (details::circular_less_than(0, actualCount)) { - actualCount = desiredCount < actualCount ? desiredCount : actualCount; - if (actualCount < desiredCount) { - this->dequeueOvercommit.fetch_add(desiredCount - actualCount, - std::memory_order_release); - } - - // Get the first index. Note that since there's guaranteed to be at least actualCount - // elements, this - // will never exceed tail. - auto firstIndex = this->headIndex.fetch_add(actualCount, std::memory_order_acq_rel); - - // Determine which block the first element is in - auto localBlockIndex = blockIndex.load(std::memory_order_acquire); - auto localBlockIndexHead = localBlockIndex->front.load(std::memory_order_acquire); - - auto headBase = localBlockIndex->entries[localBlockIndexHead].base; - auto firstBlockBaseIndex = firstIndex & ~static_cast(BLOCK_SIZE - 1); - auto offset = static_cast(static_cast::type>( - firstBlockBaseIndex - headBase) / - BLOCK_SIZE); - auto indexIndex = (localBlockIndexHead + offset) & (localBlockIndex->size - 1); - - // Iterate the blocks and dequeue - auto index = firstIndex; - do { - auto firstIndexInBlock = index; - auto endIndex = - (index & ~static_cast(BLOCK_SIZE - 1)) + static_cast(BLOCK_SIZE); - endIndex = details::circular_less_than( - firstIndex + static_cast(actualCount), endIndex) - ? firstIndex + static_cast(actualCount) - : endIndex; - auto block = localBlockIndex->entries[indexIndex].block; - if (MOODYCAMEL_NOEXCEPT_ASSIGN( - T, T &&, details::deref_noexcept(itemFirst) = std::move((*(*block)[index])))) { - while (index != endIndex) { - auto& el = *((*block)[index]); - *itemFirst++ = std::move(el); - el.~T(); - ++index; - } - } else { - MOODYCAMEL_TRY { - while (index != endIndex) { - auto& el = *((*block)[index]); - *itemFirst = std::move(el); - ++itemFirst; - el.~T(); - ++index; - } - } - MOODYCAMEL_CATCH (...) { - // It's too late to revert the dequeue, but we can make sure that all - // the dequeued objects are properly destroyed and the block index - // (and empty count) are properly updated before we propagate the exception - do { - block = localBlockIndex->entries[indexIndex].block; - while (index != endIndex) { - (*block)[index++]->~T(); - } - block->ConcurrentQueue::Block::template set_many_empty( - firstIndexInBlock, static_cast(endIndex - firstIndexInBlock)); - indexIndex = (indexIndex + 1) & (localBlockIndex->size - 1); - - firstIndexInBlock = index; - endIndex = (index & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - endIndex = details::circular_less_than( - firstIndex + static_cast(actualCount), endIndex) - ? firstIndex + static_cast(actualCount) - : endIndex; - } while (index != firstIndex + actualCount); - - MOODYCAMEL_RETHROW; - } - } - block->ConcurrentQueue::Block::template set_many_empty( - firstIndexInBlock, static_cast(endIndex - firstIndexInBlock)); - indexIndex = (indexIndex + 1) & (localBlockIndex->size - 1); - } while (index != firstIndex + actualCount); - - return actualCount; - } else { - // Wasn't anything to dequeue after all; make the effective dequeue count eventually - // consistent - this->dequeueOvercommit.fetch_add(desiredCount, std::memory_order_release); - } - } - - return 0; - } - - private: - struct BlockIndexEntry { - index_t base; - Block* block; - }; - - struct BlockIndexHeader { - size_t size; - std::atomic front; // Current slot (not next, like pr_blockIndexFront) - BlockIndexEntry* entries; - void* prev; - }; - - bool new_block_index(size_t numberOfFilledSlotsToExpose) { - auto prevBlockSizeMask = pr_blockIndexSize - 1; - - // Create the new block - pr_blockIndexSize <<= 1; - auto newRawPtr = static_cast( - (Traits::malloc)(sizeof(BlockIndexHeader) + std::alignment_of::value - - 1 + sizeof(BlockIndexEntry) * pr_blockIndexSize)); - if (newRawPtr == nullptr) { - pr_blockIndexSize >>= 1; // Reset to allow graceful retry - return false; - } - - auto newBlockIndexEntries = reinterpret_cast( - details::align_for(newRawPtr + sizeof(BlockIndexHeader))); - - // Copy in all the old indices, if any - size_t j = 0; - if (pr_blockIndexSlotsUsed != 0) { - auto i = (pr_blockIndexFront - pr_blockIndexSlotsUsed) & prevBlockSizeMask; - do { - newBlockIndexEntries[j++] = pr_blockIndexEntries[i]; - i = (i + 1) & prevBlockSizeMask; - } while (i != pr_blockIndexFront); - } - - // Update everything - auto header = new (newRawPtr) BlockIndexHeader; - header->size = pr_blockIndexSize; - header->front.store(numberOfFilledSlotsToExpose - 1, std::memory_order_relaxed); - header->entries = newBlockIndexEntries; - header->prev = - pr_blockIndexRaw; // we link the new block to the old one so we can free it later - - pr_blockIndexFront = j; - pr_blockIndexEntries = newBlockIndexEntries; - pr_blockIndexRaw = newRawPtr; - blockIndex.store(header, std::memory_order_release); - - return true; - } - - private: - std::atomic blockIndex; - - // To be used by producer only -- consumer must use the ones in referenced by blockIndex - size_t pr_blockIndexSlotsUsed; - size_t pr_blockIndexSize; - size_t pr_blockIndexFront; // Next slot (not current) - BlockIndexEntry* pr_blockIndexEntries; - void* pr_blockIndexRaw; - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - public: - ExplicitProducer* nextExplicitProducer; - private: -#endif - -#if MCDBGQ_TRACKMEM - friend struct MemStats; -#endif - }; - - ////////////////////////////////// - // Implicit queue - ////////////////////////////////// - - struct ImplicitProducer : public ProducerBase { - ImplicitProducer(ConcurrentQueue* parent) - : ProducerBase(parent, false), - nextBlockIndexCapacity(IMPLICIT_INITIAL_INDEX_SIZE), - blockIndex(nullptr) { - new_block_index(); - } - - ~ImplicitProducer() { - // Note that since we're in the destructor we can assume that all enqueue/dequeue operations - // completed already; this means that all undequeued elements are placed contiguously across - // contiguous blocks, and that only the first and last remaining blocks can be only partially - // empty (all other remaining blocks must be completely full). - -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - // Unregister ourselves for thread termination notification - if (!this->inactive.load(std::memory_order_relaxed)) { - details::ThreadExitNotifier::unsubscribe(&threadExitListener); - } -#endif - - // Destroy all remaining elements! - auto tail = this->tailIndex.load(std::memory_order_relaxed); - auto index = this->headIndex.load(std::memory_order_relaxed); - Block* block = nullptr; - assert(index == tail || details::circular_less_than(index, tail)); - bool forceFreeLastBlock = - index != tail; // If we enter the loop, then the last (tail) block will not be freed - while (index != tail) { - if ((index & static_cast(BLOCK_SIZE - 1)) == 0 || block == nullptr) { - if (block != nullptr && block->dynamicallyAllocated) { - // Free the old block - this->parent->destroy(block); - } - - block = get_block_index_entry_for_index(index)->value.load(std::memory_order_relaxed); - } - - ((*block)[index])->~T(); - ++index; - } - // Even if the queue is empty, there's still one block that's not on the free list - // (unless the head index reached the end of it, in which case the tail will be poised - // to create a new block). - if (this->tailBlock != nullptr && - (forceFreeLastBlock || (tail & static_cast(BLOCK_SIZE - 1)) != 0) && - this->tailBlock->dynamicallyAllocated) { - this->parent->destroy(this->tailBlock); - } - - // Destroy block index - auto localBlockIndex = blockIndex.load(std::memory_order_relaxed); - if (localBlockIndex != nullptr) { - for (size_t i = 0; i != localBlockIndex->capacity; ++i) { - localBlockIndex->index[i]->~BlockIndexEntry(); - } - do { - auto prev = localBlockIndex->prev; - localBlockIndex->~BlockIndexHeader(); - (Traits::free)(localBlockIndex); - localBlockIndex = prev; - } while (localBlockIndex != nullptr); - } - } - - template - inline bool enqueue(U&& element) { - index_t currentTailIndex = this->tailIndex.load(std::memory_order_relaxed); - index_t newTailIndex = 1 + currentTailIndex; - if ((currentTailIndex & static_cast(BLOCK_SIZE - 1)) == 0) { - // We reached the end of a block, start a new one - auto head = this->headIndex.load(std::memory_order_relaxed); - assert(!details::circular_less_than(currentTailIndex, head)); - if (!details::circular_less_than(head, currentTailIndex + BLOCK_SIZE) || - (MAX_SUBQUEUE_SIZE != details::const_numeric_max::value && - (MAX_SUBQUEUE_SIZE == 0 || - MAX_SUBQUEUE_SIZE - BLOCK_SIZE < currentTailIndex - head))) { - return false; - } -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - // Find out where we'll be inserting this block in the block index - BlockIndexEntry* idxEntry; - if (!insert_block_index_entry(idxEntry, currentTailIndex)) { - return false; - } - - // Get ahold of a new block - auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); - if (newBlock == nullptr) { - rewind_block_index_tail(); - idxEntry->value.store(nullptr, std::memory_order_relaxed); - return false; - } -#if MCDBGQ_TRACKMEM - newBlock->owner = this; -#endif - newBlock->ConcurrentQueue::Block::template reset_empty(); - - if (!MOODYCAMEL_NOEXCEPT_CTOR(T, U, new (nullptr) T(std::forward(element)))) { - // May throw, try to insert now before we publish the fact that we have this new block - MOODYCAMEL_TRY { new ((*newBlock)[currentTailIndex]) T(std::forward(element)); } - MOODYCAMEL_CATCH (...) { - rewind_block_index_tail(); - idxEntry->value.store(nullptr, std::memory_order_relaxed); - this->parent->add_block_to_free_list(newBlock); - MOODYCAMEL_RETHROW; - } - } - - // Insert the new block into the index - idxEntry->value.store(newBlock, std::memory_order_relaxed); - - this->tailBlock = newBlock; - - if (!MOODYCAMEL_NOEXCEPT_CTOR(T, U, new (nullptr) T(std::forward(element)))) { - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - } - - // Enqueue - new ((*this->tailBlock)[currentTailIndex]) T(std::forward(element)); - - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - - template - bool dequeue(U& element) { - // See ExplicitProducer::dequeue for rationale and explanation - index_t tail = this->tailIndex.load(std::memory_order_relaxed); - index_t overcommit = this->dequeueOvercommit.load(std::memory_order_relaxed); - if (details::circular_less_than( - this->dequeueOptimisticCount.load(std::memory_order_relaxed) - overcommit, tail)) { - std::atomic_thread_fence(std::memory_order_acquire); - - index_t myDequeueCount = - this->dequeueOptimisticCount.fetch_add(1, std::memory_order_relaxed); - assert(overcommit <= myDequeueCount); - tail = this->tailIndex.load(std::memory_order_acquire); - if (details::likely( - details::circular_less_than(myDequeueCount - overcommit, tail))) { - index_t index = this->headIndex.fetch_add(1, std::memory_order_acq_rel); - - // Determine which block the element is in - auto entry = get_block_index_entry_for_index(index); - - // Dequeue - auto block = entry->value.load(std::memory_order_relaxed); - auto& el = *((*block)[index]); - - if (!MOODYCAMEL_NOEXCEPT_ASSIGN(T, T&&, element = std::move(el))) { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - // Note: Acquiring the mutex with every dequeue instead of only when a block - // is released is very sub-optimal, but it is, after all, purely debug code. - debug::DebugLock lock(producer->mutex); -#endif - struct Guard { - Block* block; - index_t index; - BlockIndexEntry* entry; - ConcurrentQueue* parent; - - ~Guard() { - (*block)[index]->~T(); - if (block->ConcurrentQueue::Block::template set_empty(index)) { - entry->value.store(nullptr, std::memory_order_relaxed); - parent->add_block_to_free_list(block); - } - } - } guard = { block, index, entry, this->parent }; - - element = std::move(el); - } else { - element = std::move(el); - el.~T(); - - if (block->ConcurrentQueue::Block::template set_empty(index)) { - { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - // Add the block back into the global free pool (and remove from block index) - entry->value.store(nullptr, std::memory_order_relaxed); - } - this->parent->add_block_to_free_list(block); // releases the above store - } - } - - return true; - } else { - this->dequeueOvercommit.fetch_add(1, std::memory_order_release); - } - } - - return false; - } - - template - bool enqueue_bulk(It itemFirst, size_t count) { - // First, we need to make sure we have enough room to enqueue all of the elements; - // this means pre-allocating blocks and putting them in the block index (but only if - // all the allocations succeeded). - - // Note that the tailBlock we start off with may not be owned by us any more; - // this happens if it was filled up exactly to the top (setting tailIndex to - // the first index of the next block which is not yet allocated), then dequeued - // completely (putting it on the free list) before we enqueue again. - - index_t startTailIndex = this->tailIndex.load(std::memory_order_relaxed); - auto startBlock = this->tailBlock; - Block* firstAllocatedBlock = nullptr; - auto endBlock = this->tailBlock; - - // Figure out how many blocks we'll need to allocate, and do so - size_t blockBaseDiff = - ((startTailIndex + count - 1) & ~static_cast(BLOCK_SIZE - 1)) - - ((startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1)); - index_t currentTailIndex = (startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1); - if (blockBaseDiff > 0) { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - do { - blockBaseDiff -= static_cast(BLOCK_SIZE); - currentTailIndex += static_cast(BLOCK_SIZE); - - // Find out where we'll be inserting this block in the block index - BlockIndexEntry* idxEntry; - Block* newBlock; - bool indexInserted = false; - auto head = this->headIndex.load(std::memory_order_relaxed); - assert(!details::circular_less_than(currentTailIndex, head)); - bool full = !details::circular_less_than(head, currentTailIndex + BLOCK_SIZE) || - (MAX_SUBQUEUE_SIZE != details::const_numeric_max::value && - (MAX_SUBQUEUE_SIZE == 0 || - MAX_SUBQUEUE_SIZE - BLOCK_SIZE < currentTailIndex - head)); - if (full || - !(indexInserted = insert_block_index_entry(idxEntry, currentTailIndex)) || - (newBlock = this->parent->ConcurrentQueue::template requisition_block()) == - nullptr) { - // Index allocation or block allocation failed; revert any other allocations - // and index insertions done so far for this operation - if (indexInserted) { - rewind_block_index_tail(); - idxEntry->value.store(nullptr, std::memory_order_relaxed); - } - currentTailIndex = (startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1); - for (auto block = firstAllocatedBlock; block != nullptr; block = block->next) { - currentTailIndex += static_cast(BLOCK_SIZE); - idxEntry = get_block_index_entry_for_index(currentTailIndex); - idxEntry->value.store(nullptr, std::memory_order_relaxed); - rewind_block_index_tail(); - } - this->parent->add_blocks_to_free_list(firstAllocatedBlock); - this->tailBlock = startBlock; - - return false; - } - -#if MCDBGQ_TRACKMEM - newBlock->owner = this; -#endif - newBlock->ConcurrentQueue::Block::template reset_empty(); - newBlock->next = nullptr; - - // Insert the new block into the index - idxEntry->value.store(newBlock, std::memory_order_relaxed); - - // Store the chain of blocks so that we can undo if later allocations fail, - // and so that we can find the blocks when we do the actual enqueueing - if ((startTailIndex & static_cast(BLOCK_SIZE - 1)) != 0 || - firstAllocatedBlock != nullptr) { - assert(this->tailBlock != nullptr); - this->tailBlock->next = newBlock; - } - this->tailBlock = newBlock; - endBlock = newBlock; - firstAllocatedBlock = firstAllocatedBlock == nullptr ? newBlock : firstAllocatedBlock; - } while (blockBaseDiff > 0); - } - - // Enqueue, one block at a time - index_t newTailIndex = startTailIndex + static_cast(count); - currentTailIndex = startTailIndex; - this->tailBlock = startBlock; - assert((startTailIndex & static_cast(BLOCK_SIZE - 1)) != 0 || - firstAllocatedBlock != nullptr || count == 0); - if ((startTailIndex & static_cast(BLOCK_SIZE - 1)) == 0 && - firstAllocatedBlock != nullptr) { - this->tailBlock = firstAllocatedBlock; - } - while (true) { - auto stopIndex = (currentTailIndex & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - if (details::circular_less_than(newTailIndex, stopIndex)) { - stopIndex = newTailIndex; - } - if (MOODYCAMEL_NOEXCEPT_CTOR(T, decltype(*itemFirst), - new (nullptr) T(details::deref_noexcept(itemFirst)))) { - while (currentTailIndex != stopIndex) { - new ((*this->tailBlock)[currentTailIndex++]) T(*itemFirst++); - } - } else { - MOODYCAMEL_TRY { - while (currentTailIndex != stopIndex) { - new ((*this->tailBlock)[currentTailIndex]) T(details::nomove_if< - (bool)!MOODYCAMEL_NOEXCEPT_CTOR( - T, decltype(*itemFirst), new (nullptr) - T(details::deref_noexcept(itemFirst)))>::eval(*itemFirst)); - ++currentTailIndex; - ++itemFirst; - } - } - MOODYCAMEL_CATCH (...) { - auto constructedStopIndex = currentTailIndex; - auto lastBlockEnqueued = this->tailBlock; - - if (!details::is_trivially_destructible::value) { - auto block = startBlock; - if ((startTailIndex & static_cast(BLOCK_SIZE - 1)) == 0) { - block = firstAllocatedBlock; - } - currentTailIndex = startTailIndex; - while (true) { - auto stopIndex = (currentTailIndex & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - if (details::circular_less_than(constructedStopIndex, stopIndex)) { - stopIndex = constructedStopIndex; - } - while (currentTailIndex != stopIndex) { - (*block)[currentTailIndex++]->~T(); - } - if (block == lastBlockEnqueued) { - break; - } - block = block->next; - } - } - - currentTailIndex = (startTailIndex - 1) & ~static_cast(BLOCK_SIZE - 1); - for (auto block = firstAllocatedBlock; block != nullptr; block = block->next) { - currentTailIndex += static_cast(BLOCK_SIZE); - auto idxEntry = get_block_index_entry_for_index(currentTailIndex); - idxEntry->value.store(nullptr, std::memory_order_relaxed); - rewind_block_index_tail(); - } - this->parent->add_blocks_to_free_list(firstAllocatedBlock); - this->tailBlock = startBlock; - MOODYCAMEL_RETHROW; - } - } - - if (this->tailBlock == endBlock) { - assert(currentTailIndex == newTailIndex); - break; - } - this->tailBlock = this->tailBlock->next; - } - this->tailIndex.store(newTailIndex, std::memory_order_release); - return true; - } - - template - size_t dequeue_bulk(It& itemFirst, size_t max) { - auto tail = this->tailIndex.load(std::memory_order_relaxed); - auto overcommit = this->dequeueOvercommit.load(std::memory_order_relaxed); - auto desiredCount = static_cast( - tail - (this->dequeueOptimisticCount.load(std::memory_order_relaxed) - overcommit)); - if (details::circular_less_than(0, desiredCount)) { - desiredCount = desiredCount < max ? desiredCount : max; - std::atomic_thread_fence(std::memory_order_acquire); - - auto myDequeueCount = - this->dequeueOptimisticCount.fetch_add(desiredCount, std::memory_order_relaxed); - assert(overcommit <= myDequeueCount); - - tail = this->tailIndex.load(std::memory_order_acquire); - auto actualCount = static_cast(tail - (myDequeueCount - overcommit)); - if (details::circular_less_than(0, actualCount)) { - actualCount = desiredCount < actualCount ? desiredCount : actualCount; - if (actualCount < desiredCount) { - this->dequeueOvercommit.fetch_add(desiredCount - actualCount, - std::memory_order_release); - } - - // Get the first index. Note that since there's guaranteed to be at least actualCount - // elements, this - // will never exceed tail. - auto firstIndex = this->headIndex.fetch_add(actualCount, std::memory_order_acq_rel); - - // Iterate the blocks and dequeue - auto index = firstIndex; - BlockIndexHeader* localBlockIndex; - auto indexIndex = get_block_index_index_for_index(index, localBlockIndex); - do { - auto blockStartIndex = index; - auto endIndex = - (index & ~static_cast(BLOCK_SIZE - 1)) + static_cast(BLOCK_SIZE); - endIndex = details::circular_less_than( - firstIndex + static_cast(actualCount), endIndex) - ? firstIndex + static_cast(actualCount) - : endIndex; - - auto entry = localBlockIndex->index[indexIndex]; - auto block = entry->value.load(std::memory_order_relaxed); - if (MOODYCAMEL_NOEXCEPT_ASSIGN( - T, T &&, details::deref_noexcept(itemFirst) = std::move((*(*block)[index])))) { - while (index != endIndex) { - auto& el = *((*block)[index]); - *itemFirst++ = std::move(el); - el.~T(); - ++index; - } - } else { - MOODYCAMEL_TRY { - while (index != endIndex) { - auto& el = *((*block)[index]); - *itemFirst = std::move(el); - ++itemFirst; - el.~T(); - ++index; - } - } - MOODYCAMEL_CATCH (...) { - do { - entry = localBlockIndex->index[indexIndex]; - block = entry->value.load(std::memory_order_relaxed); - while (index != endIndex) { - (*block)[index++]->~T(); - } - - if (block->ConcurrentQueue::Block::template set_many_empty( - blockStartIndex, static_cast(endIndex - blockStartIndex))) { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - entry->value.store(nullptr, std::memory_order_relaxed); - this->parent->add_block_to_free_list(block); - } - indexIndex = (indexIndex + 1) & (localBlockIndex->capacity - 1); - - blockStartIndex = index; - endIndex = (index & ~static_cast(BLOCK_SIZE - 1)) + - static_cast(BLOCK_SIZE); - endIndex = details::circular_less_than( - firstIndex + static_cast(actualCount), endIndex) - ? firstIndex + static_cast(actualCount) - : endIndex; - } while (index != firstIndex + actualCount); - - MOODYCAMEL_RETHROW; - } - } - if (block->ConcurrentQueue::Block::template set_many_empty( - blockStartIndex, static_cast(endIndex - blockStartIndex))) { - { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - // Note that the set_many_empty above did a release, meaning that anybody who - // acquires the block - // we're about to free can use it safely since our writes (and reads!) will have - // happened-before then. - entry->value.store(nullptr, std::memory_order_relaxed); - } - this->parent->add_block_to_free_list(block); // releases the above store - } - indexIndex = (indexIndex + 1) & (localBlockIndex->capacity - 1); - } while (index != firstIndex + actualCount); - - return actualCount; - } else { - this->dequeueOvercommit.fetch_add(desiredCount, std::memory_order_release); - } - } - - return 0; - } - - private: - // The block size must be > 1, so any number with the low bit set is an invalid block base index - static const index_t INVALID_BLOCK_BASE = 1; - - struct BlockIndexEntry { - std::atomic key; - std::atomic value; - }; - - struct BlockIndexHeader { - size_t capacity; - std::atomic tail; - BlockIndexEntry* entries; - BlockIndexEntry** index; - BlockIndexHeader* prev; - }; - - template - inline bool insert_block_index_entry(BlockIndexEntry*& idxEntry, index_t blockStartIndex) { - auto localBlockIndex = blockIndex.load( - std::memory_order_relaxed); // We're the only writer thread, relaxed is OK - auto newTail = (localBlockIndex->tail.load(std::memory_order_relaxed) + 1) & - (localBlockIndex->capacity - 1); - idxEntry = localBlockIndex->index[newTail]; - if (idxEntry->key.load(std::memory_order_relaxed) == INVALID_BLOCK_BASE || - idxEntry->value.load(std::memory_order_relaxed) == nullptr) { - - idxEntry->key.store(blockStartIndex, std::memory_order_relaxed); - localBlockIndex->tail.store(newTail, std::memory_order_release); - return true; - } - - // No room in the old block index, try to allocate another one! - if (allocMode == CannotAlloc || !new_block_index()) { - return false; - } - localBlockIndex = blockIndex.load(std::memory_order_relaxed); - newTail = (localBlockIndex->tail.load(std::memory_order_relaxed) + 1) & - (localBlockIndex->capacity - 1); - idxEntry = localBlockIndex->index[newTail]; - assert(idxEntry->key.load(std::memory_order_relaxed) == INVALID_BLOCK_BASE); - idxEntry->key.store(blockStartIndex, std::memory_order_relaxed); - localBlockIndex->tail.store(newTail, std::memory_order_release); - return true; - } - - inline void rewind_block_index_tail() { - auto localBlockIndex = blockIndex.load(std::memory_order_relaxed); - localBlockIndex->tail.store((localBlockIndex->tail.load(std::memory_order_relaxed) - 1) & - (localBlockIndex->capacity - 1), - std::memory_order_relaxed); - } - - inline BlockIndexEntry* get_block_index_entry_for_index(index_t index) const { - BlockIndexHeader* localBlockIndex; - auto idx = get_block_index_index_for_index(index, localBlockIndex); - return localBlockIndex->index[idx]; - } - - inline size_t get_block_index_index_for_index(index_t index, - BlockIndexHeader*& localBlockIndex) const { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - debug::DebugLock lock(mutex); -#endif - index &= ~static_cast(BLOCK_SIZE - 1); - localBlockIndex = blockIndex.load(std::memory_order_acquire); - auto tail = localBlockIndex->tail.load(std::memory_order_acquire); - auto tailBase = localBlockIndex->index[tail]->key.load(std::memory_order_relaxed); - assert(tailBase != INVALID_BLOCK_BASE); - // Note: Must use division instead of shift because the index may wrap around, causing a - // negative - // offset, whose negativity we want to preserve - auto offset = static_cast( - static_cast::type>(index - tailBase) / BLOCK_SIZE); - size_t idx = (tail + offset) & (localBlockIndex->capacity - 1); - assert(localBlockIndex->index[idx]->key.load(std::memory_order_relaxed) == index && - localBlockIndex->index[idx]->value.load(std::memory_order_relaxed) != nullptr); - return idx; - } - - bool new_block_index() { - auto prev = blockIndex.load(std::memory_order_relaxed); - size_t prevCapacity = prev == nullptr ? 0 : prev->capacity; - auto entryCount = prev == nullptr ? nextBlockIndexCapacity : prevCapacity; - auto raw = static_cast((Traits::malloc)( - sizeof(BlockIndexHeader) + std::alignment_of::value - 1 + - sizeof(BlockIndexEntry) * entryCount + std::alignment_of::value - 1 + - sizeof(BlockIndexEntry*) * nextBlockIndexCapacity)); - if (raw == nullptr) { - return false; - } - - auto header = new (raw) BlockIndexHeader; - auto entries = reinterpret_cast( - details::align_for(raw + sizeof(BlockIndexHeader))); - auto index = reinterpret_cast(details::align_for( - reinterpret_cast(entries) + sizeof(BlockIndexEntry) * entryCount)); - if (prev != nullptr) { - auto prevTail = prev->tail.load(std::memory_order_relaxed); - auto prevPos = prevTail; - size_t i = 0; - do { - prevPos = (prevPos + 1) & (prev->capacity - 1); - index[i++] = prev->index[prevPos]; - } while (prevPos != prevTail); - assert(i == prevCapacity); - } - for (size_t i = 0; i != entryCount; ++i) { - new (entries + i) BlockIndexEntry; - entries[i].key.store(INVALID_BLOCK_BASE, std::memory_order_relaxed); - index[prevCapacity + i] = entries + i; - } - header->prev = prev; - header->entries = entries; - header->index = index; - header->capacity = nextBlockIndexCapacity; - header->tail.store((prevCapacity - 1) & (nextBlockIndexCapacity - 1), - std::memory_order_relaxed); - - blockIndex.store(header, std::memory_order_release); - - nextBlockIndexCapacity <<= 1; - - return true; - } - - private: - size_t nextBlockIndexCapacity; - std::atomic blockIndex; - -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - public: - details::ThreadExitListener threadExitListener; - private: -#endif - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - public: - ImplicitProducer* nextImplicitProducer; - private: -#endif - -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODBLOCKINDEX - mutable debug::DebugMutex mutex; -#endif -#if MCDBGQ_TRACKMEM - friend struct MemStats; -#endif - }; - - ////////////////////////////////// - // Block pool manipulation - ////////////////////////////////// - - void populate_initial_block_list(size_t blockCount) { - initialBlockPoolSize = blockCount; - if (initialBlockPoolSize == 0) { - initialBlockPool = nullptr; - return; - } - - initialBlockPool = create_array(blockCount); - if (initialBlockPool == nullptr) { - initialBlockPoolSize = 0; - } - for (size_t i = 0; i < initialBlockPoolSize; ++i) { - initialBlockPool[i].dynamicallyAllocated = false; - } - } - - inline Block* try_get_block_from_initial_pool() { - if (initialBlockPoolIndex.load(std::memory_order_relaxed) >= initialBlockPoolSize) { - return nullptr; - } - - auto index = initialBlockPoolIndex.fetch_add(1, std::memory_order_relaxed); - - return index < initialBlockPoolSize ? (initialBlockPool + index) : nullptr; - } - - inline void add_block_to_free_list(Block* block) { -#if MCDBGQ_TRACKMEM - block->owner = nullptr; -#endif - freeList.add(block); - } - - inline void add_blocks_to_free_list(Block* block) { - while (block != nullptr) { - auto next = block->next; - add_block_to_free_list(block); - block = next; - } - } - - inline Block* try_get_block_from_free_list() { return freeList.try_get(); } - - // Gets a free block from one of the memory pools, or allocates a new one (if applicable) - template - Block* requisition_block() { - auto block = try_get_block_from_initial_pool(); - if (block != nullptr) { - return block; - } - - block = try_get_block_from_free_list(); - if (block != nullptr) { - return block; - } - - if (canAlloc == CanAlloc) { - return create(); - } - - return nullptr; - } - - -#if MCDBGQ_TRACKMEM - public: - struct MemStats { - size_t allocatedBlocks; - size_t usedBlocks; - size_t freeBlocks; - size_t ownedBlocksExplicit; - size_t ownedBlocksImplicit; - size_t implicitProducers; - size_t explicitProducers; - size_t elementsEnqueued; - size_t blockClassBytes; - size_t queueClassBytes; - size_t implicitBlockIndexBytes; - size_t explicitBlockIndexBytes; - - friend class ConcurrentQueue; - - private: - static MemStats getFor(ConcurrentQueue* q) { - MemStats stats = { 0 }; - - stats.elementsEnqueued = q->size_approx(); - - auto block = q->freeList.head_unsafe(); - while (block != nullptr) { - ++stats.allocatedBlocks; - ++stats.freeBlocks; - block = block->freeListNext.load(std::memory_order_relaxed); - } - - for (auto ptr = q->producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - bool implicit = dynamic_cast(ptr) != nullptr; - stats.implicitProducers += implicit ? 1 : 0; - stats.explicitProducers += implicit ? 0 : 1; - - if (implicit) { - auto prod = static_cast(ptr); - stats.queueClassBytes += sizeof(ImplicitProducer); - auto head = prod->headIndex.load(std::memory_order_relaxed); - auto tail = prod->tailIndex.load(std::memory_order_relaxed); - auto hash = prod->blockIndex.load(std::memory_order_relaxed); - if (hash != nullptr) { - for (size_t i = 0; i != hash->capacity; ++i) { - if (hash->index[i]->key.load(std::memory_order_relaxed) != - ImplicitProducer::INVALID_BLOCK_BASE && - hash->index[i]->value.load(std::memory_order_relaxed) != nullptr) { - ++stats.allocatedBlocks; - ++stats.ownedBlocksImplicit; - } - } - stats.implicitBlockIndexBytes += - hash->capacity * sizeof(typename ImplicitProducer::BlockIndexEntry); - for (; hash != nullptr; hash = hash->prev) { - stats.implicitBlockIndexBytes += - sizeof(typename ImplicitProducer::BlockIndexHeader) + - hash->capacity * sizeof(typename ImplicitProducer::BlockIndexEntry*); - } - } - for (; details::circular_less_than(head, tail); head += BLOCK_SIZE) { - //auto block = prod->get_block_index_entry_for_index(head); - ++stats.usedBlocks; - } - } else { - auto prod = static_cast(ptr); - stats.queueClassBytes += sizeof(ExplicitProducer); - auto tailBlock = prod->tailBlock; - bool wasNonEmpty = false; - if (tailBlock != nullptr) { - auto block = tailBlock; - do { - ++stats.allocatedBlocks; - if (!block->ConcurrentQueue::Block::template is_empty() || - wasNonEmpty) { - ++stats.usedBlocks; - wasNonEmpty = wasNonEmpty || block != tailBlock; - } - ++stats.ownedBlocksExplicit; - block = block->next; - } while (block != tailBlock); - } - auto index = prod->blockIndex.load(std::memory_order_relaxed); - while (index != nullptr) { - stats.explicitBlockIndexBytes += - sizeof(typename ExplicitProducer::BlockIndexHeader) + - index->size * sizeof(typename ExplicitProducer::BlockIndexEntry); - index = static_cast(index->prev); - } - } - } - - auto freeOnInitialPool = - q->initialBlockPoolIndex.load(std::memory_order_relaxed) >= q->initialBlockPoolSize - ? 0 - : q->initialBlockPoolSize - q->initialBlockPoolIndex.load(std::memory_order_relaxed); - stats.allocatedBlocks += freeOnInitialPool; - stats.freeBlocks += freeOnInitialPool; - - stats.blockClassBytes = sizeof(Block) * stats.allocatedBlocks; - stats.queueClassBytes += sizeof(ConcurrentQueue); - - return stats; - } - }; - - // For debugging only. Not thread-safe. - MemStats getMemStats() { return MemStats::getFor(this); } - - private: - friend struct MemStats; -#endif - - ////////////////////////////////// - // Producer list manipulation - ////////////////////////////////// - - ProducerBase* recycle_or_create_producer(bool isExplicit) { - bool recycled; - return recycle_or_create_producer(isExplicit, recycled); - } - - ProducerBase* recycle_or_create_producer(bool isExplicit, bool& recycled) { -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH - debug::DebugLock lock(implicitProdMutex); -#endif - // Try to re-use one first - for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; - ptr = ptr->next_prod()) { - if (ptr->inactive.load(std::memory_order_relaxed) && ptr->isExplicit == isExplicit) { - bool expected = true; - if (ptr->inactive.compare_exchange_strong(expected, /* desired */ false, - std::memory_order_acquire, - std::memory_order_relaxed)) { - // We caught one! It's been marked as activated, the caller can have it - recycled = true; - return ptr; - } - } - } - - recycled = false; - return add_producer(isExplicit ? static_cast(create(this)) - : create(this)); - } - - ProducerBase* add_producer(ProducerBase* producer) { - // Handle failed memory allocation - if (producer == nullptr) { - return nullptr; - } - - producerCount.fetch_add(1, std::memory_order_relaxed); - - // Add it to the lock-free list - auto prevTail = producerListTail.load(std::memory_order_relaxed); - do { - producer->next = prevTail; - } while (!producerListTail.compare_exchange_weak(prevTail, producer, std::memory_order_release, - std::memory_order_relaxed)); - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - if (producer->isExplicit) { - auto prevTailExplicit = explicitProducers.load(std::memory_order_relaxed); - do { - static_cast(producer)->nextExplicitProducer = prevTailExplicit; - } while (!explicitProducers.compare_exchange_weak( - prevTailExplicit, static_cast(producer), - std::memory_order_release, std::memory_order_relaxed)); - } else { - auto prevTailImplicit = implicitProducers.load(std::memory_order_relaxed); - do { - static_cast(producer)->nextImplicitProducer = prevTailImplicit; - } while (!implicitProducers.compare_exchange_weak( - prevTailImplicit, static_cast(producer), - std::memory_order_release, std::memory_order_relaxed)); - } -#endif - - return producer; - } - - void reown_producers() { - // After another instance is moved-into/swapped-with this one, all the - // producers we stole still think their parents are the other queue. - // So fix them up! - for (auto ptr = producerListTail.load(std::memory_order_relaxed); ptr != nullptr; - ptr = ptr->next_prod()) { - ptr->parent = this; - } - } - - ////////////////////////////////// - // Implicit producer hash - ////////////////////////////////// - - struct ImplicitProducerKVP { - std::atomic key; - ImplicitProducer* value; // No need for atomicity since it's only read by the thread that sets - // it in the first place - - ImplicitProducerKVP() { } - - ImplicitProducerKVP(ImplicitProducerKVP&& other) MOODYCAMEL_NOEXCEPT { - key.store(other.key.load(std::memory_order_relaxed), std::memory_order_relaxed); - value = other.value; - } - - inline ImplicitProducerKVP& operator=(ImplicitProducerKVP&& other) MOODYCAMEL_NOEXCEPT { - swap(other); - return *this; - } - - inline void swap(ImplicitProducerKVP& other) MOODYCAMEL_NOEXCEPT { - if (this != &other) { - details::swap_relaxed(key, other.key); - std::swap(value, other.value); - } - } - }; - - template - friend void moodycamel::swap(typename ConcurrentQueue::ImplicitProducerKVP&, - typename ConcurrentQueue::ImplicitProducerKVP&) - MOODYCAMEL_NOEXCEPT; - - struct ImplicitProducerHash { - size_t capacity; - ImplicitProducerKVP* entries; - ImplicitProducerHash* prev; - }; - - inline void populate_initial_implicit_producer_hash() { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return; - - implicitProducerHashCount.store(0, std::memory_order_relaxed); - auto hash = &initialImplicitProducerHash; - hash->capacity = INITIAL_IMPLICIT_PRODUCER_HASH_SIZE; - hash->entries = &initialImplicitProducerHashEntries[0]; - for (size_t i = 0; i != INITIAL_IMPLICIT_PRODUCER_HASH_SIZE; ++i) { - initialImplicitProducerHashEntries[i] - .key.store(details::invalid_thread_id, std::memory_order_relaxed); - } - hash->prev = nullptr; - implicitProducerHash.store(hash, std::memory_order_relaxed); - } - - void swap_implicit_producer_hashes(ConcurrentQueue& other) { - if (INITIAL_IMPLICIT_PRODUCER_HASH_SIZE == 0) return; - - // Swap (assumes our implicit producer hash is initialized) - initialImplicitProducerHashEntries.swap(other.initialImplicitProducerHashEntries); - initialImplicitProducerHash.entries = &initialImplicitProducerHashEntries[0]; - other.initialImplicitProducerHash.entries = &other.initialImplicitProducerHashEntries[0]; - - details::swap_relaxed(implicitProducerHashCount, other.implicitProducerHashCount); - - details::swap_relaxed(implicitProducerHash, other.implicitProducerHash); - if (implicitProducerHash.load(std::memory_order_relaxed) == - &other.initialImplicitProducerHash) { - implicitProducerHash.store(&initialImplicitProducerHash, std::memory_order_relaxed); - } else { - ImplicitProducerHash* hash; - for (hash = implicitProducerHash.load(std::memory_order_relaxed); - hash->prev != &other.initialImplicitProducerHash; hash = hash->prev) { - continue; - } - hash->prev = &initialImplicitProducerHash; - } - if (other.implicitProducerHash.load(std::memory_order_relaxed) == - &initialImplicitProducerHash) { - other.implicitProducerHash.store(&other.initialImplicitProducerHash, - std::memory_order_relaxed); - } else { - ImplicitProducerHash* hash; - for (hash = other.implicitProducerHash.load(std::memory_order_relaxed); - hash->prev != &initialImplicitProducerHash; hash = hash->prev) { - continue; - } - hash->prev = &other.initialImplicitProducerHash; - } - } - - // Only fails (returns nullptr) if memory allocation fails - ImplicitProducer* get_or_add_implicit_producer() { - // Note that since the data is essentially thread-local (key is thread ID), - // there's a reduced need for fences (memory ordering is already consistent - // for any individual thread), except for the current table itself. - - // Start by looking for the thread ID in the current and all previous hash tables. - // If it's not found, it must not be in there yet, since this same thread would - // have added it previously to one of the tables that we traversed. - -// Code and algorithm adapted from -// http://preshing.com/20130605/the-worlds-simplest-lock-free-hash-table - -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH - debug::DebugLock lock(implicitProdMutex); -#endif - - auto id = details::thread_id(); - auto hashedId = details::hash_thread_id(id); - - auto mainHash = implicitProducerHash.load(std::memory_order_acquire); - for (auto hash = mainHash; hash != nullptr; hash = hash->prev) { - // Look for the id in this hash - auto index = hashedId; - while (true) { // Not an infinite loop because at least one slot is free in the hash table - index &= hash->capacity - 1; - - auto probedKey = hash->entries[index].key.load(std::memory_order_relaxed); - if (probedKey == id) { - // Found it! If we had to search several hashes deep, though, we should lazily add it - // to the current main hash table to avoid the extended search next time. - // Note there's guaranteed to be room in the current hash table since every subsequent - // table implicitly reserves space for all previous tables (there's only one - // implicitProducerHashCount). - auto value = hash->entries[index].value; - if (hash != mainHash) { - index = hashedId; - while (true) { - index &= mainHash->capacity - 1; - probedKey = mainHash->entries[index].key.load(std::memory_order_relaxed); - auto empty = details::invalid_thread_id; -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - auto reusable = details::invalid_thread_id2; - if ((probedKey == empty && mainHash->entries[index].key.compare_exchange_strong( - empty, id, std::memory_order_relaxed)) || - (probedKey == reusable && mainHash->entries[index].key.compare_exchange_strong( - reusable, id, std::memory_order_acquire))) { -#else - if ((probedKey == empty && mainHash->entries[index].key.compare_exchange_strong( - empty, id, std::memory_order_relaxed))) { -#endif - mainHash->entries[index].value = value; - break; - } - ++index; - } - } - - return value; - } - if (probedKey == details::invalid_thread_id) { - break; // Not in this hash table - } - ++index; - } - } - - // Insert! - auto newCount = 1 + implicitProducerHashCount.fetch_add(1, std::memory_order_relaxed); - while (true) { - if (newCount >= (mainHash->capacity >> 1) && - !implicitProducerHashResizeInProgress.test_and_set(std::memory_order_acquire)) { - // We've acquired the resize lock, try to allocate a bigger hash table. - // Note the acquire fence synchronizes with the release fence at the end of this block, and - // hence when - // we reload implicitProducerHash it must be the most recent version (it only gets changed - // within this - // locked block). - mainHash = implicitProducerHash.load(std::memory_order_acquire); - if (newCount >= (mainHash->capacity >> 1)) { - auto newCapacity = mainHash->capacity << 1; - while (newCount >= (newCapacity >> 1)) { - newCapacity <<= 1; - } - auto raw = static_cast((Traits::malloc)( - sizeof(ImplicitProducerHash) + std::alignment_of::value - 1 + - sizeof(ImplicitProducerKVP) * newCapacity)); - if (raw == nullptr) { - // Allocation failed - implicitProducerHashCount.fetch_add(-1, std::memory_order_relaxed); - implicitProducerHashResizeInProgress.clear(std::memory_order_relaxed); - return nullptr; - } - - auto newHash = new (raw) ImplicitProducerHash; - newHash->capacity = newCapacity; - newHash->entries = reinterpret_cast( - details::align_for(raw + sizeof(ImplicitProducerHash))); - for (size_t i = 0; i != newCapacity; ++i) { - new (newHash->entries + i) ImplicitProducerKVP; - newHash->entries[i].key.store(details::invalid_thread_id, std::memory_order_relaxed); - } - newHash->prev = mainHash; - implicitProducerHash.store(newHash, std::memory_order_release); - implicitProducerHashResizeInProgress.clear(std::memory_order_release); - mainHash = newHash; - } else { - implicitProducerHashResizeInProgress.clear(std::memory_order_release); - } - } - - // If it's < three-quarters full, add to the old one anyway so that we don't have to wait for - // the next table - // to finish being allocated by another thread (and if we just finished allocating above, the - // condition will - // always be true) - if (newCount < (mainHash->capacity >> 1) + (mainHash->capacity >> 2)) { - bool recycled; - auto producer = static_cast(recycle_or_create_producer(false, recycled)); - if (producer == nullptr) { - implicitProducerHashCount.fetch_add(-1, std::memory_order_relaxed); - return nullptr; - } - if (recycled) { - implicitProducerHashCount.fetch_add(-1, std::memory_order_relaxed); - } - -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - producer->threadExitListener.callback = - &ConcurrentQueue::implicit_producer_thread_exited_callback; - producer->threadExitListener.userData = producer; - details::ThreadExitNotifier::subscribe(&producer->threadExitListener); -#endif - - auto index = hashedId; - while (true) { - index &= mainHash->capacity - 1; - auto probedKey = mainHash->entries[index].key.load(std::memory_order_relaxed); - - auto empty = details::invalid_thread_id; -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - auto reusable = details::invalid_thread_id2; - if ((probedKey == empty && mainHash->entries[index].key.compare_exchange_strong( - empty, id, std::memory_order_relaxed)) || - (probedKey == reusable && mainHash->entries[index].key.compare_exchange_strong( - reusable, id, std::memory_order_acquire))) { -#else - if ((probedKey == empty && mainHash->entries[index].key.compare_exchange_strong( - empty, id, std::memory_order_relaxed))) { -#endif - mainHash->entries[index].value = producer; - break; - } - ++index; - } - return producer; - } - - // Hmm, the old hash is quite full and somebody else is busy allocating a new one. - // We need to wait for the allocating thread to finish (if it succeeds, we add, if not, - // we try to allocate ourselves). - mainHash = implicitProducerHash.load(std::memory_order_acquire); - } - } - -#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED - void implicit_producer_thread_exited(ImplicitProducer* producer) { - // Remove from thread exit listeners - details::ThreadExitNotifier::unsubscribe(&producer->threadExitListener); - - // Remove from hash -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH - debug::DebugLock lock(implicitProdMutex); -#endif - auto hash = implicitProducerHash.load(std::memory_order_acquire); - assert(hash != nullptr); // The thread exit listener is only registered if we were added to a - // hash in the first place - auto id = details::thread_id(); - auto hashedId = details::hash_thread_id(id); - details::thread_id_t probedKey; - - // We need to traverse all the hashes just in case other threads aren't on the current one yet - // and are - // trying to add an entry thinking there's a free slot (because they reused a producer) - for (; hash != nullptr; hash = hash->prev) { - auto index = hashedId; - do { - index &= hash->capacity - 1; - probedKey = hash->entries[index].key.load(std::memory_order_relaxed); - if (probedKey == id) { - hash->entries[index].key.store(details::invalid_thread_id2, std::memory_order_release); - break; - } - ++index; - } while (probedKey != details::invalid_thread_id); // Can happen if the hash has changed but - // we weren't put back in it yet, or if we - // weren't added to this hash in the first - // place - } - - // Mark the queue as being recyclable - producer->inactive.store(true, std::memory_order_release); - } - - static void implicit_producer_thread_exited_callback(void* userData) { - auto producer = static_cast(userData); - auto queue = producer->parent; - queue->implicit_producer_thread_exited(producer); - } -#endif - - ////////////////////////////////// - // Utility functions - ////////////////////////////////// - - template - static inline U* create_array(size_t count) { - assert(count > 0); - auto p = static_cast((Traits::malloc)(sizeof(U) * count)); - if (p == nullptr) { - return nullptr; - } - - for (size_t i = 0; i != count; ++i) { - new (p + i) U(); - } - return p; - } - - template - static inline void destroy_array(U* p, size_t count) { - if (p != nullptr) { - assert(count > 0); - for (size_t i = count; i != 0; ) { - (p + --i)->~U(); - } - //(Traits::free)(p); - } - } - - template - static inline U* create() { - auto p = (Traits::malloc)(sizeof(U)); - return p != nullptr ? new (p) U : nullptr; - } - - template - static inline U* create(A1&& a1) { - auto p = (Traits::malloc)(sizeof(U)); - return p != nullptr ? new (p) U(std::forward(a1)) : nullptr; - } - - template - static inline void destroy(U* p) { - if (p != nullptr) { - p->~U(); - } - (Traits::free)(p); - } - -private: - std::atomic producerListTail; - std::atomic producerCount; - - std::atomic initialBlockPoolIndex; - Block* initialBlockPool; - size_t initialBlockPoolSize; - -#if !MCDBGQ_USEDEBUGFREELIST - FreeList freeList; -#else - debug::DebugFreeList freeList; -#endif - - std::atomic implicitProducerHash; - std::atomic implicitProducerHashCount; // Number of slots logically used - ImplicitProducerHash initialImplicitProducerHash; - std::array - initialImplicitProducerHashEntries; - std::atomic_flag implicitProducerHashResizeInProgress; - - std::atomic nextExplicitConsumerId; - std::atomic globalExplicitConsumerOffset; - -#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH - debug::DebugMutex implicitProdMutex; -#endif - -#ifdef MOODYCAMEL_QUEUE_INTERNAL_DEBUG - std::atomic explicitProducers; - std::atomic implicitProducers; -#endif -}; - -template -ProducerToken::ProducerToken(ConcurrentQueue& queue) - : producer(queue.recycle_or_create_producer(true)) { - if (producer != nullptr) { - producer->token = this; - } -} - -template -ProducerToken::ProducerToken(BlockingConcurrentQueue& queue) - : producer( - reinterpret_cast*>(&queue)->recycle_or_create_producer(true)) { - if (producer != nullptr) { - producer->token = this; - } -} - -template -ConsumerToken::ConsumerToken(ConcurrentQueue& queue) - : itemsConsumedFromCurrent(0), currentProducer(nullptr), desiredProducer(nullptr) { - initialOffset = queue.nextExplicitConsumerId.fetch_add(1, std::memory_order_release); - lastKnownGlobalOffset = -1; -} - -template -ConsumerToken::ConsumerToken(BlockingConcurrentQueue& queue) - : itemsConsumedFromCurrent(0), currentProducer(nullptr), desiredProducer(nullptr) { - initialOffset = reinterpret_cast*>(&queue) - ->nextExplicitConsumerId.fetch_add(1, std::memory_order_release); - lastKnownGlobalOffset = -1; -} - -template -inline void swap(ConcurrentQueue& a, ConcurrentQueue& b) MOODYCAMEL_NOEXCEPT { - a.swap(b); -} - -inline void swap(ProducerToken& a, ProducerToken& b) MOODYCAMEL_NOEXCEPT { a.swap(b); } - -inline void swap(ConsumerToken& a, ConsumerToken& b) MOODYCAMEL_NOEXCEPT { a.swap(b); } - -template -inline void swap(typename ConcurrentQueue::ImplicitProducerKVP& a, - typename ConcurrentQueue::ImplicitProducerKVP& b) MOODYCAMEL_NOEXCEPT { - a.swap(b); -} -} - -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - diff --git a/contrib/deneva/system/global.cpp b/contrib/deneva/system/global.cpp deleted file mode 100644 index 55d8daf9..00000000 --- a/contrib/deneva/system/global.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "mem_alloc.h" -#include "stats.h" -#include "sim_manager.h" -#include "manager.h" -#include "query.h" -#include "client_query.h" -#include "occ.h" -#include "bocc.h" -#include "focc.h" -#include "ssi.h" -#include "wsi.h" -#include "transport.h" -#include "work_queue.h" -#include "abort_queue.h" -#include "client_query.h" -#include "client_txn.h" -#include "logger.h" -#include "maat.h" -#include "manager.h" -#include "mem_alloc.h" -#include "msg_queue.h" -#include "pool.h" -#include "query.h" -#include "sequencer.h" -#include "sim_manager.h" -#include "stats.h" -#include "transport.h" -#include "txn_table.h" -#include "work_queue.h" -#include "client_txn.h" -#include "sequencer.h" -#include "logger.h" -#include "maat.h" -#include "sundial.h" -#include "http.h" - - -#include -#include "da_block_queue.h" - - -mem_alloc mem_allocator; -Stats stats; -SimManager * simulation; -Manager glob_manager; -Query_queue query_queue; -Client_query_queue client_query_queue; -OptCC occ_man; -Focc focc_man; -Bocc bocc_man; -Maat maat_man; -ssi ssi_man; -wsi wsi_man; -Sundial sundial_man; -Transport tport_man; -TxnManPool txn_man_pool; -TxnPool txn_pool; -AccessPool access_pool; -TxnTablePool txn_table_pool; -MsgPool msg_pool; -RowPool row_pool; -QryPool qry_pool; -TxnTable txn_table; -QWorkQueue work_queue; -AbortQueue abort_queue; -MessageQueue msg_queue; -Client_txn client_man; -Sequencer seq_man; -Logger logger; -TimeTable time_table; -InOutTable inout_table; -// QTcpQueue tcp_queue; -TcpTimestamp tcp_ts; -boost::lockfree::queue> da_query_queue{100}; -DABlockQueue da_gen_qry_queue(50); -bool is_server=false; -map da_start_stamp_tab; -set da_start_trans_tab; -map da_stamp_tab; -set already_abort_tab; -string DA_history_mem; -bool abort_history; -ofstream commit_file; -ofstream abort_file; - -bool volatile warmup_done = false; -bool volatile enable_thread_mem_pool = false; -pthread_barrier_t warmup_bar; - -ts_t g_abort_penalty = ABORT_PENALTY; -ts_t g_abort_penalty_max = ABORT_PENALTY_MAX; -bool g_central_man = CENTRAL_MAN; -UInt32 g_ts_alloc = TS_ALLOC; -bool g_key_order = KEY_ORDER; -bool g_ts_batch_alloc = TS_BATCH_ALLOC; -UInt32 g_ts_batch_num = TS_BATCH_NUM; -int32_t g_inflight_max = MAX_TXN_IN_FLIGHT; -//int32_t g_inflight_max = MAX_TXN_IN_FLIGHT/NODE_CNT; -uint64_t g_msg_size = MSG_SIZE_MAX; -int32_t g_load_per_server = LOAD_PER_SERVER; - -bool g_hw_migrate = HW_MIGRATE; - -volatile UInt64 g_row_id = 0; -bool g_part_alloc = PART_ALLOC; -bool g_mem_pad = MEM_PAD; -UInt32 g_cc_alg = CC_ALG; -ts_t g_query_intvl = QUERY_INTVL; -UInt32 g_part_per_txn = PART_PER_TXN; -double g_perc_multi_part = PERC_MULTI_PART; -double g_txn_read_perc = 1.0 - TXN_WRITE_PERC; -double g_txn_write_perc = TXN_WRITE_PERC; -double g_tup_read_perc = 1.0 - TUP_WRITE_PERC; -double g_tup_write_perc = TUP_WRITE_PERC; -double g_zipf_theta = ZIPF_THETA; -double g_data_perc = DATA_PERC; -double g_access_perc = ACCESS_PERC; -bool g_prt_lat_distr = PRT_LAT_DISTR; -UInt32 g_node_id = 0; -UInt32 g_node_cnt = NODE_CNT; -UInt32 g_part_cnt = PART_CNT; -UInt32 g_virtual_part_cnt = VIRTUAL_PART_CNT; -UInt32 g_core_cnt = CORE_CNT; - -#if CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC -UInt32 g_thread_cnt = PART_CNT/NODE_CNT; -#else -UInt32 g_thread_cnt = THREAD_CNT; -#endif -UInt32 g_rem_thread_cnt = REM_THREAD_CNT; -UInt32 g_abort_thread_cnt = 1; -#if LOGGING -UInt32 g_logger_thread_cnt = 1; -#else -UInt32 g_logger_thread_cnt = 0; -#endif -UInt32 g_send_thread_cnt = SEND_THREAD_CNT; -#if CC_ALG == CALVIN -// sequencer + scheduler thread -UInt32 g_total_thread_cnt = g_thread_cnt + g_rem_thread_cnt + g_send_thread_cnt + g_abort_thread_cnt + g_logger_thread_cnt + 3; -#else -UInt32 g_total_thread_cnt = g_thread_cnt + g_rem_thread_cnt + g_send_thread_cnt + g_abort_thread_cnt + g_logger_thread_cnt + 1; -#endif - -UInt32 g_total_client_thread_cnt = g_client_thread_cnt + g_client_rem_thread_cnt + g_client_send_thread_cnt; -UInt32 g_total_node_cnt = g_node_cnt + g_client_node_cnt + g_repl_cnt*g_node_cnt; -UInt64 g_synth_table_size = SYNTH_TABLE_SIZE; -UInt32 g_req_per_query = REQ_PER_QUERY; -bool g_strict_ppt = STRICT_PPT == 1; -UInt32 g_field_per_tuple = FIELD_PER_TUPLE; -UInt32 g_init_parallelism = INIT_PARALLELISM; -UInt32 g_client_node_cnt = CLIENT_NODE_CNT; -UInt32 g_client_thread_cnt = CLIENT_THREAD_CNT; -UInt32 g_client_rem_thread_cnt = CLIENT_REM_THREAD_CNT; -UInt32 g_client_send_thread_cnt = CLIENT_SEND_THREAD_CNT; -UInt32 g_servers_per_client = 0; -UInt32 g_clients_per_server = 0; -UInt32 g_server_start_node = 0; - -UInt32 g_this_thread_cnt = ISCLIENT ? g_client_thread_cnt : g_thread_cnt; -UInt32 g_this_rem_thread_cnt = ISCLIENT ? g_client_rem_thread_cnt : g_rem_thread_cnt; -UInt32 g_this_send_thread_cnt = ISCLIENT ? g_client_send_thread_cnt : g_send_thread_cnt; -UInt32 g_this_total_thread_cnt = ISCLIENT ? g_total_client_thread_cnt : g_total_thread_cnt; - -UInt32 g_max_txn_per_part = MAX_TXN_PER_PART; -UInt32 g_network_delay = NETWORK_DELAY; -UInt64 g_done_timer = DONE_TIMER; -UInt64 g_batch_time_limit = BATCH_TIMER; -UInt64 g_seq_batch_time_limit = SEQ_BATCH_TIMER; -UInt64 g_prog_timer = PROG_TIMER; -UInt64 g_warmup_timer = WARMUP_TIMER; -UInt64 g_msg_time_limit = MSG_TIME_LIMIT; - -UInt64 g_log_buf_max = LOG_BUF_MAX; -UInt64 g_log_flush_timeout = LOG_BUF_TIMEOUT; - -// MVCC -UInt64 g_max_read_req = MAX_READ_REQ; -UInt64 g_max_pre_req = MAX_PRE_REQ; -UInt64 g_his_recycle_len = HIS_RECYCLE_LEN; - -// CALVIN -UInt32 g_seq_thread_cnt = SEQ_THREAD_CNT; - -// SUNDIAL -uint32_t g_max_num_waits = MAX_NUM_WAITS; - -double g_mpr = MPR; -double g_mpitem = MPIR; - -// PPS (Product-Part-Supplier) -UInt32 g_max_parts_per = MAX_PPS_PARTS_PER; -UInt32 g_max_part_key = MAX_PPS_PART_KEY; -UInt32 g_max_product_key = MAX_PPS_PRODUCT_KEY; -UInt32 g_max_supplier_key = MAX_PPS_SUPPLIER_KEY; -double g_perc_getparts = PERC_PPS_GETPART; -double g_perc_getproducts = PERC_PPS_GETPRODUCT; -double g_perc_getsuppliers = PERC_PPS_GETSUPPLIER; -double g_perc_getpartbyproduct = PERC_PPS_GETPARTBYPRODUCT; -double g_perc_getpartbysupplier = PERC_PPS_GETPARTBYSUPPLIER; -double g_perc_orderproduct = PERC_PPS_ORDERPRODUCT; -double g_perc_updateproductpart = PERC_PPS_UPDATEPRODUCTPART; -double g_perc_updatepart = PERC_PPS_UPDATEPART; - -// TPCC -UInt32 g_num_wh = NUM_WH; -double g_perc_payment = PERC_PAYMENT; -bool g_wh_update = WH_UPDATE; -char * output_file = NULL; -char * input_file = NULL; -char * txn_file = NULL; - -#if TPCC_SMALL -UInt32 g_max_items = MAX_ITEMS_SMALL; -UInt32 g_cust_per_dist = CUST_PER_DIST_SMALL; -#else -UInt32 g_max_items = MAX_ITEMS_NORM; -UInt32 g_cust_per_dist = CUST_PER_DIST_NORM; -#endif -UInt32 g_max_items_per_txn = MAX_ITEMS_PER_TXN; -UInt32 g_dist_per_wh = DIST_PER_WH; - -UInt32 g_repl_type = REPL_TYPE; -UInt32 g_repl_cnt = REPLICA_CNT; - -map g_params; diff --git a/contrib/deneva/system/global.h b/contrib/deneva/system/global.h deleted file mode 100644 index 6bffd819..00000000 --- a/contrib/deneva/system/global.h +++ /dev/null @@ -1,392 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _GLOBAL_H_ -#define _GLOBAL_H_ - -#define __STDC_LIMIT_MACROS -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pthread.h" -#include "config.h" -#include "stats.h" -//#include "work_queue.h" -#include "pool.h" -#include "txn_table.h" -#include "logger.h" -#include "sim_manager.h" - -#include -#include "da_block_queue.h" -//#include "maat.h" - -using namespace std; - -class mem_alloc; -class Stats; -class SimManager; -class Manager; -class Query_queue; -class OptCC; -class Focc; -class Bocc; -class ssi; -class wsi; -class Maat; -class Sundial; -class Transport; -class Remote_query; -class TxnManPool; -class TxnPool; -class AccessPool; -class TxnTablePool; -class MsgPool; -class RowPool; -class QryPool; -class TxnTable; -class QWorkQueue; -class AbortQueue; -class MessageQueue; -class Client_query_queue; -class Client_txn; -class Sequencer; -class Logger; -class TimeTable; -class InOutTable; - -class DAQuery; -class DABlockQueue; -class KeyXidCache; -class RtsCache; -// class QTcpQueue; -class TcpTimestamp; - -typedef uint32_t UInt32; -typedef int32_t SInt32; -typedef uint64_t UInt64; -typedef int64_t SInt64; - -typedef uint64_t ts_t; // time stamp type - -/******************************************/ -// Global Data Structure -/******************************************/ -extern mem_alloc mem_allocator; -extern Stats stats; -extern SimManager * simulation; -extern Manager glob_manager; -extern Query_queue query_queue; -extern Client_query_queue client_query_queue; -extern OptCC occ_man; -extern Focc focc_man; -extern Bocc bocc_man; -extern ssi ssi_man; -extern wsi wsi_man; -extern Maat maat_man; -extern Sundial sundial_man; -extern Transport tport_man; -extern TxnManPool txn_man_pool; -extern TxnPool txn_pool; -extern AccessPool access_pool; -extern TxnTablePool txn_table_pool; -extern MsgPool msg_pool; -extern RowPool row_pool; -extern QryPool qry_pool; -extern TxnTable txn_table; -extern QWorkQueue work_queue; -extern AbortQueue abort_queue; -extern MessageQueue msg_queue; -extern Client_txn client_man; -extern Sequencer seq_man; -extern Logger logger; -extern TimeTable time_table; -extern InOutTable inout_table; - -// extern QTcpQueue tcp_queue; -extern TcpTimestamp tcp_ts; - -extern map g_params; - -extern bool volatile warmup_done; -extern bool volatile enable_thread_mem_pool; -extern pthread_barrier_t warmup_bar; - -/******************************************/ -// Client Global Params -/******************************************/ -extern UInt32 g_client_thread_cnt; -extern UInt32 g_client_rem_thread_cnt; -extern UInt32 g_client_send_thread_cnt; -extern UInt32 g_client_node_cnt; -extern UInt32 g_servers_per_client; -extern UInt32 g_clients_per_server; -extern UInt32 g_server_start_node; - -/******************************************/ -// Global Parameter -/******************************************/ -extern volatile UInt64 g_row_id; -extern bool g_part_alloc; -extern bool g_mem_pad; -extern bool g_prt_lat_distr; -extern UInt32 g_node_id; -extern UInt32 g_node_cnt; -extern UInt32 g_part_cnt; -extern UInt32 g_virtual_part_cnt; -extern UInt32 g_core_cnt; -extern UInt32 g_total_node_cnt; -extern UInt32 g_total_thread_cnt; -extern UInt32 g_total_client_thread_cnt; -extern UInt32 g_this_thread_cnt; -extern UInt32 g_this_rem_thread_cnt; -extern UInt32 g_this_send_thread_cnt; -extern UInt32 g_this_total_thread_cnt; -extern UInt32 g_thread_cnt; -extern UInt32 g_abort_thread_cnt; -extern UInt32 g_logger_thread_cnt; -extern UInt32 g_tcp_thread_cnt; -extern UInt32 g_send_thread_cnt; -extern UInt32 g_rem_thread_cnt; -extern ts_t g_abort_penalty; -extern ts_t g_abort_penalty_max; -extern bool g_central_man; -extern UInt32 g_ts_alloc; -extern bool g_key_order; -extern bool g_ts_batch_alloc; -extern UInt32 g_ts_batch_num; -extern int32_t g_inflight_max; -extern uint64_t g_msg_size; -extern uint64_t g_log_buf_max; -extern uint64_t g_log_flush_timeout; - -extern UInt32 g_max_txn_per_part; -extern int32_t g_load_per_server; - -extern bool g_hw_migrate; -extern UInt32 g_network_delay; -extern UInt64 g_done_timer; -extern UInt64 g_batch_time_limit; -extern UInt64 g_seq_batch_time_limit; -extern UInt64 g_prog_timer; -extern UInt64 g_warmup_timer; -extern UInt64 g_msg_time_limit; - -// MVCC -extern UInt64 g_max_read_req; -extern UInt64 g_max_pre_req; -extern UInt64 g_his_recycle_len; - -// YCSB -extern UInt32 g_cc_alg; -extern ts_t g_query_intvl; -extern UInt32 g_part_per_txn; -extern double g_perc_multi_part; -extern double g_txn_read_perc; -extern double g_txn_write_perc; -extern double g_tup_read_perc; -extern double g_tup_write_perc; -extern double g_zipf_theta; -extern double g_data_perc; -extern double g_access_perc; -extern UInt64 g_synth_table_size; -extern UInt32 g_req_per_query; -extern bool g_strict_ppt; -extern UInt32 g_field_per_tuple; -extern UInt32 g_init_parallelism; -extern double g_mpr; -extern double g_mpitem; - -// TPCC -extern UInt32 g_num_wh; -extern double g_perc_payment; -extern bool g_wh_update; -extern char * output_file; -extern char * input_file; -extern char * txn_file; -extern UInt32 g_max_items; -extern UInt32 g_dist_per_wh; -extern UInt32 g_cust_per_dist; -extern UInt32 g_max_items_per_txn; - -// PPS (Product-Part-Supplier) -extern UInt32 g_max_parts_per; -extern UInt32 g_max_part_key; -extern UInt32 g_max_product_key; -extern UInt32 g_max_supplier_key; -extern double g_perc_getparts; -extern double g_perc_getproducts; -extern double g_perc_getsuppliers; -extern double g_perc_getpartbyproduct; -extern double g_perc_getpartbysupplier; -extern double g_perc_orderproduct; -extern double g_perc_updateproductpart; -extern double g_perc_updatepart; - -extern boost::lockfree::queue> da_query_queue; -extern DABlockQueue da_gen_qry_queue; -extern bool is_server; -extern map da_start_stamp_tab; -extern set da_start_trans_tab; -extern map da_stamp_tab; -extern set already_abort_tab; -extern string DA_history_mem; -extern bool abort_history; -extern ofstream commit_file; -extern ofstream abort_file; -// CALVIN -extern UInt32 g_seq_thread_cnt; - -// SUNDIAL -extern uint32_t g_max_num_waits; - -// Replication -extern UInt32 g_repl_type; -extern UInt32 g_repl_cnt; - -enum RC { RCOK=0, Commit, Abort, WAIT, WAIT_REM, ERROR, FINISH, NONE}; -enum RemReqType { - INIT_DONE = 0, - RLK, - RULK, - CL_QRY, - RQRY, - RQRY_CONT, - RFIN, - RLK_RSP, - RULK_RSP, - RQRY_RSP, - RACK, - RACK_PREP, - RACK_FIN, - RTXN, - RTXN_CONT, - RINIT, - RPREPARE, - RPASS, - RFWD, - RDONE, - CL_RSP, - LOG_MSG, - LOG_MSG_RSP, - LOG_FLUSHED, - CALVIN_ACK, - NO_MSG -}; - -// Calvin -enum CALVIN_PHASE { - CALVIN_RW_ANALYSIS = 0, - CALVIN_LOC_RD, - CALVIN_SERVE_RD, - CALVIN_COLLECT_RD, - CALVIN_EXEC_WR, - CALVIN_DONE -}; - -/* Thread */ -typedef uint64_t txnid_t; - -/* Txn */ -typedef uint64_t txn_t; - -/* Table and Row */ -typedef uint64_t rid_t; // row id -typedef uint64_t pgid_t; // page id - - - -/* INDEX */ -enum latch_t {LATCH_EX, LATCH_SH, LATCH_NONE}; -// accessing type determines the latch type on nodes -enum idx_acc_t {INDEX_INSERT, INDEX_READ, INDEX_NONE}; -typedef uint64_t idx_key_t; // key id for index -typedef uint64_t (*func_ptr)(idx_key_t); // part_id func_ptr(index_key); - -/* general concurrency control */ -enum access_t {RD, WR, XP, SCAN}; -/* LOCK */ -enum lock_t {LOCK_EX = 0, LOCK_SH, LOCK_NONE, LOCK_COM}; -/* TIMESTAMP */ -enum TsType {R_REQ = 0, W_REQ, P_REQ, XP_REQ}; - -/*DA query build queue*/ -//queue query_build_queue; - - - -#define GET_THREAD_ID(id) (id % g_thread_cnt) -#define GET_NODE_ID(id) (id % g_node_cnt) -#define GET_PART_ID(t,n) (n) -#define GET_PART_ID_FROM_IDX(idx) (g_node_id + idx * g_node_cnt) -#define GET_PART_ID_IDX(p) (p / g_node_cnt) -#define ISSERVER (g_node_id < g_node_cnt) -#define ISSERVERN(id) (id < g_node_cnt) -#define ISCLIENT (g_node_id >= g_node_cnt && g_node_id < g_node_cnt + g_client_node_cnt) -#define ISREPLICA \ - (g_node_id >= g_node_cnt + g_client_node_cnt && \ - g_node_id < g_node_cnt + g_client_node_cnt + g_repl_cnt * g_node_cnt) -#define ISREPLICAN(id) \ - (id >= g_node_cnt + g_client_node_cnt && \ - id < g_node_cnt + g_client_node_cnt + g_repl_cnt * g_node_cnt) -#define ISCLIENTN(id) (id >= g_node_cnt && id < g_node_cnt + g_client_node_cnt) -#define IS_LOCAL(tid) (tid % g_node_cnt == g_node_id || CC_ALG == CALVIN) -#define IS_REMOTE(tid) (tid % g_node_cnt != g_node_id || CC_ALG == CALVIN) -#define IS_LOCAL_KEY(key) (key % g_node_cnt == g_node_id) - -/* -#define GET_THREAD_ID(id) (id % g_thread_cnt) -#define GET_NODE_ID(id) (id / g_thread_cnt) -#define GET_PART_ID(t,n) (n*g_thread_cnt + t) -*/ - -#define MSG(str, args...) \ - { printf("[%s : %d] " str, __FILE__, __LINE__, args); } // printf(args); } - -// principal index structure. The workload may decide to use a different -// index structure for specific purposes. (e.g. non-primary key access should use hash) -#if (INDEX_STRUCT == IDX_BTREE) -#define INDEX index_btree -#else // IDX_HASH -#define INDEX IndexHash -#endif - -/************************************************/ -// constants -/************************************************/ -#ifndef UINT64_MAX -#define UINT64_MAX 18446744073709551615UL -#endif // UINT64_MAX - -#endif diff --git a/contrib/deneva/system/hash.cpp b/contrib/deneva/system/hash.cpp deleted file mode 100644 index c5ec045c..00000000 --- a/contrib/deneva/system/hash.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. -// This source code is licensed under both the GPLv2 (found in the -// COPYING file in the root directory) and Apache 2.0 License -// (found in the LICENSE.Apache file in the root directory). - -#include "hash.h" - -int hash_any(register const unsigned char *k, register int keylen) { - register uint32_t a, b, c, len; - - /* Set up the internal state */ - len = keylen; - a = b = c = 0x9e3779b9 + len + 3923095; - - /* If the source pointer is word-aligned, we use word-wide fetches */ - if (((uintptr_t)k & UINT32_ALIGN_MASK) == 0) { - /* Code path for aligned source data */ - register const uint32_t *ka = (const uint32_t *)k; - - /* handle most of the key */ - while (len >= 12) { - a += ka[0]; - b += ka[1]; - c += ka[2]; - mix(a, b, c); - ka += 3; - len -= 12; - } - - /* handle the last 11 bytes */ - k = (const unsigned char *)ka; - switch (len) { - case 11: - c += ((uint32_t)k[10] << 24); - /* fall through */ - case 10: - c += ((uint32_t)k[9] << 16); - /* fall through */ - case 9: - c += ((uint32_t)k[8] << 8); - /* the lowest byte of c is reserved for the length */ - /* fall through */ - case 8: - b += ka[1]; - a += ka[0]; - break; - case 7: - b += ((uint32_t)k[6] << 16); - /* fall through */ - case 6: - b += ((uint32_t)k[5] << 8); - /* fall through */ - case 5: - b += k[4]; - /* fall through */ - case 4: - a += ka[0]; - break; - case 3: - a += ((uint32_t)k[2] << 16); - /* fall through */ - case 2: - a += ((uint32_t)k[1] << 8); - /* fall through */ - case 1: - a += k[0]; - /* case 0: nothing left to add */ - } - } else { - /* Code path for non-aligned source data */ - - /* handle most of the key */ - while (len >= 12) { - a += (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16) + ((uint32_t)k[3] << 24)); - b += (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16) + ((uint32_t)k[7] << 24)); - c += (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16) + ((uint32_t)k[11] << 24)); - mix(a, b, c); - k += 12; - len -= 12; - } - - /* handle the last 11 bytes */ - switch (len) /* all the case statements fall through */ - { - case 11: - c += ((uint32_t)k[10] << 24); - case 10: - c += ((uint32_t)k[9] << 16); - case 9: - c += ((uint32_t)k[8] << 8); - /* the lowest byte of c is reserved for the length */ - case 8: - b += ((uint32_t)k[7] << 24); - case 7: - b += ((uint32_t)k[6] << 16); - case 6: - b += ((uint32_t)k[5] << 8); - case 5: - b += k[4]; - case 4: - a += ((uint32_t)k[3] << 24); - case 3: - a += ((uint32_t)k[2] << 16); - case 2: - a += ((uint32_t)k[1] << 8); - case 1: - a += k[0]; - /* case 0: nothing left to add */ - } - } - - final(a, b, c); - /* report the result */ - return c; -} diff --git a/contrib/deneva/system/hash.h b/contrib/deneva/system/hash.h deleted file mode 100644 index 2c330ff7..00000000 --- a/contrib/deneva/system/hash.h +++ /dev/null @@ -1,56 +0,0 @@ - -#pragma once - -#ifndef KEY_RANGE_HASH -#define KEY_RANGE_HASH - -#include -#include -#include -#include - -#define UINT32_ALIGN_MASK (sizeof(uint32_t) - 1) -#define rot(x, k) (((x) << (k)) | ((x) >> (32 - (k)))) -#define mix(a, b, c) \ -{ \ - a -= c; \ - a ^= rot(c, 4); \ - c += b; \ - b -= a; \ - b ^= rot(a, 6); \ - a += c; \ - c -= b; \ - c ^= rot(b, 8); \ - b += a; \ - a -= c; \ - a ^= rot(c, 16); \ - c += b; \ - b -= a; \ - b ^= rot(a, 19); \ - a += c; \ - c -= b; \ - c ^= rot(b, 4); \ - b += a; \ -} - -#define final(a, b, c) \ -{ \ - c ^= b; \ - c -= rot(b, 14); \ - a ^= c; \ - a -= rot(c, 11); \ - b ^= a; \ - b -= rot(a, 25); \ - c ^= b; \ - c -= rot(b, 16); \ - a ^= c; \ - a -= rot(c, 4); \ - b ^= a; \ - b -= rot(a, 14); \ - c ^= b; \ - c -= rot(b, 24); \ -} - -int hash_any(register const unsigned char *k, register int keylen); - -#endif \ No newline at end of file diff --git a/contrib/deneva/system/helper.cpp b/contrib/deneva/system/helper.cpp deleted file mode 100644 index b12ab58b..00000000 --- a/contrib/deneva/system/helper.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "mem_alloc.h" -#include "time.h" - -bool itemid_t::operator==(const itemid_t &other) const { - return (type == other.type && location == other.location); -} - -bool itemid_t::operator!=(const itemid_t &other) const { return !(*this == other); } - -void itemid_t::operator=(const itemid_t &other){ - this->valid = other.valid; - this->type = other.type; - this->location = other.location; - assert(*this == other); - assert(this->valid); -} - -void itemid_t::init() { - valid = false; - location = 0; - next = NULL; -} - -int get_thdid_from_txnid(uint64_t txnid) { return txnid % g_thread_cnt; } - -uint64_t get_part_id(void *addr) { return ((uint64_t)addr / PAGE_SIZE) % g_part_cnt; } - -uint64_t key_to_part(uint64_t key) { - if (g_part_alloc) - return key % g_part_cnt; - else - return 0; -} - -uint64_t merge_idx_key(UInt64 key_cnt, UInt64 * keys) { - UInt64 len = 64 / key_cnt; - UInt64 key = 0; - for (UInt32 i = 0; i < len; i++) { - assert(keys[i] < (1UL << len)); - key = (key << len) | keys[i]; - } - return key; -} - -uint64_t merge_idx_key(uint64_t key1, uint64_t key2) { - assert(key1 < (1UL << 32) && key2 < (1UL << 32)); - return key1 << 32 | key2; -} - -uint64_t merge_idx_key(uint64_t key1, uint64_t key2, uint64_t key3) { - assert(key1 < (1 << 21) && key2 < (1 << 21) && key3 < (1 << 21)); - return key1 << 42 | key2 << 21 | key3; -} - -void init_globals() { - g_max_read_req = g_node_cnt * g_inflight_max; - g_max_pre_req = g_node_cnt * g_inflight_max; -} - -void init_client_globals() { - if(g_node_cnt > g_client_node_cnt) { - g_servers_per_client = g_node_cnt / g_client_node_cnt; - g_clients_per_server = 1; - } else { - g_servers_per_client = 1; - g_clients_per_server = g_client_node_cnt / g_node_cnt; - } -#if CC_ALG == BOCC || CC_ALG == FOCC - g_server_start_node = 0; -#else - uint32_t client_node_id = g_node_id - g_node_cnt; - g_server_start_node = (client_node_id * g_servers_per_client) % g_node_cnt; -#endif - if (g_node_cnt >= g_client_node_cnt && g_node_cnt % g_client_node_cnt != 0 && - g_node_id == (g_node_cnt + g_client_node_cnt - 1)) { - // Have last client pick up any leftover servers if the number of - // servers cannot be evenly divided between client nodes - // fix the remainder to be equally distributed among clients - g_servers_per_client += g_node_cnt % g_client_node_cnt; - } - printf("Node %u: servicing %u total nodes starting with node %u\n", g_node_id, - g_servers_per_client, g_server_start_node); -} - -/****************************************************/ -// Global Clock! -/****************************************************/ - -uint64_t get_wall_clock() { - timespec * tp = new timespec; - clock_gettime(CLOCK_REALTIME, tp); - uint64_t ret = tp->tv_sec * 1000000000 + tp->tv_nsec; - delete tp; - return ret; -} - -uint64_t get_server_clock() { -#if defined(__i386__) - uint64_t ret; - __asm__ __volatile__("rdtsc" : "=A" (ret)); -#elif defined(__x86_64__) - unsigned hi, lo; - __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); - uint64_t ret = ( (uint64_t)lo)|( ((uint64_t)hi)<<32 ); - ret = (uint64_t) ((double)ret / CPU_FREQ); -#else - timespec * tp = new timespec; - clock_gettime(CLOCK_REALTIME, tp); - uint64_t ret = tp->tv_sec * 1000000000 + tp->tv_nsec; - delete tp; -#endif - return ret; -} - -uint64_t get_sys_clock() { - if (TIME_ENABLE) return get_server_clock(); - return 0; -} - -void myrand::init(uint64_t seed) { this->seed = seed; } - -uint64_t myrand::next() { - seed = (seed * 1103515247UL + 12345UL) % (1UL<<63); - return (seed / 65537) % RAND_MAX; -} - diff --git a/contrib/deneva/system/helper.h b/contrib/deneva/system/helper.h deleted file mode 100644 index e64f3ac3..00000000 --- a/contrib/deneva/system/helper.h +++ /dev/null @@ -1,287 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _HELPER_H_ -#define _HELPER_H_ - -#include -#include -#include -#include "global.h" - -/************************************************/ -// Debugging -/************************************************/ -#define DEBUG(...) \ - if(DEBUG_DISTR) { \ - fprintf(stdout,__VA_ARGS__); \ - fflush(stdout); \ - } -#define DEBUG_FLUSH() \ - if(DEBUG_DISTR) { \ - fflush(stdout); \ - } - -#define DEBUG_M(...) \ - if(DEBUG_ALLOC && warmup_done) { \ - fprintf(stdout,__VA_ARGS__); \ - fflush(stdout); \ - } - -#define DEBUG_R(...) \ - if(DEBUG_RACE && warmup_done) { \ - fprintf(stdout,__VA_ARGS__); \ - fflush(stdout); \ - } - -#define PRINT_LATENCY(...) \ - if(DEBUG_LATENCY && warmup_done) { \ - fprintf(stdout,__VA_ARGS__); \ - fflush(stdout); \ - } - -/************************************************/ -// atomic operations -/************************************************/ -#define ATOM_ADD(dest, value) __sync_fetch_and_add(&(dest), value) -#define ATOM_SUB(dest, value) __sync_fetch_and_sub(&(dest), value) -// returns true if cas is successful -#define ATOM_CAS(dest, oldval, newval) __sync_bool_compare_and_swap(&(dest), oldval, newval) -#define ATOM_ADD_FETCH(dest, value) __sync_add_and_fetch(&(dest), value) -#define ATOM_FETCH_ADD(dest, value) __sync_fetch_and_add(&(dest), value) -#define ATOM_SUB_FETCH(dest, value) __sync_sub_and_fetch(&(dest), value) - -#define COMPILER_BARRIER asm volatile("" ::: "memory"); -#define PAUSE_SILO { __asm__ ( "pause;" ); } - -/************************************************/ -// ASSERT Helper -/************************************************/ - -#define M_ASSERT_V(cond, ...) \ - if (!(cond)) {\ - fprintf(stdout,"ASSERTION FAILURE [%s : %d]\n", __FILE__, __LINE__);\ - fprintf(stdout,__VA_ARGS__); \ - fflush(stdout); \ - assert(cond); \ - } -#define M_ASSERT(cond, str) \ - if (!(cond)) {\ - printf("ASSERTION FAILURE [%s : %d] msg:%s\n", __FILE__, __LINE__, str);\ - fflush(stdout); \ - exit(0); \ - } -#define ASSERT(cond) assert(cond) - -/************************************************/ -// STACK helper (push & pop) -/************************************************/ -#define STACK_POP(stack, top) \ -{ \ - if (stack == NULL) \ - top = NULL; \ - else { \ - top = stack; \ - stack = stack->next; \ - } \ -} -#define STACK_PUSH(stack, entry) \ -{ \ - entry->next = stack; \ - stack = entry; \ -} - -/************************************************/ -// LIST helper (read from head & write to tail) -/************************************************/ -#define LIST_GET_HEAD(lhead, ltail, en) \ -{ \ - en = lhead; \ - if (lhead) lhead = lhead->next; \ - if (lhead) \ - lhead->prev = NULL; \ - else \ - ltail = NULL; \ - if (en) en->next = NULL; \ -} -#define LIST_PUT_TAIL(lhead, ltail, en) \ -{ \ - en->next = NULL; \ - en->prev = NULL; \ - if (ltail) { \ - en->prev = ltail; \ - ltail->next = en; \ - ltail = en; \ - } else { \ - lhead = en; \ - ltail = en; \ - } \ -} -#define LIST_INSERT_BEFORE(entry, newentry, lhead) \ -{ \ - newentry->next = entry; \ - newentry->prev = entry->prev; \ - if (entry->prev) entry->prev->next = newentry; \ - entry->prev = newentry; \ - if (lhead == entry) lhead = newentry; \ -} -#define LIST_REMOVE(entry) \ -{ \ - if (entry->next) entry->next->prev = entry->prev; \ - if (entry->prev) entry->prev->next = entry->next; \ -} -#define LIST_REMOVE_HT(entry, head, tail) \ -{ \ - if (entry->next) \ - entry->next->prev = entry->prev; \ - else { \ - assert(entry == tail); \ - tail = entry->prev; \ - } \ - if (entry->prev) \ - entry->prev->next = entry->next; \ - else { \ - assert(entry == head); \ - head = entry->next; \ - } \ -} - -/************************************************/ -// STATS helper -/************************************************/ -#define SET_STATS(tid, name, value) \ - if (STATS_ENABLE && simulation->is_warmup_done()) stats._stats[tid]->name = value; - -#define INC_STATS(tid, name, value) \ - if (STATS_ENABLE && simulation->is_warmup_done()) stats._stats[tid]->name += value; - -#define INC_STATS_ARR(tid, name, value) \ - if (STATS_ENABLE && simulation->is_warmup_done()) stats._stats[tid]->name.insert(value); - -#define INC_GLOB_STATS(name, value) \ - if (STATS_ENABLE && simulation->is_warmup_done()) stats.name += value; - -/************************************************/ -// mem copy helper -/************************************************/ -#define COPY_VAL(v,d,p) \ - memcpy(&v,&d[p],sizeof(v)); \ - p += sizeof(v); - -#define COPY_VAL_SIZE(v,d,p,s) \ - memcpy(&v,&d[p],s); \ - p += s; - -#define COPY_BUF(d,v,p) \ - memcpy(&((char*)d)[p],(char*)&v,sizeof(v)); \ - p += sizeof(v); - -#define COPY_BUF_SIZE(d,v,p,s) \ - memcpy(&((char*)d)[p],(char*)&v,s); \ - p += s; - -#define WRITE_VAL(f, v) f.write((char *)&v, sizeof(v)); - -#define WRITE_VAL_SIZE(f, v, s) f.write(v, sizeof(char) * s); -/************************************************/ -// malloc helper -/************************************************/ -// In order to avoid false sharing, any unshared read/write array residing on the same -// cache line should be modified to be read only array with pointers to thread local data block. -// TODO. in order to have per-thread malloc, this needs to be modified !!! - -#define ARR_PTR_MULTI(type, name, size, scale) \ - name = new type * [size]; \ - if (g_part_alloc || THREAD_ALLOC) { \ - for (UInt32 i = 0; i < size; i ++) {\ - UInt32 padsize = sizeof(type) * (scale); \ - if (g_mem_pad && padsize % CL_SIZE != 0) padsize += CL_SIZE - padsize % CL_SIZE; \ - name[i] = (type *) mem_allocator.alloc(padsize); \ - for (UInt32 j = 0; j < scale; j++) new (&name[i][j]) type(); \ - }\ - } else { \ - for (UInt32 i = 0; i < size; i++) name[i] = new type[scale]; \ - } - -#define ARR_PTR(type, name, size) ARR_PTR_MULTI(type, name, size, 1) - -#define ARR_PTR_INIT(type, name, size, value) \ - name = new type * [size]; \ - if (g_part_alloc) { \ - for (UInt32 i = 0; i < size; i ++) {\ - int padsize = sizeof(type); \ - if (g_mem_pad && padsize % CL_SIZE != 0) padsize += CL_SIZE - padsize % CL_SIZE; \ - name[i] = (type *) mem_allocator.alloc(padsize); \ - new (name[i]) type(); \ - }\ - } else \ - for (UInt32 i = 0; i < size; i++) name[i] = new type; \ - for (UInt32 i = 0; i < size; i++) *name[i] = value; - -#define YCSB_QUERY_FREE(qry) qry_pool.put(qry); - -enum Data_type { - DT_table, - DT_page, - DT_row -}; - -// TODO currently, only DR_row supported -// data item type. -class itemid_t { -public: - itemid_t() { }; - itemid_t(Data_type type, void * loc) { - this->type = type; - this->location = loc; - }; - Data_type type; - void * location; // points to the table | page | row - itemid_t * next; - bool valid; - void init(); - bool operator==(const itemid_t &other) const; - bool operator!=(const itemid_t &other) const; - void operator=(const itemid_t &other); -}; - -int get_thdid_from_txnid(uint64_t txnid); - -// key_to_part() is only for ycsb -uint64_t key_to_part(uint64_t key); -uint64_t get_part_id(void * addr); -// TODO can the following two functions be merged? -uint64_t merge_idx_key(uint64_t key_cnt, uint64_t * keys); -uint64_t merge_idx_key(uint64_t key1, uint64_t key2); -uint64_t merge_idx_key(uint64_t key1, uint64_t key2, uint64_t key3); - -void init_client_globals(); -void init_globals(); - -extern timespec * res; -uint64_t get_wall_clock(); -uint64_t get_server_clock(); -uint64_t get_sys_clock(); // return: in ns - -class myrand { -public: - void init(uint64_t seed); - uint64_t next(); -private: - uint64_t seed; -}; - -#endif diff --git a/contrib/deneva/system/http.cpp b/contrib/deneva/system/http.cpp deleted file mode 100644 index ca8229bc..00000000 --- a/contrib/deneva/system/http.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -#include "global.h" -#include "manager.h" -#include "http.h" -#include "libtcpforcpp.h" -#include -#include -#include -#include -#include -#include "mem_alloc.h" -#include "helper.h" - -static uint64_t stouint64(char *ptr) -{ - uint64_t num = 0; - int i = 0; - while (ptr[i]) - { - num = num * 10 + (ptr[i++] - '0'); - } - return num; -} - -size_t WriteTimeStampCallBack(void *ptr, size_t size, size_t nmemb, void *data) -{ - size_t realsize = size * nmemb; - uint64_t *ts = (uint64_t *)data; - *ts = stouint64((char *)ptr); - return realsize; -} - -static char curlip[100]; - -uint64_t CurlGetTimeStamp(void) -{ - CURL *curl; - CURLcode res; - - curl = curl_easy_init(); - if (!curl) - { - fprintf(stderr, "curl_easy_init() error"); - return 1; - } - uint64_t ts; - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ts); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteTimeStampCallBack); - - snprintf(curlip, sizeof(curlip), "http://%s:%d/lts-cluster/api/ts/1", LTS_TCP_IP, LTS_TCP_PORT); - curl_easy_setopt(curl, CURLOPT_URL, curlip); - res = curl_easy_perform(curl); - if (res != CURLE_OK) - { - fprintf(stderr, "curl_easy_perform() error: %s\n", curl_easy_strerror(res)); - } - curl_easy_cleanup(curl); - return ts; -} - -void TcpTimestamp::init(int all_thd_num) -{ - socket = (TcpLtsSocket*)mem_allocator.align_alloc(sizeof(TcpLtsSocket) * all_thd_num); - socket_num = all_thd_num; - for (int i = 0; i < all_thd_num; i ++) { - socket[i].init(); - ConnectToLts(i); - } - -} - -void TcpTimestamp::ConnectToLts(uint64_t thd_id) -{ - int result = 0; - for (int retry = 0; retry < 10; retry++) - { - result = socket[thd_id].connectTo(LTS_TCP_IP, LTS_TCP_PORT); - if (result == 0) - break; - } - if (result != 0) - { - printf("\nLTS: connection failed"); - } -} - -void TcpTimestamp::CloseToLts(uint64_t thd_id) -{ - int result = 0; - result = socket[thd_id].closeConnection(); - if (result != 0) - { - printf("\nLTS: close failed"); - } -} - -uint64_t TcpTimestamp::TcpGetTimeStamp(uint64_t thd_id) -{ - uint64_t start_ts = get_sys_clock(); - uint64_t ts = 0; - ts = socket[thd_id].getTimestamp(); - - if (ts == (uint64_t)-1) - { - //core_dump(); - } - uint64_t end_ts = get_sys_clock(); - DEBUG("Tcp get timestamp %ld, latency %ld\n",ts, end_ts-start_ts); - return ts; -} diff --git a/contrib/deneva/system/http.h b/contrib/deneva/system/http.h deleted file mode 100644 index d770a43f..00000000 --- a/contrib/deneva/system/http.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#ifndef HTTP_TS_H -#define HTTP_TS_H - -#include -#include - -#include - -#include -#include "libtcpforcpp.h" - -uint64_t CurlGetTimeStamp(void); -uint64_t TcpGetTimeStamp(void); - -void ConnectToLts(void); -void CloseToLts(void); - -class TcpTimestamp { -public: - void init(int all_thd_num); - void ConnectToLts(uint64_t thd_id); - void CloseToLts(uint64_t thd_id); - uint64_t TcpGetTimeStamp(uint64_t thd_id); -private: - TcpLtsSocket * socket; - int socket_num; - // pthread_mutex_t ** lock_; -}; - -#endif diff --git a/contrib/deneva/system/io_thread.cpp b/contrib/deneva/system/io_thread.cpp deleted file mode 100644 index 8a839a4e..00000000 --- a/contrib/deneva/system/io_thread.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "manager.h" -#include "thread.h" -#include "io_thread.h" -#include "query.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "mem_alloc.h" -#include "transport.h" -#include "math.h" -#include "msg_thread.h" -#include "msg_queue.h" -#include "message.h" -#include "client_txn.h" -#include "work_queue.h" -#include "txn.h" -#include "ycsb.h" - -void InputThread::setup() { - - std::vector * msgs; - while(!simulation->is_setup_done()) { - msgs = tport_man.recv_msg(get_thd_id()); - if (msgs == NULL) continue; - while(!msgs->empty()) { - Message * msg = msgs->front(); - if(msg->rtype == INIT_DONE) { - printf("Received INIT_DONE from node %ld\n",msg->return_node_id); - fflush(stdout); - simulation->process_setup_msg(); - } else { - assert(ISSERVER || ISREPLICA); - //printf("Received Msg %d from node %ld\n",msg->rtype,msg->return_node_id); -#if CC_ALG == CALVIN - if(msg->rtype == CALVIN_ACK ||(msg->rtype == CL_QRY && ISCLIENTN(msg->get_return_id()))) { - work_queue.sequencer_enqueue(get_thd_id(),msg); - msgs->erase(msgs->begin()); - continue; - } - if( msg->rtype == RDONE || msg->rtype == CL_QRY) { - assert(ISSERVERN(msg->get_return_id())); - work_queue.sched_enqueue(get_thd_id(),msg); - msgs->erase(msgs->begin()); - continue; - } -#endif - work_queue.enqueue(get_thd_id(),msg,false); - } - msgs->erase(msgs->begin()); - } - delete msgs; - } - if (!ISCLIENT) { - txn_man = (YCSBTxnManager *) - mem_allocator.align_alloc( sizeof(YCSBTxnManager)); - new(txn_man) YCSBTxnManager(); - // txn_man = (TxnManager*) malloc(sizeof(TxnManager)); - uint64_t thd_id = get_thd_id(); - txn_man->init(thd_id, NULL); - } -} - -RC InputThread::run() { - tsetup(); - printf("Running InputThread %ld\n",_thd_id); - - if(ISCLIENT) { - client_recv_loop(); - } else { - server_recv_loop(); - } - - return FINISH; - -} - -RC InputThread::client_recv_loop() { - int rsp_cnts[g_servers_per_client]; - memset(rsp_cnts, 0, g_servers_per_client * sizeof(int)); - - run_starttime = get_sys_clock(); - uint64_t return_node_offset; - uint64_t inf; - - std::vector * msgs; - - while (!simulation->is_done()) { - heartbeat(); - uint64_t starttime = get_sys_clock(); - msgs = tport_man.recv_msg(get_thd_id()); - INC_STATS(_thd_id,mtx[28], get_sys_clock() - starttime); - starttime = get_sys_clock(); - //while((m_query = work_queue.get_next_query(get_thd_id())) != NULL) { - //Message * msg = work_queue.dequeue(); - if (msgs == NULL) continue; - while(!msgs->empty()) { - Message * msg = msgs->front(); - assert(msg->rtype == CL_RSP); - return_node_offset = msg->return_node_id - g_server_start_node; - assert(return_node_offset < g_servers_per_client); - rsp_cnts[return_node_offset]++; - INC_STATS(get_thd_id(),txn_cnt,1); - uint64_t timespan = get_sys_clock() - ((ClientResponseMessage*)msg)->client_startts; - INC_STATS(get_thd_id(),txn_run_time, timespan); - if (warmup_done) { - INC_STATS_ARR(get_thd_id(),client_client_latency, timespan); - } - //INC_STATS_ARR(get_thd_id(),all_lat,timespan); - inf = client_man.dec_inflight(return_node_offset); - DEBUG("Recv %ld from %ld, %ld -- %f\n", ((ClientResponseMessage *)msg)->txn_id, - msg->return_node_id, inf, float(timespan) / BILLION); - assert(inf >=0); - // delete message here - msgs->erase(msgs->begin()); - } - delete msgs; - INC_STATS(_thd_id,mtx[29], get_sys_clock() - starttime); - - } - - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} - - -bool InputThread::fakeprocess(Message * msg) { - RC rc __attribute__ ((unused)); - bool eq = false; - - txn_man->set_txn_id(msg->get_txn_id()); - - switch(msg->get_rtype()) { - case RPREPARE: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RACK_PREP),msg->return_node_id); - break; - case RQRY: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),msg->return_node_id); - break; - case RQRY_CONT: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),msg->return_node_id); - break; - case RFIN: - rc = RCOK; - txn_man->set_rc(rc); - if(!((FinishMessage*)msg)->readonly || CC_ALG == MAAT || CC_ALG == OCC || CC_ALG == SUNDIAL || CC_ALG == BOCC || CC_ALG == SSI) - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RACK_FIN),GET_NODE_ID(msg->get_txn_id())); - // rc = process_rfin(msg); - break; - default: - eq = true; - break; - } - return eq; -} - -RC InputThread::server_recv_loop() { - - myrand rdm; - rdm.init(get_thd_id()); - RC rc = RCOK; - assert (rc == RCOK); - uint64_t starttime; - - std::vector * msgs; - while (!simulation->is_done()) { - heartbeat(); - starttime = get_sys_clock(); - - msgs = tport_man.recv_msg(get_thd_id()); - - INC_STATS(_thd_id,mtx[28], get_sys_clock() - starttime); - starttime = get_sys_clock(); - - if (msgs == NULL) continue; - while(!msgs->empty()) { - Message * msg = msgs->front(); - if(msg->rtype == INIT_DONE) { - msgs->erase(msgs->begin()); - continue; - } -#if CC_ALG == CALVIN - if(msg->rtype == CALVIN_ACK ||(msg->rtype == CL_QRY && ISCLIENTN(msg->get_return_id()))) { - work_queue.sequencer_enqueue(get_thd_id(),msg); - msgs->erase(msgs->begin()); - continue; - } - if( msg->rtype == RDONE || msg->rtype == CL_QRY) { - assert(ISSERVERN(msg->get_return_id())); - work_queue.sched_enqueue(get_thd_id(),msg); - msgs->erase(msgs->begin()); - continue; - } -#endif -#ifdef FAKE_PROCESS - if (fakeprocess(msg)) -#endif - work_queue.enqueue(get_thd_id(),msg,false); - msgs->erase(msgs->begin()); - } - delete msgs; - INC_STATS(_thd_id,mtx[29], get_sys_clock() - starttime); - - } - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} - -void OutputThread::setup() { - DEBUG_M("OutputThread::setup MessageThread alloc\n"); - messager = (MessageThread *) mem_allocator.alloc(sizeof(MessageThread)); - messager->init(_thd_id); - while (!simulation->is_setup_done()) { - messager->run(); - } -} - -RC OutputThread::run() { - - tsetup(); - printf("Running OutputThread %ld\n",_thd_id); - - while (!simulation->is_done()) { - heartbeat(); - messager->run(); - } - - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} - - diff --git a/contrib/deneva/system/io_thread.h b/contrib/deneva/system/io_thread.h deleted file mode 100644 index 1fa03245..00000000 --- a/contrib/deneva/system/io_thread.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _IOTHREAD_H_ -#define _IOTHREAD_H_ - -#include "global.h" -#include "message.h" -class Workload; -class MessageThread; - -class InputThread : public Thread { -public: - RC run(); - RC client_recv_loop(); - RC server_recv_loop(); - void check_for_init_done(); - void setup(); - - bool fakeprocess(Message * msg); - TxnManager * txn_man; -}; - -class OutputThread : public Thread { -public: - RC run(); - void setup(); - MessageThread * messager; -}; - -#endif diff --git a/contrib/deneva/system/latch.h b/contrib/deneva/system/latch.h deleted file mode 100644 index 7a2d61cf..00000000 --- a/contrib/deneva/system/latch.h +++ /dev/null @@ -1,63 +0,0 @@ - -#ifndef _LATCH_H_ -#define _LATCH_H_ - -#include -#include -#include -#include -#include -#include - -// static std::default_random_engine e(time(0)); -// static std::uniform_int_distribution u(0, 9); - -class Latch { -public: - Latch(int limit) { - this->limit_ = limit; - this->lt_ = limit; - } - - virtual void await() = 0; - virtual void count_down() = 0; - virtual int get_unarrived() = 0; - virtual void reset() = 0; -protected: - int limit_; - int lt_; -}; - -class CountDownLatch : public Latch { -public: - using Latch::Latch; - -void await() override { - std::unique_lock lk(mtx_); - cv_.wait(lk, [&]{ - //std::cout << "limit_: " << limit_ << std::endl; - return (limit_ == 0); - }); -} - -void count_down() override { - std::unique_lock lk(mtx_); - limit_--; - cv_.notify_all(); -} - -int get_unarrived() override { - std::unique_lock lk(mtx_); - return limit_; -} - -void reset() override { - std::unique_lock lk(mtx_); - limit_ = lt_; -} -private: - std::mutex mtx_; - std::condition_variable cv_; -}; - -#endif diff --git a/contrib/deneva/system/libtcpforcpp.cpp b/contrib/deneva/system/libtcpforcpp.cpp deleted file mode 100644 index f87fb71e..00000000 --- a/contrib/deneva/system/libtcpforcpp.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include "libtcpforcpp.h" - -#include - -#include -#include -#include - -#include -#include - -#include "manager.h" -#include "ltsrpc.pb.h" - -const int headerLen = 2; -const int minSendLength = 24; - -void TcpLtsSocket::init() { - txn = 12345678; - req = (char *)malloc(minSendLength); - tcpres = (char *)malloc(minSendLength); - buffer = (char *)malloc(18); - ind = 0; - result = 0; - sendresult = 0; - errorno = 0; -} - -int TcpLtsSocket::connectTo(const char *ip, uint16_t port) -{ - s = socket(AF_INET, SOCK_STREAM, 0); - if (s < 0) - { - return -1; - } - struct sockaddr_in addr; - bzero(&addr, sizeof(struct sockaddr_in)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr.s_addr = inet_addr(ip); - if (connect(s, (sockaddr *)&addr, sizeof(addr)) < 0) - { - return -1; - } - struct timeval tv; - tv.tv_sec = 1; - tv.tv_usec = 0; - setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char *)&tv, sizeof(struct timeval)); - - return 0; -} - -uint64_t TcpLtsSocket::getTimestamp() -{ - if (s == -1) - { - while (connectTo(LTS_TCP_IP, LTS_TCP_PORT)); - } - ltsrpc::GetTxnTimestampCtx lts; - - lts.set_txn_id(txn); - - std::string message; - lts.SerializeToString(&message); - auto size = (uint16_t)message.size(); - uint16_t cpsize = htons(size); - - memcpy(req, (void *)&cpsize, sizeof(uint16_t)); - memcpy(req + headerLen, message.data(), size); - memset(req + headerLen + size, 0, minSendLength - headerLen - size); - uint64_t start_ts = get_sys_clock(); -resend: - sendresult = send(s, req, minSendLength, 0); - - ind = 0; - - for (;;) - { - rerecv: - result = recv(s, buffer, 18, 0); - if (result == -1) - { - errorno = errno; - switch (errorno) - { - case 104: - break; - case EINTR: - case EAGAIN: - goto rerecv; - default: - break; - } - closeConnection(); - while (connectTo(LTS_TCP_IP, LTS_TCP_PORT)) - ; - goto resend; - } - if (ind + result > 18) - { - ind = 0; - } - memcpy(tcpres + ind, buffer, result); - ind += result; - if (ind == 18) - { - ind = 0; - break; - } - } - // free(buffer); - - uint16_t olen = *(uint16_t *)tcpres; - uint16_t respLen = ntohs(olen); - lts.ParseFromArray(tcpres + 2, respLen); - uint64_t end_ts = get_sys_clock(); - DEBUG("Tcp get timestamp %ld by id %ld latency %ld\n",lts.txn_ts(), txn, end_ts-start_ts); - // DEBUG("Tcp get timestamp %ld by id %ld\n",lts.txn_ts(),txn); - return lts.txn_ts(); -} - -int TcpLtsSocket::closeConnection() -{ - if (s == -1) - return 0; - int re = close(s); - s = -1; - return re; -} diff --git a/contrib/deneva/system/libtcpforcpp.h b/contrib/deneva/system/libtcpforcpp.h deleted file mode 100644 index 1fce5df3..00000000 --- a/contrib/deneva/system/libtcpforcpp.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ - -#include -#include - -#ifndef TCP_TS_H -#define TCP_TS_H - -class TcpLtsSocket{ -private: - int s; - - - uint64_t txn; - char *req; - char *tcpres; - char *buffer; - int result; - int sendresult; - int errorno; - int ind; -public: - void init(); - int connectTo(const char *ip, uint16_t port); - uint64_t getTimestamp(); - int closeConnection(); -}; - -#endif diff --git a/contrib/deneva/system/lock_free_queue.cpp b/contrib/deneva/system/lock_free_queue.cpp deleted file mode 100644 index 30aa1dc6..00000000 --- a/contrib/deneva/system/lock_free_queue.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "helper.h" -#include "lock_free_queue.h" - -using namespace std; - -LockfreeQueue::LockfreeQueue() { - _head = NULL; - _tail = NULL; -} - -bool LockfreeQueue::enqueue(uintptr_t value) { - bool success = false; - QueueEntry * new_head = (QueueEntry *) malloc(sizeof(QueueEntry)); - new_head->value = value; - new_head->next = NULL; - QueueEntry * old_head; - while (!success) { - old_head = _head; - success = ATOM_CAS(_head, old_head, new_head); - if (!success) PAUSE - } - if (old_head == NULL) - _tail = new_head; - else - old_head->next = new_head; - return true; -} - -bool LockfreeQueue::dequeue(uintptr_t &value) { - bool success = false; - QueueEntry * old_tail; - QueueEntry * old_head; - while (!success) { - old_tail = _tail; - old_head = _head; - if (old_tail == NULL) { - PAUSE - return false; - } - if (old_tail->next != NULL) - success = ATOM_CAS(_tail, old_tail, old_tail->next); - else if (old_tail == old_head) { - success = ATOM_CAS(_head, old_tail, NULL); - if (success) ATOM_CAS(_tail, old_tail, NULL); - } - if (!success) PAUSE - } - value = old_tail->value; - free(old_tail); - return true; -} - - diff --git a/contrib/deneva/system/lock_free_queue.h b/contrib/deneva/system/lock_free_queue.h deleted file mode 100644 index 7c7b0060..00000000 --- a/contrib/deneva/system/lock_free_queue.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _LF_QUEUE_H_ -#define _LF_QUEUE_H_ - -#define COMPILER_BARRIER asm volatile("" ::: "memory"); -#define PAUSE usleep(1); - -struct QueueEntry { - volatile uintptr_t value; // the value stored in the entry. i.e., the pointer. - QueueEntry * next; -}; - -class LockfreeQueue { -public: - LockfreeQueue(); - bool enqueue(uintptr_t value); - bool dequeue(uintptr_t &value); -private: - QueueEntry * volatile _head; - QueueEntry * volatile _tail; -}; - -#endif diff --git a/contrib/deneva/system/log_thread.cpp b/contrib/deneva/system/log_thread.cpp deleted file mode 100644 index e4d1bd2e..00000000 --- a/contrib/deneva/system/log_thread.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "thread.h" -#include "log_thread.h" -#include "logger.h" - -void LogThread::setup() {} - -RC LogThread::run() { - tsetup(); - while (!simulation->is_done()) { - logger.processRecord(get_thd_id()); - } - return FINISH; -} - - diff --git a/contrib/deneva/system/log_thread.h b/contrib/deneva/system/log_thread.h deleted file mode 100644 index 830008f7..00000000 --- a/contrib/deneva/system/log_thread.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _LOGTHREAD_H_ -#define _LOGTHREAD_H_ - -#include "global.h" - -class Workload; - -class LogThread : public Thread { -public: - RC run(); - void setup(); -}; - -#endif diff --git a/contrib/deneva/system/logger.cpp b/contrib/deneva/system/logger.cpp deleted file mode 100644 index 322b7e6c..00000000 --- a/contrib/deneva/system/logger.cpp +++ /dev/null @@ -1,144 +0,0 @@ -#include "logger.h" -#include "work_queue.h" -#include "message.h" -#include "mem_alloc.h" -#include - - -void Logger::init(const char * log_file_name) { - this->log_file_name = log_file_name; - log_file.open(log_file_name, ios::out | ios::app | ios::binary); - assert(log_file.is_open()); - pthread_mutex_init(&mtx,NULL); -} - -void Logger::release() { log_file.close(); } - -LogRecord* Logger::createRecord(uint64_t txn_id, LogIUD iud, uint64_t table_id, uint64_t key) { - LogRecord * record = (LogRecord*)mem_allocator.alloc(sizeof(LogRecord)); - record->rcd.init(); - record->rcd.lsn = ATOM_FETCH_ADD(lsn,1); - record->rcd.iud = iud; - record->rcd.txn_id = txn_id; - record->rcd.table_id = table_id; - record->rcd.key = key; - return record; -} - -LogRecord* Logger::createRecord(LogRecord* record) { - LogRecord * my_record = (LogRecord*)mem_allocator.alloc(sizeof(LogRecord)); - my_record->rcd.init(); - my_record->copyRecord(record); - return my_record; -} - -void LogRecord::copyRecord(LogRecord* record) { - rcd.init(); - rcd.lsn = record->rcd.lsn; - rcd.iud = record->rcd.iud; - rcd.type = record->rcd.type; - rcd.txn_id = record->rcd.txn_id; - rcd.table_id = record->rcd.table_id; - rcd.key = record->rcd.key; -} - - -void Logger::enqueueRecord(LogRecord* record) { - DEBUG("Enqueue Log Record %ld\n",record->rcd.txn_id); - pthread_mutex_lock(&mtx); - log_queue.push(record); - pthread_mutex_unlock(&mtx); -} - -void Logger::processRecord(uint64_t thd_id) { - if (log_queue.empty()) return; - LogRecord * record = NULL; - pthread_mutex_lock(&mtx); - if(!log_queue.empty()) { - record = log_queue.front(); - log_queue.pop(); - } - pthread_mutex_unlock(&mtx); - - if(record) { - uint64_t starttime = get_sys_clock(); - DEBUG("Dequeue Log Record %ld\n",record->rcd.txn_id); - if(record->rcd.iud == L_NOTIFY) { - flushBuffer(thd_id); - work_queue.enqueue(thd_id,Message::create_message(record->rcd.txn_id,LOG_FLUSHED),false); - - } - writeToBuffer(thd_id,record); - //writeToBuffer((char*)(&record->rcd),sizeof(record->rcd)); - log_buf_cnt++; - mem_allocator.free(record,sizeof(LogRecord)); - INC_STATS(thd_id,log_process_time,get_sys_clock() - starttime); - } - -} - -uint64_t Logger::reserveBuffer(uint64_t size) { return ATOM_FETCH_ADD(aries_write_offset, size); } - - -void Logger::writeToBuffer(uint64_t thd_id, char * data, uint64_t size) { - uint64_t starttime = get_sys_clock(); - log_file.write(data,size); - INC_STATS(thd_id,log_write_time,get_sys_clock() - starttime); - INC_STATS(thd_id,log_write_cnt,1); -} - -void Logger::notify_on_sync(uint64_t txn_id) { - LogRecord * record = (LogRecord*)mem_allocator.alloc(sizeof(LogRecord)); - record->rcd.init(); - record->rcd.txn_id = txn_id; - record->rcd.iud = L_NOTIFY; - enqueueRecord(record); -} - -void Logger::writeToBuffer(uint64_t thd_id, LogRecord * record) { - DEBUG("Buffer Write\n"); - uint64_t starttime = get_sys_clock(); -#if LOG_COMMAND - - WRITE_VAL(log_file,record->rcd.checksum); - WRITE_VAL(log_file,record->rcd.lsn); - WRITE_VAL(log_file,record->rcd.type); - WRITE_VAL(log_file,record->rcd.txn_id); - //WRITE_VAL(log_file,record->rcd.partid); -#if WORKLOAD == TPCC - WRITE_VAL(log_file,record->rcd.txntype); -#endif - WRITE_VAL_SIZE(log_file,record->rcd.params,record->rcd.params_size); - -#else - - WRITE_VAL(log_file,record->rcd.checksum); - WRITE_VAL(log_file,record->rcd.lsn); - WRITE_VAL(log_file,record->rcd.type); - WRITE_VAL(log_file,record->rcd.iud); - WRITE_VAL(log_file,record->rcd.txn_id); - //WRITE_VAL(log_file,record->rcd.partid); - WRITE_VAL(log_file,record->rcd.table_id); - WRITE_VAL(log_file,record->rcd.key); - -#endif - INC_STATS(thd_id,log_write_time,get_sys_clock() - starttime); - -} - -void Logger::flushBufferCheck(uint64_t thd_id) { - if(log_buf_cnt >= g_log_buf_max || get_sys_clock() - last_flush > g_log_flush_timeout) { - flushBuffer(thd_id); - } -} - -void Logger::flushBuffer(uint64_t thd_id) { - DEBUG("Flush Buffer\n"); - uint64_t starttime = get_sys_clock(); - log_file.flush(); - INC_STATS(thd_id,log_flush_time,get_sys_clock() - starttime); - INC_STATS(thd_id,log_flush_cnt,1); - - last_flush = get_sys_clock(); - log_buf_cnt = 0; -} diff --git a/contrib/deneva/system/logger.h b/contrib/deneva/system/logger.h deleted file mode 100644 index b27b3dba..00000000 --- a/contrib/deneva/system/logger.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef LOGGER_H -#define LOGGER_H - -#include "global.h" -#include "helper.h" -#include "concurrentqueue.h" -#include -#include -#include - -enum LogRecType { - LRT_INVALID = 0, - LRT_INSERT, - LRT_UPDATE, - LRT_DELETE, - LRT_TRUNCATE -}; -enum LogIUD { - L_INSERT = 0, - L_UPDATE, - L_DELETE, - L_NOTIFY -}; - -// Command log record (logical logging) -struct CmdLogRecord { - uint32_t checksum; - uint64_t lsn; - LogRecType type; - uint64_t txn_id; // transaction id -#if WORKLOAD==TPCC - TPCCTxnType txntype; -#elif WORKLOAD==YCSB - //YCSBTxnType txntype; -#endif - uint32_t params_size; - char * params; // input parameters for this transaction type -}; - -// ARIES-style log record (physiological logging) -struct AriesLogRecord { - void init() { - checksum = 0; - lsn = UINT64_MAX; - type = LRT_UPDATE; - iud = L_UPDATE; - txn_id = UINT64_MAX; - table_id = 0; - key = UINT64_MAX; - } - - uint32_t checksum; - uint64_t lsn; - LogRecType type; - LogIUD iud; - uint64_t txn_id; // transaction id - //uint32_t partid; // partition id - uint32_t table_id; // table being updated - uint64_t key; // primary key (determines the partition ID) -}; - -class LogRecord { -public: - //LogRecord(); - LogRecType getType() { return rcd.type; } - void copyRecord( LogRecord * record); - // TODO: compute a reasonable checksum - uint64_t computeChecksum() { - return (uint64_t)rcd.txn_id; - }; -#if LOG_COMMAND - CmdLogRecord rcd; -#else - AriesLogRecord rcd; -#endif -private: - bool isValid; - -}; - -class Logger { -public: - void init(const char * log_file); - void release(); - void flushBufferCheck(uint64_t thd_id); - LogRecord * createRecord(LogRecord* record); - - LogRecord * createRecord( - //LogRecType type, - uint64_t txn_id, LogIUD iud, - //uint64_t partid, - uint64_t table_id, uint64_t key); - void enqueueRecord(LogRecord* record); - void processRecord(uint64_t thd_id); - void writeToBuffer(uint64_t thd_id,char * data, uint64_t size); - void writeToBuffer(uint64_t thd_id,LogRecord* record); - uint64_t reserveBuffer(uint64_t size); - void notify_on_sync(uint64_t txn_id); -private: - pthread_mutex_t mtx; - uint64_t lsn; - - void flushBuffer(uint64_t thd_id); - std::queue log_queue; - const char * log_file_name; - std::ofstream log_file; - uint64_t aries_write_offset; - std::set txns_to_notify; - uint64_t last_flush; - uint64_t log_buf_cnt; -}; - - -#endif diff --git a/contrib/deneva/system/ltsrpc.pb.cpp b/contrib/deneva/system/ltsrpc.pb.cpp deleted file mode 100644 index ca4d94fb..00000000 --- a/contrib/deneva/system/ltsrpc.pb.cpp +++ /dev/null @@ -1,2968 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: ltsrpc.proto - -#include "ltsrpc.pb.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -// @@protoc_insertion_point(includes) -#include -extern PROTOBUF_INTERNAL_EXPORT_ltsrpc_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Member_ltsrpc_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_ltsrpc_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_RequestHeader_ltsrpc_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_ltsrpc_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_ResponseHeader_ltsrpc_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_ltsrpc_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Status_ltsrpc_2eproto; -namespace ltsrpc { -class ClusterDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _Cluster_default_instance_; -class StatusDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _Status_default_instance_; -class MemberDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _Member_default_instance_; -class RequestHeaderDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _RequestHeader_default_instance_; -class ResponseHeaderDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _ResponseHeader_default_instance_; -class GetMembersRequestDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _GetMembersRequest_default_instance_; -class GetMembersResponseDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _GetMembersResponse_default_instance_; -class GetTxnTimestampCtxDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; -} _GetTxnTimestampCtx_default_instance_; -} // namespace ltsrpc -static void InitDefaultsscc_info_Cluster_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_Cluster_default_instance_; - new (ptr) ::ltsrpc::Cluster(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::Cluster::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Cluster_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Cluster_ltsrpc_2eproto}, {}}; - -static void InitDefaultsscc_info_GetMembersRequest_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_GetMembersRequest_default_instance_; - new (ptr) ::ltsrpc::GetMembersRequest(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::GetMembersRequest::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_GetMembersRequest_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_GetMembersRequest_ltsrpc_2eproto}, { - &scc_info_RequestHeader_ltsrpc_2eproto.base,}}; - -static void InitDefaultsscc_info_GetMembersResponse_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_GetMembersResponse_default_instance_; - new (ptr) ::ltsrpc::GetMembersResponse(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::GetMembersResponse::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_GetMembersResponse_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsscc_info_GetMembersResponse_ltsrpc_2eproto}, { - &scc_info_ResponseHeader_ltsrpc_2eproto.base, - &scc_info_Member_ltsrpc_2eproto.base,}}; - -static void InitDefaultsscc_info_GetTxnTimestampCtx_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_GetTxnTimestampCtx_default_instance_; - new (ptr) ::ltsrpc::GetTxnTimestampCtx(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::GetTxnTimestampCtx::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_GetTxnTimestampCtx_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_GetTxnTimestampCtx_ltsrpc_2eproto}, {}}; - -static void InitDefaultsscc_info_Member_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_Member_default_instance_; - new (ptr) ::ltsrpc::Member(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::Member::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Member_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Member_ltsrpc_2eproto}, {}}; - -static void InitDefaultsscc_info_RequestHeader_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_RequestHeader_default_instance_; - new (ptr) ::ltsrpc::RequestHeader(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::RequestHeader::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_RequestHeader_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_RequestHeader_ltsrpc_2eproto}, {}}; - -static void InitDefaultsscc_info_ResponseHeader_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_ResponseHeader_default_instance_; - new (ptr) ::ltsrpc::ResponseHeader(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::ResponseHeader::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_ResponseHeader_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_ResponseHeader_ltsrpc_2eproto}, { - &scc_info_Status_ltsrpc_2eproto.base,}}; - -static void InitDefaultsscc_info_Status_ltsrpc_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::ltsrpc::_Status_default_instance_; - new (ptr) ::ltsrpc::Status(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::ltsrpc::Status::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Status_ltsrpc_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Status_ltsrpc_2eproto}, {}}; - -static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_ltsrpc_2eproto[8]; -static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_ltsrpc_2eproto[1]; -static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_ltsrpc_2eproto = nullptr; - -const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_ltsrpc_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Cluster, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Cluster, cluster_id_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Status, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Status, code_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::Status, msg_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, member_id_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, name_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, peer_urls_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, client_urls_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::Member, leader_priority_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::RequestHeader, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::RequestHeader, cluster_id_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::ResponseHeader, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::ResponseHeader, cluster_id_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::ResponseHeader, status_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersRequest, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersRequest, header_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersResponse, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersResponse, header_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersResponse, members_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersResponse, leader_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetMembersResponse, etcd_leader_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetTxnTimestampCtx, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetTxnTimestampCtx, txn_id_), - PROTOBUF_FIELD_OFFSET(::ltsrpc::GetTxnTimestampCtx, txn_ts_), -}; -static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, sizeof(::ltsrpc::Cluster)}, - { 6, -1, sizeof(::ltsrpc::Status)}, - { 13, -1, sizeof(::ltsrpc::Member)}, - { 23, -1, sizeof(::ltsrpc::RequestHeader)}, - { 29, -1, sizeof(::ltsrpc::ResponseHeader)}, - { 36, -1, sizeof(::ltsrpc::GetMembersRequest)}, - { 42, -1, sizeof(::ltsrpc::GetMembersResponse)}, - { 51, -1, sizeof(::ltsrpc::GetTxnTimestampCtx)}, -}; - -static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { - reinterpret_cast(&::ltsrpc::_Cluster_default_instance_), - reinterpret_cast(&::ltsrpc::_Status_default_instance_), - reinterpret_cast(&::ltsrpc::_Member_default_instance_), - reinterpret_cast(&::ltsrpc::_RequestHeader_default_instance_), - reinterpret_cast(&::ltsrpc::_ResponseHeader_default_instance_), - reinterpret_cast(&::ltsrpc::_GetMembersRequest_default_instance_), - reinterpret_cast(&::ltsrpc::_GetMembersResponse_default_instance_), - reinterpret_cast(&::ltsrpc::_GetTxnTimestampCtx_default_instance_), -}; - -const char descriptor_table_protodef_ltsrpc_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = - "\n\014ltsrpc.proto\022\006ltsrpc\"\035\n\007Cluster\022\022\n\nclu" - "ster_id\030\001 \001(\r\"7\n\006Status\022 \n\004code\030\001 \001(\0162\022." - "ltsrpc.StatusCode\022\013\n\003msg\030\002 \001(\t\"j\n\006Member" - "\022\021\n\tmember_id\030\001 \001(\004\022\014\n\004name\030\002 \001(\t\022\021\n\tpee" - "r_urls\030\003 \003(\t\022\023\n\013client_urls\030\004 \003(\t\022\027\n\017lea" - "der_priority\030\005 \001(\005\"#\n\rRequestHeader\022\022\n\nc" - "luster_id\030\001 \001(\r\"D\n\016ResponseHeader\022\022\n\nclu" - "ster_id\030\001 \001(\r\022\036\n\006status\030\002 \001(\0132\016.ltsrpc.S" - "tatus\":\n\021GetMembersRequest\022%\n\006header\030\001 \001" - "(\0132\025.ltsrpc.RequestHeader\"\242\001\n\022GetMembers" - "Response\022&\n\006header\030\001 \001(\0132\026.ltsrpc.Respon" - "seHeader\022\037\n\007members\030\002 \003(\0132\016.ltsrpc.Membe" - "r\022\036\n\006leader\030\003 \001(\0132\016.ltsrpc.Member\022#\n\013etc" - "d_leader\030\004 \001(\0132\016.ltsrpc.Member\"4\n\022GetTxn" - "TimestampCtx\022\016\n\006txn_id\030\001 \001(\004\022\016\n\006txn_ts\030\002" - " \001(\004*\256\001\n\nStatusCode\022\t\n\005SC_OK\020\000\022\014\n\010SC_ERR" - "OR\020\001\022\016\n\nSC_UNKNOWN\020\002\022\021\n\rSC_NOT_LEADER\020\003\022" - "\021\n\rSC_NOT_EXISTS\020\004\022\r\n\tSC_CANCEL\020\005\022\031\n\025SC_" - "RESOURCE_EXHAUSTED\020\006\022\016\n\nSC_ABORTED\020\007\022\027\n\023" - "SC_LEADER_NOT_FOUND\020\0102\231\001\n\003LTS\022K\n\017GetTxnT" - "imestamp\022\032.ltsrpc.GetTxnTimestampCtx\032\032.l" - "tsrpc.GetTxnTimestampCtx\"\000\022E\n\nGetMembers" - "\022\031.ltsrpc.GetMembersRequest\032\032.ltsrpc.Get" - "MembersResponse\"\000b\006proto3" - ; -static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_ltsrpc_2eproto_deps[1] = { -}; -static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_ltsrpc_2eproto_sccs[8] = { - &scc_info_Cluster_ltsrpc_2eproto.base, - &scc_info_GetMembersRequest_ltsrpc_2eproto.base, - &scc_info_GetMembersResponse_ltsrpc_2eproto.base, - &scc_info_GetTxnTimestampCtx_ltsrpc_2eproto.base, - &scc_info_Member_ltsrpc_2eproto.base, - &scc_info_RequestHeader_ltsrpc_2eproto.base, - &scc_info_ResponseHeader_ltsrpc_2eproto.base, - &scc_info_Status_ltsrpc_2eproto.base, -}; -static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_ltsrpc_2eproto_once; -static bool descriptor_table_ltsrpc_2eproto_initialized = false; -const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ltsrpc_2eproto = { - &descriptor_table_ltsrpc_2eproto_initialized, descriptor_table_protodef_ltsrpc_2eproto, "ltsrpc.proto", 945, - &descriptor_table_ltsrpc_2eproto_once, descriptor_table_ltsrpc_2eproto_sccs, descriptor_table_ltsrpc_2eproto_deps, 8, 0, - schemas, file_default_instances, TableStruct_ltsrpc_2eproto::offsets, - file_level_metadata_ltsrpc_2eproto, 8, file_level_enum_descriptors_ltsrpc_2eproto, file_level_service_descriptors_ltsrpc_2eproto, -}; - -// Force running AddDescriptors() at dynamic initialization time. -static bool dynamic_init_dummy_ltsrpc_2eproto = ( ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_ltsrpc_2eproto), true); -namespace ltsrpc { -const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* StatusCode_descriptor() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_ltsrpc_2eproto); - return file_level_enum_descriptors_ltsrpc_2eproto[0]; -} -bool StatusCode_IsValid(int value) { - switch (value) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - return true; - default: - return false; - } -} - - -// =================================================================== - -void Cluster::InitAsDefaultInstance() { -} -class Cluster::_Internal { - public: -}; - -Cluster::Cluster() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.Cluster) -} -Cluster::Cluster(const Cluster& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - cluster_id_ = from.cluster_id_; - // @@protoc_insertion_point(copy_constructor:ltsrpc.Cluster) -} - -void Cluster::SharedCtor() { - cluster_id_ = 0u; -} - -Cluster::~Cluster() { - // @@protoc_insertion_point(destructor:ltsrpc.Cluster) - SharedDtor(); -} - -void Cluster::SharedDtor() { -} - -void Cluster::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const Cluster& Cluster::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Cluster_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void Cluster::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.Cluster) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - cluster_id_ = 0u; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* Cluster::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // uint32 cluster_id = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - cluster_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool Cluster::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.Cluster) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // uint32 cluster_id = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint32, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT32>( - input, &cluster_id_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.Cluster) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.Cluster) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void Cluster::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.Cluster) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32(1, this->cluster_id(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.Cluster) -} - -::PROTOBUF_NAMESPACE_ID::uint8* Cluster::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.Cluster) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32ToArray(1, this->cluster_id(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.Cluster) - return target; -} - -size_t Cluster::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.Cluster) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt32Size( - this->cluster_id()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void Cluster::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.Cluster) - GOOGLE_DCHECK_NE(&from, this); - const Cluster* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.Cluster) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.Cluster) - MergeFrom(*source); - } -} - -void Cluster::MergeFrom(const Cluster& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.Cluster) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.cluster_id() != 0) { - set_cluster_id(from.cluster_id()); - } -} - -void Cluster::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.Cluster) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void Cluster::CopyFrom(const Cluster& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.Cluster) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool Cluster::IsInitialized() const { - return true; -} - -void Cluster::InternalSwap(Cluster* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(cluster_id_, other->cluster_id_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata Cluster::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void Status::InitAsDefaultInstance() { -} -class Status::_Internal { - public: -}; - -Status::Status() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.Status) -} -Status::Status(const Status& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - if (!from.msg().empty()) { - msg_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.msg_); - } - code_ = from.code_; - // @@protoc_insertion_point(copy_constructor:ltsrpc.Status) -} - -void Status::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_Status_ltsrpc_2eproto.base); - msg_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - code_ = 0; -} - -Status::~Status() { - // @@protoc_insertion_point(destructor:ltsrpc.Status) - SharedDtor(); -} - -void Status::SharedDtor() { - msg_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} - -void Status::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const Status& Status::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Status_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void Status::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.Status) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - code_ = 0; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* Status::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // .ltsrpc.StatusCode code = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - ::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - set_code(static_cast<::ltsrpc::StatusCode>(val)); - } else goto handle_unusual; - continue; - // string msg = 2; - case 2: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { - ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_msg(), ptr, ctx, "ltsrpc.Status.msg"); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool Status::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.Status) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .ltsrpc.StatusCode code = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - int value = 0; - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - int, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_ENUM>( - input, &value))); - set_code(static_cast< ::ltsrpc::StatusCode >(value)); - } else { - goto handle_unusual; - } - break; - } - - // string msg = 2; - case 2: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( - input, this->mutable_msg())); - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->msg().data(), static_cast(this->msg().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, - "ltsrpc.Status.msg")); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.Status) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.Status) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void Status::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.Status) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.StatusCode code = 1; - if (this->code() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnum( - 1, this->code(), output); - } - - // string msg = 2; - if (this->msg().size() > 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->msg().data(), static_cast(this->msg().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Status.msg"); - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->msg(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.Status) -} - -::PROTOBUF_NAMESPACE_ID::uint8* Status::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.Status) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.StatusCode code = 1; - if (this->code() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnumToArray( - 1, this->code(), target); - } - - // string msg = 2; - if (this->msg().size() > 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->msg().data(), static_cast(this->msg().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Status.msg"); - target = - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray( - 2, this->msg(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.Status) - return target; -} - -size_t Status::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.Status) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // string msg = 2; - if (this->msg().size() > 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->msg()); - } - - // .ltsrpc.StatusCode code = 1; - if (this->code() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::EnumSize(this->code()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void Status::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.Status) - GOOGLE_DCHECK_NE(&from, this); - const Status* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.Status) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.Status) - MergeFrom(*source); - } -} - -void Status::MergeFrom(const Status& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.Status) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg().size() > 0) { - - msg_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.msg_); - } - if (from.code() != 0) { - set_code(from.code()); - } -} - -void Status::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.Status) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void Status::CopyFrom(const Status& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.Status) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool Status::IsInitialized() const { - return true; -} - -void Status::InternalSwap(Status* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - msg_.Swap(&other->msg_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(code_, other->code_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata Status::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void Member::InitAsDefaultInstance() { -} -class Member::_Internal { - public: -}; - -Member::Member() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.Member) -} -Member::Member(const Member& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr), - peer_urls_(from.peer_urls_), - client_urls_(from.client_urls_) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - if (!from.name().empty()) { - name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_); - } - ::memcpy(&member_id_, &from.member_id_, - static_cast(reinterpret_cast(&leader_priority_) - - reinterpret_cast(&member_id_)) + sizeof(leader_priority_)); - // @@protoc_insertion_point(copy_constructor:ltsrpc.Member) -} - -void Member::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_Member_ltsrpc_2eproto.base); - name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - ::memset(&member_id_, 0, static_cast( - reinterpret_cast(&leader_priority_) - - reinterpret_cast(&member_id_)) + sizeof(leader_priority_)); -} - -Member::~Member() { - // @@protoc_insertion_point(destructor:ltsrpc.Member) - SharedDtor(); -} - -void Member::SharedDtor() { - name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} - -void Member::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const Member& Member::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Member_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void Member::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.Member) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - peer_urls_.Clear(); - client_urls_.Clear(); - name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - ::memset(&member_id_, 0, static_cast( - reinterpret_cast(&leader_priority_) - - reinterpret_cast(&member_id_)) + sizeof(leader_priority_)); - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* Member::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // uint64 member_id = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - member_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - // string name = 2; - case 2: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { - ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_name(), ptr, ctx, "ltsrpc.Member.name"); - CHK_(ptr); - } else goto handle_unusual; - continue; - // repeated string peer_urls = 3; - case 3: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) { - ptr -= 1; - do { - ptr += 1; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(add_peer_urls(), ptr, ctx, "ltsrpc.Member.peer_urls"); - CHK_(ptr); - if (!ctx->DataAvailable(ptr)) break; - } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 26); - } else goto handle_unusual; - continue; - // repeated string client_urls = 4; - case 4: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) { - ptr -= 1; - do { - ptr += 1; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(add_client_urls(), ptr, ctx, "ltsrpc.Member.client_urls"); - CHK_(ptr); - if (!ctx->DataAvailable(ptr)) break; - } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 34); - } else goto handle_unusual; - continue; - // int32 leader_priority = 5; - case 5: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 40)) { - leader_priority_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool Member::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.Member) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // uint64 member_id = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>( - input, &member_id_))); - } else { - goto handle_unusual; - } - break; - } - - // string name = 2; - case 2: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( - input, this->mutable_name())); - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), static_cast(this->name().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, - "ltsrpc.Member.name")); - } else { - goto handle_unusual; - } - break; - } - - // repeated string peer_urls = 3; - case 3: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( - input, this->add_peer_urls())); - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->peer_urls(this->peer_urls_size() - 1).data(), - static_cast(this->peer_urls(this->peer_urls_size() - 1).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, - "ltsrpc.Member.peer_urls")); - } else { - goto handle_unusual; - } - break; - } - - // repeated string client_urls = 4; - case 4: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( - input, this->add_client_urls())); - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->client_urls(this->client_urls_size() - 1).data(), - static_cast(this->client_urls(this->client_urls_size() - 1).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, - "ltsrpc.Member.client_urls")); - } else { - goto handle_unusual; - } - break; - } - - // int32 leader_priority = 5; - case 5: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (40 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::int32, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT32>( - input, &leader_priority_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.Member) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.Member) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void Member::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.Member) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint64 member_id = 1; - if (this->member_id() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(1, this->member_id(), output); - } - - // string name = 2; - if (this->name().size() > 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), static_cast(this->name().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.name"); - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->name(), output); - } - - // repeated string peer_urls = 3; - for (int i = 0, n = this->peer_urls_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->peer_urls(i).data(), static_cast(this->peer_urls(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.peer_urls"); - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteString( - 3, this->peer_urls(i), output); - } - - // repeated string client_urls = 4; - for (int i = 0, n = this->client_urls_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->client_urls(i).data(), static_cast(this->client_urls(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.client_urls"); - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteString( - 4, this->client_urls(i), output); - } - - // int32 leader_priority = 5; - if (this->leader_priority() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt32(5, this->leader_priority(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.Member) -} - -::PROTOBUF_NAMESPACE_ID::uint8* Member::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.Member) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint64 member_id = 1; - if (this->member_id() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(1, this->member_id(), target); - } - - // string name = 2; - if (this->name().size() > 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), static_cast(this->name().length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.name"); - target = - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray( - 2, this->name(), target); - } - - // repeated string peer_urls = 3; - for (int i = 0, n = this->peer_urls_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->peer_urls(i).data(), static_cast(this->peer_urls(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.peer_urls"); - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - WriteStringToArray(3, this->peer_urls(i), target); - } - - // repeated string client_urls = 4; - for (int i = 0, n = this->client_urls_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->client_urls(i).data(), static_cast(this->client_urls(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "ltsrpc.Member.client_urls"); - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - WriteStringToArray(4, this->client_urls(i), target); - } - - // int32 leader_priority = 5; - if (this->leader_priority() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt32ToArray(5, this->leader_priority(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.Member) - return target; -} - -size_t Member::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.Member) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // repeated string peer_urls = 3; - total_size += 1 * - ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->peer_urls_size()); - for (int i = 0, n = this->peer_urls_size(); i < n; i++) { - total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->peer_urls(i)); - } - - // repeated string client_urls = 4; - total_size += 1 * - ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->client_urls_size()); - for (int i = 0, n = this->client_urls_size(); i < n; i++) { - total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->client_urls(i)); - } - - // string name = 2; - if (this->name().size() > 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->name()); - } - - // uint64 member_id = 1; - if (this->member_id() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size( - this->member_id()); - } - - // int32 leader_priority = 5; - if (this->leader_priority() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int32Size( - this->leader_priority()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void Member::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.Member) - GOOGLE_DCHECK_NE(&from, this); - const Member* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.Member) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.Member) - MergeFrom(*source); - } -} - -void Member::MergeFrom(const Member& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.Member) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - peer_urls_.MergeFrom(from.peer_urls_); - client_urls_.MergeFrom(from.client_urls_); - if (from.name().size() > 0) { - - name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_); - } - if (from.member_id() != 0) { - set_member_id(from.member_id()); - } - if (from.leader_priority() != 0) { - set_leader_priority(from.leader_priority()); - } -} - -void Member::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.Member) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void Member::CopyFrom(const Member& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.Member) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool Member::IsInitialized() const { - return true; -} - -void Member::InternalSwap(Member* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - peer_urls_.InternalSwap(CastToBase(&other->peer_urls_)); - client_urls_.InternalSwap(CastToBase(&other->client_urls_)); - name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(member_id_, other->member_id_); - swap(leader_priority_, other->leader_priority_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata Member::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void RequestHeader::InitAsDefaultInstance() { -} -class RequestHeader::_Internal { - public: -}; - -RequestHeader::RequestHeader() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.RequestHeader) -} -RequestHeader::RequestHeader(const RequestHeader& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - cluster_id_ = from.cluster_id_; - // @@protoc_insertion_point(copy_constructor:ltsrpc.RequestHeader) -} - -void RequestHeader::SharedCtor() { - cluster_id_ = 0u; -} - -RequestHeader::~RequestHeader() { - // @@protoc_insertion_point(destructor:ltsrpc.RequestHeader) - SharedDtor(); -} - -void RequestHeader::SharedDtor() { -} - -void RequestHeader::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const RequestHeader& RequestHeader::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_RequestHeader_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void RequestHeader::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.RequestHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - cluster_id_ = 0u; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* RequestHeader::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // uint32 cluster_id = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - cluster_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool RequestHeader::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.RequestHeader) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // uint32 cluster_id = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint32, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT32>( - input, &cluster_id_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.RequestHeader) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.RequestHeader) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void RequestHeader::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.RequestHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32(1, this->cluster_id(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.RequestHeader) -} - -::PROTOBUF_NAMESPACE_ID::uint8* RequestHeader::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.RequestHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32ToArray(1, this->cluster_id(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.RequestHeader) - return target; -} - -size_t RequestHeader::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.RequestHeader) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt32Size( - this->cluster_id()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void RequestHeader::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.RequestHeader) - GOOGLE_DCHECK_NE(&from, this); - const RequestHeader* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.RequestHeader) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.RequestHeader) - MergeFrom(*source); - } -} - -void RequestHeader::MergeFrom(const RequestHeader& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.RequestHeader) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.cluster_id() != 0) { - set_cluster_id(from.cluster_id()); - } -} - -void RequestHeader::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.RequestHeader) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void RequestHeader::CopyFrom(const RequestHeader& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.RequestHeader) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool RequestHeader::IsInitialized() const { - return true; -} - -void RequestHeader::InternalSwap(RequestHeader* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(cluster_id_, other->cluster_id_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata RequestHeader::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void ResponseHeader::InitAsDefaultInstance() { - ::ltsrpc::_ResponseHeader_default_instance_._instance.get_mutable()->status_ = const_cast< ::ltsrpc::Status*>( - ::ltsrpc::Status::internal_default_instance()); -} -class ResponseHeader::_Internal { - public: - static const ::ltsrpc::Status& status(const ResponseHeader* msg); -}; - -const ::ltsrpc::Status& -ResponseHeader::_Internal::status(const ResponseHeader* msg) { - return *msg->status_; -} -ResponseHeader::ResponseHeader() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.ResponseHeader) -} -ResponseHeader::ResponseHeader(const ResponseHeader& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from.has_status()) { - status_ = new ::ltsrpc::Status(*from.status_); - } else { - status_ = nullptr; - } - cluster_id_ = from.cluster_id_; - // @@protoc_insertion_point(copy_constructor:ltsrpc.ResponseHeader) -} - -void ResponseHeader::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ResponseHeader_ltsrpc_2eproto.base); - ::memset(&status_, 0, static_cast( - reinterpret_cast(&cluster_id_) - - reinterpret_cast(&status_)) + sizeof(cluster_id_)); -} - -ResponseHeader::~ResponseHeader() { - // @@protoc_insertion_point(destructor:ltsrpc.ResponseHeader) - SharedDtor(); -} - -void ResponseHeader::SharedDtor() { - if (this != internal_default_instance()) delete status_; -} - -void ResponseHeader::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ResponseHeader& ResponseHeader::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ResponseHeader_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void ResponseHeader::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.ResponseHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - if (GetArenaNoVirtual() == nullptr && status_ != nullptr) { - delete status_; - } - status_ = nullptr; - cluster_id_ = 0u; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* ResponseHeader::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // uint32 cluster_id = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - cluster_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - // .ltsrpc.Status status = 2; - case 2: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { - ptr = ctx->ParseMessage(mutable_status(), ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool ResponseHeader::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.ResponseHeader) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // uint32 cluster_id = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint32, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT32>( - input, &cluster_id_))); - } else { - goto handle_unusual; - } - break; - } - - // .ltsrpc.Status status = 2; - case 2: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, mutable_status())); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.ResponseHeader) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.ResponseHeader) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void ResponseHeader::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.ResponseHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32(1, this->cluster_id(), output); - } - - // .ltsrpc.Status status = 2; - if (this->has_status()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 2, _Internal::status(this), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.ResponseHeader) -} - -::PROTOBUF_NAMESPACE_ID::uint8* ResponseHeader::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.ResponseHeader) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32ToArray(1, this->cluster_id(), target); - } - - // .ltsrpc.Status status = 2; - if (this->has_status()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 2, _Internal::status(this), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.ResponseHeader) - return target; -} - -size_t ResponseHeader::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.ResponseHeader) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // .ltsrpc.Status status = 2; - if (this->has_status()) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - *status_); - } - - // uint32 cluster_id = 1; - if (this->cluster_id() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt32Size( - this->cluster_id()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void ResponseHeader::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.ResponseHeader) - GOOGLE_DCHECK_NE(&from, this); - const ResponseHeader* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.ResponseHeader) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.ResponseHeader) - MergeFrom(*source); - } -} - -void ResponseHeader::MergeFrom(const ResponseHeader& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.ResponseHeader) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.has_status()) { - mutable_status()->::ltsrpc::Status::MergeFrom(from.status()); - } - if (from.cluster_id() != 0) { - set_cluster_id(from.cluster_id()); - } -} - -void ResponseHeader::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.ResponseHeader) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ResponseHeader::CopyFrom(const ResponseHeader& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.ResponseHeader) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool ResponseHeader::IsInitialized() const { - return true; -} - -void ResponseHeader::InternalSwap(ResponseHeader* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(status_, other->status_); - swap(cluster_id_, other->cluster_id_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata ResponseHeader::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void GetMembersRequest::InitAsDefaultInstance() { - ::ltsrpc::_GetMembersRequest_default_instance_._instance.get_mutable()->header_ = const_cast< ::ltsrpc::RequestHeader*>( - ::ltsrpc::RequestHeader::internal_default_instance()); -} -class GetMembersRequest::_Internal { - public: - static const ::ltsrpc::RequestHeader& header(const GetMembersRequest* msg); -}; - -const ::ltsrpc::RequestHeader& -GetMembersRequest::_Internal::header(const GetMembersRequest* msg) { - return *msg->header_; -} -GetMembersRequest::GetMembersRequest() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.GetMembersRequest) -} -GetMembersRequest::GetMembersRequest(const GetMembersRequest& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from.has_header()) { - header_ = new ::ltsrpc::RequestHeader(*from.header_); - } else { - header_ = nullptr; - } - // @@protoc_insertion_point(copy_constructor:ltsrpc.GetMembersRequest) -} - -void GetMembersRequest::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_GetMembersRequest_ltsrpc_2eproto.base); - header_ = nullptr; -} - -GetMembersRequest::~GetMembersRequest() { - // @@protoc_insertion_point(destructor:ltsrpc.GetMembersRequest) - SharedDtor(); -} - -void GetMembersRequest::SharedDtor() { - if (this != internal_default_instance()) delete header_; -} - -void GetMembersRequest::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const GetMembersRequest& GetMembersRequest::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_GetMembersRequest_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void GetMembersRequest::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.GetMembersRequest) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - if (GetArenaNoVirtual() == nullptr && header_ != nullptr) { - delete header_; - } - header_ = nullptr; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* GetMembersRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // .ltsrpc.RequestHeader header = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) { - ptr = ctx->ParseMessage(mutable_header(), ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool GetMembersRequest::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.GetMembersRequest) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .ltsrpc.RequestHeader header = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, mutable_header())); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.GetMembersRequest) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.GetMembersRequest) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void GetMembersRequest::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.GetMembersRequest) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.RequestHeader header = 1; - if (this->has_header()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, _Internal::header(this), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.GetMembersRequest) -} - -::PROTOBUF_NAMESPACE_ID::uint8* GetMembersRequest::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.GetMembersRequest) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.RequestHeader header = 1; - if (this->has_header()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 1, _Internal::header(this), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.GetMembersRequest) - return target; -} - -size_t GetMembersRequest::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.GetMembersRequest) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // .ltsrpc.RequestHeader header = 1; - if (this->has_header()) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - *header_); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void GetMembersRequest::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.GetMembersRequest) - GOOGLE_DCHECK_NE(&from, this); - const GetMembersRequest* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.GetMembersRequest) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.GetMembersRequest) - MergeFrom(*source); - } -} - -void GetMembersRequest::MergeFrom(const GetMembersRequest& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.GetMembersRequest) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.has_header()) { - mutable_header()->::ltsrpc::RequestHeader::MergeFrom(from.header()); - } -} - -void GetMembersRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.GetMembersRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void GetMembersRequest::CopyFrom(const GetMembersRequest& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.GetMembersRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool GetMembersRequest::IsInitialized() const { - return true; -} - -void GetMembersRequest::InternalSwap(GetMembersRequest* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(header_, other->header_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata GetMembersRequest::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void GetMembersResponse::InitAsDefaultInstance() { - ::ltsrpc::_GetMembersResponse_default_instance_._instance.get_mutable()->header_ = const_cast< ::ltsrpc::ResponseHeader*>( - ::ltsrpc::ResponseHeader::internal_default_instance()); - ::ltsrpc::_GetMembersResponse_default_instance_._instance.get_mutable()->leader_ = const_cast< ::ltsrpc::Member*>( - ::ltsrpc::Member::internal_default_instance()); - ::ltsrpc::_GetMembersResponse_default_instance_._instance.get_mutable()->etcd_leader_ = const_cast< ::ltsrpc::Member*>( - ::ltsrpc::Member::internal_default_instance()); -} -class GetMembersResponse::_Internal { - public: - static const ::ltsrpc::ResponseHeader& header(const GetMembersResponse* msg); - static const ::ltsrpc::Member& leader(const GetMembersResponse* msg); - static const ::ltsrpc::Member& etcd_leader(const GetMembersResponse* msg); -}; - -const ::ltsrpc::ResponseHeader& -GetMembersResponse::_Internal::header(const GetMembersResponse* msg) { - return *msg->header_; -} -const ::ltsrpc::Member& -GetMembersResponse::_Internal::leader(const GetMembersResponse* msg) { - return *msg->leader_; -} -const ::ltsrpc::Member& -GetMembersResponse::_Internal::etcd_leader(const GetMembersResponse* msg) { - return *msg->etcd_leader_; -} -GetMembersResponse::GetMembersResponse() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.GetMembersResponse) -} -GetMembersResponse::GetMembersResponse(const GetMembersResponse& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr), - members_(from.members_) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from.has_header()) { - header_ = new ::ltsrpc::ResponseHeader(*from.header_); - } else { - header_ = nullptr; - } - if (from.has_leader()) { - leader_ = new ::ltsrpc::Member(*from.leader_); - } else { - leader_ = nullptr; - } - if (from.has_etcd_leader()) { - etcd_leader_ = new ::ltsrpc::Member(*from.etcd_leader_); - } else { - etcd_leader_ = nullptr; - } - // @@protoc_insertion_point(copy_constructor:ltsrpc.GetMembersResponse) -} - -void GetMembersResponse::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_GetMembersResponse_ltsrpc_2eproto.base); - ::memset(&header_, 0, static_cast( - reinterpret_cast(&etcd_leader_) - - reinterpret_cast(&header_)) + sizeof(etcd_leader_)); -} - -GetMembersResponse::~GetMembersResponse() { - // @@protoc_insertion_point(destructor:ltsrpc.GetMembersResponse) - SharedDtor(); -} - -void GetMembersResponse::SharedDtor() { - if (this != internal_default_instance()) delete header_; - if (this != internal_default_instance()) delete leader_; - if (this != internal_default_instance()) delete etcd_leader_; -} - -void GetMembersResponse::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const GetMembersResponse& GetMembersResponse::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_GetMembersResponse_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void GetMembersResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.GetMembersResponse) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - members_.Clear(); - if (GetArenaNoVirtual() == nullptr && header_ != nullptr) { - delete header_; - } - header_ = nullptr; - if (GetArenaNoVirtual() == nullptr && leader_ != nullptr) { - delete leader_; - } - leader_ = nullptr; - if (GetArenaNoVirtual() == nullptr && etcd_leader_ != nullptr) { - delete etcd_leader_; - } - etcd_leader_ = nullptr; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* GetMembersResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // .ltsrpc.ResponseHeader header = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) { - ptr = ctx->ParseMessage(mutable_header(), ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - // repeated .ltsrpc.Member members = 2; - case 2: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { - ptr -= 1; - do { - ptr += 1; - ptr = ctx->ParseMessage(add_members(), ptr); - CHK_(ptr); - if (!ctx->DataAvailable(ptr)) break; - } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 18); - } else goto handle_unusual; - continue; - // .ltsrpc.Member leader = 3; - case 3: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) { - ptr = ctx->ParseMessage(mutable_leader(), ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - // .ltsrpc.Member etcd_leader = 4; - case 4: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) { - ptr = ctx->ParseMessage(mutable_etcd_leader(), ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool GetMembersResponse::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.GetMembersResponse) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .ltsrpc.ResponseHeader header = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, mutable_header())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .ltsrpc.Member members = 2; - case 2: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, add_members())); - } else { - goto handle_unusual; - } - break; - } - - // .ltsrpc.Member leader = 3; - case 3: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, mutable_leader())); - } else { - goto handle_unusual; - } - break; - } - - // .ltsrpc.Member etcd_leader = 4; - case 4: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( - input, mutable_etcd_leader())); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.GetMembersResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.GetMembersResponse) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void GetMembersResponse::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.GetMembersResponse) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.ResponseHeader header = 1; - if (this->has_header()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, _Internal::header(this), output); - } - - // repeated .ltsrpc.Member members = 2; - for (unsigned int i = 0, - n = static_cast(this->members_size()); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 2, - this->members(static_cast(i)), - output); - } - - // .ltsrpc.Member leader = 3; - if (this->has_leader()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 3, _Internal::leader(this), output); - } - - // .ltsrpc.Member etcd_leader = 4; - if (this->has_etcd_leader()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( - 4, _Internal::etcd_leader(this), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.GetMembersResponse) -} - -::PROTOBUF_NAMESPACE_ID::uint8* GetMembersResponse::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.GetMembersResponse) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .ltsrpc.ResponseHeader header = 1; - if (this->has_header()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 1, _Internal::header(this), target); - } - - // repeated .ltsrpc.Member members = 2; - for (unsigned int i = 0, - n = static_cast(this->members_size()); i < n; i++) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 2, this->members(static_cast(i)), target); - } - - // .ltsrpc.Member leader = 3; - if (this->has_leader()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 3, _Internal::leader(this), target); - } - - // .ltsrpc.Member etcd_leader = 4; - if (this->has_etcd_leader()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - InternalWriteMessageToArray( - 4, _Internal::etcd_leader(this), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.GetMembersResponse) - return target; -} - -size_t GetMembersResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.GetMembersResponse) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // repeated .ltsrpc.Member members = 2; - { - unsigned int count = static_cast(this->members_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - this->members(static_cast(i))); - } - } - - // .ltsrpc.ResponseHeader header = 1; - if (this->has_header()) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - *header_); - } - - // .ltsrpc.Member leader = 3; - if (this->has_leader()) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - *leader_); - } - - // .ltsrpc.Member etcd_leader = 4; - if (this->has_etcd_leader()) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( - *etcd_leader_); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void GetMembersResponse::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.GetMembersResponse) - GOOGLE_DCHECK_NE(&from, this); - const GetMembersResponse* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.GetMembersResponse) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.GetMembersResponse) - MergeFrom(*source); - } -} - -void GetMembersResponse::MergeFrom(const GetMembersResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.GetMembersResponse) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - members_.MergeFrom(from.members_); - if (from.has_header()) { - mutable_header()->::ltsrpc::ResponseHeader::MergeFrom(from.header()); - } - if (from.has_leader()) { - mutable_leader()->::ltsrpc::Member::MergeFrom(from.leader()); - } - if (from.has_etcd_leader()) { - mutable_etcd_leader()->::ltsrpc::Member::MergeFrom(from.etcd_leader()); - } -} - -void GetMembersResponse::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.GetMembersResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void GetMembersResponse::CopyFrom(const GetMembersResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.GetMembersResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool GetMembersResponse::IsInitialized() const { - return true; -} - -void GetMembersResponse::InternalSwap(GetMembersResponse* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - CastToBase(&members_)->InternalSwap(CastToBase(&other->members_)); - swap(header_, other->header_); - swap(leader_, other->leader_); - swap(etcd_leader_, other->etcd_leader_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata GetMembersResponse::GetMetadata() const { - return GetMetadataStatic(); -} - - -// =================================================================== - -void GetTxnTimestampCtx::InitAsDefaultInstance() { -} -class GetTxnTimestampCtx::_Internal { - public: -}; - -GetTxnTimestampCtx::GetTxnTimestampCtx() - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:ltsrpc.GetTxnTimestampCtx) -} -GetTxnTimestampCtx::GetTxnTimestampCtx(const GetTxnTimestampCtx& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::memcpy(&txn_id_, &from.txn_id_, - static_cast(reinterpret_cast(&txn_ts_) - - reinterpret_cast(&txn_id_)) + sizeof(txn_ts_)); - // @@protoc_insertion_point(copy_constructor:ltsrpc.GetTxnTimestampCtx) -} - -void GetTxnTimestampCtx::SharedCtor() { - ::memset(&txn_id_, 0, static_cast( - reinterpret_cast(&txn_ts_) - - reinterpret_cast(&txn_id_)) + sizeof(txn_ts_)); -} - -GetTxnTimestampCtx::~GetTxnTimestampCtx() { - // @@protoc_insertion_point(destructor:ltsrpc.GetTxnTimestampCtx) - SharedDtor(); -} - -void GetTxnTimestampCtx::SharedDtor() { -} - -void GetTxnTimestampCtx::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const GetTxnTimestampCtx& GetTxnTimestampCtx::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_GetTxnTimestampCtx_ltsrpc_2eproto.base); - return *internal_default_instance(); -} - - -void GetTxnTimestampCtx::Clear() { -// @@protoc_insertion_point(message_clear_start:ltsrpc.GetTxnTimestampCtx) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - ::memset(&txn_id_, 0, static_cast( - reinterpret_cast(&txn_ts_) - - reinterpret_cast(&txn_id_)) + sizeof(txn_ts_)); - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* GetTxnTimestampCtx::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { -#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure - while (!ctx->Done(&ptr)) { - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); - CHK_(ptr); - switch (tag >> 3) { - // uint64 txn_id = 1; - case 1: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) { - txn_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - // uint64 txn_ts = 2; - case 2: - if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) { - txn_ts_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); - CHK_(ptr); - } else goto handle_unusual; - continue; - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->SetLastTag(tag); - goto success; - } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); - CHK_(ptr != nullptr); - continue; - } - } // switch - } // while -success: - return ptr; -failure: - ptr = nullptr; - goto success; -#undef CHK_ -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool GetTxnTimestampCtx::MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::PROTOBUF_NAMESPACE_ID::uint32 tag; - // @@protoc_insertion_point(parse_start:ltsrpc.GetTxnTimestampCtx) - for (;;) { - ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // uint64 txn_id = 1; - case 1: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (8 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>( - input, &txn_id_))); - } else { - goto handle_unusual; - } - break; - } - - // uint64 txn_ts = 2; - case 2: { - if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (16 & 0xFF)) { - - DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< - ::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>( - input, &txn_ts_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:ltsrpc.GetTxnTimestampCtx) - return true; -failure: - // @@protoc_insertion_point(parse_failure:ltsrpc.GetTxnTimestampCtx) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void GetTxnTimestampCtx::SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:ltsrpc.GetTxnTimestampCtx) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint64 txn_id = 1; - if (this->txn_id() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(1, this->txn_id(), output); - } - - // uint64 txn_ts = 2; - if (this->txn_ts() != 0) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(2, this->txn_ts(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:ltsrpc.GetTxnTimestampCtx) -} - -::PROTOBUF_NAMESPACE_ID::uint8* GetTxnTimestampCtx::InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:ltsrpc.GetTxnTimestampCtx) - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // uint64 txn_id = 1; - if (this->txn_id() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(1, this->txn_id(), target); - } - - // uint64 txn_ts = 2; - if (this->txn_ts() != 0) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(2, this->txn_ts(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:ltsrpc.GetTxnTimestampCtx) - return target; -} - -size_t GetTxnTimestampCtx::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:ltsrpc.GetTxnTimestampCtx) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // uint64 txn_id = 1; - if (this->txn_id() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size( - this->txn_id()); - } - - // uint64 txn_ts = 2; - if (this->txn_ts() != 0) { - total_size += 1 + - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size( - this->txn_ts()); - } - - int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void GetTxnTimestampCtx::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:ltsrpc.GetTxnTimestampCtx) - GOOGLE_DCHECK_NE(&from, this); - const GetTxnTimestampCtx* source = - ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:ltsrpc.GetTxnTimestampCtx) - ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:ltsrpc.GetTxnTimestampCtx) - MergeFrom(*source); - } -} - -void GetTxnTimestampCtx::MergeFrom(const GetTxnTimestampCtx& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:ltsrpc.GetTxnTimestampCtx) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.txn_id() != 0) { - set_txn_id(from.txn_id()); - } - if (from.txn_ts() != 0) { - set_txn_ts(from.txn_ts()); - } -} - -void GetTxnTimestampCtx::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:ltsrpc.GetTxnTimestampCtx) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void GetTxnTimestampCtx::CopyFrom(const GetTxnTimestampCtx& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:ltsrpc.GetTxnTimestampCtx) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool GetTxnTimestampCtx::IsInitialized() const { - return true; -} - -void GetTxnTimestampCtx::InternalSwap(GetTxnTimestampCtx* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(txn_id_, other->txn_id_); - swap(txn_ts_, other->txn_ts_); -} - -::PROTOBUF_NAMESPACE_ID::Metadata GetTxnTimestampCtx::GetMetadata() const { - return GetMetadataStatic(); -} - - -// @@protoc_insertion_point(namespace_scope) -} // namespace ltsrpc -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_NOINLINE ::ltsrpc::Cluster* Arena::CreateMaybeMessage< ::ltsrpc::Cluster >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::Cluster >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::Status* Arena::CreateMaybeMessage< ::ltsrpc::Status >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::Status >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::Member* Arena::CreateMaybeMessage< ::ltsrpc::Member >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::Member >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::RequestHeader* Arena::CreateMaybeMessage< ::ltsrpc::RequestHeader >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::RequestHeader >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::ResponseHeader* Arena::CreateMaybeMessage< ::ltsrpc::ResponseHeader >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::ResponseHeader >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::GetMembersRequest* Arena::CreateMaybeMessage< ::ltsrpc::GetMembersRequest >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::GetMembersRequest >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::GetMembersResponse* Arena::CreateMaybeMessage< ::ltsrpc::GetMembersResponse >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::GetMembersResponse >(arena); -} -template<> PROTOBUF_NOINLINE ::ltsrpc::GetTxnTimestampCtx* Arena::CreateMaybeMessage< ::ltsrpc::GetTxnTimestampCtx >(Arena* arena) { - return Arena::CreateInternal< ::ltsrpc::GetTxnTimestampCtx >(arena); -} -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) -#include diff --git a/contrib/deneva/system/ltsrpc.pb.h b/contrib/deneva/system/ltsrpc.pb.h deleted file mode 100644 index 96c57b97..00000000 --- a/contrib/deneva/system/ltsrpc.pb.h +++ /dev/null @@ -1,2006 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: ltsrpc.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_ltsrpc_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_ltsrpc_2eproto - -#include -#include - -#include -#if PROTOBUF_VERSION < 3009000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3009001 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // IWYU pragma: export -#include // IWYU pragma: export -#include -#include -// @@protoc_insertion_point(includes) -#include -#define PROTOBUF_INTERNAL_EXPORT_ltsrpc_2eproto -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct TableStruct_ltsrpc_2eproto { - static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[8] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[]; - static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[]; - static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; -}; -extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ltsrpc_2eproto; -namespace ltsrpc { -class Cluster; -class ClusterDefaultTypeInternal; -extern ClusterDefaultTypeInternal _Cluster_default_instance_; -class GetMembersRequest; -class GetMembersRequestDefaultTypeInternal; -extern GetMembersRequestDefaultTypeInternal _GetMembersRequest_default_instance_; -class GetMembersResponse; -class GetMembersResponseDefaultTypeInternal; -extern GetMembersResponseDefaultTypeInternal _GetMembersResponse_default_instance_; -class GetTxnTimestampCtx; -class GetTxnTimestampCtxDefaultTypeInternal; -extern GetTxnTimestampCtxDefaultTypeInternal _GetTxnTimestampCtx_default_instance_; -class Member; -class MemberDefaultTypeInternal; -extern MemberDefaultTypeInternal _Member_default_instance_; -class RequestHeader; -class RequestHeaderDefaultTypeInternal; -extern RequestHeaderDefaultTypeInternal _RequestHeader_default_instance_; -class ResponseHeader; -class ResponseHeaderDefaultTypeInternal; -extern ResponseHeaderDefaultTypeInternal _ResponseHeader_default_instance_; -class Status; -class StatusDefaultTypeInternal; -extern StatusDefaultTypeInternal _Status_default_instance_; -} // namespace ltsrpc -PROTOBUF_NAMESPACE_OPEN -template<> ::ltsrpc::Cluster* Arena::CreateMaybeMessage<::ltsrpc::Cluster>(Arena*); -template<> ::ltsrpc::GetMembersRequest* Arena::CreateMaybeMessage<::ltsrpc::GetMembersRequest>(Arena*); -template<> ::ltsrpc::GetMembersResponse* Arena::CreateMaybeMessage<::ltsrpc::GetMembersResponse>(Arena*); -template<> ::ltsrpc::GetTxnTimestampCtx* Arena::CreateMaybeMessage<::ltsrpc::GetTxnTimestampCtx>(Arena*); -template<> ::ltsrpc::Member* Arena::CreateMaybeMessage<::ltsrpc::Member>(Arena*); -template<> ::ltsrpc::RequestHeader* Arena::CreateMaybeMessage<::ltsrpc::RequestHeader>(Arena*); -template<> ::ltsrpc::ResponseHeader* Arena::CreateMaybeMessage<::ltsrpc::ResponseHeader>(Arena*); -template<> ::ltsrpc::Status* Arena::CreateMaybeMessage<::ltsrpc::Status>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -namespace ltsrpc { - -enum StatusCode : int { - SC_OK = 0, - SC_ERROR = 1, - SC_UNKNOWN = 2, - SC_NOT_LEADER = 3, - SC_NOT_EXISTS = 4, - SC_CANCEL = 5, - SC_RESOURCE_EXHAUSTED = 6, - SC_ABORTED = 7, - SC_LEADER_NOT_FOUND = 8, - StatusCode_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(), - StatusCode_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max() -}; -bool StatusCode_IsValid(int value); -constexpr StatusCode StatusCode_MIN = SC_OK; -constexpr StatusCode StatusCode_MAX = SC_LEADER_NOT_FOUND; -constexpr int StatusCode_ARRAYSIZE = StatusCode_MAX + 1; - -const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* StatusCode_descriptor(); -template -inline const std::string& StatusCode_Name(T enum_t_value) { - static_assert(::std::is_same::value || - ::std::is_integral::value, - "Incorrect type passed to function StatusCode_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - StatusCode_descriptor(), enum_t_value); -} -inline bool StatusCode_Parse( - const std::string& name, StatusCode* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum( - StatusCode_descriptor(), name, value); -} -// =================================================================== - -class Cluster : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.Cluster) */ { - public: - Cluster(); - virtual ~Cluster(); - - Cluster(const Cluster& from); - Cluster(Cluster&& from) noexcept - : Cluster() { - *this = ::std::move(from); - } - - inline Cluster& operator=(const Cluster& from) { - CopyFrom(from); - return *this; - } - inline Cluster& operator=(Cluster&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const Cluster& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const Cluster* internal_default_instance() { - return reinterpret_cast( - &_Cluster_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Cluster& a, Cluster& b) { - a.Swap(&b); - } - inline void Swap(Cluster* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline Cluster* New() const final { - return CreateMaybeMessage(nullptr); - } - - Cluster* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const Cluster& from); - void MergeFrom(const Cluster& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Cluster* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.Cluster"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kClusterIdFieldNumber = 1, - }; - // uint32 cluster_id = 1; - void clear_cluster_id(); - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id() const; - void set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value); - - // @@protoc_insertion_point(class_scope:ltsrpc.Cluster) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class Status : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.Status) */ { - public: - Status(); - virtual ~Status(); - - Status(const Status& from); - Status(Status&& from) noexcept - : Status() { - *this = ::std::move(from); - } - - inline Status& operator=(const Status& from) { - CopyFrom(from); - return *this; - } - inline Status& operator=(Status&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const Status& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const Status* internal_default_instance() { - return reinterpret_cast( - &_Status_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(Status& a, Status& b) { - a.Swap(&b); - } - inline void Swap(Status* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline Status* New() const final { - return CreateMaybeMessage(nullptr); - } - - Status* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const Status& from); - void MergeFrom(const Status& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Status* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.Status"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kMsgFieldNumber = 2, - kCodeFieldNumber = 1, - }; - // string msg = 2; - void clear_msg(); - const std::string& msg() const; - void set_msg(const std::string& value); - void set_msg(std::string&& value); - void set_msg(const char* value); - void set_msg(const char* value, size_t size); - std::string* mutable_msg(); - std::string* release_msg(); - void set_allocated_msg(std::string* msg); - - // .ltsrpc.StatusCode code = 1; - void clear_code(); - ::ltsrpc::StatusCode code() const; - void set_code(::ltsrpc::StatusCode value); - - // @@protoc_insertion_point(class_scope:ltsrpc.Status) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_; - int code_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class Member : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.Member) */ { - public: - Member(); - virtual ~Member(); - - Member(const Member& from); - Member(Member&& from) noexcept - : Member() { - *this = ::std::move(from); - } - - inline Member& operator=(const Member& from) { - CopyFrom(from); - return *this; - } - inline Member& operator=(Member&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const Member& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const Member* internal_default_instance() { - return reinterpret_cast( - &_Member_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(Member& a, Member& b) { - a.Swap(&b); - } - inline void Swap(Member* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline Member* New() const final { - return CreateMaybeMessage(nullptr); - } - - Member* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const Member& from); - void MergeFrom(const Member& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Member* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.Member"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kPeerUrlsFieldNumber = 3, - kClientUrlsFieldNumber = 4, - kNameFieldNumber = 2, - kMemberIdFieldNumber = 1, - kLeaderPriorityFieldNumber = 5, - }; - // repeated string peer_urls = 3; - int peer_urls_size() const; - void clear_peer_urls(); - const std::string& peer_urls(int index) const; - std::string* mutable_peer_urls(int index); - void set_peer_urls(int index, const std::string& value); - void set_peer_urls(int index, std::string&& value); - void set_peer_urls(int index, const char* value); - void set_peer_urls(int index, const char* value, size_t size); - std::string* add_peer_urls(); - void add_peer_urls(const std::string& value); - void add_peer_urls(std::string&& value); - void add_peer_urls(const char* value); - void add_peer_urls(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& peer_urls() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_peer_urls(); - - // repeated string client_urls = 4; - int client_urls_size() const; - void clear_client_urls(); - const std::string& client_urls(int index) const; - std::string* mutable_client_urls(int index); - void set_client_urls(int index, const std::string& value); - void set_client_urls(int index, std::string&& value); - void set_client_urls(int index, const char* value); - void set_client_urls(int index, const char* value, size_t size); - std::string* add_client_urls(); - void add_client_urls(const std::string& value); - void add_client_urls(std::string&& value); - void add_client_urls(const char* value); - void add_client_urls(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& client_urls() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_client_urls(); - - // string name = 2; - void clear_name(); - const std::string& name() const; - void set_name(const std::string& value); - void set_name(std::string&& value); - void set_name(const char* value); - void set_name(const char* value, size_t size); - std::string* mutable_name(); - std::string* release_name(); - void set_allocated_name(std::string* name); - - // uint64 member_id = 1; - void clear_member_id(); - ::PROTOBUF_NAMESPACE_ID::uint64 member_id() const; - void set_member_id(::PROTOBUF_NAMESPACE_ID::uint64 value); - - // int32 leader_priority = 5; - void clear_leader_priority(); - ::PROTOBUF_NAMESPACE_ID::int32 leader_priority() const; - void set_leader_priority(::PROTOBUF_NAMESPACE_ID::int32 value); - - // @@protoc_insertion_point(class_scope:ltsrpc.Member) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField peer_urls_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField client_urls_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::uint64 member_id_; - ::PROTOBUF_NAMESPACE_ID::int32 leader_priority_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class RequestHeader : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.RequestHeader) */ { - public: - RequestHeader(); - virtual ~RequestHeader(); - - RequestHeader(const RequestHeader& from); - RequestHeader(RequestHeader&& from) noexcept - : RequestHeader() { - *this = ::std::move(from); - } - - inline RequestHeader& operator=(const RequestHeader& from) { - CopyFrom(from); - return *this; - } - inline RequestHeader& operator=(RequestHeader&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const RequestHeader& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const RequestHeader* internal_default_instance() { - return reinterpret_cast( - &_RequestHeader_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(RequestHeader& a, RequestHeader& b) { - a.Swap(&b); - } - inline void Swap(RequestHeader* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline RequestHeader* New() const final { - return CreateMaybeMessage(nullptr); - } - - RequestHeader* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const RequestHeader& from); - void MergeFrom(const RequestHeader& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(RequestHeader* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.RequestHeader"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kClusterIdFieldNumber = 1, - }; - // uint32 cluster_id = 1; - void clear_cluster_id(); - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id() const; - void set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value); - - // @@protoc_insertion_point(class_scope:ltsrpc.RequestHeader) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class ResponseHeader : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.ResponseHeader) */ { - public: - ResponseHeader(); - virtual ~ResponseHeader(); - - ResponseHeader(const ResponseHeader& from); - ResponseHeader(ResponseHeader&& from) noexcept - : ResponseHeader() { - *this = ::std::move(from); - } - - inline ResponseHeader& operator=(const ResponseHeader& from) { - CopyFrom(from); - return *this; - } - inline ResponseHeader& operator=(ResponseHeader&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const ResponseHeader& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const ResponseHeader* internal_default_instance() { - return reinterpret_cast( - &_ResponseHeader_default_instance_); - } - static constexpr int kIndexInFileMessages = - 4; - - friend void swap(ResponseHeader& a, ResponseHeader& b) { - a.Swap(&b); - } - inline void Swap(ResponseHeader* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline ResponseHeader* New() const final { - return CreateMaybeMessage(nullptr); - } - - ResponseHeader* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const ResponseHeader& from); - void MergeFrom(const ResponseHeader& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(ResponseHeader* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.ResponseHeader"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kStatusFieldNumber = 2, - kClusterIdFieldNumber = 1, - }; - // .ltsrpc.Status status = 2; - bool has_status() const; - void clear_status(); - const ::ltsrpc::Status& status() const; - ::ltsrpc::Status* release_status(); - ::ltsrpc::Status* mutable_status(); - void set_allocated_status(::ltsrpc::Status* status); - - // uint32 cluster_id = 1; - void clear_cluster_id(); - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id() const; - void set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value); - - // @@protoc_insertion_point(class_scope:ltsrpc.ResponseHeader) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::ltsrpc::Status* status_; - ::PROTOBUF_NAMESPACE_ID::uint32 cluster_id_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class GetMembersRequest : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.GetMembersRequest) */ { - public: - GetMembersRequest(); - virtual ~GetMembersRequest(); - - GetMembersRequest(const GetMembersRequest& from); - GetMembersRequest(GetMembersRequest&& from) noexcept - : GetMembersRequest() { - *this = ::std::move(from); - } - - inline GetMembersRequest& operator=(const GetMembersRequest& from) { - CopyFrom(from); - return *this; - } - inline GetMembersRequest& operator=(GetMembersRequest&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const GetMembersRequest& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const GetMembersRequest* internal_default_instance() { - return reinterpret_cast( - &_GetMembersRequest_default_instance_); - } - static constexpr int kIndexInFileMessages = - 5; - - friend void swap(GetMembersRequest& a, GetMembersRequest& b) { - a.Swap(&b); - } - inline void Swap(GetMembersRequest* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline GetMembersRequest* New() const final { - return CreateMaybeMessage(nullptr); - } - - GetMembersRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const GetMembersRequest& from); - void MergeFrom(const GetMembersRequest& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(GetMembersRequest* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.GetMembersRequest"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kHeaderFieldNumber = 1, - }; - // .ltsrpc.RequestHeader header = 1; - bool has_header() const; - void clear_header(); - const ::ltsrpc::RequestHeader& header() const; - ::ltsrpc::RequestHeader* release_header(); - ::ltsrpc::RequestHeader* mutable_header(); - void set_allocated_header(::ltsrpc::RequestHeader* header); - - // @@protoc_insertion_point(class_scope:ltsrpc.GetMembersRequest) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::ltsrpc::RequestHeader* header_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class GetMembersResponse : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.GetMembersResponse) */ { - public: - GetMembersResponse(); - virtual ~GetMembersResponse(); - - GetMembersResponse(const GetMembersResponse& from); - GetMembersResponse(GetMembersResponse&& from) noexcept - : GetMembersResponse() { - *this = ::std::move(from); - } - - inline GetMembersResponse& operator=(const GetMembersResponse& from) { - CopyFrom(from); - return *this; - } - inline GetMembersResponse& operator=(GetMembersResponse&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const GetMembersResponse& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const GetMembersResponse* internal_default_instance() { - return reinterpret_cast( - &_GetMembersResponse_default_instance_); - } - static constexpr int kIndexInFileMessages = - 6; - - friend void swap(GetMembersResponse& a, GetMembersResponse& b) { - a.Swap(&b); - } - inline void Swap(GetMembersResponse* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline GetMembersResponse* New() const final { - return CreateMaybeMessage(nullptr); - } - - GetMembersResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const GetMembersResponse& from); - void MergeFrom(const GetMembersResponse& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(GetMembersResponse* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.GetMembersResponse"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kMembersFieldNumber = 2, - kHeaderFieldNumber = 1, - kLeaderFieldNumber = 3, - kEtcdLeaderFieldNumber = 4, - }; - // repeated .ltsrpc.Member members = 2; - int members_size() const; - void clear_members(); - ::ltsrpc::Member* mutable_members(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ltsrpc::Member >* - mutable_members(); - const ::ltsrpc::Member& members(int index) const; - ::ltsrpc::Member* add_members(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ltsrpc::Member >& - members() const; - - // .ltsrpc.ResponseHeader header = 1; - bool has_header() const; - void clear_header(); - const ::ltsrpc::ResponseHeader& header() const; - ::ltsrpc::ResponseHeader* release_header(); - ::ltsrpc::ResponseHeader* mutable_header(); - void set_allocated_header(::ltsrpc::ResponseHeader* header); - - // .ltsrpc.Member leader = 3; - bool has_leader() const; - void clear_leader(); - const ::ltsrpc::Member& leader() const; - ::ltsrpc::Member* release_leader(); - ::ltsrpc::Member* mutable_leader(); - void set_allocated_leader(::ltsrpc::Member* leader); - - // .ltsrpc.Member etcd_leader = 4; - bool has_etcd_leader() const; - void clear_etcd_leader(); - const ::ltsrpc::Member& etcd_leader() const; - ::ltsrpc::Member* release_etcd_leader(); - ::ltsrpc::Member* mutable_etcd_leader(); - void set_allocated_etcd_leader(::ltsrpc::Member* etcd_leader); - - // @@protoc_insertion_point(class_scope:ltsrpc.GetMembersResponse) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ltsrpc::Member > members_; - ::ltsrpc::ResponseHeader* header_; - ::ltsrpc::Member* leader_; - ::ltsrpc::Member* etcd_leader_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// ------------------------------------------------------------------- - -class GetTxnTimestampCtx : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ltsrpc.GetTxnTimestampCtx) */ { - public: - GetTxnTimestampCtx(); - virtual ~GetTxnTimestampCtx(); - - GetTxnTimestampCtx(const GetTxnTimestampCtx& from); - GetTxnTimestampCtx(GetTxnTimestampCtx&& from) noexcept - : GetTxnTimestampCtx() { - *this = ::std::move(from); - } - - inline GetTxnTimestampCtx& operator=(const GetTxnTimestampCtx& from) { - CopyFrom(from); - return *this; - } - inline GetTxnTimestampCtx& operator=(GetTxnTimestampCtx&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const GetTxnTimestampCtx& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const GetTxnTimestampCtx* internal_default_instance() { - return reinterpret_cast( - &_GetTxnTimestampCtx_default_instance_); - } - static constexpr int kIndexInFileMessages = - 7; - - friend void swap(GetTxnTimestampCtx& a, GetTxnTimestampCtx& b) { - a.Swap(&b); - } - inline void Swap(GetTxnTimestampCtx* other) { - if (other == this) return; - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline GetTxnTimestampCtx* New() const final { - return CreateMaybeMessage(nullptr); - } - - GetTxnTimestampCtx* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const GetTxnTimestampCtx& from); - void MergeFrom(const GetTxnTimestampCtx& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - #else - bool MergePartialFromCodedStream( - ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final; - ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray( - ::PROTOBUF_NAMESPACE_ID::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(GetTxnTimestampCtx* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "ltsrpc.GetTxnTimestampCtx"; - } - private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ltsrpc_2eproto); - return ::descriptor_table_ltsrpc_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kTxnIdFieldNumber = 1, - kTxnTsFieldNumber = 2, - }; - // uint64 txn_id = 1; - void clear_txn_id(); - ::PROTOBUF_NAMESPACE_ID::uint64 txn_id() const; - void set_txn_id(::PROTOBUF_NAMESPACE_ID::uint64 value); - - // uint64 txn_ts = 2; - void clear_txn_ts(); - ::PROTOBUF_NAMESPACE_ID::uint64 txn_ts() const; - void set_txn_ts(::PROTOBUF_NAMESPACE_ID::uint64 value); - - // @@protoc_insertion_point(class_scope:ltsrpc.GetTxnTimestampCtx) - private: - class _Internal; - - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::uint64 txn_id_; - ::PROTOBUF_NAMESPACE_ID::uint64 txn_ts_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_ltsrpc_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Cluster - -// uint32 cluster_id = 1; -inline void Cluster::clear_cluster_id() { - cluster_id_ = 0u; -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 Cluster::cluster_id() const { - // @@protoc_insertion_point(field_get:ltsrpc.Cluster.cluster_id) - return cluster_id_; -} -inline void Cluster::set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value) { - - cluster_id_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.Cluster.cluster_id) -} - -// ------------------------------------------------------------------- - -// Status - -// .ltsrpc.StatusCode code = 1; -inline void Status::clear_code() { - code_ = 0; -} -inline ::ltsrpc::StatusCode Status::code() const { - // @@protoc_insertion_point(field_get:ltsrpc.Status.code) - return static_cast< ::ltsrpc::StatusCode >(code_); -} -inline void Status::set_code(::ltsrpc::StatusCode value) { - - code_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.Status.code) -} - -// string msg = 2; -inline void Status::clear_msg() { - msg_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline const std::string& Status::msg() const { - // @@protoc_insertion_point(field_get:ltsrpc.Status.msg) - return msg_.GetNoArena(); -} -inline void Status::set_msg(const std::string& value) { - - msg_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:ltsrpc.Status.msg) -} -inline void Status::set_msg(std::string&& value) { - - msg_.SetNoArena( - &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:ltsrpc.Status.msg) -} -inline void Status::set_msg(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - msg_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:ltsrpc.Status.msg) -} -inline void Status::set_msg(const char* value, size_t size) { - - msg_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:ltsrpc.Status.msg) -} -inline std::string* Status::mutable_msg() { - - // @@protoc_insertion_point(field_mutable:ltsrpc.Status.msg) - return msg_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline std::string* Status::release_msg() { - // @@protoc_insertion_point(field_release:ltsrpc.Status.msg) - - return msg_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline void Status::set_allocated_msg(std::string* msg) { - if (msg != nullptr) { - - } else { - - } - msg_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), msg); - // @@protoc_insertion_point(field_set_allocated:ltsrpc.Status.msg) -} - -// ------------------------------------------------------------------- - -// Member - -// uint64 member_id = 1; -inline void Member::clear_member_id() { - member_id_ = PROTOBUF_ULONGLONG(0); -} -inline ::PROTOBUF_NAMESPACE_ID::uint64 Member::member_id() const { - // @@protoc_insertion_point(field_get:ltsrpc.Member.member_id) - return member_id_; -} -inline void Member::set_member_id(::PROTOBUF_NAMESPACE_ID::uint64 value) { - - member_id_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.Member.member_id) -} - -// string name = 2; -inline void Member::clear_name() { - name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline const std::string& Member::name() const { - // @@protoc_insertion_point(field_get:ltsrpc.Member.name) - return name_.GetNoArena(); -} -inline void Member::set_name(const std::string& value) { - - name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:ltsrpc.Member.name) -} -inline void Member::set_name(std::string&& value) { - - name_.SetNoArena( - &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:ltsrpc.Member.name) -} -inline void Member::set_name(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:ltsrpc.Member.name) -} -inline void Member::set_name(const char* value, size_t size) { - - name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:ltsrpc.Member.name) -} -inline std::string* Member::mutable_name() { - - // @@protoc_insertion_point(field_mutable:ltsrpc.Member.name) - return name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline std::string* Member::release_name() { - // @@protoc_insertion_point(field_release:ltsrpc.Member.name) - - return name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); -} -inline void Member::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name); - // @@protoc_insertion_point(field_set_allocated:ltsrpc.Member.name) -} - -// repeated string peer_urls = 3; -inline int Member::peer_urls_size() const { - return peer_urls_.size(); -} -inline void Member::clear_peer_urls() { - peer_urls_.Clear(); -} -inline const std::string& Member::peer_urls(int index) const { - // @@protoc_insertion_point(field_get:ltsrpc.Member.peer_urls) - return peer_urls_.Get(index); -} -inline std::string* Member::mutable_peer_urls(int index) { - // @@protoc_insertion_point(field_mutable:ltsrpc.Member.peer_urls) - return peer_urls_.Mutable(index); -} -inline void Member::set_peer_urls(int index, const std::string& value) { - // @@protoc_insertion_point(field_set:ltsrpc.Member.peer_urls) - peer_urls_.Mutable(index)->assign(value); -} -inline void Member::set_peer_urls(int index, std::string&& value) { - // @@protoc_insertion_point(field_set:ltsrpc.Member.peer_urls) - peer_urls_.Mutable(index)->assign(std::move(value)); -} -inline void Member::set_peer_urls(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - peer_urls_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:ltsrpc.Member.peer_urls) -} -inline void Member::set_peer_urls(int index, const char* value, size_t size) { - peer_urls_.Mutable(index)->assign( - reinterpret_cast(value), size); - // @@protoc_insertion_point(field_set_pointer:ltsrpc.Member.peer_urls) -} -inline std::string* Member::add_peer_urls() { - // @@protoc_insertion_point(field_add_mutable:ltsrpc.Member.peer_urls) - return peer_urls_.Add(); -} -inline void Member::add_peer_urls(const std::string& value) { - peer_urls_.Add()->assign(value); - // @@protoc_insertion_point(field_add:ltsrpc.Member.peer_urls) -} -inline void Member::add_peer_urls(std::string&& value) { - peer_urls_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:ltsrpc.Member.peer_urls) -} -inline void Member::add_peer_urls(const char* value) { - GOOGLE_DCHECK(value != nullptr); - peer_urls_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:ltsrpc.Member.peer_urls) -} -inline void Member::add_peer_urls(const char* value, size_t size) { - peer_urls_.Add()->assign(reinterpret_cast(value), size); - // @@protoc_insertion_point(field_add_pointer:ltsrpc.Member.peer_urls) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& -Member::peer_urls() const { - // @@protoc_insertion_point(field_list:ltsrpc.Member.peer_urls) - return peer_urls_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* -Member::mutable_peer_urls() { - // @@protoc_insertion_point(field_mutable_list:ltsrpc.Member.peer_urls) - return &peer_urls_; -} - -// repeated string client_urls = 4; -inline int Member::client_urls_size() const { - return client_urls_.size(); -} -inline void Member::clear_client_urls() { - client_urls_.Clear(); -} -inline const std::string& Member::client_urls(int index) const { - // @@protoc_insertion_point(field_get:ltsrpc.Member.client_urls) - return client_urls_.Get(index); -} -inline std::string* Member::mutable_client_urls(int index) { - // @@protoc_insertion_point(field_mutable:ltsrpc.Member.client_urls) - return client_urls_.Mutable(index); -} -inline void Member::set_client_urls(int index, const std::string& value) { - // @@protoc_insertion_point(field_set:ltsrpc.Member.client_urls) - client_urls_.Mutable(index)->assign(value); -} -inline void Member::set_client_urls(int index, std::string&& value) { - // @@protoc_insertion_point(field_set:ltsrpc.Member.client_urls) - client_urls_.Mutable(index)->assign(std::move(value)); -} -inline void Member::set_client_urls(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - client_urls_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:ltsrpc.Member.client_urls) -} -inline void Member::set_client_urls(int index, const char* value, size_t size) { - client_urls_.Mutable(index)->assign( - reinterpret_cast(value), size); - // @@protoc_insertion_point(field_set_pointer:ltsrpc.Member.client_urls) -} -inline std::string* Member::add_client_urls() { - // @@protoc_insertion_point(field_add_mutable:ltsrpc.Member.client_urls) - return client_urls_.Add(); -} -inline void Member::add_client_urls(const std::string& value) { - client_urls_.Add()->assign(value); - // @@protoc_insertion_point(field_add:ltsrpc.Member.client_urls) -} -inline void Member::add_client_urls(std::string&& value) { - client_urls_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:ltsrpc.Member.client_urls) -} -inline void Member::add_client_urls(const char* value) { - GOOGLE_DCHECK(value != nullptr); - client_urls_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:ltsrpc.Member.client_urls) -} -inline void Member::add_client_urls(const char* value, size_t size) { - client_urls_.Add()->assign(reinterpret_cast(value), size); - // @@protoc_insertion_point(field_add_pointer:ltsrpc.Member.client_urls) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& -Member::client_urls() const { - // @@protoc_insertion_point(field_list:ltsrpc.Member.client_urls) - return client_urls_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* -Member::mutable_client_urls() { - // @@protoc_insertion_point(field_mutable_list:ltsrpc.Member.client_urls) - return &client_urls_; -} - -// int32 leader_priority = 5; -inline void Member::clear_leader_priority() { - leader_priority_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::int32 Member::leader_priority() const { - // @@protoc_insertion_point(field_get:ltsrpc.Member.leader_priority) - return leader_priority_; -} -inline void Member::set_leader_priority(::PROTOBUF_NAMESPACE_ID::int32 value) { - - leader_priority_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.Member.leader_priority) -} - -// ------------------------------------------------------------------- - -// RequestHeader - -// uint32 cluster_id = 1; -inline void RequestHeader::clear_cluster_id() { - cluster_id_ = 0u; -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 RequestHeader::cluster_id() const { - // @@protoc_insertion_point(field_get:ltsrpc.RequestHeader.cluster_id) - return cluster_id_; -} -inline void RequestHeader::set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value) { - - cluster_id_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.RequestHeader.cluster_id) -} - -// ------------------------------------------------------------------- - -// ResponseHeader - -// uint32 cluster_id = 1; -inline void ResponseHeader::clear_cluster_id() { - cluster_id_ = 0u; -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 ResponseHeader::cluster_id() const { - // @@protoc_insertion_point(field_get:ltsrpc.ResponseHeader.cluster_id) - return cluster_id_; -} -inline void ResponseHeader::set_cluster_id(::PROTOBUF_NAMESPACE_ID::uint32 value) { - - cluster_id_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.ResponseHeader.cluster_id) -} - -// .ltsrpc.Status status = 2; -inline bool ResponseHeader::has_status() const { - return this != internal_default_instance() && status_ != nullptr; -} -inline void ResponseHeader::clear_status() { - if (GetArenaNoVirtual() == nullptr && status_ != nullptr) { - delete status_; - } - status_ = nullptr; -} -inline const ::ltsrpc::Status& ResponseHeader::status() const { - const ::ltsrpc::Status* p = status_; - // @@protoc_insertion_point(field_get:ltsrpc.ResponseHeader.status) - return p != nullptr ? *p : *reinterpret_cast( - &::ltsrpc::_Status_default_instance_); -} -inline ::ltsrpc::Status* ResponseHeader::release_status() { - // @@protoc_insertion_point(field_release:ltsrpc.ResponseHeader.status) - - ::ltsrpc::Status* temp = status_; - status_ = nullptr; - return temp; -} -inline ::ltsrpc::Status* ResponseHeader::mutable_status() { - - if (status_ == nullptr) { - auto* p = CreateMaybeMessage<::ltsrpc::Status>(GetArenaNoVirtual()); - status_ = p; - } - // @@protoc_insertion_point(field_mutable:ltsrpc.ResponseHeader.status) - return status_; -} -inline void ResponseHeader::set_allocated_status(::ltsrpc::Status* status) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete status_; - } - if (status) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - status = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, status, submessage_arena); - } - - } else { - - } - status_ = status; - // @@protoc_insertion_point(field_set_allocated:ltsrpc.ResponseHeader.status) -} - -// ------------------------------------------------------------------- - -// GetMembersRequest - -// .ltsrpc.RequestHeader header = 1; -inline bool GetMembersRequest::has_header() const { - return this != internal_default_instance() && header_ != nullptr; -} -inline void GetMembersRequest::clear_header() { - if (GetArenaNoVirtual() == nullptr && header_ != nullptr) { - delete header_; - } - header_ = nullptr; -} -inline const ::ltsrpc::RequestHeader& GetMembersRequest::header() const { - const ::ltsrpc::RequestHeader* p = header_; - // @@protoc_insertion_point(field_get:ltsrpc.GetMembersRequest.header) - return p != nullptr ? *p : *reinterpret_cast( - &::ltsrpc::_RequestHeader_default_instance_); -} -inline ::ltsrpc::RequestHeader* GetMembersRequest::release_header() { - // @@protoc_insertion_point(field_release:ltsrpc.GetMembersRequest.header) - - ::ltsrpc::RequestHeader* temp = header_; - header_ = nullptr; - return temp; -} -inline ::ltsrpc::RequestHeader* GetMembersRequest::mutable_header() { - - if (header_ == nullptr) { - auto* p = CreateMaybeMessage<::ltsrpc::RequestHeader>(GetArenaNoVirtual()); - header_ = p; - } - // @@protoc_insertion_point(field_mutable:ltsrpc.GetMembersRequest.header) - return header_; -} -inline void GetMembersRequest::set_allocated_header(::ltsrpc::RequestHeader* header) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete header_; - } - if (header) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - header = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, header, submessage_arena); - } - - } else { - - } - header_ = header; - // @@protoc_insertion_point(field_set_allocated:ltsrpc.GetMembersRequest.header) -} - -// ------------------------------------------------------------------- - -// GetMembersResponse - -// .ltsrpc.ResponseHeader header = 1; -inline bool GetMembersResponse::has_header() const { - return this != internal_default_instance() && header_ != nullptr; -} -inline void GetMembersResponse::clear_header() { - if (GetArenaNoVirtual() == nullptr && header_ != nullptr) { - delete header_; - } - header_ = nullptr; -} -inline const ::ltsrpc::ResponseHeader& GetMembersResponse::header() const { - const ::ltsrpc::ResponseHeader* p = header_; - // @@protoc_insertion_point(field_get:ltsrpc.GetMembersResponse.header) - return p != nullptr ? *p : *reinterpret_cast( - &::ltsrpc::_ResponseHeader_default_instance_); -} -inline ::ltsrpc::ResponseHeader* GetMembersResponse::release_header() { - // @@protoc_insertion_point(field_release:ltsrpc.GetMembersResponse.header) - - ::ltsrpc::ResponseHeader* temp = header_; - header_ = nullptr; - return temp; -} -inline ::ltsrpc::ResponseHeader* GetMembersResponse::mutable_header() { - - if (header_ == nullptr) { - auto* p = CreateMaybeMessage<::ltsrpc::ResponseHeader>(GetArenaNoVirtual()); - header_ = p; - } - // @@protoc_insertion_point(field_mutable:ltsrpc.GetMembersResponse.header) - return header_; -} -inline void GetMembersResponse::set_allocated_header(::ltsrpc::ResponseHeader* header) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete header_; - } - if (header) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - header = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, header, submessage_arena); - } - - } else { - - } - header_ = header; - // @@protoc_insertion_point(field_set_allocated:ltsrpc.GetMembersResponse.header) -} - -// repeated .ltsrpc.Member members = 2; -inline int GetMembersResponse::members_size() const { - return members_.size(); -} -inline void GetMembersResponse::clear_members() { - members_.Clear(); -} -inline ::ltsrpc::Member* GetMembersResponse::mutable_members(int index) { - // @@protoc_insertion_point(field_mutable:ltsrpc.GetMembersResponse.members) - return members_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ltsrpc::Member >* -GetMembersResponse::mutable_members() { - // @@protoc_insertion_point(field_mutable_list:ltsrpc.GetMembersResponse.members) - return &members_; -} -inline const ::ltsrpc::Member& GetMembersResponse::members(int index) const { - // @@protoc_insertion_point(field_get:ltsrpc.GetMembersResponse.members) - return members_.Get(index); -} -inline ::ltsrpc::Member* GetMembersResponse::add_members() { - // @@protoc_insertion_point(field_add:ltsrpc.GetMembersResponse.members) - return members_.Add(); -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ltsrpc::Member >& -GetMembersResponse::members() const { - // @@protoc_insertion_point(field_list:ltsrpc.GetMembersResponse.members) - return members_; -} - -// .ltsrpc.Member leader = 3; -inline bool GetMembersResponse::has_leader() const { - return this != internal_default_instance() && leader_ != nullptr; -} -inline void GetMembersResponse::clear_leader() { - if (GetArenaNoVirtual() == nullptr && leader_ != nullptr) { - delete leader_; - } - leader_ = nullptr; -} -inline const ::ltsrpc::Member& GetMembersResponse::leader() const { - const ::ltsrpc::Member* p = leader_; - // @@protoc_insertion_point(field_get:ltsrpc.GetMembersResponse.leader) - return p != nullptr ? *p : *reinterpret_cast( - &::ltsrpc::_Member_default_instance_); -} -inline ::ltsrpc::Member* GetMembersResponse::release_leader() { - // @@protoc_insertion_point(field_release:ltsrpc.GetMembersResponse.leader) - - ::ltsrpc::Member* temp = leader_; - leader_ = nullptr; - return temp; -} -inline ::ltsrpc::Member* GetMembersResponse::mutable_leader() { - - if (leader_ == nullptr) { - auto* p = CreateMaybeMessage<::ltsrpc::Member>(GetArenaNoVirtual()); - leader_ = p; - } - // @@protoc_insertion_point(field_mutable:ltsrpc.GetMembersResponse.leader) - return leader_; -} -inline void GetMembersResponse::set_allocated_leader(::ltsrpc::Member* leader) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete leader_; - } - if (leader) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - leader = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, leader, submessage_arena); - } - - } else { - - } - leader_ = leader; - // @@protoc_insertion_point(field_set_allocated:ltsrpc.GetMembersResponse.leader) -} - -// .ltsrpc.Member etcd_leader = 4; -inline bool GetMembersResponse::has_etcd_leader() const { - return this != internal_default_instance() && etcd_leader_ != nullptr; -} -inline void GetMembersResponse::clear_etcd_leader() { - if (GetArenaNoVirtual() == nullptr && etcd_leader_ != nullptr) { - delete etcd_leader_; - } - etcd_leader_ = nullptr; -} -inline const ::ltsrpc::Member& GetMembersResponse::etcd_leader() const { - const ::ltsrpc::Member* p = etcd_leader_; - // @@protoc_insertion_point(field_get:ltsrpc.GetMembersResponse.etcd_leader) - return p != nullptr ? *p : *reinterpret_cast( - &::ltsrpc::_Member_default_instance_); -} -inline ::ltsrpc::Member* GetMembersResponse::release_etcd_leader() { - // @@protoc_insertion_point(field_release:ltsrpc.GetMembersResponse.etcd_leader) - - ::ltsrpc::Member* temp = etcd_leader_; - etcd_leader_ = nullptr; - return temp; -} -inline ::ltsrpc::Member* GetMembersResponse::mutable_etcd_leader() { - - if (etcd_leader_ == nullptr) { - auto* p = CreateMaybeMessage<::ltsrpc::Member>(GetArenaNoVirtual()); - etcd_leader_ = p; - } - // @@protoc_insertion_point(field_mutable:ltsrpc.GetMembersResponse.etcd_leader) - return etcd_leader_; -} -inline void GetMembersResponse::set_allocated_etcd_leader(::ltsrpc::Member* etcd_leader) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete etcd_leader_; - } - if (etcd_leader) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - etcd_leader = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, etcd_leader, submessage_arena); - } - - } else { - - } - etcd_leader_ = etcd_leader; - // @@protoc_insertion_point(field_set_allocated:ltsrpc.GetMembersResponse.etcd_leader) -} - -// ------------------------------------------------------------------- - -// GetTxnTimestampCtx - -// uint64 txn_id = 1; -inline void GetTxnTimestampCtx::clear_txn_id() { - txn_id_ = PROTOBUF_ULONGLONG(0); -} -inline ::PROTOBUF_NAMESPACE_ID::uint64 GetTxnTimestampCtx::txn_id() const { - // @@protoc_insertion_point(field_get:ltsrpc.GetTxnTimestampCtx.txn_id) - return txn_id_; -} -inline void GetTxnTimestampCtx::set_txn_id(::PROTOBUF_NAMESPACE_ID::uint64 value) { - - txn_id_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.GetTxnTimestampCtx.txn_id) -} - -// uint64 txn_ts = 2; -inline void GetTxnTimestampCtx::clear_txn_ts() { - txn_ts_ = PROTOBUF_ULONGLONG(0); -} -inline ::PROTOBUF_NAMESPACE_ID::uint64 GetTxnTimestampCtx::txn_ts() const { - // @@protoc_insertion_point(field_get:ltsrpc.GetTxnTimestampCtx.txn_ts) - return txn_ts_; -} -inline void GetTxnTimestampCtx::set_txn_ts(::PROTOBUF_NAMESPACE_ID::uint64 value) { - - txn_ts_ = value; - // @@protoc_insertion_point(field_set:ltsrpc.GetTxnTimestampCtx.txn_ts) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -} // namespace ltsrpc - -PROTOBUF_NAMESPACE_OPEN - -template <> struct is_proto_enum< ::ltsrpc::StatusCode> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::ltsrpc::StatusCode>() { - return ::ltsrpc::StatusCode_descriptor(); -} - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_ltsrpc_2eproto diff --git a/contrib/deneva/system/ltsrpc.proto b/contrib/deneva/system/ltsrpc.proto deleted file mode 100644 index 2af7a904..00000000 --- a/contrib/deneva/system/ltsrpc.proto +++ /dev/null @@ -1,77 +0,0 @@ -/* Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: hongyaozhao@ruc.edu.cn - * - */ -syntax = "proto3"; - -package ltsrpc; - -service LTS { - rpc GetTxnTimestamp(GetTxnTimestampCtx) returns(GetTxnTimestampCtx) {} - rpc GetMembers(GetMembersRequest) returns (GetMembersResponse) {} -} - -// Common -enum StatusCode { - SC_OK = 0; - SC_ERROR = 1; - SC_UNKNOWN = 2; - SC_NOT_LEADER = 3; - SC_NOT_EXISTS = 4; - SC_CANCEL = 5; - SC_RESOURCE_EXHAUSTED = 6; - SC_ABORTED = 7; - SC_LEADER_NOT_FOUND = 8; -} - -message Cluster { - uint32 cluster_id = 1; -} - -// Code and description -message Status { - StatusCode code = 1; - string msg = 2; -} - -// Cluster member information -message Member { - uint64 member_id = 1; - string name = 2; - repeated string peer_urls = 3; - repeated string client_urls = 4; - int32 leader_priority = 5; -} - -message RequestHeader { - uint32 cluster_id = 1; -} - -message ResponseHeader { - uint32 cluster_id = 1; - Status status = 2; -} - -// Cluster member RPC -message GetMembersRequest { - RequestHeader header = 1; -} - -message GetMembersResponse { - ResponseHeader header = 1; - repeated Member members = 2; - Member leader = 3; - Member etcd_leader = 4; -} - -// For txn timestamp request/response -message GetTxnTimestampCtx { - uint64 txn_id = 1; - uint64 txn_ts = 2; -} - diff --git a/contrib/deneva/system/main.cpp b/contrib/deneva/system/main.cpp deleted file mode 100644 index 4e987004..00000000 --- a/contrib/deneva/system/main.cpp +++ /dev/null @@ -1,412 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "abort_thread.h" -#include "calvin_thread.h" -#include "client_query.h" -#include "global.h" -#include "io_thread.h" -#include "log_thread.h" -#include "logger.h" -#include "maat.h" -#include "manager.h" -#include "math.h" -#include "msg_queue.h" -#include "occ.h" -#include "pps.h" -#include "query.h" -#include "sequencer.h" -#include "sim_manager.h" -#include "abort_queue.h" -#include "thread.h" -#include "tpcc.h" -#include "transport.h" -#include "work_queue.h" -#include "worker_thread.h" -#include "ycsb.h" -#include "ycsb_query.h" -#include "da.h" -#include "maat.h" -#include "ssi.h" -#include "wsi.h" -#include "focc.h" -#include "bocc.h" -#include "client_query.h" -#include "sundial.h" -#include "http.h" - -void network_test(); -void network_test_recv(); -void * run_thread(void *); - -WorkerThread * worker_thds; -WorkerNumThread * worker_num_thds; -InputThread * input_thds; -OutputThread * output_thds; -AbortThread * abort_thds; -LogThread * log_thds; -#if CC_ALG == CALVIN -CalvinLockThread * calvin_lock_thds; -CalvinSequencerThread * calvin_seq_thds; -#endif - -// defined in parser.cpp -void parser(int argc, char * argv[]); - -int main(int argc, char *argv[]) { - // 0. initialize global data structure - parser(argc, argv); -#if SEED != 0 - uint64_t seed = SEED + g_node_id; -#else - uint64_t seed = get_sys_clock(); -#endif - srand(seed); - printf("Random seed: %ld\n",seed); - - int64_t starttime; - int64_t endtime; - starttime = get_server_clock(); - printf("Initializing stats... "); - fflush(stdout); - stats.init(g_total_thread_cnt); - printf("Done\n"); - - printf("Initializing global manager... "); - fflush(stdout); - glob_manager.init(); - printf("Done\n"); - printf("Initializing transport manager... "); - fflush(stdout); - tport_man.init(); - printf("Done\n"); - fflush(stdout); - printf("Initializing simulation... "); - fflush(stdout); - simulation = new SimManager; - simulation->init(); - printf("Done\n"); - fflush(stdout); - Workload * m_wl; - switch (WORKLOAD) { - case YCSB : - m_wl = new YCSBWorkload; - break; - case TPCC : - m_wl = new TPCCWorkload; - break; - case PPS : - m_wl = new PPSWorkload; - break; - case DA: - m_wl = new DAWorkload; - is_server=true; - break; - default: - assert(false); - } - m_wl->init(); - printf("Workload initialized!\n"); - fflush(stdout); -#if NETWORK_TEST - tport_man.init(g_node_id,m_wl); - sleep(3); - if(g_node_id == 0) - network_test(); - else if(g_node_id == 1) - network_test_recv(); - - return 0; -#endif - - - printf("Initializing work queue... "); - fflush(stdout); - work_queue.init(); - printf("Done\n"); - printf("Initializing abort queue... "); - fflush(stdout); - abort_queue.init(); - printf("Done\n"); - printf("Initializing message queue... "); - fflush(stdout); - msg_queue.init(); - printf("Done\n"); - printf("Initializing transaction manager pool... "); - fflush(stdout); - txn_man_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing transaction pool... "); - fflush(stdout); - txn_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing row pool... "); - fflush(stdout); - row_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing access pool... "); - fflush(stdout); - access_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing txn node table pool... "); - fflush(stdout); - txn_table_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing query pool... "); - fflush(stdout); - qry_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing msg pool... "); - fflush(stdout); - msg_pool.init(m_wl,0); - printf("Done\n"); - printf("Initializing transaction table... "); - fflush(stdout); - txn_table.init(); - printf("Done\n"); -#if CC_ALG == CALVIN - printf("Initializing sequencer... "); - fflush(stdout); - seq_man.init(m_wl); - printf("Done\n"); -#endif -#if CC_ALG == MAAT - printf("Initializing Time Table... "); - fflush(stdout); - time_table.init(); - printf("Done\n"); - printf("Initializing MaaT manager... "); - fflush(stdout); - maat_man.init(); - printf("Done\n"); -#endif -#if CC_ALG == SSI - printf("Initializing In Out Table... "); - fflush(stdout); - inout_table.init(); - printf("Done\n"); - printf("Initializing SSI manager... "); - fflush(stdout); - ssi_man.init(); - printf("Done\n"); -#endif -#if CC_ALG == WSI - printf("Initializing WSI manager... "); - fflush(stdout); - wsi_man.init(); - printf("Done\n"); -#endif -#if CC_ALG == SUNDIAL - printf("Initializing MaaT manager... "); - fflush(stdout); - sundial_man.init(); - printf("Done\n"); -#endif -#if LOGGING - printf("Initializing logger... "); - fflush(stdout); - logger.init("logfile.log"); - printf("Done\n"); -#endif - -#if SERVER_GENERATE_QUERIES - printf("Initializing client query queue... "); - fflush(stdout); - client_query_queue.init(m_wl); - printf("Done\n"); - fflush(stdout); -#endif - -#if WORKLOAD==DA - commit_file.open("commit_histroy.txt",ios::app); - abort_file.open("abort_histroy.txt",ios::app); -#endif - - // 2. spawn multiple threads - uint64_t thd_cnt = g_thread_cnt; - uint64_t wthd_cnt = thd_cnt; - uint64_t rthd_cnt = g_rem_thread_cnt; - uint64_t sthd_cnt = g_send_thread_cnt; - uint64_t all_thd_cnt = thd_cnt + rthd_cnt + sthd_cnt + g_abort_thread_cnt + 1; -#if LOGGING - all_thd_cnt += 1; // logger thread -#endif -#if CC_ALG == CALVIN - all_thd_cnt += 2; // sequencer + scheduler thread -#endif - - if (g_ts_alloc == LTS_TCP_CLOCK) { - printf("Initializing tcp queue... "); - fflush(stdout); - tcp_ts.init(all_thd_cnt); - printf("Done\n"); - } - - printf("%ld, %ld, %ld, %d \n", thd_cnt, rthd_cnt, sthd_cnt, g_abort_thread_cnt); - printf("all_thd_cnt: %ld, g_this_total_thread_cnt: %d \n", all_thd_cnt, g_this_total_thread_cnt); - fflush(stdout); - assert(all_thd_cnt == g_this_total_thread_cnt); - - pthread_t *p_thds = (pthread_t *)malloc(sizeof(pthread_t) * (all_thd_cnt)); - pthread_attr_t attr; - pthread_attr_init(&attr); - - worker_thds = new WorkerThread[wthd_cnt]; - worker_num_thds = new WorkerNumThread[1]; - input_thds = new InputThread[rthd_cnt]; - output_thds = new OutputThread[sthd_cnt]; - abort_thds = new AbortThread[1]; - log_thds = new LogThread[1]; -#if CC_ALG == CALVIN - calvin_lock_thds = new CalvinLockThread[1]; - calvin_seq_thds = new CalvinSequencerThread[1]; -#endif - // query_queue should be the last one to be initialized!!! - // because it collects txn latency - //if (WORKLOAD != TEST) { - // query_queue.init(m_wl); - //} -#if CC_ALG == OCC - printf("Initializing occ lock manager... "); - occ_man.init(); - printf("Done\n"); -#endif - -#if CC_ALG == BOCC - printf("Initializing occ lock manager... "); - bocc_man.init(); - printf("Done\n"); -#endif - -#if CC_ALG == FOCC - printf("Initializing occ lock manager... "); - focc_man.init(); - printf("Done\n"); -#endif - - endtime = get_server_clock(); - printf("Initialization Time = %ld\n", endtime - starttime); - fflush(stdout); - warmup_done = true; - pthread_barrier_init( &warmup_bar, NULL, all_thd_cnt); - -#if SET_AFFINITY - uint64_t cpu_cnt = 0; - cpu_set_t cpus; -#endif - // spawn and run txns again. - starttime = get_server_clock(); - simulation->run_starttime = starttime; - simulation->last_da_query_time = starttime; - - uint64_t id = 0; - for (uint64_t i = 0; i < wthd_cnt; i++) { -#if SET_AFFINITY - CPU_ZERO(&cpus); - CPU_SET(cpu_cnt, &cpus); - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); - cpu_cnt++; -#endif - assert(id >= 0 && id < wthd_cnt); - worker_thds[i].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], &attr, run_thread, (void *)&worker_thds[i]); - } - for (uint64_t j = 0; j < rthd_cnt ; j++) { - assert(id >= wthd_cnt && id < wthd_cnt + rthd_cnt); - input_thds[j].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&input_thds[j]); - } - - for (uint64_t j = 0; j < sthd_cnt; j++) { - assert(id >= wthd_cnt + rthd_cnt && id < wthd_cnt + rthd_cnt + sthd_cnt); - output_thds[j].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&output_thds[j]); - } -#if LOGGING - log_thds[0].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&log_thds[0]); -#endif - -#if CC_ALG != CALVIN - abort_thds[0].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], NULL, run_thread, (void *)&abort_thds[0]); -#endif - -#if CC_ALG == CALVIN -#if SET_AFFINITY - CPU_ZERO(&cpus); - CPU_SET(cpu_cnt, &cpus); - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); - cpu_cnt++; -#endif - - calvin_lock_thds[0].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], &attr, run_thread, (void *)&calvin_lock_thds[0]); -#if SET_AFFINITY - CPU_ZERO(&cpus); - CPU_SET(cpu_cnt, &cpus); - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); - cpu_cnt++; -#endif - - calvin_seq_thds[0].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], &attr, run_thread, (void *)&calvin_seq_thds[0]); -#endif - - worker_num_thds[0].init(id,g_node_id,m_wl); - pthread_create(&p_thds[id++], &attr, run_thread, (void *)&worker_num_thds[0]); - for (uint64_t i = 0; i < all_thd_cnt; i++) pthread_join(p_thds[i], NULL); - - endtime = get_server_clock(); - - fflush(stdout); - printf("PASS! SimTime = %f\n", (float)(endtime - starttime) / BILLION); - if (STATS_ENABLE) stats.print(false); - - printf("\n"); - fflush(stdout); - - m_wl->index_delete_all(); - - if (g_ts_alloc == LTS_TCP_CLOCK) { - for (uint32_t i = 0; i < all_thd_cnt; i++) { - tcp_ts.CloseToLts(i); - } - } - return 0; -} - -void * run_thread(void * id) { - Thread * thd = (Thread *) id; - thd->run(); - return NULL; -} - -void network_test() { - -} - -void network_test_recv() { - -} diff --git a/contrib/deneva/system/manager.cpp b/contrib/deneva/system/manager.cpp deleted file mode 100644 index ea2b09a1..00000000 --- a/contrib/deneva/system/manager.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -#include "global.h" -#include "manager.h" -#include "row.h" -#include "txn.h" -#include "pthread.h" -#include "http.h" -//#include -__thread uint64_t Manager::_max_cts = 1; -void Manager::init() { - timestamp = 1; - last_min_ts_time = 0; - min_ts = 0; - all_ts = (ts_t *) malloc(sizeof(ts_t) * (g_thread_cnt * g_node_cnt)); - _all_txns = new TxnManager * [g_thread_cnt + g_rem_thread_cnt]; - for (UInt32 i = 0; i < g_thread_cnt + g_rem_thread_cnt; i++) { - _all_txns[i] = NULL; - } - for (UInt32 i = 0; i < BUCKET_CNT; i++) pthread_mutex_init(&mutexes[i], NULL); - for (UInt32 i = 0; i < g_thread_cnt * g_node_cnt; ++i) all_ts[i] = 0; -} - -uint64_t Manager::get_ts(uint64_t thread_id) { - if (g_ts_batch_alloc) assert(g_ts_alloc == TS_CAS); - uint64_t time; - uint64_t starttime = get_sys_clock(); - switch(g_ts_alloc) { - case TS_MUTEX : - pthread_mutex_lock( &ts_mutex ); - time = ++timestamp; - pthread_mutex_unlock( &ts_mutex ); - break; - case TS_CAS : - if (g_ts_batch_alloc) - time = ATOM_FETCH_ADD(timestamp, g_ts_batch_num); - else - time = ATOM_FETCH_ADD(timestamp, 1); - break; - case TS_HW : - assert(false); - break; - case TS_CLOCK : - time = get_wall_clock() * (g_node_cnt + g_thread_cnt) + (g_node_id * g_thread_cnt + thread_id); - break; - case LTS_CURL_CLOCK: - time = CurlGetTimeStamp(); - break; - case LTS_TCP_CLOCK: - time = tcp_ts.TcpGetTimeStamp(thread_id); - - break; - default : - assert(false); - } - INC_STATS(thread_id, ts_alloc_time, get_sys_clock() - starttime); - return time; -} - -ts_t Manager::get_min_ts(uint64_t tid) { - uint64_t now = get_sys_clock(); - if (now - last_min_ts_time > MIN_TS_INTVL) { - last_min_ts_time = now; - uint64_t min = txn_table.get_min_ts(tid); - if (min > min_ts) min_ts = min; - } - return min_ts; -} - -void Manager::set_txn_man(TxnManager * txn) { - int thd_id = txn->get_thd_id(); - _all_txns[thd_id] = txn; -} - - -uint64_t Manager::hash(row_t * row) { - uint64_t addr = (uint64_t)row / MEM_ALLIGN; - return (addr * 1103515247 + 12345) % BUCKET_CNT; -} - -void Manager::lock_row(row_t * row) { - int bid = hash(row); - uint64_t mtx_time_start = get_sys_clock(); - pthread_mutex_lock( &mutexes[bid] ); - INC_STATS(0,mtx[2],get_sys_clock() - mtx_time_start); -} - -void Manager::release_row(row_t * row) { - int bid = hash(row); - pthread_mutex_unlock( &mutexes[bid] ); -} diff --git a/contrib/deneva/system/manager.h b/contrib/deneva/system/manager.h deleted file mode 100644 index aca5eeb4..00000000 --- a/contrib/deneva/system/manager.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MANAGER_H_ -#define _MANAGER_H_ - -#include "helper.h" -#include "global.h" - -class row_t; -class TxnManager; - -class Manager { -public: - void init(); - // returns the next timestamp. - ts_t get_ts(uint64_t thread_id); - - // For MVCC. To calculate the min active ts in the system - ts_t get_min_ts(uint64_t tid = 0); - - // HACK! the following mutexes are used to model a centralized - // lock/timestamp manager. - void lock_row(row_t * row); - void release_row(row_t * row); - - // SUNDIAL, max_cts - void set_max_cts(uint64_t cts) { _max_cts = cts; } - uint64_t get_max_cts() { return _max_cts; } - - TxnManager* get_txn_man(int thd_id) { - return _all_txns[thd_id]; - }; - void set_txn_man(TxnManager * txn); - // For SILO - uint64_t get_epoch() { return *_epoch; }; - void update_epoch(); -private: - // For SILO - volatile uint64_t * _epoch; - ts_t * _last_epoch_update_time; - - pthread_mutex_t ts_mutex; - uint64_t timestamp; - pthread_mutex_t mutexes[BUCKET_CNT]; - uint64_t hash(row_t * row); - ts_t * volatile all_ts; - TxnManager ** _all_txns; - ts_t last_min_ts_time; - ts_t min_ts; - - static __thread uint64_t _max_cts; // max commit timestamp seen by the thread so far. -}; - -#endif diff --git a/contrib/deneva/system/mem_alloc.cpp b/contrib/deneva/system/mem_alloc.cpp deleted file mode 100644 index 9e3de003..00000000 --- a/contrib/deneva/system/mem_alloc.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "mem_alloc.h" - -#include "global.h" -#include "helper.h" -//#include "jemalloc/jemalloc.h" - -#define N_MALLOC - -void mem_alloc::free(void * ptr, uint64_t size) { - if (NO_FREE) { - } - DEBUG_M("free %ld 0x%lx\n",size,(uint64_t)ptr); -#ifdef N_MALLOC - std::free(ptr); -#else - je_free(ptr); -#endif -} - -void * mem_alloc::alloc(uint64_t size) { - void * ptr; - -#ifdef N_MALLOC - ptr = malloc(size); -#else - ptr = je_malloc(size); -#endif - DEBUG_M("alloc %ld 0x%lx\n",size,(uint64_t)ptr); - assert(ptr != NULL); - return ptr; -} - -void * mem_alloc::align_alloc(uint64_t size) { - uint64_t aligned_size = size + CL_SIZE - (size % CL_SIZE); - return alloc(aligned_size); -} - - -void * mem_alloc::realloc(void * ptr, uint64_t size) { -#ifdef N_MALLOC - void * _ptr = std::realloc(ptr,size); -#else - void * _ptr = je_realloc(ptr,size); -#endif - DEBUG_M("realloc %ld 0x%lx\n",size,(uint64_t)_ptr); - return _ptr; -} - - diff --git a/contrib/deneva/system/mem_alloc.h b/contrib/deneva/system/mem_alloc.h deleted file mode 100644 index 8f1e6334..00000000 --- a/contrib/deneva/system/mem_alloc.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MEM_ALLOC_H_ -#define _MEM_ALLOC_H_ - -#include "global.h" - -class mem_alloc { -public: - void * alloc(uint64_t size); - void * align_alloc(uint64_t size); - void * realloc(void * ptr, uint64_t size); - void free(void * block, uint64_t size); -}; - -#endif diff --git a/contrib/deneva/system/msg_queue.cpp b/contrib/deneva/system/msg_queue.cpp deleted file mode 100644 index b024d8ec..00000000 --- a/contrib/deneva/system/msg_queue.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "msg_queue.h" -#include "mem_alloc.h" -#include "query.h" -#include "pool.h" -#include "message.h" -#include - -void MessageQueue::init() { - //m_queue = new boost::lockfree::queue (0); - m_queue = new boost::lockfree::queue * [g_this_send_thread_cnt]; -#if NETWORK_DELAY_TEST - cl_m_queue = new boost::lockfree::queue * [g_this_send_thread_cnt]; -#endif - for(uint64_t i = 0; i < g_this_send_thread_cnt; i++) { - m_queue[i] = new boost::lockfree::queue (0); -#if NETWORK_DELAY_TEST - cl_m_queue[i] = new boost::lockfree::queue (0); -#endif - } - ctr = new uint64_t * [g_this_send_thread_cnt]; - for(uint64_t i = 0; i < g_this_send_thread_cnt; i++) { - ctr[i] = (uint64_t*) mem_allocator.align_alloc(sizeof(uint64_t)); - *ctr[i] = i % g_thread_cnt; - } - for (uint64_t i = 0; i < g_this_send_thread_cnt; i++) sthd_m_cache.push_back(NULL); -} - -void MessageQueue::enqueue(uint64_t thd_id, Message * msg,uint64_t dest) { - DEBUG("MQ Enqueue %ld\n",dest) - assert(dest < g_total_node_cnt); - assert(dest != g_node_id); - DEBUG_M("MessageQueue::enqueue msg_entry alloc\n"); - msg_entry * entry = (msg_entry*) mem_allocator.alloc(sizeof(struct msg_entry)); - //msg_pool.get(entry); - entry->msg = msg; - entry->dest = dest; - entry->starttime = get_sys_clock(); - assert(entry->dest < g_total_node_cnt); - uint64_t mtx_time_start = get_sys_clock(); -#if CC_ALG == CALVIN - // Need to have strict message ordering for sequencer thread - uint64_t rand = thd_id % g_this_send_thread_cnt; -#elif WORKLOAD == DA - uint64_t rand = 0; -#else - uint64_t rand = mtx_time_start % g_this_send_thread_cnt; -#endif -#if NETWORK_DELAY_TEST - if(ISCLIENTN(dest)) { - while (!cl_m_queue[rand]->push(entry) && !simulation->is_done()) { - } - return; - } -#endif - while (!m_queue[rand]->push(entry) && !simulation->is_done()) { - } - INC_STATS(thd_id,mtx[3],get_sys_clock() - mtx_time_start); - INC_STATS(thd_id,msg_queue_enq_cnt,1); -} - -uint64_t MessageQueue::dequeue(uint64_t thd_id, Message *& msg) { - msg_entry * entry = NULL; - uint64_t dest = UINT64_MAX; - uint64_t mtx_time_start = get_sys_clock(); - bool valid = false; -#if NETWORK_DELAY_TEST - valid = cl_m_queue[thd_id%g_this_send_thread_cnt]->pop(entry); - if(!valid) { - entry = sthd_m_cache[thd_id % g_this_send_thread_cnt]; - if(entry) - valid = true; - else - valid = m_queue[thd_id%g_this_send_thread_cnt]->pop(entry); - } -#elif WORKLOAD == DA - valid = m_queue[0]->pop(entry); -#else - - valid = m_queue[thd_id%g_this_send_thread_cnt]->pop(entry); -#endif - - INC_STATS(thd_id,mtx[4],get_sys_clock() - mtx_time_start); - uint64_t curr_time = get_sys_clock(); - if(valid) { - assert(entry); -#if NETWORK_DELAY_TEST - if(!ISCLIENTN(entry->dest)) { - if(ISSERVER && (get_sys_clock() - entry->starttime) < g_network_delay) { - sthd_m_cache[thd_id%g_this_send_thread_cnt] = entry; - INC_STATS(thd_id,mtx[5],get_sys_clock() - curr_time); - return UINT64_MAX; - } else { - sthd_m_cache[thd_id%g_this_send_thread_cnt] = NULL; - } - if(ISSERVER) { - INC_STATS(thd_id,mtx[38],1); - INC_STATS(thd_id,mtx[39],curr_time - entry->starttime); - } - } - -#endif - dest = entry->dest; - assert(dest < g_total_node_cnt); - msg = entry->msg; - DEBUG("MQ Dequeue %ld\n",dest) - INC_STATS(thd_id,msg_queue_delay_time,curr_time - entry->starttime); - INC_STATS(thd_id,msg_queue_cnt,1); - msg->mq_time = curr_time - entry->starttime; - //msg_pool.put(entry); - DEBUG_M("MessageQueue::enqueue msg_entry free\n"); - mem_allocator.free(entry,sizeof(struct msg_entry)); - } else { - msg = NULL; - dest = UINT64_MAX; - } - INC_STATS(thd_id,mtx[5],get_sys_clock() - curr_time); - return dest; -} diff --git a/contrib/deneva/system/msg_queue.h b/contrib/deneva/system/msg_queue.h deleted file mode 100644 index 8c87051f..00000000 --- a/contrib/deneva/system/msg_queue.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MSG_QUEUE_H_ -#define _MSG_QUEUE_H_ - -#include "global.h" -#include "helper.h" -#include "concurrentqueue.h" -#include "lock_free_queue.h" -#include - -class BaseQuery; -class Message; - -struct msg_entry { - Message * msg; - uint64_t dest; - uint64_t starttime; -}; - -typedef msg_entry * msg_entry_t; - -class MessageQueue { -public: - void init(); - void enqueue(uint64_t thd_id, Message * msg, uint64_t dest); - uint64_t dequeue(uint64_t thd_id, Message *& msg); -private: - //LockfreeQueue m_queue; -// This is close to max capacity for boost -#if NETWORK_DELAY_TEST - boost::lockfree::queue ** cl_m_queue; -#endif - boost::lockfree::queue ** m_queue; - std::vector sthd_m_cache; - uint64_t ** ctr; - -}; - -#endif diff --git a/contrib/deneva/system/parser.cpp b/contrib/deneva/system/parser.cpp deleted file mode 100644 index e7833e0a..00000000 --- a/contrib/deneva/system/parser.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" - -void print_usage() { - printf("[usage]:\n"); - printf("\t-nidINT ; NODE_ID\n"); - printf("\t-pINT ; PART_CNT\n"); - printf("\t-nINT ; NODE_CNT\n"); - printf("\t-cnINT ; CLIENT_NODE_CNT\n"); - - printf("\t-vINT ; VIRTUAL_PART_CNT\n"); - - printf("\t-tINT ; THREAD_CNT\n"); - printf("\t-trINT ; REM_THREAD_CNT\n"); - printf("\t-tsINT ; SEND_THREAD_CNT\n"); - printf("\t-ctINT ; CLIENT_THREAD_CNT\n"); - printf("\t-ctrINT ; CLIENT_REM_THREAD_CNT\n"); - printf("\t-ctsINT ; CLIENT_SEND_THREAD_CNT\n"); - - printf("\t-tppINT ; MAX_TXN_PER_PART\n"); - printf("\t-tifINT ; MAX_TXN_IN_FLIGHT\n"); - printf("\t-mprINT ; MPR\n"); - printf("\t-mpiINT ; MPIR\n"); - printf("\t-doneINT ; DONE_TIMER\n"); - printf("\t-btmrINT ; BATCH_TIMER\n"); - printf("\t-stmrINT ; SEQ_BATCH_TIMER\n"); - printf("\t-progINT ; PROG_TIMER\n"); - printf("\t-abrtINT ; ABORT_PENALTY (ms)\n"); - - printf("\t-qINT ; QUERY_INTVL\n"); - printf("\t-dINT ; PRT_LAT_DISTR\n"); - printf("\t-aINT ; PART_ALLOC (0 or 1)\n"); - printf("\t-mINT ; MEM_PAD (0 or 1)\n"); - - printf("\t-rnINT ; REPLICA_CNT (0+)\n"); - printf("\t-rtINT ; REPL_TYPE (AA: 1, AP: 2)\n"); - - printf("\t-o STRING ; output file\n"); - printf("\t-i STRING ; input file\n"); - printf("\t-cf STRING ; txn file\n"); - printf("\t-ndly ; NETWORK_DELAY\n"); - printf(" [YCSB]:\n"); - printf("\t-dpFLOAT ; DATA_PERC\n"); - printf("\t-apFLOAT ; ACCESS_PERC\n"); - printf("\t-pptINT ; PART_PER_TXN\n"); - printf("\t-spptINT ; STRICT_PPT\n"); - printf("\t-eINT ; PERC_MULTI_PART\n"); - printf("\t-wFLOAT ; WRITE_PERC\n"); - printf("\t-zipfFLOAT ; ZIPF_THETA\n"); - printf("\t-sINT ; SYNTH_TABLE_SIZE\n"); - printf("\t-rpqINT ; REQ_PER_QUERY\n"); - printf("\t-fINT ; FIELD_PER_TUPLE\n"); - printf(" [TPCC]:\n"); - printf("\t-whINT ; NUM_WH\n"); - printf("\t-ppFLOAT ; PERC_PAYMENT\n"); - printf("\t-upINT ; WH_UPDATE\n"); - -} - -void parser(int argc, char * argv[]) { - - g_params["validation_lock"] = VALIDATION_LOCK; - g_params["pre_abort"] = PRE_ABORT2; - - for (int i = 1; i < argc; i++) { - assert(argv[i][0] == '-'); - if (argv[i][1] == 'n' && argv[i][2] == 'd' && argv[i][3] == 'l' && argv[i][4] == 'y') - g_network_delay = atoi( &argv[i][5] ); - else if (argv[i][1] == 'd' && argv[i][2] == 'o' && argv[i][3] == 'n' && argv[i][4] == 'e') - g_done_timer = atoi( &argv[i][5] ); - else if (argv[i][1] == 'b' && argv[i][2] == 't' && argv[i][3] == 'm' && argv[i][4] == 'r') - g_batch_time_limit = atoi( &argv[i][5] ); - else if (argv[i][1] == 's' && argv[i][2] == 't' && argv[i][3] == 'm' && argv[i][4] == 'r') - g_seq_batch_time_limit = atoi( &argv[i][5] ); - else if (argv[i][1] == 's' && argv[i][2] == 'p' && argv[i][3] == 'p' && argv[i][4] == 't') - g_strict_ppt = atoi( &argv[i][5] ) == 1; - else if (argv[i][1] == 'p' && argv[i][2] == 'r' && argv[i][3] == 'o' && argv[i][4] == 'g') - g_thread_cnt = atoi( &argv[i][5] ); - else if (argv[i][1] == 'a' && argv[i][2] == 'b' && argv[i][3] == 'r' && argv[i][4] == 't') - g_abort_penalty = atoi( &argv[i][5] ); - else if (argv[i][1] == 'z' && argv[i][2] == 'i' && argv[i][3] == 'p' && argv[i][4] == 'f') - g_zipf_theta = atof( &argv[i][5] ); - else if (argv[i][1] == 'n' && argv[i][2] == 'i' && argv[i][3] == 'd') - g_node_id = atoi( &argv[i][4] ); - else if (argv[i][1] == 'c' && argv[i][2] == 't' && argv[i][3] == 'r') - g_client_rem_thread_cnt = atoi( &argv[i][4] ); - else if (argv[i][1] == 'c' && argv[i][2] == 't' && argv[i][3] == 's') - g_client_send_thread_cnt = atoi( &argv[i][4] ); - else if (argv[i][1] == 'l' && argv[i][2] == 'p' && argv[i][3] == 's') - g_load_per_server = atoi( &argv[i][4] ); - else if (argv[i][1] == 't' && argv[i][2] == 'p' && argv[i][3] == 'p') - g_max_txn_per_part = atoi( &argv[i][4] ); - else if (argv[i][1] == 't' && argv[i][2] == 'i' && argv[i][3] == 'f') - g_inflight_max = atoi( &argv[i][4] ); - else if (argv[i][1] == 'm' && argv[i][2] == 'p' && argv[i][3] == 'r') - g_mpr = atof( &argv[i][4] ); - else if (argv[i][1] == 'm' && argv[i][2] == 'p' && argv[i][3] == 'i') - g_mpitem = atof( &argv[i][4] ); - else if (argv[i][1] == 'p' && argv[i][2] == 'p' && argv[i][3] == 't') - g_part_per_txn = atoi( &argv[i][4] ); - else if (argv[i][1] == 'r' && argv[i][2] == 'p' && argv[i][3] == 'q') - g_req_per_query = atoi( &argv[i][4] ); - else if (argv[i][1] == 'c' && argv[i][2] == 'n') - g_client_node_cnt = atoi( &argv[i][3] ); - else if (argv[i][1] == 't' && argv[i][2] == 'r') - g_rem_thread_cnt = atoi( &argv[i][3] ); - else if (argv[i][1] == 't' && argv[i][2] == 's') - g_send_thread_cnt = atoi( &argv[i][3] ); - else if (argv[i][1] == 'c' && argv[i][2] == 't') - g_client_thread_cnt = atoi( &argv[i][3] ); - else if (argv[i][1] == 'w' && argv[i][2] == 'h') - g_num_wh = atoi( &argv[i][3] ); - else if (argv[i][1] == 'c' && argv[i][2] == 'f') - txn_file = argv[++i]; - else if (argv[i][1] == 'p' && argv[i][2] == 'p') - g_perc_payment = atof( &argv[i][3] ); - else if (argv[i][1] == 'u' && argv[i][2] == 'p') - g_wh_update = atoi( &argv[i][3] ); - else if (argv[i][1] == 'd' && argv[i][2] == 'p') - g_data_perc = atof( &argv[i][3] ); - else if (argv[i][1] == 'a' && argv[i][2] == 'p') - g_access_perc = atof( &argv[i][3] ); - else if (argv[i][1] == 'r' && argv[i][2] == 'n') - g_repl_cnt = atof( &argv[i][3] ); - else if (argv[i][1] == 'r' && argv[i][2] == 't') - g_repl_type = atof( &argv[i][3] ); - else if (argv[i][1] == 't'&& argv[i][2] == 'w') { - g_txn_write_perc = atof( &argv[i][3] ); - g_txn_read_perc = 1.0 - atof( &argv[i][3] ); - } else if (argv[i][1] == 'p') - g_part_cnt = atoi( &argv[i][2] ); - else if (argv[i][1] == 'n') - g_node_cnt = atoi( &argv[i][2] ); - else if (argv[i][1] == 't') - g_thread_cnt = atoi( &argv[i][2] ); - else if (argv[i][1] == 'q') - g_query_intvl = atoi( &argv[i][2] ); - else if (argv[i][1] == 'd') - g_prt_lat_distr = atoi( &argv[i][2] ); - else if (argv[i][1] == 'a') - g_part_alloc = atoi( &argv[i][2] ); - else if (argv[i][1] == 'm') - g_mem_pad = atoi( &argv[i][2] ); - else if (argv[i][1] == 'o') - output_file = argv[++i]; - else if (argv[i][1] == 'i') - input_file = argv[++i]; - else if (argv[i][1] == 'e') - g_perc_multi_part = atof( &argv[i][2] ); - else if (argv[i][1] == 'w') { - g_tup_write_perc = atof( &argv[i][2] ); - g_tup_read_perc = 1.0 - atof( &argv[i][2] ); - } else if (argv[i][1] == 's') - g_synth_table_size = atoi( &argv[i][2] ); - else if (argv[i][1] == 'f') - g_field_per_tuple = atoi( &argv[i][2] ); - else if (argv[i][1] == 'h') { - print_usage(); - exit(0); - } else { - printf("%s\n",argv[i]); - fflush(stdout); - assert(false); - } - } - g_total_thread_cnt = g_thread_cnt + g_rem_thread_cnt + g_send_thread_cnt + g_abort_thread_cnt + 1; -#if LOGGING - g_total_thread_cnt += g_logger_thread_cnt; // logger thread -#endif -#if CC_ALG == CALVIN - g_total_thread_cnt += 2; // sequencer + scheduler thread - // Remove abort thread - g_abort_thread_cnt = 0; - g_total_thread_cnt -= 1; -#endif - g_total_client_thread_cnt = - g_client_thread_cnt + g_client_rem_thread_cnt + g_client_send_thread_cnt; - g_total_node_cnt = g_node_cnt + g_client_node_cnt + g_repl_cnt*g_node_cnt; - if(ISCLIENT) { - g_this_thread_cnt = g_client_thread_cnt; - g_this_rem_thread_cnt = g_client_rem_thread_cnt; - g_this_send_thread_cnt = g_client_send_thread_cnt; - g_this_total_thread_cnt = g_total_client_thread_cnt; - } else { - g_this_thread_cnt = g_thread_cnt; - g_this_rem_thread_cnt = g_rem_thread_cnt; - g_this_send_thread_cnt = g_send_thread_cnt; - g_this_total_thread_cnt = g_total_thread_cnt; - } - // Scale # of keys with cluster size - g_max_part_key *= g_node_cnt; - g_max_product_key *= g_node_cnt; - g_max_supplier_key *= g_node_cnt; - - //g_inflight_max = g_inflight_max / g_node_cnt; - printf("CC Alg %d\n",CC_ALG); - printf("g_done_timer %ld\n",g_done_timer); - printf("g_thread_cnt %d\n",g_thread_cnt ); - printf("g_abort_penalty %ld\n",g_abort_penalty); - printf("g_zipf_theta %f\n",g_zipf_theta ); - printf("g_node_id %d\n",g_node_id ); - printf("g_client_rem_thread_cnt %d\n",g_client_rem_thread_cnt ); - printf("g_client_send_thread_cnt %d\n",g_client_send_thread_cnt ); - printf("g_max_txn_per_part %d\n",g_max_txn_per_part ); - printf("g_load_per_server %d\n",g_load_per_server ); - printf("g_inflight_max %d\n",g_inflight_max ); - printf("g_mpr %f\n",g_mpr ); - printf("g_mpitem %f\n",g_mpitem ); - printf("g_part_per_txn %d\n",g_part_per_txn ); - printf("g_req_per_query %d\n",g_req_per_query ); - printf("g_client_node_cnt %d\n",g_client_node_cnt ); - printf("g_rem_thread_cnt %d\n",g_rem_thread_cnt ); - printf("g_send_thread_cnt %d\n",g_send_thread_cnt ); - printf("g_client_thread_cnt %d\n",g_client_thread_cnt ); - printf("g_num_wh %d\n",g_num_wh ); - printf("g_perc_payment %f\n",g_perc_payment ); - printf("g_wh_update %d\n",g_wh_update ); - printf("g_part_cnt %d\n",g_part_cnt ); - printf("g_node_cnt %d\n",g_node_cnt ); - printf("g_thread_cnt %d\n",g_thread_cnt ); - printf("g_query_intvl %ld\n",g_query_intvl ); - printf("g_prt_lat_distr %d\n",g_prt_lat_distr ); - printf("g_part_alloc %d\n",g_part_alloc ); - printf("g_mem_pad %d\n",g_mem_pad ); - printf("g_perc_multi_part %f\n",g_perc_multi_part ); - printf("g_tup_read_perc %f\n",g_tup_read_perc ); - printf("g_tup_write_perc %f\n",g_tup_write_perc ); - printf("g_txn_read_perc %f\n",g_txn_read_perc ); - printf("g_txn_write_perc %f\n",g_txn_write_perc ); - printf("g_synth_table_size %ld\n",g_synth_table_size ); - printf("g_max_part_key %d\n",g_max_part_key); - printf("g_max_product_key %d\n",g_max_product_key); - printf("g_max_supplier_key %d\n",g_max_supplier_key); - printf("g_field_per_tuple %d\n",g_field_per_tuple ); - printf("g_data_perc %f\n",g_data_perc); - printf("g_access_perc %f\n",g_access_perc); - printf("g_strict_ppt %d\n",g_strict_ppt); - printf("g_network_delay %d\n",g_network_delay); - printf("g_total_thread_cnt %d\n",g_total_thread_cnt); - printf("g_total_client_thread_cnt %d\n",g_total_client_thread_cnt); - printf("g_total_node_cnt %d\n",g_total_node_cnt); - printf("g_seq_batch_time_limit %ld\n",g_seq_batch_time_limit); - - // Initialize client-specific globals - if (g_node_id >= g_node_cnt) init_client_globals(); - init_globals(); -} diff --git a/contrib/deneva/system/pool.cpp b/contrib/deneva/system/pool.cpp deleted file mode 100644 index eb4fe5c4..00000000 --- a/contrib/deneva/system/pool.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "pool.h" -#include "global.h" -#include "helper.h" -#include "txn.h" -#include "mem_alloc.h" -#include "wl.h" -#include "ycsb_query.h" -#include "ycsb.h" -#include "tpcc_query.h" -#include "pps_query.h" -#include "da.h" -#include "da_query.h" -#include "query.h" -#include "msg_queue.h" -#include "row.h" - -#define TRY_LIMIT 10 - -void TxnManPool::init(Workload * wl, uint64_t size) { - _wl = wl; -#if CC_ALG == CALVIN - pool = new boost::lockfree::queue (size); -#else - pool = new boost::lockfree::queue * [g_total_thread_cnt]; -#endif - TxnManager * txn; - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG != CALVIN - pool[thd_id] = new boost::lockfree::queue (size); -#endif - for(uint64_t i = 0; i < size; i++) { - //put(items[i]); - _wl->get_txn_man(txn); - txn->init(thd_id,_wl); - put(thd_id, txn); - } - } -} - -void TxnManPool::get(uint64_t thd_id, TxnManager *& item) { -#if CC_ALG == CALVIN - bool r = pool->pop(item); -#else - bool r = pool[thd_id]->pop(item); -#endif - if(!r) { - _wl->get_txn_man(item); - } - item->init(thd_id,_wl); -} - -void TxnManPool::put(uint64_t thd_id, TxnManager * item) { - item->release(); - int tries = 0; -#if CC_ALG == CALVIN - while (!pool->push(item) && tries++ < TRY_LIMIT) { - } -#else - while (!pool[thd_id]->push(item) && tries++ < TRY_LIMIT) { - } -#endif - if(tries >= TRY_LIMIT) { - mem_allocator.free(item,sizeof(TxnManager)); - } -} - -void TxnManPool::free_all() { - TxnManager * item; - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG == CALVIN - while(pool->pop(item)) { -#else - while(pool[thd_id]->pop(item)) { -#endif - mem_allocator.free(item,sizeof(TxnManager)); - } - } -} - -void TxnPool::init(Workload * wl, uint64_t size) { - _wl = wl; -#if CC_ALG == CALVIN - pool = new boost::lockfree::queue (size); -#else - pool = new boost::lockfree::queue * [g_total_thread_cnt]; -#endif - Transaction * txn; - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG != CALVIN - pool[thd_id] = new boost::lockfree::queue (size); -#endif - for(uint64_t i = 0; i < size; i++) { - //put(items[i]); - txn = (Transaction*) mem_allocator.alloc(sizeof(Transaction)); - txn->init(); - put(thd_id,txn); - } - } -} - -void TxnPool::get(uint64_t thd_id, Transaction *& item) { -#if CC_ALG == CALVIN - bool r = pool->pop(item); -#else - bool r = pool[thd_id]->pop(item); -#endif - if(!r) { - item = (Transaction*) mem_allocator.alloc(sizeof(Transaction)); - item->init(); - } -} - -void TxnPool::put(uint64_t thd_id,Transaction * item) { - //item->release(); - item->reset(thd_id); - int tries = 0; -#if CC_ALG == CALVIN - while (!pool->push(item) && tries++ < TRY_LIMIT) { - } -#else - while (!pool[thd_id]->push(item) && tries++ < TRY_LIMIT) { - } -#endif - if(tries >= TRY_LIMIT) { - item->release(thd_id); - mem_allocator.free(item,sizeof(Transaction)); - } -} - -void TxnPool::free_all() { - TxnManager * item; - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG == CALVIN - while(pool->pop(item)) { -#else - while(pool[thd_id]->pop(item)) { -#endif - mem_allocator.free(item,sizeof(item)); - - } - } -} - -void QryPool::init(Workload * wl, uint64_t size) { - _wl = wl; -#if CC_ALG == CALVIN - pool = new boost::lockfree::queue (size); -#else - pool = new boost::lockfree::queue * [g_total_thread_cnt]; -#endif - BaseQuery * qry=NULL; - DEBUG_M("QryPool alloc init\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG != CALVIN - pool[thd_id] = new boost::lockfree::queue (size); -#endif - for(uint64_t i = 0; i < size; i++) { - //put(items[i]); -#if WORKLOAD==TPCC - TPCCQuery * m_qry = (TPCCQuery *) mem_allocator.alloc(sizeof(TPCCQuery)); - m_qry = new TPCCQuery(); -#elif WORKLOAD==PPS - PPSQuery * m_qry = (PPSQuery *) mem_allocator.alloc(sizeof(PPSQuery)); - m_qry = new PPSQuery(); -#elif WORKLOAD==YCSB - YCSBQuery * m_qry = (YCSBQuery *) mem_allocator.alloc(sizeof(YCSBQuery)); - m_qry = new YCSBQuery(); -#elif WORKLOAD==DA - DAQuery * m_qry = (DAQuery *) mem_allocator.alloc(sizeof(DAQuery)); - m_qry = new DAQuery(); -#endif - m_qry->init(); - qry = m_qry; - put(thd_id,qry); - } - } -} - -void QryPool::get(uint64_t thd_id, BaseQuery *& item) { -#if CC_ALG == CALVIN - bool r = pool->pop(item); -#else - bool r = pool[thd_id]->pop(item); -#endif - if(!r) { - DEBUG_M("query_pool alloc\n"); -#if WORKLOAD==TPCC - TPCCQuery * qry = (TPCCQuery *) mem_allocator.alloc(sizeof(TPCCQuery)); - qry = new TPCCQuery(); -#elif WORKLOAD==PPS - PPSQuery * qry = (PPSQuery *) mem_allocator.alloc(sizeof(PPSQuery)); - qry = new PPSQuery(); -#elif WORKLOAD==YCSB - YCSBQuery * qry = NULL; - qry = (YCSBQuery *) mem_allocator.alloc(sizeof(YCSBQuery)); - qry = new YCSBQuery(); -#elif WORKLOAD==DA - DAQuery * qry = NULL; - qry = (DAQuery *) mem_allocator.alloc(sizeof(DAQuery)); - qry = new DAQuery(); -#endif - qry->init(); - item = (BaseQuery*)qry; - } - DEBUG_R("get 0x%lx\n",(uint64_t)item); -} - -void QryPool::put(uint64_t thd_id, BaseQuery * item) { - assert(item); -#if WORKLOAD == YCSB - ((YCSBQuery*)item)->reset(); -#elif WORKLOAD == TPCC - ((TPCCQuery*)item)->reset(); -#elif WORKLOAD == PPS - ((PPSQuery*)item)->reset(); -#endif - //DEBUG_M("put 0x%lx\n",(uint64_t)item); - DEBUG_R("put 0x%lx\n",(uint64_t)item); - //mem_allocator.free(item,sizeof(item)); - int tries = 0; -#if CC_ALG == CALVIN - while (!pool->push(item) && tries++ < TRY_LIMIT) { - } -#else - while (!pool[thd_id]->push(item) && tries++ < TRY_LIMIT) { - } -#endif - if(tries >= TRY_LIMIT) { -#if WORKLOAD == YCSB - ((YCSBQuery*)item)->release(); -#elif WORKLOAD == TPCC - ((TPCCQuery*)item)->release(); -#elif WORKLOAD == PPS - ((PPSQuery*)item)->release(); -#endif - mem_allocator.free(item,sizeof(BaseQuery)); - } -} - -void QryPool::free_all() { - BaseQuery * item; - DEBUG_M("query_pool free\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { -#if CC_ALG == CALVIN - while(pool->pop(item)) { -#else - while(pool[thd_id]->pop(item)) { -#endif - mem_allocator.free(item,sizeof(item)); - } - } -} - - -void AccessPool::init(Workload * wl, uint64_t size) { - _wl = wl; - pool = new boost::lockfree::queue * [g_total_thread_cnt]; - DEBUG_M("AccessPool alloc init\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - pool[thd_id] = new boost::lockfree::queue (size); - for(uint64_t i = 0; i < size; i++) { - Access * item = (Access*)mem_allocator.alloc(sizeof(Access)); - put(thd_id,item); - } - } -} - -void AccessPool::get(uint64_t thd_id, Access *& item) { - //bool r = pool->pop(item); - bool r = pool[thd_id]->pop(item); - if(!r) { - DEBUG_M("access_pool alloc\n"); - item = (Access*)mem_allocator.alloc(sizeof(Access)); - item->orig_row = NULL; - item->data = NULL; - item->orig_data = NULL; - #if CC_ALG == SUNDIAL - item->orig_rts = 0; - item->orig_wts = 0; - item->locked = false; - #endif - } -} - -void AccessPool::put(uint64_t thd_id, Access * item) { - pool[thd_id]->push(item); - /* - int tries = 0; - while(!pool->push(item) && tries++ < TRY_LIMIT) { } - if(tries >= TRY_LIMIT) { - mem_allocator.free(item,sizeof(Access)); - } - */ -} - -void AccessPool::free_all() { - Access * item; - DEBUG_M("access_pool free\n"); - //while(pool->pop(item)) { - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - while(pool[thd_id]->pop(item)) { - mem_allocator.free(item,sizeof(item)); - } - } -} - -void TxnTablePool::init(Workload * wl, uint64_t size) { - _wl = wl; - pool = new boost::lockfree::queue * [g_total_thread_cnt]; - DEBUG_M("TxnTablePool alloc init\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - pool[thd_id] = new boost::lockfree::queue (size); - for(uint64_t i = 0; i < size; i++) { - txn_node * t_node = (txn_node *) mem_allocator.align_alloc(sizeof(struct txn_node)); - //put(new txn_node()); - put(thd_id,t_node); - } - } -} - -void TxnTablePool::get(uint64_t thd_id, txn_node *& item) { - bool r = pool[thd_id]->pop(item); - if(!r) { - DEBUG_M("txn_table_pool alloc\n"); - item = (txn_node *) mem_allocator.align_alloc(sizeof(struct txn_node)); - } -} - -void TxnTablePool::put(uint64_t thd_id, txn_node * item) { - int tries = 0; - while (!pool[thd_id]->push(item) && tries++ < TRY_LIMIT) { - } - if(tries >= TRY_LIMIT) { - mem_allocator.free(item,sizeof(txn_node)); - } -} - -void TxnTablePool::free_all() { - txn_node * item; - DEBUG_M("txn_table_pool free\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - while(pool[thd_id]->pop(item)) { - mem_allocator.free(item,sizeof(item)); - } - } -} -void MsgPool::init(Workload * wl, uint64_t size) { - _wl = wl; - pool = new boost::lockfree::queue (size); - msg_entry* entry; - DEBUG_M("MsgPool alloc init\n"); - for(uint64_t i = 0; i < size; i++) { - entry = (msg_entry*) mem_allocator.alloc(sizeof(struct msg_entry)); - put(entry); - } -} - -void MsgPool::get(msg_entry* & item) { - bool r = pool->pop(item); - if(!r) { - DEBUG_M("msg_pool alloc\n"); - item = (msg_entry*) mem_allocator.alloc(sizeof(struct msg_entry)); - } -} - -void MsgPool::put(msg_entry* item) { - item->msg = NULL; - item->dest = UINT64_MAX; - item->starttime = UINT64_MAX; - int tries = 0; - while (!pool->push(item) && tries++ < TRY_LIMIT) { - } - if(tries >= TRY_LIMIT) { - mem_allocator.free(item,sizeof(msg_entry)); - } -} - -void MsgPool::free_all() { - msg_entry * item; - DEBUG_M("msg_pool free\n"); - while(pool->pop(item)) { - mem_allocator.free(item,sizeof(item)); - } -} - -void RowPool::init(Workload * wl, uint64_t size) { - _wl = wl; - pool = new boost::lockfree::queue * [g_total_thread_cnt]; - row_t* entry; - DEBUG_M("RowPool alloc init\n"); - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - pool[thd_id] = new boost::lockfree::queue (size); - for(uint64_t i = 0; i < size; i++) { - entry = (row_t*) mem_allocator.alloc(sizeof(struct row_t)); - put(thd_id,entry); - } - } -} - -void RowPool::get(uint64_t thd_id, row_t* & item) { - bool r = pool[thd_id]->pop(item); - if(!r) { - DEBUG_M("msg_pool alloc\n"); - item = (row_t*) mem_allocator.alloc(sizeof(struct row_t)); - } -} - -void RowPool::put(uint64_t thd_id, row_t* item) { - int tries = 0; - while (!pool[thd_id]->push(item) && tries++ < TRY_LIMIT) { - } - if(tries >= TRY_LIMIT) { - mem_allocator.free(item,sizeof(row_t)); - } -} - -void RowPool::free_all() { - row_t * item; - for(uint64_t thd_id = 0; thd_id < g_total_thread_cnt; thd_id++) { - while(pool[thd_id]->pop(item)) { - DEBUG_M("row_pool free\n"); - mem_allocator.free(item,sizeof(row_t)); - } - } -} - diff --git a/contrib/deneva/system/pool.h b/contrib/deneva/system/pool.h deleted file mode 100644 index c12bc4d0..00000000 --- a/contrib/deneva/system/pool.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TXN_POOL_H_ -#define _TXN_POOL_H_ - - -#include "global.h" -#include "helper.h" -#include -#include "concurrentqueue.h" - -class TxnManager; -class BaseQuery; -class Workload; -struct msg_entry; -struct txn_node; -class Access; -class Transaction; -class row_t; - - -class TxnManPool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, TxnManager *& item); - void put(uint64_t thd_id, TxnManager * items); - void free_all(); - -private: -#if CC_ALG == CALVIN - boost::lockfree::queue * pool; -#else - boost::lockfree::queue ** pool; -#endif - Workload * _wl; - -}; - - -class TxnPool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, Transaction *& item); - void put(uint64_t thd_id,Transaction * items); - void free_all(); - -private: -#if CC_ALG == CALVIN - boost::lockfree::queue * pool; -#else - boost::lockfree::queue ** pool; -#endif - Workload * _wl; - -}; - -class QryPool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, BaseQuery *& item); - void put(uint64_t thd_id, BaseQuery * items); - void free_all(); - -private: -#if CC_ALG == CALVIN - boost::lockfree::queue * pool; -#else - boost::lockfree::queue ** pool; -#endif - Workload * _wl; - -}; - - -class AccessPool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, Access *& item); - void put(uint64_t thd_id, Access * items); - void free_all(); - -private: - boost::lockfree::queue ** pool; - Workload * _wl; - -}; - - -class TxnTablePool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, txn_node *& item); - void put(uint64_t thd_id, txn_node * items); - void free_all(); - -private: - boost::lockfree::queue ** pool; - Workload * _wl; - -}; -class MsgPool { -public: - void init(Workload * wl, uint64_t size); - void get(msg_entry *& item); - void put(msg_entry * items); - void free_all(); - -private: - boost::lockfree::queue * pool; - Workload * _wl; - -}; - -class RowPool { -public: - void init(Workload * wl, uint64_t size); - void get(uint64_t thd_id, row_t *& item); - void put(uint64_t thd_id, row_t * items); - void free_all(); - -private: - boost::lockfree::queue ** pool; - Workload * _wl; - -}; - - -#endif diff --git a/contrib/deneva/system/query.cpp b/contrib/deneva/system/query.cpp deleted file mode 100644 index 648cda72..00000000 --- a/contrib/deneva/system/query.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "query.h" -#include "mem_alloc.h" -#include "wl.h" -#include "table.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "pps_query.h" -#include "da_query.h" - -/*************************************************/ -// class Query_queue -/*************************************************/ - -void Query_queue::init(Workload *h_wl) { - all_queries = new Query_thd * [g_thread_cnt]; - _wl = h_wl; - for (UInt32 tid = 0; tid < g_thread_cnt; tid++) init(tid); -} - -void Query_queue::init(int thread_id) { - all_queries[thread_id] = (Query_thd *) mem_allocator.alloc(sizeof(Query_thd)); - all_queries[thread_id]->init(_wl, thread_id); -} - -BaseQuery *Query_queue::get_next_query(uint64_t thd_id) { - BaseQuery * query = all_queries[thd_id]->get_next_query(); - return query; -} - -void Query_thd::init(Workload *h_wl, int thread_id) { - uint64_t request_cnt; - q_idx = 0; - request_cnt = WARMUP / g_thread_cnt + MAX_TXN_PER_PART + 4; -#if WORKLOAD == YCSB - queries = (YCSBQuery *)mem_allocator.alloc(sizeof(YCSBQuery) * request_cnt); -#elif WORKLOAD == TPCC - queries = (TPCCQuery *)mem_allocator.alloc(sizeof(TPCCQuery) * request_cnt); -#elif WORKLOAD == PPS - queries = (PPSQuery *)mem_allocator.alloc(sizeof(PPSQuery) * request_cnt); -#endif - for (UInt32 qid = 0; qid < request_cnt; qid ++) { -#if WORKLOAD == YCSB - new(&queries[qid]) YCSBQuery(); -#elif WORKLOAD == TPCC - new(&queries[qid]) TPCCQuery(); -#elif WORKLOAD == PPS - new(&queries[qid]) PPSQuery(); -#elif WORKLOAD == DA - new(&queries[qid]) DAQuery(); -#endif - queries[qid].init(thread_id, h_wl); - } -} - -BaseQuery *Query_thd::get_next_query() { - BaseQuery * query = &queries[q_idx++]; - return query; -} - -void BaseQuery::init() { - DEBUG_M("BaseQuery::init array partitions\n"); - partitions.init(g_part_cnt); - DEBUG_M("BaseQuery::init array partitions_touched\n"); - partitions_touched.init(g_part_cnt); - DEBUG_M("BaseQuery::init array active_nodes\n"); - active_nodes.init(g_node_cnt); - DEBUG_M("BaseQuery::init array participant_nodes\n"); - participant_nodes.init(g_node_cnt); -} - -void BaseQuery::clear() { - partitions.clear(); - partitions_touched.clear(); - active_nodes.clear(); - participant_nodes.clear(); -} - -void BaseQuery::release() { - partitions.release(); - partitions_touched.release(); - active_nodes.release(); - participant_nodes.release(); -} diff --git a/contrib/deneva/system/query.h b/contrib/deneva/system/query.h deleted file mode 100644 index d893082a..00000000 --- a/contrib/deneva/system/query.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _QUERY_H_ -#define _QUERY_H_ - -#include "global.h" -#include "helper.h" -#include "array.h" - -class Workload; -class YCSBQuery; -class TPCCQuery; -class PPSQuery; - -class BaseQuery { -public: - virtual ~BaseQuery() {} - virtual bool readonly() = 0; - virtual void print() = 0; - virtual void init(); - uint64_t waiting_time; - void clear(); - void release(); - virtual bool isReconQuery() {return false;} - - // Prevent unnecessary remote messages - Array partitions; - Array partitions_touched; - Array active_nodes; - Array participant_nodes; - -}; - -class QueryGenerator { -public: - virtual ~QueryGenerator() {} - virtual BaseQuery * create_query(Workload * h_wl, uint64_t home_partition_id) = 0; -}; - -// All the queries for a particular thread. -class Query_thd { -public: - void init(Workload * h_wl, int thread_id); - BaseQuery * get_next_query(); - int q_idx; -#if WORKLOAD == YCSB - YCSBQuery * queries; -#elif WORKLOAD == TPCC - TPCCQuery * queries; -#elif WORKLOAD == PPS - PPSQuery * queries; -#elif WORKLOAD == DA - DAQuery * queries; -#endif - char pad[CL_SIZE - sizeof(void *) - sizeof(int)]; -}; - -class Query_queue { -public: - void init(Workload * h_wl); - void init(int thread_id); - BaseQuery * get_next_query(uint64_t thd_id); - -private: - Query_thd ** all_queries; - Workload * _wl; -}; - -#endif diff --git a/contrib/deneva/system/sequencer.cpp b/contrib/deneva/system/sequencer.cpp deleted file mode 100644 index 75681dc2..00000000 --- a/contrib/deneva/system/sequencer.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "sequencer.h" -#include "ycsb_query.h" -#include "da_query.h" -#include "tpcc_query.h" -#include "pps_query.h" -#include "mem_alloc.h" -#include "transport.h" -#include "wl.h" -#include "helper.h" -#include "msg_queue.h" -#include "msg_thread.h" -#include "work_queue.h" -#include "message.h" -#include "stats.h" -#include - -void Sequencer::init(Workload * wl) { - next_txn_id = 0; - rsp_cnt = g_node_cnt + g_client_node_cnt; - _wl = wl; - last_time_batch = 0; - wl_head = NULL; - wl_tail = NULL; - fill_queue = new boost::lockfree::queue > [g_node_cnt]; -} - -// Assumes 1 thread does sequencer work -void Sequencer::process_ack(Message * msg, uint64_t thd_id) { - qlite_ll * en = wl_head; - while(en != NULL && en->epoch != msg->get_batch_id()) { - en = en->next; - } - assert(en); - qlite * wait_list = en->list; - assert(wait_list != NULL); - assert(en->txns_left > 0); - - uint64_t id = msg->get_txn_id() / g_node_cnt; - uint64_t prof_stat = get_sys_clock(); - assert(wait_list[id].server_ack_cnt > 0); - - // Decrement the number of acks needed for this txn - uint32_t query_acks_left = ATOM_SUB_FETCH(wait_list[id].server_ack_cnt, 1); - - if (wait_list[id].skew_startts == 0) { - wait_list[id].skew_startts = get_sys_clock(); - } - - if (query_acks_left == 0) { - en->txns_left--; - ATOM_FETCH_ADD(total_txns_finished,1); - INC_STATS(thd_id,seq_txn_cnt,1); - // free msg, queries -#if WORKLOAD == YCSB - YCSBClientQueryMessage* cl_msg = (YCSBClientQueryMessage*)wait_list[id].msg; - for(uint64_t i = 0; i < cl_msg->requests.size(); i++) { - DEBUG_M("Sequencer::process_ack() ycsb_request free\n"); - mem_allocator.free(cl_msg->requests[i],sizeof(ycsb_request)); - } -#elif WORKLOAD == TPCC - TPCCClientQueryMessage* cl_msg = (TPCCClientQueryMessage*)wait_list[id].msg; - if(cl_msg->txn_type == TPCC_NEW_ORDER) { - for(uint64_t i = 0; i < cl_msg->items.size(); i++) { - DEBUG_M("Sequencer::process_ack() items free\n"); - mem_allocator.free(cl_msg->items[i],sizeof(Item_no)); - } - } -#elif WORKLOAD == PPS - PPSClientQueryMessage* cl_msg = (PPSClientQueryMessage*)wait_list[id].msg; - -#elif WORKLOAD == DA - DAClientQueryMessage* cl_msg = (DAClientQueryMessage*)wait_list[id].msg; -#endif -#if WORKLOAD == PPS - if (WORKLOAD == PPS && CC_ALG == CALVIN && - ((cl_msg->txn_type == PPS_GETPARTBYSUPPLIER) || - (cl_msg->txn_type == PPS_GETPARTBYPRODUCT) || (cl_msg->txn_type == PPS_ORDERPRODUCT)) && - (cl_msg->recon || ((AckMessage *)msg)->rc == Abort)) { - int abort_cnt = wait_list[id].abort_cnt; - if (cl_msg->recon) { - // Copy over part keys - cl_msg->part_keys.copy( ((AckMessage*)msg)->part_keys); - DEBUG("Finished RECON (%ld,%ld)\n",msg->get_txn_id(),msg->get_batch_id()); - } else { - uint64_t timespan = get_sys_clock() - wait_list[id].seq_startts; - if (warmup_done) { - INC_STATS_ARR(0,start_abort_commit_latency, timespan); - } - cl_msg->part_keys.clear(); - DEBUG("Aborted (%ld,%ld)\n",msg->get_txn_id(),msg->get_batch_id()); - INC_STATS(0,total_txn_abort_cnt,1); - abort_cnt++; - } - - cl_msg->return_node_id = wait_list[id].client_id; - wait_list[id].total_batch_time += en->batch_send_time - wait_list[id].seq_startts; - // restart - process_txn(cl_msg, thd_id, wait_list[id].seq_first_startts, wait_list[id].seq_startts, - wait_list[id].total_batch_time, abort_cnt); - } else { -#endif - uint64_t curr_clock = get_sys_clock(); - uint64_t timespan = curr_clock - wait_list[id].seq_first_startts; - uint64_t timespan2 = curr_clock - wait_list[id].seq_startts; - uint64_t skew_timespan = get_sys_clock() - wait_list[id].skew_startts; - wait_list[id].total_batch_time += en->batch_send_time - wait_list[id].seq_startts; - if (warmup_done) { - INC_STATS_ARR(0,first_start_commit_latency, timespan); - INC_STATS_ARR(0,last_start_commit_latency, timespan2); - INC_STATS_ARR(0,start_abort_commit_latency, timespan2); - } - if (wait_list[id].abort_cnt > 0) { - INC_STATS(0,unique_txn_abort_cnt,1); - } - - INC_STATS(0,lat_l_loc_msg_queue_time,wait_list[id].total_batch_time); - INC_STATS(0,lat_l_loc_process_time,skew_timespan); - - INC_STATS(0,lat_short_work_queue_time,msg->lat_work_queue_time); - INC_STATS(0,lat_short_msg_queue_time,msg->lat_msg_queue_time); - INC_STATS(0,lat_short_cc_block_time,msg->lat_cc_block_time); - INC_STATS(0,lat_short_cc_time,msg->lat_cc_time); - INC_STATS(0,lat_short_process_time,msg->lat_process_time); - - if (msg->return_node_id != g_node_id) { - /* - if (msg->lat_network_time/BILLION > 1.0) { - printf("%ld %d %ld -> %d: %f %f\n",msg->txn_id, msg->rtype, - msg->return_node_id,g_node_id ,msg->lat_network_time/BILLION, - msg->lat_other_time/BILLION); - } - */ - INC_STATS(0,lat_short_network_time,msg->lat_network_time); - } - INC_STATS(0,lat_short_batch_time,wait_list[id].total_batch_time); - - PRINT_LATENCY("lat_l_seq %ld %ld %d %f %f %f\n", msg->get_txn_id(), msg->get_batch_id(), - wait_list[id].abort_cnt, (double)timespan / BILLION, - (double)skew_timespan / BILLION, - (double)wait_list[id].total_batch_time / BILLION); - - cl_msg->release(); - - ClientResponseMessage *rsp_msg = - (ClientResponseMessage *)Message::create_message(msg->get_txn_id(), CL_RSP); - rsp_msg->client_startts = wait_list[id].client_startts; - msg_queue.enqueue(thd_id,rsp_msg,wait_list[id].client_id); -#if WORKLOAD == PPS - } -#endif - - INC_STATS(thd_id,seq_complete_cnt,1); - - } - - // If we have all acks for this batch, send qry responses to all clients - if (en->txns_left == 0) { - DEBUG("FINISHED BATCH %ld\n",en->epoch); - LIST_REMOVE_HT(en,wl_head,wl_tail); - mem_allocator.free(en->list,sizeof(qlite) * en->max_size); - mem_allocator.free(en,sizeof(qlite_ll)); - } - INC_STATS(thd_id,seq_ack_time,get_sys_clock() - prof_stat); -} - -// Assumes 1 thread does sequencer work -void Sequencer::process_txn(Message *msg, uint64_t thd_id, uint64_t early_start, - uint64_t last_start, uint64_t wait_time, uint32_t abort_cnt) { - - uint64_t starttime = get_sys_clock(); - DEBUG("SEQ Processing msg\n"); - qlite_ll * en = wl_tail; - - // LL is potentially a bottleneck here - if(!en || en->epoch != simulation->get_seq_epoch()+1) { - DEBUG("SEQ new wait list for epoch %ld\n",simulation->get_seq_epoch()+1); - // First txn of new wait list - en = (qlite_ll *) mem_allocator.alloc(sizeof(qlite_ll)); - en->epoch = simulation->get_seq_epoch()+1; - en->max_size = 1000; - en->size = 0; - en->txns_left = 0; - en->list = (qlite *) mem_allocator.alloc(sizeof(qlite) * en->max_size); - LIST_PUT_TAIL(wl_head,wl_tail,en) - } - if(en->size == en->max_size) { - en->max_size *= 2; - en->list = (qlite *) mem_allocator.realloc(en->list,sizeof(qlite) * en->max_size); - } - - txnid_t txn_id = g_node_id + g_node_cnt * next_txn_id; - next_txn_id++; - uint64_t id = txn_id / g_node_cnt; - msg->batch_id = en->epoch; - msg->txn_id = txn_id; - assert(txn_id != UINT64_MAX); - -#if WORKLOAD == YCSB - std::set participants = YCSBQuery::participants(msg,_wl); -#elif WORKLOAD == TPCC - std::set participants = TPCCQuery::participants(msg,_wl); -#elif WORKLOAD == PPS - std::set participants = PPSQuery::participants(msg,_wl); -#elif WORKLOAD == DA - std::set participants = DAQuery::participants(msg,_wl); -#endif - uint32_t server_ack_cnt = participants.size(); - assert(server_ack_cnt > 0); - assert(ISCLIENTN(msg->get_return_id())); - en->list[id].client_id = msg->get_return_id(); - en->list[id].client_startts = ((ClientQueryMessage*)msg)->client_startts; - //en->list[id].seq_startts = get_sys_clock(); - - en->list[id].total_batch_time = wait_time; - en->list[id].abort_cnt = abort_cnt; - en->list[id].skew_startts = 0; - en->list[id].server_ack_cnt = server_ack_cnt; - en->list[id].msg = msg; - en->size++; - en->txns_left++; - // Note: Modifying msg! - msg->return_node_id = g_node_id; - msg->lat_network_time = 0; - msg->lat_other_time = 0; -#if CC_ALG == CALVIN && WORKLOAD == PPS - PPSClientQueryMessage* cl_msg = (PPSClientQueryMessage*) msg; - if (cl_msg->txn_type == PPS_GETPARTBYSUPPLIER || cl_msg->txn_type == PPS_GETPARTBYPRODUCT || - cl_msg->txn_type == PPS_ORDERPRODUCT) { - if (cl_msg->part_keys.size() == 0) { - cl_msg->recon = true; - en->list[id].seq_startts = get_sys_clock(); - } else { - cl_msg->recon = false; - en->list[id].seq_startts = last_time; - } - - } else { - cl_msg->recon = false; - en->list[id].seq_startts = get_sys_clock(); - } -#else - en->list[id].seq_startts = get_sys_clock(); -#endif - if (early_start == 0) { - en->list[id].seq_first_startts = en->list[id].seq_startts; - } else { - en->list[id].seq_first_startts = early_start; - } - assert(en->size == en->txns_left); - assert(en->size <= ((uint64_t)g_inflight_max * g_node_cnt)); - - // Add new txn to fill queue - for(auto participant = participants.begin(); participant != participants.end(); participant++) { - DEBUG("SEQ adding (%ld,%ld) to fill queue (recon: %d)\n", msg->get_txn_id(), - msg->get_batch_id(), ((PPSClientQueryMessage *)msg)->recon); - while (!fill_queue[*participant].push(msg) && !simulation->is_done()) { - } - } - - INC_STATS(thd_id,seq_process_cnt,1); - INC_STATS(thd_id,seq_process_time,get_sys_clock() - starttime); - ATOM_ADD(total_txns_received,1); -} - -// Assumes 1 thread does sequencer work -void Sequencer::send_next_batch(uint64_t thd_id) { - uint64_t prof_stat = get_sys_clock(); - qlite_ll * en = wl_tail; - bool empty = true; - if(en && en->epoch == simulation->get_seq_epoch()) { - DEBUG("SEND NEXT BATCH %ld [%ld,%ld] %ld\n", thd_id, simulation->get_seq_epoch(), en->epoch, - en->size); - empty = false; - - en->batch_send_time = prof_stat; - } - - Message * msg; - for(uint64_t j = 0; j < g_node_cnt; j++) { - while(fill_queue[j].pop(msg)) { - if(j == g_node_id) { - work_queue.sched_enqueue(thd_id,msg); - } else { - msg_queue.enqueue(thd_id,msg,j); - } - } - if(!empty) { - DEBUG("Seq RDONE %ld\n",simulation->get_seq_epoch()) - } - msg = Message::create_message(RDONE); - msg->batch_id = simulation->get_seq_epoch(); - if(j == g_node_id) { - work_queue.sched_enqueue(thd_id,msg); - } else { - msg_queue.enqueue(thd_id,msg,j); - } - } - - if(last_time_batch > 0) { - INC_STATS(thd_id,seq_batch_time,get_sys_clock() - last_time_batch); - } - last_time_batch = get_sys_clock(); - - INC_STATS(thd_id,seq_batch_cnt,1); - if(!empty) { - INC_STATS(thd_id,seq_full_batch_cnt,1); - } - INC_STATS(thd_id,seq_prep_time,get_sys_clock() - prof_stat); - next_txn_id = 0; -} - diff --git a/contrib/deneva/system/sequencer.h b/contrib/deneva/system/sequencer.h deleted file mode 100644 index a85420c1..00000000 --- a/contrib/deneva/system/sequencer.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _SEQUENCER_H_ -#define _SEQUENCER_H_ - -#include "global.h" -#include "query.h" -#include - -class Workload; -class BaseQuery; -class Message; - -typedef struct qlite_entry { - BaseQuery * qry; - uint32_t client_id; - uint64_t client_startts; - uint64_t seq_startts; - uint64_t seq_first_startts; - uint64_t skew_startts; - uint64_t total_batch_time; - uint32_t server_ack_cnt; - uint32_t abort_cnt; - Message * msg; -} qlite; - -typedef struct qlite_ll_entry { - qlite * list; - uint64_t size; - uint32_t max_size; - uint32_t txns_left; - uint64_t epoch; - uint64_t batch_send_time; - qlite_ll_entry * next; - qlite_ll_entry * prev; -} qlite_ll; - -class Sequencer { - public: - void init(Workload * wl); - void process_ack(Message * msg, uint64_t thd_id); - void process_txn(Message* msg, uint64_t thd_id, uint64_t early_start, uint64_t last_start, - uint64_t wait_time, uint32_t abort_cnt); - void send_next_batch(uint64_t thd_id); - - private: - void reset_participating_nodes(bool * part_nodes); - - boost::lockfree::queue > * fill_queue; -#if WORKLOAD == YCSB - YCSBQuery* node_queries; -#elif WORKLOAD == TPCC - TPCCQuery* node_queries; -#elif WORKLOAD == PPS - PPSQuery* node_queries; -#endif - volatile uint64_t total_txns_finished; - volatile uint64_t total_txns_received; - volatile uint32_t rsp_cnt; - uint64_t last_time_batch; - qlite_ll * wl_head; // list of txns in batch being executed - qlite_ll * wl_tail; // list of txns in batch being executed - volatile uint32_t next_txn_id; - Workload * _wl; -}; - -class Seq_thread_t { -public: - uint64_t _thd_id; - uint64_t _node_id; - Workload * _wl; - - uint64_t get_thd_id(); - uint64_t get_node_id(); - - - void init(uint64_t thd_id, uint64_t node_id, Workload * workload); - // the following function must be in the form void* (*)(void*) - // to run with pthread. - // conversion is done within the function. - RC run_remote(); - RC run_recv(); - RC run_send(); -}; -#endif diff --git a/contrib/deneva/system/sim_manager.cpp b/contrib/deneva/system/sim_manager.cpp deleted file mode 100644 index 7464329e..00000000 --- a/contrib/deneva/system/sim_manager.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "global.h" -#include "helper.h" -#include "sim_manager.h" - -void SimManager::init() { - sim_done = false; - warmup = false; - warmup_end_time = 0; - start_set = false; - sim_init_done = false; - txn_cnt = 0; - inflight_cnt = 0; - epoch_txn_cnt = 0; - worker_epoch = 1; - seq_epoch = 0; - rsp_cnt = g_total_node_cnt - 1; - -#if TIME_ENABLE - run_starttime = get_sys_clock(); - last_da_query_time = get_sys_clock(); -#else - run_starttime = get_wall_clock(); -#endif - last_worker_epoch_time = run_starttime; - last_seq_epoch_time = get_wall_clock(); -} - -void SimManager::set_starttime(uint64_t starttime) { - if(ATOM_CAS(start_set, false, true)) { - run_starttime = starttime; - last_da_query_time = starttime; - last_worker_epoch_time = starttime; - sim_done = false; - printf("Starttime set to %ld\n",run_starttime); - } -} -bool SimManager::timeout() { -#if TIME_ENABLE - #if WORKLOAD == DA - uint64_t t=last_da_query_time; - uint64_t now=get_sys_clock(); - if(now= (g_done_timer + g_warmup_timer)/12) - &&((now - t) >= (g_done_timer + g_warmup_timer)/6); - if (res) { - printf("123\n"); - } - return res; - #else - return (get_sys_clock() - run_starttime) >= g_done_timer + g_warmup_timer; - #endif -#else - return (get_wall_clock() - run_starttime) >= g_done_timer + g_warmup_timer; -#endif -} - -bool SimManager::is_done() { - bool done = sim_done || timeout(); - if(done && !sim_done) { - set_done(); - } - return done; -} - -bool SimManager::is_warmup_done() { - #if WORKLOAD == DA - return true; - #endif - if(warmup) - return true; - bool done = ((get_sys_clock() - run_starttime) >= g_warmup_timer); - if(done) { - ATOM_CAS(warmup_end_time,0,get_sys_clock()); - ATOM_CAS(warmup,false,true); - } - return done; -} -bool SimManager::is_setup_done() { return sim_init_done; } - -void SimManager::set_setup_done() { ATOM_CAS(sim_init_done, false, true); } - -void SimManager::set_done() { - if(ATOM_CAS(sim_done, false, true)) { - if (warmup_end_time == 0) warmup_end_time = run_starttime; - SET_STATS(0, total_runtime, get_sys_clock() - warmup_end_time); - } - printf("set done\n"); - fflush(stdout); -} - -void SimManager::process_setup_msg() { - uint64_t rsp_left = ATOM_SUB_FETCH(rsp_cnt,1); - if(rsp_left == 0) { - set_setup_done(); - } -} - -void SimManager::inc_txn_cnt() { ATOM_ADD(txn_cnt, 1); } - -void SimManager::inc_inflight_cnt() { ATOM_ADD(inflight_cnt, 1); } - -void SimManager::dec_inflight_cnt() { ATOM_SUB(inflight_cnt, 1); } - -void SimManager::inc_epoch_txn_cnt() { ATOM_ADD(epoch_txn_cnt, 1); } - -void SimManager::decr_epoch_txn_cnt() { ATOM_SUB(epoch_txn_cnt, 1); } - -uint64_t SimManager::get_seq_epoch() { return seq_epoch; } - -void SimManager::advance_seq_epoch() { - ATOM_ADD(seq_epoch,1); - last_seq_epoch_time += g_seq_batch_time_limit; -} - -uint64_t SimManager::get_worker_epoch() { return worker_epoch; } - -void SimManager::next_worker_epoch() { - last_worker_epoch_time = get_sys_clock(); - ATOM_ADD(worker_epoch,1); -} - -double SimManager::seconds_from_start(uint64_t time) { - return (double)(time - run_starttime) / BILLION; -} diff --git a/contrib/deneva/system/sim_manager.h b/contrib/deneva/system/sim_manager.h deleted file mode 100644 index 2789dbf9..00000000 --- a/contrib/deneva/system/sim_manager.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _SIMMAN_H_ -#define _SIMMAN_H_ - -#include "global.h" - -class SimManager { -public: - volatile bool sim_init_done; - volatile bool warmup; - volatile uint64_t warmup_end_time; - bool start_set; - volatile bool sim_done; - uint64_t run_starttime; - uint64_t rsp_cnt; - uint64_t seq_epoch; - uint64_t worker_epoch; - uint64_t last_worker_epoch_time; - uint64_t last_seq_epoch_time; - int64_t epoch_txn_cnt; - uint64_t txn_cnt; - uint64_t inflight_cnt; - uint64_t last_da_query_time; - - void init(); - bool is_setup_done(); - bool is_done(); - bool is_warmup_done(); - void set_setup_done(); - void set_done(); - bool timeout(); - void set_starttime(uint64_t starttime); - void process_setup_msg(); - void inc_txn_cnt(); - void inc_inflight_cnt(); - void dec_inflight_cnt(); - uint64_t get_worker_epoch(); - void next_worker_epoch(); - uint64_t get_seq_epoch(); - void advance_seq_epoch(); - void inc_epoch_txn_cnt(); - void decr_epoch_txn_cnt(); - double seconds_from_start(uint64_t time); -}; - -#endif diff --git a/contrib/deneva/system/thread.cpp b/contrib/deneva/system/thread.cpp deleted file mode 100644 index 714b9f36..00000000 --- a/contrib/deneva/system/thread.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "thread.h" - -#include "global.h" -#include "helper.h" -#include "manager.h" -#include "math.h" -#include "message.h" -#include "msg_queue.h" -#include "query.h" -#include "txn.h" -#include "wl.h" - -void Thread::heartbeat() { - /* -#if TIME_ENABLE - uint64_t now_time = get_sys_clock(); -#else - uint64_t now_time = get_wall_clock(); -#endif - if (now_time - heartbeat_time >= g_prog_timer) { - printf("Heartbeat %ld %f\n",_thd_id,simulation->seconds_from_start(now_time)); - heartbeat_time = now_time; - } - */ - -} - -void Thread::send_init_done_to_all_nodes() { - for(uint64_t i = 0; i < g_total_node_cnt; i++) { - if(i != g_node_id) { - printf("Send INIT_DONE to %ld\n",i); - msg_queue.enqueue(get_thd_id(),Message::create_message(INIT_DONE),i); - } - } -} - -void Thread::init(uint64_t thd_id, uint64_t node_id, Workload * workload) { - _thd_id = thd_id; - _node_id = node_id; - _wl = workload; - rdm.init(_thd_id); -} - -uint64_t Thread::get_thd_id() { return _thd_id; } -uint64_t Thread::get_node_id() { return _node_id; } - -void Thread::tsetup() { - printf("Setup %ld:%ld\n",_node_id, _thd_id); - fflush(stdout); - pthread_barrier_wait( &warmup_bar ); - - setup(); - - printf("Running %ld:%ld\n",_node_id, _thd_id); - fflush(stdout); - pthread_barrier_wait( &warmup_bar ); - -#if TIME_ENABLE - run_starttime = get_sys_clock(); -#else - run_starttime = get_wall_clock(); -#endif - simulation->set_starttime(run_starttime); - prog_time = run_starttime; - heartbeat_time = run_starttime; - pthread_barrier_wait( &warmup_bar ); - - -} - -void Thread::progress_stats() { - if(get_thd_id() == 0) { -#if TIME_ENABLE - uint64_t now_time = get_sys_clock(); -#else - uint64_t now_time = get_wall_clock(); -#endif - if (now_time - prog_time >= g_prog_timer) { - prog_time = now_time; - SET_STATS(get_thd_id(), total_runtime, prog_time - simulation->run_starttime); - - if(ISCLIENT) { - // stats.print_client(true); - } else { - // stats.print(true); - } - } - } -} diff --git a/contrib/deneva/system/thread.h b/contrib/deneva/system/thread.h deleted file mode 100644 index 4cb50ed0..00000000 --- a/contrib/deneva/system/thread.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _THREAD_H_ -#define _THREAD_H_ - -#include "global.h" - -class Workload; - -class Thread { -public: - virtual ~Thread() {} - void send_init_done_to_all_nodes(); - void progress_stats(); - void heartbeat(); - uint64_t _thd_id; - uint64_t _node_id; - Workload * _wl; - myrand rdm; - uint64_t run_starttime; - - uint64_t get_thd_id(); - uint64_t get_node_id(); - void tsetup(); - - void init(uint64_t thd_id, uint64_t node_id, Workload * workload); - // the following function must be in the form void* (*)(void*) - // to run with pthread. - // conversion is done within the function. - virtual RC run() = 0; - virtual void setup() = 0; - -private: - uint64_t prog_time; - uint64_t heartbeat_time; -}; - -#endif diff --git a/contrib/deneva/system/txn.cpp b/contrib/deneva/system/txn.cpp deleted file mode 100644 index bc976fc7..00000000 --- a/contrib/deneva/system/txn.cpp +++ /dev/null @@ -1,1163 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "helper.h" -#include "txn.h" -#include "row.h" -#include "wl.h" -#include "query.h" -#include "thread.h" -#include "mem_alloc.h" -#include "occ.h" -#include "occ_critical_section.h" -#include "focc.h" -#include "bocc.h" -#include "row_occ.h" -#include "table.h" -#include "catalog.h" -#include "index_btree.h" -#include "index_hash.h" -#include "maat.h" -#include "manager.h" -#include "mem_alloc.h" -#include "message.h" -#include "msg_queue.h" -#include "occ.h" -#include "pool.h" -#include "message.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "pps_query.h" -#include "array.h" -#include "maat.h" -#include "sundial.h" -#include "ssi.h" -#include "wsi.h" -#include "manager.h" - -void TxnStats::init() { - starttime=0; - wait_starttime=get_sys_clock(); - total_process_time=0; - process_time=0; - total_local_wait_time=0; - local_wait_time=0; - total_remote_wait_time=0; - remote_wait_time=0; - total_twopc_time=0; - twopc_time=0; - write_cnt = 0; - abort_cnt = 0; - - total_work_queue_time = 0; - work_queue_time = 0; - total_cc_block_time = 0; - cc_block_time = 0; - total_cc_time = 0; - cc_time = 0; - total_work_queue_cnt = 0; - work_queue_cnt = 0; - total_msg_queue_time = 0; - msg_queue_time = 0; - total_abort_time = 0; - - clear_short(); -} - -void TxnStats::clear_short() { - - work_queue_time_short = 0; - cc_block_time_short = 0; - cc_time_short = 0; - msg_queue_time_short = 0; - process_time_short = 0; - network_time_short = 0; -} - -void TxnStats::reset() { - wait_starttime=get_sys_clock(); - total_process_time += process_time; - process_time = 0; - total_local_wait_time += local_wait_time; - local_wait_time = 0; - total_remote_wait_time += remote_wait_time; - remote_wait_time = 0; - total_twopc_time += twopc_time; - twopc_time = 0; - write_cnt = 0; - - total_work_queue_time += work_queue_time; - work_queue_time = 0; - total_cc_block_time += cc_block_time; - cc_block_time = 0; - total_cc_time += cc_time; - cc_time = 0; - total_work_queue_cnt += work_queue_cnt; - work_queue_cnt = 0; - total_msg_queue_time += msg_queue_time; - msg_queue_time = 0; - - clear_short(); - -} - -void TxnStats::abort_stats(uint64_t thd_id) { - total_process_time += process_time; - total_local_wait_time += local_wait_time; - total_remote_wait_time += remote_wait_time; - total_twopc_time += twopc_time; - total_work_queue_time += work_queue_time; - total_msg_queue_time += msg_queue_time; - total_cc_block_time += cc_block_time; - total_cc_time += cc_time; - total_work_queue_cnt += work_queue_cnt; - assert(total_process_time >= process_time); - - INC_STATS(thd_id,lat_s_rem_work_queue_time,total_work_queue_time); - INC_STATS(thd_id,lat_s_rem_msg_queue_time,total_msg_queue_time); - INC_STATS(thd_id,lat_s_rem_cc_block_time,total_cc_block_time); - INC_STATS(thd_id,lat_s_rem_cc_time,total_cc_time); - INC_STATS(thd_id,lat_s_rem_process_time,total_process_time); -} - -void TxnStats::commit_stats(uint64_t thd_id, uint64_t txn_id, uint64_t batch_id, - uint64_t timespan_long, uint64_t timespan_short) { - total_process_time += process_time; - total_local_wait_time += local_wait_time; - total_remote_wait_time += remote_wait_time; - total_twopc_time += twopc_time; - total_work_queue_time += work_queue_time; - total_msg_queue_time += msg_queue_time; - total_cc_block_time += cc_block_time; - total_cc_time += cc_time; - total_work_queue_cnt += work_queue_cnt; - assert(total_process_time >= process_time); - -#if CC_ALG == CALVIN - - INC_STATS(thd_id,lat_s_loc_work_queue_time,work_queue_time); - INC_STATS(thd_id,lat_s_loc_msg_queue_time,msg_queue_time); - INC_STATS(thd_id,lat_s_loc_cc_block_time,cc_block_time); - INC_STATS(thd_id,lat_s_loc_cc_time,cc_time); - INC_STATS(thd_id,lat_s_loc_process_time,process_time); - // latency from start of transaction at this node - PRINT_LATENCY("lat_l %ld %ld %ld %f %f %f %f %f %f\n", txn_id, batch_id, total_work_queue_cnt, - (double)timespan_long / BILLION, (double)total_work_queue_time / BILLION, - (double)total_msg_queue_time / BILLION, (double)total_cc_block_time / BILLION, - (double)total_cc_time / BILLION, (double)total_process_time / BILLION); -#else - // latency from start of transaction - if (IS_LOCAL(txn_id)) { - INC_STATS(thd_id,lat_l_loc_work_queue_time,total_work_queue_time); - INC_STATS(thd_id,lat_l_loc_msg_queue_time,total_msg_queue_time); - INC_STATS(thd_id,lat_l_loc_cc_block_time,total_cc_block_time); - INC_STATS(thd_id,lat_l_loc_cc_time,total_cc_time); - INC_STATS(thd_id,lat_l_loc_process_time,total_process_time); - INC_STATS(thd_id,lat_l_loc_abort_time,total_abort_time); - - INC_STATS(thd_id,lat_s_loc_work_queue_time,work_queue_time); - INC_STATS(thd_id,lat_s_loc_msg_queue_time,msg_queue_time); - INC_STATS(thd_id,lat_s_loc_cc_block_time,cc_block_time); - INC_STATS(thd_id,lat_s_loc_cc_time,cc_time); - INC_STATS(thd_id,lat_s_loc_process_time,process_time); - - INC_STATS(thd_id,lat_short_work_queue_time,work_queue_time_short); - INC_STATS(thd_id,lat_short_msg_queue_time,msg_queue_time_short); - INC_STATS(thd_id,lat_short_cc_block_time,cc_block_time_short); - INC_STATS(thd_id,lat_short_cc_time,cc_time_short); - INC_STATS(thd_id,lat_short_process_time,process_time_short); - INC_STATS(thd_id,lat_short_network_time,network_time_short); - } else { - INC_STATS(thd_id,lat_l_rem_work_queue_time,total_work_queue_time); - INC_STATS(thd_id,lat_l_rem_msg_queue_time,total_msg_queue_time); - INC_STATS(thd_id,lat_l_rem_cc_block_time,total_cc_block_time); - INC_STATS(thd_id,lat_l_rem_cc_time,total_cc_time); - INC_STATS(thd_id,lat_l_rem_process_time,total_process_time); - } - if (IS_LOCAL(txn_id)) { - PRINT_LATENCY("lat_s %ld %ld %f %f %f %f %f %f\n", txn_id, work_queue_cnt, - (double)timespan_short / BILLION, (double)work_queue_time / BILLION, - (double)msg_queue_time / BILLION, (double)cc_block_time / BILLION, - (double)cc_time / BILLION, (double)process_time / BILLION); - /* - PRINT_LATENCY("lat_l %ld %ld %ld %f %f %f %f %f %f %f\n" - , txn_id - , total_work_queue_cnt - , abort_cnt - , (double) timespan_long / BILLION - , (double) total_work_queue_time / BILLION - , (double) total_msg_queue_time / BILLION - , (double) total_cc_block_time / BILLION - , (double) total_cc_time / BILLION - , (double) total_process_time / BILLION - , (double) total_abort_time / BILLION - ); - */ - } else { - PRINT_LATENCY("lat_rs %ld %ld %f %f %f %f %f %f\n", txn_id, work_queue_cnt, - (double)timespan_short / BILLION, (double)total_work_queue_time / BILLION, - (double)total_msg_queue_time / BILLION, (double)total_cc_block_time / BILLION, - (double)total_cc_time / BILLION, (double)total_process_time / BILLION); - } - /* - if (!IS_LOCAL(txn_id) || timespan_short < timespan_long) { - // latency from most recent start or restart of transaction - PRINT_LATENCY("lat_s %ld %ld %f %f %f %f %f %f\n" - , txn_id - , work_queue_cnt - , (double) timespan_short / BILLION - , (double) work_queue_time / BILLION - , (double) msg_queue_time / BILLION - , (double) cc_block_time / BILLION - , (double) cc_time / BILLION - , (double) process_time / BILLION - ); - } - */ -#endif - - if (!IS_LOCAL(txn_id)) { - return; - } - - INC_STATS(thd_id,txn_total_process_time,total_process_time); - INC_STATS(thd_id,txn_process_time,process_time); - INC_STATS(thd_id,txn_total_local_wait_time,total_local_wait_time); - INC_STATS(thd_id,txn_local_wait_time,local_wait_time); - INC_STATS(thd_id,txn_total_remote_wait_time,total_remote_wait_time); - INC_STATS(thd_id,txn_remote_wait_time,remote_wait_time); - INC_STATS(thd_id,txn_total_twopc_time,total_twopc_time); - INC_STATS(thd_id,txn_twopc_time,twopc_time); - if(write_cnt > 0) { - INC_STATS(thd_id,txn_write_cnt,1); - } - if(abort_cnt > 0) { - INC_STATS(thd_id,unique_txn_abort_cnt,1); - } - -} - - -void Transaction::init() { - timestamp = UINT64_MAX; - start_timestamp = UINT64_MAX; - end_timestamp = UINT64_MAX; - txn_id = UINT64_MAX; - batch_id = UINT64_MAX; - DEBUG_M("Transaction::init array insert_rows\n"); - insert_rows.init(g_max_items_per_txn + 10); - DEBUG_M("Transaction::reset array accesses\n"); - accesses.init(MAX_ROW_PER_TXN); - - reset(0); -} - -void Transaction::reset(uint64_t thd_id) { - release_accesses(thd_id); - accesses.clear(); - //release_inserts(thd_id); - insert_rows.clear(); - write_cnt = 0; - row_cnt = 0; - twopc_state = START; - rc = RCOK; -} - -void Transaction::release_accesses(uint64_t thd_id) { - for(uint64_t i = 0; i < accesses.size(); i++) { - access_pool.put(thd_id,accesses[i]); - } -} - -void Transaction::release_inserts(uint64_t thd_id) { - for(uint64_t i = 0; i < insert_rows.size(); i++) { - row_t * row = insert_rows[i]; -#if CC_ALG != MAAT && CC_ALG != OCC && \ - CC_ALG != SUNDIAL && CC_ALG != BOCC && CC_ALG != FOCC - DEBUG_M("TxnManager::cleanup row->manager free\n"); - mem_allocator.free(row->manager, 0); -#endif - row->free_row(); - DEBUG_M("Transaction::release insert_rows free\n") - row_pool.put(thd_id,row); - } -} - -void Transaction::release(uint64_t thd_id) { - DEBUG("Transaction release\n"); - release_accesses(thd_id); - DEBUG_M("Transaction::release array accesses free\n") - accesses.release(); - release_inserts(thd_id); - DEBUG_M("Transaction::release array insert_rows free\n") - insert_rows.release(); -} - -void TxnManager::init(uint64_t thd_id, Workload * h_wl) { - uint64_t prof_starttime = get_sys_clock(); - if(!txn) { - DEBUG_M("Transaction alloc\n"); - txn_pool.get(thd_id,txn); - - } - INC_STATS(get_thd_id(),mtx[15],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - //txn->init(); - if(!query) { - DEBUG_M("TxnManager::init Query alloc\n"); - qry_pool.get(thd_id,query); - } - INC_STATS(get_thd_id(),mtx[16],get_sys_clock()-prof_starttime); - //query->init(); - //reset(); - sem_init(&rsp_mutex, 0, 1); - return_id = UINT64_MAX; - - this->h_wl = h_wl; -#if CC_ALG == MAAT - uncommitted_writes = new std::set(); - uncommitted_writes_y = new std::set(); - uncommitted_reads = new std::set(); -#endif -#if CC_ALG == SUNDIAL - _is_sub_txn = true; - _min_commit_ts = glob_manager.get_max_cts();; - _num_lock_waits = 0; - _signal_abort = false; - _timestamp = glob_manager.get_ts(get_thd_id()); -#endif -#if CC_ALG == CALVIN - phase = CALVIN_RW_ANALYSIS; - locking_done = false; - calvin_locked_rows.init(MAX_ROW_PER_TXN); -#endif - -#if CC_ALG == SILO - _pre_abort = (g_params["pre_abort"] == "true"); - if (g_params["validation_lock"] == "no-wait") - _validation_no_wait = true; - else if (g_params["validation_lock"] == "waiting") - _validation_no_wait = false; - else - assert(false); - _cur_tid = 0; - num_locks = 0; - memset(write_set, 0, 100); - // write_set = (int *) mem_allocator.alloc(sizeof(int) * 100); -#endif - - registed_ = false; - txn_ready = true; - twopl_wait_start = 0; - - txn_stats.init(); -} - -// reset after abort -void TxnManager::reset() { - lock_ready = false; - lock_ready_cnt = 0; - locking_done = true; - - ready_part = 0; - rsp_cnt = 0; - aborted = false; - return_id = UINT64_MAX; - twopl_wait_start = 0; - - //ready = true; - - // MaaT - greatest_write_timestamp = 0; - greatest_read_timestamp = 0; - commit_timestamp = 0; -#if CC_ALG == MAAT - uncommitted_writes->clear(); - uncommitted_writes_y->clear(); - uncommitted_reads->clear(); -#endif - -#if CC_ALG == CALVIN - phase = CALVIN_RW_ANALYSIS; - locking_done = false; - calvin_locked_rows.clear(); -#endif - - assert(txn); - assert(query); - txn->reset(get_thd_id()); - - // Stats - txn_stats.reset(); -} - -void TxnManager::release() { - uint64_t prof_starttime = get_sys_clock(); - qry_pool.put(get_thd_id(),query); - INC_STATS(get_thd_id(),mtx[0],get_sys_clock()-prof_starttime); - query = NULL; - prof_starttime = get_sys_clock(); - txn_pool.put(get_thd_id(),txn); - INC_STATS(get_thd_id(),mtx[1],get_sys_clock()-prof_starttime); - txn = NULL; - -#if CC_ALG == MAAT - delete uncommitted_writes; - delete uncommitted_writes_y; - delete uncommitted_reads; -#endif - -#if CC_ALG == CALVIN - calvin_locked_rows.release(); -#endif -#if CC_ALG == SILO - num_locks = 0; - memset(write_set, 0, 100); - // mem_allocator.free(write_set, sizeof(int) * 100); -#endif - txn_ready = true; -} - -void TxnManager::reset_query() { -#if WORKLOAD == YCSB - ((YCSBQuery*)query)->reset(); -#elif WORKLOAD == TPCC - ((TPCCQuery*)query)->reset(); -#elif WORKLOAD == PPS - ((PPSQuery*)query)->reset(); -#endif -} - -RC TxnManager::commit() { - DEBUG("Commit %ld\n",get_txn_id()); - release_locks(RCOK); -#if CC_ALG == MAAT - time_table.release(get_thd_id(),get_txn_id()); -#endif - -#if CC_ALG == SUNDIAL - sundial_man.cleanup(RCOK, this); -#endif -#if CC_ALG == SSI - inout_table.set_commit_ts(get_thd_id(), get_txn_id(), get_commit_timestamp()); - inout_table.set_state(get_thd_id(), get_txn_id(), SSI_COMMITTED); -#endif - commit_stats(); -#if LOGGING - LogRecord * record = logger.createRecord(get_txn_id(),L_NOTIFY,0,0); - if(g_repl_cnt > 0) { - msg_queue.enqueue(get_thd_id(), Message::create_message(record, LOG_MSG), - g_node_id + g_node_cnt + g_client_node_cnt); - } - logger.enqueueRecord(record); - return WAIT; -#endif - return Commit; -} - -RC TxnManager::abort() { - if (aborted) return Abort; -#if CC_ALG == SSI - inout_table.set_state(get_thd_id(), get_txn_id(), SSI_ABORTED); - inout_table.clear_Conflict(get_thd_id(), get_txn_id()); -#endif - DEBUG("Abort %ld\n",get_txn_id()); - txn->rc = Abort; - INC_STATS(get_thd_id(),total_txn_abort_cnt,1); - txn_stats.abort_cnt++; - if(IS_LOCAL(get_txn_id())) { - INC_STATS(get_thd_id(), local_txn_abort_cnt, 1); - } else { - INC_STATS(get_thd_id(), remote_txn_abort_cnt, 1); - txn_stats.abort_stats(get_thd_id()); - } - - aborted = true; - release_locks(Abort); -#if CC_ALG == MAAT - //assert(time_table.get_state(get_txn_id()) == MAAT_ABORTED); - time_table.release(get_thd_id(),get_txn_id()); -#endif - - uint64_t timespan = get_sys_clock() - txn_stats.restart_starttime; - if (IS_LOCAL(get_txn_id()) && warmup_done) { - INC_STATS_ARR(get_thd_id(),start_abort_commit_latency, timespan); - } - return Abort; -} - -RC TxnManager::start_abort() { - // ! trans process time - uint64_t prepare_start_time = get_sys_clock(); - txn_stats.prepare_start_time = prepare_start_time; - uint64_t process_time_span = prepare_start_time - txn_stats.restart_starttime; - INC_STATS(get_thd_id(), trans_process_time, process_time_span); - txn->rc = Abort; - DEBUG("%ld start_abort\n",get_txn_id()); - - uint64_t finish_start_time = get_sys_clock(); - txn_stats.finish_start_time = finish_start_time; - uint64_t prepare_timespan = finish_start_time - txn_stats.prepare_start_time; - INC_STATS(get_thd_id(), trans_prepare_time, prepare_timespan); - if(query->partitions_touched.size() > 1) { - send_finish_messages(); - abort(); - return Abort; - } - return abort(); -} - -#ifdef NO_2PC -RC TxnManager::start_commit() { - RC rc = RCOK; - DEBUG("%ld start_commit RO?%d\n",get_txn_id(),query->readonly()); - _is_sub_txn = false; - - rc = validate(); - if(CC_ALG == SSI) { - ssi_man.gene_finish_ts(this); - } - if(CC_ALG == WSI) { - wsi_man.gene_finish_ts(this); - } - if(rc == RCOK) - rc = commit(); - else - start_abort(); - - return rc; -} -#else -RC TxnManager::start_commit() { - // ! trans process time - uint64_t prepare_start_time = get_sys_clock(); - txn_stats.prepare_start_time = prepare_start_time; - uint64_t process_time_span = prepare_start_time - txn_stats.restart_starttime; - INC_STATS(get_thd_id(), trans_process_time, process_time_span); - RC rc = RCOK; - DEBUG("%ld start_commit RO?%d\n",get_txn_id(),query->readonly()); - if(is_multi_part()) { - if(CC_ALG == SUNDIAL) { - rc = validate(); - if (rc != Abort) { - send_prepare_messages(); - rc = WAIT_REM; - } - } else if (!query->readonly() || CC_ALG == OCC || CC_ALG == MAAT || CC_ALG == SILO || CC_ALG == BOCC || CC_ALG == SSI) { - // send prepare messages -#if CC_ALG == FOCC - rc = focc_man.start_critical_section(this); - if (rc != RCOK) return rc; -#elif CC_ALG == BOCC - rc = bocc_man.start_critical_section(this); - if (rc != RCOK) return rc; -#endif - send_prepare_messages(); - rc = WAIT_REM; - } else { - uint64_t finish_start_time = get_sys_clock(); - txn_stats.finish_start_time = finish_start_time; - uint64_t prepare_timespan = finish_start_time - txn_stats.prepare_start_time; - INC_STATS(get_thd_id(), trans_prepare_time, prepare_timespan); - if(CC_ALG == WSI) { - wsi_man.gene_finish_ts(this); - } - send_finish_messages(); - rsp_cnt = 0; - rc = commit(); - } - } else { // is not multi-part -#if CC_ALG == FOCC - rc = focc_man.start_critical_section(this); - if (rc != RCOK) return rc; -#elif CC_ALG == BOCC - rc = bocc_man.start_critical_section(this); - if (rc != RCOK) return rc; -#endif - rc = validate(); - uint64_t finish_start_time = get_sys_clock(); - txn_stats.finish_start_time = finish_start_time; - uint64_t prepare_timespan = finish_start_time - txn_stats.prepare_start_time; - INC_STATS(get_thd_id(), trans_prepare_time, prepare_timespan); - if(CC_ALG == SSI) { - ssi_man.gene_finish_ts(this); - } - if(CC_ALG == WSI) { - wsi_man.gene_finish_ts(this); - } - if(rc == RCOK) - rc = commit(); - else { - txn->rc = Abort; - DEBUG("%ld start_abort\n",get_txn_id()); - if(query->partitions_touched.size() > 1) { - send_finish_messages(); - abort(); - rc = Abort; - } - rc = abort(); - } -#if CC_ALG == FOCC - focc_man.end_critical_section(this); -#elif CC_ALG == BOCC - bocc_man.end_critical_section(this); -#endif - } - return rc; -} -#endif -void TxnManager::send_prepare_messages() { - rsp_cnt = query->partitions_touched.size() - 1; - DEBUG("%ld Send PREPARE messages to %d\n",get_txn_id(),rsp_cnt); - for(uint64_t i = 0; i < query->partitions_touched.size(); i++) { - if(GET_NODE_ID(query->partitions_touched[i]) == g_node_id) { - continue; - } - msg_queue.enqueue(get_thd_id(), Message::create_message(this, RPREPARE), - GET_NODE_ID(query->partitions_touched[i])); - } -} - -void TxnManager::send_finish_messages() { - rsp_cnt = query->partitions_touched.size() - 1; - assert(IS_LOCAL(get_txn_id())); - DEBUG("%ld Send FINISH messages to %d\n",get_txn_id(),rsp_cnt); - for(uint64_t i = 0; i < query->partitions_touched.size(); i++) { - if(GET_NODE_ID(query->partitions_touched[i]) == g_node_id) { - continue; - } - msg_queue.enqueue(get_thd_id(), Message::create_message(this, RFIN), - GET_NODE_ID(query->partitions_touched[i])); - } -} - -int TxnManager::received_response(RC rc) { - assert(txn->rc == RCOK || txn->rc == Abort); - if (txn->rc == RCOK) txn->rc = rc; -#if CC_ALG == CALVIN - ++rsp_cnt; -#else - if (rsp_cnt > 0) { - --rsp_cnt; - } -#endif - return rsp_cnt; -} - -bool TxnManager::waiting_for_response() { return rsp_cnt > 0; } - -bool TxnManager::is_multi_part() { - return query->partitions_touched.size() > 1; - //return query->partitions.size() > 1; -} - -void TxnManager::commit_stats() { - uint64_t commit_time = get_sys_clock(); - uint64_t timespan_short = commit_time - txn_stats.restart_starttime; - uint64_t timespan_long = commit_time - txn_stats.starttime; - INC_STATS(get_thd_id(),total_txn_commit_cnt,1); - - uint64_t warmuptime = get_sys_clock() - simulation->run_starttime; - DEBUG("Commit_stats execute_time %ld warmup_time %ld\n",warmuptime,g_warmup_timer); - if (simulation->is_warmup_done()) - DEBUG("Commit_stats total_txn_commit_cnt %ld\n",stats._stats[get_thd_id()]->total_txn_commit_cnt); - if(!IS_LOCAL(get_txn_id()) && CC_ALG != CALVIN) { - INC_STATS(get_thd_id(),remote_txn_commit_cnt,1); - txn_stats.commit_stats(get_thd_id(), get_txn_id(), get_batch_id(), timespan_long, - timespan_short); - return; - } - - - INC_STATS(get_thd_id(),txn_cnt,1); - INC_STATS(get_thd_id(),local_txn_commit_cnt,1); - INC_STATS(get_thd_id(), txn_run_time, timespan_long); - if(query->partitions_touched.size() > 1) { - INC_STATS(get_thd_id(),multi_part_txn_cnt,1); - INC_STATS(get_thd_id(),multi_part_txn_run_time,timespan_long); - } else { - INC_STATS(get_thd_id(),single_part_txn_cnt,1); - INC_STATS(get_thd_id(),single_part_txn_run_time,timespan_long); - } - /*if(cflt) { - INC_STATS(get_thd_id(),cflt_cnt_txn,1); - }*/ - txn_stats.commit_stats(get_thd_id(),get_txn_id(),get_batch_id(),timespan_long, timespan_short); - #if CC_ALG == CALVIN - return; - #endif - - INC_STATS_ARR(get_thd_id(),start_abort_commit_latency, timespan_short); - INC_STATS_ARR(get_thd_id(),last_start_commit_latency, timespan_short); - INC_STATS_ARR(get_thd_id(),first_start_commit_latency, timespan_long); - - assert(query->partitions_touched.size() > 0); - INC_STATS(get_thd_id(),parts_touched,query->partitions_touched.size()); - INC_STATS(get_thd_id(),part_cnt[query->partitions_touched.size()-1],1); - for(uint64_t i = 0 ; i < query->partitions_touched.size(); i++) { - INC_STATS(get_thd_id(),part_acc[query->partitions_touched[i]],1); - } -} - -void TxnManager::register_thread(Thread * h_thd) { - this->h_thd = h_thd; -#if CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC - this->active_part = GET_PART_ID_FROM_IDX(get_thd_id()); -#endif -} - -void TxnManager::set_txn_id(txnid_t txn_id) { txn->txn_id = txn_id; } - -txnid_t TxnManager::get_txn_id() { return txn->txn_id; } - -Workload *TxnManager::get_wl() { return h_wl; } - -uint64_t TxnManager::get_thd_id() { - if(h_thd) return h_thd->get_thd_id(); - else return 0; -} - -BaseQuery *TxnManager::get_query() { return query; } -void TxnManager::set_query(BaseQuery *qry) { query = qry; } - -void TxnManager::set_timestamp(ts_t timestamp) { txn->timestamp = timestamp; } - -ts_t TxnManager::get_timestamp() { return txn->timestamp; } - -void TxnManager::set_start_timestamp(uint64_t start_timestamp) { - txn->start_timestamp = start_timestamp; -} - -ts_t TxnManager::get_start_timestamp() { return txn->start_timestamp; } - -uint64_t TxnManager::incr_lr() { - //ATOM_ADD(this->rsp_cnt,i); - uint64_t result; - sem_wait(&rsp_mutex); - result = ++this->lock_ready_cnt; - sem_post(&rsp_mutex); - return result; -} - -uint64_t TxnManager::decr_lr() { - //ATOM_SUB(this->rsp_cnt,i); - uint64_t result; - sem_wait(&rsp_mutex); - result = --this->lock_ready_cnt; - sem_post(&rsp_mutex); - return result; -} -uint64_t TxnManager::incr_rsp(int i) { - //ATOM_ADD(this->rsp_cnt,i); - uint64_t result; - sem_wait(&rsp_mutex); - result = ++this->rsp_cnt; - sem_post(&rsp_mutex); - return result; -} - -uint64_t TxnManager::decr_rsp(int i) { - //ATOM_SUB(this->rsp_cnt,i); - uint64_t result; - sem_wait(&rsp_mutex); - result = --this->rsp_cnt; - sem_post(&rsp_mutex); - return result; -} - -void TxnManager::release_last_row_lock() { - assert(txn->row_cnt > 0); - row_t * orig_r = txn->accesses[txn->row_cnt-1]->orig_row; - access_t type = txn->accesses[txn->row_cnt-1]->type; - orig_r->return_row(RCOK, type, this, NULL); - //txn->accesses[txn->row_cnt-1]->orig_row = NULL; -} - -void TxnManager::cleanup_row(RC rc, uint64_t rid) { - access_t type = txn->accesses[rid]->type; - if (type == WR && rc == Abort && CC_ALG != MAAT) { - type = XP; - } - - uint64_t version = 0; - // Handle calvin elsewhere - -#if CC_ALG != CALVIN -#if ISOLATION_LEVEL != READ_UNCOMMITTED - row_t * orig_r = txn->accesses[rid]->orig_row; - if (ROLL_BACK && type == XP && - (CC_ALG == DL_DETECT || CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || CC_ALG == HSTORE || - CC_ALG == HSTORE_SPEC)) { - orig_r->return_row(rc,type, this, txn->accesses[rid]->orig_data); - } else { -#if ISOLATION_LEVEL == READ_COMMITTED - if(type == WR) { - version = orig_r->return_row(rc, type, this, txn->accesses[rid]->data); - } -#else - version = orig_r->return_row(rc, type, this, txn->accesses[rid]->data); -#endif - } -#endif - -#if ROLL_BACK && \ - (CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC) - if (type == WR) { - //printf("free 10 %ld\n",get_txn_id()); - txn->accesses[rid]->orig_data->free_row(); - DEBUG_M("TxnManager::cleanup row_t free\n"); - row_pool.put(get_thd_id(),txn->accesses[rid]->orig_data); - if(rc == RCOK) { - INC_STATS(get_thd_id(),record_write_cnt,1); - ++txn_stats.write_cnt; - } - } -#endif -#endif - if (type == WR) txn->accesses[rid]->version = version; -#if CC_ALG == SUNDIAL - if (_min_commit_ts > glob_manager.get_max_cts()) - glob_manager.set_max_cts(_min_commit_ts); -#endif - -#if CC_ALG != SILO - txn->accesses[rid]->data = NULL; -#endif -} - -void TxnManager::cleanup(RC rc) { -#if CC_ALG == SILO - finish(rc); -#endif -#if CC_ALG == OCC && MODE == NORMAL_MODE - occ_man.finish(rc,this); -#endif -#if CC_ALG == BOCC && MODE == NORMAL_MODE - bocc_man.finish(rc,this); -#endif -#if CC_ALG == FOCC && MODE == NORMAL_MODE - focc_man.finish(rc,this); -#endif -#if (CC_ALG == WSI) && MODE == NORMAL_MODE - wsi_man.finish(rc,this); -#endif - ts_t starttime = get_sys_clock(); - uint64_t row_cnt = txn->accesses.get_count(); - assert(txn->accesses.get_count() == txn->row_cnt); - // assert((WORKLOAD == YCSB && row_cnt <= g_req_per_query) || (WORKLOAD == TPCC && row_cnt <= - // g_max_items_per_txn*2 + 3)); - - DEBUG("Cleanup %ld %ld\n",get_txn_id(),row_cnt); - for (int rid = row_cnt - 1; rid >= 0; rid --) { - cleanup_row(rc,rid); - } - -#if CC_ALG == CALVIN - // cleanup locked rows - for (uint64_t i = 0; i < calvin_locked_rows.size(); i++) { - row_t * row = calvin_locked_rows[i]; - row->return_row(rc,RD,this,row); - } -#endif - - if (rc == Abort) { - txn->release_inserts(get_thd_id()); - txn->insert_rows.clear(); - - INC_STATS(get_thd_id(), abort_time, get_sys_clock() - starttime); - } -} - -RC TxnManager::get_lock(row_t * row, access_t type) { - if (calvin_locked_rows.contains(row)) { - return RCOK; - } - calvin_locked_rows.add(row); - RC rc = row->get_lock(type, this); - if(rc == WAIT) { - INC_STATS(get_thd_id(), txn_wait_cnt, 1); - } - return rc; -} - -RC TxnManager::get_row(row_t * row, access_t type, row_t *& row_rtn) { - uint64_t starttime = get_sys_clock(); - uint64_t timespan; - RC rc = RCOK; - DEBUG_M("TxnManager::get_row access alloc\n"); - Access * access = NULL; - this->last_row = row; - this->last_type = type; - -#if CC_ALG == SUNDIAL - bool isexist = false; - uint64_t size = get_write_set_size(); - size += get_read_set_size(); - - for (uint64_t i = 0; i < size; i++) { - if (txn->accesses[i]->orig_row == row) { - access = txn->accesses[i]; - access->orig_row->get_ts(access->orig_wts, access->orig_rts); - isexist = true; - break; - } - } - if (!access) { - access_pool.get(get_thd_id(),access); - rc = row->get_row(type, this, access->data, access->orig_wts, access->orig_rts); - if (!OCC_WAW_LOCK || type == RD) { - _min_commit_ts = _min_commit_ts > access->orig_wts ? _min_commit_ts : access->orig_wts; - } else { - if (rc == WAIT) ATOM_ADD_FETCH(_num_lock_waits, 1); - if (rc == Abort || rc == WAIT) return rc; - } - } - if (!OCC_WAW_LOCK || type == RD) { - access->locked = false; - } else { - _min_commit_ts = _min_commit_ts > access->orig_rts + 1 ? _min_commit_ts : access->orig_rts + 1; - access->locked = true; - } -#else - access_pool.get(get_thd_id(),access); -#endif - -#if CC_ALG != SUNDIAL - rc = row->get_row(type, this, access); -#endif -#if CC_ALG == FOCC - focc_man.active_storage(type, this, access); -#endif - if (rc == Abort || rc == WAIT) { - row_rtn = NULL; - DEBUG_M("TxnManager::get_row(abort) access free\n"); - access_pool.put(get_thd_id(),access); - timespan = get_sys_clock() - starttime; - INC_STATS(get_thd_id(), txn_manager_time, timespan); - INC_STATS(get_thd_id(), txn_conflict_cnt, 1); - -#if DEBUG_TIMELINE - printf("CONFLICT %ld %ld\n",get_txn_id(),get_sys_clock()); -#endif - return rc; - } - access->type = type; - access->orig_row = row; -#if CC_ALG == SILO - access->tid = last_tid; -#endif - -#if ROLL_BACK && (CC_ALG == DL_DETECT || CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE || \ - CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC) - if (type == WR) { - - uint64_t part_id = row->get_part_id(); - DEBUG_M("TxnManager::get_row row_t alloc\n") - row_pool.get(get_thd_id(),access->orig_data); - access->orig_data->init(row->get_table(), part_id, 0); - access->orig_data->copy(row); - assert(access->orig_data->get_schema() == row->get_schema()); - - // ARIES-style physiological logging -#if LOGGING - LogRecord *record = logger.createRecord( - get_txn_id(), L_UPDATE, row->get_table()->get_table_id(), row->get_primary_key()); - if(g_repl_cnt > 0) { - msg_queue.enqueue(get_thd_id(), Message::create_message(record, LOG_MSG), - g_node_id + g_node_cnt + g_client_node_cnt); - } - logger.enqueueRecord(record); -#endif - } -#endif - -#if CC_ALG == SUNDIAL - if (!isexist) { - ++txn->row_cnt; - if (type == WR) ++txn->write_cnt; - txn->accesses.add(access); - } -#else - ++txn->row_cnt; - if (type == WR) ++txn->write_cnt; - txn->accesses.add(access); -#endif - - timespan = get_sys_clock() - starttime; - INC_STATS(get_thd_id(), txn_manager_time, timespan); - row_rtn = access->data; - - if (CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC || CC_ALG == CALVIN) assert(rc == RCOK); - assert(rc == RCOK); - return rc; -} - -RC TxnManager::get_row_post_wait(row_t *& row_rtn) { - assert(CC_ALG != HSTORE && CC_ALG != HSTORE_SPEC); - - uint64_t starttime = get_sys_clock(); - row_t * row = this->last_row; - access_t type = this->last_type; - assert(row != NULL); - DEBUG_M("TxnManager::get_row_post_wait access alloc\n") - Access * access; - access_pool.get(get_thd_id(),access); - - row->get_row_post_wait(type,this,access->data); - - access->type = type; - access->orig_row = row; -#if ROLL_BACK && (CC_ALG == DL_DETECT || CC_ALG == NO_WAIT || CC_ALG == WAIT_DIE) - if (type == WR) { - uint64_t part_id = row->get_part_id(); - DEBUG_M("TxnManager::get_row_post_wait row_t alloc\n") - row_pool.get(get_thd_id(),access->orig_data); - access->orig_data->init(row->get_table(), part_id, 0); - access->orig_data->copy(row); - } -#endif - - ++txn->row_cnt; - if (type == WR) ++txn->write_cnt; - txn->accesses.add(access); - uint64_t timespan = get_sys_clock() - starttime; - INC_STATS(get_thd_id(), txn_manager_time, timespan); - this->last_row_rtn = access->data; - row_rtn = access->data; - return RCOK; -} - -// This function is useless -void TxnManager::insert_row(row_t * row, table_t * table) { - if (CC_ALG == HSTORE || CC_ALG == HSTORE_SPEC) return; - assert(txn->insert_rows.size() < MAX_ROW_PER_TXN); - txn->insert_rows.add(row); -} - -itemid_t *TxnManager::index_read(INDEX *index, idx_key_t key, int part_id) { - uint64_t starttime = get_sys_clock(); - - itemid_t * item; - index->index_read(key, item, part_id, get_thd_id()); - - uint64_t t = get_sys_clock() - starttime; - INC_STATS(get_thd_id(), txn_index_time, t); - - return item; -} - -itemid_t *TxnManager::index_read(INDEX *index, idx_key_t key, int part_id, int count) { - uint64_t starttime = get_sys_clock(); - - itemid_t * item; - index->index_read(key, count, item, part_id); - - uint64_t t = get_sys_clock() - starttime; - INC_STATS(get_thd_id(), txn_index_time, t); - - return item; -} - -RC TxnManager::validate() { -#if MODE != NORMAL_MODE - return RCOK; -#endif - if (CC_ALG != OCC && CC_ALG != MAAT && - CC_ALG != SUNDIAL && CC_ALG != BOCC && CC_ALG != FOCC && CC_ALG != WSI && - CC_ALG != SSI && CC_ALG != SILO) { - return RCOK; - } - RC rc = RCOK; - uint64_t starttime = get_sys_clock(); - if (CC_ALG == OCC && rc == RCOK) rc = occ_man.validate(this); - if(CC_ALG == BOCC && rc == RCOK) rc = bocc_man.validate(this); - if(CC_ALG == FOCC && rc == RCOK) rc = focc_man.validate(this); - if(CC_ALG == SSI && rc == RCOK) rc = ssi_man.validate(this); - if(CC_ALG == WSI && rc == RCOK) rc = wsi_man.validate(this); - if(CC_ALG == MAAT && rc == RCOK) { - rc = maat_man.validate(this); - // Note: home node must be last to validate - if(IS_LOCAL(get_txn_id()) && rc == RCOK) { - rc = maat_man.find_bound(this); - } - } - if(CC_ALG == SUNDIAL && rc == RCOK) { - rc = sundial_man.validate(this); - } -#if CC_ALG == SILO - if(CC_ALG == SILO && rc == RCOK) { - rc = validate_silo(); - if(IS_LOCAL(get_txn_id()) && rc == RCOK) { - _cur_tid ++; - commit_timestamp = _cur_tid; - DEBUG("Validate success: %ld, cts: %ld \n", get_txn_id(), commit_timestamp); - } - } -#endif - INC_STATS(get_thd_id(),txn_validate_time,get_sys_clock() - starttime); - INC_STATS(get_thd_id(),trans_validate_time,get_sys_clock() - starttime); - return rc; -} - -RC TxnManager::send_remote_reads() { - assert(CC_ALG == CALVIN); -#if !YCSB_ABORT_MODE && WORKLOAD == YCSB - return RCOK; -#endif - assert(query->active_nodes.size() == g_node_cnt); - for(uint64_t i = 0; i < query->active_nodes.size(); i++) { - if (i == g_node_id) continue; - if(query->active_nodes[i] == 1) { - DEBUG("(%ld,%ld) send_remote_read to %ld\n",get_txn_id(),get_batch_id(),i); - msg_queue.enqueue(get_thd_id(),Message::create_message(this,RFWD),i); - } - } - return RCOK; - -} - -bool TxnManager::calvin_exec_phase_done() { - bool ready = (phase == CALVIN_DONE) && (get_rc() != WAIT); - if(ready) { - DEBUG("(%ld,%ld) calvin exec phase done!\n",txn->txn_id,txn->batch_id); - } - return ready; -} - -bool TxnManager::calvin_collect_phase_done() { - bool ready = (phase == CALVIN_COLLECT_RD) && (get_rsp_cnt() == calvin_expected_rsp_cnt); - if(ready) { - DEBUG("(%ld,%ld) calvin collect phase done!\n",txn->txn_id,txn->batch_id); - } - return ready; -} - -void TxnManager::release_locks(RC rc) { - uint64_t starttime = get_sys_clock(); - - cleanup(rc); - - uint64_t timespan = (get_sys_clock() - starttime); - INC_STATS(get_thd_id(), txn_cleanup_time, timespan); -} diff --git a/contrib/deneva/system/txn.h b/contrib/deneva/system/txn.h deleted file mode 100644 index d8a8ddd4..00000000 --- a/contrib/deneva/system/txn.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TXN_H_ -#define _TXN_H_ - -#include "global.h" -#include "helper.h" -#include "semaphore.h" -#include "array.h" -#include "transport/message.h" -//#include "wl.h" - -class Workload; -class Thread; -class row_t; -class table_t; -class BaseQuery; -class INDEX; -class TxnQEntry; -class YCSBQuery; -class TPCCQuery; -//class r_query; - -enum TxnState {START,INIT,EXEC,PREP,FIN,DONE}; - -class Access { -public: - access_t type; - row_t * orig_row; - row_t * data; - row_t * orig_data; - uint64_t version; -#if CC_ALG == SUNDIAL - uint64_t orig_wts; - uint64_t orig_rts; - bool locked; -#endif -#if CC_ALG == SILO - ts_t tid; - // ts_t epoch; -#endif - void cleanup(); -}; - -class Transaction { -public: - void init(); - void reset(uint64_t thd_id); - void release_accesses(uint64_t thd_id); - void release_inserts(uint64_t thd_id); - void release(uint64_t thd_id); - //vector accesses; - Array accesses; - uint64_t timestamp; - // For OCC and SSI - uint64_t start_timestamp; - uint64_t end_timestamp; - - uint64_t write_cnt; - uint64_t row_cnt; - // Internal state - TxnState twopc_state; - Array insert_rows; - txnid_t txn_id; - uint64_t batch_id; - RC rc; -}; - -class TxnStats { -public: - void init(); - void clear_short(); - void reset(); - void abort_stats(uint64_t thd_id); - void commit_stats(uint64_t thd_id, uint64_t txn_id, uint64_t batch_id, uint64_t timespan_long, - uint64_t timespan_short); - uint64_t starttime; - uint64_t restart_starttime; - uint64_t wait_starttime; - uint64_t write_cnt; - uint64_t abort_cnt; - uint64_t prepare_start_time; - uint64_t finish_start_time; - double total_process_time; - double process_time; - double total_local_wait_time; - double local_wait_time; - double total_remote_wait_time; // time waiting for a remote response, to help calculate network - // time - double remote_wait_time; - double total_twopc_time; - double twopc_time; - double total_abort_time; // time spent in aborted query land - double total_msg_queue_time; // time spent on outgoing queue - double msg_queue_time; - double total_work_queue_time; // time spent on work queue - double work_queue_time; - double total_cc_block_time; // time spent blocking on a cc resource - double cc_block_time; - double total_cc_time; // time spent actively doing cc - double cc_time; - uint64_t total_work_queue_cnt; - uint64_t work_queue_cnt; - - // short stats - double work_queue_time_short; - double cc_block_time_short; - double cc_time_short; - double msg_queue_time_short; - double process_time_short; - double network_time_short; - - double lat_network_time_start; - double lat_other_time_start; -}; - -/* - Execution of transactions - Manipulates/manages Transaction (contains txn-specific data) - Maintains BaseQuery (contains input args, info about query) - */ -class TxnManager { -public: - virtual ~TxnManager() {} - virtual void init(uint64_t thd_id,Workload * h_wl); - virtual void reset(); - void clear(); - void reset_query(); - void release(); - Thread * h_thd; - Workload * h_wl; - - virtual RC run_txn() = 0; - virtual RC run_txn_post_wait() = 0; - virtual RC run_calvin_txn() = 0; - virtual RC acquire_locks() = 0; - void register_thread(Thread * h_thd); - uint64_t get_thd_id(); - Workload * get_wl(); - void set_txn_id(txnid_t txn_id); - txnid_t get_txn_id(); - void set_query(BaseQuery * qry); - BaseQuery * get_query(); - bool is_done(); - void commit_stats(); - bool is_multi_part(); - - void set_timestamp(ts_t timestamp); - ts_t get_timestamp(); - void set_start_timestamp(uint64_t start_timestamp); - ts_t get_start_timestamp(); - uint64_t get_rsp_cnt() {return rsp_cnt;} - uint64_t incr_rsp(int i); - uint64_t decr_rsp(int i); - uint64_t incr_lr(); - uint64_t decr_lr(); - - RC commit(); - RC start_commit(); - RC start_abort(); - RC abort(); - - void release_locks(RC rc); - bool isRecon() { - assert(CC_ALG == CALVIN || !recon); - return recon; - }; - bool recon; - - row_t * volatile cur_row; - // [DL_DETECT, NO_WAIT, WAIT_DIE] - int volatile lock_ready; - // [TIMESTAMP, MVCC] - bool volatile ts_ready; - // [HSTORE, HSTORE_SPEC] - int volatile ready_part; - int volatile ready_ulk; - -#if CC_ALG == SILO - ts_t last_tid; - ts_t max_tid; - uint64_t num_locks; - // int* write_set; - int write_set[100]; - int* read_set; - RC find_tid_silo(ts_t max_tid); - RC finish(RC rc); -#endif - - bool aborted; - uint64_t return_id; - RC validate(); - void cleanup(RC rc); - void cleanup_row(RC rc,uint64_t rid); - void release_last_row_lock(); - RC send_remote_reads(); - void set_end_timestamp(uint64_t timestamp) {txn->end_timestamp = timestamp;} - uint64_t get_end_timestamp() {return txn->end_timestamp;} - uint64_t get_access_cnt() {return txn->row_cnt;} - uint64_t get_write_set_size() {return txn->write_cnt;} - uint64_t get_read_set_size() {return txn->row_cnt - txn->write_cnt;} - access_t get_access_type(uint64_t access_id) {return txn->accesses[access_id]->type;} - uint64_t get_access_version(uint64_t access_id) { return txn->accesses[access_id]->version; } - row_t * get_access_original_row(uint64_t access_id) {return txn->accesses[access_id]->orig_row;} - void swap_accesses(uint64_t a, uint64_t b) { txn->accesses.swap(a, b); } - uint64_t get_batch_id() {return txn->batch_id;} - void set_batch_id(uint64_t batch_id) {txn->batch_id = batch_id;} - - // For MaaT - uint64_t commit_timestamp; - uint64_t get_commit_timestamp() {return commit_timestamp;} - void set_commit_timestamp(uint64_t timestamp) {commit_timestamp = timestamp;} - uint64_t greatest_write_timestamp; - uint64_t greatest_read_timestamp; - std::set * uncommitted_reads; - std::set * uncommitted_writes; - std::set * uncommitted_writes_y; - - uint64_t twopl_wait_start; - - // For Sundial - uint64_t _min_commit_ts; - uint64_t _max_commit_ts; - volatile uint32_t _num_lock_waits; - bool _signal_abort; - bool _is_sub_txn; - - uint64_t _timestamp; - uint64_t get_priority() { return _timestamp; } - // debug time - uint64_t _start_wait_time; - uint64_t _lock_acquire_time; - uint64_t _lock_acquire_time_commit; - uint64_t _lock_acquire_time_abort; - //////////////////////////////// - // LOGGING - //////////////////////////////// - // void gen_log_entry(int &length, void * log); - bool log_flushed; - bool repl_finished; - Transaction * txn; - BaseQuery * query; - uint64_t client_startts; - uint64_t client_id; - uint64_t get_abort_cnt() {return abort_cnt;} - uint64_t abort_cnt; - int received_response(RC rc); - bool waiting_for_response(); - RC get_rc() {return txn->rc;} - void set_rc(RC rc) {txn->rc = rc;} - //void send_rfin_messages(RC rc) {assert(false);} - void send_finish_messages(); - void send_prepare_messages(); - - TxnStats txn_stats; - - bool set_ready() {return ATOM_CAS(txn_ready,0,1);} - bool unset_ready() {return ATOM_CAS(txn_ready,1,0);} - bool is_ready() {return txn_ready == true;} - volatile int txn_ready; - // Calvin - uint32_t lock_ready_cnt; - uint32_t calvin_expected_rsp_cnt; - bool locking_done; - CALVIN_PHASE phase; - Array calvin_locked_rows; - bool calvin_exec_phase_done(); - bool calvin_collect_phase_done(); - - int last_batch_id; - int last_txn_id; - Message* last_msg; - - -protected: - - int rsp_cnt; - void insert_row(row_t * row, table_t * table); - - itemid_t * index_read(INDEX * index, idx_key_t key, int part_id); - itemid_t * index_read(INDEX * index, idx_key_t key, int part_id, int count); - RC get_lock(row_t * row, access_t type); - RC get_row(row_t * row, access_t type, row_t *& row_rtn); - RC get_row_post_wait(row_t *& row_rtn); - - // For Waiting - row_t * last_row; - row_t * last_row_rtn; - access_t last_type; - - sem_t rsp_mutex; - bool registed_; -#if CC_ALG == SILO - bool _pre_abort; - bool _validation_no_wait; - ts_t _cur_tid; - RC validate_silo(); -#endif -}; - -#endif - diff --git a/contrib/deneva/system/txn_table.cpp b/contrib/deneva/system/txn_table.cpp deleted file mode 100644 index 584a01d4..00000000 --- a/contrib/deneva/system/txn_table.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "txn_table.h" - -#include "global.h" -#include "mem_alloc.h" -#include "message.h" -#include "pool.h" -#include "query.h" -#include "row.h" -#include "tpcc.h" -#include "tpcc_query.h" -#include "txn.h" -#include "work_queue.h" -#include "ycsb.h" -#include "ycsb_query.h" - -void TxnTable::init() { - //pool_size = g_inflight_max * g_node_cnt * 2 + 1; - pool_size = g_inflight_max + 1; - DEBUG_M("TxnTable::init pool_node alloc\n"); - pool = (pool_node **) mem_allocator.align_alloc(sizeof(pool_node*) * pool_size); - for(uint32_t i = 0; i < pool_size;i++) { - pool[i] = (pool_node *) mem_allocator.align_alloc(sizeof(struct pool_node)); - pool[i]->head = NULL; - pool[i]->tail = NULL; - pool[i]->cnt = 0; - pool[i]->modify = false; - pool[i]->min_ts = UINT64_MAX; - } -} - -void TxnTable::dump() { - for(uint64_t i = 0; i < pool_size;i++) { - if (pool[i]->cnt == 0) continue; - txn_node_t t_node = pool[i]->head; - - while (t_node != NULL) { - printf("TT (%ld,%ld)\n", t_node->txn_man->get_txn_id(), t_node->txn_man->get_batch_id()); - t_node = t_node->next; - } - } -} - -bool TxnTable::is_matching_txn_node(txn_node_t t_node, uint64_t txn_id, uint64_t batch_id){ - assert(t_node); -#if CC_ALG == CALVIN - return (t_node->txn_man->get_txn_id() == txn_id && t_node->txn_man->get_batch_id() == batch_id); -#else - return (t_node->txn_man->get_txn_id() == txn_id); -#endif -} - -void TxnTable::update_min_ts(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id,uint64_t ts){ - uint64_t pool_id = txn_id % pool_size; - while (!ATOM_CAS(pool[pool_id]->modify, false, true)) { - }; - if (ts < pool[pool_id]->min_ts) pool[pool_id]->min_ts = ts; - ATOM_CAS(pool[pool_id]->modify,true,false); -} - -TxnManager * TxnTable::get_transaction_manager(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id){ - DEBUG("TxnTable::get_txn_manager %ld / %ld\n",txn_id,pool_size); - uint64_t starttime = get_sys_clock(); - uint64_t pool_id = txn_id % pool_size; - - uint64_t mtx_starttime = starttime; - // set modify bit for this pool: txn_id % pool_size - while (!ATOM_CAS(pool[pool_id]->modify, false, true)) { - }; - INC_STATS(thd_id,mtx[7],get_sys_clock()-mtx_starttime); - - txn_node_t t_node = pool[pool_id]->head; - TxnManager * txn_man = NULL; - - uint64_t prof_starttime = get_sys_clock(); - while (t_node != NULL) { - if(is_matching_txn_node(t_node,txn_id,batch_id)) { - txn_man = t_node->txn_man; - break; - } - t_node = t_node->next; - } - INC_STATS(thd_id,mtx[20],get_sys_clock()-prof_starttime); - - - if(!txn_man) { - prof_starttime = get_sys_clock(); - - txn_table_pool.get(thd_id,t_node); - - INC_STATS(thd_id,mtx[21],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - - txn_man_pool.get(thd_id,txn_man); - - INC_STATS(thd_id,mtx[22],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - - txn_man->set_txn_id(txn_id); - txn_man->set_batch_id(batch_id); - t_node->txn_man = txn_man; - txn_man->txn_stats.starttime = get_sys_clock(); - txn_man->txn_stats.restart_starttime = txn_man->txn_stats.starttime; - LIST_PUT_TAIL(pool[pool_id]->head,pool[pool_id]->tail,t_node); - - INC_STATS(thd_id,mtx[23],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - - ++pool[pool_id]->cnt; - if(pool[pool_id]->cnt > 1) { - INC_STATS(thd_id,txn_table_cflt_cnt,1); - INC_STATS(thd_id,txn_table_cflt_size,pool[pool_id]->cnt-1); - } - INC_STATS(thd_id,txn_table_new_cnt,1); - INC_STATS(thd_id,mtx[24],get_sys_clock()-prof_starttime); - } - -#if CC_ALG == MVCC - if(txn_man->get_timestamp() < pool[pool_id]->min_ts) - pool[pool_id]->min_ts = txn_man->get_timestamp(); -#endif - - - // unset modify bit for this pool: txn_id % pool_size - ATOM_CAS(pool[pool_id]->modify,true,false); - - INC_STATS(thd_id,txn_table_get_time,get_sys_clock() - starttime); - INC_STATS(thd_id,txn_table_get_cnt,1); - return txn_man; -} - -void TxnTable::restart_txn(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id){ - uint64_t pool_id = txn_id % pool_size; - // set modify bit for this pool: txn_id % pool_size - while (!ATOM_CAS(pool[pool_id]->modify, false, true)) { - }; - - txn_node_t t_node = pool[pool_id]->head; - - while (t_node != NULL) { - if(is_matching_txn_node(t_node,txn_id,batch_id)) { -#if CC_ALG == CALVIN - work_queue.enqueue(thd_id,Message::create_message(t_node->txn_man,RTXN),false); -#else - if(IS_LOCAL(txn_id)) - work_queue.enqueue(thd_id,Message::create_message(t_node->txn_man,RTXN_CONT),false); - else - work_queue.enqueue(thd_id,Message::create_message(t_node->txn_man,RQRY_CONT),false); -#endif - break; - } - t_node = t_node->next; - } - - // unset modify bit for this pool: txn_id % pool_size - ATOM_CAS(pool[pool_id]->modify,true,false); - -} - -void TxnTable::release_transaction_manager(uint64_t thd_id, uint64_t txn_id, uint64_t batch_id){ - uint64_t starttime = get_sys_clock(); - - uint64_t pool_id = txn_id % pool_size; - uint64_t mtx_starttime = starttime; - // set modify bit for this pool: txn_id % pool_size - while (!ATOM_CAS(pool[pool_id]->modify, false, true)) { - }; - INC_STATS(thd_id,mtx[8],get_sys_clock()-mtx_starttime); - - txn_node_t t_node = pool[pool_id]->head; - -#if CC_ALG == MVCC - uint64_t min_ts = UINT64_MAX; - txn_node_t saved_t_node = NULL; -#endif - - uint64_t prof_starttime = get_sys_clock(); - while (t_node != NULL) { - if(is_matching_txn_node(t_node,txn_id,batch_id)) { - LIST_REMOVE_HT(t_node,pool[txn_id % pool_size]->head,pool[txn_id % pool_size]->tail); - --pool[pool_id]->cnt; -#if CC_ALG == MVCC - saved_t_node = t_node; - t_node = t_node->next; - continue; -#else - break; -#endif - } -#if CC_ALG == MVCC - if (t_node->txn_man->get_timestamp() < min_ts) min_ts = t_node->txn_man->get_timestamp(); -#endif - t_node = t_node->next; - } - INC_STATS(thd_id,mtx[25],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - -#if CC_ALG == MVCC - t_node = saved_t_node; - pool[pool_id]->min_ts = min_ts; -#endif - - // unset modify bit for this pool: txn_id % pool_size - ATOM_CAS(pool[pool_id]->modify,true,false); - - prof_starttime = get_sys_clock(); - assert(t_node); - assert(t_node->txn_man); - - txn_man_pool.put(thd_id,t_node->txn_man); - - INC_STATS(thd_id,mtx[26],get_sys_clock()-prof_starttime); - prof_starttime = get_sys_clock(); - - txn_table_pool.put(thd_id,t_node); - INC_STATS(thd_id,mtx[27],get_sys_clock()-prof_starttime); - - - INC_STATS(thd_id,txn_table_release_time,get_sys_clock() - starttime); - INC_STATS(thd_id,txn_table_release_cnt,1); - -} - -uint64_t TxnTable::get_min_ts(uint64_t thd_id) { - uint64_t starttime = get_sys_clock(); - uint64_t min_ts = UINT64_MAX; - for(uint64_t i = 0 ; i < pool_size; i++) { - uint64_t pool_min_ts = pool[i]->min_ts; - if (pool_min_ts < min_ts) min_ts = pool_min_ts; - } - - INC_STATS(thd_id,txn_table_min_ts_time,get_sys_clock() - starttime); - return min_ts; - -} - diff --git a/contrib/deneva/system/txn_table.h b/contrib/deneva/system/txn_table.h deleted file mode 100644 index bd12293a..00000000 --- a/contrib/deneva/system/txn_table.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TXN_TABLE_H_ -#define _TXN_TABLE_H_ - -#include "global.h" -#include "helper.h" - -class TxnManager; -class BaseQuery; -class row_t; - -struct txn_node { - txn_node() { - next = NULL; - prev = NULL; - } - ~txn_node() {} - TxnManager * txn_man; - uint64_t return_id; // Client ID or Home partition ID - uint64_t client_startts; // For sequencer - uint64_t abort_penalty; - txn_node * next; - txn_node * prev; - -}; - -typedef txn_node * txn_node_t; - - -struct pool_node { -public: - txn_node_t head; - txn_node_t tail; - volatile bool modify; - uint64_t cnt; - uint64_t min_ts; - -}; -typedef pool_node * pool_node_t; - -class TxnTable { -public: - void init(); - TxnManager* get_transaction_manager(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id); - void dump(); - void restart_txn(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id); - void release_transaction_manager(uint64_t thd_id, uint64_t txn_id, uint64_t batch_id); - void update_min_ts(uint64_t thd_id, uint64_t txn_id,uint64_t batch_id,uint64_t ts); - uint64_t get_min_ts(uint64_t thd_id); - -private: - bool is_matching_txn_node(txn_node_t t_node, uint64_t txn_id, uint64_t batch_id); - - // TxnMap pool; - uint64_t pool_size; - pool_node ** pool; - -}; - -#endif diff --git a/contrib/deneva/system/wl.cpp b/contrib/deneva/system/wl.cpp deleted file mode 100644 index f326e46c..00000000 --- a/contrib/deneva/system/wl.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "wl.h" -#include "config.h" -#include "catalog.h" -#include "global.h" -#include "helper.h" -#include "index_btree.h" -#include "index_hash.h" -#include "mem_alloc.h" -#include "row.h" -#include "table.h" - -RC Workload::init() { return RCOK; } - -RC Workload::init_schema(const char * schema_file) { - assert(sizeof(uint64_t) == 8); - assert(sizeof(double) == 8); - string line; - uint32_t id = 0; - ifstream fin(schema_file); - Catalog * schema; - while (getline(fin, line)) { - if (line.compare(0, 6, "TABLE=") == 0) { - string tname(&line[6]); - void * tmp = new char[CL_SIZE * 2 + sizeof(Catalog)]; - schema = (Catalog *) ((UInt64)tmp + CL_SIZE); - getline(fin, line); - cout<<"Init table "< lines; - while (line.length() > 1) { - lines.push_back(line); - cout<init( tname.c_str(), id++, lines.size() ); - for (UInt32 i = 0; i < lines.size(); i++) { - string line = lines[i]; - vector items; - - char * line_cstr = new char [line.length()+1]; - strcpy(line_cstr,line.c_str()); - int size = atoi(strtok(line_cstr,",")); - char * type = strtok(NULL,","); - char * name = strtok(NULL,","); - - schema->add_col(name, size, type); - col_count ++; - } - tmp = new char[CL_SIZE * 2 + sizeof(table_t)]; - table_t * cur_tab = (table_t *) ((UInt64)tmp + CL_SIZE); - cur_tab->init(schema); - tables[tname] = cur_tab; - } else if (!line.compare(0, 6, "INDEX=")) { - string iname(&line[6]); - getline(fin, line); - cout<<"Init index "< items; - string token; - size_t pos; - while (line.length() != 0) { - pos = line.find(","); // != std::string::npos) { - if (pos == string::npos) pos = line.length(); - token = line.substr(0, pos); - items.push_back(token); - line.erase(0, pos + 1); - cout<<"token "<init(1024, tables[tname], table_size); -#else - index->init(part_cnt, tables[tname]); -#endif - indexes[iname] = index; - printf("iname:%s init over\n",iname.c_str()); - } - } - fin.close(); - return RCOK; -} -//add by ym origin function mark -void Workload::index_delete_all() { - #if WORKLOAD ==DA - for (auto index :indexes) { - index.second->index_reset(); - } - #endif -} - -void Workload::index_insert(string index_name, uint64_t key, row_t * row) { - assert(false); - INDEX * index = (INDEX *) indexes[index_name]; - index_insert(index, key, row); -} - -void Workload::index_insert(INDEX * index, uint64_t key, row_t * row, int64_t part_id) { - uint64_t pid = part_id; - if (part_id == -1) pid = get_part_id(row); - itemid_t *m_item = (itemid_t *)mem_allocator.alloc(sizeof(itemid_t)); - m_item->init(); - m_item->type = DT_row; - m_item->location = row; - m_item->valid = true; - - assert(index); - assert( index->index_insert(key, m_item, pid) == RCOK ); -} - -void Workload::index_insert_nonunique(INDEX * index, uint64_t key, row_t * row, int64_t part_id) { - uint64_t pid = part_id; - if (part_id == -1) pid = get_part_id(row); - itemid_t *m_item = (itemid_t *)mem_allocator.alloc(sizeof(itemid_t)); - m_item->init(); - m_item->type = DT_row; - m_item->location = row; - m_item->valid = true; - - assert(index); - assert( index->index_insert_nonunique(key, m_item, pid) == RCOK ); -} diff --git a/contrib/deneva/system/wl.h b/contrib/deneva/system/wl.h deleted file mode 100644 index 21c03f9a..00000000 --- a/contrib/deneva/system/wl.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _WORKLOAD_H_ -#define _WORKLOAD_H_ - -#include "global.h" - -class row_t; -class table_t; -class IndexHash; -class index_btree; -class Catalog; -class lock_man; -class TxnManager; -class Thread; -class index_base; -class Timestamp; -class Mvcc; - -class Workload -{ -public: - // tables indexed by table name - map tables; - map indexes; - - void index_delete_all(); - - // FOR TPCC - // initialize the tables and indexes. - virtual RC init(); - virtual RC init_schema(const char * schema_file); - virtual RC init_table()=0; - virtual RC get_txn_man(TxnManager *& txn_manager)=0; - - uint64_t done_cnt; - uint64_t txn_cnt; -protected: - void index_insert(string index_name, uint64_t key, row_t * row); - void index_insert(INDEX * index, uint64_t key, row_t * row, int64_t part_id = -1); - void index_insert_nonunique(INDEX * index, uint64_t key, row_t * row, int64_t part_id = -1); -}; - -#endif diff --git a/contrib/deneva/system/work_queue.cpp b/contrib/deneva/system/work_queue.cpp deleted file mode 100644 index 70bb675d..00000000 --- a/contrib/deneva/system/work_queue.cpp +++ /dev/null @@ -1,540 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "work_queue.h" -#include "mem_alloc.h" -#include "query.h" -#include "message.h" -#include "client_query.h" -#include - -void QWorkQueue::init() { - - last_sched_dq = NULL; - sched_ptr = 0; -#ifdef NEW_WORK_QUEUE - work_queue.set_capacity(QUEUE_CAPACITY_NEW); - new_txn_queue.set_capacity(QUEUE_CAPACITY_NEW); - sem_init(&mt, 0, 1); - sem_init(&mw, 0, 1); -#else - seq_queue = new boost::lockfree::queue (0); - work_queue = new boost::lockfree::queue (0); - new_txn_queue = new boost::lockfree::queue(0); - sched_queue = new boost::lockfree::queue * [g_node_cnt]; - for ( uint64_t i = 0; i < g_node_cnt; i++) { - sched_queue[i] = new boost::lockfree::queue (0); - } -#endif - txn_queue_size = 0; - work_queue_size = 0; - - work_enqueue_size = 0; - work_dequeue_size = 0; - txn_enqueue_size = 0; - txn_dequeue_size = 0; - - sem_init(&_semaphore, 0, 1); - top_element=NULL; -} - -void QWorkQueue::sequencer_enqueue(uint64_t thd_id, Message * msg) { - uint64_t starttime = get_sys_clock(); - assert(msg); - DEBUG_M("SeqQueue::enqueue work_queue_entry alloc\n"); - work_queue_entry * entry = (work_queue_entry*)mem_allocator.align_alloc(sizeof(work_queue_entry)); - entry->msg = msg; - entry->rtype = msg->rtype; - entry->txn_id = msg->txn_id; - entry->batch_id = msg->batch_id; - entry->starttime = get_sys_clock(); - assert(ISSERVER); - - DEBUG("Seq Enqueue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - while (!seq_queue->push(entry) && !simulation->is_done()) { - } - - INC_STATS(thd_id,seq_queue_enqueue_time,get_sys_clock() - starttime); - INC_STATS(thd_id,seq_queue_enq_cnt,1); - -} - -Message * QWorkQueue::sequencer_dequeue(uint64_t thd_id) { - uint64_t starttime = get_sys_clock(); - assert(ISSERVER); - Message * msg = NULL; - work_queue_entry * entry = NULL; - bool valid = seq_queue->pop(entry); - - if(valid) { - msg = entry->msg; - assert(msg); - DEBUG("Seq Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,seq_queue_wait_time,queue_time); - INC_STATS(thd_id,seq_queue_cnt,1); - DEBUG_M("SeqQueue::dequeue work_queue_entry free\n"); - mem_allocator.free(entry,sizeof(work_queue_entry)); - INC_STATS(thd_id,seq_queue_dequeue_time,get_sys_clock() - starttime); - } - - return msg; - -} - -void QWorkQueue::sched_enqueue(uint64_t thd_id, Message * msg) { - assert(CC_ALG == CALVIN); - assert(msg); - assert(ISSERVERN(msg->return_node_id)); - uint64_t starttime = get_sys_clock(); - - DEBUG_M("QWorkQueue::sched_enqueue work_queue_entry alloc\n"); - work_queue_entry * entry = (work_queue_entry*)mem_allocator.alloc(sizeof(work_queue_entry)); - entry->msg = msg; - entry->rtype = msg->rtype; - entry->txn_id = msg->txn_id; - entry->batch_id = msg->batch_id; - entry->starttime = get_sys_clock(); - - DEBUG("Sched Enqueue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - uint64_t mtx_time_start = get_sys_clock(); - while (!sched_queue[msg->get_return_id()]->push(entry) && !simulation->is_done()) { - } - INC_STATS(thd_id,mtx[37],get_sys_clock() - mtx_time_start); - - INC_STATS(thd_id,sched_queue_enqueue_time,get_sys_clock() - starttime); - INC_STATS(thd_id,sched_queue_enq_cnt,1); -} - -Message * QWorkQueue::sched_dequeue(uint64_t thd_id) { - uint64_t starttime = get_sys_clock(); - - assert(CC_ALG == CALVIN); - Message * msg = NULL; - work_queue_entry * entry = NULL; - - bool valid = sched_queue[sched_ptr]->pop(entry); - - if(valid) { - msg = entry->msg; - DEBUG("Sched Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,sched_queue_wait_time,queue_time); - INC_STATS(thd_id,sched_queue_cnt,1); - - DEBUG_M("QWorkQueue::sched_enqueue work_queue_entry free\n"); - mem_allocator.free(entry,sizeof(work_queue_entry)); - - if(msg->rtype == RDONE) { - // Advance to next queue or next epoch - DEBUG("Sched RDONE %ld %ld\n",sched_ptr,simulation->get_worker_epoch()); - assert(msg->get_batch_id() == simulation->get_worker_epoch()); - if(sched_ptr == g_node_cnt - 1) { - INC_STATS(thd_id,sched_epoch_cnt,1); - INC_STATS(thd_id,sched_epoch_diff,get_sys_clock()-simulation->last_worker_epoch_time); - simulation->next_worker_epoch(); - } - sched_ptr = (sched_ptr + 1) % g_node_cnt; - msg->release(); - msg = NULL; - - } else { - simulation->inc_epoch_txn_cnt(); - DEBUG("Sched msg dequeue %ld (%ld,%ld) %ld\n", sched_ptr, msg->txn_id, msg->batch_id, - simulation->get_worker_epoch()); - assert(msg->batch_id == simulation->get_worker_epoch()); - } - - INC_STATS(thd_id,sched_queue_dequeue_time,get_sys_clock() - starttime); - } - - return msg; -} - - -#ifdef NEW_WORK_QUEUE -void QWorkQueue::enqueue(uint64_t thd_id, Message * msg,bool busy) { - uint64_t starttime = get_sys_clock(); - assert(msg); - DEBUG_M("QWorkQueue::enqueue work_queue_entry alloc\n"); - work_queue_entry * entry = (work_queue_entry*)mem_allocator.align_alloc(sizeof(work_queue_entry)); - entry->msg = msg; - entry->rtype = msg->rtype; - entry->txn_id = msg->txn_id; - entry->batch_id = msg->batch_id; - entry->starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - DEBUG("Work Enqueue (%ld,%ld) %d\n",entry->txn_id,entry->batch_id,entry->rtype); - - uint64_t mtx_wait_starttime = get_sys_clock(); - if(msg->rtype == CL_QRY) { - sem_wait(&mt); - new_txn_queue.push_back(entry); - sem_post(&mt); - - sem_wait(&_semaphore); - txn_queue_size ++; - txn_enqueue_size ++; - sem_post(&_semaphore); - } else { - sem_wait(&mw); - work_queue.push_back(entry); - sem_post(&mw); - - sem_wait(&_semaphore); - work_queue_size ++; - work_enqueue_size ++; - sem_post(&_semaphore); - } - INC_STATS(thd_id,mtx[13],get_sys_clock() - mtx_wait_starttime); - - if(busy) { - INC_STATS(thd_id,work_queue_conflict_cnt,1); - } - INC_STATS(thd_id,work_queue_enqueue_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_enq_cnt,1); -} - -Message * QWorkQueue::dequeue(uint64_t thd_id) { - uint64_t starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - Message * msg = NULL; - work_queue_entry * entry = NULL; - uint64_t mtx_wait_starttime = get_sys_clock(); - bool valid = false; - - sem_wait(&mw); - valid = work_queue.size() > 0; - if (valid) { - entry = work_queue[0]; - work_queue.pop_front(); - } - sem_post(&mw); - - if(!valid) { -#if SERVER_GENERATE_QUERIES - if(ISSERVER) { - BaseQuery * m_query = client_query_queue.get_next_query(thd_id,thd_id); - if(m_query) { - assert(m_query); - msg = Message::create_message((BaseQuery*)m_query,CL_QRY); - } - } -#else - sem_wait(&mt); - valid = new_txn_queue.size() > 0; - if (valid) { - entry = new_txn_queue[0]; - new_txn_queue.pop_front(); - } - sem_post(&mt); - -#endif - } - INC_STATS(thd_id,mtx[14],get_sys_clock() - mtx_wait_starttime); - - if(valid) { - msg = entry->msg; - assert(msg); - - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,work_queue_wait_time,queue_time); - INC_STATS(thd_id,work_queue_cnt,1); - if(msg->rtype == CL_QRY) { - sem_wait(&_semaphore); - txn_queue_size --; - txn_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_new_wait_time,queue_time); - INC_STATS(thd_id,work_queue_new_cnt,1); - } else { - sem_wait(&_semaphore); - work_queue_size --; - work_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_old_wait_time,queue_time); - INC_STATS(thd_id,work_queue_old_cnt,1); - } - msg->wq_time = queue_time; - - DEBUG("Work Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - DEBUG_M("QWorkQueue::dequeue work_queue_entry free\n"); - - INC_STATS(thd_id,work_queue_dequeue_time,get_sys_clock() - starttime); - } - -#if SERVER_GENERATE_QUERIES - if(msg && msg->rtype == CL_QRY) { - INC_STATS(thd_id,work_queue_new_wait_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_new_cnt,1); - } -#endif - return msg; -} - -//elioyan TODO -Message * QWorkQueue::queuetop(uint64_t thd_id) -{ - uint64_t starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - Message * msg = NULL; - work_queue_entry * entry = NULL; - uint64_t mtx_wait_starttime = get_sys_clock(); - bool valid = false; - sem_wait(&mw); - valid = work_queue.size() > 0; - if (valid) { - entry = work_queue[0]; - work_queue.pop_front(); - } - sem_post(&mw); - if(!valid) { -#if SERVER_GENERATE_QUERIES - if(ISSERVER) { - BaseQuery * m_query = client_query_queue.get_next_query(thd_id,thd_id); - if(m_query) { - assert(m_query); - msg = Message::create_message((BaseQuery*)m_query,CL_QRY); - } - } -#else - sem_wait(&mt); - valid = new_txn_queue.size() > 0; - if (valid) { - entry = new_txn_queue[0]; - new_txn_queue.pop_front(); - } - sem_post(&mt); -#endif - } - INC_STATS(thd_id,mtx[14],get_sys_clock() - mtx_wait_starttime); - - if(valid) { - msg = entry->msg; - assert(msg); - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,work_queue_wait_time,queue_time); - INC_STATS(thd_id,work_queue_cnt,1); - if(msg->rtype == CL_QRY) { - sem_wait(&_semaphore); - txn_queue_size --; - txn_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_new_wait_time,queue_time); - INC_STATS(thd_id,work_queue_new_cnt,1); - } else { - sem_wait(&_semaphore); - work_queue_size --; - work_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_old_wait_time,queue_time); - INC_STATS(thd_id,work_queue_old_cnt,1); - } - msg->wq_time = queue_time; - DEBUG("Work Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - DEBUG_M("QWorkQueue::dequeue work_queue_entry free\n"); - mem_allocator.free(entry,sizeof(work_queue_entry)); - INC_STATS(thd_id,work_queue_dequeue_time,get_sys_clock() - starttime); - } - -#if SERVER_GENERATE_QUERIES - if(msg && msg->rtype == CL_QRY) { - INC_STATS(thd_id,work_queue_new_wait_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_new_cnt,1); - } -#endif - return msg; -} - -#else -void QWorkQueue::enqueue(uint64_t thd_id, Message * msg,bool busy) { - uint64_t starttime = get_sys_clock(); - assert(msg); - DEBUG_M("QWorkQueue::enqueue work_queue_entry alloc\n"); - work_queue_entry * entry = (work_queue_entry*)mem_allocator.align_alloc(sizeof(work_queue_entry)); - entry->msg = msg; - entry->rtype = msg->rtype; - entry->txn_id = msg->txn_id; - entry->batch_id = msg->batch_id; - entry->starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - DEBUG("Work Enqueue (%ld,%ld) %d\n",entry->txn_id,entry->batch_id,entry->rtype); - - uint64_t mtx_wait_starttime = get_sys_clock(); - if(msg->rtype == CL_QRY) { - while (!new_txn_queue->push(entry) && !simulation->is_done()) { - } - sem_wait(&_semaphore); - txn_queue_size ++; - txn_enqueue_size ++; - sem_post(&_semaphore); - } else { - while (!work_queue->push(entry) && !simulation->is_done()) { - } - sem_wait(&_semaphore); - work_queue_size ++; - work_enqueue_size ++; - sem_post(&_semaphore); - } - INC_STATS(thd_id,mtx[13],get_sys_clock() - mtx_wait_starttime); - - if(busy) { - INC_STATS(thd_id,work_queue_conflict_cnt,1); - } - INC_STATS(thd_id,work_queue_enqueue_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_enq_cnt,1); -} - -Message * QWorkQueue::dequeue(uint64_t thd_id) { - uint64_t starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - Message * msg = NULL; - work_queue_entry * entry = NULL; - uint64_t mtx_wait_starttime = get_sys_clock(); - bool valid = false; - - double x = (double)(rand() % 10000) / 10000; - if (x > TXN_QUEUE_PERCENT) - valid = work_queue->pop(entry); - else - valid = new_txn_queue->pop(entry); - if(!valid) { -#if SERVER_GENERATE_QUERIES - if(ISSERVER) { - BaseQuery * m_query = client_query_queue.get_next_query(thd_id,thd_id); - if(m_query) { - assert(m_query); - msg = Message::create_message((BaseQuery*)m_query,CL_QRY); - } - } -#else - if (x > TXN_QUEUE_PERCENT) - valid = new_txn_queue->pop(entry); - else - valid = work_queue->pop(entry); -#endif - } - INC_STATS(thd_id,mtx[14],get_sys_clock() - mtx_wait_starttime); - - if(valid) { - msg = entry->msg; - assert(msg); - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,work_queue_wait_time,queue_time); - INC_STATS(thd_id,work_queue_cnt,1); - if(msg->rtype == CL_QRY) { - sem_wait(&_semaphore); - txn_queue_size --; - txn_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_new_wait_time,queue_time); - INC_STATS(thd_id,work_queue_new_cnt,1); - } else { - sem_wait(&_semaphore); - txn_queue_size --; - txn_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_old_wait_time,queue_time); - INC_STATS(thd_id,work_queue_old_cnt,1); - } - msg->wq_time = queue_time; - DEBUG("Work Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - DEBUG_M("QWorkQueue::dequeue work_queue_entry free\n"); - mem_allocator.free(entry,sizeof(work_queue_entry)); - INC_STATS(thd_id,work_queue_dequeue_time,get_sys_clock() - starttime); - } - -#if SERVER_GENERATE_QUERIES - if(msg && msg->rtype == CL_QRY) { - INC_STATS(thd_id,work_queue_new_wait_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_new_cnt,1); - } -#endif - return msg; -} - - -//elioyan TODO -Message * QWorkQueue::queuetop(uint64_t thd_id) -{ - uint64_t starttime = get_sys_clock(); - assert(ISSERVER || ISREPLICA); - Message * msg = NULL; - work_queue_entry * entry = NULL; - uint64_t mtx_wait_starttime = get_sys_clock(); - bool valid = work_queue->pop(entry); - if(!valid) { -#if SERVER_GENERATE_QUERIES - if(ISSERVER) { - BaseQuery * m_query = client_query_queue.get_next_query(thd_id,thd_id); - if(m_query) { - assert(m_query); - msg = Message::create_message((BaseQuery*)m_query,CL_QRY); - } - } -#else - valid = new_txn_queue->pop(entry); -#endif - } - INC_STATS(thd_id,mtx[14],get_sys_clock() - mtx_wait_starttime); - - if(valid) { - msg = entry->msg; - assert(msg); - uint64_t queue_time = get_sys_clock() - entry->starttime; - INC_STATS(thd_id,work_queue_wait_time,queue_time); - INC_STATS(thd_id,work_queue_cnt,1); - if(msg->rtype == CL_QRY) { - sem_wait(&_semaphore); - txn_queue_size --; - txn_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_new_wait_time,queue_time); - INC_STATS(thd_id,work_queue_new_cnt,1); - } else { - sem_wait(&_semaphore); - work_queue_size --; - work_dequeue_size ++; - sem_post(&_semaphore); - INC_STATS(thd_id,work_queue_old_wait_time,queue_time); - INC_STATS(thd_id,work_queue_old_cnt,1); - } - msg->wq_time = queue_time; - DEBUG("Work Dequeue (%ld,%ld)\n",entry->txn_id,entry->batch_id); - DEBUG_M("QWorkQueue::dequeue work_queue_entry free\n"); - mem_allocator.free(entry,sizeof(work_queue_entry)); - INC_STATS(thd_id,work_queue_dequeue_time,get_sys_clock() - starttime); - } - -#if SERVER_GENERATE_QUERIES - if(msg && msg->rtype == CL_QRY) { - INC_STATS(thd_id,work_queue_new_wait_time,get_sys_clock() - starttime); - INC_STATS(thd_id,work_queue_new_cnt,1); - } -#endif - return msg; -} - -#endif diff --git a/contrib/deneva/system/work_queue.h b/contrib/deneva/system/work_queue.h deleted file mode 100644 index 7807771c..00000000 --- a/contrib/deneva/system/work_queue.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _WORK_QUEUE_H_ -#define _WORK_QUEUE_H_ - -#include "global.h" -#include "helper.h" -#include -#include -#include -#include "semaphore.h" -//#include "message.h" - -class BaseQuery; -class Workload; -class Message; - -struct work_queue_entry { - Message * msg; - uint64_t batch_id; - uint64_t txn_id; - RemReqType rtype; - uint64_t starttime; -}; - -struct CompareSchedEntry { - bool operator()(const work_queue_entry* lhs, const work_queue_entry* rhs) { - if (lhs->batch_id == rhs->batch_id) return lhs->starttime > rhs->starttime; - return lhs->batch_id < rhs->batch_id; - } -}; -struct CompareWQEntry { -#if PRIORITY == PRIORITY_FCFS - bool operator()(const work_queue_entry* lhs, const work_queue_entry* rhs) { - return lhs->starttime < rhs->starttime; - } -#elif PRIORITY == PRIORITY_ACTIVE - bool operator()(const work_queue_entry* lhs, const work_queue_entry* rhs) { - if (lhs->rtype == CL_QRY && rhs->rtype != CL_QRY) return true; - if (rhs->rtype == CL_QRY && lhs->rtype != CL_QRY) return false; - return lhs->starttime < rhs->starttime; - } -#elif PRIORITY == PRIORITY_HOME - bool operator()(const work_queue_entry* lhs, const work_queue_entry* rhs) { - if (ISLOCAL(lhs->txn_id) && !ISLOCAL(rhs->txn_id)) return true; - if (ISLOCAL(rhs->txn_id) && !ISLOCAL(lhs->txn_id)) return false; - return lhs->starttime < rhs->starttime; - } -#endif -}; -typedef boost::circular_buffer WCircularBuffer; -class QWorkQueue { -public: - void init(); - void enqueue(uint64_t thd_id,Message * msg,bool busy); - Message * dequeue(uint64_t thd_id); - Message * queuetop(uint64_t thd_id); - void sched_enqueue(uint64_t thd_id, Message * msg); - Message * sched_dequeue(uint64_t thd_id); - void sequencer_enqueue(uint64_t thd_id, Message * msg); - Message * sequencer_dequeue(uint64_t thd_id); - - uint64_t get_cnt() {return get_wq_cnt() + get_rem_wq_cnt() + get_new_wq_cnt();} - uint64_t get_wq_cnt() {return 0;} - //uint64_t get_wq_cnt() {return work_queue.size();} - uint64_t get_txn_cnt() {return txn_queue_size;} - - uint64_t get_enwq_cnt() {return work_enqueue_size;} - uint64_t get_dewq_cnt() {return work_dequeue_size;} - uint64_t get_entxn_cnt() {return txn_enqueue_size;} - uint64_t get_detxn_cnt() {return txn_dequeue_size;} - - void set_enwq_cnt() { work_enqueue_size = 0;} - void set_dewq_cnt() { work_dequeue_size = 0;} - void set_entxn_cnt() { txn_enqueue_size = 0;} - void set_detxn_cnt() { txn_dequeue_size = 0;} - uint64_t get_sched_wq_cnt() {return 0;} - uint64_t get_rem_wq_cnt() {return 0;} - uint64_t get_new_wq_cnt() {return 0;} - // DA - Message* top_element; - - -private: -#ifdef NEW_WORK_QUEUE - WCircularBuffer work_queue; - WCircularBuffer new_txn_queue; - - sem_t mw; - sem_t mt; -#else - boost::lockfree::queue * work_queue; - boost::lockfree::queue * new_txn_queue; -#endif - boost::lockfree::queue * seq_queue; - boost::lockfree::queue ** sched_queue; - - uint64_t sched_ptr; - BaseQuery * last_sched_dq; - uint64_t curr_epoch; - - sem_t _semaphore; - volatile uint64_t work_queue_size; - volatile uint64_t txn_queue_size; - - uint64_t work_enqueue_size; - uint64_t work_dequeue_size; - uint64_t txn_enqueue_size; - uint64_t txn_dequeue_size; -}; - - -#endif diff --git a/contrib/deneva/system/worker_thread.cpp b/contrib/deneva/system/worker_thread.cpp deleted file mode 100644 index 17cd9042..00000000 --- a/contrib/deneva/system/worker_thread.cpp +++ /dev/null @@ -1,907 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "worker_thread.h" - -#include "abort_queue.h" -#include "global.h" -#include "helper.h" -#include "logger.h" -#include "maat.h" -#include "manager.h" -#include "math.h" -#include "message.h" -#include "msg_queue.h" -#include "msg_thread.h" -#include "query.h" -#include "tpcc_query.h" -#include "txn.h" -#include "wl.h" -#include "work_queue.h" -#include "ycsb_query.h" -#include "maat.h" -#include "sundial.h" -#include "wsi.h" -#include "ssi.h" -#include "focc.h" -#include "bocc.h" - -void WorkerThread::setup() { - if( get_thd_id() == 0) { - send_init_done_to_all_nodes(); - } - _thd_txn_id = 0; -} - -void WorkerThread::fakeprocess(Message * msg) { - RC rc __attribute__ ((unused)); - - DEBUG("%ld Processing %ld %d\n",get_thd_id(),msg->get_txn_id(),msg->get_rtype()); - assert(msg->get_rtype() == CL_QRY || msg->get_txn_id() != UINT64_MAX); - uint64_t starttime = get_sys_clock(); - switch(msg->get_rtype()) { - case RPASS: - //rc = process_rpass(msg); - break; - case RPREPARE: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RACK_PREP),msg->return_node_id); - break; - case RFWD: - rc = process_rfwd(msg); - break; - case RQRY: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),msg->return_node_id); - break; - case RQRY_CONT: - rc = RCOK; - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),msg->return_node_id); - break; - case RQRY_RSP: - rc = process_rqry_rsp(msg); - break; - case RFIN: - rc = RCOK; - txn_man->set_rc(rc); - if(!((FinishMessage*)msg)->readonly || CC_ALG == MAAT || CC_ALG == OCC || CC_ALG == SUNDIAL || CC_ALG == BOCC || CC_ALG == SSI) - - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RACK_FIN),GET_NODE_ID(msg->get_txn_id())); - break; - case RACK_PREP: - rc = process_rack_prep(msg); - break; - case RACK_FIN: - rc = process_rack_rfin(msg); - break; - case RTXN_CONT: - rc = process_rtxn_cont(msg); - break; - case CL_QRY: - case RTXN: -#if CC_ALG == CALVIN - rc = process_calvin_rtxn(msg); -#else - rc = process_rtxn(msg); -#endif - break; - case LOG_FLUSHED: - rc = process_log_flushed(msg); - break; - case LOG_MSG: - rc = process_log_msg(msg); - break; - case LOG_MSG_RSP: - rc = process_log_msg_rsp(msg); - break; - default: - printf("Msg: %d\n",msg->get_rtype()); - fflush(stdout); - assert(false); - break; - } - uint64_t timespan = get_sys_clock() - starttime; - INC_STATS(get_thd_id(),worker_process_cnt,1); - INC_STATS(get_thd_id(),worker_process_time,timespan); - INC_STATS(get_thd_id(),worker_process_cnt_by_type[msg->rtype],1); - INC_STATS(get_thd_id(),worker_process_time_by_type[msg->rtype],timespan); - DEBUG("%ld EndProcessing %d %ld\n",get_thd_id(),msg->get_rtype(),msg->get_txn_id()); -} - -void WorkerThread::process(Message * msg) { - RC rc __attribute__ ((unused)); - - DEBUG("%ld Processing %ld %d\n",get_thd_id(),msg->get_txn_id(),msg->get_rtype()); - assert(msg->get_rtype() == CL_QRY || msg->get_txn_id() != UINT64_MAX); - uint64_t starttime = get_sys_clock(); - switch(msg->get_rtype()) { - case RPASS: - break; - case RPREPARE: - rc = process_rprepare(msg); - break; - case RFWD: - rc = process_rfwd(msg); - break; - case RQRY: - rc = process_rqry(msg); - break; - case RQRY_CONT: - rc = process_rqry_cont(msg); - break; - case RQRY_RSP: - rc = process_rqry_rsp(msg); - break; - case RFIN: - rc = process_rfin(msg); - break; - case RACK_PREP: - rc = process_rack_prep(msg); - break; - case RACK_FIN: - rc = process_rack_rfin(msg); - break; - case RTXN_CONT: - rc = process_rtxn_cont(msg); - break; - case CL_QRY: - case RTXN: -#if CC_ALG == CALVIN - rc = process_calvin_rtxn(msg); -#else - rc = process_rtxn(msg); -#endif - break; - case LOG_FLUSHED: - rc = process_log_flushed(msg); - break; - case LOG_MSG: - rc = process_log_msg(msg); - break; - case LOG_MSG_RSP: - rc = process_log_msg_rsp(msg); - break; - default: - printf("Msg: %d\n",msg->get_rtype()); - fflush(stdout); - assert(false); - break; - } - uint64_t timespan = get_sys_clock() - starttime; - INC_STATS(get_thd_id(),worker_process_cnt,1); - INC_STATS(get_thd_id(),worker_process_time,timespan); - INC_STATS(get_thd_id(),worker_process_cnt_by_type[msg->rtype],1); - INC_STATS(get_thd_id(),worker_process_time_by_type[msg->rtype],timespan); - DEBUG("%ld EndProcessing %d %ld\n",get_thd_id(),msg->get_rtype(),msg->get_txn_id()); -} - -void WorkerThread::check_if_done(RC rc) { - if (txn_man->waiting_for_response()) return; - if (rc == Commit) { - txn_man->txn_stats.finish_start_time = get_sys_clock(); - commit(); - } - if (rc == Abort) { - txn_man->txn_stats.finish_start_time = get_sys_clock(); - abort(); - } -} - -void WorkerThread::release_txn_man() { - txn_table.release_transaction_manager(get_thd_id(), txn_man->get_txn_id(), - txn_man->get_batch_id()); - txn_man = NULL; -} - -void WorkerThread::calvin_wrapup() { - txn_man->release_locks(RCOK); - txn_man->commit_stats(); - DEBUG("(%ld,%ld) calvin ack to %ld\n", txn_man->get_txn_id(), txn_man->get_batch_id(), - txn_man->return_id); - if(txn_man->return_id == g_node_id) { - work_queue.sequencer_enqueue(_thd_id,Message::create_message(txn_man,CALVIN_ACK)); - } else { - msg_queue.enqueue(get_thd_id(), Message::create_message(txn_man, CALVIN_ACK), - txn_man->return_id); - } - release_txn_man(); -} - -// Can't use txn_man after this function -void WorkerThread::commit() { - assert(txn_man); - assert(IS_LOCAL(txn_man->get_txn_id())); - - uint64_t timespan = get_sys_clock() - txn_man->txn_stats.starttime; - DEBUG("COMMIT %ld %f -- %f\n", txn_man->get_txn_id(), - simulation->seconds_from_start(get_sys_clock()), (double)timespan / BILLION); - - // ! trans total time - uint64_t end_time = get_sys_clock(); - uint64_t timespan_short = end_time - txn_man->txn_stats.restart_starttime; - uint64_t two_pc_timespan = end_time - txn_man->txn_stats.prepare_start_time; - uint64_t finish_timespan = end_time - txn_man->txn_stats.finish_start_time; - INC_STATS(get_thd_id(), trans_2pc_time, two_pc_timespan); - INC_STATS(get_thd_id(), trans_finish_time, finish_timespan); - INC_STATS(get_thd_id(), trans_commit_time, finish_timespan); - INC_STATS(get_thd_id(), trans_total_run_time, timespan_short); - - // Send result back to client -#if !SERVER_GENERATE_QUERIES - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,CL_RSP),txn_man->client_id); -#endif - // remove txn from pool - release_txn_man(); - // Do not use txn_man after this -} - -void WorkerThread::abort() { - DEBUG("ABORT %ld -- %f\n", txn_man->get_txn_id(), - (double)get_sys_clock() - run_starttime / BILLION); - // TODO: TPCC Rollback here - - ++txn_man->abort_cnt; - txn_man->reset(); - - uint64_t end_time = get_sys_clock(); - uint64_t timespan_short = end_time - txn_man->txn_stats.restart_starttime; - uint64_t two_pc_timespan = end_time - txn_man->txn_stats.prepare_start_time; - uint64_t finish_timespan = end_time - txn_man->txn_stats.finish_start_time; - INC_STATS(get_thd_id(), trans_2pc_time, two_pc_timespan); - INC_STATS(get_thd_id(), trans_finish_time, finish_timespan); - INC_STATS(get_thd_id(), trans_abort_time, finish_timespan); - INC_STATS(get_thd_id(), trans_total_run_time, timespan_short); - #if WORKLOAD != DA //actually DA do not need real abort. Just count it and do not send real abort msg. - uint64_t penalty = - abort_queue.enqueue(get_thd_id(), txn_man->get_txn_id(), txn_man->get_abort_cnt()); - - txn_man->txn_stats.total_abort_time += penalty; - #endif -} - -TxnManager * WorkerThread::get_transaction_manager(Message * msg) { -#if CC_ALG == CALVIN - TxnManager* local_txn_man = - txn_table.get_transaction_manager(get_thd_id(), msg->get_txn_id(), msg->get_batch_id()); -#else - TxnManager * local_txn_man = txn_table.get_transaction_manager(get_thd_id(),msg->get_txn_id(),0); -#endif - return local_txn_man; -} - -char type2char(DATxnType txn_type) -{ - switch (txn_type) - { - case DA_READ: - return 'R'; - case DA_WRITE: - return 'W'; - case DA_COMMIT: - return 'C'; - case DA_ABORT: - return 'A'; - case DA_SCAN: - return 'S'; - default: - return 'U'; - } -} - -RC WorkerThread::run() { - tsetup(); - printf("Running WorkerThread %ld\n",_thd_id); - - uint64_t ready_starttime; - uint64_t idle_starttime = 0; - - while(!simulation->is_done()) { - txn_man = NULL; - heartbeat(); - - progress_stats(); - Message* msg; - -#ifdef TEST_MSG_order - while(1) - { - msg = work_queue.dequeue(get_thd_id()); - if (!msg) { - if (idle_starttime == 0) idle_starttime = get_sys_clock(); - continue; - } - printf("s seq_id:%lu type:%c trans_id:%lu item:%c state:%lu next_state:%lu\n", - ((DAClientQueryMessage*)msg)->seq_id, - type2char(((DAClientQueryMessage*)msg)->txn_type), - ((DAClientQueryMessage*)msg)->trans_id, - static_cast('x'+((DAClientQueryMessage*)msg)->item_id), - ((DAClientQueryMessage*)msg)->state, - (((DAClientQueryMessage*)msg)->next_state)); - fflush(stdout); - } -#endif - - msg = work_queue.dequeue(get_thd_id()); - if(!msg) { - if (idle_starttime == 0) idle_starttime = get_sys_clock(); - continue; - } - simulation->last_da_query_time = get_sys_clock(); -#if WORKLOAD == DA - printf("thd_id:%lu stxn_id:%lu batch_id:%lu seq_id:%lu type:%c rtype:%d trans_id:%lu item:%c laststate:%lu state:%lu next_state:%lu\n", - this->_thd_id, - ((DAClientQueryMessage*)msg)->txn_id, - ((DAClientQueryMessage*)msg)->batch_id, - ((DAClientQueryMessage*)msg)->seq_id, - type2char(((DAClientQueryMessage*)msg)->txn_type), - ((DAClientQueryMessage*)msg)->rtype, - ((DAClientQueryMessage*)msg)->trans_id, - static_cast('x'+((DAClientQueryMessage*)msg)->item_id), - ((DAClientQueryMessage*)msg)->last_state, - ((DAClientQueryMessage*)msg)->state, - ((DAClientQueryMessage*)msg)->next_state); - fflush(stdout); -#endif - if(idle_starttime > 0) { - INC_STATS(_thd_id,worker_idle_time,get_sys_clock() - idle_starttime); - idle_starttime = 0; - } - - if(msg->rtype != CL_QRY || CC_ALG == CALVIN) { - txn_man = get_transaction_manager(msg); - - if (CC_ALG != CALVIN && IS_LOCAL(txn_man->get_txn_id())) { - if (msg->rtype != RTXN_CONT && - ((msg->rtype != RACK_PREP) || (txn_man->get_rsp_cnt() == 1))) { - txn_man->txn_stats.work_queue_time_short += msg->lat_work_queue_time; - txn_man->txn_stats.cc_block_time_short += msg->lat_cc_block_time; - txn_man->txn_stats.cc_time_short += msg->lat_cc_time; - txn_man->txn_stats.msg_queue_time_short += msg->lat_msg_queue_time; - txn_man->txn_stats.process_time_short += msg->lat_process_time; - txn_man->txn_stats.network_time_short += msg->lat_network_time; - } - } else { - txn_man->txn_stats.clear_short(); - } - if (CC_ALG != CALVIN) { - txn_man->txn_stats.lat_network_time_start = msg->lat_network_time; - txn_man->txn_stats.lat_other_time_start = msg->lat_other_time; - } - txn_man->txn_stats.msg_queue_time += msg->mq_time; - txn_man->txn_stats.msg_queue_time_short += msg->mq_time; - msg->mq_time = 0; - txn_man->txn_stats.work_queue_time += msg->wq_time; - txn_man->txn_stats.work_queue_time_short += msg->wq_time; - //txn_man->txn_stats.network_time += msg->ntwk_time; - msg->wq_time = 0; - txn_man->txn_stats.work_queue_cnt += 1; - - - ready_starttime = get_sys_clock(); - bool ready = txn_man->unset_ready(); - INC_STATS(get_thd_id(),worker_activate_txn_time,get_sys_clock() - ready_starttime); - if(!ready) { - // Return to work queue, end processing - work_queue.enqueue(get_thd_id(),msg,true); - continue; - } - txn_man->register_thread(this); - } -#ifdef FAKE_PROCESS - fakeprocess(msg); -#else - process(msg); -#endif - - ready_starttime = get_sys_clock(); - if(txn_man) { - bool ready = txn_man->set_ready(); - assert(ready); - } - INC_STATS(get_thd_id(),worker_deactivate_txn_time,get_sys_clock() - ready_starttime); - - ready_starttime = get_sys_clock(); -#if CC_ALG != CALVIN - msg->release(); -#endif - INC_STATS(get_thd_id(),worker_release_msg_time,get_sys_clock() - ready_starttime); - } - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} - -RC WorkerThread::process_rfin(Message * msg) { - DEBUG("RFIN %ld\n",msg->get_txn_id()); - assert(CC_ALG != CALVIN); - - M_ASSERT_V(!IS_LOCAL(msg->get_txn_id()), "RFIN local: %ld %ld/%d\n", msg->get_txn_id(), - msg->get_txn_id() % g_node_cnt, g_node_id); -#if CC_ALG == MAAT || CC_ALG == SILO - txn_man->set_commit_timestamp(((FinishMessage*)msg)->commit_timestamp); -#endif - - if(((FinishMessage*)msg)->rc == Abort) { - txn_man->abort(); - txn_man->reset(); - txn_man->reset_query(); - msg_queue.enqueue(get_thd_id(), Message::create_message(txn_man, RACK_FIN), - GET_NODE_ID(msg->get_txn_id())); - return Abort; - } - txn_man->commit(); - - if (!((FinishMessage*)msg)->readonly || CC_ALG == MAAT || CC_ALG == OCC || CC_ALG == SUNDIAL || - CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == SILO) - msg_queue.enqueue(get_thd_id(), Message::create_message(txn_man, RACK_FIN), - GET_NODE_ID(msg->get_txn_id())); - release_txn_man(); - - return RCOK; -} - -RC WorkerThread::process_rack_prep(Message * msg) { - DEBUG("RPREP_ACK %ld\n",msg->get_txn_id()); - - RC rc = RCOK; - - int responses_left = txn_man->received_response(((AckMessage*)msg)->rc); - assert(responses_left >=0); -#if CC_ALG == MAAT - // Integrate bounds - uint64_t lower = ((AckMessage*)msg)->lower; - uint64_t upper = ((AckMessage*)msg)->upper; - if(lower > time_table.get_lower(get_thd_id(),msg->get_txn_id())) { - time_table.set_lower(get_thd_id(),msg->get_txn_id(),lower); - } - if(upper < time_table.get_upper(get_thd_id(),msg->get_txn_id())) { - time_table.set_upper(get_thd_id(),msg->get_txn_id(),upper); - } - DEBUG("%ld bound set: [%ld,%ld] -> [%ld,%ld]\n", msg->get_txn_id(), lower, upper, - time_table.get_lower(get_thd_id(), msg->get_txn_id()), - time_table.get_upper(get_thd_id(), msg->get_txn_id())); - if(((AckMessage*)msg)->rc != RCOK) { - time_table.set_state(get_thd_id(),msg->get_txn_id(),MAAT_ABORTED); - } -#endif - -#if CC_ALG == SILO - uint64_t max_tid = ((AckMessage*)msg)->max_tid; - txn_man->find_tid_silo(max_tid); -#endif - - if (responses_left > 0) return WAIT; - - // Done waiting - if(txn_man->get_rc() == RCOK) { - if (CC_ALG == SUNDIAL) rc = RCOK; - else rc = txn_man->validate(); - } - uint64_t finish_start_time = get_sys_clock(); - txn_man->txn_stats.finish_start_time = finish_start_time; - uint64_t prepare_timespan = finish_start_time - txn_man->txn_stats.prepare_start_time; - INC_STATS(get_thd_id(), trans_prepare_time, prepare_timespan); - if(rc == Abort || txn_man->get_rc() == Abort) { - txn_man->txn->rc = Abort; - rc = Abort; - } - if(CC_ALG == SSI) { - ssi_man.gene_finish_ts(txn_man); - } - if(CC_ALG == WSI) { - wsi_man.gene_finish_ts(txn_man); - } - txn_man->send_finish_messages(); - if(rc == Abort) { - txn_man->abort(); - } else { - txn_man->commit(); - } - - return rc; -} - -RC WorkerThread::process_rack_rfin(Message * msg) { - DEBUG("RFIN_ACK %ld\n",msg->get_txn_id()); - - RC rc = RCOK; - - int responses_left = txn_man->received_response(((AckMessage*)msg)->rc); - assert(responses_left >=0); - if (responses_left > 0) return WAIT; - - // Done waiting - txn_man->txn_stats.twopc_time += get_sys_clock() - txn_man->txn_stats.wait_starttime; -#if CC_ALG == FOCC - focc_man.end_critical_section(txn_man); -#elif CC_ALG == BOCC - bocc_man.end_critical_section(txn_man); -#endif - if(txn_man->get_rc() == RCOK) { - commit(); - } else { - abort(); - } - - return rc; -} - -RC WorkerThread::process_rqry_rsp(Message * msg) { - DEBUG("RQRY_RSP %ld\n",msg->get_txn_id()); - assert(IS_LOCAL(msg->get_txn_id())); - - txn_man->txn_stats.remote_wait_time += get_sys_clock() - txn_man->txn_stats.wait_starttime; - - if(((QueryResponseMessage*)msg)->rc == Abort) { - txn_man->start_abort(); - return Abort; - } -#if CC_ALG == SUNDIAL - // Integrate bounds - TxnManager * txn_man = txn_table.get_transaction_manager(get_thd_id(),msg->get_txn_id(),0); - QueryResponseMessage* qmsg = (QueryResponseMessage*)msg; - txn_man->_min_commit_ts = txn_man->_min_commit_ts > qmsg->_min_commit_ts ? - txn_man->_min_commit_ts : qmsg->_min_commit_ts; -#endif - RC rc = txn_man->run_txn(); - check_if_done(rc); - return rc; -} - -RC WorkerThread::process_rqry(Message * msg) { - DEBUG("RQRY %ld\n",msg->get_txn_id()); - M_ASSERT_V(!IS_LOCAL(msg->get_txn_id()), "RQRY local: %ld %ld/%d\n", msg->get_txn_id(), - msg->get_txn_id() % g_node_cnt, g_node_id); - assert(!IS_LOCAL(msg->get_txn_id())); - RC rc = RCOK; - - msg->copy_to_txn(txn_man); - -#if CC_ALG == MVCC - txn_table.update_min_ts(get_thd_id(),txn_man->get_txn_id(),0,txn_man->get_timestamp()); -#endif -#if CC_ALG == WSI || CC_ALG == SSI - txn_table.update_min_ts(get_thd_id(),txn_man->get_txn_id(),0,txn_man->get_start_timestamp()); -#endif -#if CC_ALG == MAAT - time_table.init(get_thd_id(),txn_man->get_txn_id()); -#endif - rc = txn_man->run_txn(); - - // Send response - if(rc != WAIT) { - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),txn_man->return_id); - } - return rc; -} - -RC WorkerThread::process_rqry_cont(Message * msg) { - DEBUG("RQRY_CONT %ld\n",msg->get_txn_id()); - assert(!IS_LOCAL(msg->get_txn_id())); - RC rc = RCOK; -#if CC_ALG != FOCC && CC_ALG != BOCC - txn_man->run_txn_post_wait(); -#endif - rc = txn_man->run_txn(); - - // Send response - if(rc != WAIT) { - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RQRY_RSP),txn_man->return_id); - } - return rc; -} - - -RC WorkerThread::process_rtxn_cont(Message * msg) { - DEBUG("RTXN_CONT %ld\n",msg->get_txn_id()); - assert(IS_LOCAL(msg->get_txn_id())); - - txn_man->txn_stats.local_wait_time += get_sys_clock() - txn_man->txn_stats.wait_starttime; -#if CC_ALG != FOCC && CC_ALG != BOCC - txn_man->run_txn_post_wait(); -#endif - RC rc = txn_man->run_txn(); - check_if_done(rc); - return RCOK; -} - -RC WorkerThread::process_rprepare(Message * msg) { - DEBUG("RPREP %ld\n",msg->get_txn_id()); - RC rc = RCOK; - -#if CC_ALG == SUNDIAL - // Integrate bounds - TxnManager * txn_man = txn_table.get_transaction_manager(get_thd_id(),msg->get_txn_id(),0); - PrepareMessage* pmsg = (PrepareMessage*)msg; - txn_man->_min_commit_ts = pmsg->_min_commit_ts; -#endif - // Validate transaction - rc = txn_man->validate(); - txn_man->set_rc(rc); - msg_queue.enqueue(get_thd_id(),Message::create_message(txn_man,RACK_PREP),msg->return_node_id); - // Clean up as soon as abort is possible - if(rc == Abort) { - txn_man->abort(); - } - - return rc; -} - -uint64_t WorkerThread::get_next_txn_id() { - uint64_t txn_id = - (get_node_id() + get_thd_id() * g_node_cnt) + (g_thread_cnt * g_node_cnt * _thd_txn_id); - ++_thd_txn_id; - return txn_id; -} - -RC WorkerThread::process_rtxn(Message * msg) { - RC rc = RCOK; - uint64_t txn_id = UINT64_MAX; - - if(msg->get_rtype() == CL_QRY) { - // This is a new transaction - // Only set new txn_id when txn first starts - #if WORKLOAD == DA - msg->txn_id=((DAClientQueryMessage*)msg)->trans_id; - txn_id=((DAClientQueryMessage*)msg)->trans_id; - #else - txn_id = get_next_txn_id(); - msg->txn_id = txn_id; - #endif - // Put txn in txn_table - txn_man = txn_table.get_transaction_manager(get_thd_id(),txn_id,0); - txn_man->register_thread(this); - uint64_t ready_starttime = get_sys_clock(); - bool ready = txn_man->unset_ready(); - INC_STATS(get_thd_id(),worker_activate_txn_time,get_sys_clock() - ready_starttime); - assert(ready); - if (CC_ALG == WAIT_DIE) { - #if WORKLOAD == DA //mvcc use timestamp - if (da_stamp_tab.count(txn_man->get_txn_id())==0) - { - da_stamp_tab[txn_man->get_txn_id()]=get_next_ts(); - txn_man->set_timestamp(da_stamp_tab[txn_man->get_txn_id()]); - } - else - txn_man->set_timestamp(da_stamp_tab[txn_man->get_txn_id()]); - #else - txn_man->set_timestamp(get_next_ts()); - #endif - } - txn_man->txn_stats.starttime = get_sys_clock(); - txn_man->txn_stats.restart_starttime = txn_man->txn_stats.starttime; - msg->copy_to_txn(txn_man); - DEBUG("START %ld %f %lu\n", txn_man->get_txn_id(), - simulation->seconds_from_start(get_sys_clock()), txn_man->txn_stats.starttime); - #if WORKLOAD==DA - if(da_start_trans_tab.count(txn_man->get_txn_id())==0) - { - da_start_trans_tab.insert(txn_man->get_txn_id()); - INC_STATS(get_thd_id(),local_txn_start_cnt,1); - } - #else - INC_STATS(get_thd_id(), local_txn_start_cnt, 1); - #endif - - } else { - txn_man->txn_stats.restart_starttime = get_sys_clock(); - DEBUG("RESTART %ld %f %lu\n", txn_man->get_txn_id(), - simulation->seconds_from_start(get_sys_clock()), txn_man->txn_stats.starttime); - } - // Get new timestamps - if(is_cc_new_timestamp()) { - #if WORKLOAD==DA //mvcc use timestamp - if(da_stamp_tab.count(txn_man->get_txn_id())==0) - { - da_stamp_tab[txn_man->get_txn_id()]=get_next_ts(); - txn_man->set_timestamp(da_stamp_tab[txn_man->get_txn_id()]); - } - else - txn_man->set_timestamp(da_stamp_tab[txn_man->get_txn_id()]); - #else - txn_man->set_timestamp(get_next_ts()); - #endif - } - -#if CC_ALG == MVCC - txn_table.update_min_ts(get_thd_id(),txn_id,0,txn_man->get_timestamp()); -#endif -#if CC_ALG == WSI || CC_ALG == SSI - txn_table.update_min_ts(get_thd_id(),txn_id,0,txn_man->get_start_timestamp()); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - #if WORKLOAD==DA - if(da_start_stamp_tab.count(txn_man->get_txn_id())==0) - { - da_start_stamp_tab[txn_man->get_txn_id()]=get_next_ts(); - txn_man->set_start_timestamp(da_start_stamp_tab[txn_man->get_txn_id()]); - } - else - txn_man->set_start_timestamp(da_start_stamp_tab[txn_man->get_txn_id()]); - #else - txn_man->set_start_timestamp(get_next_ts()); - #endif -#endif -#if CC_ALG == MAAT - #if WORKLOAD==DA - if(da_start_stamp_tab.count(txn_man->get_txn_id())==0) - { - da_start_stamp_tab[txn_man->get_txn_id()]=1; - time_table.init(get_thd_id(), txn_man->get_txn_id()); - assert(time_table.get_lower(get_thd_id(), txn_man->get_txn_id()) == 0); - assert(time_table.get_upper(get_thd_id(), txn_man->get_txn_id()) == UINT64_MAX); - assert(time_table.get_state(get_thd_id(), txn_man->get_txn_id()) == MAAT_RUNNING); - } - #else - time_table.init(get_thd_id(),txn_man->get_txn_id()); - assert(time_table.get_lower(get_thd_id(),txn_man->get_txn_id()) == 0); - assert(time_table.get_upper(get_thd_id(),txn_man->get_txn_id()) == UINT64_MAX); - assert(time_table.get_state(get_thd_id(),txn_man->get_txn_id()) == MAAT_RUNNING); - #endif -#endif - - rc = init_phase(); - if (rc != RCOK) return rc; - - // Execute transaction - rc = txn_man->run_txn(); - check_if_done(rc); - return rc; -} - -RC WorkerThread::init_phase() { - RC rc = RCOK; - return rc; -} - - -RC WorkerThread::process_log_msg(Message * msg) { - assert(ISREPLICA); - DEBUG("REPLICA PROCESS %ld\n",msg->get_txn_id()); - LogRecord * record = logger.createRecord(&((LogMessage*)msg)->record); - logger.enqueueRecord(record); - return RCOK; -} - -RC WorkerThread::process_log_msg_rsp(Message * msg) { - DEBUG("REPLICA RSP %ld\n",msg->get_txn_id()); - txn_man->repl_finished = true; - if (txn_man->log_flushed) commit(); - return RCOK; -} - -RC WorkerThread::process_log_flushed(Message * msg) { - DEBUG("LOG FLUSHED %ld\n",msg->get_txn_id()); - if(ISREPLICA) { - msg_queue.enqueue(get_thd_id(), Message::create_message(msg->txn_id, LOG_MSG_RSP), - GET_NODE_ID(msg->txn_id)); - return RCOK; - } - - txn_man->log_flushed = true; - if (g_repl_cnt == 0 || txn_man->repl_finished) commit(); - return RCOK; -} - -RC WorkerThread::process_rfwd(Message * msg) { - DEBUG("RFWD (%ld,%ld)\n",msg->get_txn_id(),msg->get_batch_id()); - txn_man->txn_stats.remote_wait_time += get_sys_clock() - txn_man->txn_stats.wait_starttime; - assert(CC_ALG == CALVIN); - int responses_left = txn_man->received_response(((ForwardMessage*)msg)->rc); - assert(responses_left >=0); - if(txn_man->calvin_collect_phase_done()) { - assert(ISSERVERN(txn_man->return_id)); - RC rc = txn_man->run_calvin_txn(); - if(rc == RCOK && txn_man->calvin_exec_phase_done()) { - calvin_wrapup(); - return RCOK; - } - } - return WAIT; -} - -RC WorkerThread::process_calvin_rtxn(Message * msg) { - DEBUG("START %ld %f %lu\n", txn_man->get_txn_id(), - simulation->seconds_from_start(get_sys_clock()), txn_man->txn_stats.starttime); - assert(ISSERVERN(txn_man->return_id)); - txn_man->txn_stats.local_wait_time += get_sys_clock() - txn_man->txn_stats.wait_starttime; - // Execute - RC rc = txn_man->run_calvin_txn(); - - if(rc == RCOK && txn_man->calvin_exec_phase_done()) { - calvin_wrapup(); - } - return RCOK; -} - -bool WorkerThread::is_cc_new_timestamp() { - return (CC_ALG == MVCC || CC_ALG == TIMESTAMP); -} - -ts_t WorkerThread::get_next_ts() { - if (g_ts_batch_alloc) { - if (_curr_ts % g_ts_batch_num == 0) { - _curr_ts = glob_manager.get_ts(get_thd_id()); - _curr_ts ++; - } else { - _curr_ts ++; - } - return _curr_ts - 1; - } else { - _curr_ts = glob_manager.get_ts(get_thd_id()); - return _curr_ts; - } -} - -bool WorkerThread::is_mine(Message* msg) { //TODO:have some problems! - if (((DAQueryMessage*)msg)->trans_id == get_thd_id()) { - return true; - } - return false; -} - -void WorkerNumThread::setup() { -} - -RC WorkerNumThread::run() { - tsetup(); - printf("Running WorkerNumThread %ld\n",_thd_id); - - // uint64_t idle_starttime = 0; - int i = 0; - while(!simulation->is_done()) { - progress_stats(); - - uint64_t wq_size = work_queue.get_wq_cnt(); - uint64_t tx_size = work_queue.get_txn_cnt(); - uint64_t ewq_size = work_queue.get_enwq_cnt(); - uint64_t dwq_size = work_queue.get_dewq_cnt(); - - uint64_t etx_size = work_queue.get_entxn_cnt(); - uint64_t dtx_size = work_queue.get_detxn_cnt(); - - work_queue.set_detxn_cnt(); - work_queue.set_dewq_cnt(); - work_queue.set_entxn_cnt(); - work_queue.set_enwq_cnt(); - - INC_STATS(_thd_id,work_queue_wq_cnt[i],wq_size); - INC_STATS(_thd_id,work_queue_tx_cnt[i],tx_size); - - INC_STATS(_thd_id,work_queue_ewq_cnt[i],ewq_size); - INC_STATS(_thd_id,work_queue_dwq_cnt[i],dwq_size); - - INC_STATS(_thd_id,work_queue_etx_cnt[i],etx_size); - INC_STATS(_thd_id,work_queue_dtx_cnt[i],dtx_size); - i++; - sleep(1); - - } - printf("FINISH %ld:%ld\n",_node_id,_thd_id); - fflush(stdout); - return FINISH; -} diff --git a/contrib/deneva/system/worker_thread.h b/contrib/deneva/system/worker_thread.h deleted file mode 100644 index b2dafdef..00000000 --- a/contrib/deneva/system/worker_thread.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Tencent is pleased to support the open source community by making 3TS available. - - Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - Tencent Modifications are Copyright (C) THL A29 Limited. - - Author: hongyaozhao@ruc.edu.cn - - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _WORKERTHREAD_H_ -#define _WORKERTHREAD_H_ - -#include "global.h" -#include "thread.h" -class Workload; -class Message; - -class WorkerThread : public Thread { -public: - RC run(); - void setup(); - void process(Message * msg); - void fakeprocess(Message * msg); - void check_if_done(RC rc); - void release_txn_man(); - void commit(); - void abort(); - TxnManager * get_transaction_manager(Message * msg); - void calvin_wrapup(); - RC process_rfin(Message * msg); - RC process_rfwd(Message * msg); - RC process_rack_rfin(Message * msg); - RC process_rack_prep(Message * msg); - RC process_rqry_rsp(Message * msg); - RC process_rqry(Message * msg); - RC process_rqry_cont(Message * msg); - RC process_rinit(Message * msg); - RC process_rprepare(Message * msg); - RC process_rpass(Message * msg); - RC process_rtxn(Message * msg); - RC process_calvin_rtxn(Message * msg); - RC process_rtxn_cont(Message * msg); - RC process_log_msg(Message * msg); - RC process_log_msg_rsp(Message * msg); - RC process_log_flushed(Message * msg); - RC init_phase(); - uint64_t get_next_txn_id(); - bool is_cc_new_timestamp(); - bool is_mine(Message* msg); -private: - uint64_t _thd_txn_id; - ts_t _curr_ts; - ts_t get_next_ts(); - TxnManager * txn_man; -}; - -class WorkerNumThread : public Thread { -public: - RC run(); - void setup(); - -}; -#endif diff --git a/contrib/deneva/test.sh b/contrib/deneva/test.sh deleted file mode 100755 index a300816c..00000000 --- a/contrib/deneva/test.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -set -x - -#scripits to run -for concurrency_control in MVCC MAAT -do - #update CC_ALG - sed -i -e "/CC_ALG/d" -e "100a \#define CC_ALG ${concurrency_control}" config.h - #update compiling - make clean - make -j10 - echo "update of db success" -# for theta_value in 0.0 0.25 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.9 - for theta_value in 0.0 - do - ./rundb -nid0 -zipf${theta_value} & - #connect 146 - echo "trying to connect 147" -ssh -t -p22 root@10.77.110.147 << remotessh - cd /root/zzhdeneva - sed -i -e "/CC_ALG/d" -e "100a \#define CC_ALG ${concurrency_control}" config.h - make clean - make -j10 - ./runcl -nid1 -zipf${theta_value} > /root/zzhdeneva/test/output_${concurrency_control}_${theta_value}.txt - echo "test of ${concurrency_control} and ${theta_value} success" - exit -remotessh - # TODO: lsof -i 18000; kill this pid - sleep 10 - done - sleep 5 -done - -ssh -t -p22 root@10.77.110.147 << remotessh - cd /root/zzhdeneva/test - python output-gather.py > output.txt - exit -remotessh - diff --git a/contrib/deneva/transport/message.cpp b/contrib/deneva/transport/message.cpp deleted file mode 100644 index 3c071019..00000000 --- a/contrib/deneva/transport/message.cpp +++ /dev/null @@ -1,1876 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "mem_alloc.h" -#include "query.h" -#include "ycsb_query.h" -#include "ycsb.h" -#include "tpcc_query.h" -#include "tpcc.h" -#include "pps_query.h" -#include "pps.h" -#include "global.h" -#include "message.h" -#include "maat.h" -#include "da.h" -#include "da_query.h" -#include "sundial.h" - -std::vector * Message::create_messages(char * buf) { - std::vector * all_msgs = new std::vector; - char * data = buf; - uint64_t ptr = 0; - uint32_t dest_id; - uint32_t return_id; - uint32_t txn_cnt; - COPY_VAL(dest_id,data,ptr); - COPY_VAL(return_id,data,ptr); - COPY_VAL(txn_cnt,data,ptr); - assert(dest_id == g_node_id); - assert(return_id != g_node_id); - assert(ISCLIENTN(return_id) || ISSERVERN(return_id) || ISREPLICAN(return_id)); - while(txn_cnt > 0) { - Message * msg = create_message(&data[ptr]); - msg->return_node_id = return_id; - ptr += msg->get_size(); - all_msgs->push_back(msg); - --txn_cnt; - } - return all_msgs; -} - -Message * Message::create_message(char * buf) { - RemReqType rtype = NO_MSG; - uint64_t ptr = 0; - COPY_VAL(rtype,buf,ptr); - Message * msg = create_message(rtype); - fflush(stdout); - msg->copy_from_buf(buf); - return msg; -} - -Message * Message::create_message(TxnManager * txn, RemReqType rtype) { - Message * msg = create_message(rtype); - msg->mcopy_from_txn(txn); - msg->copy_from_txn(txn); - - // copy latency here - msg->lat_work_queue_time = txn->txn_stats.work_queue_time_short; - msg->lat_msg_queue_time = txn->txn_stats.msg_queue_time_short; - msg->lat_cc_block_time = txn->txn_stats.cc_block_time_short; - msg->lat_cc_time = txn->txn_stats.cc_time_short; - msg->lat_process_time = txn->txn_stats.process_time_short; - msg->lat_network_time = txn->txn_stats.lat_network_time_start; - msg->lat_other_time = txn->txn_stats.lat_other_time_start; - - return msg; -} - -Message * Message::create_message(LogRecord * record, RemReqType rtype) { - Message * msg = create_message(rtype); - ((LogMessage*)msg)->copy_from_record(record); - msg->txn_id = record->rcd.txn_id; - return msg; -} - - -Message * Message::create_message(BaseQuery * query, RemReqType rtype) { - assert(rtype == RQRY || rtype == CL_QRY); - Message * msg = create_message(rtype); -#if WORKLOAD == YCSB - ((YCSBClientQueryMessage*)msg)->copy_from_query(query); -#elif WORKLOAD == TPCC - ((TPCCClientQueryMessage*)msg)->copy_from_query(query); -#elif WORKLOAD == PPS - ((PPSClientQueryMessage*)msg)->copy_from_query(query); -#elif WORKLOAD == DA - ((DAClientQueryMessage*)msg)->copy_from_query(query); -#endif - return msg; -} - -Message * Message::create_message(uint64_t txn_id, RemReqType rtype) { - Message * msg = create_message(rtype); - msg->txn_id = txn_id; - return msg; -} - -Message * Message::create_message(uint64_t txn_id, uint64_t batch_id, RemReqType rtype) { - Message * msg = create_message(rtype); - msg->txn_id = txn_id; - msg->batch_id = batch_id; - return msg; -} - -Message * Message::create_message(RemReqType rtype) { - Message * msg; - switch(rtype) { - case INIT_DONE: - msg = new InitDoneMessage; - break; - case RQRY: - case RQRY_CONT: - #if WORKLOAD == YCSB - msg = new YCSBQueryMessage; - #elif WORKLOAD == TPCC - msg = new TPCCQueryMessage; - #elif WORKLOAD == PPS - msg = new PPSQueryMessage; - #elif WORKLOAD == DA - msg = new DAQueryMessage; - #endif - msg->init(); - break; - case RFIN: - msg = new FinishMessage; - break; - case RQRY_RSP: - msg = new QueryResponseMessage; - break; - case LOG_MSG: - msg = new LogMessage; - break; - case LOG_MSG_RSP: - msg = new LogRspMessage; - break; - case LOG_FLUSHED: - msg = new LogFlushedMessage; - break; - case CALVIN_ACK: - case RACK_PREP: - case RACK_FIN: - msg = new AckMessage; - break; - case CL_QRY: - case RTXN: - case RTXN_CONT: - #if WORKLOAD == YCSB - msg = new YCSBClientQueryMessage; - #elif WORKLOAD == TPCC - msg = new TPCCClientQueryMessage; - #elif WORKLOAD == PPS - msg = new PPSClientQueryMessage; - #elif WORKLOAD == DA - msg = new DAClientQueryMessage; - #endif - msg->init(); - break; - case RPREPARE: - msg = new PrepareMessage; - break; - case RFWD: - msg = new ForwardMessage; - break; - case RDONE: - msg = new DoneMessage; - break; - case CL_RSP: - msg = new ClientResponseMessage; - break; - default: - assert(false); - } - assert(msg); - msg->rtype = rtype; - msg->txn_id = UINT64_MAX; - msg->batch_id = UINT64_MAX; - msg->return_node_id = g_node_id; - msg->wq_time = 0; - msg->mq_time = 0; - msg->ntwk_time = 0; - - msg->lat_work_queue_time = 0; - msg->lat_msg_queue_time = 0; - msg->lat_cc_block_time = 0; - msg->lat_cc_time = 0; - msg->lat_process_time = 0; - msg->lat_network_time = 0; - msg->lat_other_time = 0; - - - return msg; -} - -uint64_t Message::mget_size() { - uint64_t size = 0; - size += sizeof(RemReqType); - size += sizeof(uint64_t); -#if CC_ALG == CALVIN - size += sizeof(uint64_t); -#endif - // for stats, send message queue time - size += sizeof(uint64_t); - - // for stats, latency - size += sizeof(uint64_t) * 7; - return size; -} - -void Message::mcopy_from_txn(TxnManager * txn) { - txn_id = txn->get_txn_id(); -#if CC_ALG == CALVIN - batch_id = txn->get_batch_id(); -#endif -} - -void Message::mcopy_to_txn(TxnManager* txn) { txn->return_id = return_node_id; } - -void Message::mcopy_from_buf(char * buf) { - uint64_t ptr = 0; - COPY_VAL(rtype,buf,ptr); - COPY_VAL(txn_id,buf,ptr); -#if CC_ALG == CALVIN - COPY_VAL(batch_id,buf,ptr); -#endif - COPY_VAL(mq_time,buf,ptr); - - COPY_VAL(lat_work_queue_time,buf,ptr); - COPY_VAL(lat_msg_queue_time,buf,ptr); - COPY_VAL(lat_cc_block_time,buf,ptr); - COPY_VAL(lat_cc_time,buf,ptr); - COPY_VAL(lat_process_time,buf,ptr); - COPY_VAL(lat_network_time,buf,ptr); - COPY_VAL(lat_other_time,buf,ptr); - if ((CC_ALG == CALVIN && rtype == CALVIN_ACK && txn_id % g_node_cnt == g_node_id) || - (CC_ALG != CALVIN && IS_LOCAL(txn_id))) { - lat_network_time = (get_sys_clock() - lat_network_time) - lat_other_time; - } else { - lat_other_time = get_sys_clock(); - } -} - -void Message::mcopy_to_buf(char * buf) { - uint64_t ptr = 0; - COPY_BUF(buf,rtype,ptr); - COPY_BUF(buf,txn_id,ptr); -#if CC_ALG == CALVIN - COPY_BUF(buf,batch_id,ptr); -#endif - COPY_BUF(buf,mq_time,ptr); - - COPY_BUF(buf,lat_work_queue_time,ptr); - COPY_BUF(buf,lat_msg_queue_time,ptr); - COPY_BUF(buf,lat_cc_block_time,ptr); - COPY_BUF(buf,lat_cc_time,ptr); - COPY_BUF(buf,lat_process_time,ptr); - if ((CC_ALG == CALVIN && rtype == CL_QRY && txn_id % g_node_cnt == g_node_id) || - (CC_ALG != CALVIN && IS_LOCAL(txn_id))) { - lat_network_time = get_sys_clock(); - } else { - lat_other_time = get_sys_clock() - lat_other_time; - } - - COPY_BUF(buf,lat_network_time,ptr); - COPY_BUF(buf,lat_other_time,ptr); -} - -void Message::release_message(Message * msg) { - switch(msg->rtype) { - case INIT_DONE: { - InitDoneMessage * m_msg = (InitDoneMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case RQRY: - case RQRY_CONT: { - #if WORKLOAD == YCSB - YCSBQueryMessage * m_msg = (YCSBQueryMessage*)msg; - #elif WORKLOAD == TPCC - TPCCQueryMessage * m_msg = (TPCCQueryMessage*)msg; - #elif WORKLOAD == PPS - PPSQueryMessage * m_msg = (PPSQueryMessage*)msg; - #elif WORKLOAD == DA - DAQueryMessage* m_msg = (DAQueryMessage*)msg; - #endif - m_msg->release(); - delete m_msg; - break; - } - case RFIN: { - FinishMessage * m_msg = (FinishMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case RQRY_RSP: { - QueryResponseMessage * m_msg = (QueryResponseMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case LOG_MSG: { - LogMessage * m_msg = (LogMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case LOG_MSG_RSP: { - LogRspMessage * m_msg = (LogRspMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case LOG_FLUSHED: { - LogFlushedMessage * m_msg = (LogFlushedMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case CALVIN_ACK: - case RACK_PREP: - case RACK_FIN: { - AckMessage * m_msg = (AckMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case CL_QRY: - case RTXN: - case RTXN_CONT: { - #if WORKLOAD == YCSB - YCSBClientQueryMessage * m_msg = (YCSBClientQueryMessage*)msg; - #elif WORKLOAD == TPCC - TPCCClientQueryMessage * m_msg = (TPCCClientQueryMessage*)msg; - #elif WORKLOAD == PPS - PPSClientQueryMessage * m_msg = (PPSClientQueryMessage*)msg; - #elif WORKLOAD == DA - DAClientQueryMessage* m_msg = (DAClientQueryMessage*)msg; - #endif - m_msg->release(); - delete m_msg; - break; - } - case RPREPARE: { - PrepareMessage * m_msg = (PrepareMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case RFWD: { - ForwardMessage * m_msg = (ForwardMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case RDONE: { - DoneMessage * m_msg = (DoneMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - case CL_RSP: { - ClientResponseMessage * m_msg = (ClientResponseMessage*)msg; - m_msg->release(); - delete m_msg; - break; - } - default: { - assert(false); - } - } -} -/************************/ - -uint64_t QueryMessage::get_size() { - uint64_t size = Message::mget_size(); -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - size += sizeof(ts); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - size += sizeof(start_ts); -#endif - return size; -} - -void QueryMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - ts = txn->get_timestamp(); - assert(ts != 0); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - start_ts = txn->get_start_timestamp(); -#endif -} - -void QueryMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - assert(ts != 0); - txn->set_timestamp(ts); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - txn->set_start_timestamp(start_ts); -#endif -} - -void QueryMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr __attribute__ ((unused)); - ptr = Message::mget_size(); -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - COPY_VAL(ts,buf,ptr); - assert(ts != 0); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - COPY_VAL(start_ts,buf,ptr); -#endif -} - -void QueryMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr __attribute__ ((unused)); - ptr = Message::mget_size(); -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - COPY_BUF(buf,ts,ptr); - assert(ts != 0); -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - COPY_BUF(buf,start_ts,ptr); -#endif -} - -/************************/ - -void YCSBClientQueryMessage::init() {} - -void YCSBClientQueryMessage::release() { - ClientQueryMessage::release(); - // Freeing requests is the responsibility of txn at commit time - requests.release(); -} - -uint64_t YCSBClientQueryMessage::get_size() { - uint64_t size = ClientQueryMessage::get_size(); - size += sizeof(size_t); - size += sizeof(ycsb_request) * requests.size(); - return size; -} - -void YCSBClientQueryMessage::copy_from_query(BaseQuery * query) { - ClientQueryMessage::copy_from_query(query); - - requests.copy(((YCSBQuery*)(query))->requests); -} - - -void YCSBClientQueryMessage::copy_from_txn(TxnManager * txn) { - ClientQueryMessage::mcopy_from_txn(txn); - - requests.copy(((YCSBQuery*)(txn->query))->requests); -} - -void YCSBClientQueryMessage::copy_to_txn(TxnManager * txn) { - // this only copies over the pointers, so if requests are freed, we'll lose the request data - ClientQueryMessage::copy_to_txn(txn); - // Copies pointers to txn - ((YCSBQuery*)(txn->query))->requests.append(requests); -} - -void YCSBClientQueryMessage::copy_from_buf(char * buf) { - ClientQueryMessage::copy_from_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - size_t size; - - COPY_VAL(size,buf,ptr); - requests.init(size); - - for(uint64_t i = 0 ; i < size;i++) { - DEBUG_M("YCSBClientQueryMessage::copy ycsb_request alloc\n"); - ycsb_request * req = (ycsb_request*)mem_allocator.alloc(sizeof(ycsb_request)); - COPY_VAL(*req,buf,ptr); - - assert(req->key < g_synth_table_size); - requests.add(req); - } - assert(ptr == get_size()); -} - -void YCSBClientQueryMessage::copy_to_buf(char * buf) { - ClientQueryMessage::copy_to_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - size_t size = requests.size(); - COPY_BUF(buf,size,ptr); - - for(uint64_t i = 0; i < requests.size(); i++) { - ycsb_request * req = requests[i]; - assert(req->key < g_synth_table_size); - COPY_BUF(buf,*req,ptr); - - } - assert(ptr == get_size()); -} -/************************/ - -void TPCCClientQueryMessage::init() {} - -void TPCCClientQueryMessage::release() { - ClientQueryMessage::release(); - // Freeing requests is the responsibility of txn - - items.release(); -} - -uint64_t TPCCClientQueryMessage::get_size() { - uint64_t size = ClientQueryMessage::get_size(); - size += sizeof(uint64_t) * 10; - size += sizeof(char) * LASTNAME_LEN; - size += sizeof(bool) * 3; - size += sizeof(size_t); - size += sizeof(Item_no) * items.size(); - return size; -} - -void TPCCClientQueryMessage::copy_from_query(BaseQuery * query) { - ClientQueryMessage::copy_from_query(query); - TPCCQuery* tpcc_query = (TPCCQuery*)(query); - - txn_type = tpcc_query->txn_type; - // common txn input for both payment & new-order - w_id = tpcc_query->w_id; - d_id = tpcc_query->d_id; - c_id = tpcc_query->c_id; - - // payment - d_w_id = tpcc_query->d_w_id; - c_w_id = tpcc_query->c_w_id; - c_d_id = tpcc_query->c_d_id; - strcpy(c_last,tpcc_query->c_last); - h_amount = tpcc_query->h_amount; - by_last_name = tpcc_query->by_last_name; - - // new order - items.copy(tpcc_query->items); - rbk = tpcc_query->rbk; - remote = tpcc_query->remote; - ol_cnt = tpcc_query->ol_cnt; - o_entry_d = tpcc_query->o_entry_d; -} - - -void TPCCClientQueryMessage::copy_from_txn(TxnManager * txn) { - ClientQueryMessage::mcopy_from_txn(txn); - copy_from_query(txn->query); -} - -void TPCCClientQueryMessage::copy_to_txn(TxnManager * txn) { - ClientQueryMessage::copy_to_txn(txn); - TPCCQuery* tpcc_query = (TPCCQuery*)(txn->query); - - txn->client_id = return_node_id; - - - tpcc_query->txn_type = (TPCCTxnType)txn_type; - if(tpcc_query->txn_type == TPCC_PAYMENT) - ((TPCCTxnManager*)txn)->state = TPCC_PAYMENT0; - else if (tpcc_query->txn_type == TPCC_NEW_ORDER) - ((TPCCTxnManager*)txn)->state = TPCC_NEWORDER0; - // common txn input for both payment & new-order - tpcc_query->w_id = w_id; - tpcc_query->d_id = d_id; - tpcc_query->c_id = c_id; - - // payment - tpcc_query->d_w_id = d_w_id; - tpcc_query->c_w_id = c_w_id; - tpcc_query->c_d_id = c_d_id; - strcpy(tpcc_query->c_last,c_last); - tpcc_query->h_amount = h_amount; - tpcc_query->by_last_name = by_last_name; - - // new order - tpcc_query->items.append(items); - tpcc_query->rbk = rbk; - tpcc_query->remote = remote; - tpcc_query->ol_cnt = ol_cnt; - tpcc_query->o_entry_d = o_entry_d; - -} - -void TPCCClientQueryMessage::copy_from_buf(char * buf) { - ClientQueryMessage::copy_from_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_VAL(txn_type,buf,ptr); - // common txn input for both payment & new-order - COPY_VAL(w_id,buf,ptr); - COPY_VAL(d_id,buf,ptr); - COPY_VAL(c_id,buf,ptr); - - // payment - COPY_VAL(d_w_id,buf,ptr); - COPY_VAL(c_w_id,buf,ptr); - COPY_VAL(c_d_id,buf,ptr); - COPY_VAL(c_last,buf,ptr); - COPY_VAL(h_amount,buf,ptr); - COPY_VAL(by_last_name,buf,ptr); - - // new order - size_t size; - COPY_VAL(size,buf,ptr); - items.init(size); - for(uint64_t i = 0 ; i < size;i++) { - DEBUG_M("TPCCClientQueryMessage::copy_from_buf item alloc\n"); - Item_no * item = (Item_no*)mem_allocator.alloc(sizeof(Item_no)); - COPY_VAL(*item,buf,ptr); - items.add(item); - } - - COPY_VAL(rbk,buf,ptr); - COPY_VAL(remote,buf,ptr); - COPY_VAL(ol_cnt,buf,ptr); - COPY_VAL(o_entry_d,buf,ptr); - - assert(ptr == get_size()); -} - -void TPCCClientQueryMessage::copy_to_buf(char * buf) { - ClientQueryMessage::copy_to_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_BUF(buf,txn_type,ptr); - // common txn input for both payment & new-order - COPY_BUF(buf,w_id,ptr); - COPY_BUF(buf,d_id,ptr); - COPY_BUF(buf,c_id,ptr); - - // payment - COPY_BUF(buf,d_w_id,ptr); - COPY_BUF(buf,c_w_id,ptr); - COPY_BUF(buf,c_d_id,ptr); - COPY_BUF(buf,c_last,ptr); - COPY_BUF(buf,h_amount,ptr); - COPY_BUF(buf,by_last_name,ptr); - - size_t size = items.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < items.size(); i++) { - Item_no * item = items[i]; - COPY_BUF(buf,*item,ptr); - } - - COPY_BUF(buf,rbk,ptr); - COPY_BUF(buf,remote,ptr); - COPY_BUF(buf,ol_cnt,ptr); - COPY_BUF(buf,o_entry_d,ptr); - assert(ptr == get_size()); -} - -/************************/ - -/************************/ - -void PPSClientQueryMessage::init() {} - -void PPSClientQueryMessage::release() { ClientQueryMessage::release(); } - -uint64_t PPSClientQueryMessage::get_size() { - uint64_t size = ClientQueryMessage::get_size(); - size += sizeof(uint64_t); - size += sizeof(uint64_t)*3; - size += sizeof(size_t); - size += sizeof(uint64_t) * part_keys.size(); -#if CC_ALG == CALVIN - size += sizeof(bool); -#endif - return size; -} - -void PPSClientQueryMessage::copy_from_query(BaseQuery * query) { - ClientQueryMessage::copy_from_query(query); - PPSQuery* pps_query = (PPSQuery*)(query); - - txn_type = pps_query->txn_type; - - part_key = pps_query->part_key; - product_key = pps_query->product_key; - supplier_key = pps_query->supplier_key; - - part_keys.copy(pps_query->part_keys); - -} - - -void PPSClientQueryMessage::copy_from_txn(TxnManager * txn) { - ClientQueryMessage::mcopy_from_txn(txn); - copy_from_query(txn->query); -#if CC_ALG == CALVIN - recon = txn->isRecon(); -#endif -} - -void PPSClientQueryMessage::copy_to_txn(TxnManager * txn) { - ClientQueryMessage::copy_to_txn(txn); - PPSQuery* pps_query = (PPSQuery*)(txn->query); - - txn->client_id = return_node_id; - pps_query->txn_type = (PPSTxnType)txn_type; - if(pps_query->txn_type == PPS_GETPART) - ((PPSTxnManager*)txn)->state = PPS_GETPART0; - else if(pps_query->txn_type == PPS_GETPRODUCT) - ((PPSTxnManager*)txn)->state = PPS_GETPRODUCT0; - else if(pps_query->txn_type == PPS_GETSUPPLIER) - ((PPSTxnManager*)txn)->state = PPS_GETSUPPLIER0; - else if(pps_query->txn_type == PPS_GETPARTBYPRODUCT) - ((PPSTxnManager*)txn)->state = PPS_GETPARTBYPRODUCT0; - else if(pps_query->txn_type == PPS_GETPARTBYSUPPLIER) - ((PPSTxnManager*)txn)->state = PPS_GETPARTBYSUPPLIER0; - else if(pps_query->txn_type == PPS_ORDERPRODUCT) - ((PPSTxnManager*)txn)->state = PPS_ORDERPRODUCT0; - else if(pps_query->txn_type == PPS_UPDATEPRODUCTPART) - ((PPSTxnManager*)txn)->state = PPS_UPDATEPRODUCTPART0; - else if(pps_query->txn_type == PPS_UPDATEPART) - ((PPSTxnManager*)txn)->state = PPS_UPDATEPART0; - pps_query->part_key = part_key; - pps_query->product_key = product_key; - pps_query->supplier_key = supplier_key; - pps_query->part_keys.append(part_keys); - -#if CC_ALG == CALVIN - txn->recon = recon; -#endif -#if DEBUG_DISTR - std::cout << "PPSClient::copy_to_txn " - << "type " << (PPSTxnType)txn_type << " part_key " << part_key << " product_key " - << product_key << " supplier_key " << supplier_key << std::endl; -#endif -} - -void PPSClientQueryMessage::copy_from_buf(char * buf) { - ClientQueryMessage::copy_from_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_VAL(txn_type,buf,ptr); - // common txn input for both payment & new-order - COPY_VAL(part_key,buf,ptr); - COPY_VAL(product_key,buf,ptr); - COPY_VAL(supplier_key,buf,ptr); - - size_t size; - COPY_VAL(size,buf,ptr); - part_keys.init(size); - for(uint64_t i = 0 ; i < size;i++) { - uint64_t item; - COPY_VAL(item,buf,ptr); - part_keys.add(item); - } - -#if CC_ALG == CALVIN - COPY_VAL(recon,buf,ptr); -#endif - - assert(ptr == get_size()); -#if DEBUG_DISTR - std::cout << "PPSClient::copy_from_buf " - << "type " << (PPSTxnType)txn_type << " part_key " << part_key << " product_key " - << product_key << " supplier_key " << supplier_key << std::endl; -#endif -} - -void PPSClientQueryMessage::copy_to_buf(char * buf) { - ClientQueryMessage::copy_to_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_BUF(buf,txn_type,ptr); - // common txn input for both payment & new-order - COPY_BUF(buf,part_key,ptr); - COPY_BUF(buf,product_key,ptr); - COPY_BUF(buf,supplier_key,ptr); - - size_t size = part_keys.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < part_keys.size(); i++) { - uint64_t item = part_keys[i]; - COPY_BUF(buf,item,ptr); - } - -#if CC_ALG == CALVIN - COPY_BUF(buf,recon,ptr); -#endif - - assert(ptr == get_size()); -#if DEBUG_DISTR - std::cout << "PPSClient::copy_to_buf " - << "type " << (PPSTxnType)txn_type << " part_key " << part_key << " product_key " - << product_key << " supplier_key " << supplier_key << std::endl; -#endif -} - - -/***************DA zone*********/ -void DAClientQueryMessage::init() {} -void DAClientQueryMessage::copy_from_query(BaseQuery* query) { - ClientQueryMessage::copy_from_query(query); - DAQuery* da_query = (DAQuery*)(query); - - txn_type= da_query->txn_type; - trans_id= da_query->trans_id; - item_id= da_query->item_id; - seq_id= da_query->seq_id; - write_version=da_query->write_version; - state= da_query->state; - next_state= da_query->next_state; - last_state= da_query->last_state; -} -void DAClientQueryMessage::copy_to_buf(char* buf) { - ClientQueryMessage::copy_to_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_BUF(buf, txn_type, ptr); - COPY_BUF(buf, trans_id, ptr); - COPY_BUF(buf, item_id, ptr); - COPY_BUF(buf, seq_id, ptr); - COPY_BUF(buf, write_version, ptr); - COPY_BUF(buf, state, ptr); - COPY_BUF(buf, next_state, ptr); - COPY_BUF(buf, last_state, ptr); - assert(ptr == get_size()); -} -void DAClientQueryMessage::copy_from_txn(TxnManager* txn) { - ClientQueryMessage::mcopy_from_txn(txn); - copy_from_query(txn->query); -} - -void DAClientQueryMessage::copy_from_buf(char* buf) { - ClientQueryMessage::copy_from_buf(buf); - uint64_t ptr = ClientQueryMessage::get_size(); - - COPY_VAL(txn_type, buf, ptr); - // common txn input for both payment & new-order - COPY_VAL(trans_id, buf, ptr); - COPY_VAL(item_id, buf, ptr); - COPY_VAL(seq_id, buf, ptr); - COPY_VAL(write_version, buf, ptr); - // payment - COPY_VAL(state, buf, ptr); - COPY_VAL(next_state, buf, ptr); - COPY_VAL(last_state, buf, ptr); - assert(ptr == get_size()); -} - -void DAClientQueryMessage::copy_to_txn(TxnManager* txn) { - ClientQueryMessage::copy_to_txn(txn); - DAQuery* da_query = (DAQuery*)(txn->query); - - - txn->client_id = return_node_id; - da_query->txn_type = (DATxnType)txn_type; - da_query->trans_id = trans_id; - da_query->item_id = item_id; - da_query->seq_id = seq_id; - da_query->write_version = write_version; - da_query->state = state; - da_query->next_state = next_state; - da_query->last_state = last_state; - -} - -uint64_t DAClientQueryMessage::get_size() { - uint64_t size = ClientQueryMessage::get_size(); - size += sizeof(DATxnType); - size += sizeof(uint64_t) * 7; - return size; - -} -void DAClientQueryMessage::release() { ClientQueryMessage::release(); } - -/************************/ - -void ClientQueryMessage::init() { first_startts = 0; } - -void ClientQueryMessage::release() { - partitions.release(); - first_startts = 0; -} - -uint64_t ClientQueryMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(client_startts); - /* - uint64_t size = sizeof(ClientQueryMessage); - */ - size += sizeof(size_t); - size += sizeof(uint64_t) * partitions.size(); - return size; -} - -void ClientQueryMessage::copy_from_query(BaseQuery * query) { - partitions.clear(); - partitions.copy(query->partitions); -} - -void ClientQueryMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - //ts = txn->txn->timestamp; - partitions.clear(); - partitions.copy(txn->query->partitions); - client_startts = txn->client_startts; -} - -void ClientQueryMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); - //txn->txn->timestamp = ts; - txn->query->partitions.clear(); - txn->query->partitions.append(partitions); - txn->client_startts = client_startts; - txn->client_id = return_node_id; -} - -void ClientQueryMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - //COPY_VAL(ts,buf,ptr); - COPY_VAL(client_startts,buf,ptr); - size_t size; - COPY_VAL(size,buf,ptr); - partitions.init(size); - for(uint64_t i = 0; i < size; i++) { - //COPY_VAL(partitions[i],buf,ptr); - uint64_t part; - COPY_VAL(part,buf,ptr); - partitions.add(part); - } -} - -void ClientQueryMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - //COPY_BUF(buf,ts,ptr); - COPY_BUF(buf,client_startts,ptr); - size_t size = partitions.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < size; i++) { - uint64_t part = partitions[i]; - COPY_BUF(buf,part,ptr); - } -} - -/************************/ - - -uint64_t ClientResponseMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(uint64_t); - return size; -} - -void ClientResponseMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - client_startts = txn->client_startts; -} - -void ClientResponseMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); - txn->client_startts = client_startts; -} - -void ClientResponseMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(client_startts,buf,ptr); - assert(ptr == get_size()); -} - -void ClientResponseMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,client_startts,ptr); - assert(ptr == get_size()); -} - -/************************/ - -uint64_t DoneMessage::get_size() { - uint64_t size = Message::mget_size(); - return size; -} - -void DoneMessage::copy_from_txn(TxnManager* txn) { Message::mcopy_from_txn(txn); } - -void DoneMessage::copy_to_txn(TxnManager* txn) { Message::mcopy_to_txn(txn); } - -void DoneMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - assert(ptr == get_size()); -} - -void DoneMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - assert(ptr == get_size()); -} - -/************************/ - - -uint64_t ForwardMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(RC); -#if WORKLOAD == TPCC - size += sizeof(uint64_t); -#endif - return size; -} - -void ForwardMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - rc = txn->get_rc(); -#if WORKLOAD == TPCC - o_id = ((TPCCQuery*)txn->query)->o_id; -#endif -} - -void ForwardMessage::copy_to_txn(TxnManager * txn) { - // Don't copy return ID - //Message::mcopy_to_txn(txn); -#if WORKLOAD == TPCC - ((TPCCQuery*)txn->query)->o_id = o_id; -#endif -} - -void ForwardMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(rc,buf,ptr); -#if WORKLOAD == TPCC - COPY_VAL(o_id,buf,ptr); -#endif - assert(ptr == get_size()); -} - -void ForwardMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,rc,ptr); -#if WORKLOAD == TPCC - COPY_BUF(buf,o_id,ptr); -#endif - assert(ptr == get_size()); -} - -/************************/ - -uint64_t PrepareMessage::get_size() { - uint64_t size = Message::mget_size(); -#if CC_ALG == SUNDIAL - size += sizeof(uint64_t); -#endif - return size; -} - -void PrepareMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); -#if CC_ALG == SUNDIAL - _min_commit_ts = txn->_min_commit_ts; -#endif -} -void PrepareMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); -} -void PrepareMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); -#if CC_ALG == SUNDIAL - COPY_VAL(_min_commit_ts,buf,ptr); -#endif - assert(ptr == get_size()); -} - -void PrepareMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); -#if CC_ALG == SUNDIAL - COPY_BUF(buf,_min_commit_ts,ptr); -#endif - assert(ptr == get_size()); -} - -/************************/ - -uint64_t AckMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(RC); -#if CC_ALG == MAAT - size += sizeof(uint64_t) * 2; -#endif -#if CC_ALG == SILO - size += sizeof(uint64_t); -#endif -#if WORKLOAD == PPS && CC_ALG == CALVIN - size += sizeof(size_t); - size += sizeof(uint64_t) * part_keys.size(); -#endif - return size; -} - -void AckMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - rc = txn->get_rc(); -#if CC_ALG == MAAT - lower = time_table.get_lower(txn->get_thd_id(),txn->get_txn_id()); - upper = time_table.get_upper(txn->get_thd_id(),txn->get_txn_id()); -#endif -#if CC_ALG == SILO - max_tid = txn->max_tid; -#endif - -#if WORKLOAD == PPS && CC_ALG == CALVIN - PPSQuery* pps_query = (PPSQuery*)(txn->query); - part_keys.copy(pps_query->part_keys); -#endif -} - -void AckMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); -#if WORKLOAD == PPS && CC_ALG == CALVIN - - PPSQuery* pps_query = (PPSQuery*)(txn->query); - pps_query->part_keys.append(part_keys); -#endif -} - -void AckMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(rc,buf,ptr); -#if CC_ALG == MAAT - COPY_VAL(lower,buf,ptr); - COPY_VAL(upper,buf,ptr); -#endif -#if CC_ALG == SILO - COPY_VAL(max_tid,buf,ptr); -#endif -#if WORKLOAD == PPS && CC_ALG == CALVIN - - size_t size; - COPY_VAL(size,buf,ptr); - part_keys.init(size); - for(uint64_t i = 0 ; i < size;i++) { - uint64_t item; - COPY_VAL(item,buf,ptr); - part_keys.add(item); - } -#endif - assert(ptr == get_size()); -} - -void AckMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,rc,ptr); -#if CC_ALG == MAAT - COPY_BUF(buf,lower,ptr); - COPY_BUF(buf,upper,ptr); -#endif -#if CC_ALG == SILO - COPY_BUF(buf,max_tid,ptr); -#endif -#if WORKLOAD == PPS && CC_ALG == CALVIN - - size_t size = part_keys.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < part_keys.size(); i++) { - uint64_t item = part_keys[i]; - COPY_BUF(buf,item,ptr); - } -#endif - assert(ptr == get_size()); -} -/************************/ - -uint64_t QueryResponseMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(RC); -#if CC_ALG == SUNDIAL - size += sizeof(uint64_t); -#endif - return size; -} - -void QueryResponseMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - rc = txn->get_rc(); -#if CC_ALG == SUNDIAL - _min_commit_ts = txn->_min_commit_ts; -#endif -} - -void QueryResponseMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); - //query->rc = rc; -} - -void QueryResponseMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(rc,buf,ptr); -#if CC_ALG == SUNDIAL - COPY_VAL(_min_commit_ts,buf,ptr); -#endif - - assert(ptr == get_size()); -} - -void QueryResponseMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,rc,ptr); -#if CC_ALG == SUNDIAL - COPY_BUF(buf,_min_commit_ts,ptr); -#endif - assert(ptr == get_size()); -} - -/************************/ - -uint64_t FinishMessage::get_size() { - uint64_t size = Message::mget_size(); - size += sizeof(uint64_t); - size += sizeof(RC); - size += sizeof(bool); -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - size += sizeof(uint64_t); -#endif - return size; -} - -void FinishMessage::copy_from_txn(TxnManager * txn) { - Message::mcopy_from_txn(txn); - rc = txn->get_rc(); - readonly = txn->query->readonly(); - -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - commit_timestamp = txn->get_commit_timestamp(); -#endif -} - -void FinishMessage::copy_to_txn(TxnManager * txn) { - Message::mcopy_to_txn(txn); - -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - txn->commit_timestamp = commit_timestamp; -#endif -} - -void FinishMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(pid,buf,ptr); - COPY_VAL(rc,buf,ptr); - COPY_VAL(readonly,buf,ptr); -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - COPY_VAL(commit_timestamp,buf,ptr); -#endif - assert(ptr == get_size()); -} - -void FinishMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,pid,ptr); - COPY_BUF(buf,rc,ptr); - COPY_BUF(buf,readonly,ptr); -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - COPY_BUF(buf,commit_timestamp,ptr); -#endif - - assert(ptr == get_size()); -} - -/************************/ - -void LogMessage::release() { -} - -uint64_t LogMessage::get_size() { - uint64_t size = Message::mget_size(); - - return size; -} - -void LogMessage::copy_from_txn(TxnManager* txn) { Message::mcopy_from_txn(txn); } - -void LogMessage::copy_to_txn(TxnManager* txn) { Message::mcopy_to_txn(txn); } - -void LogMessage::copy_from_record(LogRecord* record) { this->record.copyRecord(record); } - -void LogMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_VAL(record,buf,ptr); - assert(ptr == get_size()); -} - -void LogMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - uint64_t ptr = Message::mget_size(); - COPY_BUF(buf,record,ptr); - assert(ptr == get_size()); -} - -/************************/ - -uint64_t LogRspMessage::get_size() { - uint64_t size = Message::mget_size(); - return size; -} - -void LogRspMessage::copy_from_txn(TxnManager* txn) { Message::mcopy_from_txn(txn); } - -void LogRspMessage::copy_to_txn(TxnManager* txn) { Message::mcopy_to_txn(txn); } - -void LogRspMessage::copy_from_buf(char * buf) { - Message::mcopy_from_buf(buf); -} - -void LogRspMessage::copy_to_buf(char * buf) { - Message::mcopy_to_buf(buf); - -} - - - -/************************/ - -uint64_t InitDoneMessage::get_size() { - uint64_t size = Message::mget_size(); - return size; -} - -void InitDoneMessage::copy_from_txn(TxnManager* txn) {} - -void InitDoneMessage::copy_to_txn(TxnManager* txn) { Message::mcopy_to_txn(txn); } - -void InitDoneMessage::copy_from_buf(char* buf) { Message::mcopy_from_buf(buf); } - -void InitDoneMessage::copy_to_buf(char* buf) { Message::mcopy_to_buf(buf); } - -/************************/ - -void YCSBQueryMessage::init() {} - -void YCSBQueryMessage::release() { - QueryMessage::release(); - // Freeing requests is the responsibility of txn - - requests.release(); -} - -uint64_t YCSBQueryMessage::get_size() { - uint64_t size = QueryMessage::get_size(); - size += sizeof(size_t); - size += sizeof(ycsb_request) * requests.size(); - return size; -} - -void YCSBQueryMessage::copy_from_txn(TxnManager * txn) { - QueryMessage::copy_from_txn(txn); - requests.init(g_req_per_query); - ((YCSBTxnManager*)txn)->copy_remote_requests(this); - -} - -void YCSBQueryMessage::copy_to_txn(TxnManager * txn) { - QueryMessage::copy_to_txn(txn); - -#if CC_ALG==SUNDIAL - ((YCSBQuery*)(txn->query))->requests.clear(); -#endif - ((YCSBQuery*)(txn->query))->requests.append(requests); - ((YCSBQuery*)(txn->query))->orig_request = &requests; -} - -void YCSBQueryMessage::copy_from_buf(char * buf) { - QueryMessage::copy_from_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - size_t size; - COPY_VAL(size,buf,ptr); - assert(size<=g_req_per_query); - requests.init(size); - for(uint64_t i = 0 ; i < size;i++) { - DEBUG_M("YCSBQueryMessage::copy ycsb_request alloc\n"); - ycsb_request * req = (ycsb_request*)mem_allocator.alloc(sizeof(ycsb_request)); - COPY_VAL(*req,buf,ptr); - ASSERT(req->key < g_synth_table_size); - requests.add(req); - } - assert(ptr == get_size()); -} - -void YCSBQueryMessage::copy_to_buf(char * buf) { - QueryMessage::copy_to_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - size_t size = requests.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < requests.size(); i++) { - ycsb_request * req = requests[i]; - COPY_BUF(buf,*req,ptr); - } - assert(ptr == get_size()); -} -/************************/ - -void TPCCQueryMessage::init() {} - -void TPCCQueryMessage::release() { - QueryMessage::release(); - // Freeing items is the responsibility of txn - - items.release(); -} - -uint64_t TPCCQueryMessage::get_size() { - uint64_t size = QueryMessage::get_size(); - - size += sizeof(uint64_t); //txn_type - size += sizeof(uint64_t); //state - size += sizeof(uint64_t) * 3; // w_id, d_id, c_id - - // Payment - if(txn_type == TPCC_PAYMENT) { - - size += sizeof(uint64_t) * 4; // d_w_id, c_w_id, c_d_id;, h_amount - size += sizeof(char) * LASTNAME_LEN; // c_last[LASTNAME_LEN] - size += sizeof(bool); // by_last_name - - } - - // New Order - if(txn_type == TPCC_NEW_ORDER) { - size += sizeof(uint64_t) * 2; // ol_cnt, o_entry_d, - size += sizeof(bool) * 2; // rbk, remote - size += sizeof(Item_no) * items.size(); - size += sizeof(uint64_t); // items size - } - - return size; -} - -void TPCCQueryMessage::copy_from_txn(TxnManager * txn) { - QueryMessage::copy_from_txn(txn); - TPCCQuery* tpcc_query = (TPCCQuery*)(txn->query); - - txn_type = tpcc_query->txn_type; - state = (uint64_t)((TPCCTxnManager*)txn)->state; - // common txn input for both payment & new-order - w_id = tpcc_query->w_id; - d_id = tpcc_query->d_id; - c_id = tpcc_query->c_id; - - // payment - if(txn_type == TPCC_PAYMENT) { - d_w_id = tpcc_query->d_w_id; - c_w_id = tpcc_query->c_w_id; - c_d_id = tpcc_query->c_d_id; - strcpy(c_last,tpcc_query->c_last); - h_amount = tpcc_query->h_amount; - by_last_name = tpcc_query->by_last_name; - } - - // new order - //items.copy(tpcc_query->items); - if(txn_type == TPCC_NEW_ORDER) { - ((TPCCTxnManager*)txn)->copy_remote_items(this); - rbk = tpcc_query->rbk; - remote = tpcc_query->remote; - ol_cnt = tpcc_query->ol_cnt; - o_entry_d = tpcc_query->o_entry_d; - } - -} - -void TPCCQueryMessage::copy_to_txn(TxnManager * txn) { - QueryMessage::copy_to_txn(txn); - - TPCCQuery* tpcc_query = (TPCCQuery*)(txn->query); - - tpcc_query->txn_type = (TPCCTxnType)txn_type; - ((TPCCTxnManager*)txn)->state = (TPCCRemTxnType)state; - // common txn input for both payment & new-order - tpcc_query->w_id = w_id; - tpcc_query->d_id = d_id; - tpcc_query->c_id = c_id; - - // payment - if(txn_type == TPCC_PAYMENT) { - tpcc_query->d_w_id = d_w_id; - tpcc_query->c_w_id = c_w_id; - tpcc_query->c_d_id = c_d_id; - strcpy(tpcc_query->c_last,c_last); - tpcc_query->h_amount = h_amount; - tpcc_query->by_last_name = by_last_name; - } - - // new order - if(txn_type == TPCC_NEW_ORDER) { -#if CC_ALG==SUNDIAL - tpcc_query->items.clear(); -#endif - tpcc_query->items.append(items); - tpcc_query->rbk = rbk; - tpcc_query->remote = remote; - tpcc_query->ol_cnt = ol_cnt; - tpcc_query->o_entry_d = o_entry_d; - } - - -} - - -void TPCCQueryMessage::copy_from_buf(char * buf) { - QueryMessage::copy_from_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_VAL(txn_type,buf,ptr); - assert(txn_type == TPCC_PAYMENT || txn_type == TPCC_NEW_ORDER); - COPY_VAL(state,buf,ptr); - // common txn input for both payment & new-order - COPY_VAL(w_id,buf,ptr); - COPY_VAL(d_id,buf,ptr); - COPY_VAL(c_id,buf,ptr); - - // payment - if(txn_type == TPCC_PAYMENT) { - COPY_VAL(d_w_id,buf,ptr); - COPY_VAL(c_w_id,buf,ptr); - COPY_VAL(c_d_id,buf,ptr); - COPY_VAL(c_last,buf,ptr); - COPY_VAL(h_amount,buf,ptr); - COPY_VAL(by_last_name,buf,ptr); - } - - // new order - if(txn_type == TPCC_NEW_ORDER) { - size_t size; - COPY_VAL(size,buf,ptr); - items.init(size); - for(uint64_t i = 0 ; i < size;i++) { - DEBUG_M("TPCCQueryMessage::copy item alloc\n"); - Item_no * item = (Item_no*)mem_allocator.alloc(sizeof(Item_no)); - COPY_VAL(*item,buf,ptr); - items.add(item); - } - - COPY_VAL(rbk,buf,ptr); - COPY_VAL(remote,buf,ptr); - COPY_VAL(ol_cnt,buf,ptr); - COPY_VAL(o_entry_d,buf,ptr); - } - - assert(ptr == get_size()); - -} - -void TPCCQueryMessage::copy_to_buf(char * buf) { - QueryMessage::copy_to_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_BUF(buf,txn_type,ptr); - COPY_BUF(buf,state,ptr); - // common txn input for both payment & new-order - COPY_BUF(buf,w_id,ptr); - COPY_BUF(buf,d_id,ptr); - COPY_BUF(buf,c_id,ptr); - - // payment - if(txn_type == TPCC_PAYMENT) { - COPY_BUF(buf,d_w_id,ptr); - COPY_BUF(buf,c_w_id,ptr); - COPY_BUF(buf,c_d_id,ptr); - COPY_BUF(buf,c_last,ptr); - COPY_BUF(buf,h_amount,ptr); - COPY_BUF(buf,by_last_name,ptr); - } - - if(txn_type == TPCC_NEW_ORDER) { - size_t size = items.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < items.size(); i++) { - Item_no * item = items[i]; - COPY_BUF(buf,*item,ptr); - } - - COPY_BUF(buf,rbk,ptr); - COPY_BUF(buf,remote,ptr); - COPY_BUF(buf,ol_cnt,ptr); - COPY_BUF(buf,o_entry_d,ptr); - } - assert(ptr == get_size()); -} -/************************/ - -void PPSQueryMessage::init() {} - -void PPSQueryMessage::release() { QueryMessage::release(); } - -uint64_t PPSQueryMessage::get_size() { - uint64_t size = QueryMessage::get_size(); - - size += sizeof(uint64_t); // txn_type - size += sizeof(uint64_t); // state - size += sizeof(uint64_t); // part/product/supply key - size += sizeof(size_t); - size += sizeof(uint64_t) * part_keys.size(); - return size; -} - -void PPSQueryMessage::copy_from_txn(TxnManager * txn) { - QueryMessage::copy_from_txn(txn); - PPSQuery* pps_query = (PPSQuery*)(txn->query); - - txn_type = pps_query->txn_type; - state = (uint64_t)((PPSTxnManager*)txn)->state; - - if (txn_type == PPS_GETPART) { - part_key = pps_query->part_key; - } - if (txn_type == PPS_GETPRODUCT) { - product_key = pps_query->product_key; - } - if (txn_type == PPS_GETSUPPLIER) { - supplier_key = pps_query->supplier_key; - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - //product_key = pps_query->product_key; - part_key = pps_query->part_key; - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - //supplier_key = pps_query->supplier_key; - part_key = pps_query->part_key; - } - if (txn_type == PPS_ORDERPRODUCT) { - part_key = pps_query->part_key; - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - product_key = pps_query->product_key; - } - if (txn_type == PPS_UPDATEPART) { - part_key = pps_query->part_key; - } - - part_keys.copy(pps_query->part_keys); - -} - -void PPSQueryMessage::copy_to_txn(TxnManager * txn) { - QueryMessage::copy_to_txn(txn); - - PPSQuery* pps_query = (PPSQuery*)(txn->query); - - pps_query->txn_type = (PPSTxnType)txn_type; - ((PPSTxnManager*)txn)->state = (PPSRemTxnType)state; - - if (txn_type == PPS_GETPART) { - pps_query->part_key = part_key; - } - if (txn_type == PPS_GETPRODUCT) { - pps_query->product_key = product_key; - } - if (txn_type == PPS_GETSUPPLIER) { - pps_query->supplier_key = supplier_key; - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - //pps_query->product_key = product_key; - pps_query->part_key = part_key; - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - //pps_query->supplier_key = supplier_key; - pps_query->part_key = part_key; - } - if (txn_type == PPS_ORDERPRODUCT) { - //pps_query->product_key = product_key; - pps_query->part_key = part_key; - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - pps_query->product_key = product_key; - } - if (txn_type == PPS_UPDATEPART) { - pps_query->part_key = part_key; - } - pps_query->part_keys.append(part_keys); - -} - - -void PPSQueryMessage::copy_from_buf(char * buf) { - QueryMessage::copy_from_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_VAL(txn_type,buf,ptr); - COPY_VAL(state,buf,ptr); - if (txn_type == PPS_GETPART) { - COPY_VAL(part_key,buf,ptr); - } - if (txn_type == PPS_GETPRODUCT) { - COPY_VAL(product_key,buf,ptr); - } - if (txn_type == PPS_GETSUPPLIER) { - COPY_VAL(supplier_key,buf,ptr); - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - //COPY_VAL(product_key,buf,ptr); - COPY_VAL(part_key,buf,ptr); - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - //COPY_VAL(supplier_key,buf,ptr); - COPY_VAL(part_key,buf,ptr); - } - if (txn_type == PPS_ORDERPRODUCT) { - //COPY_VAL(product_key,buf,ptr); - COPY_VAL(part_key,buf,ptr); - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - COPY_VAL(product_key,buf,ptr); - } - if (txn_type == PPS_UPDATEPART) { - COPY_VAL(part_key,buf,ptr); - } - - size_t size; - COPY_VAL(size,buf,ptr); - part_keys.init(size); - for(uint64_t i = 0 ; i < size;i++) { - uint64_t item; - COPY_VAL(item,buf,ptr); - part_keys.add(item); - } - - assert(ptr == get_size()); - -} - -void PPSQueryMessage::copy_to_buf(char * buf) { - QueryMessage::copy_to_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_BUF(buf,txn_type,ptr); - COPY_BUF(buf,state,ptr); - - if (txn_type == PPS_GETPART) { - COPY_BUF(buf,part_key,ptr); - } - if (txn_type == PPS_GETPRODUCT) { - COPY_BUF(buf,product_key,ptr); - } - if (txn_type == PPS_GETSUPPLIER) { - COPY_BUF(buf,supplier_key,ptr); - } - if (txn_type == PPS_GETPARTBYPRODUCT) { - //COPY_BUF(buf,product_key,ptr); - COPY_BUF(buf,part_key,ptr); - } - if (txn_type == PPS_GETPARTBYSUPPLIER) { - //COPY_BUF(buf,supplier_key,ptr); - COPY_BUF(buf,part_key,ptr); - } - if (txn_type == PPS_ORDERPRODUCT) { - //COPY_BUF(buf,product_key,ptr); - COPY_BUF(buf,part_key,ptr); - } - if (txn_type == PPS_UPDATEPRODUCTPART) { - //COPY_BUF(buf,product_key,ptr); - COPY_BUF(buf,product_key,ptr); - } - if (txn_type == PPS_UPDATEPART) { - //COPY_BUF(buf,product_key,ptr); - COPY_BUF(buf,part_key,ptr); - } - - size_t size = part_keys.size(); - COPY_BUF(buf,size,ptr); - for(uint64_t i = 0; i < part_keys.size(); i++) { - uint64_t item = part_keys[i]; - COPY_BUF(buf,item,ptr); - } - - assert(ptr == get_size()); -} -//---DAquerymessage zone------------ - -void DAQueryMessage::init() {} - -void DAQueryMessage::copy_to_buf(char* buf) { - QueryMessage::copy_to_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_BUF(buf, txn_type, ptr); - COPY_BUF(buf, trans_id, ptr); - COPY_BUF(buf, item_id, ptr); - COPY_BUF(buf, seq_id, ptr); - COPY_BUF(buf, write_version, ptr); - COPY_BUF(buf, state, ptr); - COPY_BUF(buf, next_state, ptr); - COPY_BUF(buf, last_state, ptr); - -} -void DAQueryMessage::copy_from_txn(TxnManager* txn) { - QueryMessage::mcopy_from_txn(txn); - DAQuery* da_query = (DAQuery*)(txn->query); - - txn_type = da_query->txn_type; - trans_id = da_query->trans_id; - item_id = da_query->item_id; - seq_id = da_query->seq_id; - write_version = da_query->write_version; - state = da_query->state; - next_state = da_query->next_state; - last_state = da_query->last_state; -} - -void DAQueryMessage::copy_from_buf(char* buf) { - QueryMessage::copy_from_buf(buf); - uint64_t ptr = QueryMessage::get_size(); - - COPY_VAL(txn_type, buf, ptr); - // common txn input for both payment & new-order - COPY_VAL(trans_id, buf, ptr); - COPY_VAL(item_id, buf, ptr); - COPY_VAL(seq_id, buf, ptr); - COPY_VAL(write_version, buf, ptr); - // payment - COPY_VAL(state, buf, ptr); - COPY_VAL(next_state, buf, ptr); - COPY_VAL(last_state, buf, ptr); - assert(ptr == get_size()); -} - -void DAQueryMessage::copy_to_txn(TxnManager* txn) { - QueryMessage::copy_to_txn(txn); - DAQuery* da_query = (DAQuery*)(txn->query); - - - txn->client_id = return_node_id; - da_query->txn_type = (DATxnType)txn_type; - da_query->trans_id = trans_id; - da_query->item_id = item_id; - da_query->seq_id = seq_id; - da_query->write_version = write_version; - da_query->state = state; - da_query->next_state = next_state; - da_query->last_state = last_state; - -} - -uint64_t DAQueryMessage::get_size() { - uint64_t size = QueryMessage::get_size(); - size += sizeof(DATxnType); - size += sizeof(uint64_t) * 7; - return size; -} -void DAQueryMessage::release() { QueryMessage::release(); } diff --git a/contrib/deneva/transport/message.h b/contrib/deneva/transport/message.h deleted file mode 100644 index f7276d1c..00000000 --- a/contrib/deneva/transport/message.h +++ /dev/null @@ -1,484 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MESSAGE_H_ -#define _MESSAGE_H_ - -#include "global.h" -#include "helper.h" -#include "logger.h" -#include "array.h" - -class ycsb_request; -class LogRecord; -struct Item_no; - -class Message { -public: - virtual ~Message(){} - static Message * create_message(char * buf); - static Message * create_message(BaseQuery * query, RemReqType rtype); - static Message * create_message(TxnManager * txn, RemReqType rtype); - static Message * create_message(uint64_t txn_id, RemReqType rtype); - static Message * create_message(uint64_t txn_id,uint64_t batch_id, RemReqType rtype); - static Message * create_message(LogRecord * record, RemReqType rtype); - static Message * create_message(RemReqType rtype); - static std::vector * create_messages(char * buf); - static void release_message(Message * msg); - RemReqType rtype; - uint64_t txn_id; - uint64_t batch_id; - uint64_t return_node_id; - - uint64_t wq_time; - uint64_t mq_time; - uint64_t ntwk_time; - - // Collect other stats - double lat_work_queue_time; - double lat_msg_queue_time; - double lat_cc_block_time; - double lat_cc_time; - double lat_process_time; - double lat_network_time; - double lat_other_time; - - uint64_t mget_size(); - uint64_t get_txn_id() {return txn_id;} - uint64_t get_batch_id() {return batch_id;} - uint64_t get_return_id() {return return_node_id;} - void mcopy_from_buf(char * buf); - void mcopy_to_buf(char * buf); - void mcopy_from_txn(TxnManager * txn); - void mcopy_to_txn(TxnManager * txn); - RemReqType get_rtype() {return rtype;} - - virtual uint64_t get_size() = 0; - virtual void copy_from_buf(char * buf) = 0; - virtual void copy_to_buf(char * buf) = 0; - virtual void copy_to_txn(TxnManager * txn) = 0; - virtual void copy_from_txn(TxnManager * txn) = 0; - virtual void init() = 0; - virtual void release() = 0; -}; - -// Message types -class InitDoneMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} -}; - -class FinishMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - bool is_abort() { return rc == Abort;} - - uint64_t pid; - RC rc; - - bool readonly; -#if CC_ALG == MAAT || CC_ALG == SSI || CC_ALG == WSI || CC_ALG == SILO - uint64_t commit_timestamp; -#endif -}; - -class LogMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release(); - void copy_from_record(LogRecord * record); - - LogRecord record; -}; - -class LogRspMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} -}; - -class LogFlushedMessage : public Message { -public: - void copy_from_buf(char * buf) {} - void copy_to_buf(char * buf) {} - void copy_from_txn(TxnManager * txn) {} - void copy_to_txn(TxnManager * txn) {} - uint64_t get_size() {return sizeof(LogFlushedMessage);} - void init() {} - void release() {} - -}; - - -class QueryResponseMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - RC rc; - uint64_t pid; -#if CC_ALG == SUNDIAL - uint64_t _min_commit_ts; -#endif -}; - -class AckMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - RC rc; -#if CC_ALG == MAAT - uint64_t lower; - uint64_t upper; -#endif -#if CC_ALG == SILO - uint64_t max_tid; -#endif - - // For Calvin PPS: part keys from secondary lookup for sequencer response - Array part_keys; -}; - -class PrepareMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - uint64_t pid; - RC rc; -#if CC_ALG == SUNDIAL - uint64_t _min_commit_ts; -#endif - uint64_t txn_id; -}; - -class ForwardMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - RC rc; -#if WORKLOAD == TPCC - uint64_t o_id; -#endif -}; - - -class DoneMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - uint64_t batch_id; -}; - -class ClientResponseMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - RC rc; - uint64_t client_startts; -}; - -class ClientQueryMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_query(BaseQuery * query); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - uint64_t pid; - uint64_t ts; -#if CC_ALG == CALVIN - uint64_t batch_id; - uint64_t txn_id; -#endif - uint64_t client_startts; - uint64_t first_startts; - Array partitions; -}; - -class YCSBClientQueryMessage : public ClientQueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_query(BaseQuery * query); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - Array requests; - -}; - -class TPCCClientQueryMessage : public ClientQueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_query(BaseQuery * query); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - uint64_t txn_type; - // common txn input for both payment & new-order - uint64_t w_id; - uint64_t d_id; - uint64_t c_id; - - // payment - uint64_t d_w_id; - uint64_t c_w_id; - uint64_t c_d_id; - char c_last[LASTNAME_LEN]; - uint64_t h_amount; - bool by_last_name; - - // new order - Array items; - bool rbk; - bool remote; - uint64_t ol_cnt; - uint64_t o_entry_d; - -}; - -class PPSClientQueryMessage : public ClientQueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_query(BaseQuery * query); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - uint64_t txn_type; - - // getparts - uint64_t part_key; - // getproducts / getpartbyproduct - uint64_t product_key; - // getsuppliers / getpartbysupplier - uint64_t supplier_key; - - // part keys from secondary lookup - Array part_keys; - - bool recon; -}; -class DAClientQueryMessage : public ClientQueryMessage { - public: - void copy_from_buf(char* buf);//ok - void copy_to_buf(char* buf);//ok - void copy_from_query(BaseQuery* query);//ok - void copy_from_txn(TxnManager* txn);//ok - void copy_to_txn(TxnManager* txn); - uint64_t get_size(); - void init(); - void release(); - - DATxnType txn_type; - uint64_t trans_id; - uint64_t item_id; - uint64_t seq_id; - uint64_t write_version; - uint64_t state; - uint64_t next_state; - uint64_t last_state; -}; - -class QueryMessage : public Message { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init() {} - void release() {} - - uint64_t pid; -#if CC_ALG == WAIT_DIE || CC_ALG == TIMESTAMP || CC_ALG == MVCC - uint64_t ts; -#endif -#if CC_ALG == MVCC - uint64_t thd_id; -#endif -#if CC_ALG == OCC || CC_ALG == FOCC || CC_ALG == BOCC || CC_ALG == SSI || CC_ALG == WSI - uint64_t start_ts; -#endif -#if MODE==QRY_ONLY_MODE - uint64_t max_access; -#endif -}; - -class YCSBQueryMessage : public QueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - Array requests; - -}; - -class TPCCQueryMessage : public QueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - uint64_t txn_type; - uint64_t state; - - // common txn input for both payment & new-order - uint64_t w_id; - uint64_t d_id; - uint64_t c_id; - - // payment - uint64_t d_w_id; - uint64_t c_w_id; - uint64_t c_d_id; - char c_last[LASTNAME_LEN]; - uint64_t h_amount; - bool by_last_name; - - // new order - Array items; - bool rbk; - bool remote; - uint64_t ol_cnt; - uint64_t o_entry_d; - -}; - -class PPSQueryMessage : public QueryMessage { -public: - void copy_from_buf(char * buf); - void copy_to_buf(char * buf); - void copy_from_txn(TxnManager * txn); - void copy_to_txn(TxnManager * txn); - uint64_t get_size(); - void init(); - void release(); - - uint64_t txn_type; - uint64_t state; - - // getparts - uint64_t part_key; - // getproducts / getpartbyproduct - uint64_t product_key; - // getsuppliers / getpartbysupplier - uint64_t supplier_key; - - // part keys from secondary lookup - Array part_keys; -}; - -class DAQueryMessage : public QueryMessage { -public: - void copy_from_buf(char* buf); - void copy_to_buf(char* buf); - void copy_from_txn(TxnManager* txn); - void copy_to_txn(TxnManager* txn); - uint64_t get_size(); - void init(); - void release(); - - DATxnType txn_type; - uint64_t trans_id; - uint64_t item_id; - uint64_t seq_id; - uint64_t write_version; - uint64_t state; - uint64_t next_state; - uint64_t last_state; -}; - -#endif diff --git a/contrib/deneva/transport/msg_thread.cpp b/contrib/deneva/transport/msg_thread.cpp deleted file mode 100644 index ba656b97..00000000 --- a/contrib/deneva/transport/msg_thread.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "msg_thread.h" -#include "msg_queue.h" -#include "message.h" -#include "mem_alloc.h" -#include "transport.h" -#include "query.h" -#include "ycsb_query.h" -#include "tpcc_query.h" -#include "pool.h" -#include "global.h" - -void MessageThread::init(uint64_t thd_id) { - buffer_cnt = g_total_node_cnt; -#if CC_ALG == CALVIN - buffer_cnt++; -#endif - DEBUG_M("MessageThread::init buffer[] alloc\n"); - buffer = (mbuf **) mem_allocator.align_alloc(sizeof(mbuf*) * buffer_cnt); - for(uint64_t n = 0; n < buffer_cnt; n++) { - DEBUG_M("MessageThread::init mbuf alloc\n"); - buffer[n] = (mbuf *)mem_allocator.align_alloc(sizeof(mbuf)); - buffer[n]->init(n); - buffer[n]->reset(n); - } - _thd_id = thd_id; -} - -void MessageThread::check_and_send_batches() { - uint64_t starttime = get_sys_clock(); - for(uint64_t dest_node_id = 0; dest_node_id < buffer_cnt; dest_node_id++) { - if(buffer[dest_node_id]->ready()) { - send_batch(dest_node_id); - } - } - INC_STATS(_thd_id,mtx[11],get_sys_clock() - starttime); -} - -void MessageThread::send_batch(uint64_t dest_node_id) { - uint64_t starttime = get_sys_clock(); - mbuf * sbuf = buffer[dest_node_id]; - assert(sbuf->cnt > 0); - ((uint32_t*)sbuf->buffer)[2] = sbuf->cnt; - INC_STATS(_thd_id,mbuf_send_intv_time,get_sys_clock() - sbuf->starttime); - - DEBUG("Send batch of %ld msgs to %ld\n",sbuf->cnt,dest_node_id); - fflush(stdout); - tport_man.send_msg(_thd_id,dest_node_id,sbuf->buffer,sbuf->ptr); - INC_STATS(_thd_id,msg_batch_size_msgs,sbuf->cnt); - INC_STATS(_thd_id,msg_batch_size_bytes,sbuf->ptr); - if(ISSERVERN(dest_node_id)) { - INC_STATS(_thd_id,msg_batch_size_bytes_to_server,sbuf->ptr); - } else if (ISCLIENTN(dest_node_id)){ - INC_STATS(_thd_id,msg_batch_size_bytes_to_client,sbuf->ptr); - } - INC_STATS(_thd_id,msg_batch_cnt,1); - sbuf->reset(dest_node_id); - INC_STATS(_thd_id,mtx[12],get_sys_clock() - starttime); -} -char type2char1(DATxnType txn_type) -{ - switch (txn_type) - { - case DA_READ: - return 'R'; - case DA_WRITE: - return 'W'; - case DA_COMMIT: - return 'C'; - case DA_ABORT: - return 'A'; - case DA_SCAN: - return 'S'; - default: - return 'U'; - } -} - -void MessageThread::run() { - - uint64_t starttime = get_sys_clock(); - Message * msg = NULL; - uint64_t dest_node_id; - mbuf * sbuf; - - - dest_node_id = msg_queue.dequeue(get_thd_id(), msg); - if(!msg) { - check_and_send_batches(); - INC_STATS(_thd_id,mtx[9],get_sys_clock() - starttime); - return; - } - assert(msg); - assert(dest_node_id < g_total_node_cnt); - assert(dest_node_id != g_node_id); - - sbuf = buffer[dest_node_id]; - - if(!sbuf->fits(msg->get_size())) { - assert(sbuf->cnt > 0); - send_batch(dest_node_id); - } - -#if WORKLOAD == DA - if(!is_server&&false) - printf("cl seq_id:%lu type:%c trans_id:%lu item:%c state:%lu next_state:%lu\n", - ((DAClientQueryMessage*)msg)->seq_id, - type2char1(((DAClientQueryMessage*)msg)->txn_type), - ((DAClientQueryMessage*)msg)->trans_id, - static_cast('x'+((DAClientQueryMessage*)msg)->item_id), - ((DAClientQueryMessage*)msg)->state, - (((DAClientQueryMessage*)msg)->next_state)); - fflush(stdout); -#endif - - uint64_t copy_starttime = get_sys_clock(); - msg->copy_to_buf(&(sbuf->buffer[sbuf->ptr])); - INC_STATS(_thd_id,msg_copy_output_time,get_sys_clock() - copy_starttime); - DEBUG("%ld Buffered Msg %d, (%ld,%ld) to %ld\n", _thd_id, msg->rtype, msg->txn_id, msg->batch_id, - dest_node_id); - sbuf->cnt += 1; - sbuf->ptr += msg->get_size(); - // Free message here, no longer needed unless CALVIN sequencer - if(CC_ALG != CALVIN) { - Message::release_message(msg); - } - if (sbuf->starttime == 0) sbuf->starttime = get_sys_clock(); - - check_and_send_batches(); - INC_STATS(_thd_id,mtx[10],get_sys_clock() - starttime); - -} - diff --git a/contrib/deneva/transport/msg_thread.h b/contrib/deneva/transport/msg_thread.h deleted file mode 100644 index a7bebe48..00000000 --- a/contrib/deneva/transport/msg_thread.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MSG_THREAD_H_ -#define _MSG_THREAD_H_ - -#include "global.h" -#include "helper.h" -#include "nn.hpp" - -struct mbuf { - char * buffer; - uint64_t starttime; - uint64_t ptr; - uint64_t cnt; - bool wait; - - void init(uint64_t dest_id) { buffer = (char *)nn_allocmsg(g_msg_size, 0); } - void reset(uint64_t dest_id) { - - starttime = 0; - cnt = 0; - wait = false; - ((uint32_t*)buffer)[0] = dest_id; - ((uint32_t*)buffer)[1] = g_node_id; - ptr = sizeof(uint32_t) * 3; - } - void copy(char * p, uint64_t s) { - assert(ptr + s <= g_msg_size); - if (cnt == 0) starttime = get_sys_clock(); - COPY_BUF_SIZE(buffer,p,ptr,s); - } - bool fits(uint64_t s) { return (ptr + s) <= g_msg_size; } - bool ready() { - if (cnt == 0) return false; - if ((get_sys_clock() - starttime) >= g_msg_time_limit) return true; - return false; - } -}; - -class MessageThread { -public: - void init(uint64_t thd_id); - void run(); - void check_and_send_batches(); - void send_batch(uint64_t dest_node_id); - void copy_to_buffer(mbuf * sbuf, RemReqType type, BaseQuery * qry); - uint64_t get_msg_size(RemReqType type, BaseQuery * qry); - void rack( mbuf * sbuf,BaseQuery * qry); - void rprepare( mbuf * sbuf,BaseQuery * qry); - void rfin( mbuf * sbuf,BaseQuery * qry); - void cl_rsp(mbuf * sbuf, BaseQuery *qry); - void log_msg(mbuf * sbuf, BaseQuery *qry); - void log_msg_rsp(mbuf * sbuf, BaseQuery *qry); - void rinit(mbuf * sbuf,BaseQuery * qry); - void rqry( mbuf * sbuf, BaseQuery *qry); - void rfwd( mbuf * sbuf, BaseQuery *qry); - void rdone( mbuf * sbuf, BaseQuery *qry); - void rqry_rsp( mbuf * sbuf, BaseQuery *qry); - void rtxn(mbuf * sbuf, BaseQuery *qry); - void rtxn_seq(mbuf * sbuf, BaseQuery *qry); - uint64_t get_thd_id() { return _thd_id;} -private: - mbuf ** buffer; - uint64_t buffer_cnt; - uint64_t _thd_id; - -}; - -#endif diff --git a/contrib/deneva/transport/nn.hpp b/contrib/deneva/transport/nn.hpp deleted file mode 100755 index 9c5fd4ae..00000000 --- a/contrib/deneva/transport/nn.hpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright (c) 2013 250bpm s.r.o. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom - the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ - -#ifndef NN_HPP_INCLUDED -#define NN_HPP_INCLUDED - -#include -#include - -#include -#include -#include -#include - -#if defined __GNUC__ -#define nn_slow(x) __builtin_expect ((x), 0) -#else -#define nn_slow(x) (x) -#endif - -namespace nn -{ - - class exception : public std::exception - { - public: - - exception () : err (nn_errno ()) {} - - virtual const char *what () const throw () - { - return nn_strerror (err); - } - - int num () const - { - return err; - } - - private: - - int err; - }; - - inline const char *symbol (int i, int *value) - { - return nn_symbol (i, value); - } - - inline void *allocmsg (size_t size, int type) - { - void *msg = nn_allocmsg (size, type); - if (nn_slow (!msg)) - throw nn::exception (); - return msg; - } - - inline int freemsg (void *msg) - { - int rc = nn_freemsg (msg); - if (nn_slow (rc != 0)) - throw nn::exception (); - return rc; - } - - class socket - { - public: - - inline socket (int domain, int protocol) - { - s = nn_socket (domain, protocol); - if (nn_slow (s < 0)) - throw nn::exception (); - } - - inline ~socket () - { - int rc = nn_close (s); - assert (rc == 0); - } - - inline void setsockopt (int level, int option, const void *optval, - size_t optvallen) - { - int rc = nn_setsockopt (s, level, option, optval, optvallen); - if (nn_slow (rc != 0)) - throw nn::exception (); - } - - inline void getsockopt (int level, int option, void *optval, - size_t *optvallen) - { - int rc = nn_getsockopt (s, level, option, optval, optvallen); - if (nn_slow (rc != 0)) - throw nn::exception (); - } - - inline int bind (const char *addr) - { - int rc = nn_bind (s, addr); - if (nn_slow (rc < 0)) - throw nn::exception (); - return rc; - } - - inline int connect (const char *addr) - { - int rc = nn_connect (s, addr); - if (nn_slow (rc < 0)) - throw nn::exception (); - return rc; - } - - inline void shutdown (int how) - { - int rc = nn_shutdown (s, how); - if (nn_slow (rc != 0)) - throw nn::exception (); - } - - inline int send (const void *buf, size_t len, int flags) - { - int rc = nn_send (s, buf, len, flags); - if (nn_slow (rc < 0)) { - if (nn_slow (nn_errno () != EAGAIN)) - throw nn::exception (); - return -1; - } - return rc; - } - - inline int recv (void *buf, size_t len, int flags) - { - int rc = nn_recv (s, buf, len, flags); - if (nn_slow (rc < 0)) { - if (nn_slow (nn_errno () != EAGAIN)) - throw nn::exception (); - return -1; - } - return rc; - } - - inline int sendmsg (const struct nn_msghdr *msghdr, int flags) - { - int rc = nn_sendmsg (s, msghdr, flags); - if (nn_slow (rc < 0)) { - if (nn_slow (nn_errno () != EAGAIN)) - throw nn::exception (); - return -1; - } - return rc; - } - - inline int recvmsg (struct nn_msghdr *msghdr, int flags) - { - int rc = nn_recvmsg (s, msghdr, flags); - if (nn_slow (rc < 0)) { - if (nn_slow (nn_errno () != EAGAIN)) - throw nn::exception (); - return -1; - } - return rc; - } - - private: - - int s; - - /* Prevent making copies of the socket by accident. */ - socket (const socket&); - void operator = (const socket&); - }; - - inline void term () - { - nn_term (); - } - -} - -#undef nn_slow - -#endif - - diff --git a/contrib/deneva/transport/transport.cpp b/contrib/deneva/transport/transport.cpp deleted file mode 100644 index 8fb9c241..00000000 --- a/contrib/deneva/transport/transport.cpp +++ /dev/null @@ -1,323 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -#include "transport.h" - -#include - -#include - -#include "global.h" -#include "manager.h" -#include "message.h" -#include "nn.hpp" -#include "query.h" -#include "tpcc_query.h" -#include -#include -#include "global.h" -#include "manager.h" -#include "transport.h" -#include "nn.hpp" -#include "tpcc_query.h" -#include "query.h" -#include "message.h" - - -#define MAX_IFADDR_LEN 20 // max # of characters in name of address - -void Transport::read_ifconfig(const char * ifaddr_file) { - - ifaddr = new char *[g_total_node_cnt]; - - uint64_t cnt = 0; - printf("Reading ifconfig file: %s\n",ifaddr_file); - ifstream fin(ifaddr_file); - string line; - while (getline(fin, line)) { - //memcpy(ifaddr[cnt],&line[0],12); - ifaddr[cnt] = new char[line.length()+1]; - strcpy(ifaddr[cnt],&line[0]); - printf("%ld: %s\n",cnt,ifaddr[cnt]); - cnt++; - } - printf("%lu %u\n", cnt, g_total_node_cnt); - assert(cnt == g_total_node_cnt); -} - -uint64_t Transport::get_socket_count() { - uint64_t sock_cnt = 0; - if(ISCLIENT) - sock_cnt = (g_total_node_cnt)*2 + g_client_send_thread_cnt * g_servers_per_client; - else - sock_cnt = (g_total_node_cnt)*2 + g_client_send_thread_cnt; - return sock_cnt; -} - -string Transport::get_path() { - string path; -#if SHMEM_ENV - path = "/dev/shm/"; -#else - char * cpath; - cpath = getenv("SCHEMA_PATH"); - if(cpath == NULL) - path = "./"; - else - path = string(cpath); -#endif - path += "ifconfig.txt"; - return path; - -} - -Socket * Transport::get_socket() { - //Socket * socket = new Socket; - Socket * socket = (Socket*) mem_allocator.align_alloc(sizeof(Socket)); - new(socket) Socket(); - int timeo = 1000; // timeout in ms - int stimeo = 1000; // timeout in ms - int opt = 0; - socket->sock.setsockopt(NN_SOL_SOCKET,NN_RCVTIMEO,&timeo,sizeof(timeo)); - socket->sock.setsockopt(NN_SOL_SOCKET,NN_SNDTIMEO,&stimeo,sizeof(stimeo)); - // NN_TCP_NODELAY doesn't cause TCP_NODELAY to be set -- nanomsg issue #118 - socket->sock.setsockopt(NN_SOL_SOCKET,NN_TCP_NODELAY,&opt,sizeof(opt)); - return socket; -} - -uint64_t Transport::get_port_id(uint64_t src_node_id, uint64_t dest_node_id) { - uint64_t port_id = TPORT_PORT; - port_id += g_total_node_cnt * dest_node_id; - port_id += src_node_id; - DEBUG("Port ID: %ld -> %ld : %ld\n",src_node_id,dest_node_id,port_id); - return port_id; -} - -#if NETWORK_DELAY_TEST || !ENVIRONMENT_EC2 -uint64_t Transport::get_port_id(uint64_t src_node_id, uint64_t dest_node_id, - uint64_t send_thread_id) { - uint64_t port_id = 0; - DEBUG("Calc port id %ld %ld %ld\n",src_node_id,dest_node_id,send_thread_id); - port_id += g_total_node_cnt * dest_node_id; - DEBUG("%ld\n",port_id); - port_id += src_node_id; - DEBUG("%ld\n",port_id); - // uint64_t max_send_thread_cnt = g_send_thread_cnt > g_client_send_thread_cnt ? - // g_send_thread_cnt : g_client_send_thread_cnt; - // port_id *= max_send_thread_cnt; - port_id += send_thread_id * g_total_node_cnt * g_total_node_cnt; - DEBUG("%ld\n",port_id); - port_id += TPORT_PORT; - DEBUG("%ld\n",port_id); - printf("Port ID: %ld, %ld -> %ld : %ld\n",send_thread_id,src_node_id,dest_node_id,port_id); - return port_id; -} -#else - -uint64_t Transport::get_port_id(uint64_t src_node_id, uint64_t dest_node_id, - uint64_t send_thread_id) { - uint64_t port_id = 0; - DEBUG("Calc port id %ld %ld %ld\n",src_node_id,dest_node_id,send_thread_id); - port_id += dest_node_id + src_node_id; - DEBUG("%ld\n",port_id); - port_id += send_thread_id * g_total_node_cnt * 2; - DEBUG("%ld\n",port_id); - port_id += TPORT_PORT; - DEBUG("%ld\n",port_id); - printf("Port ID: %ld, %ld -> %ld : %ld\n",send_thread_id,src_node_id,dest_node_id,port_id); - return port_id; -} -#endif - - - -Socket * Transport::bind(uint64_t port_id) { - Socket * socket = get_socket(); - char socket_name[MAX_TPORT_NAME]; -#if TPORT_TYPE == IPC - sprintf(socket_name,"ipc://node_%ld.ipc",port_id); -#else - sprintf(socket_name,"tcp://%s:%ld",ifaddr[g_node_id],port_id); -#endif - printf("Sock Binding to %s %d\n",socket_name,g_node_id); - int rc = socket->sock.bind(socket_name); - if(rc < 0) { - printf("Bind Error: %d %s\n",errno,strerror(errno)); - assert(false); - } - return socket; -} - -Socket * Transport::connect(uint64_t dest_id,uint64_t port_id) { - Socket * socket = get_socket(); - char socket_name[MAX_TPORT_NAME]; -#if TPORT_TYPE == IPC - sprintf(socket_name,"ipc://node_%ld.ipc",port_id); -#else - sprintf(socket_name,"tcp://%s;%s:%ld",ifaddr[g_node_id],ifaddr[dest_id],port_id); -#endif - printf("Sock Connecting to %s %d -> %ld\n",socket_name,g_node_id,dest_id); - int rc = socket->sock.connect(socket_name); - if(rc < 0) { - printf("Connect Error: %d %s\n",errno,strerror(errno)); - assert(false); - } - return socket; -} - -void Transport::init() { - _sock_cnt = get_socket_count(); - - rr = 0; - printf("Tport Init %d: %ld\n",g_node_id,_sock_cnt); - - string path = get_path(); - read_ifconfig(path.c_str()); - - for(uint64_t node_id = 0; node_id < g_total_node_cnt; node_id++) { - if (node_id == g_node_id) continue; - // Listening ports - if(ISCLIENTN(node_id)) { - for (uint64_t client_thread_id = g_client_thread_cnt + g_client_rem_thread_cnt; - client_thread_id < - g_client_thread_cnt + g_client_rem_thread_cnt + g_client_send_thread_cnt; - client_thread_id++) { - uint64_t port_id = - get_port_id(node_id, g_node_id, client_thread_id % g_client_send_thread_cnt); - Socket * sock = bind(port_id); - recv_sockets.push_back(sock); - DEBUG("Socket insert: {%ld}: %ld\n",node_id,(uint64_t)sock); - } - } else { - for (uint64_t server_thread_id = g_thread_cnt + g_rem_thread_cnt; - server_thread_id < g_thread_cnt + g_rem_thread_cnt + g_send_thread_cnt; - server_thread_id++) { - uint64_t port_id = get_port_id(node_id,g_node_id,server_thread_id % g_send_thread_cnt); - Socket * sock = bind(port_id); - recv_sockets.push_back(sock); - DEBUG("Socket insert: {%ld}: %ld\n",node_id,(uint64_t)sock); - } - } - // Sending ports - if(ISCLIENTN(g_node_id)) { - for (uint64_t client_thread_id = g_client_thread_cnt + g_client_rem_thread_cnt; - client_thread_id < - g_client_thread_cnt + g_client_rem_thread_cnt + g_client_send_thread_cnt; - client_thread_id++) { - uint64_t port_id = - get_port_id(g_node_id, node_id, client_thread_id % g_client_send_thread_cnt); - std::pair sender = std::make_pair(node_id,client_thread_id); - Socket * sock = connect(node_id,port_id); - send_sockets.insert(std::make_pair(sender,sock)); - DEBUG("Socket insert: {%ld,%ld}: %ld\n",node_id,client_thread_id,(uint64_t)sock); - } - } else { - for (uint64_t server_thread_id = g_thread_cnt + g_rem_thread_cnt; - server_thread_id < g_thread_cnt + g_rem_thread_cnt + g_send_thread_cnt; - server_thread_id++) { - uint64_t port_id = get_port_id(g_node_id,node_id,server_thread_id % g_send_thread_cnt); - std::pair sender = std::make_pair(node_id,server_thread_id); - Socket * sock = connect(node_id,port_id); - send_sockets.insert(std::make_pair(sender,sock)); - DEBUG("Socket insert: {%ld,%ld}: %ld\n",node_id,server_thread_id,(uint64_t)sock); - } - } - } - - - fflush(stdout); -} - -// rename sid to send thread id -void Transport::send_msg(uint64_t send_thread_id, uint64_t dest_node_id, void * sbuf,int size) { - uint64_t starttime = get_sys_clock(); - - Socket * socket = send_sockets.find(std::make_pair(dest_node_id,send_thread_id))->second; - // Copy messages to nanomsg buffer - void * buf = nn_allocmsg(size,0); - memcpy(buf,sbuf,size); - DEBUG("%ld Sending batch of %d bytes to node %ld on socket %ld\n", send_thread_id, size, - dest_node_id, (uint64_t)socket); - - int rc = -1; - while (rc < 0 && (!simulation->is_setup_done() || - (simulation->is_setup_done() && !simulation->is_done()))) { - rc= socket->sock.send(&buf,NN_MSG,NN_DONTWAIT); - } - //nn_freemsg(sbuf); - DEBUG("%ld Batch of %d bytes sent to node %ld\n",send_thread_id,size,dest_node_id); - - INC_STATS(send_thread_id,msg_send_time,get_sys_clock() - starttime); - INC_STATS(send_thread_id,msg_send_cnt,1); -} - -// Listens to sockets for messages from other nodes -std::vector * Transport::recv_msg(uint64_t thd_id) { - int bytes = 0; - void * buf; - uint64_t starttime = get_sys_clock(); - std::vector * msgs = NULL; - //uint64_t ctr = starttime % recv_sockets.size(); - uint64_t rand = (starttime % recv_sockets.size()) / g_this_rem_thread_cnt; - // uint64_t ctr = ((thd_id % g_this_rem_thread_cnt) % recv_sockets.size()) + rand * - // g_this_rem_thread_cnt; - uint64_t ctr = thd_id % g_this_rem_thread_cnt; - if (ctr >= recv_sockets.size()) return msgs; - if(g_this_rem_thread_cnt < g_total_node_cnt) { - ctr += rand * g_this_rem_thread_cnt; - while(ctr >= recv_sockets.size()) { - ctr -= g_this_rem_thread_cnt; - } - } - assert(ctr < recv_sockets.size()); - uint64_t start_ctr = ctr; - - while (bytes <= 0 && (!simulation->is_setup_done() || - (simulation->is_setup_done() && !simulation->is_done()))) { - Socket * socket = recv_sockets[ctr]; - bytes = socket->sock.recv(&buf, NN_MSG, NN_DONTWAIT); - //++ctr; - ctr = (ctr + g_this_rem_thread_cnt); - - if (ctr >= recv_sockets.size()) ctr = (thd_id % g_this_rem_thread_cnt) % recv_sockets.size(); - if (ctr == start_ctr) break; - - if(bytes <= 0 && errno != 11) { - printf("Recv Error %d %s\n",errno,strerror(errno)); - nn::freemsg(buf); - } - - if (bytes > 0) break; - } - - if(bytes <= 0 ) { - INC_STATS(thd_id,msg_recv_idle_time, get_sys_clock() - starttime); - return msgs; - } - - INC_STATS(thd_id,msg_recv_time, get_sys_clock() - starttime); - INC_STATS(thd_id,msg_recv_cnt,1); - - starttime = get_sys_clock(); - - msgs = Message::create_messages((char*)buf); - DEBUG("Batch of %d bytes recv from node %ld; Time: %f\n", bytes, msgs->front()->return_node_id, - simulation->seconds_from_start(get_sys_clock())); - - nn::freemsg(buf); - - INC_STATS(thd_id,msg_unpack_time,get_sys_clock()-starttime); - return msgs; -} diff --git a/contrib/deneva/transport/transport.h b/contrib/deneva/transport/transport.h deleted file mode 100644 index 2fe0c37b..00000000 --- a/contrib/deneva/transport/transport.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2016 Massachusetts Institute of Technology - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _TRANSPORT_H_ -#define _TRANSPORT_H_ -#include "global.h" -#include "nn.hpp" -#include -#include -#include "query.h" - -class Workload; -class Message; - -/* - Message format: -Header: 4 Byte receiver ID - 4 Byte sender ID - 4 Byte # of bytes in msg -Data: MSG_SIZE - HDR_SIZE bytes - */ - -#define GET_RCV_NODE_ID(b) ((uint32_t*)b)[0] - -class Socket { -public: - Socket () : sock(AF_SP,NN_PAIR) {} - ~Socket () { delete &sock;} - char _pad1[CL_SIZE]; - nn::socket sock; - char _pad[CL_SIZE - sizeof(nn::socket)]; -}; - -class Transport { -public: - void read_ifconfig(const char * ifaddr_file); - void init(); - void shutdown(); - uint64_t get_socket_count(); - string get_path(); - Socket * get_socket(); - uint64_t get_port_id(uint64_t src_node_id, uint64_t dest_node_id); - uint64_t get_port_id(uint64_t src_node_id, uint64_t dest_node_id, uint64_t send_thread_id); - Socket * bind(uint64_t port_id); - Socket * connect(uint64_t dest_id,uint64_t port_id); - void send_msg(uint64_t send_thread_id, uint64_t dest_node_id, void * sbuf,int size); - std::vector * recv_msg(uint64_t thd_id); - void simple_send_msg(int size); - uint64_t simple_recv_msg(); - -private: - uint64_t rr; - std::map, Socket*> send_sockets; // dest_node_id,send_thread_id : - // socket - std::vector recv_sockets; - - uint64_t _node_cnt; - uint64_t _sock_cnt; - uint64_t _s_cnt; - char ** ifaddr; - int * endpoint_id; - -}; - -#endif diff --git a/make.sh b/make.sh deleted file mode 100755 index 315923d4..00000000 --- a/make.sh +++ /dev/null @@ -1 +0,0 @@ -g++ -gdwarf-2 -std=c++17 -o 3ts $(cd "$(dirname "$0")";pwd)/src/3ts/backend/main.cc -lgflags -lpthread -lconfig++ diff --git a/test_result/centralizend_result/crdb/result_summary/serializable_total-result.txt b/test_result/centralizend_result/crdb/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..63240c80 --- /dev/null +++ b/test_result/centralizend_result/crdb/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Avoid + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Avoid + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Avoid + +rat_mda_step_rat_predicate_based_insert: Avoid + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..da1d915e --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:6:619:49 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:6:622:619 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:6:720:978 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:53:6:724:491 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:53:6:727:692 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:6:730:895 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 16:53:6:823:571 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:53:6:825:405 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:53:6:828:827 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..70d32f52 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:7:145:274 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:7:148:534 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:7:247:353 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:53:7:250:486 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:53:7:253:575 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:7:256:516 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889587.144869253,0 too old; wrote at 1648889587.246952816,1 errcode: HY000 +Q7 failed at: 2022-4-2 16:53:8:48:989 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889587.144869253,0 too old; wrote at 1648889587.246952816,1 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..c8c75c64 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:8:400:595 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:8:403:821 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:8:500:401 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:53:8:503:880 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:53:8:507:190 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 16:53:8:601:965 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:53:8:703:2 +Q7 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=8947d20d key=/Table/330/1/1/0 rw=true pri=0.04650676 stat=PENDING epo=0 ts=1648889588.50002684 errcode: HY000 +Q7 failed at: 2022-4-2 16:53:9:306:390 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=8947d20d key=/Table/330/1/1/0 rw=true pri=0.04650676 stat=PENDING epo=0 ts=1648889588.50002684 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..3b4c03ff --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:11:383:976 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:11:387:951 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:11:483:991 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:53:11:487:620 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:53:11:491:337 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:11:495:486 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 16:53:11:585:833 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=27646345 key=/Table/333/1/1/0 rw=true pri=0.01261970 stat=PENDING epo=0 ts=1648889591.48360386 errcode: HY000 +Q8 failed at: 2022-4-2 16:53:12:390:533 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=27646345 key=/Table/333/1/1/0 rw=true pri=0.01261970 stat=PENDING epo=0 ts=1648889591.48360386 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..3f1e9364 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:9:553:603 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 16:53:9:557:927 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 16:53:9:560:904 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-2 16:53:9:653:444 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:53:9:755:484 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 16:53:9:763:506 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 16:53:9:766:343 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:53:9:769:535 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 16:53:9:773:367 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 16:53:9:776:569 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..49077e81 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:10:48:555 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 16:53:10:52:730 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:10:148:628 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 16:53:10:153:630 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 16:53:10:170:832 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:10:174:944 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 16:53:10:250:997 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=c6ca7478 key=/Table/332/1/"kevin"/"checking"/0 rw=true pri=0.06037639 stat=PENDING epo=0 ts=16 errcode: HY000 +Q8 failed at: 2022-4-2 16:53:11:55:114 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=c6ca7478 key=/Table/332/1/"kevin"/"checking"/0 rw=true pri=0.06037639 stat=PENDING epo=0 ts=16 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..c9156645 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat.txt @@ -0,0 +1,90 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:12:714:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 16:53:12:717:793 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:12:814:282 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 16:53:12:817:887 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:12:916:503 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 16:53:12:920:179 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 16:53:13:16:387 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 16:53:13:116:164 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 16:53:13:216:323 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:53:13:317:177 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:53:13:516:406 + Q11 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=bc65461d key=/Table/334/1/1/0 rw=true pri=0.00452134 stat=PENDING epo=0 ts=1648889592.91615675 errcode: HY000 + Q11 failed at: 2022-4-2 16:53:14:517:981 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=bc65461d key=/Table/334/1/1/0 rw=true pri=0.00452134 stat=PENDING epo=0 ts=1648889592.91615675 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..af310a1f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:20:506:798 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:20:510:541 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:20:605:331 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 16:53:20:609:906 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:20:613:911 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:20:708:644 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 16:53:20:712:234 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 16:53:20:716:229 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-2 16:53:20:719:599 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 16:53:20:810:537 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-2 16:53:20:812:290 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 16:53:20:815:850 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..180d08f7 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:19:677:63 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:53:19:681:657 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:19:776:517 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:53:19:780:669 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:19:873:76 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 16:53:19:876:915 + Q7-T3 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:53:19:880:466 + Q8-T4 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-2 16:53:19:976:338 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 16:53:19:979:715 + Q10-T4 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-2 16:53:19:982:881 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 16:53:20:75:321 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:53:20:77:211 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 16:53:20:173:706 +Q14-T1 execute sql: 'COMMIT TRANSACTION;' +Q14 finished at: 2022-4-2 16:53:20:175:621 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 16:53:20:180:642 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..fb54777c --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,90 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:14:846:121 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 16:53:14:849:986 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:14:945:358 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 16:53:14:949:504 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:15:45:108 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 16:53:15:49:342 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 16:53:15:151:612 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 16:53:15:248:369 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 16:53:15:348:54 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:53:15:448:324 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:53:15:647:444 + Q11 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=28793754 key=/Table/335/1/1 rw=true pri=0.03177472 stat=PENDING epo=0 ts=1648889595.044727208, errcode: HY000 + Q11 failed at: 2022-4-2 16:53:16:650:0 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=28793754 key=/Table/335/1/1 rw=true pri=0.03177472 stat=PENDING epo=0 ts=1648889595.044727208, + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..e5d92f92 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,87 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:16:948:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 16:53:16:961:521 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:17:48:486 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 16:53:17:52:290 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:17:148:412 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 16:53:17:152:120 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 16:53:17:250:314 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 16:53:17:351:85 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 16:53:17:450:336 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:53:17:552:164 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:53:17:751:324 + Q11 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=56c02bb7 key=/Table/336/1/1/0 rw=true pri=0.00554938 stat=PENDING epo=0 ts=1648889597.14800837 errcode: HY000 + Q11 failed at: 2022-4-2 16:53:18:752:22 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=56c02bb7 key=/Table/336/1/1/0 rw=true pri=0.00554938 stat=PENDING epo=0 ts=1648889597.14800837 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..e2d25f5c --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,121 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:21:147:87 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 16:53:21:151:376 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 16:53:21:155:190 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-2 16:53:21:246:842 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 16:53:21:250:476 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 16:53:21:253:908 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:53:21:257:421 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-2 16:53:21:349:72 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 16:53:21:353:526 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 16:53:21:356:956 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-2 16:53:21:358:628 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 16:53:21:454:623 +Q13-T1 execute sql: 'COMMIT TRANSACTION;' +Q13 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=fda15299 key=/Table/340/1/0/0 rw=true pri=0.01143240 stat=PENDING epo=0 ts=1648889601.34859007 errcode: HY000 +Q13 failed at: 2022-4-2 16:53:22:759:597 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SERIALIZABLE): "sql txn" id=fda15299 key=/Table/340/1/0/0 rw=true pri=0.01143240 stat=PENDING epo=0 ts=1648889601.34859007 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..b9814723 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:19:32:345 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 16:53:19:35:955 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:19:132:460 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 16:53:19:136:690 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:53:19:140:56 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 16:53:19:144:462 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 16:53:19:147:665 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:53:19:150:542 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-2 16:53:19:232:785 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 16:53:19:236:461 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 16:53:19:239:523 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 16:53:19:243:290 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 16:53:19:246:559 + Q14-T3 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-2 16:53:19:250:546 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 16:53:19:334:943 +Q16-T1 execute sql: 'COMMIT TRANSACTION;' +Q16 finished at: 2022-4-2 16:53:19:337:19 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 16:53:19:341:278 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/crdb/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..b96c3930 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:5:486:810 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 16:53:5:490:194 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:5:586:870 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 16:53:5:590:159 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:5:597:748 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889585.486334849,0 too old; wrote at 1648889585.586497792,1 errcode: HY000 +Q6 failed at: 2022-4-2 16:53:6:291:46 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889585.486334849,0 too old; wrote at 1648889585.586497792,1 + diff --git a/test_result/centralizend_result/crdb/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/crdb/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..a8fe60af --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,57 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 17:11:2:974:620 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 17:11:2:987:952 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 17:11:3:69:739 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 17:11:3:76:433 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 17:11:3:80:252 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 17:11:3:172:212 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 17:11:3:175:236 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 17:11:3:179:334 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..b60794da --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:35:843:731 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:35:848:536 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:35:943:160 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:35:947:281 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-2 16:52:36:59:421 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:36:246:191 + Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=6dfc20ac key=/Table/297/1/1/0 rw=true pri=0.01388052 stat=ABORTED epo=0 ts=1648889555.942584994 errcode: HY000 + Q5 failed at: 2022-4-2 16:52:36:576:336 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=6dfc20ac key=/Table/297/1/1/0 rw=true pri=0.01388052 stat=ABORTED epo=0 ts=1648889555.942584994 + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ce138127 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:36:906:164 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:36:910:645 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:37:6:93 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:37:9:779 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:37:119:777 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:37:123:752 +Q7 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_ABORT_SPAN): "sql txn" id=74990123 key=/Table/298/1/0/0 rw=true pri=0.01323698 stat=ABORTED epo=0 ts=1648889557.005586845,1 o errcode: HY000 +Q7 failed at: 2022-4-2 16:52:37:832:763 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_ABORT_SPAN): "sql txn" id=74990123 key=/Table/298/1/0/0 rw=true pri=0.01323698 stat=ABORTED epo=0 ts=1648889557.005586845,1 o + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..a1906abf --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,53 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:38:176:466 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:38:180:183 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:38:276:786 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:38:280:743 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 16:52:38:378:469 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:38:382:239 + Q5 finished at: 2022-4-2 16:52:38:390:589 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:52:38:483:60 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:38:486:960 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..3fceb3a6 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:38:808:758 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:52:38:812:426 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:38:908:512 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:38:912:320 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:52:38:915:832 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 16:52:39:11:248 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:39:110:523 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:39:208:728 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:39:212:592 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..5c81b566 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:40:581:343 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:40:584:775 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:40:681:552 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:52:40:685:445 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 16:52:40:783:156 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:40:787:95 + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:40:794:871 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:52:40:881:336 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:40:896:759 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..556ef637 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:41:217:439 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:41:221:680 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:41:317:547 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:52:41:321:482 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 16:52:41:419:20 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:41:422:969 + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:41:430:871 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:41:432:972 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:41:436:425 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..f7b52476 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:39:525:393 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 16:52:39:529:591 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:39:623:985 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:39:628:603 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:52:39:640:990 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:39:644:745 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 16:52:39:725:617 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:39:727:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 16:52:39:730:764 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..7d892e39 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:40:29:59 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 16:52:40:39:609 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:40:128:893 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 16:52:40:132:102 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 16:52:40:134:933 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:40:138:58 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 16:52:40:249:669 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:40:251:983 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 16:52:40:255:335 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..9ee7ba9f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:34:530:528 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:34:534:579 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:34:630:662 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:34:634:645 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 16:52:34:732:539 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:34:933:761 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:34:942:919 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:34:963:972 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:34:970:209 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..de802241 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:35:306:802 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:35:310:707 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:35:406:781 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:35:411:616 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 16:52:35:507:707 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:35:512:969 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:35:520:904 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:35:524:857 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:35:528:228 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..6188472f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:41:759:44 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:41:762:637 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:41:858:928 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:41:863:128 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:41:961:857 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 16:52:41:969:486 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 16:52:42:61:131 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:52:42:65:429 + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 16:52:42:74:447 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-2 16:52:42:166:622 + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 16:52:42:175:58 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:52:42:263:624 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 16:52:42:268:672 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..8fdbeba7 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,206 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN TRANSACTION;' + Q1 finished at: 2022-4-2 17:27:5:712:79 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 17:27:5:726:913 +Q3-T1 execute sql: 'BEGIN TRANSACTION;' +Q3 finished at: 2022-4-2 17:27:5:806:747 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 17:27:5:813:256 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 17:27:5:906:907 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 17:27:5:912:640 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-2 17:27:6:7:141 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 17:27:6:12:179 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 17:27:6:110:283 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-2 17:27:6:209:42 + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 17:27:6:217:667 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 17:27:6:312:35 + Q13-T3 execute sql: 'COMMIT TRANSACTION;' + Q13 finished at: 2022-4-2 17:27:6:407:35 + Q14-T4 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-2 17:27:6:410:227 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 17:27:6:415:876 + +The current result is consistent with the [(13) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..969ce569 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:43:636:278 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:43:641:204 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:43:735:949 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:43:740:773 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:43:836:102 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 16:52:43:841:389 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 16:52:43:940:639 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:52:43:946:302 + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 16:52:43:952:913 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-2 16:52:44:38:381 + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 16:52:44:45:341 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:52:44:138:47 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 16:52:44:141:809 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..a33c8c47 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:44:445:477 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 16:52:44:454:239 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:44:545:188 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 16:52:44:549:659 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:44:645:752 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 16:52:44:651:894 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 16:52:44:747:897 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-2 16:52:44:752:774 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 16:52:44:759:643 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-2 16:52:44:847:478 + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-2 16:52:44:872:86 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:52:44:947:943 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 16:52:44:951:764 + +The current result is consistent with the [(5) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..8494439b --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,44 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:30:123:669 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:30:131:464 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:30:217:226 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 16:52:30:335:656 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:30:417:922 +Q5 finished at: 2022-4-2 16:52:30:514:207 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 16:52:30:519:396 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..92fc2d2c --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:31:565:893 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:31:570:753 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:31:666:67 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 16:52:31:765:904 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:31:965:271 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 16:52:31:973:611 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:31:976:572 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 16:52:31:980:356 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b6301d37 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:32:294:584 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:32:299:673 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:32:394:636 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 16:52:32:496:908 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:32:501:408 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 16:52:32:509:523 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:52:32:511:834 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 16:52:32:515:124 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..210509ba --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:33:904:863 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:33:909:653 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:34:5:399 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 16:52:34:106:576 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-2 16:52:34:111:258 + Q4 finished at: 2022-4-2 16:52:34:117:225 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:34:207:471 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 16:52:34:213:48 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..6edfa97f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,57 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 17:3:16:212:181 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 17:3:16:226:708 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 17:3:16:307:584 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 17:3:16:314:243 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 17:3:16:407:747 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 17:3:16:508:114 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 17:3:16:604:887 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 17:3:16:609:389 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..99d97dbd --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,57 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:32:824:457 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 16:52:32:828:771 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:32:924:263 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 16:52:32:929:870 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:52:32:933:787 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 16:52:33:26:448 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:33:29:15 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 16:52:33:32:509 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..6a859974 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:33:385:681 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 16:52:33:399:667 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:33:485:555 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 16:52:33:489:411 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:52:33:493:43 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 16:52:33:587:210 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:33:589:858 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 16:52:33:593:715 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..1d9fe1ad --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:50:472:711 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:50:476:546 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:50:573:57 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:50:576:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 16:52:50:671:334 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:50:675:357 + Q5 finished at: 2022-4-2 16:52:50:682:789 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:50:687:384 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 16:52:50:690:695 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..c4888768 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:51:31:130 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:51:34:372 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:51:131:333 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:51:135:368 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 16:52:51:251:927 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:52:51:334:959 +Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=a169cc1e key=/Table/316/1/0/0 rw=true pri=0.00752718 stat=ABORTED epo=0 ts=1648889571.030721457 errcode: HY000 +Q6 failed at: 2022-4-2 16:52:51:846:79 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=a169cc1e key=/Table/316/1/0/0 rw=true pri=0.00752718 stat=ABORTED epo=0 ts=1648889571.030721457 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..f215eea5 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:52:189:799 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:52:193:155 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:52:289:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:52:292:897 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 16:52:52:398:920 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:52:492:639 +Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=2eaf352b key=/Table/317/1/0/0 rw=true pri=0.00510947 stat=ABORTED epo=0 ts=1648889572.189359556 errcode: HY000 +Q6 failed at: 2022-4-2 16:52:52:992:684 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=2eaf352b key=/Table/317/1/0/0 rw=true pri=0.00510947 stat=ABORTED epo=0 ts=1648889572.189359556 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..9247baee --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:53:325:159 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:53:329:229 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:53:432:990 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:53:436:234 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 16:52:53:536:572 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:53:539:534 +Q7 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e329b49a key=/Table/318/1/0/0 rw=true pri=0.00928901 stat=ABORTED epo=0 ts=1648889573.324600888 errcode: HY000 +Q7 failed at: 2022-4-2 16:52:54:227:705 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e329b49a key=/Table/318/1/0/0 rw=true pri=0.00928901 stat=ABORTED epo=0 ts=1648889573.324600888 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..ffeefd9a --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:54:555:746 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:52:54:559:501 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:54:655:902 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:54:659:146 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:52:54:662:213 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-2 16:52:54:859:363 +Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889574.555247881,0 too old; wrote at 1648889574.655508025,1 errcode: HY000 +Q6 failed at: 2022-4-2 16:52:55:468:761 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889574.555247881,0 too old; wrote at 1648889574.655508025,1 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..697c113f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:55:812:679 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 16:52:55:816:529 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:55:912:464 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:52:55:916:58 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 16:52:55:918:987 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:56:114:906 +Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889575.812167779,0 too old; wrote at 1648889575.911965607,1 errcode: HY000 +Q6 failed at: 2022-4-2 16:52:56:724:661 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889575.812167779,0 too old; wrote at 1648889575.911965607,1 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..938a005e --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:57:81:303 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:57:85:211 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:57:180:891 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:52:57:184:569 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 16:52:57:282:373 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:57:286:335 + Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889577.180503439,0 too old; wrote at 1648889577.180503439,2 errcode: HY000 + Q5 failed at: 2022-4-2 16:52:57:795:551 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889577.180503439,0 too old; wrote at 1648889577.180503439,2 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..d2748e59 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:58:126:383 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:58:129:711 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:58:229:101 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:52:58:232:499 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 16:52:58:327:904 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:58:533:580 + Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889578.228739680,0 too old; wrote at 1648889578.228739680,2 errcode: HY000 + Q5 failed at: 2022-4-2 16:52:59:44:731 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889578.228739680,0 too old; wrote at 1648889578.228739680,2 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..db5a2aa9 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:59:371:862 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:59:375:572 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:59:471:508 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 16:52:59:490:17 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 16:52:59:574:538 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-2 16:52:59:578:375 + Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889579.471137871,0 too old; wrote at 1648889579.471137871,2 errcode: HY000 + Q5 failed at: 2022-4-2 16:53:0:88:400 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889579.471137871,0 too old; wrote at 1648889579.471137871,2 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..f0389c2c --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:0:452:107 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:53:0:455:384 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:0:552:119 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:53:0:555:491 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-2 16:53:0:652:3 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 16:53:0:655:276 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 16:53:0:762:614 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-2 16:53:0:854:432 + Q8 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e76ccdd4 key=/Table/324/1/2/0 rw=true pri=0.00480525 stat=ABORTED epo=0 ts=1648889580.651684517 errcode: HY000 + Q8 failed at: 2022-4-2 16:53:1:555:694 +Q9 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_ABORT_SPAN): "sql txn" id=7a95c40f key=/Table/324/1/0/0 rw=true pri=0.01270054 stat=ABORTED epo=0 ts=1648889580.651684517,1 o errcode: HY000 +Q9 failed at: 2022-4-2 16:53:1:662:239 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e76ccdd4 key=/Table/324/1/2/0 rw=true pri=0.00480525 stat=ABORTED epo=0 ts=1648889580.651684517 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..cef6b97a --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:53:2:11:895 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:53:2:15:947 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:53:2:113:226 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 16:53:2:117:345 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-2 16:53:2:210:128 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 16:53:2:414:924 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-2 16:53:2:520:958 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-2 16:53:2:814:848 + Q6 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e7f9c264 key=/Table/325/1/1/0 rw=true pri=0.00574430 stat=ABORTED epo=0 ts=1648889582.112823795 errcode: HY000 + Q6 failed at: 2022-4-2 16:53:3:114:416 +Q9 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889582.011428435,0 too old; wrote at 1648889582.209768259,1 errcode: HY000 +Q9 failed at: 2022-4-2 16:53:3:724:704 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REASON_PUSHER_ABORTED): "sql txn" id=e7f9c264 key=/Table/325/1/1/0 rw=true pri=0.00574430 stat=ABORTED epo=0 ts=1648889582.112823795 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..92d8a128 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:45:269:798 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:45:273:620 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:45:369:781 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 16:52:45:473:538 + Q4 finished at: 2022-4-2 16:52:45:478:464 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:45:572:576 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 16:52:45:576:368 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 16:52:45:664:625 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..714c1f7f --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 17:5:35:407:121 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 17:5:35:414:26 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 17:5:35:502:377 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'COMMIT TRANSACTION;' +Q5 finished at: 2022-4-2 17:5:35:606:400 + Q4 finished at: 2022-4-2 17:5:35:618:397 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 17:5:35:704:339 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 17:5:35:717:642 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 17:5:35:812:352 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..efa1e3e5 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_full_write.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:46:431:18 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:46:434:925 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:46:531:264 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 16:52:46:633:72 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-2 16:52:46:660:813 + Q4 finished at: 2022-4-2 16:52:46:668:526 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:46:732:830 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 16:52:46:736:459 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..8bba31e4 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:47:67:354 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:47:71:395 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:47:167:615 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 16:52:47:274:472 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:47:278:240 + Q4 finished at: 2022-4-2 16:52:47:285:416 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:52:47:289:56 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 16:52:47:291:951 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..6fb6a10e --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:49:915:427 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 16:52:49:918:994 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:50:17:366 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 16:52:50:115:468 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-2 16:52:50:119:496 + Q4 finished at: 2022-4-2 16:52:50:131:463 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-2 16:52:50:135:699 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 16:52:50:139:273 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..14d3f34e --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:47:611:890 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 16:52:47:616:239 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:47:712:408 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 16:52:47:716:327 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-2 16:52:47:914:368 +Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889567.611475606,0 too old; wrote at 1648889567.711824399,1 errcode: HY000 +Q5 failed at: 2022-4-2 16:52:48:423:981 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889567.611475606,0 too old; wrote at 1648889567.711824399,1 + diff --git a/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9ea41593 --- /dev/null +++ b/test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-2 16:52:48:747:850 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 16:52:48:751:882 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-2 16:52:48:847:508 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 16:52:48:851:303 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-2 16:52:49:53:829 +Q5 failed reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889568.747395113,0 too old; wrote at 1648889568.847053441,1 errcode: HY000 +Q5 failed at: 2022-4-2 16:52:49:564:48 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1648889568.747395113,0 too old; wrote at 1648889568.847053441,1 + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..1cc2a2b4 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:30:338:29 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:30:338:746 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:30:437:923 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:30:438:586 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:30:439:35 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:30:456:391 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:20:30:538:184 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:30:546:95 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:30:547:46 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:30:548:826 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..92d08ce9 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:30:889:607 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:30:890:408 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:30:989:573 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:30:990:246 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:30:990:734 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:31:2:441 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:31:89:669 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:31:118:586 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:31:119:514 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:31:131:705 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..c614a791 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:31:450:93 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:31:450:756 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:31:550:165 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:31:550:888 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:31:551:383 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:20:31:650:264 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:31:663:500 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:31:768:566 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:31:769:584 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:31:773:403 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..d1e98c5a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:33:182:494 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:33:183:187 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:33:282:471 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:33:283:201 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:33:283:732 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:33:301:383 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:33:382:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:33:398:809 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:33:399:785 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:33:408:305 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..f4463a4d --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:32:77:579 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:20:32:78:424 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 14:20:32:79:27 + Q4-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q4 finished at: 2022-4-2 14:20:32:177:583 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:20:32:178:442 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:20:32:179:13 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:32:189:466 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:32:290:301 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:20:32:291:342 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:20:32:292:17 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:32:294:507 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..fb3da580 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:32:631:536 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:20:32:632:361 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:32:731:431 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:20:32:732:304 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 14:20:32:733:180 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:32:749:531 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 14:20:32:831:732 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:32:853:943 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 14:20:32:855:59 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:32:861:481 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..659a0cf8 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:33:756:989 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:20:33:757:899 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:33:856:955 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:33:857:892 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:33:957:68 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:20:33:958:44 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:20:34:57:140 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:20:34:157:188 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:20:34:257:147 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:34:375:952 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:34:471:183 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:34:570:427 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:34:571:652 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:34:582:987 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..ead6a4f5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:38:587:843 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:38:588:817 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:38:687:763 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:38:688:409 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:38:700:609 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:38:787:757 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:20:38:788:653 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:20:38:789:233 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:38:798:412 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:20:38:888:327 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:20:38:892:825 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:20:38:893:858 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:20:38:897:553 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..df3bb654 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:37:722:865 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:37:724:172 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:37:822:788 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:37:823:995 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:37:922:866 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 14:20:37:923:603 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:37:935:330 + Q8-T4 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:20:38:22:871 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:20:38:23:595 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:38:39:97 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 14:20:38:123:648 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:38:126:145 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 14:20:38:223:887 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 14:20:38:233:28 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:20:38:234:788 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:20:38:251:946 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..cadeb773 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:34:919:516 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:20:34:920:487 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:35:19:465 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:35:20:387 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:35:119:617 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:20:35:120:668 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:20:35:219:694 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:20:35:319:628 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:20:35:419:677 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:35:529:50 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:35:630:333 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:35:730:902 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:20:35:731:977 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:35:736:597 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..654ab18c --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:36:11:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:20:36:12:659 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:36:111:583 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:20:36:112:462 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:36:211:677 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:20:36:212:618 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 14:20:36:311:786 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 14:20:36:411:934 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 14:20:36:512:77 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:36:620:98 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:36:721:489 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:36:819:491 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:36:820:723 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:36:827:16 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..d7ca1ddf --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:39:168:43 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:20:39:168:901 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:20:39:169:576 + Q4-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q4 finished at: 2022-4-2 14:20:39:268:30 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:20:39:268:952 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 14:20:39:269:478 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:39:282:133 + Q8-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:20:39:368:73 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:20:39:368:969 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:20:39:369:679 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:39:380:229 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 14:20:39:468:335 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 14:20:39:484:296 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 14:20:39:485:513 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 14:20:39:489:814 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..eba7c60b --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:37:114:242 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:20:37:115:109 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:37:213:968 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:20:37:214:858 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:37:215:388 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:20:37:216:146 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 14:20:37:216:662 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:37:226:196 + Q9-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q9 finished at: 2022-4-2 14:20:37:313:976 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:20:37:314:806 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 14:20:37:315:344 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:20:37:316:104 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 14:20:37:316:554 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:37:329:606 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 14:20:37:414:501 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 14:20:37:418:568 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 14:20:37:419:768 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 14:20:37:423:610 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c303c925 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:29:753:456 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:20:29:754:109 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:29:853:480 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:29:854:119 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:29:864:718 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 14:20:29:953:622 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:29:972:818 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:29:973:704 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:29:982:221 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..c7759a72 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:29:184:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:29:185:569 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:29:284:587 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:29:285:261 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:29:297:949 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:20:29:385:58 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:29:388:34 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:29:388:898 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:29:403:683 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:29:411:385 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..92fb24bb --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:6:317:720 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:6:318:362 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:6:417:652 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:6:418:287 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:6:418:930 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:20:6:622:313 + Q7 finished at: 2022-4-2 14:20:6:628:994 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:6:722:828 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:20:6:723:903 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:6:728:73 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..511c03b5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:7:29:207 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:7:29:780 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:7:129:182 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:7:129:869 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:7:130:548 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:7:145:506 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:7:229:284 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:7:237:471 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:20:7:238:456 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:7:242:233 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..a23c24cc --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:7:532:611 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:7:533:164 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:7:632:507 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:7:633:151 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:7:732:832 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:7:739:124 +Q7 finished at: 2022-4-2 14:20:7:742:263 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:7:840:135 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:7:841:230 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:7:855:515 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..f4451d34 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:8:183:277 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:8:183:964 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:8:283:232 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:8:283:847 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:8:284:316 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:8:383:557 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:8:502:165 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:8:584:656 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:8:585:637 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:8:589:751 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..f05d19d3 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:9:899:864 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:9:900:474 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:9:999:830 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:10:8:450 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:10:9:80 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:20:10:100:93 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:10:113:696 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:10:201:751 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:10:202:773 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:10:206:798 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..b84c8a25 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:10:501:544 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:10:502:249 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:10:594:267 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:10:595:135 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:10:595:842 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:10:603:66 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:10:694:306 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:10:702:386 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:10:703:289 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:10:707:66 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..594dc2a7 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:8:894:529 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:20:8:895:293 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:8:994:438 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:8:995:66 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:8:995:762 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:9:5:794 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:20:9:94:706 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:9:100:304 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:20:9:101:214 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:9:108:98 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..cf0bda53 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:9:396:667 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:20:9:397:563 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:9:496:636 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 14:20:9:497:170 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:20:9:497:613 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:9:507:287 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:20:9:596:927 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:9:607:602 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:20:9:608:524 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:9:612:55 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a9043044 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:5:97:226 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:5:97:923 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:5:197:155 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:5:197:815 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:5:198:566 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:5:297:606 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:5:411:433 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:5:503:930 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:5:504:921 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:5:511:796 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..f47f9b8c --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:5:796:729 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:5:797:405 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:5:896:709 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:5:897:297 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:5:897:913 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:5:907:311 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:20:5:997:45 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:6:12:801 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:6:13:847 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:6:18:214 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..84802a88 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:10:986:459 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:10:987:65 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:11:86:394 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:11:87:6 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:11:87:822 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:11:186:394 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:11:186:993 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:20:11:187:817 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 14:20:11:286:861 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:11:298:568 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:11:395:432 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:11:493:794 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:11:495:37 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:11:496:294 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..be70c7a5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q1 finished at: 2022-4-2 14:20:11:768:595 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:20:11:769:936 +Q3-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q3 finished at: 2022-4-2 14:20:11:868:623 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 14:20:11:869:336 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:11:968:559 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:20:11:970:39 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:20:11:971:234 + Q8-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:20:12:68:605 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:20:12:69:378 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:20:12:169:522 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:20:12:277:52 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:12:376:179 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:20:12:476:578 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:12:480:911 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:20:12:482:330 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:20:12:486:262 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..1264dec2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:12:784:488 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:12:785:136 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:12:884:465 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:12:885:35 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:20:12:887:19 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:12:984:472 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:12:985:54 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:20:12:985:948 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:20:13:84:964 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:13:99:797 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:13:197:693 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:13:291:984 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:20:13:293:81 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:13:297:548 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..a5012625 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:13:596:10 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:20:13:596:788 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:13:695:879 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:20:13:696:451 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:20:13:697:544 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:13:795:919 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:20:13:796:444 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-2 14:20:13:797:279 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:20:13:896:406 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:13:907:525 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:14:15:406 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:14:124:421 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:14:125:673 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:14:133:118 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..6554d06d --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-11 19:13:58:606:31 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:13:58:606:705 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-11 19:13:58:714:894 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + Q4 finished at: 2022-4-11 19:13:58:715:750 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 19:13:58:813:169 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 19:13:58:912:542 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + Q7 finished at: 2022-4-11 19:13:58:913:460 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 19:13:58:920:444 + +The current result is consistent with the [(1) expected_result] of serial scheduling +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent \ No newline at end of file diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..8f8af0f5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:2:232:994 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:2:233:567 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:2:333:4 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:2:333:731 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:20:2:433:265 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:2:537:991 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:2:642:667 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:20:2:643:739 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:2:653:806 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..77119394 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:2:944:217 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:2:944:902 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:3:44:106 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:3:44:811 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:3:49:586 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:20:3:144:400 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:3:159:624 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:20:3:160:663 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:3:169:445 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..c4db8ced --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:4:459:810 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:4:460:422 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:4:559:778 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:20:4:660:178 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:4:665:608 +Q6 finished at: 2022-4-2 14:20:4:669:403 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:4:766:548 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:4:767:597 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:4:771:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..71f12c44 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:1:498:155 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:1:498:965 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:1:598:173 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:1:598:791 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:20:1:698:515 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:1:814:963 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:1:903:547 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:1:904:600 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:1:911:746 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..adcc5732 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:3:444:862 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:20:3:445:645 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:3:544:759 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:3:545:425 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:3:556:368 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:20:3:645:30 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:3:658:738 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:20:3:659:656 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:3:665:833 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..365e6c31 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:3:944:353 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:20:3:945:277 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:4:44:250 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 14:20:4:44:779 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:4:55:463 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:20:4:144:614 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:4:156:65 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:20:4:157:136 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:4:169:453 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..12eb80c2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:18:608:384 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:18:609:91 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:18:708:317 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:18:708:933 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:20:18:808:676 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:18:814:82 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:18:817:212 + Q6 finished at: 2022-4-2 14:20:18:820:344 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:18:821:518 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:18:830:875 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e3365262 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:19:129:759 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:19:130:370 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:19:229:667 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:19:230:440 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:20:19:329:979 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:19:437:993 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 14:20:19:938:648 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4ae51930 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:20:228:788 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:20:229:422 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:20:328:733 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:20:329:383 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:20:20:429:83 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:20:546:934 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 14:20:21:36:406 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..8434f081 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:21:362:497 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:21:363:115 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:21:462:452 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:21:463:203 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:20:21:562:707 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:21:569:899 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 14:20:22:266:951 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..0bb2b276 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:22:567:591 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:22:568:384 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:22:667:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:22:668:283 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:22:668:785 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:20:22:871:502 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:22:876:713 +Q7 finished at: 2022-4-2 14:20:22:879:668 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:22:880:631 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:22:884:633 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..0cd0f653 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:23:150:683 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:23:151:446 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:23:250:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:23:251:221 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:23:251:703 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:20:23:458:166 + Q7 finished at: 2022-4-2 14:20:23:465:297 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:23:558:659 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:23:559:726 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:23:563:696 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..3e1223df --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:23:883:165 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:23:883:875 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:23:983:60 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:23:983:764 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:20:24:83:176 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:24:88:405 +Q7 finished at: 2022-4-2 14:20:24:94:932 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:24:201:381 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:24:202:347 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:24:208:528 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..793a4371 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:24:561:332 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:24:561:924 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:24:661:382 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:24:662:190 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:20:24:761:480 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:24:965:398 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:24:971:775 + Q7 finished at: 2022-4-2 14:20:24:975:316 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:24:976:286 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:24:980:93 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..51adc376 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:25:302:264 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:25:302:832 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:25:402:273 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:25:402:970 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:25:502:391 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:25:514:504 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:25:523:237 + Q6 finished at: 2022-4-2 14:20:25:527:273 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:25:528:247 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:25:532:526 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..6c14baf1 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:25:840:385 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:25:840:987 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:25:940:414 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:25:941:80 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:26:40:316 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:26:40:936 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:20:26:140:688 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:26:245:616 + Q11 finished at: 2022-4-2 14:20:26:250:154 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:26:361:829 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 14:20:27:53:883 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..1dfaee5a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:27:476:405 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:27:477:49 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:27:576:418 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:27:577:28 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:27:676:430 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:27:876:674 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 14:20:27:976:773 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:28:89:46 + Q10 finished at: 2022-4-2 14:20:28:101:299 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:28:301:526 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 14:20:28:882:98 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4dfdc7c9 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:14:429:763 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:14:430:344 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:14:529:755 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 14:20:14:629:813 +Q5 finished at: 2022-4-2 14:20:14:635:129 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:14:741:164 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:20:14:742:89 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:20:14:773:851 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:14:778:322 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..de01c62a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:15:48:217 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:15:48:961 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:15:148:86 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:15:254:120 +Q5 finished at: 2022-4-2 14:20:15:259:177 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:15:361:728 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:20:15:362:727 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:20:15:392:366 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:15:397:419 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..975310b2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:15:654:366 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:15:654:927 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:15:754:349 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:20:15:854:524 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:15:861:263 +Q6 finished at: 2022-4-2 14:20:15:866:286 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:15:962:111 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:20:15:963:14 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:15:970:326 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d68b80a5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:16:255:301 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:16:255:930 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:16:355:242 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:20:16:455:455 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:16:460:618 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:16:465:477 + Q5 finished at: 2022-4-2 14:20:16:473:480 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:20:16:474:428 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:16:478:760 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..6b568485 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:18:85:627 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:18:86:252 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:18:185:658 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:20:18:285:850 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:18:292:360 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:18:295:889 + Q5 finished at: 2022-4-2 14:20:18:302:762 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:18:303:621 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:18:307:298 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..d8e934ac --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:16:748:309 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:20:16:749:4 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:16:848:371 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:16:849:50 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:20:17:53:823 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:17:59:900 +Q6 finished at: 2022-4-2 14:20:17:63:206 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:17:64:163 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:17:67:642 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..364079ea --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:17:370:195 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:20:17:370:918 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:17:470:112 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:17:470:689 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:20:17:674:203 + Q6 finished at: 2022-4-2 14:20:17:677:223 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:17:779:907 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:17:780:938 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:17:787:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..0de24b84 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:8:797:635 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:8:798:420 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:8:897:743 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:8:898:435 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:8:898:863 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:21:8:910:910 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:21:8:998:86 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:9:6:845 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:9:7:879 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:9:9:421 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..e70b7c06 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:9:332:670 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:9:333:373 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:9:432:667 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:9:433:289 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:9:433:800 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:21:9:440:970 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:21:9:532:863 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:9:540:892 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:9:541:884 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:9:549:996 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..59497743 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:9:834:903 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:9:835:639 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:9:934:938 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:9:935:750 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:9:936:326 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:21:10:35:210 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:21:10:49:79 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:10:150:313 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:10:151:276 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:10:161:85 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..15703650 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:11:480:129 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:11:480:878 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:11:580:258 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:11:581:14 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:11:581:610 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:21:11:589:621 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:21:11:680:274 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:11:698:220 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:11:699:147 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:11:703:234 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..39a4a2f2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:10:489:73 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:21:10:489:840 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 14:21:10:490:350 + Q4-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q4 finished at: 2022-4-2 14:21:10:589:51 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:21:10:589:901 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:21:10:590:386 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:21:10:599:236 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:10:698:522 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:21:10:699:538 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:21:10:700:191 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:10:704:591 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..a91b5cba --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:11:8:181 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:21:11:9:35 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:11:100:444 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:21:11:101:378 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 14:21:11:102:91 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:21:11:109:714 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 14:21:11:200:935 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:11:208:528 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 14:21:11:209:453 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:11:213:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..e759327a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:11:995:858 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:21:11:996:785 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:12:95:691 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:21:12:96:887 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:21:12:195:683 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:21:12:196:693 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:21:12:295:890 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:21:12:395:955 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:21:12:495:938 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:21:12:604:61 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:21:12:703:499 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:12:804:433 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:21:12:805:709 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:21:12:824:224 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..a9d68bb7 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:16:743:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:16:744:361 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:16:843:116 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:21:16:843:909 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:16:856:345 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:21:16:943:24 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:21:16:943:971 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:21:16:944:537 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:21:16:955:536 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:21:17:43:534 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:21:17:48:608 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:21:17:49:963 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:21:17:57:836 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..194ffdce --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:15:942:648 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:15:943:896 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:16:42:666 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:16:43:952 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:21:16:142:620 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 14:21:16:143:365 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:21:16:152:84 + Q8-T4 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:21:16:242:686 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:21:16:243:334 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:16:253:269 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 14:21:16:343:689 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:16:348:368 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 14:21:16:443:538 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 14:21:16:451:671 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:21:16:453:362 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:21:16:459:839 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..9689a1ce --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:13:109:873 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:21:13:110:733 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:13:209:855 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:21:13:210:763 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:21:13:309:797 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:21:13:310:788 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:21:13:409:970 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:21:13:510:7 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:21:13:610:72 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:21:13:719:27 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:21:13:819:724 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:13:920:613 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:21:13:921:946 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:21:13:927:340 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..91a118ce --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:14:252:82 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:21:14:253:81 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:14:352:129 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:21:14:352:963 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:21:14:452:37 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:21:14:452:925 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 14:21:14:552:246 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 14:21:14:652:266 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 14:21:14:752:240 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:21:14:859:524 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:21:14:958:821 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:15:57:391 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:21:15:58:455 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:21:15:62:545 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..879464fb --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:17:391:743 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:21:17:392:663 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:21:17:393:522 + Q4-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q4 finished at: 2022-4-2 14:21:17:491:626 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:21:17:492:534 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 14:21:17:493:24 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:21:17:500:783 + Q8-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:21:17:591:634 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:21:17:592:632 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:21:17:593:439 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:21:17:595:756 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 14:21:17:691:882 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 14:21:17:699:426 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 14:21:17:700:577 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 14:21:17:705:26 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..733e34a7 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:15:350:636 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:21:15:351:578 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:15:450:521 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:21:15:451:504 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:15:452:151 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:21:15:452:919 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 14:21:15:453:378 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:15:470:613 + Q9-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q9 finished at: 2022-4-2 14:21:15:550:581 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:21:15:551:462 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 14:21:15:552:2 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:21:15:552:789 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 14:21:15:553:349 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:21:15:562:962 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 14:21:15:651:155 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 14:21:15:655:234 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 14:21:15:656:310 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 14:21:15:669:530 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..29b04f1d --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:8:320:730 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:21:8:321:433 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:8:420:701 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:21:8:421:392 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:8:432:470 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 14:21:8:520:891 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:21:8:529:120 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:21:8:529:995 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:21:8:534:149 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..4058fe0f --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:7:835:273 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:7:836:8 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:7:935:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:21:7:935:948 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:7:942:536 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:21:8:35:540 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:21:8:37:805 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:21:8:38:598 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:21:8:43:593 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:8:47:205 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..5fd20694 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:45:326:30 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:45:326:638 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:45:426:78 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:45:426:782 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:45:427:499 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:20:45:630:310 + Q7 finished at: 2022-4-2 14:20:45:636:608 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:45:737:218 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:20:45:738:289 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:45:742:916 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..c888d758 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:46:57:391 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:46:57:990 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:46:157:355 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:46:158:80 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:46:158:782 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:46:172:257 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:46:257:606 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:46:265:765 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:20:46:266:709 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:46:270:798 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..0d4c2b85 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:46:566:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:46:566:753 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:46:666:60 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:46:666:641 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:46:766:441 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:46:771:157 +Q7 finished at: 2022-4-2 14:20:46:778:284 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:46:876:374 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:46:877:292 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:46:880:671 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..95ac26ef --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:47:165:384 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:47:166:103 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:47:265:362 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:47:265:942 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:47:266:371 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:47:365:726 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:47:480:782 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:47:566:660 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:47:567:560 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:47:574:485 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..364684c2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:48:844:786 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:48:845:387 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:48:944:800 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:48:945:597 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:48:946:225 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:20:49:44:993 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:49:58:505 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:49:146:403 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:49:147:367 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:49:153:139 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..c4f8a2ba --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:49:441:217 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:49:441:795 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:49:541:138 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:20:49:541:880 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:49:542:629 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:49:547:631 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:20:49:641:375 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:49:653:351 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:49:654:387 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:49:664:12 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..14e04be0 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:47:851:787 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:20:47:852:496 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:47:951:733 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:47:952:359 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:20:47:952:876 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:47:964:362 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:20:48:52:74 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:48:60:316 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:20:48:61:266 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:48:70:741 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..b1ba257c --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:48:362:195 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:20:48:363:59 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:48:462:286 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 14:20:48:462:944 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:20:48:463:470 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:48:477:159 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:20:48:562:480 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:48:566:477 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:20:48:567:468 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:48:572:119 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..4231925b --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:44:114:564 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:44:115:188 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:44:214:484 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:44:215:103 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:44:215:704 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:20:44:314:807 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:44:426:233 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:44:521:545 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:44:522:523 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:44:526:106 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2a255cd8 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:44:812:53 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:44:812:642 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:44:912:62 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:44:913:605 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:44:914:275 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:44:922:730 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:20:45:12:322 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:45:22:3 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:45:22:927 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:45:26:853 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..7e37bf25 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:49:976:159 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:49:976:746 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:50:76:169 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:50:76:783 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:20:50:77:517 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:50:176:214 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:50:176:925 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:20:50:177:857 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 14:20:50:276:669 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:50:284:356 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:50:382:396 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:50:486:29 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:50:487:224 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:50:489:81 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..68fa91ef --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q1 finished at: 2022-4-2 14:20:50:791:331 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:20:50:792:636 +Q3-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q3 finished at: 2022-4-2 14:20:50:891:413 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 14:20:50:892:62 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:20:50:991:381 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:20:50:992:619 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:20:50:993:701 + Q8-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q8 finished at: 2022-4-2 14:20:51:91:391 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:20:51:92:26 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:20:51:192:462 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:20:51:299:679 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:51:400:736 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:20:51:495:498 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:51:510:137 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:20:51:511:515 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:20:51:516:666 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..f1e5b7db --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:51:844:878 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:51:845:517 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:51:944:889 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:51:945:519 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:20:51:946:302 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:52:44:921 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:20:52:45:562 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:20:52:46:472 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:20:52:145:426 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:52:169:586 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:52:255:848 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:52:351:481 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:20:52:352:633 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:52:356:411 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..6fa67cf7 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:52:630:75 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:20:52:630:763 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:52:730:72 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:20:52:730:738 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:20:52:731:538 + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:20:52:830:32 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:20:52:830:576 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-2 14:20:52:831:428 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:20:52:930:649 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:20:52:938:129 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:20:53:37:937 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:20:53:140:513 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:20:53:141:741 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:20:53:145:386 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..b69fd01f --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:39:870:553 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:39:871:129 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:39:970:597 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:39:971:368 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:20:40:82:700 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:40:175:241 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:20:40:176:254 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:40:180:55 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..d477662c --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:41:182:953 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:41:183:547 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:41:282:749 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:41:283:639 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:20:41:382:894 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:41:487:96 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:41:596:510 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:20:41:597:493 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:41:606:191 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..6240a96a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:41:878:424 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:41:879:58 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:41:978:363 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:20:41:979:210 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:41:983:646 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:20:42:78:559 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:42:96:270 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:20:42:97:93 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:42:108:789 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..9703d8da --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:43:438:205 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:43:438:753 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:43:538:174 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:20:43:638:473 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:43:643:10 +Q6 finished at: 2022-4-2 14:20:43:651:870 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:43:747:259 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:43:748:124 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:43:754:979 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..f885e432 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:40:479:857 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:20:40:480:582 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:40:579:896 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:40:580:514 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:20:40:680:228 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:40:790:495 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:40:885:713 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:40:886:605 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:40:890:255 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..b568bbcf --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:42:429:482 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:20:42:430:239 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:42:529:518 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:42:530:191 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:42:538:453 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:20:42:629:856 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:42:635:80 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:20:42:635:971 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:42:641:27 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..285d9193 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:42:922:322 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:20:42:923:280 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:43:22:285 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 14:20:43:22:843 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:43:41:550 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:20:43:122:596 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:43:130:455 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:20:43:131:387 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:43:135:607 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..b0051d3c --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:57:552:481 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:57:553:83 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:57:652:444 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:57:653:80 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:20:57:752:742 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:20:57:757:599 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:20:57:763:900 + Q6 finished at: 2022-4-2 14:20:57:767:117 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:20:57:767:959 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:20:57:771:417 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..160adcd2 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:58:41:341 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:58:41:968 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:58:141:281 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:58:141:908 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:20:58:241:613 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:20:58:349:471 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 14:20:58:847:666 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4c6313a5 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:59:139:358 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:59:139:954 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:59:239:250 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:20:59:239:900 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:20:59:339:509 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:59:446:535 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 14:20:59:950:574 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..15b7237e --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:0:224:102 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:0:224:660 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:0:324:151 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:0:324:842 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:21:0:424:304 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:21:0:431:493 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 14:21:1:128:326 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..43aa7114 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:1:407:134 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:1:407:861 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:1:507:137 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:1:507:926 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:1:508:593 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:21:1:713:242 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:1:719:917 +Q7 finished at: 2022-4-2 14:21:1:722:910 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:1:723:913 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:1:730:969 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..4d7ad86a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:2:21:583 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:21:2:22:299 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:2:121:464 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:2:122:185 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:21:2:122:657 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:21:2:327:308 + Q7 finished at: 2022-4-2 14:21:2:330:848 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:2:439:101 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:2:440:99 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:2:444:119 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..bd4d5231 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:2:732:86 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:2:732:707 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:2:832:40 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:2:832:767 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:21:2:932:228 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:2:936:913 +Q7 finished at: 2022-4-2 14:21:2:941:880 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:3:46:65 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:3:47:60 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:3:51:403 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..569aaffd --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:3:386:754 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:3:387:587 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:3:486:795 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:3:487:508 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:21:3:586:902 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:3:793:883 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:3:797:398 + Q7 finished at: 2022-4-2 14:21:3:801:85 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:3:802:152 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:3:806:538 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..2c622360 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:4:120:32 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:4:120:609 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:4:220:63 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:21:4:220:743 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:21:4:320:266 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:21:4:326:7 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:21:4:329:935 + Q6 finished at: 2022-4-2 14:21:4:336:564 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:21:4:337:504 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:21:4:348:437 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..d558f2cd --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:4:642:77 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:4:642:638 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:4:742:70 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:4:742:686 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q6 finished at: 2022-4-2 14:21:4:842:92 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:21:4:842:747 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:21:4:942:585 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:5:46:794 + Q11 finished at: 2022-4-2 14:21:5:50:621 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:5:152:990 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 14:21:5:848:47 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..b000233a --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:21:6:160:950 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:21:6:161:544 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:21:6:261:35 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:21:6:261:719 + Q5-T3 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q5 finished at: 2022-4-2 14:21:6:360:721 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:21:6:561:0 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 14:21:6:661:153 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:21:6:767:196 + Q10 finished at: 2022-4-2 14:21:6:770:590 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:21:6:967:930 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 14:21:7:565:969 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..ab9f8efc --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:53:436:218 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:53:436:792 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:53:536:194 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 14:20:53:636:223 +Q5 finished at: 2022-4-2 14:20:53:640:530 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:53:746:166 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:20:53:747:64 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:20:53:769:167 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:53:773:381 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..851c0a68 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:54:27:932 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:54:28:574 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:54:127:669 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:54:241:593 +Q5 finished at: 2022-4-2 14:20:54:246:98 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:20:54:336:52 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:20:54:336:926 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:20:54:375:27 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:54:382:225 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..e5da334d --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:54:652:729 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:54:653:397 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:54:743:309 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:20:54:843:514 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:54:847:697 +Q6 finished at: 2022-4-2 14:20:54:851:398 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:54:950:932 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:20:54:952:70 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:54:957:341 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..84836335 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:55:266:45 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:55:266:743 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:55:365:916 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:20:55:466:108 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:55:473:939 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:55:477:186 + Q5 finished at: 2022-4-2 14:20:55:480:617 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:20:55:481:448 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:55:486:5 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..e4b50633 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:57:62:288 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:20:57:62:885 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:57:162:293 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:20:57:262:521 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:20:57:267:351 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:57:270:466 + Q5 finished at: 2022-4-2 14:20:57:275:256 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:57:276:133 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:57:282:346 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..e787ad43 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:55:763:858 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:20:55:764:589 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:55:863:693 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:55:864:357 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:20:56:74:573 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:20:56:77:355 +Q6 finished at: 2022-4-2 14:20:56:81:42 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:56:81:888 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:56:87:402 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..c931960b --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' +Q1 finished at: 2022-4-2 14:20:56:372:683 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:20:56:373:372 + Q3-T2 execute sql: 'START TRANSACTION WITH CONSISTENT SNAPSHOT;' + Q3 finished at: 2022-4-2 14:20:56:472:499 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:20:56:473:270 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:20:56:677:845 + Q6 finished at: 2022-4-2 14:20:56:683:59 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:20:56:777:823 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:20:56:778:661 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:20:56:785:502 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrocks_si/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/myrocks_si/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/myrocks_si/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/myrocks_si/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..42d5fc7b --- /dev/null +++ b/test_result/centralizend_result/myrocks_si/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..e8fbc326 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:45:667:873 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:45:668:657 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:45:767:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:45:768:596 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:45:769:47 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:45:776:968 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:7:45:868:464 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:45:883:773 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:45:884:848 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:45:887:461 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..355c54c9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:46:159:215 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:46:164:405 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:46:259:47 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:46:259:789 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:46:260:284 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:46:268:628 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:46:359:476 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:46:372:344 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:46:373:256 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:46:376:635 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..a0b84a26 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:46:658:393 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:46:659:270 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:46:758:429 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:46:759:387 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:46:759:972 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:46:858:800 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:46:872:476 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:46:969:591 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:46:970:599 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:46:974:350 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..75279811 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:48:301:972 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:48:302:908 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:48:401:812 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:48:402:669 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:48:403:235 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:48:413:155 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:48:502:226 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:48:511:523 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:48:512:576 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:48:516:187 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..d1df63f4 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:47:307:116 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 11:7:47:308:109 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 11:7:47:308:683 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:7:47:407:79 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 11:7:47:408:71 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 11:7:47:408:616 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:47:426:713 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:47:516:453 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 11:7:47:517:434 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 11:7:47:518:93 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:47:520:784 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..6e68d22c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:47:800:978 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 11:7:47:802:12 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:47:900:873 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 11:7:47:901:953 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 11:7:47:902:593 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:47:909:576 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 11:7:48:6:722 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:48:14:565 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 11:7:48:15:590 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:48:19:603 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..0c371727 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:48:814:308 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:7:48:815:275 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:48:914:259 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:48:915:347 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:49:14:211 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:49:15:316 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:7:49:114:845 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:49:214:954 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:7:49:314:931 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:49:429:215 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:49:532:259 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:49:620:662 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:49:622:8 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:49:632:480 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..60c15975 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:53:525:46 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:53:526:144 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:53:624:918 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:53:625:660 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:53:633:29 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:53:725:36 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:7:53:726:72 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:53:726:631 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:53:734:756 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 11:7:53:825:823 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:7:53:832:384 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 11:7:53:833:417 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:7:53:839:190 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a10c161a --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:52:744:245 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:52:745:517 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:52:844:225 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:52:845:727 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:52:944:226 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 11:7:52:944:912 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:52:952:191 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:7:53:44:261 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:7:53:45:26 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:53:67:566 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 11:7:53:145:251 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:53:149:891 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 11:7:53:245:462 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 11:7:53:249:845 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:7:53:251:377 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:7:53:255:157 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b625e729 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:49:934:996 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 11:7:49:935:966 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:50:34:961 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:50:35:960 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:50:135:56 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:50:135:995 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:7:50:235:504 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:50:335:506 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:7:50:435:486 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:50:541:708 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:50:645:797 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:50:741:270 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:7:50:742:297 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:50:746:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..23051cbb --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:51:33:34 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:7:51:34:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:51:133:25 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 11:7:51:133:995 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:51:233:61 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 11:7:51:234:86 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 11:7:51:333:418 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 11:7:51:433:488 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 11:7:51:533:548 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:51:642:160 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:51:742:146 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:51:842:1 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:51:843:185 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:51:851:662 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..3ff1a41c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:54:121:269 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:54:122:288 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 11:7:54:123:46 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:7:54:221:402 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 11:7:54:222:735 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 11:7:54:223:317 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:54:232:711 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:7:54:321:312 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 11:7:54:322:534 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:7:54:323:282 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:54:325:2 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 11:7:54:421:732 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 11:7:54:431:442 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 11:7:54:432:525 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 11:7:54:436:134 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..1400ebd2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:52:129:607 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 11:7:52:130:821 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:52:229:617 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 11:7:52:230:708 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:52:231:273 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:52:232:98 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 11:7:52:232:584 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:52:249:930 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 11:7:52:329:560 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 11:7:52:330:601 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 11:7:52:331:178 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 11:7:52:332:31 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 11:7:52:332:584 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:52:341:676 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 11:7:52:430:230 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 11:7:52:437:278 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 11:7:52:438:369 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 11:7:52:441:968 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrockss/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..6604794e --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:45:154:326 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:7:45:155:141 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:45:254:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:45:255:74 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:45:263:465 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 11:7:45:354:697 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:45:366:835 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:45:367:749 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:45:379:53 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrockss/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..ebe42747 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:44:669:577 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:44:670:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:44:769:445 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:44:770:313 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:44:795:429 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:7:44:870:397 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:44:872:132 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:44:872:973 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:44:877:415 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:44:882:902 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..2f4c53b6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:22:402:987 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:22:403:668 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:22:503:12 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:22:503:690 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:22:504:319 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:7:22:712:271 + Q7 finished at: 2022-4-2 11:7:22:715:971 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:22:810:744 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:7:22:811:764 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:22:820:723 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ef074195 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:23:109:480 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:23:110:167 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:23:209:509 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:23:210:299 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:23:211:93 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:23:220:734 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:23:310:0 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:23:318:373 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:7:23:319:252 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:23:322:901 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..f46afd56 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:23:613:655 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:23:614:349 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:23:713:593 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:23:714:358 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:7:23:814:151 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:23:822:459 +Q7 finished at: 2022-4-2 11:7:23:827:157 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:23:923:547 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:23:924:551 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:23:928:212 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..aeb94d77 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:24:213:33 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:24:213:896 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:24:313:27 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:24:313:777 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:24:314:223 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:7:24:413:643 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:24:521:928 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:24:615:67 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:24:615:979 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:24:624:429 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a9895205 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:25:872:295 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:25:873:17 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:25:972:222 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:25:973:3 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:25:973:561 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:26:72:729 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:26:82:449 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:26:174:424 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:26:175:412 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:26:179:372 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..c20b2ec9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:26:448:472 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:26:449:173 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:26:548:528 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:26:549:518 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:26:550:122 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:26:554:986 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:26:648:994 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:26:666:828 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:26:667:889 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:26:672:35 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..e6b64bfb --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:24:896:675 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:7:24:897:449 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:24:996:679 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:24:997:371 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:24:997:847 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:25:8:316 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:7:25:97:298 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:25:102:261 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 11:7:25:103:214 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:25:106:717 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..08134f2a --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:25:404:164 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:7:25:405:179 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:25:504:69 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 11:7:25:504:758 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 11:7:25:505:182 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:25:513:120 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:7:25:604:805 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:25:608:533 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 11:7:25:609:422 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:25:612:505 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..5f5c3578 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:21:155:645 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:21:156:385 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:21:255:704 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:21:256:554 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:21:257:300 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:7:21:356:297 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:21:463:484 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:21:567:990 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:21:568:981 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:21:573:799 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..f67e3542 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:21:864:298 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:21:865:56 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:21:964:288 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:21:965:20 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:21:965:694 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:21:975:363 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:7:22:64:928 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:22:75:211 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:22:76:256 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:22:84:86 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..a29ae0dc --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:26:936:259 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:26:937:3 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:27:36:234 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:27:36:920 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:27:37:752 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:27:136:438 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:27:137:66 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 11:7:27:137:862 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 11:7:27:237:72 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:27:244:376 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:27:342:508 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:27:445:457 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:27:446:803 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:27:448:390 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..de25b62c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 11:7:27:719:37 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 11:7:27:720:309 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 11:7:27:818:792 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 11:7:27:819:503 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:27:918:839 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 11:7:27:920:345 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:7:27:921:406 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:7:28:18:814 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:7:28:19:535 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:7:28:119:918 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:7:28:225:722 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:28:327:751 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:7:28:427:786 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:28:433:18 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:7:28:434:206 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:7:28:438:962 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..1ccc0827 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:28:715:490 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:28:716:136 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:28:815:474 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:28:816:193 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:7:28:817:105 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:28:915:516 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:28:916:248 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 11:7:28:917:67 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:7:29:16:352 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:29:25:737 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:29:127:632 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:29:221:99 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:7:29:222:132 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:29:225:779 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..fb4bf0ab --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:29:487:453 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 11:7:29:488:379 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:29:587:416 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 11:7:29:588:120 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:7:29:588:987 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:29:687:455 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 11:7:29:688:276 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-2 11:7:29:689:190 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:7:29:788:218 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:29:802:636 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:29:894:963 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:30:10:868 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:30:12:152 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:30:16:128 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..c48013b3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:17:29:235 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:17:29:836 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:17:129:220 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:17:130:294 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 11:7:17:237:594 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:17:331:633 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:7:17:332:557 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:17:336:724 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..3240909e --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:18:354:249 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:18:354:944 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:18:454:219 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:18:455:106 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 11:7:18:554:728 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:18:657:638 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:18:761:428 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:7:18:762:346 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:18:765:786 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..736ac698 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:19:59:752 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:19:60:456 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:19:159:770 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:19:160:705 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:19:169:76 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 11:7:19:260:237 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:19:269:165 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:7:19:270:179 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:19:281:487 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..dcb63958 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:20:569:511 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:20:570:218 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:20:669:462 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:7:20:770:136 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:20:774:616 +Q6 finished at: 2022-4-2 11:7:20:777:383 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:20:874:189 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:20:875:163 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:20:879:355 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..83e8b89f --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:17:642:676 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:17:643:482 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:17:742:662 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:17:743:381 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:7:17:843:264 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:17:953:11 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:18:50:110 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:18:51:99 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:18:55:276 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..072b9ab9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:19:580:770 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:19:581:636 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:19:680:801 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:19:681:579 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:19:691:510 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:7:19:781:451 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:19:788:167 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 11:7:19:788:936 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:19:792:765 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..7f1cd9de --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:20:73:189 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:20:74:352 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:20:173:131 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 11:7:20:173:839 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:20:186:668 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:7:20:273:859 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:20:279:493 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 11:7:20:280:430 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:20:285:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..76e8b886 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:34:418:979 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:34:419:704 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:34:518:987 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:34:519:846 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:7:34:619:513 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:34:623:649 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:34:626:247 + Q6 finished at: 2022-4-2 11:7:34:630:893 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:34:631:799 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:34:635:248 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..6a65778b --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:34:916:751 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:34:917:424 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:35:16:886 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:35:17:703 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:7:35:117:298 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:35:231:856 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:7:35:723:84 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..3ab33fd3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:35:988:620 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:35:989:376 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:36:88:759 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:36:89:508 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:7:36:189:179 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:36:295:319 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:7:36:794:551 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..6ed216f2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:37:83:309 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:37:84:81 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:37:183:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:37:184:59 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:7:37:283:743 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:37:295:941 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:7:37:990:367 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..1bd4f4ec --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:38:291:674 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:38:292:571 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:38:391:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:38:392:446 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:38:393:33 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:7:38:596:578 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:38:599:932 +Q7 finished at: 2022-4-2 11:7:38:603:150 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:38:604:85 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:38:610:875 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ea77f378 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:38:907:604 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:38:908:429 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:39:7:582 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:39:8:445 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:39:9:128 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:7:39:217:933 + Q7 finished at: 2022-4-2 11:7:39:222:591 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:39:318:243 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:39:319:200 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:39:328:360 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c728341f --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:39:634:274 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:39:634:937 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:39:734:231 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:39:735:58 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:39:834:688 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:39:840:682 +Q7 finished at: 2022-4-2 11:7:39:846:702 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:39:943:813 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:39:944:963 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:39:948:415 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..3617e4bf --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:40:251:40 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:40:251:895 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:40:351:66 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:40:352:182 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:40:451:589 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:40:654:974 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:40:658:170 + Q7 finished at: 2022-4-2 11:7:40:661:719 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:40:662:581 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:40:667:251 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..d9016710 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:40:944:376 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:40:945:252 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:41:44:308 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:41:45:214 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:41:147:748 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:41:154:695 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:41:164:17 + Q6 finished at: 2022-4-2 11:7:41:170:335 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:41:171:231 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:41:176:589 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ab5022a9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:41:451:86 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:41:451:933 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:41:551:128 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:41:551:971 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:41:651:143 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:41:651:956 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 11:7:41:751:771 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:41:856:395 + Q11 finished at: 2022-4-2 11:7:41:859:707 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:41:963:206 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:7:42:656:543 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..dd610223 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:42:959:628 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:42:960:428 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:43:59:666 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:43:60:494 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:43:159:640 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:43:360:149 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 11:7:43:460:346 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:43:564:191 + Q10 finished at: 2022-4-2 11:7:43:570:282 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:43:768:4 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:7:44:365:598 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..9f5a046f --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:30:320:901 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:30:321:669 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:30:420:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 11:7:30:521:387 +Q5 finished at: 2022-4-2 11:7:30:525:168 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:30:629:603 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:7:30:630:545 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:7:30:649:408 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:30:653:942 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..af9a5b88 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:30:909:503 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:30:910:226 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:31:9:508 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:31:117:584 +Q5 finished at: 2022-4-2 11:7:31:121:45 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:31:216:751 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:7:31:217:599 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:7:31:239:388 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:31:242:994 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..91124df4 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:31:494:449 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:31:495:124 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:31:594:410 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 11:7:31:694:847 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:31:706:865 +Q6 finished at: 2022-4-2 11:7:31:711:116 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:31:802:529 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:7:31:803:444 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:31:810:91 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..fd4601b6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:32:81:535 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:32:82:277 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:32:181:526 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 11:7:32:281:960 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:32:286:702 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:32:289:779 + Q5 finished at: 2022-4-2 11:7:32:292:819 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:7:32:293:741 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:32:297:737 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..c4f64f58 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:33:875:295 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:33:875:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:33:975:246 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:7:34:75:943 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:34:82:320 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:34:85:688 + Q5 finished at: 2022-4-2 11:7:34:95:316 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:34:96:230 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:34:99:899 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..15dd4c81 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:32:575:78 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:7:32:575:957 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:32:675:28 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:32:675:839 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:7:32:880:176 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:32:884:55 +Q6 finished at: 2022-4-2 11:7:32:890:368 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:32:891:397 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:32:895:861 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..0f263338 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:33:162:956 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:7:33:163:790 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:33:262:846 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:33:263:585 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:7:33:466:797 + Q6 finished at: 2022-4-2 11:7:33:470:652 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:33:568:518 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:33:569:488 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:33:573:294 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..854be0aa --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:7:864:299 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:7:865:240 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:7:964:227 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:7:965:8 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:7:965:527 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:8:8:328 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:7:8:64:885 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:8:71:195 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:8:72:66 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:8:73:895 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..e2294f00 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:8:361:730 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:8:362:739 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:8:461:632 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:8:462:502 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:8:463:58 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:8:472:126 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:8:561:986 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:8:574:438 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:8:575:337 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:8:579:53 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew.txt new file mode 100644 index 00000000..bd9ec014 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:8:886:103 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:8:886:984 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:8:985:949 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:8:986:763 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:8:987:226 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:9:86:500 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:9:95:547 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:9:194:412 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:9:195:366 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:9:199:439 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..34a00465 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:10:528:27 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:10:528:850 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:10:628:14 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:10:628:868 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:10:629:466 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:10:641:499 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:10:728:466 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:10:739:981 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:10:740:941 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:10:751:813 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..163e995e --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:9:513:489 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 11:7:9:514:351 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 11:7:9:514:798 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:7:9:613:390 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 11:7:9:614:281 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 11:7:9:614:769 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:9:623:295 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:9:723:921 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 11:7:9:724:895 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 11:7:9:725:464 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:9:726:953 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..22551446 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:10:15:920 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 11:7:10:16:958 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:10:109:60 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 11:7:10:110:253 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 11:7:10:111:163 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:10:120:515 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 11:7:10:209:740 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:10:222:583 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 11:7:10:223:536 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:10:230:144 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat.txt new file mode 100644 index 00000000..86b41b13 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:11:49:131 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:7:11:50:92 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:11:149:146 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:11:150:181 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:11:249:131 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:11:250:190 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:7:11:349:579 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:11:449:540 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:7:11:549:678 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:11:661:189 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:11:760:870 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:11:854:831 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:11:855:924 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:11:859:356 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..8fdf032d --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:15:757:776 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:15:758:823 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:15:857:499 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:15:858:416 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:15:866:635 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:15:957:532 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:7:15:958:552 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:15:959:153 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:15:968:412 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 11:7:16:58:256 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:7:16:68:957 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 11:7:16:70:181 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:7:16:80:987 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..b32f1af8 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:14:947:18 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:14:948:194 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:15:47:13 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:15:48:458 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:15:147:27 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 11:7:15:147:812 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:15:175:627 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:7:15:247:29 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:7:15:247:837 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:15:255:866 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 11:7:15:348:141 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:15:350:112 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 11:7:15:448:180 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 11:7:15:452:268 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:7:15:453:750 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:7:15:457:306 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..a1839cb9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:12:143:893 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 11:7:12:144:910 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:12:243:880 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:12:244:937 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:12:343:875 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:12:344:905 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:7:12:444:351 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:7:12:544:274 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:7:12:644:334 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:12:757:431 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:12:853:933 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:12:951:101 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:7:12:952:226 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:12:956:66 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..b4e4aa45 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:13:225:343 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:7:13:226:599 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:13:325:290 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 11:7:13:326:355 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:13:425:327 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 11:7:13:426:473 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 11:7:13:525:646 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 11:7:13:625:683 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 11:7:13:725:691 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:7:13:840:705 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:13:933:242 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:14:34:934 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:7:14:36:96 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:14:39:576 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..c01a7172 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:16:374:985 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:16:376:80 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 11:7:16:376:835 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:7:16:488:201 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 11:7:16:489:151 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 11:7:16:489:647 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:16:506:570 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:7:16:596:180 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 11:7:16:597:220 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:7:16:597:944 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:7:16:599:950 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 11:7:16:675:406 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 11:7:16:689:30 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 11:7:16:690:99 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 11:7:16:694:109 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..3a674bda --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:14:332:843 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 11:7:14:333:861 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:14:432:832 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 11:7:14:434:5 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:14:434:638 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:7:14:435:568 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 11:7:14:436:31 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:14:447:700 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 11:7:14:532:845 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 11:7:14:533:861 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 11:7:14:534:345 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 11:7:14:535:41 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 11:7:14:535:515 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:7:14:543:627 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 11:7:14:633:570 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 11:7:14:649:210 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 11:7:14:650:431 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 11:7:14:657:90 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..02a461b2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:7:342:513 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:7:7:343:368 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:7:442:527 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:7:443:377 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:7:464:612 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 11:7:7:543:7 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:7:558:311 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:7:559:374 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:7:563:837 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..68a31d3c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:6:781:947 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:6:782:830 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:6:881:847 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:6:882:576 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:6:897:644 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:7:6:982:601 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:6:985:89 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:6:986:60 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:6:991:354 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:6:996:156 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..b6b91463 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:44:111:881 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:44:112:595 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:44:211:883 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:44:212:622 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:44:213:221 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:6:44:415:841 + Q7 finished at: 2022-4-2 11:6:44:419:23 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:44:517:507 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:6:44:518:651 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:44:522:575 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..3db0145a --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:44:813:948 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:44:814:705 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:44:913:852 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:44:914:595 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:44:915:293 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:44:927:639 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-2 11:6:45:14:402 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:45:23:653 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:6:45:24:564 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:45:29:59 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..b4db5bc9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:45:360:876 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:45:361:638 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:45:460:874 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:45:461:679 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:6:45:561:457 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:6:45:585:200 +Q7 finished at: 2022-4-2 11:6:45:591:983 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:6:45:667:901 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:45:668:778 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:45:672:659 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew.txt new file mode 100644 index 00000000..8b9ad8a9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:45:976:382 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:6:45:977:241 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:46:76:299 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:46:77:78 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:6:46:77:570 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:6:46:176:975 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:46:285:709 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:46:378:160 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:46:379:229 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:46:383:464 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2.txt new file mode 100644 index 00000000..f6c64bb3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:47:680:890 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:47:681:754 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:47:780:851 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:6:47:781:740 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:47:782:398 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:6:47:881:397 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:47:890:477 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:6:47:985:974 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:47:986:965 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:47:992:365 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..6efd92e7 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:48:288:685 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:48:289:453 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:48:388:655 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:6:48:389:496 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:48:390:150 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:48:393:938 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:6:48:489:194 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:48:498:972 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:48:499:906 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:48:503:168 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..0d0e9e92 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:46:698:199 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:6:46:699:135 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:46:798:223 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:46:798:930 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:6:46:799:446 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:46:809:696 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:6:46:898:810 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:46:902:944 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 11:6:46:903:725 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:46:907:625 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..550ea609 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:47:203:401 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:6:47:204:389 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:47:303:353 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 11:6:47:304:49 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 11:6:47:304:536 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:47:312:368 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:6:47:403:975 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:47:408:219 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 11:6:47:409:189 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:47:413:65 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..d111d122 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:42:904:178 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:42:904:895 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:43:4:374 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:43:5:431 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:43:6:174 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:6:43:104:877 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:43:211:113 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:43:317:822 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:43:318:823 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:43:322:868 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..b9e3b4e1 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:43:611:538 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:43:612:270 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:43:711:539 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:43:712:636 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:43:713:192 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:43:721:280 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:6:43:812:121 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:43:820:283 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:43:821:199 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:43:824:769 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat.txt new file mode 100644 index 00000000..4dd84f5b --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:48:761:99 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:48:761:824 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:48:861:66 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:48:861:829 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:6:48:862:666 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:6:48:961:403 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:6:48:962:82 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 11:6:48:962:900 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 11:6:49:61:960 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:6:49:87:748 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:6:49:168:306 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:6:49:274:493 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:6:49:275:776 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:6:49:277:591 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..d6bb57f6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 11:6:49:582:181 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 11:6:49:583:532 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 11:6:49:682:71 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 11:6:49:682:929 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:6:49:782:38 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 11:6:49:783:629 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:6:49:784:954 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:6:49:882:137 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:6:49:882:862 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:6:49:983:183 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:6:50:92:437 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:6:50:193:820 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:6:50:286:440 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:6:50:291:537 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:6:50:292:762 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:6:50:296:633 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..41e9b4aa --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:50:576:630 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:50:577:327 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:50:676:633 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:50:677:353 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:6:50:678:133 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:6:50:776:649 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:6:50:777:393 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 11:6:50:778:188 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + *(4) expected_result: + (,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:6:50:877:635 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:6:50:888:165 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:6:50:989:97 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:6:51:87:480 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:6:51:88:578 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:6:51:94:508 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..971b8e35 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:51:406:105 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 11:6:51:406:978 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:51:505:975 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 11:6:51:506:637 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:6:51:507:664 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:6:51:606:31 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 11:6:51:606:662 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-2 11:6:51:607:504 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:6:51:706:907 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:6:51:714:953 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:6:51:821:716 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:6:51:934:908 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:6:51:936:57 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:6:51:942:36 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_dirty_read.txt new file mode 100644 index 00000000..77bf0090 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:38:642:614 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:38:643:217 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:38:742:658 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:6:38:743:637 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 11:6:38:850:102 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:38:944:122 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:6:38:945:77 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:6:38:953:392 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..c5ff27d2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:40:47:38 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:40:47:727 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:40:147:13 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:6:40:147:926 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 11:6:40:247:645 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:40:353:55 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:40:457:521 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:6:40:458:467 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:40:474:141 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..8be05dea --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:40:784:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:40:785:644 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:40:884:874 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:6:40:885:681 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:6:40:892:24 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 11:6:40:985:478 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:40:990:503 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:6:40:991:355 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:40:994:684 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..666fd609 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:42:303:573 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:42:304:282 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:42:403:559 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:6:42:504:176 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:6:42:514:564 +Q6 finished at: 2022-4-2 11:6:42:518:117 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:42:611:236 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:6:42:612:124 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:42:616:388 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..21a785fe --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:39:288:802 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:6:39:289:676 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:39:388:756 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:6:39:389:486 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:6:39:489:344 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:39:600:730 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:39:703:661 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:6:39:704:573 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:39:714:814 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..3b691c75 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:41:305:628 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:6:41:306:419 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:41:405:514 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:6:41:406:250 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:6:41:415:95 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:6:41:506:107 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:41:510:37 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 11:6:41:510:851 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:41:514:997 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..55bf3710 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:41:785:724 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:6:41:786:651 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:41:885:726 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 11:6:41:886:397 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:6:41:896:626 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:6:41:986:284 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:41:991:30 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 11:6:41:991:748 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:41:996:220 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..134598bd --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:56:435:566 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:56:436:272 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:56:535:569 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:56:536:287 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:6:56:636:142 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:6:56:639:945 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:6:56:644:289 + Q6 finished at: 2022-4-2 11:6:56:647:996 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:6:56:649:26 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:6:56:653:198 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..8430b280 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:56:941:270 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:56:942:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:57:41:343 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:57:42:179 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:6:57:141:750 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:6:57:248:229 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:6:57:752:966 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..ff34857c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:58:35:180 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:58:35:904 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:58:135:168 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:58:135:878 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:6:58:235:729 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:58:342:781 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:6:58:840:372 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f36d80c6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:59:122:192 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:59:122:917 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:59:222:178 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:6:59:223:25 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:6:59:322:766 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:59:332:418 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:7:0:29:211 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..47f01067 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:0:338:484 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:0:339:283 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:0:438:502 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:0:439:231 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:0:439:730 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:7:0:645:185 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:0:649:265 +Q7 finished at: 2022-4-2 11:7:0:653:661 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:0:654:674 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:0:658:385 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..790ea3af --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:0:937:716 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:0:938:511 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:1:37:757 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:1:38:558 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:7:1:39:1 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:7:1:242:962 + Q7 finished at: 2022-4-2 11:7:1:246:31 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:1:346:986 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:1:347:972 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:1:352:740 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..bfaa4189 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:1:659:903 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:1:660:575 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:1:759:930 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:1:760:835 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:1:862:482 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:1:875:929 +Q7 finished at: 2022-4-2 11:7:1:882:111 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:1:969:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:1:970:584 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:1:976:834 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..d03b514a --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:2:316:777 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:2:317:489 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:2:416:794 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:2:417:842 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:7:2:517:142 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:2:726:2 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:2:730:926 + Q7 finished at: 2022-4-2 11:7:2:746:22 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:2:746:999 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:2:757:586 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..2bae8673 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:3:34:87 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:3:34:820 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:3:134:139 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:7:3:135:78 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:7:3:234:651 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:3:249:238 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:3:258:511 + Q6 finished at: 2022-4-2 11:7:3:272:783 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:3:273:696 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:3:284:229 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ea91f3ba --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:3:605:341 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:3:606:70 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:3:705:355 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:3:706:130 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:7:3:805:393 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:3:806:180 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 11:7:3:906:14 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:4:9:947 + Q11 finished at: 2022-4-2 11:7:4:13:179 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:4:117:98 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:7:4:812:768 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..649ae5d0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:5:90:470 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:5:91:122 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:5:190:593 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:5:191:426 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:7:5:290:443 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:7:5:490:951 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 11:7:5:591:81 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:5:697:777 + Q10 finished at: 2022-4-2 11:7:5:701:539 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:7:5:903:269 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:7:6:495:23 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..ed1e38a0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:52:235:675 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:52:236:413 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:52:335:668 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 11:6:52:436:26 +Q5 finished at: 2022-4-2 11:6:52:439:932 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:52:552:497 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:6:52:553:486 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:6:52:574:844 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:52:584:32 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..df2a0f2c --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:52:884:520 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:52:885:253 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:52:984:484 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:6:53:89:339 +Q5 finished at: 2022-4-2 11:6:53:99:767 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:6:53:197:979 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:6:53:198:923 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:6:53:231:174 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:53:238:543 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write.txt new file mode 100644 index 00000000..89c0df77 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:53:505:379 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:53:506:95 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:53:605:361 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 11:6:53:705:765 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:6:53:717:820 +Q6 finished at: 2022-4-2 11:6:53:723:651 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:53:812:585 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:6:53:813:509 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:53:817:1 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..539563d6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:54:94:0 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:54:94:722 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:54:194:31 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 11:6:54:294:558 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:6:54:299:695 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:54:304:13 + Q5 finished at: 2022-4-2 11:6:54:309:7 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:6:54:309:857 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:54:314:512 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..fc044d0a --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:55:876:191 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:6:55:876:905 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:55:976:167 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:6:56:76:775 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:6:56:81:598 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:56:84:479 + Q5 finished at: 2022-4-2 11:6:56:87:975 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:6:56:88:779 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:56:94:707 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..39a63d59 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:54:579:769 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:6:54:580:599 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:54:679:702 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:6:54:680:467 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:6:54:884:880 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:6:54:888:77 +Q6 finished at: 2022-4-2 11:6:54:891:220 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:6:54:892:233 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:54:896:414 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..f0a2a2a7 --- /dev/null +++ b/test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:6:55:174:509 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:6:55:175:331 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:6:55:274:451 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:6:55:275:226 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:6:55:479:203 + Q6 finished at: 2022-4-2 11:6:55:489:484 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:6:55:588:52 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:6:55:589:203 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:6:55:595:188 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..baf23007 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:23:687:664 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:23:688:476 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:23:787:651 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:23:788:537 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:23:789:66 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:23:796:356 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:8:23:888:251 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:23:893:952 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:23:894:908 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:23:896:322 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..1118f91f --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:24:169:902 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:24:170:696 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:24:269:902 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:24:270:719 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:24:271:242 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:24:278:630 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:24:370:401 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:24:377:510 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:24:378:485 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:24:384:224 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..8110e480 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:24:653:359 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:24:654:400 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:24:753:387 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:24:754:521 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:24:755:67 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:8:24:853:853 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:24:861:334 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:24:960:272 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:24:961:309 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:24:965:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..6f3415c1 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:26:270:912 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:26:271:754 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:26:370:803 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:26:371:680 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:26:372:219 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:26:382:665 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:26:471:280 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:26:480:593 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:26:481:412 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:26:485:157 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..bba08a36 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:25:242:402 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 11:8:25:243:304 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 11:8:25:243:839 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:8:25:342:382 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 11:8:25:343:289 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 11:8:25:343:827 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:25:351:14 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:25:449:377 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 11:8:25:450:316 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 11:8:25:450:949 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:25:452:616 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..b0de6e5f --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:25:738:167 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 11:8:25:739:87 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:25:838:154 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 11:8:25:839:274 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 11:8:25:840:36 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:25:845:391 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-2 11:8:25:938:738 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:25:947:795 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 11:8:25:948:733 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:25:952:592 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..9a24db4a --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:26:759:773 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:8:26:760:782 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:26:859:708 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:8:26:860:760 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:26:959:679 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:8:26:960:773 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:8:27:60:176 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:8:27:160:129 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:8:27:260:238 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:27:376:617 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:27:472:39 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:27:566:69 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:8:27:567:234 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:27:571:183 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..7c11ec3d --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:31:419:476 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:31:420:433 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:31:519:426 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:8:31:520:226 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:31:529:296 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:31:619:509 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:8:31:620:645 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:8:31:621:156 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:31:639:314 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 11:8:31:720:285 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:8:31:729:189 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 11:8:31:730:288 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:8:31:735:404 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..532ae9c4 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:30:592:911 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:30:594:280 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:30:692:940 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:30:694:302 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:30:792:918 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 11:8:30:793:570 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:30:800:74 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:8:30:892:967 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:8:30:893:767 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:30:901:613 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 11:8:30:993:911 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:30:995:963 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 11:8:31:94:31 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 11:8:31:101:9 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:8:31:102:714 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:8:31:106:116 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..c3bbd353 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:27:849:40 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 11:8:27:850:75 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:27:949:40 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:8:27:950:251 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:28:49:43 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:8:28:50:294 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 11:8:28:149:439 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:8:28:249:409 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 11:8:28:349:613 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:28:458:138 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:28:556:222 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:28:655:321 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:8:28:656:379 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:28:660:142 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..ac70bf44 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:28:922:432 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:8:28:923:587 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:29:22:439 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 11:8:29:23:405 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:29:122:460 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 11:8:29:123:466 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 11:8:29:222:808 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 11:8:29:322:961 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 11:8:29:422:851 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:29:529:869 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:29:629:952 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:29:728:426 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:8:29:729:517 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:29:733:202 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..9c04ff7d --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:32:34:495 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:8:32:35:592 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 11:8:32:36:404 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:8:32:134:478 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 11:8:32:135:609 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 11:8:32:136:138 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:32:170:576 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:8:32:234:410 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 11:8:32:235:477 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:8:32:236:332 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:32:238:721 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-2 11:8:32:334:814 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 11:8:32:343:572 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 11:8:32:344:703 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 11:8:32:349:705 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..7a9dc4cf --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:30:15:182 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 11:8:30:16:318 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:30:115:186 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 11:8:30:116:266 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:30:116:806 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:8:30:117:945 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 11:8:30:118:427 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:30:128:464 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 11:8:30:215:129 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 11:8:30:216:500 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 11:8:30:217:151 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 11:8:30:218:97 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 11:8:30:218:698 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:30:230:166 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 11:8:30:315:960 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 11:8:30:319:917 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 11:8:30:321:37 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 11:8:30:324:659 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..cd1fcc46 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:23:168:505 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:8:23:169:274 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:23:268:506 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:8:23:269:276 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:23:285:777 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 11:8:23:368:983 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:23:389:562 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:23:390:437 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:23:398:574 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..71e1c9ef --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:22:646:65 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:22:646:989 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:22:745:988 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:8:22:746:731 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:22:758:336 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:8:22:846:568 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:22:848:352 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:22:849:109 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:22:853:464 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:22:863:612 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f34aee42 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:0:150:916 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:0:151:633 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:0:250:929 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:0:251:761 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:0:252:411 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:8:0:455:824 + Q7 finished at: 2022-4-2 11:8:0:461:678 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:0:555:556 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:8:0:556:468 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:0:560:157 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..5a042986 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:0:832:843 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:0:833:518 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:0:932:787 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:0:933:529 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:0:934:184 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:0:949:633 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:1:33:414 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:1:48:235 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 11:8:1:49:129 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:1:56:48 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..3b77a80e --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:1:398:881 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:1:399:575 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:1:498:941 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:1:499:986 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:8:1:599:543 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:1:614:598 +Q7 finished at: 2022-4-2 11:8:1:619:160 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:1:719:948 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:1:720:987 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:1:738:548 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..2b66f286 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:2:41:367 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:2:42:169 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:2:141:345 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:2:142:75 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:2:142:601 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:8:2:242:44 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:2:351:896 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:2:443:913 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:2:445:21 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:2:449:130 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..5ca94dc9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:3:757:658 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:3:758:381 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:3:857:695 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:3:858:604 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:3:859:254 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:8:3:958:205 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:3:972:656 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:4:61:323 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:4:62:293 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:4:70:550 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..bcd35616 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:4:353:507 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:4:354:183 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:4:453:478 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:4:454:262 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:4:454:846 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:4:461:920 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:4:554:32 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:4:562:247 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:4:563:300 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:4:568:518 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..92ec9ed2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:2:734:491 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:8:2:735:299 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:2:834:537 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:2:835:319 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:2:835:818 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:2:846:950 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:8:2:935:222 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:2:939:915 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 11:8:2:940:779 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:2:945:921 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..1557f5b4 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:3:242:499 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:8:3:243:536 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:3:342:475 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 11:8:3:343:201 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 11:8:3:343:730 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:3:358:426 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:8:3:443:21 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:3:450:629 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 11:8:3:451:597 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:3:457:839 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..483264de --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:58:921:285 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:58:921:995 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:59:21:239 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:59:22:40 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:59:22:739 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 11:7:59:122:9 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:59:228:389 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:59:328:286 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:59:329:513 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:59:333:95 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ac195807 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:59:606:47 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:59:606:811 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:59:705:980 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:7:59:706:704 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:7:59:707:360 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:59:726:76 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:7:59:806:614 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:7:59:816:11 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:7:59:816:984 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:7:59:828:409 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..fa6ae70e --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:4:855:914 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:4:856:584 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:4:955:901 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:4:956:643 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:4:957:506 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:5:56:70 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:5:56:657 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 11:8:5:57:446 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 11:8:5:156:629 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:5:171:265 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:5:264:969 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:5:368:542 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:8:5:369:713 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:5:371:269 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..0c6ef2fe --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 11:8:5:658:904 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 11:8:5:660:162 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 11:8:5:758:735 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 11:8:5:759:445 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:5:858:757 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 11:8:5:860:133 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:8:5:861:204 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:8:5:958:781 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 11:8:5:959:571 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:8:6:59:815 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 11:8:6:166:525 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:6:265:635 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:8:6:363:72 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:6:366:630 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 11:8:6:368:22 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 11:8:6:371:479 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..5d42f494 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:6:636:389 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:6:637:146 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:6:736:331 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:6:737:145 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:8:6:737:946 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:6:836:318 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:6:837:111 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 11:8:6:837:959 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:8:6:937:92 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:6:952:547 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:7:49:608 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:7:152:54 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 11:8:7:153:146 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:7:159:516 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..616eac3a --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:7:441:962 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 11:8:7:442:786 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:7:541:938 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 11:8:7:542:683 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:8:7:543:646 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:7:641:952 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 11:8:7:642:665 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-2 11:8:7:643:547 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 11:8:7:742:845 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:8:7:765:328 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:8:7:869:975 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:7:953:130 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 11:8:7:954:349 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 11:8:7:963:553 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..cd5576b2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:54:795:644 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:54:796:229 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:54:895:609 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:54:896:372 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 11:7:55:7:17 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:55:97:107 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:7:55:98:13 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:7:55:102:161 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..7726055a --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:56:88:794 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:56:89:550 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:56:188:725 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:56:189:695 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 11:7:56:289:362 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:56:393:229 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:56:495:117 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:7:56:495:996 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:56:499:374 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b2767375 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:56:804:15 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:56:804:757 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:56:904:22 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:7:56:904:981 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:56:909:455 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 11:7:57:4:633 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:57:11:351 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:7:57:12:299 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:57:16:87 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..457fe501 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:58:308:16 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:7:58:308:711 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:58:408:63 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:7:58:508:639 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:7:58:515:512 +Q6 finished at: 2022-4-2 11:7:58:518:958 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:7:58:616:757 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:58:617:774 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:58:624:312 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..a6995f26 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:55:409:106 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:7:55:409:951 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:55:509:137 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:55:509:836 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:7:55:609:746 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:7:55:729:635 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:55:815:23 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:7:55:816:27 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:55:820:112 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..936f4a4a --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:57:303:267 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:57:304:120 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:57:403:261 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 11:7:57:404:27 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:57:411:627 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:7:57:503:835 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:57:512:634 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 11:7:57:513:480 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:57:519:190 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b1b7c4b0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:7:57:790:398 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:7:57:791:382 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:7:57:890:425 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 11:7:57:891:98 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:7:57:910:782 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:7:57:991:122 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:7:57:996:139 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 11:7:57:996:887 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:7:58:8:775 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..62ee7a51 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:12:461:170 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:12:461:858 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:12:561:138 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:12:561:975 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 11:8:12:661:806 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:12:665:772 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:12:668:696 + Q6 finished at: 2022-4-2 11:8:12:671:497 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:12:672:490 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:12:675:636 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..2c8699dc --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:12:939:854 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:12:940:699 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:13:39:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:13:40:723 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:13:140:459 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:13:254:185 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:13:754:308 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..6e96da1f --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:14:44:621 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:14:45:382 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:14:144:639 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:14:145:482 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:14:245:315 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:14:355:722 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:14:849:561 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..a5ddb856 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:15:141:817 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:15:142:532 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:15:241:853 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:15:242:691 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:15:342:522 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:15:350:395 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:8:16:46:891 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..3aa4b768 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:16:347:968 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:16:348:976 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:16:447:924 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:16:448:748 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:16:449:238 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:8:16:660:912 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:16:665:500 +Q7 finished at: 2022-4-2 11:8:16:668:369 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:16:669:354 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:16:677:576 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7fd6f58e --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:16:933:637 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:16:934:538 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:17:33:605 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:17:34:318 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:17:34:798 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:8:17:237:514 + Q7 finished at: 2022-4-2 11:8:17:240:411 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:17:340:973 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:17:341:939 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:17:345:266 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b29cf0d5 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:17:636:967 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:17:637:683 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:17:736:975 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:17:737:926 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:8:17:837:404 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:17:842:984 +Q7 finished at: 2022-4-2 11:8:17:846:878 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:17:944:754 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:17:945:700 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:17:949:8 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..ec0ab3e8 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:18:218:441 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:18:219:177 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:18:318:427 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:18:319:294 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:8:18:418:776 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:18:629:475 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:18:639:311 + Q7 finished at: 2022-4-2 11:8:18:644:539 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:18:645:560 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:18:655:457 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..605c760b --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:18:964:505 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:18:965:259 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:19:64:492 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:19:65:404 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:19:164:883 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:19:170:569 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:19:177:27 + Q6 finished at: 2022-4-2 11:8:19:180:421 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 11:8:19:181:387 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:19:184:978 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..d18d05f4 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:19:469:567 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:19:470:358 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:19:569:522 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:19:570:260 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:19:669:546 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:19:670:313 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 11:8:19:770:157 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:19:879:241 + Q11 finished at: 2022-4-2 11:8:19:882:615 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:19:975:603 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:8:20:674:333 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..076371a2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:20:945:495 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:20:946:330 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:21:45:431 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:21:46:318 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:21:145:355 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:21:345:971 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 11:8:21:446:67 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:21:552:811 + Q10 finished at: 2022-4-2 11:8:21:559:762 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:21:752:962 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:8:22:353:623 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..827df83a --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:8:297:488 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:8:298:158 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:8:397:439 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 11:8:8:497:870 +Q5 finished at: 2022-4-2 11:8:8:501:405 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:8:608:716 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:8:8:609:598 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:8:8:634:669 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:8:641:837 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..84a3b9eb --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:8:893:549 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:8:894:358 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:8:993:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:9:105:703 +Q5 finished at: 2022-4-2 11:8:9:111:128 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:9:202:872 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:8:9:203:773 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:8:9:237:34 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:9:242:779 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..55c4dfc5 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:9:509:970 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:9:510:696 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:9:609:909 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 11:8:9:710:416 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:9:717:149 +Q6 finished at: 2022-4-2 11:8:9:720:554 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:9:815:216 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:8:9:816:94 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:9:822:228 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..885ad8e6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:10:81:468 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:10:82:237 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:10:181:465 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 11:8:10:281:977 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:10:286:200 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:10:289:28 + Q5 finished at: 2022-4-2 11:8:10:292:532 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:8:10:293:504 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:10:297:85 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..a725a706 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:11:918:75 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:11:918:796 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:12:18:19 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:8:12:118:723 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:12:149:10 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:12:158:44 + Q5 finished at: 2022-4-2 11:8:12:163:79 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:12:163:981 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:12:168:700 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f47112f0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:10:555:956 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:8:10:556:889 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:10:655:943 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:8:10:656:718 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:8:10:860:699 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:10:865:226 +Q6 finished at: 2022-4-2 11:8:10:871:876 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:10:872:824 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:10:886:631 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..3dc5f513 --- /dev/null +++ b/test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:11:226:913 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:8:11:227:789 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:11:326:820 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 11:8:11:327:614 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 11:8:11:531:50 + Q6 finished at: 2022-4-2 11:8:11:534:686 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:11:639:665 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:11:640:755 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:11:644:334 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/myrockss/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/myrockss/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/myrockss/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/myrockss/result_summary/read-uncommitted_total-result.txt b/test_result/centralizend_result/myrockss/result_summary/read-uncommitted_total-result.txt new file mode 100644 index 00000000..f709ccda --- /dev/null +++ b/test_result/centralizend_result/myrockss/result_summary/read-uncommitted_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/myrockss/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/myrockss/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/centralizend_result/myrockss/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/myrockss/result_summary/serializable_total-result.txt b/test_result/centralizend_result/myrockss/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/centralizend_result/myrockss/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..bad23c9a --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:11:737:443 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:11:738:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:11:837:411 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:11:838:72 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:11:937:920 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:11:946:111 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:12:638:63 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..378f6589 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:12:938:43 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:12:938:902 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:13:37:977 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:13:38:753 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:13:138:510 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:13:164:130 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:13:838:632 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..24ab6a11 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew.txt @@ -0,0 +1,49 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:14:153:583 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:14:156:600 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:14:253:612 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:14:254:503 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:14:354:110 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:14:462:209 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:9:14:954:214 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..9d18f0f7 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:16:931:83 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:16:931:971 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:17:31:40 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:17:31:874 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:17:131:541 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:17:148:216 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:17:831:643 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..67c11f47 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:15:243:702 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 11:9:15:244:600 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 11:9:15:245:156 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:9:15:343:706 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 11:9:15:448:636 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 11:9:15:449:176 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:9:15:454:763 + Q7 finished at: 2022-4-2 11:9:15:458:445 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 11:9:15:459:512 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 11:9:15:460:145 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:9:15:467:68 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..5a4957d0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: myrocks #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:15:751:986 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 11:9:15:752:955 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:15:851:984 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 11:9:15:853:12 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-2 11:9:15:952:625 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:15:963:630 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:16:652:723 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..7d8f3d27 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat.txt @@ -0,0 +1,89 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:18:106:946 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:9:18:107:880 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:18:206:931 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:9:18:207:945 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:9:18:307:86 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:9:18:308:142 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-2 11:9:18:607:562 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:9:18:812:697 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:9:18:815:821 +Q10 finished at: 2022-4-2 11:9:18:816:947 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-2 11:9:19:507:694 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..b24bcbee --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:26:604:635 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:26:605:532 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:26:704:638 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:9:26:804:616 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 11:9:26:905:298 +Q11-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:9:26:912:554 +Q11 finished at: 2022-4-2 11:9:26:912:569 + Q5-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:9:26:916:505 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 11:9:26:917:79 + Q9-T3 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:9:26:930:77 + Q9 finished at: 2022-4-2 11:9:26:933:672 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 11:9:26:935:16 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:9:26:939:750 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a2814e73 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,171 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:25:227:940 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:25:229:401 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:25:327:980 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:25:329:248 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:9:25:427:967 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:9:25:527:983 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 11:9:25:729:339 + Q12-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:9:25:734:489 + Q12 finished at: 2022-4-2 11:9:25:734:500 + Q10-T4 execute opt: 'COMMIT'; + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 11:9:25:738:956 +Q14-T1 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:9:25:740:974 +Q14 finished at: 2022-4-2 11:9:25:743:747 + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-2 11:9:26:328:789 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..142ac590 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,89 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:19:796:135 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 11:9:19:797:162 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:19:896:73 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:9:19:897:102 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:9:19:996:82 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:9:19:997:115 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-2 11:9:20:296:678 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:9:20:498:339 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 11:9:20:503:938 +Q10 finished at: 2022-4-2 11:9:20:506:922 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-2 11:9:21:196:777 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..003ea8dd --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,85 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:21:476:226 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 11:9:21:477:387 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:21:576:130 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 11:9:21:577:237 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:9:21:676:155 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 11:9:21:677:293 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q7 finished at: 2022-4-2 11:9:21:976:648 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 11:9:22:92:158 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-2 11:9:22:676:749 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-2 11:9:22:876:945 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..7215878b --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:27:213:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:9:27:214:640 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 11:9:27:215:435 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 11:9:27:313:591 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 11:9:27:314:610 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:9:27:413:596 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 11:9:27:414:654 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2022-4-2 11:9:27:514:95 + Q7-T2 execute opt: 'COMMIT'; + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:9:27:520:673 + Q11-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:9:27:527:321 + Q11 finished at: 2022-4-2 11:9:27:527:333 +Q12 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q12 failed at: 2022-4-2 11:9:28:714:226 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..348a3efa --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: myrocks #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:23:154:163 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 11:9:23:155:280 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:23:254:129 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 11:9:23:255:249 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:9:23:255:804 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 11:9:23:256:543 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 11:9:23:354:132 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 11:9:23:355:166 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 11:9:23:355:669 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:9:23:454:599 + Q8-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 11:9:23:463:522 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 11:9:23:464:104 + Q14-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:23:466:51 + Q14 finished at: 2022-4-2 11:9:23:476:121 +Q15 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q15 failed at: 2022-4-2 11:9:24:954:752 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/myrockss/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..ec4c2313 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:10:870:756 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:9:10:871:607 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:10:970:743 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 11:9:11:71:233 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:9:11:81:861 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-2 11:9:11:471:412 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/myrockss/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..1da43254 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:10:352:253 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:10:353:53 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:10:452:262 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:9:10:552:832 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:9:10:554:683 + Q4 finished at: 2022-4-2 11:9:10:554:744 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:9:10:564:613 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:9:10:565:652 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:9:10:572:350 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:9:10:580:415 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..40e821f3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:39:207:984 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:39:208:730 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:39:308:25 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:39:308:865 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:39:408:785 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:39:514:910 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:40:12:340 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..e48407e8 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:40:304:963 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:40:305:788 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:40:404:977 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:40:405:813 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:40:505:694 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:40:514:513 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:8:41:210:37 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..608342f0 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:41:481:395 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:41:482:71 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:41:581:330 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:41:582:78 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:41:681:961 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:41:792:168 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:42:286:404 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..7561b934 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:42:561:618 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:42:562:453 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:42:661:676 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:42:662:469 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:42:762:134 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:42:868:639 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:43:362:229 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..2a2eacdf --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:44:605:590 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:44:606:240 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:44:705:549 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:44:706:385 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 11:8:44:806:86 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:44:813:190 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-2 11:8:45:306:229 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..ef32048c --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:45:589:624 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:45:590:408 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:45:689:648 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:8:45:690:600 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 11:8:45:790:285 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:45:801:187 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-2 11:8:46:290:388 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..d08eb3e1 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:43:647:367 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:8:43:648:366 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:43:747:283 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:8:43:848:110 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:43:853:104 + Q4 finished at: 2022-4-2 11:8:43:853:144 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 11:8:43:853:719 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:43:859:378 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 11:8:43:860:174 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:43:863:328 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..85da2bdd --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: myrocks #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:44:117:438 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 11:8:44:118:492 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:44:217:479 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 11:8:44:318:157 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 11:8:44:322:101 + Q4 finished at: 2022-4-2 11:8:44:322:114 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 11:8:44:322:760 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:44:334:527 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 11:8:44:337:601 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 11:8:44:340:892 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a6fdd2f3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:36:912:804 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:36:913:546 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:37:12:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:37:13:656 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:37:113:552 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:37:228:234 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:37:722:667 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..8e116ac6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:37:993:992 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:37:994:738 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:38:93:976 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:38:94:780 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:38:194:837 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:38:201:624 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:8:38:898:312 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..9b91f9e7 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:46:568:760 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:46:569:522 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:46:668:673 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:46:669:388 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:46:768:969 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:46:769:581 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 11:8:46:869:585 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 11:8:46:973:894 + Q11 finished at: 2022-4-2 11:8:46:976:624 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:47:78:651 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:8:47:774:625 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..2dc7e42c --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,169 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 11:8:48:110:275 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 11:8:48:111:812 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 11:8:48:209:958 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:8:48:310:6 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 11:8:48:311:477 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 11:8:48:410:39 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:8:48:511:238 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 11:8:48:812:305 + Q9 finished at: 2022-4-2 11:8:48:812:388 + Q12-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 11:8:48:818:376 + Q12 finished at: 2022-4-2 11:8:48:823:676 +Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q4 failed at: 2022-4-2 11:8:48:910:718 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..58b37a81 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:49:238:772 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:49:239:589 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:49:338:734 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:49:339:545 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:49:438:741 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 11:8:49:439:478 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:8:49:539:967 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 11:8:49:644:286 + Q11 finished at: 2022-4-2 11:8:49:646:966 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:49:754:66 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:8:50:444:511 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..0317bf9e --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: myrocks #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:50:712:664 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 11:8:50:713:454 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:50:812:676 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 11:8:50:813:620 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:8:50:912:628 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 11:8:50:913:279 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 11:8:51:13:540 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-2 11:8:51:118:665 + Q11 finished at: 2022-4-2 11:8:51:122:535 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:8:51:223:163 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:8:51:924:212 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..547b1b58 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:32:701:628 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:32:702:212 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:32:801:554 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:8:32:901:921 +Q5 finished at: 2022-4-2 11:8:32:905:59 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:33:8:155 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 11:8:33:9:194 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:33:16:916 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..aa2d252c --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:34:55:775 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:34:56:644 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:34:155:779 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 11:8:34:256:292 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:8:34:459:853 + Q6-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:34:462:664 + Q6 finished at: 2022-4-2 11:8:34:464:656 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:8:34:465:575 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:34:469:503 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..fe1acea6 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:34:741:32 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:34:742:4 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:34:840:962 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 11:8:34:941:558 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 11:8:34:949:206 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:34:952:936 +Q7 finished at: 2022-4-2 11:8:34:955:483 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 11:8:34:956:324 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:34:963:44 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..cce36b90 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:36:327:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:36:328:546 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:36:427:656 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:8:36:528:279 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:36:533:617 +Q6 finished at: 2022-4-2 11:8:36:539:850 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:36:632:789 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:36:633:618 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:36:637:33 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..c38460ec --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:33:333:995 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:8:33:334:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:33:434:23 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 11:8:33:534:624 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:33:745:440 + Q4 finished at: 2022-4-2 11:8:33:745:462 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:33:757:815 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:33:758:772 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:33:762:322 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..37bfe9df --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:35:310:795 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:8:35:311:793 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:35:410:746 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:8:35:511:467 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:35:517:229 + Q4 finished at: 2022-4-2 11:8:35:517:287 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:35:527:236 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 11:8:35:531:657 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:35:536:372 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..a7a567a7 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: myrocks #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:35:813:337 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 11:8:35:814:487 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:35:913:217 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 11:8:36:13:960 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:36:18:997 + Q4 finished at: 2022-4-2 11:8:36:19:20 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 11:8:36:35:166 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 11:8:36:36:54 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:36:39:980 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..7235db7f --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:56:887:814 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:56:888:502 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:56:987:890 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:56:988:663 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:57:88:374 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:57:94:988 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:8:57:792:377 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..60f3d62c --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:58:81:764 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:58:82:449 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:58:181:754 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:58:182:480 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:58:282:342 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:8:58:393:737 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:58:891:565 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..22b166fc --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:59:186:271 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:59:187:119 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:59:286:197 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:8:59:286:954 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:8:59:386:840 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:59:494:87 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:8:59:990:461 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..fabca386 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: myrocks #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:0:289:519 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:0:290:298 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:0:389:491 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:0:390:347 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:0:489:963 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:0:497:440 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:1:194:396 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..64fe36f1 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:1:470:903 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:1:471:725 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:1:570:924 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:1:571:740 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:1:671:414 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:1:781:875 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:9:2:271:533 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..3d3edfff --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:2:587:34 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 11:9:2:587:927 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:2:686:989 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:2:687:772 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:2:787:604 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:9:2:898:162 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:9:3:387:725 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..1afc2bdf --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:3:713:916 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:3:714:673 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:3:813:916 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:3:814:774 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:3:914:418 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:4:20:941 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:9:4:518:303 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..27602adb --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:4:827:884 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:4:828:589 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:4:927:893 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:4:928:725 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:5:28:452 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:9:5:135:659 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-2 11:9:5:634:279 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..adc7c8b5 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: myrocks #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:5:915:939 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:5:916:633 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:6:15:937 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 11:9:6:16:832 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 11:9:6:116:587 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:9:6:127:199 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-2 11:9:6:823:549 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1692e477 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:7:127:479 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:7:128:209 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:7:227:484 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:7:228:229 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 11:9:7:327:569 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:9:7:328:398 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 11:9:7:428:94 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:7:532:822 + Q11 finished at: 2022-4-2 11:9:7:536:483 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:9:7:637:531 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:9:8:333:941 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..57b438ca --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: myrocks #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:9:8:619:204 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:9:8:620:49 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:9:8:719:139 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 11:9:8:719:884 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 11:9:8:819:134 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 11:9:9:19:748 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 11:9:9:119:788 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 11:9:9:224:749 + Q10 finished at: 2022-4-2 11:9:9:229:470 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 11:9:9:429:526 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-2 11:9:10:25:884 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..886672f9 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:52:243:958 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:52:244:730 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:52:343:879 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 11:8:52:444:310 +Q5 finished at: 2022-4-2 11:8:52:447:761 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:52:554:450 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:8:52:555:312 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:8:52:589:809 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:52:591:629 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..3c006f17 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:52:900:979 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:52:901:697 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:53:0:989 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:53:102:708 +Q5 finished at: 2022-4-2 11:8:53:108:891 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 11:8:53:210:469 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 11:8:53:211:370 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 11:8:53:226:450 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:53:229:620 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..a2b56b9a --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:53:474:162 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:53:474:866 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:53:574:67 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 11:8:53:674:538 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:53:678:892 +Q6 finished at: 2022-4-2 11:8:53:681:788 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 11:8:53:780:627 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:8:53:781:509 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:53:783:255 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..46c245e2 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: myrocks #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:54:61:703 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:54:62:428 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:54:161:689 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 11:8:54:262:246 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:54:264:743 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:54:280:573 + Q5 finished at: 2022-4-2 11:8:54:290:421 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 11:8:54:291:460 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:54:299:181 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..78a80ad3 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:56:371:131 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 11:8:56:371:864 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:56:471:108 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 11:8:56:571:788 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 11:8:56:575:665 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:56:579:220 + Q5 finished at: 2022-4-2 11:8:56:582:863 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 11:8:56:583:784 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 11:8:56:587:658 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..5ed58e0d --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:54:586:468 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:8:54:587:416 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:54:686:443 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 11:8:54:787:19 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 11:8:54:795:3 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-2 11:8:55:187:138 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..7caf2d21 --- /dev/null +++ b/test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: myrocks #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 11:8:55:479:84 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 11:8:55:479:866 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 11:8:55:579:107 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 11:8:55:679:657 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 11:8:55:892:492 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-2 11:8:56:79:839 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.35-38]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..30b7ba41 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:43:774:210 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:43:775:942 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:43:874:270 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:43:876:139 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:43:877:710 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:43:884:333 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:40:43:975:186 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:43:976:170 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:43:977:952 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:43:978:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..a8d9b2af --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:44:255:190 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:44:256:724 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:44:359:510 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:44:361:141 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:44:362:538 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:44:369:54 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:44:456:190 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:44:462:330 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:44:464:513 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:44:465:340 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..6fe72c8c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:44:741:392 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:44:743:32 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:44:841:455 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:44:843:257 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:44:844:754 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:44:942:346 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:44:948:830 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:45:47:173 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:45:49:581 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:45:50:661 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..f7c38655 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:46:347:661 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:46:349:326 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:46:447:697 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:46:449:384 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:46:450:863 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:46:457:488 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:46:548:649 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:46:554:913 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:46:557:277 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:46:558:154 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..3bd95d86 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:45:368:754 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:40:45:370:644 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:40:45:372:228 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:40:45:468:758 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:40:45:470:714 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:40:45:472:206 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:45:477:882 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:45:576:86 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:40:45:578:817 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:40:45:580:513 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:45:581:452 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..9bf6680c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:45:859:577 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:40:45:861:800 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:45:959:567 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:40:45:962:1 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:40:45:964:421 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:45:971:354 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:40:46:61:501 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:46:70:6 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:40:46:72:377 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:46:73:483 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..ce340f85 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:46:823:250 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:40:46:825:386 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:46:924:79 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:46:926:475 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:47:23:157 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:47:25:321 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:40:47:124:498 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:47:225:93 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:40:47:328:444 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:47:429:676 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:47:534:153 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:47:629:338 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:47:631:778 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:47:632:822 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..061cc64c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:51:440:451 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:51:442:366 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:51:540:516 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:51:542:188 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:51:549:325 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:51:640:648 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:40:51:642:881 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:51:644:462 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:51:651:352 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:40:51:741:901 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:40:51:742:976 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:40:51:745:336 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:40:51:746:373 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..8254711a --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:50:639:649 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:50:642:214 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:50:739:664 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:50:742:355 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:50:839:913 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:40:50:841:825 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:50:849:36 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:40:50:939:808 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:40:50:941:694 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:50:949:265 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:40:51:41:868 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:51:42:968 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:40:51:141:815 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:40:51:143:40 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:40:51:146:203 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:40:51:147:268 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..4b516abf --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:47:910:455 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:40:47:912:590 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:48:13:476 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:48:15:588 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:48:110:349 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:48:112:487 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:40:48:213:587 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:48:311:428 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:40:48:411:619 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:48:516:885 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:48:618:352 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:48:716:709 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:40:48:719:137 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:48:720:923 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..42203e93 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:48:981:47 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:40:48:984:14 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:49:81:695 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:40:49:83:908 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:49:181:107 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:40:49:183:411 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:40:49:282:139 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:40:49:388:35 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:40:49:481:900 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:49:586:607 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:49:686:966 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:49:786:958 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:49:789:469 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:49:790:394 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..e45e5ad9 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:52:22:706 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:52:24:614 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:40:52:26:414 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:40:52:122:733 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:40:52:127:285 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:40:52:129:3 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:52:147:64 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:40:52:222:792 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:40:52:225:83 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:40:52:227:106 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:52:228:284 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:40:52:323:534 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:40:52:332:309 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:40:52:336:713 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:40:52:337:850 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..65e52e7d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:50:61:804 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:40:50:63:844 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:50:163:673 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:40:50:166:140 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:50:167:884 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:50:170:399 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:40:50:172:371 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:50:180:15 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 17:40:50:261:731 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:40:50:263:895 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:40:50:265:341 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:40:50:267:98 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:40:50:268:542 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:50:279:329 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:40:50:363:41 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:40:50:364:28 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:40:50:366:651 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:40:50:367:822 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mysql/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..374cd63d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:43:301:803 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:40:43:303:442 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:43:401:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:43:403:744 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:43:410:98 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:40:43:502:605 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:43:510:741 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:43:512:448 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:43:513:814 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mysql/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..20b4032f --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:42:834:341 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:42:836:254 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:42:934:300 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:42:936:87 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:42:942:910 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:40:43:35:191 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:43:36:163 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:43:37:866 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:43:38:779 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:43:39:599 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..fe17017a --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:21:57:517 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:21:59:574 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:21:157:412 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:21:159:216 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:21:160:933 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:21:363:529 +Q6 finished at: 2022-4-1 17:40:21:363:660 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:21:463:393 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:40:21:465:417 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:21:467:45 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..d76c40c1 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:21:743:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:21:745:953 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:21:843:820 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:21:845:479 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:21:846:952 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:21:853:340 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:21:944:817 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:21:952:284 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:40:21:955:352 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:21:956:178 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..a8a49597 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:22:227:920 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:22:229:458 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:22:327:949 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:22:329:679 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:22:430:129 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:22:436:666 + Q5 finished at: 2022-4-1 17:40:22:436:734 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:22:537:263 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:22:539:144 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:22:539:916 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..e0a2e357 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:22:805:890 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:22:807:577 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:22:905:831 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:22:907:532 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:22:908:961 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:23:6:990 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:23:112:721 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:23:206:196 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:23:208:129 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:23:208:944 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ec0dcf9c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:24:422:541 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:24:424:342 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:24:522:542 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:24:524:529 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:24:526:226 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:24:627:580 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:24:634:355 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:24:723:88 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:24:725:135 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:24:726:70 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..6a34338b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:25:2:94 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:25:3:816 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:25:102:162 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:25:104:311 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:25:105:936 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:25:107:65 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:25:202:890 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:25:209:14 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:25:211:466 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:25:212:262 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..c733a9bf --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:23:474:410 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:40:23:476:291 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:23:575:520 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:23:577:167 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:23:578:440 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:23:585:79 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:40:23:675:515 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:23:676:471 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:40:23:678:347 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:23:679:173 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..72d206be --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:23:942:580 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:40:23:945:195 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:24:43:434 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:40:24:45:96 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:40:24:46:410 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:24:58:843 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:40:24:143:830 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:24:144:886 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:40:24:146:898 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:24:147:760 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..3f9f30a5 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:19:891:1 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:19:892:678 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:19:991:5 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:19:992:753 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:19:994:310 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:20:92:495 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:20:197:561 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:20:297:390 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:20:299:473 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:20:300:262 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..41f6b904 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:20:577:791 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:20:579:499 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:20:679:573 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:20:681:313 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:20:682:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:20:688:686 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:40:20:780:421 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:20:786:799 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:20:788:817 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:20:789:638 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..7f607c36 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:25:478:13 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:25:480:35 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:25:577:913 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:25:579:764 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:25:581:773 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:25:679:779 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:25:681:504 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:40:25:683:454 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:40:25:779:383 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:25:787:218 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:25:883:744 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:25:983:901 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:25:987:432 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:25:988:388 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c723348c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 17:40:26:255:828 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:40:26:258:487 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 17:40:26:355:730 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:40:26:357:463 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:26:455:632 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:40:26:458:531 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:40:26:461:61 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:40:26:555:584 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:40:26:557:408 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:40:26:658:687 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:40:26:765:797 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:26:861:590 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:40:26:956:62 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:26:957:150 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:40:26:959:667 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:40:26:960:558 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..51f42de0 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:27:229:291 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:27:230:812 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:27:329:286 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:27:330:988 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:40:27:332:963 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:27:429:344 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:27:430:936 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:40:27:433:751 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:40:27:532:872 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:27:539:179 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:27:637:598 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:27:737:685 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:40:27:739:851 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:27:741:305 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..298b52a7 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:28:16:120 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:40:28:18:499 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:28:115:950 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:40:28:117:544 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:40:28:121:428 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:28:216:31 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:40:28:217:629 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:40:28:219:489 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:40:28:317:496 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:28:323:109 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:28:421:825 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:28:524:273 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:28:527:990 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:28:529:95 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..1986c857 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:15:890:980 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:15:892:589 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:15:993:861 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:15:995:742 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:40:16:94:495 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:16:190:828 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:40:16:192:564 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:16:193:381 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a7e8469b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:17:154:927 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:17:156:654 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:17:254:999 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:17:256:983 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:40:17:356:724 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:17:455:302 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:17:566:305 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:40:17:567:993 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:17:569:950 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..0cf5e574 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:17:848:79 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:17:849:656 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:17:948:99 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:17:949:820 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:17:950:718 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:40:18:48:940 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:18:55:929 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:40:18:57:528 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:18:59:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..f240e0fd --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:19:301:868 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:19:303:666 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:19:401:780 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:40:19:502:910 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:40:19:510:767 + Q4 finished at: 2022-4-1 17:40:19:510:909 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:19:608:883 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:19:610:797 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:19:612:479 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..f88e19f1 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:16:468:343 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:16:470:207 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:16:568:157 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:16:569:902 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:40:16:669:308 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:16:775:69 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:16:868:607 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:16:870:357 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:16:871:302 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..ff494e5b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:18:341:911 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:18:343:853 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:18:442:80 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:18:443:753 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:18:452:393 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:40:18:544:640 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:18:545:495 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:40:18:549:357 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:18:550:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..8a54dac0 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:18:813:974 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:18:816:480 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:18:915:494 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:40:18:917:236 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:18:923:630 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:40:19:15:104 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:19:16:0 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:40:19:17:632 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:19:18:350 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..20a66e32 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:32:811:166 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:32:814:255 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:32:911:631 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:32:913:625 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:40:33:16:894 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:33:26:994 +Q8 finished at: 2022-4-1 17:40:33:27:6 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:33:34:272 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:33:37:176 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:33:38:144 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..d729419c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:33:314:306 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:33:316:20 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:33:415:734 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:33:417:608 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:40:33:517:654 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:33:621:671 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:40:34:120:473 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a603fdd5 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:34:415:439 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:34:417:262 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:34:515:115 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:34:516:853 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:40:34:615:687 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:34:733:699 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:40:35:219:901 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..51c32066 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:35:498:266 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:35:499:937 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:35:598:226 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:35:600:340 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:40:35:699:497 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:35:705:227 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:40:36:403:84 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..f37cb41b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:36:678:591 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:36:680:243 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:36:778:582 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:36:780:505 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:36:782:412 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:36:984:743 +Q6 finished at: 2022-4-1 17:40:36:984:792 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:36:990:533 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:36:993:583 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:36:994:533 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..8e5c8913 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:37:265:517 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:37:267:369 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:37:364:469 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:37:366:303 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:37:367:954 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:37:570:542 +Q6 finished at: 2022-4-1 17:40:37:570:573 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:37:669:435 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:37:672:194 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:37:673:83 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..17b53bf2 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:37:939:77 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:37:940:754 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:38:39:8 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:38:40:786 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:38:139:821 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:38:146:59 + Q5 finished at: 2022-4-1 17:40:38:146:72 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:38:244:715 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:38:247:219 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:38:248:174 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..5611e392 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:38:514:709 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:38:516:569 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:38:618:557 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:38:620:415 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:38:716:402 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:38:920:194 + Q5 finished at: 2022-4-1 17:40:38:920:225 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:38:925:816 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:38:928:176 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:38:929:179 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..bdcf551c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:39:190:504 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:39:192:207 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:39:290:544 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:39:292:414 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:39:391:408 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:39:397:728 + Q5 finished at: 2022-4-1 17:40:39:397:769 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:39:405:143 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:39:407:25 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:39:407:915 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..58074662 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:39:677:713 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:39:679:316 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:39:777:870 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:39:780:117 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:39:877:899 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:39:880:124 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:40:39:979:319 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:40:84:249 + Q11 finished at: 2022-4-1 17:40:40:84:270 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:40:184:366 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:40:40:892:678 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..331a0499 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:41:161:985 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:41:163:597 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:41:261:892 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:41:263:657 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:41:362:212 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:41:563:79 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:40:41:663:267 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:41:768:371 + Q8 finished at: 2022-4-1 17:40:41:768:384 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:41:967:628 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:40:42:566:315 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4f6c06b9 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:28:797:597 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:28:799:409 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:28:897:606 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 17:40:28:998:137 +Q5 finished at: 2022-4-1 17:40:29:2:388 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:29:103:414 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:40:29:105:394 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:40:29:130:212 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:29:131:260 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..09637b67 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:29:375:328 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:29:377:97 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:29:475:388 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:40:29:580:856 + Q4 finished at: 2022-4-1 17:40:29:580:863 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:29:681:49 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:40:29:683:282 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:40:29:712:910 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:29:715:362 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..b841677d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:29:963:442 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:29:965:119 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:30:63:538 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:40:30:164:826 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:40:30:172:905 + Q4 finished at: 2022-4-1 17:40:30:172:957 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:30:269:21 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:40:30:271:269 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:30:272:152 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d853b4dd --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:30:541:214 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:30:542:884 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:30:641:207 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:40:30:742:84 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:30:748:958 + Q4 finished at: 2022-4-1 17:40:30:749:11 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:30:755:567 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:40:30:757:212 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:30:757:970 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..4c1c5e1a --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:32:326:409 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:32:328:422 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:32:426:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:40:32:527:179 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 17:40:32:533:615 +Q7 finished at: 2022-4-1 17:40:32:533:750 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:32:541:442 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:32:543:400 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:32:544:293 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..1a98cf28 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:31:30:713 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:40:31:32:434 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:31:130:886 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:31:132:780 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:31:336:301 +Q5 finished at: 2022-4-1 17:40:31:336:374 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:40:31:342:485 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:31:344:918 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:31:345:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..c8c85c62 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:31:623:518 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:40:31:625:306 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:31:723:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:31:725:645 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:40:31:931:279 + Q6 finished at: 2022-4-1 17:40:31:931:602 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:32:30:442 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:32:32:443 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:32:34:87 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..477a84a5 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:6:826:866 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:6:828:598 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:6:927:53 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:6:928:821 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:6:930:353 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:6:936:966 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:40:7:28:523 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:7:29:561 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:7:31:360 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:7:32:280 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..da363c98 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:7:323:223 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:7:324:987 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:7:424:32 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:7:425:952 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:7:427:488 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:7:435:62 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:7:524:469 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:7:531:562 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:7:533:325 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:7:534:962 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew.txt new file mode 100644 index 00000000..b7c82da9 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:7:813:987 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:7:815:673 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:7:913:997 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:7:915:718 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:7:917:258 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:8:14:812 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:8:21:505 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:8:123:498 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:8:126:739 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:8:127:937 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..2a5f4641 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:9:396:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:9:398:285 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:9:496:639 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:9:498:294 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:9:499:851 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:9:508:219 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:9:597:593 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:9:604:144 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:9:606:78 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:9:607:17 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..fdd1bbe8 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:8:393:222 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:40:8:395:259 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:40:8:397:10 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:40:8:493:84 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:40:8:495:116 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:40:8:496:571 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:8:503:942 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:8:598:422 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:40:8:601:118 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:40:8:602:779 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:8:603:591 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..32b3ae6f --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:8:891:288 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:40:8:893:541 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:8:991:348 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:40:8:993:784 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:40:8:996:69 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:9:3:928 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:40:9:93:245 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:9:100:217 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:40:9:102:214 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:9:103:752 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat.txt new file mode 100644 index 00000000..e045e94e --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:9:887:349 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:40:9:889:366 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:9:987:371 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:9:989:375 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:10:87:580 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:10:89:732 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:40:10:188:262 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:10:288:399 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:40:10:388:502 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:10:493:435 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:10:593:802 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:10:694:521 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:10:696:870 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:10:697:785 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..248193a8 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:14:522:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:14:524:834 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:14:623:141 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:14:624:842 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:14:630:942 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:14:723:29 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:40:14:725:496 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:14:727:345 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:14:741:803 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:40:14:824:207 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:40:14:825:279 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:40:14:827:749 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:40:14:828:641 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..cf4a4f32 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:13:731:403 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:13:733:945 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:13:831:332 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:13:834:78 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:13:931:394 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:40:13:933:148 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:13:940:425 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:40:14:31:493 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:40:14:33:321 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:14:40:772 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:40:14:133:446 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:14:134:589 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:40:14:237:288 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:40:14:238:808 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:40:14:243:362 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:40:14:244:368 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..6e1f37b5 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:10:977:933 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:40:10:979:939 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:11:77:462 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:11:79:656 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:11:177:570 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:11:179:675 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:40:11:278:708 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:40:11:380:283 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:40:11:478:747 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:11:584:444 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:11:688:160 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:11:784:536 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:40:11:786:622 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:11:787:844 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..7404e52d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:12:59:257 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:40:12:62:249 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:12:159:163 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:40:12:161:215 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:12:259:213 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:40:12:261:310 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:40:12:360:30 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:40:12:460:226 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:40:12:560:133 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:40:12:665:725 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:12:765:470 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:12:865:602 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:40:12:869:58 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:12:870:2 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..67722dfa --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:15:132:593 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:15:134:730 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:40:15:136:893 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:40:15:232:934 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:40:15:235:601 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:40:15:237:353 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:15:244:628 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:40:15:332:690 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:40:15:335:173 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:40:15:337:283 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:15:338:280 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:40:15:433:711 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:40:15:441:25 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:40:15:443:352 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:40:15:445:10 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..9800e172 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:13:152:23 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:40:13:153:960 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:13:252:29 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:40:13:254:496 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:13:256:167 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:40:13:258:160 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:40:13:259:654 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:13:266:525 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 17:40:13:352:45 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:40:13:354:423 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:40:13:356:62 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:40:13:357:915 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:40:13:359:283 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:40:13:365:617 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:40:13:453:513 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:40:13:454:557 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:40:13:457:119 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:40:13:458:114 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..292b57b8 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:6:333:610 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:40:6:335:263 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:6:433:566 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:6:435:358 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:6:447:846 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:40:6:534:503 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:6:542:540 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:6:544:859 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:6:545:794 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..0504d43b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:5:854:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:5:855:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:5:954:380 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:5:956:152 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:5:964:276 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:40:6:55:277 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:6:56:173 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:6:57:769 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:6:58:614 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:6:59:389 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..8a7c4803 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:43:833:232 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:43:835:98 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:43:933:132 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:43:934:977 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:43:936:597 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:44:141:732 +Q6 finished at: 2022-4-1 17:39:44:141:792 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:44:239:636 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:39:44:242:685 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:44:243:535 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..10a5748f --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:44:529:880 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:44:531:601 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:44:629:807 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:44:631:572 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:44:633:373 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:44:641:689 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:39:44:730:780 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:44:736:877 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:39:44:739:198 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:44:740:138 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..89be7cb3 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:44:997:822 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:44:999:448 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:45:97:765 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:45:99:524 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:39:45:200:480 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:45:206:816 + Q5 finished at: 2022-4-1 17:39:45:206:876 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:39:45:303:507 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:45:306:282 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:45:307:266 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew.txt new file mode 100644 index 00000000..0137f173 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:45:584:923 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:39:45:586:606 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:45:684:972 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:45:686:706 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:39:45:688:258 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:39:45:786:201 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:45:891:940 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:45:985:438 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:45:987:478 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:45:988:330 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2.txt new file mode 100644 index 00000000..0c5eddf9 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:47:226:388 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:47:228:91 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:47:327:184 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:39:47:329:215 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:47:330:953 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:39:47:430:931 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:47:440:49 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:39:47:526:773 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:47:528:821 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:47:529:780 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..8ad1094c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:47:808:337 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:47:810:69 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:47:911:10 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:39:47:912:808 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:47:914:294 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:47:915:205 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:39:48:11:680 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:48:19:580 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:48:22:499 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:48:23:502 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..b5ff46a2 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:46:275:991 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:39:46:277:929 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:46:382:27 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:46:383:840 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:39:46:385:392 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:46:392:277 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:39:46:477:142 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:46:478:64 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:39:46:479:909 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:46:480:733 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..8fcc0981 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:46:751:597 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:39:46:754:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:46:851:383 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:39:46:852:934 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:39:46:854:303 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:46:863:884 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:39:46:952:521 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:46:953:402 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:39:46:955:356 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:46:956:409 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..150dd007 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:42:629:945 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:42:631:733 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:42:729:877 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:42:731:587 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:42:733:230 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:39:42:830:860 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:42:935:539 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:43:38:156 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:43:40:192 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:43:41:56 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c9813c8c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:43:326:747 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:43:328:401 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:43:426:897 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:43:428:961 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:43:430:689 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:43:437:575 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:39:43:528:49 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:43:533:988 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:43:536:506 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:43:538:169 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat.txt new file mode 100644 index 00000000..b47261a0 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:48:297:107 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:48:298:785 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:48:397:82 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:48:399:148 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:39:48:400:951 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:39:48:497:440 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:39:48:499:479 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:39:48:501:655 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:39:48:598:447 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:39:48:604:583 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:39:48:702:268 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:39:48:802:397 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:39:48:805:401 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:39:48:806:254 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..4384965e --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 17:39:49:70:157 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:39:49:72:745 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 17:39:49:170:313 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:39:49:172:370 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:39:49:269:832 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:39:49:272:775 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:39:49:275:702 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:39:49:372:581 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:39:49:374:575 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:39:49:472:182 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:39:49:576:318 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:39:49:681:15 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:39:49:770:326 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:39:49:771:475 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:39:49:774:505 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:39:49:775:363 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..5f4a01c4 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:50:65:653 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:50:67:202 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:50:165:660 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:50:167:457 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:39:50:169:402 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:39:50:265:743 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:39:50:267:480 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:39:50:269:538 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + *(4) expected_result: + (,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:39:50:367:234 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:39:50:374:16 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:39:50:471:785 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:39:50:573:688 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:39:50:575:770 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:39:50:577:729 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9e0a0fc9 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:50:846:572 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:39:50:848:910 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:50:946:728 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:39:50:948:411 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:39:50:950:518 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:39:51:46:832 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:39:51:48:412 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:39:51:50:205 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:39:51:148:12 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:39:51:154:124 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:39:51:252:223 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:39:51:353:698 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:39:51:355:904 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:39:51:356:836 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_dirty_read.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_dirty_read.txt new file mode 100644 index 00000000..14a67a80 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:38:681:749 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:38:728:904 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:38:781:667 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:39:38:784:510 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:39:38:884:460 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:38:981:744 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:39:38:984:441 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:39:38:985:337 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..d854b0f0 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:39:920:717 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:39:922:316 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:40:20:713 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:39:40:22:658 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:39:40:124:431 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:40:221:187 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:40:326:344 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:39:40:328:689 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:40:329:445 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..9d80ed59 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:40:589:388 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:40:590:920 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:40:689:556 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:39:40:691:661 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:39:40:692:779 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:39:40:790:634 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:40:801:155 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:39:40:803:543 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:40:804:400 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..183ba2af --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:42:46:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:42:48:285 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:42:147:672 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:39:42:248:5 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 17:39:42:254:419 +Q6 finished at: 2022-4-1 17:39:42:254:459 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:42:352:863 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:39:42:354:771 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:42:356:109 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7703699d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:39:251:736 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:39:39:253:862 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:39:351:455 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:39:39:353:220 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:39:39:452:462 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:39:557:141 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:39:652:739 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:39:39:654:613 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:39:655:480 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..3434dab0 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:41:67:322 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:39:41:69:302 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:41:167:216 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:39:41:169:93 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:39:41:182:198 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:39:41:268:726 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:41:269:725 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:39:41:271:340 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:41:272:234 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..73456bb7 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:41:575:649 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:39:41:578:224 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:41:675:821 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:39:41:677:584 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:39:41:684:10 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:39:41:776:680 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:41:777:495 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:39:41:779:79 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:41:779:909 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..df85a5d4 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:55:593:938 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:55:595:533 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:55:694:10 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:55:695:841 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:39:55:794:942 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:39:55:800:887 + Q5 finished at: 2022-4-1 17:39:55:800:911 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:55:806:851 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:55:809:483 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:55:810:313 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..3e9c4489 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:56:78:714 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:56:80:295 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:56:178:895 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:56:180:828 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:39:56:324:376 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:39:56:383:898 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:39:56:927:783 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..06c93f4b --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:57:199:724 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:57:201:344 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:57:299:599 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:57:301:243 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:39:57:401:49 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:57:505:341 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:39:58:4:636 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..a5639f2e --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:58:274:340 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:58:276:82 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:58:374:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:58:376:210 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:39:58:475:509 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:58:487:155 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:39:59:182:225 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..75e9d872 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:59:472:577 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:39:59:474:229 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:59:575:607 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:39:59:577:348 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:39:59:578:985 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:39:59:780:453 +Q6 finished at: 2022-4-1 17:39:59:780:490 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:59:794:56 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:39:59:796:290 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:39:59:797:269 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..bd8bb911 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:0:78:939 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:0:80:761 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:0:183:683 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:0:185:525 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:0:187:129 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:0:389:242 +Q6 finished at: 2022-4-1 17:40:0:389:313 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:0:492:693 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:0:494:946 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:0:496:67 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..e6af5785 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:0:777:705 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:0:779:369 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:0:891:423 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:0:893:299 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:0:979:991 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:0:991:431 +Q7 finished at: 2022-4-1 17:40:0:991:506 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:1:96:797 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:1:98:993 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:1:100:54 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..faaa43cc --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:1:454:914 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:1:456:613 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:1:555:594 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:1:558:660 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:40:1:660:418 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:1:862:820 +Q8 finished at: 2022-4-1 17:40:1:863:225 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:1:870:777 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:1:872:856 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:1:873:781 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..51f9bb82 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:2:181:45 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:2:183:4 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:2:281:674 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:40:2:283:545 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:2:384:228 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:2:391:19 + Q5 finished at: 2022-4-1 17:40:2:391:32 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:2:397:974 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:2:400:68 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:2:402:52 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..c6b6be40 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:2:685:118 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:2:686:998 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:2:785:25 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:2:786:749 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:40:2:885:393 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:2:887:437 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:40:2:988:770 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:40:3:91:707 + Q8 finished at: 2022-4-1 17:40:3:91:696 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:3:190:779 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:40:3:891:829 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..d1dcf17d --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:4:166:194 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:4:168:44 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:4:266:160 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:4:267:900 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:40:4:366:205 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:40:4:567:463 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:40:4:667:558 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:4:773:53 + Q10 finished at: 2022-4-1 17:40:4:773:100 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:40:4:972:580 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:40:5:572:326 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d144d54e --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:51:619:701 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:51:621:288 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:51:719:849 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 17:39:51:820:253 +Q5 finished at: 2022-4-1 17:39:51:822:958 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:51:926:925 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:39:51:929:393 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:39:51:951:194 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:51:952:125 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..6da04e2c --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:52:204:716 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:52:206:304 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:52:304:769 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:39:52:410:410 + Q4 finished at: 2022-4-1 17:39:52:410:472 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:39:52:510:582 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:39:52:512:812 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:39:52:534:171 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:52:535:69 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write.txt new file mode 100644 index 00000000..a9aa7cb5 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:52:786:722 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:52:788:377 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:52:886:685 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:39:52:987:623 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:39:52:997:172 + Q4 finished at: 2022-4-1 17:39:52:997:163 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:53:93:286 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:39:53:95:175 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:53:96:625 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..36e3b654 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:53:363:712 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:53:365:761 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:53:463:620 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:39:53:564:485 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:53:570:956 + Q4 finished at: 2022-4-1 17:39:53:571:21 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:39:53:577:44 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:39:53:579:341 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:53:580:197 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b00112fb --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:55:97:661 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:39:55:99:275 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:55:197:702 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:39:55:298:737 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:55:305:633 + Q4 finished at: 2022-4-1 17:39:55:305:712 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:39:55:312:522 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:39:55:314:177 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:55:315:819 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..4abfdd13 --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:53:842:95 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:39:53:843:805 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:53:941:978 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:39:53:943:582 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:39:54:148:195 +Q5 finished at: 2022-4-1 17:39:54:148:203 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:39:54:155:277 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:39:54:157:35 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:54:158:492 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..694305aa --- /dev/null +++ b/test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:39:54:424:768 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:39:54:426:385 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:39:54:524:680 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:39:54:526:881 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:39:54:730:776 + Q6 finished at: 2022-4-1 17:39:54:730:752 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:39:54:830:937 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:39:54:832:815 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:39:54:834:745 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..73966363 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:20:925:714 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:20:927:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:21:26:49 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:21:27:855 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:21:29:318 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:21:36:421 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:41:21:126:615 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:21:127:670 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:21:130:115 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:21:131:57 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..4bfbb67c --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:21:398:261 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:21:400:123 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:21:500:613 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:21:502:707 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:21:504:354 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:21:515:760 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:41:21:600:656 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:21:607:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:21:609:468 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:21:611:427 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..47755e54 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:21:887:33 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:21:888:752 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:21:987:283 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:21:989:286 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:21:990:864 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:41:22:87:965 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:22:93:993 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:22:192:411 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:22:195:215 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:22:196:184 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..04a9228e --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:23:445:726 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:23:447:501 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:23:545:756 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:23:547:542 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:23:549:9 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:23:555:483 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:41:23:646:872 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:23:656:882 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:23:659:540 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:23:660:569 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..9c350e70 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:22:466:988 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:41:22:469:190 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:41:22:470:919 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:41:22:567:99 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:41:22:569:639 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:41:22:571:566 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:22:578:441 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:22:676:3 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:41:22:679:98 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:41:22:680:928 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:22:681:879 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..20a776ed --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:22:956:213 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:41:22:958:708 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:23:59:645 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:41:23:62:72 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:41:23:64:565 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:23:70:692 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:41:23:158:79 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:23:163:692 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:41:23:166:333 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:23:167:261 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..976074be --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:23:921:833 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:41:23:923:973 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:24:21:862 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:41:24:24:234 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:24:122:195 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:41:24:124:267 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:41:24:223:185 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:41:24:324:514 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:41:24:423:297 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:24:527:717 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:24:627:593 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:24:729:275 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:41:24:732:379 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:24:733:423 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..e5b3ef53 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:28:568:514 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:28:576:755 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:28:668:537 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:41:28:670:298 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:28:676:209 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:28:768:719 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:41:28:771:138 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:41:28:772:877 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:28:782:26 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:41:28:869:681 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:41:28:870:768 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:41:28:872:873 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:41:28:873:768 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..6499ed26 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:27:781:36 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:27:783:766 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:27:881:659 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:27:884:628 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:27:981:126 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:41:27:983:12 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:27:994:250 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:41:28:81:380 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:41:28:83:467 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:28:89:921 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:41:28:183:362 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:28:184:699 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:41:28:283:283 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:41:28:284:809 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:41:28:287:964 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:41:28:289:10 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..21a264de --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:25:16:96 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:41:25:18:5 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:25:116:203 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:41:25:118:513 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:25:216:182 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:41:25:218:338 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:41:25:317:184 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:41:25:417:141 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:41:25:517:211 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:25:622:959 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:25:723:140 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:25:823:660 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:41:25:826:887 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:25:828:239 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..c3312682 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:26:92:118 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:41:26:95:43 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:26:193:50 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:41:26:195:209 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:26:292:167 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:41:26:294:370 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:41:26:393:206 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:41:26:493:243 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:41:26:593:114 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:26:698:792 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:26:798:168 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:26:900:198 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:41:26:902:865 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:26:903:950 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..66d3b6cb --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:29:141:92 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:41:29:143:46 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:41:29:144:839 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:41:29:240:921 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:41:29:243:103 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:41:29:244:672 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:29:252:368 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:41:29:340:946 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:41:29:343:15 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:41:29:344:961 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:29:345:937 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:41:29:441:822 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:41:29:448:398 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:41:29:450:805 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:41:29:452:247 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..1182f47d --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:27:195:256 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:41:27:197:427 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:27:295:238 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:41:27:297:615 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:27:299:95 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:41:27:300:959 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:41:27:302:499 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:27:309:448 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 17:41:27:395:332 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:41:27:397:765 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:41:27:399:466 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:41:27:401:529 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:41:27:402:977 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:27:411:361 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:41:27:496:715 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:41:27:497:882 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:41:27:500:265 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:41:27:501:214 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..6ae309b1 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:20:438:682 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:41:20:440:302 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:20:538:633 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:41:20:540:369 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:20:547:567 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:41:20:639:702 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:20:646:556 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:20:648:540 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:20:650:74 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..6f93c59e --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:19:967:2 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:19:968:735 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:20:67:605 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:41:20:69:469 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:20:81:370 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:41:20:167:790 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:20:168:828 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:20:170:758 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:20:171:636 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:20:172:470 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f0df128f --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:58:16:0 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:58:17:883 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:58:115:771 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:58:117:479 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:58:119:93 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:40:58:321:891 + Q7 finished at: 2022-4-1 17:40:58:322:330 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:58:421:882 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:40:58:423:843 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:58:424:713 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..e9446a07 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:58:701:38 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:58:702:692 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:58:800:944 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:58:802:615 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:58:804:137 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:58:809:909 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:40:58:901:861 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:58:908:334 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:40:58:910:468 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:58:912:41 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..b1ae7deb --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:59:183:187 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:59:185:163 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:59:283:114 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:59:284:864 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:59:384:209 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:59:391:507 + Q5 finished at: 2022-4-1 17:40:59:391:568 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:59:490:956 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:59:493:555 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:59:494:337 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..21838f02 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:59:762:97 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:59:763:811 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:59:862:133 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:59:863:912 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:40:59:865:325 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:59:963:226 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:0:67:597 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:0:162:527 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:0:164:613 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:0:165:455 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..3397bada --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:1:376:85 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:1:377:788 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:1:476:70 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:1:477:972 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:1:479:634 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:41:1:577:233 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:1:585:115 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:1:679:738 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:1:681:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:1:682:426 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..3ade1796 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:1:985:744 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:1:987:334 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:2:84:463 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:2:86:691 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:2:88:244 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:2:89:124 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:41:2:186:969 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:2:224:224 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:2:226:220 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:2:227:27 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..1b91b6c8 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:0:429:798 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:41:0:431:510 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:0:529:801 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:0:531:568 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:0:532:966 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:0:539:587 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:41:0:631:148 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:0:632:123 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:41:0:633:870 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:0:635:555 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..9347cb70 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:0:890:604 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:41:0:893:7 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:0:990:534 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:41:0:992:78 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:41:0:993:374 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:1:5:325 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:41:1:91:681 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:1:92:627 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:41:1:94:416 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:1:95:220 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..99e3035f --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:56:862:683 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:56:864:322 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:56:962:743 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:56:964:747 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:56:967:978 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:40:57:64:746 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:57:168:408 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:57:268:557 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:57:271:179 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:57:272:122 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..7ac35b5a --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:57:538:874 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:57:540:466 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:57:638:903 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:40:57:640:610 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:40:57:643:37 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:57:648:517 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:40:57:740:68 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:40:57:746:412 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:40:57:748:227 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:40:57:749:70 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..310822cf --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:2:551:705 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:2:553:374 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:2:651:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:2:653:390 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:2:655:356 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:2:751:923 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:2:753:647 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:41:2:756:609 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:41:2:853:108 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:2:860:21 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:2:957:826 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:3:57:649 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:41:3:60:113 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:3:62:172 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..3544d936 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 17:41:3:345:877 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:41:3:348:596 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 17:41:3:445:790 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:41:3:447:481 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:3:545:708 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:41:3:548:528 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:41:3:551:155 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:41:3:645:765 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:41:3:647:417 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:41:3:747:790 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:41:3:851:401 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:3:952:576 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:41:4:46:290 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:4:48:499 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:41:4:51:16 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:41:4:51:877 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..b6615d93 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:4:319:792 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:4:321:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:4:419:809 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:4:421:651 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:41:4:423:832 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:4:519:824 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:4:521:398 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:41:4:523:308 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:41:4:621:427 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:4:628:105 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:4:737:319 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:4:830:397 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:41:4:833:606 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:4:834:754 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..fe4f73cb --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:5:94:615 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:41:5:96:915 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:5:194:839 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:41:5:196:928 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:41:5:199:898 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:5:294:794 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:41:5:296:474 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:41:5:298:445 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:41:5:396:203 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:41:5:402:534 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:5:500:522 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:5:601:227 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:41:5:604:441 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:41:5:605:368 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..49dceac2 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:52:785:213 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:52:786:983 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:52:886:208 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:52:888:238 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:40:52:991:192 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:53:84:746 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:40:53:86:903 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:40:53:87:875 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..6a2ac94f --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:54:29:887 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:54:31:590 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:54:129:669 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:54:131:636 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:40:54:230:804 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:54:330:39 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:54:438:364 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:40:54:440:324 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:54:441:504 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..a7db0e22 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:54:757:542 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:54:759:333 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:54:856:977 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:40:54:858:804 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:54:859:687 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:40:54:959:698 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:54:966:539 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:40:54:968:451 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:54:969:341 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..ad38f1da --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:56:277:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:40:56:279:390 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:56:377:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:40:56:478:823 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:40:56:484:943 + Q4 finished at: 2022-4-1 17:40:56:485:135 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:40:56:582:794 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:56:584:675 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:56:585:526 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..871ca4c7 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:53:353:285 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:40:53:355:143 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:53:453:214 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:53:454:988 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:40:53:559:86 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:40:53:659:391 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:53:753:914 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:40:53:756:99 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:53:757:244 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..9b5ba6d2 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:55:244:756 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:55:246:567 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:55:344:713 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:40:55:346:446 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:55:354:890 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:40:55:446:856 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:55:447:747 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:40:55:449:514 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:55:450:323 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4cbc80e1 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:40:55:725:340 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:40:55:727:931 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:40:55:825:264 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:40:55:826:955 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:40:55:841:475 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:40:55:926:181 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:40:55:927:46 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:40:55:928:726 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:40:55:929:557 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..de9b81d3 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:9:949:309 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:9:951:73 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:10:49:313 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:10:51:149 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:41:10:150:634 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:10:159:657 + Q5 finished at: 2022-4-1 17:41:10:159:769 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:10:165:716 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:10:167:660 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:10:168:621 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..0c1f5bd2 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:10:458:512 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:10:460:402 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:10:558:358 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:10:560:338 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:10:659:705 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:10:769:193 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:11:266:333 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..7f3d2da0 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:11:542:140 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:11:543:753 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:11:642:183 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:11:643:872 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:11:744:707 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:11:848:11 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:12:347:797 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..1e756ddf --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:12:618:252 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:12:619:970 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:12:718:55 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:12:719:869 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:12:819:383 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:12:825:466 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:41:13:522:540 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..480f33ad --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:13:789:844 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:13:791:525 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:13:889:899 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:13:891:934 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:13:893:617 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:14:95:594 +Q6 finished at: 2022-4-1 17:41:14:95:645 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:14:101:311 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:14:103:679 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:14:104:625 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..5d373f07 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:14:374:75 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:14:375:831 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:14:474:49 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:14:475:889 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:14:477:343 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:14:679:984 +Q6 finished at: 2022-4-1 17:41:14:680:26 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:14:790:748 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:14:794:168 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:14:795:118 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..18e31d03 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:15:62:119 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:15:64:125 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:15:162:76 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:15:164:279 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:41:15:262:986 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:15:269:956 + Q5 finished at: 2022-4-1 17:41:15:269:990 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:15:367:669 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:15:370:22 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:15:371:66 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..5cceefeb --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:15:642:786 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:15:644:373 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:15:742:785 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:15:744:698 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:41:15:843:831 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:16:50:57 + Q5 finished at: 2022-4-1 17:41:16:50:88 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:16:57:412 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:16:59:392 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:16:60:741 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..d94ca8d2 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:16:333:724 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:16:335:460 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:16:433:777 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:16:435:573 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:41:16:534:632 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:16:541:75 + Q5 finished at: 2022-4-1 17:41:16:541:122 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:16:547:354 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:41:16:549:678 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:16:550:519 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..0b8c173c --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:16:811:365 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:16:812:861 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:16:911:673 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:16:913:768 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:17:11:424 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:17:13:175 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:41:17:112:920 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:17:217:602 + Q8 finished at: 2022-4-1 17:41:17:217:685 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:17:317:218 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:41:18:15:762 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..199e35a8 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:18:289:639 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:18:291:276 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:18:389:595 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:18:391:330 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:18:491:558 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:18:691:16 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:41:18:791:65 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:18:895:111 + Q8 finished at: 2022-4-1 17:41:18:895:136 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:19:98:171 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:41:19:693:844 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..ac890cf5 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:5:880:900 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:5:882:621 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:5:981:755 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 17:41:6:84:638 +Q5 finished at: 2022-4-1 17:41:6:87:991 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:6:189:788 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:41:6:191:759 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:41:6:211:626 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:6:212:873 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..3146d9a5 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:6:483:266 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:6:485:211 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:6:583:24 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 17:41:6:689:404 +Q5 finished at: 2022-4-1 17:41:6:689:460 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:6:789:544 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:41:6:791:372 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:41:6:810:731 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:6:811:874 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..504b886e --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:7:78:630 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:7:80:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:7:179:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:41:7:280:750 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:41:7:294:793 + Q4 finished at: 2022-4-1 17:41:7:294:846 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:7:385:655 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:41:7:387:658 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:7:388:771 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..e9daf4c9 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:7:667:163 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:7:668:890 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:7:771:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:41:7:868:451 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:7:874:214 + Q4 finished at: 2022-4-1 17:41:7:874:286 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:7:880:177 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:41:7:882:176 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:7:883:946 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..37a71435 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:9:461:428 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:9:462:927 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:9:561:416 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:41:9:662:414 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:9:668:895 + Q4 finished at: 2022-4-1 17:41:9:669:18 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:9:675:304 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:9:677:478 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:9:678:318 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..4b6bc958 --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:8:162:942 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:41:8:164:772 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:8:262:848 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:41:8:265:92 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:8:470:733 +Q5 finished at: 2022-4-1 17:41:8:470:780 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:41:8:478:390 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:8:480:208 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:8:481:890 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..cae557ef --- /dev/null +++ b/test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:8:782:160 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:41:8:784:47 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:8:882:378 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:41:8:884:451 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:9:88:968 +Q5 finished at: 2022-4-1 17:41:9:88:995 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:9:188:692 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:9:190:892 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:9:193:13 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mysql/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/mysql/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/mysql/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mysql/result_summary/read-uncommitted_total-result.txt b/test_result/centralizend_result/mysql/result_summary/read-uncommitted_total-result.txt new file mode 100644 index 00000000..f709ccda --- /dev/null +++ b/test_result/centralizend_result/mysql/result_summary/read-uncommitted_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mysql/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/mysql/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/centralizend_result/mysql/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mysql/result_summary/serializable_total-result.txt b/test_result/centralizend_result/mysql/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/centralizend_result/mysql/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..e0b53796 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:8:25:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:8:27:361 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:8:125:799 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:42:8:127:830 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:8:228:473 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:42:8:234:781 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:42:8:928:633 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..8a78f41c --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:9:207:392 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:9:209:102 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:9:307:383 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:42:9:309:74 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:9:408:592 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:42:9:415:624 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:42:10:108:725 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..0f3ae3bd --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew.txt @@ -0,0 +1,49 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:10:382:465 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:10:384:278 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:10:482:443 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:10:484:206 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:10:583:656 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:42:10:693:391 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:42:11:183:797 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..b452e7fd --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:13:130:199 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:13:132:963 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:13:231:637 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:13:233:633 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:13:333:102 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:42:13:339:928 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:42:14:33:67 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..69a11cd6 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:11:459:600 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:42:11:461:475 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:42:11:462:884 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:42:11:559:586 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:42:11:666:67 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:42:11:666:330 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:42:11:668:262 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:42:11:673:435 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:42:11:675:836 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:42:11:678:593 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:42:11:679:584 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..ed636e29 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: mysql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:11:958:859 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:42:11:961:651 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:12:58:825 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:42:12:61:640 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-1 17:42:12:161:585 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:42:12:168:826 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:42:12:861:827 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..38413186 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat.txt @@ -0,0 +1,89 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:14:332:357 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:42:14:334:774 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:14:432:758 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:42:14:435:199 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:42:14:533:212 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:42:14:535:337 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-1 17:42:14:834:916 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:42:15:45:452 + Q11 finished at: 2022-4-1 17:42:15:45:475 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:42:15:53:360 + Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-1 17:42:15:734:864 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..d0602268 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:22:942:657 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:22:944:626 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:23:42:577 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:42:23:142:686 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:42:23:244:149 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:42:23:245:318 + Q4 finished at: 2022-4-1 17:42:23:245:391 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:42:23:250:920 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:42:23:251:494 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:42:23:253:644 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:42:23:257:953 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:42:23:260:52 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:42:23:261:386 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c6f8f44e --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,171 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:21:575:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:21:577:667 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:21:675:94 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:21:677:800 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:42:21:775:204 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:42:21:875:539 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:42:22:77:874 + Q12-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:42:22:79:154 + Q12 finished at: 2022-4-1 17:42:22:79:135 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:42:22:85:726 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:42:22:86:641 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:42:22:87:800 + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-1 17:42:22:676:982 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..ec79f9e5 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,89 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:16:15:347 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:42:16:17:345 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:16:115:280 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:42:16:117:484 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:42:16:218:851 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:42:16:221:60 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-1 17:42:16:516:568 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:42:16:722:240 +Q7 finished at: 2022-4-1 17:42:16:722:447 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:42:16:730:211 + Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-1 17:42:17:416:605 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..1647aa2d --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,85 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:17:706:872 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:42:17:709:871 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:17:806:813 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:42:17:809:46 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:42:17:906:773 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:42:17:908:812 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q7 finished at: 2022-4-1 17:42:18:208:94 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:42:18:320:428 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-1 17:42:19:8:90 + Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-1 17:42:19:108:264 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..2f8ba04c --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:23:521:178 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:42:23:523:349 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:42:23:525:372 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 17:42:23:620:959 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:42:23:623:186 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:42:23:721:130 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:42:23:723:536 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:42:23:823:75 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:42:23:831:676 + Q6 finished at: 2022-4-1 17:42:23:831:732 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:42:23:838:601 + Q10 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q10 failed at: 2022-4-1 17:42:24:823:261 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..1de048b5 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: mysql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:19:454:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:42:19:456:562 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:19:554:353 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:42:19:556:571 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:42:19:558:179 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:42:19:560:195 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 17:42:19:654:409 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:42:19:656:728 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:42:19:658:206 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:42:19:755:691 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:42:19:763:422 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:42:19:764:136 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:42:19:765:752 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:42:19:779:603 +Q15 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q15 failed at: 2022-4-1 17:42:21:255:752 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mysql/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..b02d6556 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:7:157:422 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:42:7:159:286 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:7:257:397 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:42:7:358:313 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:42:7:364:857 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-1 17:42:7:758:442 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mysql/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..5768b4cf --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:6:671:13 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:42:6:672:696 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:6:771:118 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:42:6:874:573 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:42:6:875:560 + Q4 finished at: 2022-4-1 17:42:6:875:640 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:42:6:883:427 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:42:6:885:819 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:42:6:886:698 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:42:6:887:450 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..b0c0ec57 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:36:72:810 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:36:74:503 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:36:172:707 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:36:174:556 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:36:274:474 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:36:379:701 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:36:877:176 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..0877edc9 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:37:146:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:37:148:379 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:37:246:809 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:37:248:829 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:37:348:230 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:37:354:963 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:41:38:51:230 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..e7d208bc --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:38:325:985 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:38:327:720 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:38:425:965 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:38:427:701 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:38:527:285 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:38:633:313 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:39:130:385 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..757def2b --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:39:414:333 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:39:416:324 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:39:514:365 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:39:516:258 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:39:615:527 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:39:722:139 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:40:215:668 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..2c29de85 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:41:487:735 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:41:489:539 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:41:587:733 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:41:589:730 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:41:41:689:701 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:41:698:391 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 17:41:42:190:183 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..212ddd91 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:42:461:357 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:42:462:979 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:42:561:402 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:41:42:563:299 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:41:42:664:952 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:42:670:849 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 17:41:43:165:75 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..52f11fa5 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:40:512:588 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:41:40:514:356 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:40:614:23 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:41:40:715:175 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:40:716:723 + Q4 finished at: 2022-4-1 17:41:40:716:844 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:41:40:718:366 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:40:725:19 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:41:40:727:5 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:40:727:951 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..a05ab5bc --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: mysql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:41:3:753 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:41:41:6:456 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:41:104:98 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:41:41:209:666 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:41:41:211:717 + Q4 finished at: 2022-4-1 17:41:41:211:906 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:41:41:213:588 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:41:221:79 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:41:41:223:512 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:41:41:224:517 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..ecf4eb06 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:33:817:277 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:33:818:859 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:33:917:313 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:33:919:31 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:34:18:965 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:34:124:938 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:34:622:434 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..635132e6 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:34:899:58 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:34:900:598 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:34:999:88 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:35:0:747 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:35:100:539 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:35:106:173 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:41:35:803:95 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..7f36962e --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:43:437:745 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:43:439:334 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:43:539:23 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:43:540:848 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:43:639:816 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:43:641:587 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:41:43:739:462 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:43:844:617 + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:41:43:845:190 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:43:943:656 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:41:44:642:471 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..602d06f2 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,169 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 17:41:44:906:691 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:41:44:909:579 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 17:41:45:6:307 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:41:45:106:381 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:41:45:109:229 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 17:41:45:206:433 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:41:45:308:780 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:41:45:606:891 + Q9 finished at: 2022-4-1 17:41:45:607:101 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:45:613:644 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:41:45:614:867 +Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q4 failed at: 2022-4-1 17:41:45:707:950 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..3aa905cb --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:45:976:146 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:45:977:698 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:46:76:301 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:46:78:210 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:46:176:118 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:41:46:177:726 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:41:46:288:818 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:46:381:346 + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:41:46:382:20 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:46:484:1 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:41:47:191:175 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..29a3b639 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: mysql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:47:446:656 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:41:47:449:76 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:47:546:738 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:41:47:548:474 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:41:47:651:532 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:41:47:653:280 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:41:47:748:738 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:41:47:852:489 + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:41:47:853:72 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:41:47:952:352 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:41:48:651:150 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..fd8f3ed6 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:29:872:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:29:873:776 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:29:972:28 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:41:30:72:843 +Q5 finished at: 2022-4-1 17:41:30:75:864 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:30:172:234 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:41:30:174:16 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:30:174:777 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..43a392b9 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:31:127:608 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:31:129:511 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:31:227:583 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:41:31:328:824 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:31:533:92 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:41:31:533:351 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:31:535:252 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:41:31:537:322 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:31:538:328 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..27354e80 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:31:804:186 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:31:805:768 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:31:904:470 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:41:32:5:152 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:32:15:748 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:41:32:16:62 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:32:16:849 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:41:32:18:365 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:32:19:651 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6a33e43a --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:33:238:408 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:33:240:186 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:33:339:238 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:41:33:439:491 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:41:33:447:842 + Q4 finished at: 2022-4-1 17:41:33:447:907 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:33:544:384 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:33:546:261 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:33:547:127 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..6aa8d05e --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:30:443:285 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:30:444:838 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:30:543:488 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:41:30:644:514 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:30:843:672 + Q4 finished at: 2022-4-1 17:41:30:843:866 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:30:850:540 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:30:852:243 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:30:853:40 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..9d0a6998 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:32:303:405 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:41:32:305:37 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:32:403:362 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:41:32:504:497 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:32:505:462 + Q4 finished at: 2022-4-1 17:41:32:505:653 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:32:511:208 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:41:32:512:761 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:32:513:906 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..957ed888 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mysql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:32:766:140 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:41:32:768:731 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:32:866:170 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:41:32:967:290 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:32:968:231 + Q4 finished at: 2022-4-1 17:41:32:968:372 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:32:974:70 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:41:32:975:700 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:32:976:469 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..93e53b1e --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:53:396:109 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:53:397:807 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:53:496:223 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:53:498:268 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:53:597:375 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:53:603:154 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:41:54:300:308 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..bbe69855 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:54:600:944 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:54:602:630 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:54:700:902 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:54:702:621 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:54:802:193 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:54:907:609 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:55:405:992 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..ed0ac8a1 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:55:689:611 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:55:691:452 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:55:790:648 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:55:792:517 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:55:890:429 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:55:996:768 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:56:494:17 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..2a53175b --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mysql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:56:782:597 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:56:784:231 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:56:882:796 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:56:884:531 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:56:983:892 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:56:992:279 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:41:57:688:947 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..bdf4f323 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:57:959:160 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:57:961:152 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:58:58:984 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:58:60:682 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:58:160:692 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:41:58:265:685 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:58:760:762 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..53c58b8f --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:59:42:696 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:41:59:44:470 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:59:142:624 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:41:59:144:352 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:41:59:243:787 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:59:349:516 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:41:59:843:891 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..3ed715ab --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:0:118:686 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:42:0:120:266 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:0:218:693 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:0:220:463 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:0:320:313 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:42:0:425:623 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:42:0:923:308 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..b9c23446 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:1:227:79 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:42:1:228:691 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:1:327:69 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:1:329:0 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:1:428:354 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:42:1:535:671 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:42:2:31:629 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..4e43d8bb --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mysql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:2:342:425 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:42:2:344:361 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:2:442:324 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:42:2:444:15 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:42:2:543:641 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:42:2:552:629 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:42:3:247:566 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..133e0382 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:3:522:950 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:42:3:524:706 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:3:623:3 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:42:3:624:826 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 17:42:3:722:887 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:42:3:724:756 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:42:3:824:193 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:42:3:929:742 + Q11 finished at: 2022-4-1 17:42:3:929:757 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:42:4:29:976 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:42:4:726:732 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..1ae36ebb --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mysql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:42:4:993:22 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:42:4:994:695 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:42:5:93:263 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:42:5:95:109 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 17:42:5:193:119 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:42:5:395:230 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:42:5:494:845 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:42:5:598:592 + Q8 finished at: 2022-4-1 17:42:5:598:739 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:42:5:798:557 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:42:6:398:341 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..341b81f9 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:48:926:496 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:48:928:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:49:26:363 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 17:41:49:127:102 +Q5 finished at: 2022-4-1 17:41:49:128:927 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:49:232:48 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:41:49:234:634 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:41:49:254:491 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:49:255:455 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..c5a0e332 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:49:497:454 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:49:499:150 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:49:597:360 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:41:49:705:710 + Q4 finished at: 2022-4-1 17:41:49:705:807 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:41:49:804:207 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:41:49:806:919 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:41:49:830:104 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:49:831:101 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..6e19dd28 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:50:80:303 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:50:81:937 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:50:183:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:41:50:281:182 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:41:50:288:20 + Q4 finished at: 2022-4-1 17:41:50:288:126 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:41:50:386:61 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:41:50:388:843 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:50:389:793 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..f5160036 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mysql #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:50:653:111 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:50:654:699 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:50:755:533 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:41:50:853:857 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:50:867:144 + Q4 finished at: 2022-4-1 17:41:50:867:233 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:50:873:679 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:41:50:875:483 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:50:876:362 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..cf6fbba5 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mysql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:52:901:776 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:41:52:903:375 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:53:1:693 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:41:53:102:801 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:53:110:237 + Q4 finished at: 2022-4-1 17:41:53:110:326 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:41:53:118:411 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:41:53:121:82 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:41:53:121:912 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..83d92063 --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:51:157:127 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:41:51:158:796 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:51:257:113 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-1 17:41:51:358:278 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:41:51:365:242 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-1 17:41:51:758:360 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..554cc05a --- /dev/null +++ b/test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: mysql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 17:41:52:28:69 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:41:52:29:698 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 17:41:52:128:280 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-1 17:41:52:232:792 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:41:52:434:555 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 + Q4 failed at: 2022-4-1 17:41:52:632:899 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.20]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..466352bd --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:16:877:955 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:16:881:228 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:16:977:730 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:16:16:980:402 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:16:16:981:886 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:16:16:984:308 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:16:17:78:408 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:16:17:79:574 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:16:17:82:233 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:17:83:229 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..c9b9786a --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:17:363:16 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:17:367:125 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:17:462:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:16:17:465:625 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:16:17:467:75 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:16:17:469:424 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:16:17:563:403 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:16:17:565:781 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:16:17:568:384 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:17:569:439 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..bab3760e --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:17:850:444 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:17:859:657 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:17:950:853 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:16:17:952:718 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:16:17:955:268 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:16:18:50:876 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:16:18:56:246 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:16:18:151:978 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:16:18:154:935 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:16:18:156:47 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..66161f58 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:19:410:243 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:19:413:403 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:19:510:477 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:16:19:512:376 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:16:19:515:114 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:16:19:517:686 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:16:19:610:924 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:16:19:613:846 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:16:19:616:681 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:19:617:759 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..0d0cec09 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:18:437:454 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 15:16:18:441:293 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 15:16:18:442:875 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 15:16:18:537:458 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 15:16:18:539:424 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 15:16:18:543:56 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:16:18:545:584 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:16:18:638:622 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 15:16:18:640:696 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 15:16:18:642:574 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:16:18:643:723 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..8f02f9ec --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:18:926:176 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 15:16:18:930:103 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:19:26:529 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 15:16:19:28:859 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 15:16:19:33:692 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:16:19:36:39 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 15:16:19:127:529 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:16:19:129:980 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 15:16:19:132:851 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:19:133:960 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..f87131a5 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:19:902:618 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 15:16:19:906:560 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:20:5:236 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:16:20:7:633 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:16:20:102:615 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 15:16:20:104:780 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 15:16:20:204:97 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:16:20:303:556 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 15:16:20:403:85 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:16:20:504:450 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:16:20:603:541 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:16:20:704:914 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:16:20:714:924 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:16:20:716:669 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f5204c69 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:24:540:368 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:24:543:934 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:24:640:555 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:16:24:643:424 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:16:24:645:825 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:16:24:740:472 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:16:24:742:572 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:16:24:744:157 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:16:24:746:965 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 15:16:24:841:457 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:16:24:842:804 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 15:16:24:845:781 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:16:24:846:886 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c6c642e6 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:23:750:703 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:23:755:386 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:23:850:839 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:16:23:853:886 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:16:23:950:820 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 15:16:23:953:958 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:16:23:956:805 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:16:24:51:172 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:16:24:53:494 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:24:56:597 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 15:16:24:152:670 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:16:24:154:106 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 15:16:24:252:321 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 15:16:24:253:670 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:16:24:257:689 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:16:24:258:813 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..e23c0113 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:20:999:260 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 15:16:21:4:460 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:21:98:944 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:16:21:101:77 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:16:21:200:117 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 15:16:21:202:237 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 15:16:21:303:78 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:16:21:399:468 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 15:16:21:499:790 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:16:21:600:649 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:16:21:700:812 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:16:21:801:271 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:16:21:804:317 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:16:21:805:703 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..a550f9a9 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:22:72:437 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 15:16:22:76:754 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:22:172:605 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 15:16:22:174:579 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:16:22:272:431 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 15:16:22:274:280 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 15:16:22:374:174 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 15:16:22:473:320 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 15:16:22:576:370 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:16:22:673:913 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:16:22:774:229 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:16:22:873:903 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:16:22:877:53 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:16:22:878:196 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..5b221c71 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:25:136:321 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:16:25:141:28 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 15:16:25:143:414 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 15:16:25:236:742 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 15:16:25:238:820 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 15:16:25:241:585 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:16:25:244:75 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:16:25:336:939 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 15:16:25:339:82 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:16:25:341:262 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:16:25:342:591 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 15:16:25:437:629 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 15:16:25:440:404 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 15:16:25:443:644 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 15:16:25:444:849 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..a62972a9 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:23:160:514 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 15:16:23:164:230 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:23:264:23 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 15:16:23:266:438 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:16:23:269:85 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 15:16:23:271:76 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 15:16:23:272:606 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:16:23:275:125 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-1 15:16:23:364:138 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 15:16:23:366:444 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 15:16:23:368:161 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 15:16:23:370:971 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 15:16:23:372:576 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:16:23:374:946 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 15:16:23:465:231 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 15:16:23:466:533 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 15:16:23:470:46 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 15:16:23:471:305 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..1eaa2a20 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:16:389:325 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:16:16:393:52 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:16:489:313 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:16:16:496:668 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:16:16:501:566 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 15:16:16:589:831 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:16:16:592:395 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:16:16:594:998 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:16:16:596:84 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..66bb7d5d --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:15:906:634 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:16:15:910:453 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:16:10:2 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:16:16:12:751 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:16:16:15:92 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 15:16:16:107:217 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:16:16:108:338 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:16:16:111:166 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:16:16:113:936 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:16:16:115:101 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..70287c21 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:4:531:220 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:4:534:483 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:4:631:204 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:4:632:855 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:4:635:472 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:4:832:722 +Q6 finished at: 2022-4-1 15:15:4:832:993 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:4:933:134 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 15:15:4:935:872 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:4:936:869 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..a949f69a --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:5:210:300 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:5:213:648 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:5:310:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:5:311:933 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:5:314:315 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:5:316:639 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 15:15:5:410:824 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:5:412:788 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 15:15:5:415:640 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:5:416:555 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..dfb84dff --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:5:691:854 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:5:695:252 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:5:791:828 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:5:793:734 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:15:5:893:460 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:5:895:899 + Q5 finished at: 2022-4-1 15:15:5:896:145 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:15:5:992:953 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:5:996:59 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:5:997:57 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..124838a6 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:6:284:819 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:15:6:293:672 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:6:385:65 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:6:387:818 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:15:6:389:377 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:15:6:485:37 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:6:585:834 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:6:684:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:6:687:466 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:6:688:415 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..52648a49 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:7:925:691 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:7:929:58 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:8:25:712 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:15:8:28:686 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:8:30:403 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:15:8:126:110 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:8:128:703 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:15:8:225:753 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:8:228:989 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:8:230:130 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..8dcc954b --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:8:510:63 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:8:513:91 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:8:610:231 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:15:8:612:728 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:8:614:263 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:8:615:448 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:15:8:710:801 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:8:713:227 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:8:716:114 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:8:717:266 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..58f4af6b --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:6:964:604 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:15:6:967:862 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:7:64:620 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:7:67:771 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:15:7:69:239 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:7:71:581 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:15:7:165:157 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:7:166:159 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 15:15:7:168:761 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:7:169:698 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..14aadf51 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:7:438:736 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:15:7:442:653 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:7:538:909 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 15:15:7:541:324 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 15:15:7:544:22 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:7:546:473 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:15:7:639:420 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:7:640:476 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 15:15:7:643:268 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:7:644:311 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..b605b1df --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:3:350:928 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:3:354:556 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:3:450:855 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:3:452:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:3:455:79 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:15:3:569:145 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:3:652:308 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:3:753:536 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:3:756:775 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:3:757:851 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..7f08afe9 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:4:48:211 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:4:51:962 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:4:152:215 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:4:154:606 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:4:157:421 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:4:159:909 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:15:4:248:824 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:4:251:201 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:4:254:150 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:4:255:263 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..47004537 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:8:996:37 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:8:999:643 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:9:96:42 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:9:97:749 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:15:9:100:843 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:15:9:196:320 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:15:9:198:281 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 15:15:9:200:382 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 15:15:9:296:950 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:15:9:299:380 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:15:9:397:12 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:15:9:497:342 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:15:9:500:469 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:15:9:501:621 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..cb147631 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-1 15:15:9:779:245 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 15:15:9:783:388 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-1 15:15:9:884:228 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 15:15:9:887:425 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:15:9:979:553 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 15:15:9:982:335 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:15:9:984:924 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:15:10:79:662 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:15:10:81:420 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:15:10:181:147 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:15:10:280:589 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:15:10:380:785 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:15:10:479:392 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:15:10:480:877 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:15:10:484:470 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:15:10:485:520 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..6f029d19 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:10:764:311 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:10:767:334 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:10:864:450 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:10:866:21 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:15:10:869:66 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:15:10:964:357 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:15:10:965:951 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 15:15:10:967:965 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:15:11:65:479 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:15:11:67:914 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:15:11:165:843 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:15:11:265:526 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:15:11:268:431 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:15:11:269:394 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..d2c76e04 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:11:530:585 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 15:15:11:537:945 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:11:630:782 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 15:15:11:632:403 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:15:11:636:135 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:15:11:730:819 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 15:15:11:732:501 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 15:15:11:734:573 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:15:11:831:730 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:15:11:834:695 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:15:11:933:236 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:15:12:37:421 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:15:12:41:127 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:15:12:42:483 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..69b34e1f --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:14:59:231:253 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:14:59:235:167 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:14:59:332:62 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:14:59:334:967 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:14:59:431:225 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:14:59:532:534 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:14:59:535:731 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:14:59:536:966 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0568b32f --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:0:487:646 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:0:490:965 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:0:586:762 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:15:0:589:399 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 15:15:0:688:514 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:0:787:482 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:0:888:386 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:15:0:891:333 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:0:892:693 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..ffb0af73 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:1:189:309 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:1:193:151 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:1:288:832 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:15:1:292:41 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:15:1:293:945 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 15:15:1:389:439 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:1:392:177 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:15:1:394:623 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:1:395:662 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..f36e654b --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:2:748:904 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:2:752:60 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:2:848:922 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:15:2:950:453 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:15:2:957:540 + Q4 finished at: 2022-4-1 15:15:2:957:647 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:3:52:182 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:15:3:54:934 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:3:55:889 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7dcded64 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:14:59:807:644 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:14:59:810:952 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:14:59:907:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:14:59:910:227 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:15:0:7:950 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:0:108:614 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:0:207:363 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:15:0:210:196 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:0:211:162 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..b99a8c0f --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:1:736:986 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:15:1:741:83 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:1:836:979 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:15:1:840:525 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:15:1:843:196 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:15:1:940:248 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:1:941:395 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 15:15:1:944:488 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:1:945:727 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..7149360b --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:2:238:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:15:2:246:78 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:2:339:354 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 15:15:2:342:343 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:15:2:345:693 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:15:2:439:257 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:2:440:404 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 15:15:2:443:357 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:2:444:359 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..9a50c594 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:16:296:747 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:16:299:981 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:16:396:827 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:16:398:554 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:15:16:498:299 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:16:503:911 + Q5 finished at: 2022-4-1 15:15:16:504:104 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:16:507:677 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:16:510:423 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:16:511:496 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..513e0dcc --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:16:798:312 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:16:801:510 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:16:898:190 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:16:899:736 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:15:27:312:492 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:15:27:504:399 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..62f3ed53 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:27:784:722 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:27:788:562 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:27:886:241 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:27:887:858 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:15:38:295:615 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:15:38:487:748 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..e5bc6cdb --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:38:783:425 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:38:786:615 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:38:884:766 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:38:886:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:15:49:294:780 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 15:15:49:587:63 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..e373892f --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:49:867:820 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:15:49:870:990 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:49:968:951 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:49:971:551 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:15:49:973:136 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:15:50:169:268 +Q6 finished at: 2022-4-1 15:15:50:169:410 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:50:174:956 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:50:177:681 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:50:178:700 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..3806fea9 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:50:458:169 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:15:50:461:493 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:50:560:208 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:50:563:487 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:15:50:565:335 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:50:764:500 +Q6 finished at: 2022-4-1 15:15:50:764:656 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:50:859:396 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:50:862:341 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:50:863:389 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c03d64a9 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:51:145:884 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:51:149:508 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:51:248:177 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:15:51:250:750 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:15:51:346:273 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:51:348:714 + Q5 finished at: 2022-4-1 15:15:51:348:831 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:15:51:447:528 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:51:450:458 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:51:451:680 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..f41e10d5 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:51:727:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:51:732:683 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:51:827:233 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:15:51:829:762 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:15:51:927:806 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:52:129:321 + Q5 finished at: 2022-4-1 15:15:52:129:623 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:52:132:186 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:52:134:832 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:52:135:896 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..600f25f6 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:52:419:98 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:52:422:438 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:52:519:121 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:15:52:521:659 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:15:52:619:580 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:15:52:621:801 + Q5 finished at: 2022-4-1 15:15:52:621:917 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:52:624:425 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:15:52:627:140 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:15:52:628:121 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ecc4fc10 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:52:920:782 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:52:925:552 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:53:20:674 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:15:53:22:316 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:15:53:120:811 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 15:15:53:122:469 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:16:3:427:749 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-1 15:16:3:835:193 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 15:16:4:27:335 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..1cea06e6 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:16:4:328:808 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:16:4:331:946 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:16:4:430:364 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:16:4:431:942 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:16:4:534:307 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 15:16:4:729:762 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-1 15:16:15:135:691 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-1 15:16:15:441:519 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 15:16:15:633:767 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..ffd3600e --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:12:317:691 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:12:321:327 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:12:417:628 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:15:12:517:772 + Q4 finished at: 2022-4-1 15:15:12:517:966 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:12:619:280 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:15:12:621:930 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 15:15:12:636:250 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:12:637:277 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..d9a8ca84 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:12:899:98 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:12:902:405 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:12:999:197 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 15:15:13:100:329 + Q4 finished at: 2022-4-1 15:15:13:100:602 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:13:201:128 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:15:13:203:835 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 15:15:13:218:356 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:13:219:403 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..d2c21617 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:13:481:979 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:13:485:690 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:13:581:530 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 15:15:13:683:526 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:15:13:685:839 + Q4 finished at: 2022-4-1 15:15:13:686:123 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:13:782:858 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 15:15:13:785:772 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:13:787:3 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..73f15223 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:14:57:930 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:14:61:281 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:14:158:178 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 15:15:14:258:705 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:14:261:109 + Q4 finished at: 2022-4-1 15:15:14:261:244 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:15:14:263:778 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 15:15:14:266:855 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:14:268:35 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..ec1da529 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:15:801:622 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:15:15:805:82 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:15:901:746 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 15:15:16:3:439 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:16:5:667 + Q4 finished at: 2022-4-1 15:15:16:6:121 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:15:16:8:470 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:15:16:11:197 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:16:12:282 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..d8f4d74b --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:14:539:601 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:15:14:542:917 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:14:639:762 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:15:14:642:855 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:15:14:841:519 +Q5 finished at: 2022-4-1 15:15:14:841:693 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:15:14:843:904 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:15:14:846:471 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:14:848:93 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..239175af --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:15:15:126:82 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:15:15:129:519 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:15:15:225:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:15:15:228:667 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:15:15:427:290 +Q5 finished at: 2022-4-1 15:15:15:427:778 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:15:15:527:287 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:15:15:529:946 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:15:15:531:26 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_mysql/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/ob_mysql/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/centralizend_result/ob_mysql/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..8d4c8790 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:15:59:924:302 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:15:59:927:659 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:0:24:224 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:16:0:27:226 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:16:0:28:867 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:16:0:31:195 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:16:0:124:980 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:16:0:126:106 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:16:0:129:235 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:16:0:130:304 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..70f00c4f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:0:467:631 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:16:0:470:856 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:0:567:660 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:16:0:570:497 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:16:0:572:285 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:16:0:574:508 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:16:0:668:435 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:16:0:670:889 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:16:0:674:195 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:16:0:675:474 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..82e6b692 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:0:960:297 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:16:0:963:685 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:1:61:110 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:16:1:62:930 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:16:1:65:952 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:16:1:163:182 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:16:1:165:706 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:16:1:266:205 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:16:1:271:503 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:16:1:272:977 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..704cc89c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:2:629:703 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:16:2:633:285 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:2:729:823 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:16:2:731:923 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:16:2:735:506 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:16:2:738:158 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:16:2:830:126 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:16:2:832:471 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:16:2:835:405 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:16:2:836:494 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..d3ff0d52 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:1:605:391 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 16:16:1:609:566 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 16:16:1:611:253 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 16:16:1:705:957 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 16:16:1:710:223 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 16:16:1:712:122 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:16:1:714:801 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:16:1:807:420 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 16:16:1:809:552 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 16:16:1:811:481 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:16:1:812:454 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..5da274e2 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:2:124:989 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 16:16:2:130:405 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:2:224:553 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 16:16:2:226:720 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 16:16:2:231:667 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:16:2:234:176 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 16:16:2:329:826 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:16:2:332:991 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 16:16:2:336:176 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:16:2:337:183 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..82f24f5c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:3:120:98 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:16:3:124:157 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:3:220:50 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:16:3:222:156 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:16:3:320:287 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:16:3:323:431 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:16:3:426:17 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:16:3:525:133 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:16:3:620:713 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:16:3:721:496 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:16:3:824:575 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:16:3:921:692 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:16:3:925:501 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:16:3:926:819 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..014205f2 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:7:762:442 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:16:7:765:908 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:7:862:417 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:16:7:865:238 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:16:7:867:438 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 16:16:7:964:232 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:16:7:966:214 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:16:7:967:758 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:16:7:969:976 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 16:16:8:63:422 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 16:16:8:64:550 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 16:16:8:67:614 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 16:16:8:68:581 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..d71f8e45 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:6:974:569 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:16:6:978:667 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:7:74:701 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:16:7:77:285 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:16:7:174:712 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 16:16:7:177:938 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:16:7:180:318 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 16:16:7:274:573 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:16:7:276:265 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:16:7:282:756 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 16:16:7:376:21 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:16:7:377:106 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 16:16:7:476:356 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 16:16:7:477:507 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:16:7:481:311 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 16:16:7:482:255 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..aef34d1c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:4:214:263 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 16:16:4:218:597 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:4:314:256 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:16:4:316:185 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:16:4:420:26 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:16:4:421:994 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:16:4:516:243 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:16:4:616:544 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:16:4:715:48 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:16:4:815:656 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:16:4:915:696 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:16:5:15:521 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 16:16:5:18:846 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:16:5:19:921 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..b49b993a --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:5:297:978 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:16:5:302:510 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:5:400:124 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 16:16:5:402:267 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:16:5:497:896 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 16:16:5:499:924 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 16:16:5:600:11 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 16:16:5:698:955 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 16:16:5:798:489 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:16:5:899:633 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:16:5:999:272 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:16:6:99:750 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:16:6:103:264 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:16:6:104:398 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..84f05a8c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:8:345:182 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:16:8:349:338 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 16:16:8:351:913 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 16:16:8:445:165 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 16:16:8:447:232 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 16:16:8:454:924 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:16:8:457:559 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 16:16:8:545:166 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 16:16:8:547:237 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:16:8:549:184 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:16:8:550:265 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 16:16:8:645:695 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 16:16:8:648:261 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 16:16:8:651:909 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 16:16:8:653:125 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..95c85168 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:16:6:391:394 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 16:16:6:395:77 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:16:6:492:246 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 16:16:6:494:309 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:16:6:497:583 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:16:6:499:637 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 16:16:6:501:331 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:16:6:503:529 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-1 16:16:6:595:725 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 16:16:6:598:189 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 16:16:6:600:17 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 16:16:6:602:260 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 16:16:6:604:153 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:16:6:610:190 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 16:16:6:692:385 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 16:16:6:693:547 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 16:16:6:696:963 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 16:16:6:698:10 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c6b92996 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:15:59:430:573 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:15:59:434:222 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:15:59:530:633 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:15:59:533:707 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:15:59:535:701 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 16:15:59:632:746 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:15:59:635:440 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:15:59:638:125 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:15:59:639:206 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..c759f273 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:15:58:945:344 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:15:58:949:75 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:15:59:45:305 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:15:59:48:352 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:15:59:50:982 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:15:59:145:571 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:15:59:146:567 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:15:59:149:372 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:15:59:150:356 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:15:59:151:560 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..dc535a31 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:14:784:117 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:14:788:429 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:14:884:190 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:14:886:5 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:14:888:982 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:15:88:993 +Q6 finished at: 2022-4-1 15:32:15:90:499 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:15:189:281 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 15:32:15:192:218 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:15:193:97 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..9d292aed --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:15:464:71 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:15:472:109 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:15:564:20 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:15:565:589 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:15:568:192 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:15:570:401 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 15:32:15:664:758 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:15:667:18 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 15:32:15:669:795 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:15:670:918 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..bd01321b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:16:2:628 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:16:8:288 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:16:102:607 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:16:104:389 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:32:16:203:944 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:16:206:359 + Q5 finished at: 2022-4-1 15:32:16:206:646 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:32:16:304:526 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:16:307:323 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:16:308:324 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..147071b9 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:16:589:807 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:32:16:593:513 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:16:690:58 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:16:694:82 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:32:16:695:842 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:32:16:790:920 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:16:891:28 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:16:991:148 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:16:993:898 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:16:994:865 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a407ef2e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:18:285:785 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:18:292:265 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:18:388:225 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:32:18:391:286 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:18:393:59 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:32:18:497:68 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:18:500:96 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:32:18:584:581 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:18:587:680 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:18:588:765 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..899c9c14 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:18:872:964 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:18:877:36 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:18:973:872 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:32:18:977:62 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:18:979:71 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:18:980:323 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:32:19:73:247 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:19:75:981 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:19:79:132 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:19:80:438 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..94133857 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:17:275:488 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:32:17:278:617 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:17:377:795 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:17:381:596 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:32:17:383:418 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:17:385:706 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:32:17:477:139 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:17:478:762 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 15:32:17:493:594 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:17:494:882 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..8708d1c7 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:17:774:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:32:17:778:790 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:17:875:235 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 15:32:17:877:803 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 15:32:17:879:316 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:17:881:683 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:32:17:987:828 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:17:989:146 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 15:32:17:993:121 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:17:994:517 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..492579f5 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:13:551:873 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:13:555:535 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:13:651:832 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:13:653:546 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:13:656:365 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:32:13:752:488 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:13:858:843 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:13:953:209 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:13:956:244 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:13:957:342 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..50928516 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:14:294:845 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:14:298:566 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:14:394:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:14:396:534 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:14:399:292 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:14:401:483 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:32:14:495:396 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:14:497:737 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:14:500:449 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:14:501:370 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..c815e0f1 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:19:386:856 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:19:390:939 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:19:490:94 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:19:491:891 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:32:19:504:619 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:32:19:588:78 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:32:19:589:695 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 15:32:19:591:743 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 15:32:19:689:174 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:32:19:691:806 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:32:19:787:964 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:32:19:887:727 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:32:19:890:994 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:32:19:892:140 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..a4208a59 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-1 15:32:20:192:564 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 15:32:20:197:542 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-1 15:32:20:296:153 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 15:32:20:299:915 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:32:20:392:564 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 15:32:20:395:423 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:32:20:398:404 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:32:20:496:147 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:32:20:498:309 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:32:20:598:442 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:32:20:693:916 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:32:20:793:996 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:32:20:892:703 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:32:20:893:937 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:32:20:897:531 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:32:20:898:598 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..5206a745 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:21:179:140 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:21:183:339 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:21:278:730 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:21:280:731 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:32:21:284:79 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:32:21:378:605 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:32:21:380:174 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 15:32:21:382:269 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:32:21:480:666 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:32:21:482:928 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:32:21:581:195 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:32:21:681:768 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:32:21:685:240 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:32:21:686:588 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..90eeeb4c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:21:958:490 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 15:32:21:962:611 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:22:58:469 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 15:32:22:60:492 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:32:22:64:531 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:32:22:158:557 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 15:32:22:160:424 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 15:32:22:162:611 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:32:22:259:713 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:32:22:262:221 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:32:22:359:683 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:32:22:459:564 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:32:22:468:798 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:32:22:469:926 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..38092682 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:9:439:403 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:9:442:737 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:9:539:339 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:32:9:542:60 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:32:9:639:359 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:9:739:396 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:32:9:742:40 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:32:9:743:63 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0ea168d0 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:10:745:860 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:10:749:313 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:10:845:895 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:32:10:848:369 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 15:32:10:946:421 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:11:45:894 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:11:148:484 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:32:11:151:104 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:11:151:990 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..9534ed8f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:11:491:979 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:11:495:464 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:11:592:52 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:32:11:594:628 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:32:11:595:656 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 15:32:11:692:508 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:11:699:40 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:32:11:701:653 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:11:702:641 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..c32d25f3 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:12:963:731 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:12:967:708 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:13:63:684 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:32:13:165:569 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:32:13:167:962 + Q4 finished at: 2022-4-1 15:32:13:168:189 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:13:268:888 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:32:13:271:733 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:13:272:815 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..1ef423e2 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:10:66:659 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:32:10:69:939 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:10:166:589 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:32:10:169:795 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:32:10:268:723 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:10:368:251 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:10:466:613 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:32:10:469:550 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:10:470:659 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..3d5a9906 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:11:982:859 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:32:11:986:314 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:12:81:543 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:32:12:86:556 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:32:12:88:897 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:32:12:182:200 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:12:183:465 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 15:32:12:186:123 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:12:187:115 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..5ffa138e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:12:453:858 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:32:12:457:693 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:12:553:831 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 15:32:12:556:527 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:32:12:558:846 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:32:12:654:464 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:12:655:450 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 15:32:12:657:928 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:12:658:893 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..8dffd822 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:26:725:967 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:26:729:950 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:26:826:321 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:26:828:426 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:32:26:927:777 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:26:930:825 + Q5 finished at: 2022-4-1 15:32:26:931:117 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:26:941:60 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:26:944:233 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:26:945:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..c71decf4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:27:226:78 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:27:229:624 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:27:326:257 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:27:328:121 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:32:48:16:637 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-1 15:32:48:664:408 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..76011893 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:10:19:627:135 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:10:19:631:31 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:10:19:726:905 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:10:19:728:467 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-11 19:10:40:315:538 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-11 19:10:40:750:479 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..30bbe2cc --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:9:33:378:326 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:9:33:382:743 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:9:33:477:869 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:9:33:479:660 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-11 19:9:54:73:826 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-4-11 19:9:54:679:325 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..163c26ea --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:50:228:908 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:32:50:232:622 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:50:328:17 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:50:331:399 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:32:50:333:71 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:32:50:529:910 +Q6 finished at: 2022-4-1 15:32:50:529:944 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:50:532:343 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:50:535:236 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:50:536:783 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..cd8504e8 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:50:818:524 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:32:50:822:620 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:50:918:94 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:50:934:318 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:32:50:938:979 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:51:121:861 +Q6 finished at: 2022-4-1 15:32:51:122:627 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:51:219:439 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:51:222:913 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:51:224:149 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..f0a5a7cd --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:51:514:530 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:51:518:857 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:51:615:349 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:32:51:618:189 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:32:51:716:619 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:51:718:957 + Q5 finished at: 2022-4-1 15:32:51:719:411 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:32:51:817:642 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:51:820:855 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:51:822:96 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..a17c57e4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:52:114:418 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:52:117:838 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:52:214:354 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:32:52:216:906 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:32:52:316:817 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:52:517:203 + Q5 finished at: 2022-4-1 15:32:52:517:573 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:52:519:777 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:52:522:511 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:52:523:605 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..daaf700f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:52:816:39 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:52:820:455 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:52:916:77 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:32:52:918:652 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:32:53:17:64 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:32:53:19:659 + Q5 finished at: 2022-4-1 15:32:53:19:824 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:53:21:979 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:32:53:31:208 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:32:53:32:305 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..266b410f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:53:325:567 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:53:329:406 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:53:425:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:32:53:427:404 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:32:53:527:853 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 15:32:53:529:882 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:33:14:172:722 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-1 15:33:14:712:924 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-4-1 15:33:15:168:895 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..894be381 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,39 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:11:33:492:409 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:11:33:496:33 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:11:33:592:480 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:11:33:594:140 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-11 19:11:33:692:579 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-11 19:11:33:893:26 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-11 19:11:54:737:886 + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-4-11 19:11:54:754:707 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-4-11 19:11:55:279:448 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..094367dd --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:22:742:266 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:22:745:758 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:22:842:206 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:32:22:942:371 + Q4 finished at: 2022-4-1 15:32:22:942:640 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:23:43:758 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:32:23:46:703 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 15:32:23:59:344 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:23:60:483 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..5ab2d736 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:23:324:522 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:23:328:592 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:23:424:352 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 15:32:23:525:878 + Q4 finished at: 2022-4-1 15:32:23:525:899 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:23:625:569 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:32:23:628:394 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 15:32:23:642:315 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:23:643:365 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..643cda0e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:23:906:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:23:910:344 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:24:6:546 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 15:32:24:107:27 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:32:24:109:458 + Q4 finished at: 2022-4-1 15:32:24:109:617 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:24:207:390 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 15:32:24:210:135 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:24:211:223 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..db8050ab --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:24:484:103 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:24:487:977 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:24:583:852 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 15:32:24:684:432 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:24:686:579 + Q4 finished at: 2022-4-1 15:32:24:686:746 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:32:24:688:621 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 15:32:24:691:162 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:24:692:182 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..3089e5af --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:26:231:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:32:26:235:464 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:26:331:615 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 15:32:26:433:486 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:26:436:10 + Q4 finished at: 2022-4-1 15:32:26:436:249 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:32:26:438:345 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:32:26:440:906 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:26:441:988 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..11fe8d50 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:24:965:534 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:32:24:969:461 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:25:65:337 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:32:25:68:560 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:32:25:270:444 +Q5 finished at: 2022-4-1 15:32:25:270:686 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:32:25:273:157 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:32:25:275:781 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:25:276:758 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..ac28061d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:32:25:554:295 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:32:25:563:3 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:32:25:654:332 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:32:25:657:704 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:32:25:855:664 +Q5 finished at: 2022-4-1 15:32:25:855:898 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:32:25:955:454 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:32:25:958:14 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:32:25:959:57 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..7fe007d0 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:14:282:251 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:14:285:620 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:14:382:139 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:14:14:385:181 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:14:14:386:879 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:14:14:389:16 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:14:14:484:564 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:14:14:485:584 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:14:14:488:450 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:14:14:489:377 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..eabad7bb --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:14:765:356 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:14:768:691 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:14:865:238 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:14:14:868:81 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:14:14:869:590 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:14:14:871:641 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 16:14:15:666:358 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..1021e3b0 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:15:948:95 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:15:951:418 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:16:48:48 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:14:16:49:756 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:14:16:52:721 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:14:16:148:626 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:14:16:150:730 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:14:16:250:320 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:14:16:253:243 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:14:16:254:265 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..9f2679bc --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:17:566:415 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:17:569:657 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:17:666:419 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:14:17:668:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:14:17:671:591 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:14:17:673:986 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:14:17:766:942 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:14:17:769:374 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:14:17:772:206 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:14:17:773:225 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..fcf9204a --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:16:582:730 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 16:14:16:586:851 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 16:14:16:588:519 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 16:14:16:683:60 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 16:14:16:685:227 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 16:14:16:687:346 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:14:16:693:119 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:14:16:784:1 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 16:14:16:786:210 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 16:14:16:788:92 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:14:16:789:45 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..265c8779 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:17:80:733 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 16:14:17:85:140 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:17:181:177 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 16:14:17:183:471 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 16:14:17:188:512 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 16:14:17:190:755 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 16:14:17:282:523 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 16:14:17:284:859 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 16:14:17:287:884 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:14:17:288:915 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..ff4fad6e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:18:95:110 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:14:18:98:523 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:18:195:88 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:14:18:197:209 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:14:18:294:870 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:14:18:296:843 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:14:18:402:740 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:14:18:496:537 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:14:18:595:676 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:14:18:696:557 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:14:18:796:495 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:14:18:896:468 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:14:18:899:747 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:14:18:900:762 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..d1133cce --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:22:808:574 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:22:812:580 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:22:909:264 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:14:22:912:348 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:14:22:914:639 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 16:14:23:12:375 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:14:23:14:759 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:14:23:16:699 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:14:23:19:406 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 16:14:23:111:433 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 16:14:23:112:620 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 16:14:23:116:507 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 16:14:23:117:632 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..82f35c6c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:21:992:233 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:21:996:667 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:22:92:485 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:14:22:95:499 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:14:22:194:918 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 16:14:22:198:454 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:14:22:201:36 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 16:14:22:295:206 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:14:22:297:93 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:14:22:299:641 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 16:14:22:394:502 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:14:22:395:726 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 16:14:22:494:48 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 16:14:22:495:329 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:14:22:503:499 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 16:14:22:504:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..ecbe1692 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:19:229:324 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 16:14:19:232:849 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:19:329:497 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:14:19:331:670 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:14:19:429:729 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:14:19:432:219 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:14:19:531:21 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:14:19:629:809 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:14:19:732:562 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:14:19:830:841 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:14:19:930:658 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:14:20:31:954 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 16:14:20:34:829 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:14:20:35:851 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..91d06fc9 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:20:316:518 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:14:20:320:856 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:20:417:211 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 16:14:20:419:117 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 16:14:20:517:927 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 16:14:20:519:909 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 16:14:20:622:564 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 16:14:20:720:538 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 16:14:20:817:229 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 16:14:20:921:429 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:14:21:17:963 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 16:14:21:118:376 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:14:21:121:681 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:14:21:122:775 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..24d863e4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:23:435:862 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:14:23:440:279 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 16:14:23:442:749 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 16:14:23:536:237 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 16:14:23:538:309 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 16:14:23:541:651 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 16:14:23:544:228 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 16:14:23:635:748 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 16:14:23:637:777 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:14:23:639:816 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 16:14:23:640:899 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 16:14:23:736:575 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 16:14:23:738:902 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 16:14:23:741:941 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 16:14:23:742:931 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..62a47ea3 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:21:403:997 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 16:14:21:407:441 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:21:504:126 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 16:14:21:506:179 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:14:21:509:48 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:14:21:511:599 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 16:14:21:513:165 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:14:21:515:513 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-1 16:14:21:604:269 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 16:14:21:606:528 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 16:14:21:608:323 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 16:14:21:610:346 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 16:14:21:612:180 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:14:21:615:13 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 16:14:21:705:154 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 16:14:21:706:216 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 16:14:21:709:255 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 16:14:21:710:238 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..481f12cb --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:13:145:102 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:14:13:148:217 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:13:245:39 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:14:13:248:226 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:14:13:250:547 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 16:14:13:946:134 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..a59437e8 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:14:12:658:944 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:14:12:662:267 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:14:12:758:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:14:12:761:773 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:14:12:763:761 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:14:12:859:346 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:14:12:860:320 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:14:12:862:721 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:14:12:863:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:14:12:864:624 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..d2735d5d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:38:261:902 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:38:265:492 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:38:364:439 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:38:366:249 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:38:369:267 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:33:38:563:760 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:33:39:164:601 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..633789f4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:39:438:786 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:39:442:533 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:39:538:653 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:39:540:311 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:39:543:22 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:39:545:258 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 15:33:40:339:894 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..045ccbdb --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:40:626:403 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:40:630:59 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:40:726:559 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:40:728:436 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:33:40:828:211 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:40:830:769 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:33:41:331:806 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..ddfda279 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:41:607:64 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:33:41:610:320 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:41:708:424 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:41:711:894 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:33:41:713:705 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:33:41:807:710 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:33:41:908:312 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:42:7:88 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:33:42:10:564 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:42:11:737 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..af09fbd9 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:43:258:791 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:43:262:595 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:43:358:731 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:33:43:361:579 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:43:363:480 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:33:43:459:464 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:43:462:401 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:33:43:558:654 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:33:43:561:593 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:43:562:611 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..7ad770da --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:43:839:953 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:43:843:582 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:43:940:287 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:33:43:943:131 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:43:944:972 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:43:946:57 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:33:44:40:710 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:44:43:250 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:33:44:46:252 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:44:47:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..3c9af767 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:42:287:576 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:33:42:291:797 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:42:386:555 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:42:389:917 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:33:42:391:566 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:42:393:855 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:33:42:487:585 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:42:488:700 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 15:33:42:491:726 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:42:492:794 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..8e27bf46 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:42:768:944 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:33:42:772:739 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:42:869:16 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 15:33:42:872:65 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 15:33:42:873:621 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:42:875:963 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:33:42:969:678 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:42:970:869 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 15:33:42:973:981 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:42:975:130 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..2024d25b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:37:82:430 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:37:85:975 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:37:182:549 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:37:184:85 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:37:186:666 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:33:37:283:52 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:33:37:383:650 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:37:483:444 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:33:37:486:400 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:37:487:351 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..de381b1a --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:37:763:850 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:37:767:913 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:37:871:840 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:37:873:605 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:37:876:485 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:37:879:303 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:33:37:964:142 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:37:966:429 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:33:37:969:306 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:33:37:970:312 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..86837830 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:44:325:722 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:44:329:380 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:44:428:516 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:44:430:311 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:33:44:433:434 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:33:44:525:795 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:33:44:527:422 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 15:33:44:529:290 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 15:33:44:626:654 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:33:44:628:988 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:33:44:733:28 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:33:44:829:590 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:33:44:834:133 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:33:44:835:545 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c439e7c9 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-1 15:33:45:109:437 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 15:33:45:113:729 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-1 15:33:45:209:374 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 15:33:45:212:286 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:33:45:310:383 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 15:33:45:313:203 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:33:45:315:838 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:33:45:409:548 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:33:45:411:241 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:33:45:511:243 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:33:45:610:948 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:33:45:710:543 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:33:45:809:576 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:33:45:810:907 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:33:45:814:665 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:33:45:815:752 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..d7212d10 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:46:95:704 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:46:103:686 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:46:195:696 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:46:197:218 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:33:46:200:95 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:33:46:295:875 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:33:46:297:561 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 15:33:46:299:705 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:33:46:396:834 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:33:46:399:660 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:33:46:497:222 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:33:46:596:968 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:33:46:600:13 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:33:46:601:61 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..a312ead1 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:46:861:255 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 15:33:46:864:873 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:46:961:218 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 15:33:46:962:814 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:33:46:966:830 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:33:47:61:439 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 15:33:47:63:260 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 15:33:47:65:576 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:33:47:164:14 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:33:47:166:688 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:33:47:266:155 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:33:47:362:318 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:33:47:365:708 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:33:47:366:825 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..2fcca5d5 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:32:825:236 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:32:828:778 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:32:925:150 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:33:32:927:703 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:33:33:25:187 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:33:125:104 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:33:33:127:838 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:33:33:128:817 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..daaf65a0 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:34:70:928 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:34:74:705 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:34:170:966 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:33:34:174:714 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 15:33:34:272:346 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:34:370:779 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:34:472:380 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:33:34:475:203 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:34:476:136 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..1cd95e18 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:34:746:589 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:34:750:282 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:34:846:502 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:33:34:849:209 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:33:34:850:225 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 15:33:34:946:958 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:34:949:519 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:33:34:952:42 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:34:952:922 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6d8d60ff --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:36:199:223 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:36:207:233 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:36:298:981 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:33:36:400:589 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:33:36:402:880 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:33:36:803:775 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..f1e4f8ff --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:33:395:638 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:33:33:398:905 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:33:495:661 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:33:33:498:642 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:33:33:600:430 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:33:696:916 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:33:795:643 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:33:33:798:397 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:33:799:380 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..21698c18 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:35:224:969 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:33:35:228:527 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:35:324:800 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:33:35:328:308 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:33:35:330:622 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:33:35:425:353 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:35:426:354 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 15:33:35:428:837 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:35:429:867 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..dfb0d729 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:35:701:263 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:33:35:705:352 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:35:801:168 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 15:33:35:803:971 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:33:35:806:288 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:33:35:901:768 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:35:902:852 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 15:33:35:905:482 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:35:906:401 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..9b128af3 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:53:908:347 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:53:911:816 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:54:8:476 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:54:10:204 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:33:54:109:861 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:33:54:112:569 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:33:54:613:272 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..4c20f73a --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:54:906:510 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:54:910:50 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:55:8:97 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:33:55:9:897 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-1 15:34:16:93:224 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:34:16:138:40 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..2feae540 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:7:38:667:579 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:7:38:671:359 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:7:38:767:514 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:7:38:769:136 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-11 19:7:59:620:15 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-11 19:8:0:60:162 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cdd6d25e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:8:35:322:421 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:8:35:326:151 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:8:35:422:329 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:8:35:423:985 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-11 19:8:56:296:960 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-4-11 19:8:56:831:533 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..67f34441 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:17:835:549 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:34:17:838:837 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:17:935:641 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:34:17:938:689 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:34:17:940:349 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:34:18:137:70 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:34:18:737:786 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..d54bf98b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:19:20:461 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:34:19:24:340 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:19:124:117 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:34:19:127:822 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:34:19:129:421 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:34:19:322:68 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:34:19:922:871 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..6343a004 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:20:241:594 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:34:20:245:372 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:20:341:445 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:34:20:344:257 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:34:20:441:981 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:34:20:445:115 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:34:20:945:727 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..d72cd524 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:21:265:258 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:34:21:269:754 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:21:365:312 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:34:21:368:3 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:34:21:465:738 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:34:21:666:541 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:34:22:167:239 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..cb2b3c21 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:22:488:538 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:34:22:492:79 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:22:588:910 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:34:22:591:536 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:34:22:692:564 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:34:22:695:17 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:34:23:195:759 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..2518e2cc --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:34:23:466:852 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:34:23:470:429 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:34:23:566:870 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:34:23:568:489 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:34:23:666:851 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 15:34:23:668:477 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:34:44:550:95 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-1 15:34:44:953:834 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-4-1 15:34:45:251:266 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..499b2a06 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,39 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:6:13:406:564 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:6:13:410:210 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:6:13:506:551 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:6:13:508:189 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-11 19:6:13:608:169 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-11 19:6:13:807:180 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-4-11 19:6:34:226:584 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-4-11 19:6:34:768:445 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-11 19:6:35:329:731 +Test Result: Timeout +Reason: Transaction execution timeout \ No newline at end of file diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..99b33bea --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:47:642:610 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:47:646:389 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:47:742:955 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:33:47:842:610 + Q4 finished at: 2022-4-1 15:33:47:842:961 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:47:943:522 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:33:47:946:367 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 15:33:47:959:819 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:33:47:961:0 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..4a538952 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:48:234:421 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:48:238:180 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:48:334:186 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 15:33:48:435:851 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:33:48:836:683 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..8b9d0624 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:49:107:125 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:49:110:820 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:49:207:351 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 15:33:49:307:622 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:33:49:309:659 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:33:49:710:406 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..f630d117 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:49:992:150 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:49:995:696 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:50:92:239 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 15:33:50:193:100 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:50:195:716 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:33:50:596:459 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b6e39135 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:53:28:732 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:33:53:33:116 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:53:128:789 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 15:33:53:230:60 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:33:53:232:575 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:33:53:633:246 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..93fd792d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:50:870:966 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:33:50:874:188 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:50:970:964 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:33:50:974:33 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:33:51:172:185 +Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 15:33:51:672:940 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..13484fe7 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:33:51:945:619 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:33:51:948:748 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:33:52:45:672 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:33:52:52:290 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:33:52:247:381 +Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 15:33:52:748:264 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/ob_oracle/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/ob_oracle/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/ob_oracle/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/ob_oracle/result_summary/serializable_total-result.txt b/test_result/centralizend_result/ob_oracle/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..84c76e45 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:17:983:65 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:17:986:182 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:18:83:166 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:36:18:86:111 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:36:18:87:835 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:36:18:90:930 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:36:18:183:676 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:36:18:184:849 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:36:18:187:567 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:36:18:188:598 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..18d7acb8 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:18:467:25 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:18:470:331 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:18:567:152 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:36:18:570:447 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:36:18:572:109 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:36:18:574:628 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 15:36:19:369:77 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..49a7dcbb --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:19:661:27 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:19:664:430 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:19:761:213 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:36:19:763:32 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:36:19:766:828 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:36:19:861:569 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:36:19:864:6 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:36:19:964:668 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:36:19:967:823 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:36:19:968:923 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..7c5b7e31 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:21:234:636 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:21:238:486 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:21:334:476 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:36:21:336:212 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:36:21:339:79 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:36:21:341:945 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:36:21:435:158 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:36:21:437:914 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:36:21:440:993 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:36:21:442:264 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..75d13f8f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:20:258:272 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 15:36:20:267:129 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 15:36:20:268:943 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 15:36:20:357:951 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 15:36:20:359:965 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 15:36:20:361:555 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:36:20:365:762 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:36:20:459:562 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 15:36:20:461:908 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 15:36:20:463:938 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:20:465:291 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..ea0f4e70 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:20:747:105 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 15:36:20:752:4 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:20:847:17 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 15:36:20:849:122 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 15:36:20:854:146 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:36:20:856:802 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 15:36:20:948:854 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:36:20:951:190 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 15:36:20:954:570 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:36:20:955:841 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..1b79972f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:21:724:84 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 15:36:21:727:643 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:21:824:139 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:36:21:825:985 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:36:21:924:371 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 15:36:21:926:516 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 15:36:22:26:167 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:36:22:128:962 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 15:36:22:224:859 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:36:22:325:775 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:36:22:425:841 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:22:526:313 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:36:22:530:125 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:36:22:531:320 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..4b36d7e4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:26:368:885 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:26:372:467 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:26:469:72 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:36:26:472:269 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:36:26:474:932 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:36:26:569:27 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:36:26:571:62 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:36:26:572:612 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:36:26:575:405 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 15:36:26:669:817 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:36:26:671:72 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 15:36:26:674:91 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:36:26:675:147 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..5bba8f18 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:25:587:721 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:36:25:592:382 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:25:687:761 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:36:25:690:739 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:36:25:788:48 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 15:36:25:791:222 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:36:25:793:717 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:36:25:888:151 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:36:25:889:871 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:36:25:892:819 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 15:36:25:989:642 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:25:991:181 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 15:36:26:89:172 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 15:36:26:90:757 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:36:26:94:455 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:36:26:95:631 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..d6242e4a --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:22:817:658 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 15:36:22:821:412 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:22:917:631 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:36:22:919:749 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:36:23:20:147 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 15:36:23:22:260 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 15:36:23:119:609 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 15:36:23:218:357 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 15:36:23:318:321 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:36:23:420:128 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:36:23:519:18 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:23:619:142 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:36:23:622:917 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:36:23:623:994 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..bbf1f83c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:23:890:905 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 15:36:23:895:698 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:23:990:502 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 15:36:23:992:534 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:36:24:90:740 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 15:36:24:92:901 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 15:36:24:191:916 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 15:36:24:292:737 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 15:36:24:392:609 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:36:24:492:156 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:36:24:592:74 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:24:692:69 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:36:24:695:430 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:36:24:696:567 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..34850bab --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:26:963:931 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:36:26:968:68 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 15:36:26:970:853 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-1 15:36:27:63:842 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 15:36:27:65:913 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 15:36:27:69:16 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:36:27:71:672 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:36:27:164:226 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 15:36:27:166:521 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:36:27:168:632 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:36:27:170:128 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 15:36:27:264:664 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 15:36:27:267:331 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 15:36:27:270:643 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 15:36:27:271:899 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..f80c333d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:6:30:314:538 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 16:6:30:322:725 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:6:30:414:473 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 16:6:30:416:527 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:6:30:419:501 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:6:30:421:510 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 16:6:30:423:6 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 16:6:30:425:151 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-1 16:6:30:514:525 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 16:6:30:516:525 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 16:6:30:518:143 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 16:6:30:520:154 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 16:6:30:521:665 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 16:6:30:523:942 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 16:6:30:615:745 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 16:6:30:616:771 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 16:6:30:619:943 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 16:6:30:620:896 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c03e535b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:36:16:907:519 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:36:16:917:592 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:36:17:7:488 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:36:17:10:526 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:36:17:13:352 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:36:17:708:571 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..2e93210b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 16:6:2:642:49 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:6:2:650:336 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 16:6:2:742:678 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:6:2:745:768 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:6:2:748:89 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:6:2:842:494 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 16:6:2:843:474 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:6:2:845:961 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 16:6:2:846:868 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 16:6:2:847:692 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..6416ac46 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:8:294:944 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:8:298:537 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:8:395:543 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:8:397:121 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:8:399:917 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:35:8:598:530 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:35:9:199:289 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..6aeafe26 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:9:484:904 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:9:488:676 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:9:583:649 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:9:585:209 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:9:587:770 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:9:590:31 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 15:35:10:384:870 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..417a2f1b --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:10:668:407 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:10:672:29 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:10:768:211 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:10:770:16 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:35:10:869:698 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:10:872:407 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:35:11:373:209 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..bb09bc10 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:11:665:105 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:35:11:668:435 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:11:766:641 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:11:769:651 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:35:11:771:296 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:35:11:865:921 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:35:11:966:713 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:12:65:310 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:35:12:68:274 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:12:69:284 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a7a32480 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:13:366:639 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:13:370:41 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:13:466:590 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:35:13:469:8 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:13:470:578 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:35:13:567:296 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:13:569:647 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:35:13:666:580 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:35:13:669:752 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:13:670:738 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..3eeb7f59 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:13:946:993 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:13:950:932 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:14:46:935 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:35:14:49:693 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:14:51:431 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:14:52:414 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:35:14:147:432 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:14:149:878 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:35:14:153:800 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:14:154:854 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2ee98582 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:12:344:568 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:35:12:347:952 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:12:444:585 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:12:453:996 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:35:12:455:549 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:12:457:532 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:35:12:545:88 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:12:546:134 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 15:35:12:548:738 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:12:549:743 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..43bb6992 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:12:828:112 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 15:35:12:832:478 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:12:928:54 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 15:35:12:931:101 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 15:35:12:932:819 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:12:935:307 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 15:35:13:28:567 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:13:29:564 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 15:35:13:32:483 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:13:33:446 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..df83da40 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:7:116:604 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:7:120:169 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:7:216:558 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:7:218:222 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:7:221:124 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 15:35:7:317:575 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:35:7:417:648 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:7:521:115 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:35:7:524:210 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:7:525:298 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..333ded88 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:7:809:7 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:7:817:44 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:7:908:950 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:7:910:574 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:7:913:79 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:7:915:675 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:35:8:9:537 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:8:11:859 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 15:35:8:14:667 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 15:35:8:19:702 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..13c478bc --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:14:429:390 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:14:432:901 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:14:529:616 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:14:531:911 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 15:35:14:535:243 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:35:14:629:227 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:35:14:630:704 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 15:35:14:632:479 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 15:35:14:733:318 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:35:14:735:837 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:35:14:830:686 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:35:14:930:748 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:35:14:933:705 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:35:14:934:720 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..eaf3076c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-1 15:35:15:218:29 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 15:35:15:222:954 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-1 15:35:15:318:229 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 15:35:15:321:352 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-1 15:35:15:418:323 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 15:35:15:421:8 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:35:15:423:562 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-1 15:35:15:518:119 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 15:35:15:519:869 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 15:35:15:619:478 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 15:35:15:722:635 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:35:15:819:58 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 15:35:15:918:121 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:35:15:919:419 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 15:35:15:922:970 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 15:35:15:923:948 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c4887572 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:16:210:471 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:16:214:96 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:16:310:773 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:16:312:351 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:35:16:315:717 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:35:16:410:696 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 15:35:16:412:364 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 15:35:16:414:587 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:35:16:511:800 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:35:16:517:285 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:35:16:611:996 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:35:16:712:290 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 15:35:16:715:599 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:35:16:717:62 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..3290f7cd --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:16:993:434 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 15:35:16:997:70 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:17:91:370 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 15:35:17:92:895 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 15:35:17:97:66 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:35:17:192:276 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 15:35:17:194:99 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 15:35:17:196:618 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 15:35:17:292:857 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 15:35:17:295:539 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 15:35:17:392:916 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:35:17:493:244 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 15:35:17:496:443 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 15:35:17:497:608 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..a2305e47 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:2:789:115 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:2:793:498 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:2:890:163 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:35:2:897:301 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:35:2:989:716 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:3:88:726 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 15:35:3:91:893 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:35:3:92:931 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..23d4f8c4 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:4:101:417 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:4:104:893 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:4:201:524 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:35:4:204:98 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 15:35:4:304:529 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:4:403:868 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:4:503:168 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:35:4:506:4 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:4:507:175 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..36dc2a11 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:4:792:293 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:4:795:804 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:4:892:117 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 15:35:4:894:763 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:35:4:895:748 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 15:35:4:994:75 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:4:996:592 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 15:35:4:999:244 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:5:0:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..91acd602 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:6:236:996 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:6:240:831 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:6:337:135 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:35:6:438:761 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:35:6:441:134 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:35:6:841:914 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..69e42c02 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:3:401:724 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:35:3:405:663 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:3:504:489 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:35:3:507:808 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 15:35:3:602:587 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:3:704:814 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:3:802:296 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 15:35:3:805:202 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:3:806:263 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..c6bd9542 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:5:270:1 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:35:5:274:153 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:5:369:424 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 15:35:5:373:140 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:35:5:375:530 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:35:5:472:88 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:5:473:169 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 15:35:5:475:959 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:5:476:937 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..7604391f --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:5:743:768 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 15:35:5:747:790 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:5:843:822 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 15:35:5:846:473 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 15:35:5:853:892 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 15:35:5:944:671 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:5:946:860 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 15:35:5:949:632 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:5:950:615 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..f46bc6ef --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:24:84:370 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:24:88:15 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:24:184:11 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:24:185:600 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 15:35:24:285:544 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:24:288:264 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:35:24:789:54 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..a48c1f3d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:25:64:861 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:25:68:626 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:25:166:391 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:25:168:187 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-1 15:35:45:883:846 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:35:46:531:512 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..fc91c011 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 17:31:45:886:601 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 17:31:45:890:438 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 17:31:45:986:620 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 17:31:45:988:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-4-11 17:32:6:660:212 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-11 17:32:7:56:358 +Test Result: Timeout +Reason: Transaction execution timeout diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..b381608d --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 17:33:28:910:901 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 17:33:28:914:583 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 17:33:29:10:733 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 17:33:29:12:372 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-11 17:33:48:944:709 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 17:33:48:947:42 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-4-11 17:33:49:647:629 +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..bee62b89 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:48:95:373 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:35:48:98:791 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:48:195:385 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:48:198:270 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:35:48:199:795 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 15:35:48:396:916 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:35:48:997:829 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..780d91f1 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:49:283:678 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 15:35:49:287:250 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:49:383:951 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:49:387:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 15:35:49:388:996 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:35:49:585:229 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 15:35:50:186:158 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c207dd2e --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:50:468:744 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:50:481:797 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:50:568:972 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:35:50:571:612 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:35:50:669:617 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:50:674:668 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:35:51:174:881 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..37aebd87 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:51:462:549 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:51:466:861 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:51:562:788 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:35:51:565:859 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 15:35:51:663:29 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:51:868:551 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:35:52:369:432 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..04c5bb1c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:52:652:965 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:52:656:884 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:52:753:214 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 15:35:52:755:916 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 15:35:52:853:552 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 15:35:52:856:901 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 15:35:53:357:42 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..c77eaa87 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:53:644:949 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:53:648:496 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:53:745:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 15:35:53:747:391 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-1 15:35:53:844:927 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 15:35:53:846:590 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-1 15:36:13:789:632 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 15:36:13:792:316 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-1 15:36:14:692:852 + Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-4-1 15:36:14:944:948 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..d7a5b688 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,39 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-11 19:4:56:771:626 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 19:4:56:775:549 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-11 19:4:56:871:543 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 19:4:56:873:298 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-11 19:4:56:976:447 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-11 19:4:57:173:107 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-4-11 19:5:17:716:196 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-4-11 19:5:18:144:657 + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-4-11 19:5:18:638:647 +Test Result: Timeout +Reason: Transaction execution timeout diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4dde6bd8 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:17:783:311 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:17:787:270 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:17:883:55 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 15:35:17:983:375 + Q4 finished at: 2022-4-1 15:35:17:983:758 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:18:85:943 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 15:35:18:88:880 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 15:35:18:103:957 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 15:35:18:105:129 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..9e9fc9fa --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:18:381:354 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:18:385:127 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:18:481:139 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 15:35:18:583:169 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:35:18:983:875 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..c59502fe --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:19:270:565 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:19:274:166 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:19:371:737 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 15:35:19:471:71 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 15:35:19:473:994 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:35:19:874:621 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..2e0f7901 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:20:153:311 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:20:156:933 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:20:256:72 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 15:35:20:354:354 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:20:356:910 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:35:20:758:104 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..89168f98 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:23:200:158 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 15:35:23:203:786 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:23:300:117 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 15:35:23:405:875 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 15:35:23:408:475 + Q4 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 15:35:23:809:280 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..9e0e2873 --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:21:32:57 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:35:21:35:602 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:21:132:10 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:35:21:135:433 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 15:35:21:333:185 +Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 15:35:21:834:209 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..a1e42a2c --- /dev/null +++ b/test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-1 15:35:22:110:253 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 15:35:22:113:738 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-1 15:35:22:210:255 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 15:35:22:213:419 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 15:35:22:411:875 +Q5 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 15:35:22:912:776 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25]can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..1a431c9a --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:58:10:172 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:27:58:13:691 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:58:110:136 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:27:58:113:608 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:27:58:116:275 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:27:58:215:276 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:27:58:220:604 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..7a5f5619 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:58:466:638 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:27:58:470:11 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:58:566:689 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:27:58:570:425 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:27:58:573:477 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:27:58:669:484 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:27:58:676:256 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..700fe78a --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:58:924:976 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:27:58:928:354 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:59:24:948 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:27:59:28:199 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:27:59:31:52 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:27:59:127:925 +Q7-T1 execute opt: 'COMMIT'; + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:27:59:231:270 + Q8-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..40902ed7 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:0:369:572 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:28:0:373:113 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:0:469:719 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:28:0:473:188 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:28:0:475:881 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:28:0:572:406 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:0:578:779 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..2b558e1f --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,68 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:59:455:596 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 16:27:59:460:632 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 16:27:59:462:992 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 16:27:59:555:687 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 16:27:59:559:910 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 16:27:59:562:406 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 16:27:59:660:68 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 16:27:59:662:208 + Q12-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1d3c64aa --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:58:33:535:772 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 16:58:33:541:373 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:58:33:635:698 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 16:58:33:638:929 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 16:58:33:643:829 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 16:58:33:743:730 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 16:58:33:750:862 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..762ab0b2 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,104 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:0:829:451 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:28:0:833:532 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:0:929:453 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:28:0:933:454 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:28:1:31:589 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:28:1:35:840 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:28:1:133:86 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:28:1:232:674 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:28:1:332:450 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:28:1:637:859 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..dd8aaf69 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,101 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:5:372:741 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:28:5:377:585 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:5:474:79 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:28:5:478:774 + Q5-T2 execute opt: 'COMMIT'; + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:28:5:574:480 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:28:5:577:504 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:28:5:581:138 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 16:28:5:676:99 +Q11-T1 execute opt: 'COMMIT'; + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 16:28:5:682:636 + Q13-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..7a9b9faf --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,201 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:4:597:259 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:28:4:601:748 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:4:699:543 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:28:4:704:226 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:28:4:797:529 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 16:28:4:801:329 + Q7-T3 execute opt: 'COMMIT'; + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:28:4:897:452 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:28:4:902:41 + Q10-T4 execute opt: 'COMMIT'; + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 16:28:4:999:883 + Q12-T2 execute opt: 'COMMIT'; +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 16:28:5:102:170 +Q14-T1 execute opt: 'COMMIT'; + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:28:5:110:362 + Q16-T5 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..3fb68441 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,104 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:1:898:478 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 16:28:1:902:490 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:2:0:418 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:28:2:4:499 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:28:2:96:875 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:28:2:100:839 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:28:2:200:20 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:28:2:302:839 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 16:28:2:400:74 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 16:28:2:705:813 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..a88c872a --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,101 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:2:966:589 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:28:2:970:886 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:3:67:74 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 16:28:3:71:266 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:28:3:170:182 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 16:28:3:174:526 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 16:28:3:270:270 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 16:28:3:370:566 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 16:28:3:470:703 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:28:3:774:578 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..c1ec2faf --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,135 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:5:933:545 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:28:5:937:355 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 16:28:5:940:375 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 16:28:6:33:561 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 16:28:6:36:477 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 16:28:6:39:732 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:28:6:135:481 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 16:28:6:138:467 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:28:6:140:663 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 16:28:6:236:259 +Q13-T1 execute opt: 'COMMIT'; + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 16:28:6:243:949 + Q15-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..d1fac200 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,157 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:4:35:112 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 16:28:4:39:323 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:4:135:85 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 16:28:4:139:240 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:28:4:142:134 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:28:4:144:512 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 16:28:4:147:644 + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 16:28:4:235:61 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 16:28:4:238:983 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 16:28:4:241:882 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 16:28:4:244:62 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 16:28:4:246:845 + Q14-T3 execute opt: 'COMMIT'; +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 16:28:4:337:614 +Q16-T1 execute opt: 'COMMIT'; + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 16:28:4:344:68 + Q18-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/oracle/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..4c618e4e --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,47 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:57:555:463 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:27:57:558:908 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:57:655:648 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:27:57:659:482 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 16:27:57:758:277 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:27:57:764:651 + Q9-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/oracle/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..0680ba23 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,55 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:57:100:812 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:27:57:104:823 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:57:200:734 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:27:57:204:350 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:27:57:302:692 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:27:57:308:74 + Q9-T3 execute opt: 'COMMIT'; + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..ecf484b3 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,52 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:55:921:974 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:55:925:535 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:56:21:989 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:56:25:905 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:56:28:825 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 16:25:56:225:34 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 16:25:56:329:728 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..21ab090b --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,52 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:56:578:761 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:56:582:784 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:56:678:606 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:56:682:84 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:56:684:891 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 16:25:56:781:510 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 16:25:56:789:596 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..0e133616 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,52 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:57:42:640 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:57:45:992 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:57:142:729 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:57:146:285 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:25:57:245:496 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:25:57:246:836 + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:57:349:661 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..1f6fc32a --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:57:597:771 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:25:57:601:43 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:57:697:722 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:57:701:72 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:25:57:703:688 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:25:57:800:531 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:58:3:121 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..76b2ed01 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:59:166:976 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:59:170:450 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:59:266:970 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:25:59:271:98 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:59:274:13 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:25:59:369:919 +Q7-T1 execute opt: 'COMMIT'; + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:59:472:318 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..b26934bd --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:59:724:986 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:59:729:357 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:59:827:468 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:25:59:832:736 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:59:835:816 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:25:59:927:662 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:59:935:412 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2004e26f --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:58:265:565 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 16:25:58:270:308 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:58:365:569 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:58:369:123 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:25:58:372:22 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 16:25:58:467:396 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 16:25:58:473:386 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..033aa9aa --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,55 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:58:713:362 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 16:25:58:717:943 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:58:813:407 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 16:25:58:816:615 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 16:25:58:819:645 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 16:25:58:915:130 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 16:25:58:920:321 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..15335557 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:54:796:714 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:54:800:259 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:54:896:761 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:54:900:536 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:54:903:484 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:25:54:999:624 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:55:203:620 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..a6a4be40 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:55:453:996 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:55:457:430 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:55:554:66 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:25:55:557:628 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:25:55:560:671 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:25:55:658:647 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:25:55:665:480 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..875e6025 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,104 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:0:184:397 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:0:188:13 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:0:284:414 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:0:288:458 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:26:0:291:878 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:26:0:387:618 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 16:26:0:391:960 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 16:26:0:395:563 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 16:26:0:487:390 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:26:0:693:174 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..d1769a5c --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,203 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 16:26:0:942:293 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 16:26:0:948:63 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 16:26:1:42:194 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 16:26:1:45:918 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:26:1:143:637 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 16:26:1:153:65 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:26:1:156:111 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:26:1:242:304 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:26:1:245:903 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:26:1:345:439 +Q11-T1 execute opt: 'COMMIT'; + Q12-T2 execute opt: 'COMMIT'; + Q13-T3 execute opt: 'COMMIT'; + Q14-T4 execute opt: 'COMMIT'; + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:26:1:650:475 + Q16-T4 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..7a6ae190 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,104 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:1:905:805 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:1:910:650 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:2:5:759 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:2:9:320 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 16:26:2:13:436 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:26:2:105:837 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 16:26:2:109:292 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 16:26:2:112:659 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 16:26:2:209:770 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 16:26:2:412:802 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..70c67535 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,101 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:2:658:718 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 16:26:2:661:910 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:2:758:703 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 16:26:2:761:846 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 16:26:2:765:322 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:26:2:858:755 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 16:26:2:861:849 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 16:26:2:865:188 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 16:26:2:962:168 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:26:3:166:367 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..985e0868 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,43 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:50:999:791 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:51:4:476 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:51:99:678 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:25:51:104:598 +Q5-T1 execute opt: 'ROLLBACK'; + Q6-T2 execute opt: 'COMMIT'; + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:25:51:306:992 + Q8-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..eeeac7df --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:52:218:986 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:52:222:443 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:52:318:994 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:25:52:323:205 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 16:25:52:423:838 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 16:25:52:627:417 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..601115a7 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:52:876:392 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:52:879:895 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:52:976:479 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:25:52:980:60 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 16:25:53:79:577 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 16:25:53:86:797 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..dc28b468 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:54:239:959 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:25:54:243:435 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:54:339:931 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 16:25:54:442:758 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 16:25:54:444:285 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:25:54:549:766 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..ca667bd7 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,56 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:51:561:426 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:25:51:565:196 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:51:662:325 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:25:51:666:111 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 16:25:51:763:363 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:25:51:966:692 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..c0f6beb9 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,54 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:53:333:669 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:25:53:338:584 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:53:433:663 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:25:53:437:457 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 16:25:53:536:913 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 16:25:53:541:904 + Q9-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..be9963fa --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,53 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:25:53:782:304 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:25:53:787:402 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:25:53:882:96 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 16:25:53:885:932 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 16:25:53:987:818 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 16:25:53:992:728 + Q9-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..05f489a4 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,52 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:7:305:816 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:7:309:368 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:7:406:342 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:7:415:127 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:26:7:509:977 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:26:7:511:566 + Q6-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:26:7:522:857 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..f2d1c3f4 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:7:780:849 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:7:784:328 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:7:880:685 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:7:884:854 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q5 failed at: 2022-4-1 16:26:12:20:189 +Q6 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q6 failed at: 2022-4-1 16:26:38:804:724 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..5ba9cc3d --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:39:56:574 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:39:59:980 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:39:156:568 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:39:159:973 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q5 failed at: 2022-4-1 16:26:43:274:780 +Q6 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q6 failed at: 2022-4-1 16:26:50:19:699 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..41672fc3 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:50:268:190 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:50:271:744 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:50:368:246 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:50:372:74 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q5 failed at: 2022-4-1 16:26:54:573:476 +Q7 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q7 failed at: 2022-4-1 16:26:57:599:183 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..59b195a5 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:57:859:93 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:26:57:862:545 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:57:959:161 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:57:962:919 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:26:57:966:208 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 16:26:58:161:53 +Q7-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:26:58:168:273 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..d8f14baf --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:58:418:559 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:26:58:422:177 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:58:518:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:26:58:521:715 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:26:58:524:414 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 16:26:58:719:684 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:26:58:825:246 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..cd07504e --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:59:74:803 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:59:79:23 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:59:174:814 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:26:59:178:800 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:26:59:278:773 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:26:59:280:358 + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:26:59:382:892 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..c734bf7f --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:41:644:82 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:27:41:648:570 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:41:747:577 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:27:41:752:321 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:27:41:849:893 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:27:42:45:577 + Q7-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:27:42:53:770 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..ff41e9a3 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,50 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:42:305:374 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:27:42:309:169 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:42:405:425 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:27:42:408:811 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:27:42:508:19 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 16:27:42:509:333 + Q6-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:27:42:516:622 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..7d671ac3 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: oracle #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:42:770:503 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:27:42:773:934 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:42:870:503 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:27:42:874:167 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:27:42:971:537 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 16:27:42:975:404 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q5 failed at: 2022-4-1 16:27:46:559:84 + Q8 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 + Q8 failed at: 2022-4-1 16:27:49:570:400 +Q9 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q9 failed at: 2022-4-1 16:27:49:670:712 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..7368f183 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: oracle #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:27:49:941:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:27:49:945:173 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:27:50:41:452 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:27:50:45:555 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:27:50:143:634 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 16:27:50:345:112 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q8 failed at: 2022-4-1 16:27:54:253:249 + Q6 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 + Q6 failed at: 2022-4-1 16:27:56:554:542 +Q9 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q9 failed at: 2022-4-1 16:27:56:854:550 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..70feac7f --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,42 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:3:412:104 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:3:415:441 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:3:512:207 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 16:26:3:613:362 + Q6-T2 execute opt: 'COMMIT'; + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 16:26:3:718:398 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 16:26:3:754:21 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..02f5bd2e --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,42 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:3:975:555 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:3:979:116 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:4:76:231 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 16:26:4:181:63 + Q6-T2 execute opt: 'COMMIT'; + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 16:26:4:292:604 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 16:26:4:319:292 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..62601b17 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write.txt @@ -0,0 +1,42 @@ +#### db_type: oracle #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:4:545:751 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:4:549:373 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:4:645:787 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 16:26:4:748:345 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 16:26:4:749:775 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 16:26:4:853:759 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..4998ba4c --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,42 @@ +#### db_type: oracle #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:5:101:799 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:5:105:304 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:5:201:891 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 16:26:5:306:181 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 16:26:5:307:527 + Q5-T2 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 16:26:5:317:439 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..4c0af2ed --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:6:836:594 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:26:6:840:584 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:6:939:700 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:26:7:41:56 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 16:26:7:43:713 + Q5-T2 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:26:7:51:210 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..04e4d117 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,47 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:5:619:195 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:26:5:622:925 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:5:719:253 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:26:5:722:355 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 16:26:5:920:535 +Q6-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:26:5:929:509 + Q9-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..e2ddf593 --- /dev/null +++ b/test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,47 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:26:6:198:69 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:26:6:201:520 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:26:6:287:288 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:26:6:291:452 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 16:26:6:488:625 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:26:6:593:730 + Q9-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/oracle/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/oracle/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/oracle/result_summary/serializable_total-result.txt b/test_result/centralizend_result/oracle/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..01329ba7 --- /dev/null +++ b/test_result/centralizend_result/oracle/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..96716e6f --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:3:768:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:3:772:451 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:3:869:118 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:36:3:872:887 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:36:3:876:492 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:36:3:972:196 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:36:3:979:76 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..cb0e16c9 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:4:247:875 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:4:251:591 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:4:348:774 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:36:4:352:884 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:36:4:360:1 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 16:36:5:153:681 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..3f8ad541 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:5:463:78 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:5:466:721 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:5:563:588 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:36:5:567:323 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:36:5:570:377 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:36:5:666:341 +Q7-T1 execute opt: 'COMMIT'; + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:36:5:770:596 + Q8-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a57594ef --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:6:895:330 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:6:899:463 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:6:995:190 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:36:6:998:904 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:36:7:2:708 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 16:36:7:799:319 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..39de93b3 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,68 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:6:27:458 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 16:36:6:35:304 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 16:36:6:38:412 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 16:36:6:125:724 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 16:36:6:129:912 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 16:36:6:132:570 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 16:36:6:227:965 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 16:36:6:230:51 + Q12-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..3fd9c7e7 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,47 @@ +#### db_type: oracle #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:58:16:774:867 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 16:58:16:780:693 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:58:16:874:924 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 16:58:16:877:944 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 16:58:16:882:540 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 16:58:17:679:120 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..00dae59e --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat.txt @@ -0,0 +1,86 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:8:50:614 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:36:8:54:379 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:8:150:601 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:36:8:154:634 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:36:8:251:762 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:36:8:256:347 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:36:8:354:102 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:36:8:453:623 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q9 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q9 failed at: 2022-4-1 16:36:9:454:218 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..a755e129 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,103 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:13:733:846 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:13:737:835 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:13:834:771 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:36:13:838:184 + Q5-T2 execute opt: 'COMMIT'; + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:36:13:933:784 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:36:13:936:605 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 16:36:13:940:72 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 16:36:14:36:990 +Q11-T1 execute opt: 'COMMIT'; + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 16:36:14:42:718 + Q13-T4 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..68fde7a9 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,203 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:12:969:495 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:12:974:169 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:13:69:315 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:36:13:73:866 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:36:13:170:910 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 16:36:13:174:710 + Q7-T3 execute opt: 'COMMIT'; + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:36:13:269:373 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:36:13:273:319 + Q10-T4 execute opt: 'COMMIT'; + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 16:36:13:372:119 + Q12-T2 execute opt: 'COMMIT'; +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 16:36:13:472:5 +Q14-T1 execute opt: 'COMMIT'; + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:36:13:480:83 + Q16-T5 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b46aa2de --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,86 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:9:707:231 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 16:36:9:710:824 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:9:807:303 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:36:9:811:161 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:36:9:907:235 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:36:9:910:902 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 16:36:10:10:136 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; + Q8 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q8 failed at: 2022-4-1 16:36:10:911:7 + Q9 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q9 failed at: 2022-4-1 16:36:11:110:467 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..8da072d6 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,101 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:11:352:625 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 16:36:11:356:826 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:11:452:613 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 16:36:11:456:240 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:36:11:552:655 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 16:36:11:556:487 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 16:36:11:655:517 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 16:36:11:756:264 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 16:36:11:856:141 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:36:12:160:950 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..49574ebd --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,117 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:14:290:191 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:36:14:294:29 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 16:36:14:296:988 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 16:36:14:390:227 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 16:36:14:392:888 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 16:36:14:395:996 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:36:14:490:302 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 16:36:14:493:11 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:36:14:495:268 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q12 failed at: 2022-4-1 16:36:15:794:442 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..72c7c339 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,159 @@ +#### db_type: oracle #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:12:412:544 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 16:36:12:416:687 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:12:512:476 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 16:36:12:516:452 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:36:12:519:785 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 16:36:12:521:905 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 16:36:12:524:521 + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 16:36:12:612:549 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 16:36:12:616:406 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 16:36:12:619:74 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 16:36:12:621:161 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 16:36:12:623:894 + Q14-T3 execute opt: 'COMMIT'; +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 16:36:12:714:819 +Q16-T1 execute opt: 'COMMIT'; + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 16:36:12:722:252 + Q18-T4 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/oracle/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..73344fa2 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:2:712:646 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:36:2:715:771 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:2:812:825 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:36:2:816:667 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 16:36:3:516:299 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/oracle/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..c5a87e8f --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:36:2:238:596 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:36:2:242:853 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:36:2:338:527 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:36:2:342:442 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:36:2:440:440 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:36:2:446:618 + Q9-T3 execute opt: 'COMMIT'; + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..4c1a299a --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:39:32:91 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:39:35:735 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:39:133:30 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:39:136:883 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:39:139:647 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 16:28:39:933:886 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ecdb8ba2 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:40:188:367 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:40:192:98 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:40:288:37 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:40:292:315 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:40:295:325 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-1 16:28:41:91:135 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..ddbe1d56 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:41:349:456 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:41:353:21 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:41:449:478 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:41:453:94 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:28:41:552:694 +Q7-T1 execute opt: 'COMMIT'; + Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 16:28:42:54:499 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..bd393bc2 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:42:309:702 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:28:42:313:170 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:42:409:739 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:42:413:682 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:28:42:416:754 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:28:42:512:699 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:42:718:928 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..0f61e8ad --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:43:892:788 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:43:896:507 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:43:992:732 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:28:43:996:469 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:43:999:342 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:28:44:95:595 +Q7-T1 execute opt: 'COMMIT'; + Q8-T2 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:44:199:655 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..e94fd43d --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:44:449:241 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:44:452:913 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:44:548:976 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:28:44:552:635 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:44:555:370 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:28:44:652:15 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:44:659:920 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..ba1ef192 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,59 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:42:979:918 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 16:28:42:984:954 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:43:79:986 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:43:83:710 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:28:43:86:352 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 16:28:43:181:946 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 16:28:43:187:710 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..dd28ee39 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:43:432:343 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 16:28:43:437:56 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:43:532:340 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 16:28:43:535:692 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 16:28:43:538:12 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 16:28:43:633:868 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 16:28:43:639:690 + Q10-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..acb08a68 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:37:902:640 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:37:906:703 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:38:2:540 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:38:6:546 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:38:9:733 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 16:28:38:105:696 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:38:310:351 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c232b4b3 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,57 @@ +#### db_type: oracle #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:38:564:766 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:38:568:667 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:38:665:177 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:38:668:924 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:38:672:190 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:28:38:767:781 +Q8-T1 execute opt: 'COMMIT'; + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 16:28:38:774:820 + Q10-T3 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..01e81f7f --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat.txt @@ -0,0 +1,104 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:44:914:217 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:44:917:710 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:45:14:110 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:45:17:938 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 16:28:45:21:242 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:28:45:114:235 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 16:28:45:118:562 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 16:28:45:122:340 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 16:28:45:217:171 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:28:45:422:78 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..da1fc244 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,203 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 16:28:45:667:907 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 16:28:45:673:373 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 16:28:45:767:833 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 16:28:45:771:274 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:28:45:867:861 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 16:28:45:874:175 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:28:45:877:317 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 16:28:45:968:93 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 16:28:45:971:759 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 16:28:46:70:588 +Q11-T1 execute opt: 'COMMIT'; + Q12-T2 execute opt: 'COMMIT'; + Q13-T3 execute opt: 'COMMIT'; + Q14-T4 execute opt: 'COMMIT'; + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 16:28:46:376:30 + Q16-T4 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..ebe38d8f --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,52 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:46:628:760 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:46:632:374 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:46:728:794 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:28:46:828:853 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 16:28:46:933:887 +Q10-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:47:132:723 + Q7 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q7 failed at: 2022-4-1 16:28:47:533:627 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..daa9695e --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,101 @@ +#### db_type: oracle #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:47:785:472 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 16:28:47:789:233 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:47:886:22 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 16:28:47:889:314 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 16:28:47:893:148 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:28:47:985:461 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 16:28:47:988:989 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 16:28:47:992:735 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 16:28:48:91:90 +Q10-T1 execute opt: 'COMMIT'; + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 16:28:48:294:496 + Q14-T4 execute opt: 'COMMIT'; + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..fca3c1a6 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,43 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:33:788:1 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:33:791:759 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:33:888:37 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:28:33:892:397 +Q5-T1 execute opt: 'ROLLBACK'; + Q6-T2 execute opt: 'COMMIT'; + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 16:28:34:93:910 + Q8-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..e44e1ec6 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:35:18:724 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:35:23:123 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:35:119:713 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:28:35:124:55 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 16:28:35:222:184 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 16:28:35:426:610 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..64891f90 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,49 @@ +#### db_type: oracle #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:35:673:598 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:35:677:287 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:35:773:607 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 16:28:35:777:388 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 16:28:35:878:398 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 16:28:35:885:380 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..409a1067 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,37 @@ +#### db_type: oracle #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:37:38:329 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:37:41:813 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:37:138:248 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 16:28:37:241:122 +Q6-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:37:643:584 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..c531994b --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,56 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:34:340:508 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:28:34:344:142 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:34:440:534 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:28:34:445:116 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 16:28:34:542:403 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 16:28:34:747:523 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..2be1c15c --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,56 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:36:131:358 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:28:36:136:155 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:36:231:383 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 16:28:36:234:890 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 16:28:36:333:365 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 16:28:36:338:738 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b3fcd1ca --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,55 @@ +#### db_type: oracle #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:36:583:564 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 16:28:36:587:967 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:36:683:643 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 16:28:36:687:511 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 16:28:36:785:593 +Q7-T1 execute opt: 'COMMIT'; + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 16:28:36:790:993 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..7300a57c --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:54:676:353 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:54:680:403 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:54:776:755 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:54:780:836 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 16:28:54:882:659 +Q8-T1 execute opt: 'COMMIT'; + Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 16:28:55:384:286 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..2ca1e906 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,32 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:55:642:436 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:55:651:803 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:55:742:999 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:28:55:747:300 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 +Q6 failed at: 2022-4-1 16:29:2:462:431 + Q5 finished at: 2022-4-1 16:29:2:464:104 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..cc74ce58 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,32 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:2:724:742 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:29:2:728:210 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:2:826:188 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:29:2:831:47 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 +Q6 failed at: 2022-4-1 16:29:10:13:281 + Q5 finished at: 2022-4-1 16:29:10:15:666 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..748e7b66 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,32 @@ +#### db_type: oracle #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:10:278:100 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:29:10:281:867 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:10:378:408 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:29:10:382:814 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 +Q7 failed at: 2022-4-1 16:29:17:501:855 + Q5 finished at: 2022-4-1 16:29:17:503:854 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..725da63e --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:17:767:140 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 16:29:17:770:935 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:17:867:29 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:29:17:870:451 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 16:29:17:873:173 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-1 16:29:18:668:654 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..59b5c742 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,16 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0 failed reason: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded errcode: HY000 +Q0 failed at: 2022-4-1 16:29:18:707:473 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b436eb57 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:57:586:929 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:29:57:591:397 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:57:686:907 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:29:57:691:907 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:29:57:790:741 +Q7-T1 execute opt: 'COMMIT'; + Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 16:29:58:292:538 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..a439c01c --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:58:548:104 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:29:58:551:891 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:58:648:15 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:29:58:651:563 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 16:29:58:750:738 +Q8-T1 execute opt: 'COMMIT'; + Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 16:29:59:450:543 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..f8583c99 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,40 @@ +#### db_type: oracle #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:29:59:737:218 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:29:59:741:378 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:29:59:839:651 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 16:29:59:853:51 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 16:29:59:942:438 +Q8-T1 execute opt: 'COMMIT'; + Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-1 16:30:0:444:416 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..fc2ca433 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: oracle #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:30:0:705:681 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:30:0:709:55 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:30:0:805:740 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:30:0:809:595 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 16:30:0:907:378 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 16:30:0:911:685 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q8 failed at: 2022-4-1 16:30:4:783:302 + Q5 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 + Q5 failed at: 2022-4-1 16:35:57:631:453 +Q9 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q9 failed at: 2022-4-1 16:35:58:31:415 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource + diff --git a/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..a4abed1f --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: oracle #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:35:58:284:958 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:35:58:288:358 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:35:58:385:346 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 16:35:58:388:958 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 16:35:58:484:951 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 16:35:58:688:90 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 + Q8 failed at: 2022-4-1 16:36:1:856:719 + Q6 failed reason: [Oracle][ODBC][Ora]ORA-00060: deadlock detected while waiting for resource errcode: HY000 + Q6 failed at: 2022-4-1 16:36:1:878:242 +Q9 failed reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation errcode: HYT00 +Q9 failed at: 2022-4-1 16:36:1:967:429 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..42accfc3 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,42 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:48:540:493 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:48:543:956 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:48:640:660 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 16:28:48:744:878 + Q6-T2 execute opt: 'COMMIT'; + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 16:28:48:846:897 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-4-1 16:28:48:881:171 + Q9-T3 execute opt: 'COMMIT'; + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..bc226108 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,28 @@ +#### db_type: oracle #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:49:103:321 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:49:106:960 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:49:203:516 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:49:704:815 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..086bce78 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_full_write.txt @@ -0,0 +1,30 @@ +#### db_type: oracle #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:49:953:768 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:49:957:290 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:50:53:749 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 16:28:50:158:698 +Q6-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:50:560:360 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..ac73661c --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,30 @@ +#### db_type: oracle #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:50:805:245 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:50:808:927 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:50:905:314 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 16:28:51:8:229 +Q7-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:51:409:922 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b7f7a62c --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: oracle #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:53:768:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 16:28:53:772:672 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:53:871:663 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 16:28:53:975:58 +Q7-T1 execute opt: 'COMMIT'; + Q4 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-1 16:28:54:380:78 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..d64c73b7 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,37 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:51:658:447 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:28:51:661:926 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:51:758:473 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:28:51:762:5 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 16:28:52:460:906 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..95d17437 --- /dev/null +++ b/test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,37 @@ +#### db_type: oracle #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 16:28:52:714:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 16:28:52:718:224 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 16:28:52:814:515 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 16:28:52:822:498 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 failed reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-1 16:28:53:516:61 + +Test Result: Rollback +Reason: [Oracle][ODBC][Ora]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..87c03f25 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:32:401:585 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:32:403:435 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:32:501:494 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:32:503:219 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:32:504:575 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:32:510:361 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:15:32:604:426 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:32:605:345 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:32:607:235 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:32:608:195 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..c8acd739 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:32:824:681 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:32:826:602 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:32:924:641 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:32:926:494 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:32:927:884 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:32:930:155 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:15:33:25:474 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:33:27:529 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:33:29:336 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:33:30:77 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..0347f4fc --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:33:243:511 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:33:245:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:33:343:327 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:15:33:345:141 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:33:346:495 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:15:33:444:251 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:33:446:389 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:15:33:544:994 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:33:546:905 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:15:33:547:741 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..7d8765f8 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:34:610:592 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:34:612:529 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:34:710:256 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:15:34:712:166 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:34:713:450 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:34:715:292 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:15:34:811:149 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:34:813:915 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:34:815:974 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:34:816:979 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..305fb1ec --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:33:760:533 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 12:15:33:762:595 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 12:15:33:764:24 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:15:33:860:603 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 12:15:33:862:860 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 12:15:33:864:287 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:33:866:373 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:33:961:971 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 12:15:33:964:181 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 12:15:33:965:983 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:33:966:860 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..24715ca8 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:34:188:661 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 12:15:34:191:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:34:288:530 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 12:15:34:291:204 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 12:15:34:293:443 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:34:295:448 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 12:15:34:390:559 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:34:392:587 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 12:15:34:394:487 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:34:395:403 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..5121643e --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:35:34:208 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:15:35:36:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:35:134:234 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:15:35:136:436 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:15:35:238:48 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:15:35:240:247 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:15:35:335:196 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:15:35:435:181 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:15:35:540:451 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:35:637:61 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:35:735:855 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:35:835:871 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:15:35:838:316 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:35:839:361 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f03f01dd --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:39:345:19 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:39:347:373 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:39:444:972 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:39:447:84 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:39:449:254 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:15:39:545:205 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:15:39:547:509 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:15:39:548:908 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:39:550:921 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 12:15:39:646:164 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:15:39:647:258 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 12:15:39:649:318 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:15:39:650:208 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..7e4638d3 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:38:621:967 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:38:627:297 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:38:722:604 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:15:38:727:90 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:15:38:823:855 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 12:15:38:825:824 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:38:828:119 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:15:38:922:109 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:15:38:924:326 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:38:926:592 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 12:15:39:25:826 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:39:27:349 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 12:15:39:123:923 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 12:15:39:125:8 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:15:39:128:384 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:15:39:129:272 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..78e42920 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:36:55:698 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 12:15:36:57:868 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:36:155:703 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:15:36:157:925 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:15:36:255:871 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:15:36:258:535 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:15:36:356:595 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:15:36:460:299 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:15:36:556:740 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:36:658:426 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:36:757:261 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:36:857:220 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:15:36:859:67 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:36:859:892 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..dcee9a03 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:37:71:532 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:15:37:73:991 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:37:171:299 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 12:15:37:173:399 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:15:37:275:648 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 12:15:37:278:74 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 12:15:37:372:284 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 12:15:37:472:386 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 12:15:37:572:420 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:37:673:165 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:37:773:236 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:37:873:243 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:15:37:875:629 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:37:876:669 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..14fb9403 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:39:867:205 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:15:39:869:721 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 12:15:39:871:604 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:15:39:964:875 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 12:15:39:967:305 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 12:15:39:969:310 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:39:971:447 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:15:40:64:701 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 12:15:40:67:179 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:15:40:69:218 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:40:70:217 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 12:15:40:168:135 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 12:15:40:171:69 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 12:15:40:173:396 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 12:15:40:174:367 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..56c4c769 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:38:96:125 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 12:15:38:98:430 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:38:196:126 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 12:15:38:198:326 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:38:199:681 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:15:38:201:635 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 12:15:38:203:416 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:15:38:206:174 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 12:15:38:299:690 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 12:15:38:302:396 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 12:15:38:304:256 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 12:15:38:307:915 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 12:15:38:309:626 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:38:312:46 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 12:15:38:398:890 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 12:15:38:400:57 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 12:15:38:402:391 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 12:15:38:403:373 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/pg/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c6f39d64 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:31:982:116 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:15:31:983:961 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:32:82:135 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:32:84:182 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:32:86:263 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 12:15:32:182:993 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:32:185:324 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:15:32:186:903 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:32:187:669 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/pg/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..08927bdd --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:31:564:734 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:31:566:684 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:31:664:775 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:31:666:727 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:31:669:17 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:15:31:765:612 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:31:766:543 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:15:31:768:202 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:31:769:142 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:31:769:850 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..087be577 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:31:683:607 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:31:685:432 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:31:783:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:31:785:397 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:31:787:285 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:31:985:247 +Q6 finished at: 2022-4-1 12:13:31:985:231 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:32:85:274 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 12:13:32:87:380 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:32:88:165 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..6221fd06 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:32:302:90 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:32:303:780 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:32:402:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:32:403:981 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:32:405:363 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:32:407:9 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 12:13:32:504:719 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:32:506:976 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 12:13:32:509:25 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:32:509:632 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9f1fba42 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:32:722:716 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:32:724:466 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:32:822:569 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:32:824:291 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:13:32:923:630 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:32:925:587 + Q5 finished at: 2022-4-1 12:13:32:925:760 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:13:33:24:142 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:33:26:64 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:33:26:784 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..beb753a6 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:33:240:802 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:33:242:638 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:33:340:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:33:343:53 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:33:344:481 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:13:33:441:717 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:33:542:191 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:33:641:173 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:33:643:153 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:33:643:849 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..974cad2a --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:34:690:700 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:34:692:437 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:34:790:740 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:13:34:792:651 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:34:794:27 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:13:34:891:559 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:34:893:442 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:13:34:991:115 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:34:993:130 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:34:993:831 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..adac0bd3 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:35:212:441 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:35:214:284 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:35:312:642 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:13:35:314:861 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:35:316:534 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:35:317:556 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:13:35:413:134 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:35:414:923 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:35:417:85 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:35:418:40 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..10a2b8e1 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:33:857:220 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:13:33:859:148 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:33:957:182 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:33:958:812 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:33:960:103 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:33:961:627 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:13:34:58:66 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:34:58:881 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 12:13:34:60:645 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:34:61:355 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..40b3a27f --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:34:272:959 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:13:34:274:829 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:34:372:834 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 12:13:34:374:903 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 12:13:34:376:164 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:34:378:109 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:13:34:473:653 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:34:474:539 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 12:13:34:476:299 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:34:476:971 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..aa59cbe2 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:30:644:641 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:30:646:735 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:30:747:579 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:30:749:397 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:30:750:892 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:13:30:845:605 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:30:946:167 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:31:46:200 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:31:48:543 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:31:49:274 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..1e62aa23 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:31:263:708 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:31:265:452 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:31:363:785 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:31:365:729 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:31:367:163 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:31:369:83 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:13:31:464:741 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:31:466:719 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:31:468:697 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:31:469:461 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..f38b0e1f --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:35:633:783 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:35:635:588 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:35:733:874 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:35:736:106 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:13:35:737:917 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:13:35:834:32 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:13:35:835:824 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 12:13:35:837:645 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 12:13:35:935:826 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:35:937:828 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:36:35:748 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:36:135:569 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:13:36:138:155 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:36:138:855 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..4339ed91 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 12:13:36:354:416 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 12:13:36:357:400 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 12:13:36:454:432 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 12:13:36:456:602 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:13:36:554:398 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 12:13:36:557:367 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:13:36:559:828 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:13:36:654:418 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:13:36:656:302 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:13:36:757:734 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:13:36:856:182 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:36:956:172 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:13:37:54:850 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:37:55:893 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:13:37:58:362 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:13:37:59:217 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..f63df17f --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:37:274:988 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:37:276:697 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:37:379:635 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:37:381:673 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:13:37:383:761 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:13:37:475:229 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:13:37:477:291 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 12:13:37:479:722 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:13:37:576:395 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:37:578:574 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:37:676:991 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:37:776:659 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:13:37:778:720 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:37:779:552 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..0f67f4f1 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:37:990:639 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 12:13:37:992:362 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:38:90:582 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 12:13:38:92:541 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:13:38:94:527 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:13:38:190:648 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 12:13:38:192:451 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 12:13:38:194:495 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:13:38:292:74 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:38:294:254 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:38:392:197 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:38:492:755 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:13:38:495:51 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:38:495:858 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..7bcdb259 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: pg #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 13:3:43:967:775 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 13:3:43:969:445 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 13:3:44:67:772 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 13:3:44:69:802 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 13:3:44:168:62 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 13:3:44:268:202 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 13:3:44:270:31 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 13:3:44:270:663 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a30533c3 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:28:243:721 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:28:245:498 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:28:343:578 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:13:28:345:644 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 12:13:28:445:7 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:28:547:762 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:28:646:381 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:13:28:648:188 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:28:648:890 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..d2d0937d --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:28:873:868 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:28:875:842 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:28:961:888 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:13:28:963:893 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:28:964:742 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 12:13:29:64:544 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:29:66:562 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:13:29:68:379 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:29:69:176 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..e442c743 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:30:125:811 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:30:127:661 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:30:227:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:13:30:326:693 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:13:30:328:520 + Q4 finished at: 2022-4-1 12:13:30:328:872 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:30:428:930 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:30:430:870 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:30:431:602 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..6163c75d --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:27:627:212 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:27:629:571 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:27:727:463 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:27:729:856 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:13:27:828:234 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:27:928:875 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:28:27:734 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:28:29:734 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:28:30:493 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..f4d55bdc --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:29:283:575 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:13:29:285:648 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:29:383:514 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:29:385:902 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:29:387:641 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:13:29:485:146 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:29:486:95 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 12:13:29:487:835 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:29:488:617 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..bb6c8911 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:29:705:505 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:13:29:707:935 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:29:807:66 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 12:13:29:809:178 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:29:811:615 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:13:29:908:719 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:29:909:657 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 12:13:29:911:722 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:29:912:514 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..cd6565cc --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:42:242:459 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:42:244:787 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:42:344:861 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:42:346:632 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:13:42:443:182 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:42:445:162 + Q5 finished at: 2022-4-1 12:13:42:445:180 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:42:446:853 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:42:448:738 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:42:449:607 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..19c6a366 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:53:51:596:677 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:53:51:598:488 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:53:51:696:573 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:53:51:698:512 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:53:53:298:95 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:54:12:398:214 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..41a05b92 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:54:12:613:380 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:54:12:616:690 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:54:12:713:731 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:54:12:715:634 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:54:14:314:687 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:54:33:414:661 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..3aaf3e7a --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:54:33:630:626 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:54:33:632:376 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:54:33:730:591 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:54:33:732:353 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:54:35:332:22 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-1 12:54:54:532:33 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..c02179b5 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:14:45:819:34 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:14:45:821:65 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:14:45:919:9 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:14:45:920:784 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:14:45:922:219 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:14:46:120:578 + Q8 finished at: 2022-4-1 12:14:46:120:647 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:14:46:122:438 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:14:46:124:363 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:14:46:125:248 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..267d11dd --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:14:46:340:780 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:14:46:342:656 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:14:46:440:832 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:14:46:442:715 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:14:46:444:45 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:14:46:642:352 +Q6 finished at: 2022-4-1 12:14:46:642:361 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:14:46:742:499 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:14:46:744:484 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:14:46:745:386 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..982dbe25 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:14:46:959:513 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:14:46:961:406 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:14:47:59:713 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:14:47:61:887 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:14:47:160:399 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:14:47:162:522 + Q5 finished at: 2022-4-1 12:14:47:162:564 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:14:47:265:530 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:14:47:267:463 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:14:47:268:518 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..31a13c60 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:14:47:483:208 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:14:47:485:255 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:14:47:583:156 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:14:47:585:895 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:14:47:686:871 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:14:47:888:235 + Q5 finished at: 2022-4-1 12:14:47:888:320 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:14:47:890:323 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:14:47:892:240 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:14:47:893:150 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..c2b0a92d --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:14:48:106:842 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:14:48:108:841 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:14:48:207:196 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:14:48:209:574 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:14:48:307:696 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:14:48:309:606 + Q5 finished at: 2022-4-1 12:14:48:309:654 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:14:48:311:508 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:14:48:313:107 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:14:48:313:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..51174f83 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:54:54:749:448 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:54:54:751:282 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:54:54:849:460 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:54:54:851:285 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:54:54:949:421 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:54:54:951:458 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:54:56:753:380 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-1 12:55:15:550:781 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:55:15:950:816 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..49bb16a3 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:55:16:167:501 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:55:16:171:19 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:55:16:267:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:55:16:269:274 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:55:16:367:588 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:55:16:568:664 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:55:18:371:59 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-1 12:55:37:269:673 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:55:37:569:673 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..0566b5bf --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:38:711:313 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:38:713:111 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:38:811:338 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 12:13:38:911:625 + Q4 finished at: 2022-4-1 12:13:38:911:833 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:39:12:819 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:13:39:14:540 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:13:39:16:393 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:39:18:502 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..90158794 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:39:230:202 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:39:231:953 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:39:330:314 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 12:13:39:431:484 + Q4 finished at: 2022-4-1 12:13:39:431:492 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:39:531:553 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:13:39:533:197 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:13:39:534:757 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:39:536:989 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..4b520e8e --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:39:748:733 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:39:750:491 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:39:848:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 12:13:39:949:610 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-1 12:13:39:951:789 +Q6 finished at: 2022-4-1 12:13:39:951:802 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:40:50:178 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 12:13:40:51:787 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:40:52:654 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..61d241a7 --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:40:264:566 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:40:266:276 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:40:364:581 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 12:13:40:465:371 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:40:467:202 + Q4 finished at: 2022-4-1 12:13:40:467:240 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:40:468:828 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 12:13:40:470:339 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:40:471:105 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..34b4e77b --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:41:819:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:13:41:821:526 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:41:919:538 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:13:42:20:450 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:42:22:562 + Q4 finished at: 2022-4-1 12:13:42:22:942 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:42:24:990 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:42:26:632 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:42:27:534 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..ecd3f83a --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:40:683:898 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:13:40:685:608 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:40:783:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:40:785:780 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:40:985:563 +Q5 finished at: 2022-4-1 12:13:40:985:575 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:13:40:987:491 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:40:989:196 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:40:990:194 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..16d8cffc --- /dev/null +++ b/test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:41:202:143 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:13:41:203:964 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:41:302:211 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:41:303:982 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:41:503:505 +Q5 finished at: 2022-4-1 12:13:41:503:580 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:41:603:607 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:41:605:296 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:41:606:124 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..3ce6f981 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:18:874:277 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:18:876:157 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:18:974:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:18:975:907 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:18:977:324 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:18:979:648 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:13:19:75:247 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:19:76:146 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:19:77:984 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:19:78:977 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..c0e48b4d --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:19:292:702 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:19:294:633 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:19:392:677 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:13:19:394:645 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:19:396:57 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:19:397:912 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:13:19:493:422 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:19:495:750 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:19:497:573 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:19:498:625 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew.txt new file mode 100644 index 00000000..9f2d026d --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:19:712:976 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:19:714:967 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:19:812:942 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:13:19:814:933 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:19:816:245 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:13:19:913:842 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:19:916:49 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:13:20:14:634 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:20:16:701 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:13:20:17:671 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..99eff8ba --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:21:78:898 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:21:80:703 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:21:178:902 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:13:21:180:875 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:21:182:267 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:21:184:138 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:13:21:279:726 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:21:281:827 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:13:21:283:746 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:21:284:740 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..eec7713a --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:20:231:193 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 12:13:20:233:278 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 12:13:20:234:631 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:13:20:331:307 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 12:13:20:333:662 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 12:13:20:335:267 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:20:337:381 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:20:433:590 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 12:13:20:435:567 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 12:13:20:437:200 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:20:438:59 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..0aaa2c34 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:20:658:84 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 12:13:20:660:544 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:20:758:43 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 12:13:20:760:629 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 12:13:20:762:758 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:13:20:764:543 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 12:13:20:859:638 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:13:20:861:769 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 12:13:20:863:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:20:864:582 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat.txt new file mode 100644 index 00000000..35312631 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:21:500:387 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:13:21:502:483 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:21:600:534 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:13:21:602:795 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:13:21:700:494 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:13:21:702:825 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:13:21:801:343 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:13:21:901:605 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:13:22:4:820 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:22:102:289 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:22:202:177 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:22:302:265 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:13:22:304:553 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:22:305:597 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..fb1d1040 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:25:845:437 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:25:847:527 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:25:945:343 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:25:947:139 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:25:950:137 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:13:26:45:322 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:13:26:47:580 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:13:26:48:921 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:26:51:750 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 12:13:26:146:586 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:13:26:147:676 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 12:13:26:149:893 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:13:26:151:135 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..11f2dd88 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:25:107:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:25:110:480 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:25:207:939 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:13:25:210:765 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:13:25:308:176 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 12:13:25:310:81 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:25:312:398 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:13:25:408:878 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:13:25:410:648 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:25:412:620 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 12:13:25:509:818 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:25:511:39 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 12:13:25:609:715 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 12:13:25:610:831 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:13:25:614:38 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:13:25:614:835 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b07fee56 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:22:523:278 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 12:13:22:525:460 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:22:624:0 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:13:22:626:199 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:13:22:723:353 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:13:22:725:758 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:13:22:824:448 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:13:22:924:247 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:13:23:24:176 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:23:125:422 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:23:225:390 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:23:325:380 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:13:23:327:271 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:23:328:198 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..53f590cc --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:23:540:432 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:13:23:542:520 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:23:640:422 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 12:13:23:642:486 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:13:23:740:508 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 12:13:23:742:793 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 12:13:23:841:279 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 12:13:23:941:322 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 12:13:24:41:375 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:13:24:142:85 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:24:242:283 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:13:24:343:61 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:13:24:345:228 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:24:346:218 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..fc928097 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:26:365:789 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:13:26:367:932 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 12:13:26:369:639 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:13:26:465:715 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 12:13:26:467:938 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 12:13:26:469:429 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:13:26:471:661 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:13:26:565:885 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 12:13:26:568:286 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:13:26:570:90 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:13:26:571:220 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 12:13:26:666:572 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 12:13:26:668:571 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 12:13:26:670:631 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 12:13:26:671:621 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..e1c3f303 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:24:582:65 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 12:13:24:584:560 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:24:681:941 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 12:13:24:684:141 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:13:24:685:573 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:13:24:687:424 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 12:13:24:688:730 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:13:24:690:625 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 12:13:24:783:875 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 12:13:24:786:107 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 12:13:24:787:491 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 12:13:24:789:250 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 12:13:24:790:686 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:13:24:792:629 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 12:13:24:883:344 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 12:13:24:884:485 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 12:13:24:886:877 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 12:13:24:887:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..70317dba --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:18:449:139 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:13:18:451:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:18:548:810 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:18:550:626 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:18:552:895 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 12:13:18:649:935 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:18:652:534 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:18:654:140 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:18:655:23 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..3efc3297 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:13:18:29:425 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:13:18:31:408 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:13:18:129:675 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:13:18:131:932 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:13:18:134:586 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:13:18:232:299 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:13:18:233:147 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:13:18:234:664 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:13:18:235:608 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:13:18:236:289 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..ac687bcd --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:37:127:607 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:37:129:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:37:227:679 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:37:229:525 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:37:230:922 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:11:37:429:129 +Q6 finished at: 2022-4-1 12:11:37:429:220 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:37:529:228 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 12:11:37:531:411 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:37:532:131 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..14b0e04c --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:37:745:654 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:37:747:821 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:37:845:806 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:37:847:724 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:37:849:183 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:37:851:200 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 12:11:37:946:785 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:37:948:737 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 12:11:37:950:706 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:37:951:480 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..29d8216f --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:38:165:404 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:38:167:471 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:38:265:318 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:38:267:155 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:11:38:366:478 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:38:368:901 +Q7 finished at: 2022-4-1 12:11:38:368:916 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:11:38:467:4 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:38:469:166 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:38:469:842 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew.txt new file mode 100644 index 00000000..1e57890e --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:38:683:509 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:11:38:685:555 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:38:784:132 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:38:786:68 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:11:38:787:445 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:11:38:884:676 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:11:38:989:47 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:39:87:875 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:39:89:877 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:39:90:641 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2.txt new file mode 100644 index 00000000..5a1d7beb --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:40:139:197 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:40:140:895 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:40:239:145 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:11:40:240:948 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:40:242:284 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:11:40:340:133 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:40:342:287 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:11:40:439:518 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:40:441:500 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:40:442:206 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..1e78d925 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:40:669:679 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:40:671:771 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:40:756:106 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:11:40:757:982 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:40:759:580 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:40:760:378 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:11:40:856:844 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:40:859:109 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:40:860:893 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:40:861:604 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..3b0f325e --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:39:304:982 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:11:39:306:828 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:39:405:118 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:39:407:47 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:11:39:408:649 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:39:410:740 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:11:39:506:75 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:39:506:996 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 12:11:39:508:732 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:39:509:410 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..c282028a --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:39:720:994 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:11:39:723:46 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:39:820:915 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 12:11:39:822:686 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 12:11:39:824:10 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:39:825:568 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:11:39:921:778 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:39:922:706 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 12:11:39:924:524 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:39:925:235 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..9ce9a473 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:36:85:701 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:36:87:536 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:36:186:30 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:36:187:940 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:36:189:525 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:11:36:286:913 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:11:36:387:537 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:36:488:887 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:36:491:74 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:36:491:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..9e9d7d02 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:36:707:197 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:36:709:94 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:36:807:179 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:36:809:174 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:36:810:611 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:36:812:616 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:11:36:908:111 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:36:911:108 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:36:913:6 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:36:913:713 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat.txt new file mode 100644 index 00000000..a6bcead2 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:41:79:203 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:41:80:993 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:41:179:282 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:41:181:55 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:11:41:182:810 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:11:41:279:206 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:11:41:281:97 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 12:11:41:282:904 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 12:11:41:380:372 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:11:41:382:698 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:11:41:480:840 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:11:41:580:679 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:11:41:583:360 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:11:41:584:167 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..fdfe21f0 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 12:11:41:801:566 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 12:11:41:804:574 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 12:11:41:901:585 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 12:11:41:903:610 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:11:42:1:606 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 12:11:42:4:520 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:11:42:7:86 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:11:42:101:758 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:11:42:103:573 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:11:42:205:395 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:11:42:303:253 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:11:42:403:406 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:11:42:505:812 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:11:42:506:942 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:11:42:509:838 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:11:42:510:852 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c63cf529 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:42:729:188 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:42:730:850 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:42:829:160 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:42:831:69 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:11:42:833:267 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:11:42:929:144 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:11:42:930:862 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 12:11:42:932:925 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:11:43:32:911 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:11:43:34:986 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:11:43:132:488 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:11:43:230:774 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:11:43:232:916 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:11:43:233:790 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..36f480aa --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:43:446:747 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 12:11:43:448:616 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:43:547:499 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 12:11:43:549:355 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:11:43:551:395 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:11:43:646:963 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 12:11:43:649:12 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 12:11:43:651:198 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:11:43:752:888 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:11:43:754:901 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:11:43:848:945 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:11:43:948:568 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:11:43:951:370 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:11:43:952:465 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_dirty_read.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_dirty_read.txt new file mode 100644 index 00000000..5270f4dc --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: pg #### +#### test_type: sda_dirty_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 13:3:43:392:354 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 13:3:43:394:79 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 13:3:43:492:302 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 13:3:43:494:302 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 13:3:43:592:563 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 13:3:43:692:689 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 13:3:43:694:331 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 13:3:43:695:70 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a3e18830 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:33:683:668 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:33:685:426 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:33:783:648 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:11:33:785:482 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 12:11:33:884:805 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:33:984:50 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:34:85:233 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:11:34:86:854 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:34:87:481 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..24463f91 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:34:301:182 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:34:302:962 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:34:401:46 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:11:34:403:14 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:34:403:814 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 12:11:34:502:44 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:34:504:137 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:11:34:505:813 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:34:506:585 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_lost_self_update.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..19aef99c --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:35:561:888 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:35:563:809 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:35:661:814 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:11:35:763:871 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:11:35:766:31 + Q4 finished at: 2022-4-1 12:11:35:766:54 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:11:35:868:841 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:11:35:870:588 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:35:871:242 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..d77b17c7 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:33:64:842 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:11:33:66:715 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:33:165:51 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:11:33:167:145 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:11:33:268:258 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:33:366:483 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:33:467:804 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:11:33:469:621 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:33:470:278 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..ea2d1f5b --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:34:725:936 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:11:34:727:831 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:34:826:42 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:11:34:827:963 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:34:829:810 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:11:34:927:39 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:34:928:132 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 12:11:34:929:855 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:34:930:556 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..8fe99ad8 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:35:142:316 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:11:35:144:77 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:35:242:352 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 12:11:35:244:417 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:35:246:337 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:11:35:345:606 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:35:346:440 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 12:11:35:348:233 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:35:349:15 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..dde0ad75 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:47:710:880 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:47:712:616 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:47:810:983 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:11:47:813:0 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:11:47:911:686 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:11:47:913:695 + Q5 finished at: 2022-4-1 12:11:47:913:762 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:47:915:415 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:11:47:917:107 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:11:47:917:941 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..b0c09ebc --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:52:5:345:218 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:52:5:347:204 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:52:5:444:983 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:52:5:447:95 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:52:7:46:459 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:52:26:146:514 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..8eadeb1a --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:52:26:360:482 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:52:26:362:188 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:52:26:460:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:52:26:462:351 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:52:28:61:742 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:52:47:161:836 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..ff4eaae0 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:52:47:377:374 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:52:47:379:359 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:52:47:477:445 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:52:47:479:296 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:52:49:80:735 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-1 12:53:8:280:767 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5f89b953 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:12:32:290:462 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:12:32:292:248 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:12:32:390:493 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:12:32:392:399 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:12:32:393:801 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:12:32:592:212 +Q6 finished at: 2022-4-1 12:12:32:592:264 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:12:32:594:162 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:12:32:596:46 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:12:32:596:808 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..dc4965f1 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:12:32:811:213 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:12:32:813:451 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:12:32:911:143 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:12:32:913:224 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:12:32:914:834 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:12:33:112:978 +Q6 finished at: 2022-4-1 12:12:33:112:990 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:12:33:217:90 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:12:33:219:199 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:12:33:220:348 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9b835878 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:12:33:434:455 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:12:33:436:289 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:12:33:534:425 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:12:33:536:450 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:12:33:635:455 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:12:33:637:452 + Q5 finished at: 2022-4-1 12:12:33:637:529 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:12:33:735:853 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:12:33:737:752 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:12:33:738:605 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..0b5e43ef --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:12:33:952:48 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:12:33:954:42 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:12:34:52:25 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:12:34:53:816 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:12:34:152:762 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:12:34:353:498 + Q5 finished at: 2022-4-1 12:12:34:353:529 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:12:34:355:292 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:12:34:357:196 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:12:34:358:33 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..d464783e --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:12:34:571:705 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:12:34:573:692 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:12:34:671:700 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:12:34:674:140 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:12:34:772:551 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:12:34:774:756 + Q5 finished at: 2022-4-1 12:12:34:774:774 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:12:34:776:756 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:12:34:778:535 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:12:34:779:410 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..c2c98cd4 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:53:8:498:367 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:53:8:500:194 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:53:8:598:250 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:53:8:600:0 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:53:8:698:311 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:53:8:700:269 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:53:10:502:160 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-1 12:53:29:300:710 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:53:29:700:693 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..e23656f3 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:53:29:918:127 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:53:29:920:168 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:53:30:18:37 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:53:30:20:28 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:53:30:118:19 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:53:30:319:36 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:53:32:120:859 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-1 12:53:51:19:508 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:53:51:319:662 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..7e461b4d --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:44:165:883 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:44:167:607 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:44:265:913 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 12:11:44:366:216 +Q5 finished at: 2022-4-1 12:11:44:366:257 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:44:469:0 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:11:44:470:555 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:11:44:472:383 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:44:474:551 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..a013b6c7 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:44:688:607 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:44:690:511 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:44:788:564 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 12:11:44:890:216 + Q4 finished at: 2022-4-1 12:11:44:890:261 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:44:989:921 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:11:44:991:578 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:11:44:993:84 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:44:995:368 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write.txt new file mode 100644 index 00000000..57f7d3a4 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_full_write #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:45:207:615 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:45:209:372 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:45:307:593 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 12:11:45:411:158 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:11:45:413:4 + Q4 finished at: 2022-4-1 12:11:45:413:94 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:11:45:509:320 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 12:11:45:510:943 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:45:511:728 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..7b5290d7 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_full_write_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:45:724:545 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:45:726:302 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:45:824:557 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 12:11:45:925:371 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:45:927:582 + Q4 finished at: 2022-4-1 12:11:45:927:622 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:45:929:240 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 12:11:45:930:807 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:45:931:546 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..722d004e --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:47:290:538 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:11:47:292:364 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:47:390:554 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:11:47:491:740 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:47:493:620 + Q4 finished at: 2022-4-1 12:11:47:493:671 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:11:47:495:340 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:11:47:496:874 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:47:497:652 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f98b8994 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:46:143:597 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:11:46:145:411 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:46:243:654 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:11:46:245:469 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 12:11:46:445:221 + Q7 finished at: 2022-4-1 12:11:46:445:276 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:11:46:447:86 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:11:46:448:844 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:46:449:720 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..aeb40283 --- /dev/null +++ b/test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:11:46:662:248 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:11:46:664:21 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:11:46:762:156 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:11:46:764:48 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:11:46:964:275 +Q5 finished at: 2022-4-1 12:11:46:964:325 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:11:47:64:45 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:11:47:65:717 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:11:47:66:810 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..59c8319f --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:53:726:787 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:53:728:566 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:53:826:735 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:17:53:828:416 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:53:829:723 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:17:53:831:833 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:17:53:929:625 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:53:930:562 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:17:53:932:353 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:17:53:933:149 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..607cbb26 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:54:147:592 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:54:149:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:54:247:524 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:17:54:249:409 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:54:250:830 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:17:54:253:63 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q7 failed at: 2022-4-1 12:17:55:48:614 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..ce51c196 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:55:264:291 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:55:266:212 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:55:364:239 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:17:55:366:76 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:55:367:507 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:17:55:465:127 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:17:55:467:209 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:17:55:566:921 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:17:55:568:913 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:17:55:569:850 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..2489c1c4 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:56:634:531 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:56:636:535 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:56:734:444 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:17:56:736:474 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:56:737:811 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:17:56:739:851 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:17:56:835:262 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:56:838:875 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:17:56:840:742 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:17:56:841:572 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..19124eaa --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:55:782:319 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 12:17:55:784:368 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 12:17:55:785:705 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:17:55:882:819 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 12:17:55:884:840 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 12:17:55:886:178 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:17:55:888:340 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:55:983:853 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 12:17:55:985:825 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 12:17:55:987:456 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:17:55:988:242 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..14f740af --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:56:212:638 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 12:17:56:215:518 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:56:312:597 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 12:17:56:315:662 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 12:17:56:317:836 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:17:56:319:972 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 12:17:56:414:805 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:56:417:76 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 12:17:56:418:836 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:17:56:419:749 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..dc16636a --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:57:65:129 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:17:57:67:296 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:57:165:28 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:17:57:167:175 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:17:57:265:90 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:17:57:267:209 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:17:57:365:970 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:17:57:465:901 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:17:57:566:75 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:17:57:666:498 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:17:57:767:137 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:17:57:866:576 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:17:57:868:894 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:17:57:869:755 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..9f330781 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:1:366:871 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:1:369:38 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:1:466:830 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:18:1:468:803 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:18:1:471:323 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:18:1:566:908 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:18:1:569:373 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:18:1:570:855 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:1:573:256 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 12:18:1:667:965 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:18:1:669:68 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 12:18:1:671:283 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:18:1:672:234 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c54d45e2 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:0:642:496 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:0:645:485 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:0:742:528 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:0:745:592 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:18:0:842:812 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 12:18:0:844:709 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:0:847:130 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:18:0:943:680 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:18:0:945:674 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:0:948:270 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 12:18:1:44:573 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:18:1:45:718 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 12:18:1:144:339 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 12:18:1:145:360 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:18:1:148:778 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:18:1:149:613 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..3ebb0376 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:58:85:192 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 12:17:58:87:388 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:58:185:244 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:17:58:187:551 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:17:58:285:202 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:17:58:287:245 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:17:58:385:853 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:17:58:486:30 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:17:58:586:144 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:17:58:686:838 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:17:58:786:869 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:17:58:887:80 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:17:58:889:55 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:17:58:889:919 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..ccf57854 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:59:100:730 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:17:59:103:32 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:59:200:722 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 12:17:59:202:842 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:17:59:300:730 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 12:17:59:303:218 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 12:17:59:401:544 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 12:17:59:501:479 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 12:17:59:601:375 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:17:59:702:493 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:17:59:802:408 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:17:59:902:382 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:17:59:904:629 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:17:59:905:543 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..b5ea01cd --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:1:887:243 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:18:1:889:419 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 12:18:1:891:207 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:18:1:987:277 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 12:18:1:989:655 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 12:18:1:991:604 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:1:993:872 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:18:2:87:686 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 12:18:2:89:999 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:18:2:91:827 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:18:2:92:725 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 12:18:2:192:865 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 12:18:2:196:518 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 12:18:2:198:769 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 12:18:2:199:757 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..f749edd2 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:0:121:42 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 12:18:0:123:326 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:0:220:984 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 12:18:0:223:771 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:18:0:225:196 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:18:0:226:915 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 12:18:0:228:312 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:18:0:230:296 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 12:18:0:321:83 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 12:18:0:323:443 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 12:18:0:325:34 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 12:18:0:327:263 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 12:18:0:328:850 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:18:0:331:556 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 12:18:0:422:416 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 12:18:0:423:520 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 12:18:0:425:951 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 12:18:0:426:940 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/pg/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..6546a8b0 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:52:708:397 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:17:52:710:337 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:52:808:357 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:17:52:810:118 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:17:52:812:180 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:17:53:510:68 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/pg/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..0278209c --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:52:282:633 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:52:284:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:52:382:613 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:17:52:384:249 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:17:52:386:410 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:17:52:483:410 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:17:52:484:270 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:17:52:485:734 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:17:52:486:754 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:17:52:487:422 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c6199cf4 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:45:502:972 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:45:504:791 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:45:602:934 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:45:604:756 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:45:606:272 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:45:804:355 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:15:46:404:616 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..44827b1d --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:46:619:789 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:46:621:662 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:46:719:888 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:46:721:919 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:46:723:427 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:46:725:363 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q7 failed at: 2022-4-1 12:15:47:524:304 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..aa998264 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:47:738:992 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:47:741:29 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:47:838:907 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:47:840:657 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:15:47:939:919 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:47:944:170 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:15:48:444:513 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..e99ee2f1 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:48:662:572 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:48:664:429 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:48:762:558 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:48:764:447 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:48:765:761 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:15:48:863:670 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:48:964:69 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:49:62:853 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:49:64:816 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:49:65:500 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..4242da91 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:50:112:652 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:50:114:485 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:50:212:706 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:15:50:214:648 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:50:216:120 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:15:50:313:518 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:50:315:255 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:15:50:413:91 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:50:415:92 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:50:415:798 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..8d8a7c95 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:50:629:833 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:50:631:572 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:50:729:841 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:15:50:732:96 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:50:733:643 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:50:734:471 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:15:50:830:766 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:50:835:204 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:50:837:336 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:50:838:84 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..b8a97057 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:49:279:222 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:15:49:280:964 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:49:379:550 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:49:381:644 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:15:49:383:121 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:49:385:302 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:15:49:480:251 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:49:481:44 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 12:15:49:482:658 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:49:483:338 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..4b7fc5d4 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:49:694:406 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:15:49:696:305 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:49:794:413 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 12:15:49:796:266 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 12:15:49:797:572 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:49:799:434 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:15:49:895:384 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:49:896:317 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 12:15:49:898:28 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:49:898:709 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..3978abe8 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:44:463:852 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:44:465:766 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:44:563:893 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:44:565:836 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:44:567:666 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:15:44:665:220 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:44:765:875 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:44:865:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:44:867:354 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:44:868:67 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..7dcab273 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:45:81:709 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:45:83:440 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:45:181:653 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:45:183:411 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:45:184:822 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:45:186:752 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:15:45:282:655 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:15:45:284:725 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:15:45:286:590 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:15:45:287:303 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..bbe0e148 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:51:54:73 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:51:55:855 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:51:154:124 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:51:155:932 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:15:51:157:798 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:15:51:254:95 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:15:51:255:945 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 12:15:51:257:800 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 12:15:51:355:626 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:51:357:595 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:51:457:314 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:51:555:689 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:15:51:558:403 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:51:559:105 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..90090ad0 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 12:15:51:772:701 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 12:15:51:775:929 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 12:15:51:875:762 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 12:15:51:878:28 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:15:51:972:825 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 12:15:51:976:134 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:15:51:978:743 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:15:52:72:924 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:15:52:74:717 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:15:52:174:894 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:15:52:274:192 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:52:374:464 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:15:52:473:257 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:52:474:475 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:15:52:476:999 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:15:52:477:905 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c0139d5d --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:52:694:967 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:52:696:662 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:52:794:920 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:15:52:796:761 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:15:52:798:790 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:15:52:894:927 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:15:52:896:680 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 12:15:52:898:876 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:15:52:996:469 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:52:999:908 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:53:96:543 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:53:196:636 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 12:15:53:198:578 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:53:199:458 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..297f2af5 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:53:410:930 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 12:15:53:412:642 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:53:511:78 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 12:15:53:512:909 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:15:53:515:58 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:15:53:610:951 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 12:15:53:612:751 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 12:15:53:614:665 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:15:53:712:679 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:15:53:714:893 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:15:53:812:700 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:15:53:912:467 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 12:15:53:914:817 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:15:53:915:653 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..179e61b6 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: pg #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 13:3:44:536:325 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 13:3:44:538:75 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 13:3:44:636:309 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 13:3:44:638:282 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 13:3:44:736:632 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 13:3:44:836:707 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 13:3:44:838:449 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 13:3:44:839:183 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..088cffae --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:41:776:895 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:41:778:606 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:41:876:697 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:15:41:878:827 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 12:15:41:977:560 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:42:77:77 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:42:178:128 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:15:42:180:107 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:42:180:883 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..fb07dea7 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:42:394:92 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:42:395:933 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:42:494:92 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:15:42:496:65 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:42:496:870 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 12:15:42:596:356 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:42:598:273 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:15:42:600:109 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:42:600:896 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6011588f --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:43:645:454 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:43:647:213 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:43:745:507 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:15:43:846:458 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:15:43:848:450 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:15:44:248:807 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7983b0ec --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:41:158:876 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:15:41:160:636 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:41:258:813 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:41:260:488 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:15:41:359:768 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:41:463:570 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:41:559:318 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:15:41:561:72 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:41:561:994 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..e72ce827 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:42:813:447 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:15:42:815:274 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:42:913:481 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:42:915:737 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:42:917:740 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:15:43:14:765 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:43:15:637 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 12:15:43:17:236 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:43:18:29 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..0c0bc443 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:43:229:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:15:43:231:178 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:43:329:416 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 12:15:43:331:309 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:15:43:333:251 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:15:43:430:398 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:43:431:340 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 12:15:43:432:852 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:43:433:545 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..851bff66 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:59:968:10 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:59:969:932 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:16:0:67:927 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:16:0:69:724 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:16:0:168:801 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:16:0:170:850 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:16:0:671:124 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..39a12099 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:55:37:859:67 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:55:37:860:901 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:55:37:958:968 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:55:37:960:861 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:55:39:560:236 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:55:58:660:389 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..c392e625 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:55:58:875:83 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:55:58:876:921 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:55:58:975:92 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:55:58:976:778 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:56:0:576:289 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:56:19:676:454 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..c6f63bf4 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:56:19:892:394 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:56:19:894:354 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:56:19:992:307 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:56:19:994:431 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:56:21:594:661 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-1 12:56:40:794:692 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..d1c06f02 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:4:43:547 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:4:45:525 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:4:143:620 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:17:4:145:653 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:4:147:225 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:17:4:345:46 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:17:4:945:635 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..b951e23e --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:5:160:578 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:17:5:162:389 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:5:260:550 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:17:5:262:666 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:17:5:263:996 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:17:5:462:273 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:17:6:62:476 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..1152c0f5 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:6:281:827 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:17:6:283:967 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:6:382:79 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:17:6:384:254 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:17:6:483:101 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:17:6:486:43 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:17:6:986:311 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..1eb4715b --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:7:203:614 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:17:7:205:440 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:7:303:524 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:17:7:305:364 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:17:7:404:475 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:7:604:981 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:17:8:105:247 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..983a9f39 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:17:8:324:754 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:17:8:326:586 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:17:8:427:506 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:17:8:429:346 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:17:8:525:690 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:17:8:527:967 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:17:9:28:254 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..c4241d60 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:56:41:11:774 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:56:41:13:612 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:56:41:111:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:56:41:113:663 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:56:41:211:924 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:56:41:214:80 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:56:43:16:166 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-1 12:57:1:813:169 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:57:2:213:183 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..f8b76bf6 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:57:2:431:645 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:57:2:433:507 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:57:2:531:722 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:57:2:533:501 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:57:2:631:779 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:57:2:832:895 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:57:4:634:754 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-1 12:57:23:536:668 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:57:23:836:689 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..7eea8458 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:54:128:836 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:54:130:894 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:54:228:564 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-1 12:15:54:329:217 +Q5 finished at: 2022-4-1 12:15:54:329:213 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:54:433:106 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:15:54:434:884 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:15:54:436:955 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:15:54:439:132 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..fc35eb99 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,30 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:54:652:168 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:54:653:994 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:54:755:634 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 12:15:54:856:810 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:15:55:257:377 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..1d06ff56 --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,32 @@ +#### db_type: pg #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:55:472:711 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:55:474:704 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:55:572:705 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 12:15:55:673:518 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:15:55:675:756 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:15:56:76:100 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..3fa7c30e --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,32 @@ +#### db_type: pg #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:56:293:648 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:56:295:780 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:56:393:594 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 12:15:56:494:409 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:56:496:699 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:15:56:896:921 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..47759c5a --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:59:147:961 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:15:59:149:705 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:59:247:951 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:15:59:348:888 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:15:59:350:881 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:15:59:751:156 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..a94a0ecc --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:57:110:833 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:15:57:113:61 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:57:211:555 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:57:213:575 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:15:57:413:259 +Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q5 failed at: 2022-4-1 12:15:57:913:583 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..0d1f5f7d --- /dev/null +++ b/test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:15:58:130:714 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:15:58:132:564 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:15:58:230:741 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:15:58:232:529 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:15:58:432:245 +Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q5 failed at: 2022-4-1 12:15:58:932:533 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/pg/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/pg/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/pg/result_summary/read-uncommitted_total-result.txt b/test_result/centralizend_result/pg/result_summary/read-uncommitted_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/pg/result_summary/read-uncommitted_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/pg/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/pg/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/centralizend_result/pg/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/pg/result_summary/serializable_total-result.txt b/test_result/centralizend_result/pg/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..4ce755ba --- /dev/null +++ b/test_result/centralizend_result/pg/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/pg/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..e907fb35 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:42:255:370 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:42:257:217 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:42:355:359 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:19:42:357:161 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:19:42:358:422 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:19:42:360:525 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:19:42:456:305 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:19:42:457:339 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:19:42:459:359 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:19:42:460:338 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/pg/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..dd6d0f59 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:42:673:950 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:42:675:838 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:42:774:35 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:19:42:775:746 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:19:42:777:57 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:19:42:779:145 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q7 failed at: 2022-4-1 12:19:43:576:976 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..e6bcced0 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:43:792:864 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:43:794:880 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:43:892:846 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:19:43:894:686 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:19:43:896:60 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:19:43:993:705 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:19:43:995:870 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q8 failed at: 2022-4-1 12:19:44:893:395 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a3a4d1fb --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:47:447:347 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:47:449:231 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:47:547:312 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:19:47:549:56 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:19:47:550:322 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:19:47:552:306 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions; errcode: 40001 +Q7 failed at: 2022-4-1 12:19:48:348:527 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to read/write dependencies among transactions; + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..c13f6216 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:45:106:110 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 12:19:45:108:508 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 12:19:45:109:954 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:19:45:206:112 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 12:19:45:208:319 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 12:19:45:209:715 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:19:45:211:685 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 +Q8 failed at: 2022-4-1 12:19:46:106:465 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..81e32681 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: pg #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:46:328:845 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 12:19:46:331:767 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:46:428:774 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 12:19:46:431:529 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 12:19:46:433:712 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:19:46:435:592 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions; errcode: 40001 +Q7 failed at: 2022-4-1 12:19:47:230:914 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to read/write dependencies among transactions; + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..b61a3fa8 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat.txt @@ -0,0 +1,91 @@ +#### db_type: pg #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:48:565:498 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:19:48:568:11 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:48:665:469 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:19:48:667:741 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:19:48:765:475 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:19:48:767:738 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:19:48:866:944 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:19:48:966:727 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:19:49:68:919 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:19:49:166:942 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:19:49:367:765 + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:19:50:366:27 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..d97c6b28 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:56:64:829 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:56:67:38 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:56:165:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:19:56:167:468 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:19:56:170:176 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:19:56:264:982 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:19:56:267:460 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:19:56:269:48 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:19:56:271:275 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 12:19:56:368:859 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:19:56:370:198 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 12:19:56:372:615 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:19:56:373:550 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a3f2fe0b --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:55:337:133 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:55:344:108 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:55:438:51 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:19:55:441:397 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:19:55:537:248 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 12:19:55:539:937 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:19:55:543:367 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:19:55:638:107 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:19:55:640:468 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:19:55:643:87 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 12:19:55:741:952 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:19:55:743:121 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 12:19:55:842:251 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 12:19:55:843:603 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:19:55:847:606 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:19:55:848:483 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..4b4ddf7b --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,91 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:50:581:675 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 12:19:50:584:115 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:50:681:686 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:19:50:683:888 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:19:50:787:605 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:19:50:789:859 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 12:19:50:882:485 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 12:19:50:982:639 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 12:19:51:85:338 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:19:51:183:467 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:19:51:383:443 + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:19:52:382:536 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..338223ae --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,89 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:52:594:378 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 12:19:52:596:658 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:52:694:325 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 12:19:52:696:426 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:19:52:794:387 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 12:19:52:796:524 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 12:19:52:895:328 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 12:19:52:996:319 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 12:19:53:95:303 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:19:53:196:228 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:19:54:394:961 + Q12 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q12 failed at: 2022-4-1 12:19:54:595:410 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..1859a146 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:56:590:83 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:19:56:592:434 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 12:19:56:594:199 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-1 12:19:56:690:0 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 12:19:56:692:379 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 12:19:56:693:863 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:19:56:696:302 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:19:56:790:89 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 12:19:56:792:498 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:19:56:794:368 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 12:19:56:795:298 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions; errcode: 40001 +Q12 failed at: 2022-4-1 12:19:58:92:536 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to read/write dependencies among transactions; + diff --git a/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..26627ee1 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: pg #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:54:814:159 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 12:19:54:816:573 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:54:915:757 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 12:19:54:918:245 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:19:54:919:965 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 12:19:54:921:773 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 12:19:54:923:462 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:19:54:925:701 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-1 12:19:55:14:886 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 12:19:55:18:941 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 12:19:55:20:670 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 12:19:55:22:731 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 12:19:55:24:250 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:19:55:26:245 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 12:19:55:116:576 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 12:19:55:117:618 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 12:19:55:120:85 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 12:19:55:121:22 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/pg/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..dc7e895f --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:41:237:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:19:41:239:725 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:41:337:484 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:19:41:339:386 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:19:41:341:160 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:19:42:39:534 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/pg/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..bc9a59d5 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:19:40:811:445 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:19:40:813:466 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:19:40:911:520 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:19:40:913:555 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:19:40:915:855 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:19:41:12:429 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:19:41:13:414 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:19:41:15:829 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:19:41:16:881 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:19:41:17:855 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..e1aac0ed --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:9:35:589 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:9:37:507 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:9:135:551 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:9:137:546 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:9:139:125 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:9:337:264 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:18:9:937:613 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..abe70179 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:10:154:65 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:10:155:984 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:10:253:878 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:10:255:716 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:10:257:227 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:10:259:89 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions; errcode: 40001 +Q7 failed at: 2022-4-1 12:18:11:55:100 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to read/write dependencies among transactions; + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..0b524ea3 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:11:272:556 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:11:274:789 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:11:372:260 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:11:374:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:18:11:473:347 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:11:475:628 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:18:11:975:992 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..3f0a89d3 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:12:192:188 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:12:194:398 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:12:295:536 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:12:297:286 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:18:12:298:592 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:18:12:392:734 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:12:497:229 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:12:592:240 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:18:12:594:361 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:12:595:88 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..164c947f --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:13:649:454 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:13:651:140 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:13:749:543 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:13:751:509 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:13:753:138 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:18:13:850:300 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:13:852:244 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:18:13:949:756 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:18:13:951:798 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:13:952:560 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..adb75a8c --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:14:167:354 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:14:169:194 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:14:267:308 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:14:269:207 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:14:270:614 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:14:271:381 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:18:14:368:120 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:14:370:45 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 12:18:14:371:951 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:14:372:687 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..a8b5f42c --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:12:808:849 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:18:12:810:762 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:12:908:897 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:12:910:575 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:18:12:911:874 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:12:913:689 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:18:13:9:898 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:13:10:721 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 12:18:13:12:376 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:13:13:86 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..d310e138 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: pg #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:13:225:426 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 12:18:13:227:413 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:13:325:497 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 12:18:13:327:433 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 12:18:13:328:677 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:13:330:725 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 12:18:13:428:748 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:13:430:23 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 12:18:13:432:390 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 12:18:13:433:220 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..aa4bede4 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,51 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:6:501:356 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:6:503:53 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:6:601:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:6:603:166 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:6:604:500 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 12:18:6:702:312 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:6:802:775 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 +Q8 failed at: 2022-4-1 12:18:7:701:797 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..76ee9dd9 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:7:916:260 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:7:918:244 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:8:16:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:8:18:548 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:8:20:34 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:8:21:767 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions; errcode: 40001 +Q7 failed at: 2022-4-1 12:18:8:817:371 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to read/write dependencies among transactions; + diff --git a/test_result/centralizend_result/pg/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..ab8c38a8 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat.txt @@ -0,0 +1,91 @@ +#### db_type: pg #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:14:588:520 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:14:590:366 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:14:688:451 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:14:690:303 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 12:18:14:692:159 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:18:14:791:471 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:18:14:793:409 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 12:18:14:795:66 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 12:18:14:890:143 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:18:14:892:360 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:18:15:90:427 + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:18:16:89:424 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..33cbedcc --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-1 12:18:16:306:608 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 12:18:16:309:793 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-1 12:18:16:409:244 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 12:18:16:411:323 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:18:16:506:540 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 12:18:16:509:455 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 12:18:16:512:26 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-1 12:18:16:606:595 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 12:18:16:608:428 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 12:18:16:709:857 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 12:18:16:808:248 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:18:16:908:256 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 12:18:17:7:156 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 12:18:17:8:384 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 12:18:17:11:167 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 12:18:17:12:30 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..569de27c --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,91 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:17:228:73 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:17:230:43 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:17:328:69 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:17:330:494 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:18:17:333:242 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:18:17:428:119 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 12:18:17:429:988 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 12:18:17:432:49 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:18:17:529:808 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:18:17:531:999 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:18:17:729:563 + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:18:18:728:807 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..b102cd0b --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,88 @@ +#### db_type: pg #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:18:941:403 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 12:18:18:943:211 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:19:42:20 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 12:18:19:44:244 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 12:18:19:46:368 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:18:19:141:575 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 12:18:19:143:463 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 12:18:19:145:726 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 12:18:19:242:844 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 12:18:19:244:901 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 12:18:19:443:75 + Q11 failed reason: ERROR: could not serialize access due to read/write dependencies among transactions errcode: 40001 + Q11 failed at: 2022-4-1 12:18:20:441:907 + +Test Result: Rollback +ERROR: could not serialize access due to read/write dependencies among transactions + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/pg/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..b6cf8f52 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: pg #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 13:3:45:104:502 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 13:3:45:106:498 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 13:3:45:204:607 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 13:3:45:207:41 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 13:3:45:304:858 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 13:3:45:404:961 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 13:3:45:406:637 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 13:3:45:407:336 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..cfcee4de --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:3:799:768 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:3:801:688 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:3:899:615 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:18:3:901:920 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 12:18:4:0:589 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:4:99:955 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:4:201:92 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:18:4:202:765 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:4:203:398 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..748f79f4 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: pg #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:4:416:255 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:4:418:204 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:4:516:223 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 12:18:4:518:334 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:18:4:519:88 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 12:18:4:617:198 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:4:619:100 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 12:18:4:620:860 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:4:621:549 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/pg/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..9cfff7e6 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:5:669:28 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:5:670:979 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:5:768:830 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:18:5:870:282 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:18:5:872:480 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:18:6:272:859 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..b98214ae --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:3:183:195 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:3:185:482 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:3:282:451 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:18:3:284:496 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 12:18:3:383:206 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:3:485:12 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:3:583:89 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 12:18:3:585:268 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:3:586:152 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..33de4c21 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:4:834:777 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:18:4:836:838 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:4:934:829 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 12:18:4:936:893 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:18:4:938:949 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:18:5:35:863 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:5:36:899 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 12:18:5:39:127 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:5:39:820 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b980154e --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: pg #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:5:252:587 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 12:18:5:254:456 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:5:352:647 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 12:18:5:354:753 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 12:18:5:356:672 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 12:18:5:453:483 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:5:454:387 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 12:18:5:456:21 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:5:456:638 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/pg/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..ea5e1c4b --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:26:495:625 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:26:497:565 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:26:595:559 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:26:597:501 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 12:18:26:696:544 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:26:698:639 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:18:27:198:974 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..83799da8 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:57:24:114:715 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:57:24:116:500 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:57:24:214:548 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:57:24:216:502 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:57:25:820:668 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:57:44:920:568 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..624563a8 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:57:45:134:956 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:57:45:136:766 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:57:45:235:116 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:57:45:237:168 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:57:46:836:208 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-1 12:58:5:936:430 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..07db5dc3 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: pg #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:58:6:150:297 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:58:6:152:25 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:58:6:250:345 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:58:6:252:140 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q5 failed at: 2022-4-1 12:58:7:851:746 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-1 12:58:27:51:773 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..cb9644f6 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:52:579:381 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:52:581:524 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:52:679:335 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:52:681:365 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:18:52:682:862 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 12:18:52:881:91 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:18:53:481:668 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..b81af9f7 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:53:696:341 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 12:18:53:698:253 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:53:796:329 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:18:53:798:158 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 12:18:53:799:472 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:53:997:820 +Q6 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q6 failed at: 2022-4-1 12:18:54:598:97 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..1b3de099 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:54:814:157 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:54:816:36 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:54:914:178 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:54:916:251 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:18:55:15:78 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:55:17:223 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:18:55:517:497 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..81859971 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:55:735:988 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:55:737:756 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:55:835:988 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:55:837:880 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 12:18:55:940:477 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:56:137:595 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:18:56:638:102 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..c9cb0b5a --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:56:853:14 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:56:854:855 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:56:952:920 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 12:18:56:954:754 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 12:18:57:53:830 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 12:18:57:59:747 + Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q5 failed at: 2022-4-1 12:18:57:560:24 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ad52d9ac --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:58:27:274:890 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:58:27:277:17 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:58:27:371:941 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:58:27:373:948 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-1 12:58:27:471:960 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:58:27:474:121 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:58:29:276:14 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-1 12:58:48:73:265 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:58:48:473:207 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..fab18761 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: pg #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:58:48:689:954 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:58:48:691:849 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:58:48:789:791 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 12:58:48:791:675 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-1 12:58:48:889:780 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 12:58:49:90:900 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected; errcode: 40P01 + Q8 failed at: 2022-4-1 12:58:50:892:628 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-1 12:59:9:791:304 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-1 12:59:10:91:493 + +Test Result: Rollback +Reason: ERROR: deadlock detected; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..b9ff8db4 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:20:656:745 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:20:658:957 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:20:756:840 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 12:18:20:859:907 + Q4 finished at: 2022-4-1 12:18:20:860:270 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:20:957:962 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 12:18:20:959:677 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 12:18:20:961:551 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 12:18:20:963:620 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..6cce67d6 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,30 @@ +#### db_type: pg #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:21:178:854 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:21:180:759 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:21:278:762 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 12:18:21:383:574 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:18:21:783:892 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/pg/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..f1fa0e1e --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_full_write.txt @@ -0,0 +1,32 @@ +#### db_type: pg #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:22:1:497 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:22:3:331 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:22:101:415 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 12:18:22:202:313 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 12:18:22:204:411 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:18:22:604:681 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/pg/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..f9952420 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,32 @@ +#### db_type: pg #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:22:819:230 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:22:820:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:22:919:308 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 12:18:23:20:184 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:23:22:121 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:18:23:422:482 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/pg/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..7e7f4871 --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:25:676:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 12:18:25:678:209 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:25:776:483 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 12:18:25:877:369 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 12:18:25:879:329 + Q4 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 + Q4 failed at: 2022-4-1 12:18:26:279:617 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..c845f7ae --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:23:640:864 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:18:23:642:988 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:23:741:78 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:18:23:743:296 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 12:18:23:942:892 +Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q5 failed at: 2022-4-1 12:18:24:443:168 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..16afd40d --- /dev/null +++ b/test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: pg #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-1 12:18:24:658:773 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 12:18:24:660:538 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-1 12:18:24:758:794 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 12:18:24:760:658 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 12:18:24:961:172 +Q5 failed reason: ERROR: could not serialize access due to concurrent update; errcode: 40001 +Q5 failed at: 2022-4-1 12:18:25:461:397 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update; + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..dcd30011 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:20:676:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:20:719:478 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:20:776:931 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:20:816:700 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:20:855:348 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:14:20:900:937 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 15:14:20:918:15 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:20:959:369 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:20:997:712 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:21:34:624 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..acae42c8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:21:463:643 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:21:506:299 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:21:563:401 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:21:603:475 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:21:642:115 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:14:21:688:259 +Q7 finished at: 2022-4-2 15:14:21:704:283 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:21:753:956 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:21:792:212 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:21:829:19 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew.txt new file mode 100644 index 00000000..0265ff07 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:22:247:950 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:22:290:656 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:22:348:4 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:22:386:854 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:22:426:529 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:14:22:489:141 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:14:22:539:412 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:14:22:596:573 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:22:635:32 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:14:22:671:794 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..bbff1fa4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:24:835:511 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:24:878:231 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:24:935:614 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:24:974:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:25:14:645 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:14:25:62:465 +Q7 finished at: 2022-4-2 15:14:25:76:630 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:25:128:28 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:25:166:392 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:25:203:309 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..1d14cba4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:23:179:382 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 15:14:23:232:180 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 15:14:23:273:860 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 15:14:23:279:117 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 15:14:23:425:396 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' +Q8 finished at: 2022-4-2 15:14:23:427:903 + Q6 finished at: 2022-4-2 15:14:23:464:109 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:14:23:510:227 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 15:14:23:548:318 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 15:14:23:585:877 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:23:622:816 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..d6bc77f6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:24:46:73 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 15:14:24:102:464 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:24:146:26 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 15:14:24:185:143 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 15:14:24:225:721 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q6 finished at: 2022-4-2 15:14:24:271:758 +Q7 finished at: 2022-4-2 15:14:24:287:880 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:24:340:621 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 15:14:24:378:867 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:24:415:671 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat.txt new file mode 100644 index 00000000..779ada60 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:25:665:548 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 15:14:25:708:431 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:25:765:824 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:14:25:805:451 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:14:25:865:579 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:14:25:903:475 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 15:14:26:7:711 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:14:26:105:636 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 15:14:26:202:261 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:14:26:323:465 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:14:26:411:980 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:26:507:832 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:14:26:552:766 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:14:26:595:775 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..c86062f1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:31:741:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:31:784:598 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:31:841:606 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:14:31:881:296 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:31:934:613 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:14:31:941:875 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:14:31:980:2 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:14:32:17:351 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 finished at: 2022-4-2 15:14:32:62:607 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 15:14:32:83:61 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 15:14:32:124:572 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 15:14:32:169:570 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 15:14:32:212:970 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..bab073cd --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:30:692:265 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:30:736:238 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:30:794:947 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:30:835:8 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:14:30:892:278 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 15:14:30:930:849 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:14:30:978:894 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:14:30:994:708 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 15:14:31:38:519 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:31:92:122 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 15:14:31:134:810 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:31:173:97 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 15:14:31:234:264 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 15:14:31:275:817 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 15:14:31:315:561 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 15:14:31:316:482 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..0fc1b1df --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:27:62:270 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 15:14:27:106:355 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:27:162:132 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:14:27:201:35 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:14:27:262:241 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:14:27:299:900 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 15:14:27:403:909 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:14:27:500:306 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 15:14:27:600:223 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:14:27:708:813 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:14:27:814:468 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:27:903:556 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 15:14:27:948:259 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:14:27:991:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..d3ab8570 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:28:330:5 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 15:14:28:373:188 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:28:430:112 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 15:14:28:469:566 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:14:28:529:763 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 15:14:28:567:667 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 15:14:28:671:471 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 15:14:28:767:860 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 15:14:28:868:673 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:14:28:978:959 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:14:29:77:949 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:29:183:83 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:14:29:228:36 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:14:29:271:114 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..9bbb5f83 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:32:636:132 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:14:32:679:196 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 15:14:32:721:395 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 15:14:32:735:702 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 15:14:32:774:817 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 15:14:32:814:561 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:14:32:838:262 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q7 finished at: 2022-4-2 15:14:32:868:59 + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 15:14:32:875:879 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 15:14:32:913:629 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q11 finished at: 2022-4-2 15:14:32:950:595 +Q12 finished at: 2022-4-2 15:14:32:977:405 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 15:14:33:33:254 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 15:14:33:71:964 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 15:14:33:108:941 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..fb853aa3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:29:736:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 15:14:29:779:714 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:29:836:302 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 15:14:29:875:813 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:29:915:950 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 15:14:29:936:184 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:14:29:955:118 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 15:14:29:974:7 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:14:29:993:824 + Q8-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:14:30:11:407 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-2 15:14:30:50:278 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 15:14:30:52:411 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 15:14:30:89:696 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:14:30:136:621 + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 15:14:30:138:414 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 15:14:30:179:865 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 15:14:30:225:61 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 15:14:30:268:285 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c378cb0f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:19:887:367 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:14:19:929:929 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:19:987:714 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:14:20:27:630 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:20:74:554 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 15:14:20:128:455 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:14:20:183:85 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:14:20:221:24 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:14:20:257:786 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..48764b43 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:19:144:782 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:19:187:589 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:19:244:762 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:14:19:284:606 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:19:332:225 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 15:14:19:388:484 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:14:19:429:755 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:14:19:467:933 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:14:19:504:823 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:19:505:875 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..e09e1e11 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:23:972:968 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:24:15:900 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:24:72:426 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:24:111:107 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:25:310:48 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:25:358:783 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:13:25:912:665 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..196289b5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:26:375:904 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:26:419:339 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:26:475:294 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:26:514:209 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:27:185:826 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:27:232:178 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 15:13:27:888:55 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..2558f82d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:28:349:944 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:28:392:660 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:28:449:908 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:28:488:672 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:13:29:60:835 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:13:29:107:566 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:13:29:663:695 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew.txt new file mode 100644 index 00000000..d17d7188 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:30:142:773 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:13:30:185:447 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:30:242:715 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:30:282:215 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:13:30:320:986 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:30:489:84 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 15:13:30:492:0 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:13:30:583:286 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:13:30:621:874 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:13:30:622:638 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2.txt new file mode 100644 index 00000000..7daa8f83 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:32:452:459 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:32:495:148 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:32:552:225 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:13:32:591:753 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:13:32:693:357 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:32:740:69 +Q7 finished at: 2022-4-2 15:13:32:742:429 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:13:32:792:582 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:13:32:830:915 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:13:32:831:708 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..af92d858 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:33:251:362 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:33:293:987 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:33:351:369 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:13:33:390:913 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 15:13:33:492:599 +Q8-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:33:539:5 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:13:33:541:364 + Q6 finished at: 2022-4-2 15:13:33:577:49 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:13:33:615:486 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:13:33:616:267 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..39865a16 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:31:42:844 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 15:13:31:94:532 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:31:142:890 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:31:182:323 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:13:31:221:75 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 15:13:31:272:127 + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 15:13:31:283:809 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:13:31:324:881 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 15:13:31:363:253 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:13:31:363:957 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..62521231 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:31:699:608 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 15:13:31:742:391 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:31:799:754 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 15:13:31:839:379 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 15:13:31:878:29 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 15:13:31:946:795 + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 15:13:31:949:918 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:13:31:990:987 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 15:13:32:29:264 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:13:32:30:116 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..282bb578 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:16:897:504 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:16:940:127 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:16:997:550 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:17:36:221 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:17:808:886 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:17:853:67 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:13:18:411:567 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..be8b756a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:18:874:68 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:18:916:898 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:18:974:62 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:19:12:771 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:22:809:517 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:22:854:725 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 15:13:23:512:82 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat.txt new file mode 100644 index 00000000..b89edd83 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:34:78:497 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:34:121:293 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:34:178:580 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:34:217:295 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:13:34:314:630 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:13:34:352:209 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:13:34:688:97 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:13:34:737:127 + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 15:13:34:739:386 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:13:34:785:674 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 15:13:35:590:46 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..41521eab --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 15:13:36:98:382 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 15:13:36:143:783 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 15:13:36:156:290 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 15:13:36:199:134 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:13:36:256:240 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 15:13:36:294:893 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:13:36:356:369 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 15:13:36:395:153 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q11-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:13:36:603:962 +Q11 finished at: 2022-4-2 15:13:36:604:219 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:13:36:701:467 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 15:13:36:706:136 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 15:13:36:792:409 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:13:36:835:619 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 15:13:36:880:796 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 15:13:36:923:820 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..699dcf39 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:37:393:43 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:37:435:812 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:37:492:857 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:37:531:559 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:13:37:592:996 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:13:37:630:751 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 15:13:39:688:311 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:13:39:750:832 + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 15:13:39:752:970 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:13:39:800:856 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 15:13:40:590:607 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9cf20e1b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:40:972:289 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 15:13:41:14:882 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:41:71:904 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 15:13:41:111:6 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:13:41:172:488 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 15:13:41:210:44 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 15:13:42:191:603 +Q10-T1 execute opt: 'COMMIT'; + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 15:13:42:236:518 + Q11-T2 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:13:42:238:606 + Q11 finished at: 2022-4-2 15:13:42:287:52 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 15:13:42:990:170 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_dirty_read.txt new file mode 100644 index 00000000..56945a45 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:11:493:346 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:11:536:92 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:11:592:313 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:13:11:693:564 +Q5 finished at: 2022-4-2 15:13:11:695:997 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:11:790:42 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:13:11:827:959 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:13:11:828:703 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0301308e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:13:63:718 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:13:106:478 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:13:166:234 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 15:13:13:304:926 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:13:13:518:719 + Q6-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:13:521:114 + Q6 finished at: 2022-4-2 15:13:13:556:672 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 15:13:13:594:961 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:13:595:683 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..86424d49 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:13:979:112 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:14:21:894 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:14:79:151 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 15:13:14:223:141 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:13:14:275:723 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:14:277:983 + Q5 finished at: 2022-4-2 15:13:14:313:730 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 15:13:14:352:187 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:14:352:883 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..d637c167 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:16:95:93 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:16:137:677 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:16:195:95 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 15:13:16:337:280 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 15:13:16:387:550 +Q6 finished at: 2022-4-2 15:13:16:390:58 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:16:440:785 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:13:16:478:979 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:16:479:748 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..b99277b4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:12:204:230 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:13:12:247:146 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:12:304:103 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:13:12:343:897 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:12:550:72 + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 15:13:12:553:285 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:12:644:590 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:13:12:682:662 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:12:683:456 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..fe013b6b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:14:737:544 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:13:14:786:168 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:14:837:541 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:13:14:877:119 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:13:14:922:163 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 15:13:14:978:414 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:15:19:675 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 15:13:15:57:681 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:15:58:526 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..e5785a5a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:15:398:551 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:13:15:441:382 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:15:498:631 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 15:13:15:538:247 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:13:15:582:32 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 15:13:15:639:513 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:15:680:573 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 15:13:15:718:689 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:15:719:553 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..675fa8ed --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:49:331:645 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:49:374:618 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:49:431:532 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:49:470:303 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:13:52:814:764 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:52:866:751 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 15:13:53:517:623 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..5155481d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:53:980:983 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:54:23:613 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:54:81:404 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:54:120:192 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:13:57:815:361 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:13:57:862:821 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:13:58:418:287 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..231dbef2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:58:881:120 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:58:923:857 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:58:981:366 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:13:59:22:711 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:14:0:315:862 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:14:0:363:356 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:14:0:918:769 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..3347e15f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:1:386:62 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:1:429:278 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:1:486:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:1:525:403 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:14:2:191:581 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:14:2:241:707 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 15:14:2:894:460 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..c148e191 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:3:364:701 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:3:407:397 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:3:464:714 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:3:504:649 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:3:543:486 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:14:3:711:10 +Q6 finished at: 2022-4-2 15:14:3:713:731 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:14:3:809:696 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:3:847:988 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:3:885:321 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..07fd49a9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:4:304:695 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:14:4:347:564 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:4:404:791 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:4:444:498 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:14:4:483:223 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:14:4:657:374 +Q6 finished at: 2022-4-2 15:14:4:660:86 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:4:761:678 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:4:799:909 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:4:836:663 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..96078af6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:5:257:27 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:5:299:779 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:5:356:717 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:5:396:441 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:14:5:497:994 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:5:551:434 +Q7 finished at: 2022-4-2 15:14:5:554:253 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:14:5:605:40 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:5:643:292 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:5:680:41 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..dbcd7f40 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:6:107:650 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:6:150:415 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:6:207:639 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:6:247:165 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:14:6:348:922 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:6:551:698 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:6:554:357 + Q7 finished at: 2022-4-2 15:14:6:601:465 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:6:639:726 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:6:676:719 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..bcefd9d3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:7:98:307 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:7:141:97 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:7:197:983 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:14:7:237:443 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 15:14:7:339:2 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:14:7:382:447 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:14:7:385:230 + Q6 finished at: 2022-4-2 15:14:7:430:866 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:14:7:469:279 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:7:505:995 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ac89e359 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:7:971:615 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:8:14:607 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:8:71:448 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:8:110:219 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:14:8:171:515 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 15:14:8:208:834 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 15:14:12:818:110 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:14:12:866:813 + Q8 finished at: 2022-4-2 15:14:12:868:470 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:12:913:959 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 15:14:13:720:903 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..805f6ebb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:14:14:232:513 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:14:14:275:565 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:14:14:334:250 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:14:14:373:179 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:14:14:435:569 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 15:14:14:672:650 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 15:14:17:818:755 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:14:17:869:186 + Q8 finished at: 2022-4-2 15:14:17:871:50 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:14:17:919:858 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 15:14:18:721:655 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..c8d62f2d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:43:379:403 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:43:422:449 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:43:479:688 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 15:13:43:619:369 +Q5 finished at: 2022-4-2 15:13:43:620:150 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:43:742:579 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 15:13:43:816:298 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 15:13:43:854:314 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:43:911:522 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..d117f5eb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:44:297:315 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:44:340:132 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:44:399:597 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 15:13:44:545:808 +Q5 finished at: 2022-4-2 15:13:44:548:574 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:44:645:664 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 15:13:44:684:146 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 15:13:44:722:158 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:44:763:816 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write.txt new file mode 100644 index 00000000..23a6a398 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:45:146:139 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:45:188:812 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:45:246:252 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 15:13:45:387:454 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 15:13:45:433:780 +Q6 finished at: 2022-4-2 15:13:45:436:396 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:45:491:445 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 15:13:45:529:571 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:45:566:273 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d1125e4b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:45:945:270 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:45:987:976 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:46:45:317 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 15:13:46:186:184 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 15:13:46:230:353 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:46:232:997 + Q5 finished at: 2022-4-2 15:13:46:280:188 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 15:13:46:318:198 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:46:355:125 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..9df55a0d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:48:500:143 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:13:48:542:947 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:48:600:74 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 15:13:48:741:963 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 15:13:48:787:193 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:48:789:900 + Q5 finished at: 2022-4-2 15:13:48:834:823 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:13:48:872:943 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:48:909:720 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..b4ea4ba8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:46:741:164 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:13:46:783:564 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:46:841:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:13:46:880:899 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:13:47:86:576 +Q5 finished at: 2022-4-2 15:13:47:89:318 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 15:13:47:146:262 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:13:47:184:149 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:47:220:896 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..a7e6f24a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: rcsnapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = rcsnapshot for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:13:47:596:894 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:13:47:639:386 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:13:47:696:886 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:13:47:736:593 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:13:47:944:838 +Q5 finished at: 2022-4-2 15:13:47:947:520 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:13:48:48:763 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:13:48:86:855 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:13:48:123:562 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..60186395 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:5:819:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:5:867:700 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:5:919:91 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:5:961:316 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:6:2:465 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:53:6:56:562 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:53:6:66:87 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:6:112:848 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:53:6:153:293 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:6:191:978 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..f2872527 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:6:648:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:6:699:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:6:748:879 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:6:791:298 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:6:832:584 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:53:6:887:348 +Q7 finished at: 2022-4-2 14:53:6:895:334 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:6:951:699 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:53:6:991:852 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:7:30:641 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..244c97c7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:7:477:596 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:7:525:715 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:7:577:601 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:53:7:619:325 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:7:661:497 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:53:7:726:12 +Q7-T1 execute opt: 'COMMIT'; + Q8-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:7:780:827 + Q8 finished at: 2022-4-2 14:53:7:824:857 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:53:7:864:957 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:53:7:903:512 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..ddab9728 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:10:191:405 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:10:239:573 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:10:291:530 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:53:10:333:72 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:10:375:205 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:53:10:429:117 +Q7 finished at: 2022-4-2 14:53:10:441:902 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:10:496:865 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:53:10:536:990 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:10:575:667 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..a2c8838f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:8:450:537 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:53:8:509:882 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:53:8:550:477 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q3 finished at: 2022-4-2 14:53:8:557:86 +Q8-T1 execute opt: 'COMMIT'; + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:53:8:701:414 +Q8 finished at: 2022-4-2 14:53:8:702:564 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:53:8:742:854 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:8:792:712 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:53:8:832:591 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:53:8:871:904 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:53:8:910:564 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..cc40176f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:9:363:887 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:53:9:421:519 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:9:463:857 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:53:9:505:517 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 14:53:9:548:563 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q6 finished at: 2022-4-2 14:53:9:597:567 +Q7 finished at: 2022-4-2 14:53:9:611:58 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:9:666:738 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 14:53:9:706:791 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:9:745:466 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..c4019c16 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:11:69:238 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:53:11:118:255 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:11:169:150 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:53:11:210:919 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:53:11:269:147 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:53:11:308:833 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:53:11:416:614 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:53:11:509:969 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:53:11:608:515 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:53:11:728:435 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:11:822:513 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:53:11:913:906 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:53:11:958:380 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:53:12:0:902 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..1a676b67 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:17:333:489 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:17:381:929 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:17:433:494 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:53:17:475:777 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:17:528:248 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:53:17:533:419 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:53:17:572:983 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:53:17:612:134 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:53:17:656:519 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:53:17:680:557 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:53:17:727:296 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:53:17:771:729 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:53:17:814:391 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..20607600 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:16:245:240 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:16:294:30 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:16:345:202 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:53:16:387:507 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:53:16:445:258 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 14:53:16:485:495 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:16:536:667 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:53:16:545:291 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:53:16:588:332 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:16:636:292 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 14:53:16:686:983 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:53:16:727:894 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 14:53:16:792:856 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 14:53:16:839:733 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:53:16:880:995 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:53:16:881:997 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b90a7749 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:12:502:371 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:53:12:550:914 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:12:602:515 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:53:12:644:298 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:53:12:702:433 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:53:12:742:177 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:53:12:849:937 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:53:12:942:849 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:53:13:41:189 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:53:13:159:68 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:13:254:711 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:53:13:346:664 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:53:13:390:765 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:53:13:433:535 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..2fce071c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:13:790:344 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:53:13:838:685 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:13:890:314 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:53:13:932:156 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:53:13:990:353 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:53:14:30:37 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 14:53:14:137:832 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 14:53:14:231:11 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 14:53:14:329:187 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:53:14:448:232 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:14:538:689 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:53:14:634:296 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:53:14:679:189 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:53:14:721:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..101cccc1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:18:268:608 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:53:18:317:269 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + Q4-T2 execute opt: 'BEGIN;' + *(1) expected_result: + (1,0) + *(2) expected_result: + Q4 finished at: 2022-4-2 14:53:18:368:814 + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:53:18:369:191 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:53:18:410:731 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 14:53:18:453:541 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:53:18:468:821 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q7 finished at: 2022-4-2 14:53:18:505:955 + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:53:18:508:477 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:53:18:548:231 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q11 finished at: 2022-4-2 14:53:18:586:959 +Q12 finished at: 2022-4-2 14:53:18:617:399 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 14:53:18:674:353 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 14:53:18:715:148 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 14:53:18:754:125 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..3928f330 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:15:224:363 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:53:15:272:711 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:15:324:375 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:53:15:366:273 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:15:408:547 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 14:53:15:424:446 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:53:15:450:235 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:53:15:464:255 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:53:15:491:445 + Q8-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:15:503:712 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:53:15:546:455 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q8 finished at: 2022-4-2 14:53:15:548:145 + Q13 finished at: 2022-4-2 14:53:15:585:911 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:53:15:640:399 + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 14:53:15:644:14 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 14:53:15:690:839 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 14:53:15:735:472 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 14:53:15:778:85 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..aa447eb5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:4:981:929 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:53:5:30:163 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:5:82:15 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:53:5:124:682 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:5:182:657 +Q6 finished at: 2022-4-2 14:53:5:228:441 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:5:294:262 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:53:5:334:453 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:5:373:230 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..1cd8c29f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:4:207:148 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:4:255:372 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:4:307:75 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:53:4:349:311 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:4:399:362 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:53:4:453:866 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:4:500:738 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:53:4:540:516 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:4:579:146 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:4:580:104 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..ee8bd493 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:9:41:682 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:9:89:855 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:9:141:747 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:9:182:997 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:10:348:958 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:10:401:502 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:52:10:950:200 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..57b4d99d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:11:441:676 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:11:489:877 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:11:541:728 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:11:583:54 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:12:224:613 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:12:275:261 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:52:12:925:806 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..ee946e14 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:13:428:573 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:13:476:750 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:13:531:19 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:13:572:513 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:52:14:100:12 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:52:14:153:32 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:52:14:701:597 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..17239fda --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:15:197:902 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:52:15:245:946 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:15:297:961 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:15:340:276 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:52:15:381:861 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:15:549:656 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:52:15:551:403 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:15:644:31 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:15:684:534 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:15:685:386 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..2eb52222 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:17:613:123 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:17:661:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:17:712:710 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:52:17:754:798 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:52:17:859:290 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:17:913:307 + Q8-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:52:17:914:357 + Q8 finished at: 2022-4-2 14:52:17:953:889 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:17:994:123 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:17:994:856 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..3dcf78cb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:18:444:480 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:18:492:584 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:18:544:410 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:52:18:586:458 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:52:18:691:38 +Q8-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:18:745:670 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:18:746:689 + Q6 finished at: 2022-4-2 14:52:18:786:688 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:18:826:768 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:18:827:608 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..51234636 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:16:136:752 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:52:16:192:414 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:16:236:717 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:16:279:134 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:52:16:320:442 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 14:52:16:367:369 + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:52:16:384:904 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:16:431:479 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:52:16:472:61 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:16:472:888 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..02396295 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:16:822:748 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:52:16:870:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:16:922:658 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 14:52:16:964:781 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:52:17:6:70 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 14:52:17:53:936 + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:52:17:69:185 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:17:115:707 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:52:17:155:804 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:17:156:645 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..46d61d77 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:59:535:437 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:59:583:772 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:59:635:293 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:59:676:411 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:2:847:829 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:2:905:806 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:52:3:449:147 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..213a05f0 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:3:942:578 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:3:990:737 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:4:42:758 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:4:84:131 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:7:848:382 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:7:901:220 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:52:8:549:701 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..e17cbf5c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:19:325:461 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:19:373:728 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:19:425:403 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:19:466:743 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:52:19:563:422 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:52:19:602:772 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:52:19:726:763 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:52:19:773:375 + Q11 finished at: 2022-4-2 14:52:19:774:308 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:52:19:884:59 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:52:20:627:788 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..3fdc6d15 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 14:52:21:182:316 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:52:21:227:508 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 14:52:21:240:328 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 14:52:21:288:845 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:52:21:340:661 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:52:21:381:109 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:52:21:440:559 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:52:21:481:842 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q11-T1 execute opt: 'COMMIT'; + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:52:21:691:197 +Q11 finished at: 2022-4-2 14:52:21:692:927 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:52:21:793:587 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:52:21:795:805 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:52:21:878:529 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:52:21:921:209 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:52:21:966:227 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:52:22:8:690 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..51b5f574 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:22:512:317 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:22:560:332 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:22:612:258 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:22:653:535 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:52:22:712:464 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:52:22:751:647 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:52:24:727:428 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:52:24:783:445 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:52:24:784:340 + Q12 finished at: 2022-4-2 14:52:24:837:127 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:52:25:628:363 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..0311c220 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:26:30:58 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:52:26:78:401 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:26:129:930 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:52:26:171:137 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:52:26:229:878 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:52:26:269:117 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:52:27:229:429 +Q10-T1 execute opt: 'COMMIT'; + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:52:27:284:195 + Q11-T2 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:52:27:285:45 + Q11 finished at: 2022-4-2 14:52:27:333:579 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:52:28:25:926 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..d71052c1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:53:868:853 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:53:917:411 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:53:962:881 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:51:54:67:973 +Q5 finished at: 2022-4-2 14:51:54:69:122 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:54:163:639 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:51:54:203:444 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:51:54:204:121 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0c0df1ce --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:55:513:692 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:55:561:723 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:55:613:707 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:51:55:760:464 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:51:55:972:7 + Q6-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:55:973:65 + Q6 finished at: 2022-4-2 14:51:56:12:725 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:51:56:52:777 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:56:53:479 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..bf8be142 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:56:458:11 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:56:506:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:56:557:977 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:51:56:704:632 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:51:56:761:498 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:56:762:499 + Q5 finished at: 2022-4-2 14:51:56:802:95 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:51:56:841:864 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:56:842:574 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..206f680e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:58:691:302 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:58:739:542 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:58:791:324 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:51:58:938:818 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:51:58:997:6 + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:51:58:998:362 + Q7 finished at: 2022-4-2 14:51:59:45:912 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:59:85:815 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:59:86:549 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..cac68cf9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:54:622:767 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:54:671:46 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:54:722:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:54:765:126 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:54:978:922 + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:51:54:980:727 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:55:69:304 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:55:109:394 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:55:110:63 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..328aa815 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:57:255:218 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:51:57:309:738 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:57:355:97 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:57:397:220 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:57:443:454 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:51:57:501:602 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:57:548:159 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:51:57:588:98 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:57:588:892 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..84c04273 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:57:945:257 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:51:57:993:408 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:58:45:259 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 14:51:58:87:464 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:58:135:149 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:51:58:191:842 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:58:238:380 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:51:58:279:492 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:58:280:309 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..66086f21 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:34:597:707 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:34:645:857 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:34:697:787 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:34:738:990 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:52:37:853:798 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:37:902:721 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:52:38:555:355 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..24650656 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:39:51:265 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:39:99:243 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:39:151:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:39:192:655 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:52:42:855:251 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:52:42:913:954 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:52:43:455:877 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4b0c00fe --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:43:959:964 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:44:8:144 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:44:60:91 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:44:101:206 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:52:45:354:919 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:45:416:204 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:52:45:956:492 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..304dacac --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:46:456:443 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:46:504:847 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:46:558:993 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:46:600:912 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:52:47:230:538 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:47:285:247 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:52:47:932:98 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..fc5585c4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:48:435:875 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:52:48:484:96 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:48:535:901 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:48:578:259 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:52:48:619:529 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:52:48:789:852 +Q6 finished at: 2022-4-2 14:52:48:791:303 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:52:48:849:654 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:48:890:88 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:48:928:840 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7aff5b5c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:49:387:969 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:52:49:436:48 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:49:487:935 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:49:530:327 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:52:49:571:707 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:49:739:870 +Q6 finished at: 2022-4-2 14:52:49:741:257 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:49:848:156 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:49:888:428 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:49:926:995 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d69818c9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:50:384:896 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:50:432:981 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:50:484:966 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:52:50:527:84 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:52:50:631:761 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:52:50:682:458 +Q7 finished at: 2022-4-2 14:52:50:683:889 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:52:50:737:487 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:50:777:637 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:50:816:290 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..cfb18a3f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:51:267:421 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:51:315:560 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:51:367:372 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:52:51:409:552 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:52:51:514:185 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:52:51:718:724 + Q7-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:51:720:78 + Q7 finished at: 2022-4-2 14:52:51:771:539 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:51:811:711 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:51:850:241 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..938c8c0a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:52:304:20 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:52:352:307 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:52:404:19 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:52:52:446:45 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:52:52:550:637 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:52:52:606:6 + Q6-T2 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:52:52:607:328 + Q6 finished at: 2022-4-2 14:52:52:654:851 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:52:52:695:91 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:52:52:733:720 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..36976f0c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:53:232:433 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:53:280:617 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:53:332:446 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:53:373:648 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:52:53:432:516 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:52:53:471:909 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:52:57:857:158 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:52:57:908:60 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:52:57:909:576 + Q12 finished at: 2022-4-2 14:52:57:955:988 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:52:58:758:742 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..1e8f72f8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:59:300:735 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:59:348:936 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:59:400:908 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:52:59:442:160 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:52:59:500:713 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:52:59:739:547 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 14:53:2:857:880 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:53:2:908:371 + Q12-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:2:909:772 + Q12 finished at: 2022-4-2 14:53:2:956:464 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:53:3:759:415 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..88d476fd --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:28:428:140 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:28:476:350 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:28:530:421 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 14:52:28:672:690 +Q5 finished at: 2022-4-2 14:52:28:674:58 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:28:779:109 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:52:28:856:702 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:52:28:896:883 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:28:940:734 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..14227b70 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:29:343:68 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:29:391:305 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:29:443:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:52:29:594:372 +Q5 finished at: 2022-4-2 14:52:29:595:774 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:29:693:399 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:52:29:733:637 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:52:29:773:538 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:29:817:125 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..979f421f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:30:216:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:30:264:891 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:30:316:623 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:52:30:466:334 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:52:30:516:891 + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:52:30:518:313 + Q7 finished at: 2022-4-2 14:52:30:564:617 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:52:30:604:816 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:30:643:389 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..9651d365 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:31:51:517 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:31:100:48 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:31:151:410 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:52:31:297:943 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:52:31:353:545 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:52:31:354:893 + Q5 finished at: 2022-4-2 14:52:31:407:53 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:52:31:447:100 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:31:485:790 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..1d4fc8e1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:33:720:423 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:52:33:768:554 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:33:820:614 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:52:33:967:879 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-4-2 14:52:34:20:585 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:52:34:21:896 + Q5 finished at: 2022-4-2 14:52:34:71:259 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:52:34:111:131 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:34:149:758 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..52840ddd --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:31:890:599 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:52:31:942:697 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:31:997:764 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:52:32:40:293 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:52:32:243:70 +Q5 finished at: 2022-4-2 14:52:32:244:448 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:52:32:304:729 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:52:32:344:974 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:32:383:641 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9e3e5bb5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:52:32:783:120 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:52:32:831:7 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:52:32:883:211 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:52:32:925:447 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:52:33:137:0 +Q5 finished at: 2022-4-2 14:52:33:140:443 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:52:33:243:609 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:52:33:283:829 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:52:33:322:449 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..db4e409d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:39:337:142 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:39:377:994 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:39:439:625 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:39:477:187 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:39:513:501 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:51:39:560:405 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:51:39:576:365 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:39:616:37 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:39:660:647 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:39:703:602 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..805399f9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:40:116:792 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:40:157:773 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:40:216:725 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:40:254:362 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:40:290:627 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:51:40:334:560 +Q7 finished at: 2022-4-2 14:51:40:357:680 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:40:407:528 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:40:452:120 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:40:495:282 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew.txt new file mode 100644 index 00000000..e4f11e86 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:40:908:589 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:40:949:725 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:41:11:564 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:41:48:24 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:41:85:718 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:51:41:147:577 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:41:193:150 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:51:41:251:468 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:41:296:193 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:51:41:339:640 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..04545ec3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:43:406:162 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:43:447:87 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:43:507:144 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:43:543:785 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:43:581:0 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:51:43:623:998 +Q7 finished at: 2022-4-2 14:51:43:645:324 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:43:694:621 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:43:738:841 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:43:781:889 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..3d4c68d7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:41:831:266 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:51:41:880:963 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 14:51:41:920:909 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:51:41:931:208 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:51:41:967:997 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:51:42:4:369 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:51:42:48:706 +Q8 finished at: 2022-4-2 14:51:42:76:537 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:51:42:120:493 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:51:42:164:307 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:42:207:458 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..80292264 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:42:617:970 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:51:42:665:614 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:42:718:134 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:51:42:754:848 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 14:51:42:792:769 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q6 finished at: 2022-4-2 14:51:42:836:675 +Q7 finished at: 2022-4-2 14:51:42:858:102 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:42:903:864 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 14:51:42:948:232 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:42:991:190 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat.txt new file mode 100644 index 00000000..00bc936b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:44:231:571 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:51:44:272:807 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:44:331:885 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:51:44:368:670 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:51:44:431:862 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:51:44:475:713 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:51:44:571:909 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:51:44:667:248 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:51:44:774:403 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:44:877:560 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:44:976:2 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:45:79:209 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:51:45:121:297 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:51:45:161:513 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..e2d18b41 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:50:227:985 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:50:269:7 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:50:328:40 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:50:365:293 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:50:409:543 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:51:50:427:946 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:51:50:471:693 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:51:50:515:55 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:51:50:563:853 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:51:50:567:666 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:51:50:607:205 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:51:50:649:436 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:51:50:689:761 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c7def312 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:49:182:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:49:223:683 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:49:282:478 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:49:319:982 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:51:49:382:283 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 14:51:49:426:876 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:51:49:481:692 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:51:49:482:247 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:51:49:523:30 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:49:568:761 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 14:51:49:618:846 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:49:654:666 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 14:51:49:722:415 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 14:51:49:762:30 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:51:49:804:198 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:51:49:805:138 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..ff7d9f92 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:45:615:411 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:51:45:656:453 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:45:714:338 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:51:45:750:903 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:51:45:815:154 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:51:45:859:115 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 14:51:45:955:200 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:51:46:50:562 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 14:51:46:162:108 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:46:272:768 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:46:358:650 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:46:463:960 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:51:46:505:819 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:51:46:546:140 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..48e5037e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:46:876:128 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:51:46:917:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:46:976:83 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:51:47:12:859 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:51:47:76:48 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:51:47:119:995 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 14:51:47:216:279 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 14:51:47:311:571 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 14:51:47:418:928 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:47:520:257 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:47:617:818 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:47:724:365 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:51:47:766:558 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:51:47:806:919 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..eabbf415 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:51:101:565 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:51:51:142:637 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:51:51:182:902 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:51:51:201:514 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:51:51:237:976 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 14:51:51:275:326 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:51:51:301:584 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q7 finished at: 2022-4-2 14:51:51:322:536 + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:51:51:345:484 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:51:51:389:419 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q11 finished at: 2022-4-2 14:51:51:432:355 +Q12 finished at: 2022-4-2 14:51:51:440:720 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 14:51:51:488:123 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 14:51:51:533:919 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 14:51:51:577:165 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..f2f70675 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:48:259:990 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:51:48:301:437 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:48:359:995 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:51:48:396:902 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:48:434:349 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 14:51:48:460:2 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:51:48:471:227 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:51:48:504:61 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:51:48:507:610 + Q8-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:48:547:445 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8 finished at: 2022-4-2 14:51:48:550:410 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:51:48:591:417 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 14:51:48:599:490 +Q16-T1 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:51:48:635:33 + Q14-T3 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 14:51:48:638:935 + Q14 finished at: 2022-4-2 14:51:48:684:960 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-2 14:51:48:727:372 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-2 14:51:48:767:755 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..875d393b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:38:553:529 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:51:38:594:352 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:38:653:479 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:38:690:795 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:38:737:402 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 14:51:38:792:546 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:38:839:780 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:38:884:244 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:38:927:217 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..492334e3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:37:772:635 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:37:813:575 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:37:872:919 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:37:910:162 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:37:953:138 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:51:38:12:77 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:38:51:492 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:38:137:417 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:38:180:468 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:38:181:543 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f6b2e831 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:51:6:438 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:51:47:519 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:51:106:405 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:51:142:750 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:51:179:962 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:50:51:350:351 + Q7 finished at: 2022-4-2 14:50:51:350:379 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:51:454:124 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:50:51:498:665 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:51:499:495 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ad7ad9fd --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:51:910:434 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:51:951:436 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:52:10:368 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:52:46:730 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:52:83:834 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q6 finished at: 2022-4-2 14:50:52:125:34 +Q7 finished at: 2022-4-2 14:50:52:149:722 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:52:195:827 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-2 14:50:52:240:265 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:52:241:10 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..e352d511 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:52:652:26 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:52:692:927 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:52:752:34 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:52:788:228 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:50:52:893:819 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:52:940:442 + Q5 finished at: 2022-4-2 14:50:52:940:759 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:50:52:995:35 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:53:39:456 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:53:40:254 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew.txt new file mode 100644 index 00000000..931f9f50 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:53:453:149 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:50:53:494:194 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:53:552:890 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:53:589:989 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:50:53:626:166 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:50:53:692:474 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:50:53:795:543 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:53:891:491 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:53:935:856 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:53:936:608 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ed560591 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:55:743:216 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:55:784:213 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:55:843:76 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:50:55:880:352 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:55:916:622 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:50:55:982:506 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:56:35:620 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:50:56:78:98 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:56:122:358 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:56:123:133 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..bd59a4dc --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:56:534:917 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:56:575:758 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:56:634:799 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:50:56:671:771 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:56:708:261 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:50:56:743:864 +Q7 finished at: 2022-4-2 14:50:56:774:354 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:56:820:594 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:56:864:914 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:56:865:686 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..ba47085e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:54:355:656 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:50:54:403:371 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:54:455:702 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:54:492:953 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:50:54:529:235 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 14:50:54:570:390 + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:50:54:594:999 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:54:634:284 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:50:54:678:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:54:679:392 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..b06e68ac --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:55:10:10 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:50:55:51:55 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:55:109:888 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 14:50:55:146:965 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:50:55:183:308 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 14:50:55:227:873 + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:50:55:249:236 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:55:288:737 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:50:55:333:344 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:55:334:83 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..ff8ceabf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:49:364:157 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:49:405:317 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:49:464:354 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:49:500:693 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:49:537:977 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 14:50:49:606:792 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:50:49:705:24 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:49:807:896 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:49:852:215 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:49:852:976 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..cb0a1fb1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:50:265:286 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:50:306:404 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:50:365:265 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:50:401:734 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:50:438:871 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:50:50:480:645 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:50:50:504:703 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:50:50:549:198 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:50:50:593:715 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:50:50:594:513 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat.txt new file mode 100644 index 00000000..5d0eddef --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:57:316:429 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:57:357:304 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:57:416:429 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:57:452:782 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:50:57:490:261 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:50:57:558:400 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:50:57:601:919 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:50:57:645:780 + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 14:50:57:655:902 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:50:57:705:693 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:50:57:755:660 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:50:57:863:989 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:50:57:905:942 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:50:57:906:711 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..8a35dd9c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 14:50:58:359:599 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:50:58:402:464 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 14:50:58:420:98 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 14:50:58:461:247 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:50:58:520:432 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:50:58:565:385 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:50:58:610:428 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:50:58:620:245 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:50:58:656:672 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:50:58:761:283 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:50:58:871:971 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:50:58:961:238 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:50:59:62:548 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:50:59:103:23 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 14:50:59:145:956 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 14:50:59:186:132 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..b94da1b4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:59:638:199 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:59:678:948 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:59:738:157 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:50:59:774:309 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:50:59:812:106 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:50:59:838:449 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:50:59:882:189 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:50:59:926:70 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + *(4) expected_result: + (,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:50:59:978:275 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:0:27:89 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:0:89:50 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:0:185:841 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 14:51:0:227:715 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:51:0:267:860 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..31ef7810 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:0:596:348 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:51:0:637:381 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:0:696:415 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:51:0:732:752 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:51:0:770:276 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:51:0:796:421 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:51:0:839:795 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-2 14:51:0:883:866 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:51:0:936:859 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:0:985:50 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:1:43:805 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:51:1:144:159 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:51:1:186:596 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:51:1:226:946 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_dirty_read.txt new file mode 100644 index 00000000..e2453a32 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:44:82:385 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:44:123:438 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:44:179:2 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:50:44:216:468 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:50:44:282:499 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:50:44:379:105 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:50:44:423:206 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:50:44:423:823 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..aecb5f08 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:45:653:620 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:45:694:907 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:45:755:186 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:50:45:792:642 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:50:45:892:893 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:50:45:988:452 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:46:99:562 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:50:46:143:654 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:46:144:469 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..52dfd314 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:46:514:973 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:46:555:890 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:46:614:963 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:50:46:651:980 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:50:46:687:496 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:50:46:754:194 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:46:798:855 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:50:46:843:34 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:46:843:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..05b110f7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:48:559:840 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:50:48:600:770 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:48:659:785 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:50:48:800:14 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:50:48:847:412 + Q4 finished at: 2022-4-2 14:50:48:847:703 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:50:48:903:400 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:50:48:947:740 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:48:948:462 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..8df41be5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:44:794:956 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:50:44:835:789 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:44:894:932 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:50:44:931:973 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:50:45:34:433 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:50:45:142:648 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:45:233:626 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:50:45:277:932 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:45:278:604 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..20533f31 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:47:214:972 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:50:47:262:328 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:47:314:908 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 14:50:47:352:6 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:50:47:392:78 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:50:47:454:155 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:47:493:434 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:50:47:537:754 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:47:538:664 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..19cdff1e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:50:47:866:791 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:50:47:909:232 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:50:47:966:946 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 14:50:48:4:470 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:50:48:45:959 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:50:48:106:395 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:50:48:145:649 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:50:48:189:967 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:50:48:190:840 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..aadbbdbf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:7:579:68 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:7:619:951 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:7:679:159 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:7:715:662 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 14:51:7:819:116 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:7:866:477 + Q5 finished at: 2022-4-2 14:51:7:866:733 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:7:910:957 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:7:955:553 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:7:998:415 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..73b0bda8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:8:407:714 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:8:448:560 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:8:507:801 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:8:544:266 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:51:13:473:62 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:51:13:522:527 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:51:14:75:383 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..c07cea01 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:14:528:446 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:14:569:357 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:14:628:338 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:14:664:506 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:51:18:466:338 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:51:18:509:762 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:51:19:66:415 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f8d147d8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:19:517:988 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:19:558:855 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:19:618:27 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:19:654:567 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:51:20:966:951 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:21:9:911 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:51:21:667:43 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5af3b00c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:22:115:34 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:22:156:44 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:22:215:100 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:22:252:538 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:22:289:236 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:51:22:461:250 + Q8 finished at: 2022-4-2 14:51:22:461:319 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:22:511:19 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:22:555:461 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:22:598:408 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7083ee46 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:23:8:12 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:51:23:48:842 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:23:108:42 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:23:145:599 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:51:23:181:939 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:51:23:356:365 + Q7 finished at: 2022-4-2 14:51:23:356:407 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:23:464:727 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:23:509:249 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:23:552:575 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..7b79479d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:23:964:628 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:24:5:772 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:24:64:641 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:24:101:976 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:51:24:204:10 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:24:257:141 + Q5 finished at: 2022-4-2 14:51:24:257:345 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:51:24:324:535 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:24:368:918 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:24:411:875 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..90cf32e8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:24:824:605 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:24:865:604 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:24:924:627 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:24:961:924 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:51:25:64:118 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:25:275:230 +Q8 finished at: 2022-4-2 14:51:25:275:96 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:51:25:320:578 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:25:365:85 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:25:408:36 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..444030fa --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:25:816:892 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:25:857:756 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:25:916:949 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:51:25:954:363 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:51:26:56:383 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:51:26:106:641 + Q5 finished at: 2022-4-2 14:51:26:106:851 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:26:150:244 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 14:51:26:194:779 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:26:237:618 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..819f062d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:26:687:291 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:26:728:300 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:26:787:244 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:26:823:465 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:51:26:887:477 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:51:26:930:954 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-2 14:51:31:593:312 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:51:31:659:907 + Q5 finished at: 2022-4-2 14:51:31:660:130 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:51:31:711:380 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:51:32:397:272 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..628a1220 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:32:857:329 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:32:898:657 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:32:957:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:51:32:993:661 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:51:33:57:306 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:51:33:342:202 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-2 14:51:36:594:149 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:51:36:642:813 + Q6 finished at: 2022-4-2 14:51:36:643:260 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:51:36:690:861 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:51:37:398:143 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4be606f4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:1:633:531 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:1:674:427 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:1:733:432 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:51:1:872:115 + Q4 finished at: 2022-4-2 14:51:1:872:351 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:1:973:540 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:51:2:18:6 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:51:2:62:447 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:2:115:994 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..c3120f69 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:2:491:904 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:2:532:848 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:2:591:853 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:51:2:747:467 + Q4 finished at: 2022-4-2 14:51:2:747:711 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:51:2:842:923 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:51:2:886:980 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:51:2:931:130 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:2:979:280 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write.txt new file mode 100644 index 00000000..d4aa7806 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:3:352:394 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:3:393:201 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:3:452:387 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:51:3:591:924 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:51:3:640:683 + Q4 finished at: 2022-4-2 14:51:3:641:8 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:51:3:706:428 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:51:3:750:867 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:3:793:716 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..b82f6621 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:4:166:527 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:4:207:418 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:4:266:611 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:51:4:405:801 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:4:458:762 + Q4 finished at: 2022-4-2 14:51:4:458:993 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:4:502:815 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:51:4:546:961 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:4:589:804 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..e1840fde --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:6:736:774 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:51:6:777:846 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:6:836:646 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:51:6:976:901 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:7:26:13 + Q4 finished at: 2022-4-2 14:51:7:26:233 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:51:7:70:972 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:7:115:189 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:7:158:251 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..d15a8b6e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:4:959:35 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:51:4:999:808 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:5:59:228 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:5:96:348 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:51:5:312:257 + Q7 finished at: 2022-4-2 14:51:5:312:316 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:51:5:362:416 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:5:406:631 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:5:449:714 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..dd5f34d4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:51:5:829:643 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:51:5:870:541 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:51:5:929:481 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 14:51:5:966:799 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:51:6:178:124 + Q6 finished at: 2022-4-2 14:51:6:178:184 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:51:6:279:37 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:51:6:323:372 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:51:6:366:254 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..23ed881b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:31:735:594 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:31:776:670 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:31:835:676 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:31:878:518 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:32:550:233 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:32:621:194 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:33:248:25 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..2eca52f1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:33:705:805 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:33:746:682 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:33:805:818 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:33:848:248 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:35:47:21 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:35:103:354 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:35:744:697 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..70eb1d93 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:36:200:445 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:36:241:445 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:36:300:537 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:36:342:319 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:36:919:355 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:54:36:975:48 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:54:37:517:210 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..51474bc2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:41:199:77 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:41:240:38 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:41:299:1 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:41:340:626 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:42:537:76 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:42:596:836 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:43:234:962 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..8516e6c6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:38:50:977 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:54:38:102:936 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 14:54:38:143:8 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:54:38:150:873 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:54:38:295:886 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:54:38:298:455 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:54:38:339:873 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:38:389:467 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:54:38:426:108 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:54:38:462:382 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:54:38:497:913 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..535b0bb9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:38:914:613 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:54:38:965:226 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:39:14:557 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:54:39:56:453 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-2 14:54:40:40:467 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:40:91:653 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:40:738:281 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..89058e45 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,89 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:43:728:45 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:54:43:769:366 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:43:828:441 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:54:43:870:502 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:54:43:928:64 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:54:43:964:725 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-2 14:54:44:409:787 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:44:476:63 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:54:44:478:366 +Q10 finished at: 2022-4-2 14:54:44:524:785 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:54:45:307:676 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..079301e1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:56:772:878 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:56:814:152 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:56:872:673 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:54:56:972:907 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:54:57:112:802 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:54:57:152:512 + Q4 finished at: 2022-4-2 14:54:57:154:850 + Q5-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:54:57:210:852 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:57:212:438 + Q8 finished at: 2022-4-2 14:54:57:246:955 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:57:292:350 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:54:57:334:213 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:54:57:374:104 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..38082465 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:53:231:55 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:53:272:885 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:53:330:713 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:53:373:445 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:54:53:430:707 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:54:53:530:937 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 14:54:55:18:718 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:55:67:295 + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 14:54:55:70:706 + Q12-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:55:110:936 + Q12 finished at: 2022-4-2 14:54:55:111:600 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:54:55:160:473 +Q13 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q13 failed at: 2022-4-2 14:54:56:318:815 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..262142d7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,89 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:45:761:120 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:54:45:802:541 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:45:861:312 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:54:45:903:414 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:54:45:961:378 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:54:46:32:248 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-2 14:54:47:530:853 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:47:581:477 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:54:47:583:888 +Q10 finished at: 2022-4-2 14:54:47:629:629 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:54:48:428:795 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..1ee15601 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:48:761:386 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:54:48:802:624 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:48:861:366 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:54:48:903:660 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:54:48:961:777 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:54:49:32:631 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 14:54:49:101:489 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 14:54:49:202:250 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 14:54:49:296:949 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:54:49:415:243 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:54:49:513:628 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:54:49:607:440 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 14:54:49:649:427 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:54:49:689:436 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..909d0019 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:57:789:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:54:57:830:946 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:54:57:871:542 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:54:57:889:615 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:54:57:931:503 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:54:57:989:693 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:54:58:26:295 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2022-4-2 14:54:58:761:494 + Q7-T2 execute opt: 'COMMIT'; + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:54:58:809:957 + Q11-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:58:811:427 + Q11 finished at: 2022-4-2 14:54:58:845:653 +Q12 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q12 failed at: 2022-4-2 14:54:59:959:303 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..386186b8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:50:140:861 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:54:50:182:215 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:50:240:788 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:54:50:282:738 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:54:50:325:14 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 14:54:50:340:929 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:54:50:366:990 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:54:50:377:361 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-2 14:54:50:413:312 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:54:51:275:733 + Q8-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:54:51:327:762 + Q8 finished at: 2022-4-2 14:54:51:328:932 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 14:54:51:364:93 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:54:51:409:376 +Q15 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q15 failed at: 2022-4-2 14:54:52:773:569 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..ea7d0326 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:30:897:423 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:54:30:938:379 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:30:997:399 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 14:54:31:136:825 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:31:191:335 + Q4 finished at: 2022-4-2 14:54:31:193:633 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:54:31:246:591 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:54:31:283:364 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:31:318:801 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..73008b53 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:30:119:421 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:30:160:479 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:30:219:441 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:54:30:358:649 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:30:398:158 + Q4 finished at: 2022-4-2 14:54:30:400:451 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:54:30:451:22 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:54:30:488:39 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:30:523:541 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:54:30:524:330 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..207959a0 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:35:263:907 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:35:305:43 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:35:363:872 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:35:405:366 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:53:36:611:508 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:36:658:47 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:53:37:209:128 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..d1cba120 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:37:663:703 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:37:704:782 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:37:763:668 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:37:805:161 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:53:38:488:797 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:38:537:558 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:53:39:186:382 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..f1409b52 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:39:643:330 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:39:684:418 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:39:743:379 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:39:784:800 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:53:40:364:94 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:53:40:419:491 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:53:40:961:983 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..4f32c719 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:41:427:458 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:41:468:386 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:41:527:615 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:41:570:22 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:53:42:239:666 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:42:289:259 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:53:42:837:591 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..c7dd489d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:44:767:546 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:44:808:689 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:44:867:469 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:53:44:909:972 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:53:45:363:340 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:45:411:390 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:53:45:865:766 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..1e259a12 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:46:279:20 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:46:319:869 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:46:379:22 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:53:46:461:97 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:53:47:864:2 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:47:911:514 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:53:48:366:432 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2d709e2d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:43:302:124 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:53:43:351:97 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:43:392:630 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:53:43:532:207 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:43:571:707 + Q4 finished at: 2022-4-2 14:53:43:574:179 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:53:43:615:555 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:43:665:800 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:53:43:702:813 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:43:703:628 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..2367d6fb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:44:34:931 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:53:44:75:956 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:44:134:708 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 14:53:44:179:406 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:53:44:220:963 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 14:53:44:272:549 + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:53:44:273:885 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:53:44:313:243 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:53:44:350:161 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:53:44:350:959 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..5a425957 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:26:348:594 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:26:389:466 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:26:448:458 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:26:490:13 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:53:29:110:446 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:29:164:378 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:53:29:708:37 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..07d75a35 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:30:160:727 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:30:202:31 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:30:260:622 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:30:301:931 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:53:34:110:916 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:34:167:303 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:53:34:808:494 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..2ba49290 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:48:816:911 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:48:857:910 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:48:916:919 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:48:998:119 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:53:49:51:650 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:53:49:88:27 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:53:49:742:396 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:53:49:791:263 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:49:792:629 + Q12 finished at: 2022-4-2 14:53:49:835:854 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:53:50:639:789 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..07f12f92 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,169 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 14:53:51:131:598 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:53:51:174:108 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 14:53:51:192:476 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:53:51:292:486 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:53:51:329:753 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:53:51:392:643 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:53:51:616:380 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:53:51:827:532 + Q9 finished at: 2022-4-2 14:53:51:829:866 + Q12-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + Q12 finished at: 2022-4-2 14:53:51:892:633 + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:53:51:893:304 +Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q4 failed at: 2022-4-2 14:53:52:15:421 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..0912df3e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:52:570:623 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:52:611:546 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:52:666:811 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:53:52:708:507 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:53:52:766:571 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:53:52:802:740 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:53:53:494:463 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:53:53:545:773 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:53:547:211 + Q12 finished at: 2022-4-2 14:53:53:589:159 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:53:54:391:284 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..46e5e086 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:54:767:186 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:53:54:808:550 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:54:863:677 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:53:54:905:392 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:53:54:965:297 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:53:55:1:489 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:53:55:367:495 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:53:55:412:220 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:53:55:415:53 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:53:55:469:587 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:53:56:167:193 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..2451c9d2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:20:855:564 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:20:896:622 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:20:957:107 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:53:21:55:788 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:53:21:58:413 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:21:156:965 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:53:21:193:856 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:53:21:194:834 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..557d70fe --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:22:466:39 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:22:507:190 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:22:566:41 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:53:22:705:701 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:22:921:165 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:53:22:923:802 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:22:964:666 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:53:23:4:372 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:23:5:48 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..6f162d01 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:23:395:31 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:23:436:40 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:23:494:967 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:53:23:634:530 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:23:688:800 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:53:23:691:505 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:23:732:255 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:53:23:768:857 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:23:769:613 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..da59c8a8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:25:546:639 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:25:587:709 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:25:646:711 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:53:25:786:975 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:53:25:844:858 + Q4 finished at: 2022-4-2 14:53:25:847:329 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:25:900:472 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:53:25:937:133 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:25:937:789 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..3e366d08 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:21:565:363 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:53:21:606:571 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:21:665:525 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:53:21:806:918 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:22:4:244 + Q4 finished at: 2022-4-2 14:53:22:6:696 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:22:54:46 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:53:22:92:261 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:22:92:984 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..f4c96ce6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:24:143:974 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:53:24:202:565 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:24:243:904 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:53:24:383:393 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:24:422:747 + Q4 finished at: 2022-4-2 14:53:24:425:120 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:24:477:636 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:53:24:514:370 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:24:515:69 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..cb75541c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:24:852:163 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:53:24:893:210 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:24:952:132 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 14:53:24:994:512 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:25:45:673 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:53:25:91:433 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:25:130:854 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:53:25:167:578 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:25:168:283 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..0cf25576 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:2:484:879 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:2:525:938 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:2:584:871 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:2:626:297 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:5:995:684 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:6:53:593 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:6:693:631 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..2aa5deab --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:7:169:727 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:7:210:886 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:7:269:920 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:7:311:515 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:10:996:240 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:54:11:47:452 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:54:11:594:57 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..2b6233ba --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:12:51:164 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:12:92:704 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:12:151:57 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:12:192:569 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:13:496:808 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:13:558:537 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:54:14:94:636 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..b12a3009 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:14:554:370 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:14:595:565 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:14:654:309 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:14:695:945 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:15:372:324 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:15:426:128 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:54:16:70:133 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..ec5308e5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:16:523:501 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:16:564:653 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:16:623:645 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:16:666:342 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:17:247:871 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:54:17:296:261 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:54:17:845:781 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..1756b4c0 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:18:310:965 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:54:18:351:897 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:18:410:948 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:18:453:377 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:54:19:123:467 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:19:180:966 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:54:19:721:316 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b6b4d81a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:20:172:365 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:20:213:302 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:20:272:331 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:20:314:876 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:54:20:997:239 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:21:42:820 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:54:21:499:678 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..213cc50b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:21:912:376 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:21:953:443 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:22:12:276 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:22:94:565 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:54:22:247:402 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:54:22:358:760 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:54:22:749:882 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..2b344c39 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:23:162:737 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:23:203:596 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:23:262:769 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:54:23:344:899 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:54:23:809:306 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:54:23:856:404 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:54:24:311:673 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..7020c418 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:24:767:142 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:24:808:228 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:24:866:997 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:24:948:363 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:54:24:967:60 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:54:25:3:177 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:54:25:684:474 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:54:25:731:895 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:54:25:733:972 + Q12 finished at: 2022-4-2 14:54:25:782:514 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:54:26:582:317 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..6bc0f237 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:27:78:919 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:27:120:70 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:27:178:872 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:54:27:220:456 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:54:27:279:253 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:54:27:514:517 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 14:54:28:805:564 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:54:28:859:419 + Q12-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:54:28:861:425 + Q12 finished at: 2022-4-2 14:54:28:908:412 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:54:29:703:423 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d095fc9b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:56:546:795 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:56:587:928 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:56:646:802 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:53:56:785:676 + Q4 finished at: 2022-4-2 14:53:56:788:1 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:56:895:376 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:53:56:966:602 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:53:57:3:488 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:57:50:883 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..1a74e848 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:57:428:78 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:57:469:59 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:57:528:307 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:53:57:675:374 + Q4 finished at: 2022-4-2 14:53:57:677:732 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:53:57:777:776 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:53:57:814:696 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:53:57:851:616 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:57:896:73 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..df6841fb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:58:283:807 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:58:324:822 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:58:383:389 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:53:58:523:178 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:53:58:568:622 + Q4 finished at: 2022-4-2 14:53:58:570:958 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:53:58:637:468 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:53:58:674:296 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:58:709:812 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..c8f2f8b2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:59:88:843 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:53:59:130:93 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:59:189:62 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:53:59:328:193 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:53:59:376:181 + Q4 finished at: 2022-4-2 14:53:59:378:477 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:53:59:435:508 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:53:59:472:462 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:53:59:507:800 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..1de6b24f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:1:638:442 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:54:1:679:569 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:1:738:405 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:54:1:878:632 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:1:925:865 + Q4 finished at: 2022-4-2 14:54:1:928:180 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:54:1:977:681 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:54:2:21:926 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:2:57:427 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..c1c1ba4f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:53:59:888:641 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:53:59:929:491 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:53:59:988:666 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 14:54:0:128:97 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:54:0:178:114 + Q4 finished at: 2022-4-2 14:54:0:180:430 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:54:0:242:472 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:54:0:279:445 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:0:314:960 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..64fe5e49 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:54:0:687:337 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:54:0:728:368 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:54:0:787:351 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 14:54:0:926:825 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:54:1:136:344 + Q4 finished at: 2022-4-2 14:54:1:138:526 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:54:1:191:309 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:54:1:228:149 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:54:1:263:574 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/result_summary/rcsnapshot_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/rcsnapshot_total-result.txt new file mode 100644 index 00000000..45f42a10 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/rcsnapshot_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/sqlserver/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..45f42a10 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/sqlserver/result_summary/read-uncommitted_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/read-uncommitted_total-result.txt new file mode 100644 index 00000000..f709ccda --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/read-uncommitted_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/sqlserver/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..f872970f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Avoid + +wat_sda_lost_update_c2: Avoid + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Avoid + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/sqlserver/result_summary/serializable_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..db50cb37 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Avoid + +wat_sda_lost_update_c2: Avoid + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Avoid + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/sqlserver/result_summary/snapshot_total-result.txt b/test_result/centralizend_result/sqlserver/result_summary/snapshot_total-result.txt new file mode 100644 index 00000000..554aa7a2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/result_summary/snapshot_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..0cb31fa1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:40:131:36 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:40:173:852 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:40:231:576 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:40:273:658 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:40:935:311 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:40:984:412 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:41:633:924 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..0386255a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:42:84:828 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:42:125:654 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:42:184:846 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:42:227:12 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:43:431:648 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:43:488:967 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:44:130:286 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..9d78878b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:44:582:841 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:44:623:584 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:44:682:792 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:56:44:723:724 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:45:304:370 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:56:45:355:608 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:56:45:903:16 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..0eeb6543 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:49:576:5 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:49:616:630 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:49:675:967 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:56:49:716:941 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:50:921:931 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:50:970:603 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:51:620:589 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..5f840c80 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:46:439:311 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 14:56:46:487:540 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 14:56:46:527:558 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:56:46:539:276 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:56:46:689:917 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 14:56:46:691:759 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 14:56:46:732:745 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:56:46:780:457 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 14:56:46:821:656 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 14:56:46:862:428 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:56:46:902:447 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..4ec3332e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:47:316:574 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 14:56:47:364:670 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:47:416:587 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 14:56:47:457:969 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-2 14:56:48:425:246 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:48:473:721 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:49:123:832 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..e1117103 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat.txt @@ -0,0 +1,89 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:52:117:921 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:56:52:159:238 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:52:219:581 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:56:52:260:953 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:56:52:317:917 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:56:52:358:866 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-2 14:56:52:794:456 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:52:868:759 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:56:52:870:393 +Q10 finished at: 2022-4-2 14:56:52:918:863 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:56:53:693:578 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..e9dead33 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:57:4:924:323 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:57:4:965:334 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:57:5:24:163 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:57:5:124:102 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 14:57:5:264:21 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 14:57:5:303:600 + Q4 finished at: 2022-4-2 14:57:5:305:178 + Q5-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:57:5:359:310 + Q5 finished at: 2022-4-2 14:57:5:359:794 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 14:57:5:399:936 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:57:5:452:562 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 14:57:5:494:517 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 14:57:5:534:725 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..e9f1e37e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:57:2:244:246 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:57:2:285:853 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:57:2:344:338 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:57:2:386:741 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:57:2:444:285 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:57:2:544:287 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 finished at: 2022-4-2 14:57:3:407:245 + Q10-T4 execute opt: 'COMMIT'; + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 14:57:3:456:576 +Q14-T1 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:57:3:458:157 +Q14 finished at: 2022-4-2 14:57:3:496:179 + Q6 finished at: 2022-4-2 14:57:3:496:789 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:57:3:552:802 + Q11 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q11 failed at: 2022-4-2 14:57:4:506:301 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..196fae42 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,89 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:54:145:100 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 14:56:54:186:234 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:54:245:105 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:56:54:286:945 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:56:54:345:129 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:56:54:425:174 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-2 14:56:55:915:701 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:55:967:356 +Q10-T1 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:56:55:968:856 +Q10 finished at: 2022-4-2 14:56:56:19:45 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:56:56:814:938 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..f58982da --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,85 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:57:144:514 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 14:56:57:185:664 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:57:244:779 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 14:56:57:286:403 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:56:57:344:669 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 14:56:57:424:796 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q7 finished at: 2022-4-2 14:56:58:411:111 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:56:58:457:611 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:56:59:212:576 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:56:59:311:750 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..55c27f8a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:57:5:952:208 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:57:5:993:588 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 14:57:6:34:310 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 14:57:6:51:688 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 14:57:6:93:15 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:57:6:151:857 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 14:57:6:193:65 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2022-4-2 14:57:7:150:832 + Q7-T2 execute opt: 'COMMIT'; + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:57:7:201:693 + Q7 finished at: 2022-4-2 14:57:7:201:876 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:57:7:241:736 +Q12 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q12 failed at: 2022-4-2 14:57:8:349:417 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..c74c21e5 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:59:763:702 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 14:56:59:804:802 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:59:863:651 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 14:56:59:944:380 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 14:56:59:963:643 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:56:59:986:257 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 14:57:0:27:774 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 14:57:0:43:957 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q11 finished at: 2022-4-2 14:57:0:84:629 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q7 finished at: 2022-4-2 14:57:0:284:940 + Q8-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 14:57:0:334:263 + Q8 finished at: 2022-4-2 14:57:0:334:505 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-2 14:57:0:374:763 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 14:57:0:422:769 +Q15 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q15 failed at: 2022-4-2 14:57:1:783:575 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..f892f940 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:39:289:234 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:56:39:330:347 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:39:391:466 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-2 14:56:39:528:308 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:39:578:941 + Q4 finished at: 2022-4-2 14:56:39:580:528 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:56:39:628:369 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:56:39:670:874 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:39:710:917 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..d4049826 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:38:501:533 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:38:542:568 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:38:603:568 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:56:38:743:57 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:38:782:557 + Q4 finished at: 2022-4-2 14:56:38:784:53 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:56:38:832:956 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:56:38:874:534 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:38:914:774 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:56:38:915:624 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..6dbf6abf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:16:146:787 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:16:187:755 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:16:251:509 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:16:292:495 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:55:17:495:457 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:55:17:542:201 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:55:18:93:795 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..d931383c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:18:546:585 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:18:587:443 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:18:646:476 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:18:687:190 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:55:19:371:3 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:19:422:717 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:55:20:69:322 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..5c938e61 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:20:519:455 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:20:560:249 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:20:619:684 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:20:660:549 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:55:21:246:445 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:55:21:300:358 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:55:21:844:943 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..09268b81 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:22:308:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:55:22:349:263 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:22:408:513 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:22:450:519 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:55:23:121:991 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:55:23:175:658 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:55:23:720:561 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..7cb14060 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:25:745:536 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:25:786:258 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:25:845:539 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:55:25:887:128 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:55:26:246:390 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:26:297:191 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:55:26:748:71 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..2b9cfee0 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:27:158:358 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:27:199:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:27:258:421 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:55:27:339:398 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:55:28:747:82 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:55:28:797:826 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:55:29:248:753 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..b3f3a52f --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:24:180:375 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:55:24:234:680 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:24:280:418 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:55:24:419:689 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:55:24:458:967 + Q4 finished at: 2022-4-2 14:55:24:460:641 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 14:55:24:501:337 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:24:550:468 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 14:55:24:592:55 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:55:24:592:804 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..41e5e3a4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:24:920:997 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 14:55:24:961:725 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:25:21:11 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 14:55:25:160:272 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:55:25:199:549 + Q4 finished at: 2022-4-2 14:55:25:201:264 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 14:55:25:242:20 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:25:290:785 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 14:55:25:332:281 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:55:25:333:11 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..3872e2e9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:7:689:45 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:7:729:958 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:7:789:262 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:7:830:126 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:55:9:994:505 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:55:10:54:121 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:55:10:592:770 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ef3f3a87 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:11:46:653 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:11:87:599 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:11:146:599 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:11:187:466 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:55:14:994:795 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:15:47:414 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:55:15:693:137 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..fe41b529 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:29:698:124 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:29:738:934 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:29:798:75 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:29:877:996 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:55:29:937:451 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:55:29:977:880 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 14:55:30:625:59 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 14:55:30:673:709 + Q11 finished at: 2022-4-2 14:55:30:674:196 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:55:30:728:861 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:55:31:523:31 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..9b9e85da --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,167 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 14:55:32:21:740 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 14:55:32:65:182 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 14:55:32:80:374 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:55:32:183:726 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 14:55:32:225:679 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 14:55:32:283:664 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 14:55:32:502:723 + Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q9 failed at: 2022-4-2 14:55:33:400:286 + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:55:52:124:43 +Q4 failed reason: errcode: 00000 +Q4 failed at: 2022-4-2 14:55:52:522:583 +Q4 finished at: 2022-4-2 14:55:52:522:710 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..94f070b1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:52:978:520 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:53:19:288 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:53:78:719 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:55:53:158:643 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:55:53:178:526 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 14:55:53:219:1 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:55:58:128:626 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 14:55:58:184:832 + Q11 finished at: 2022-4-2 14:55:58:185:7 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 14:55:58:233:993 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:55:59:26:748 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..01d1ba51 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:59:401:906 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 14:55:59:442:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:59:501:871 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 14:55:59:542:658 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:55:59:602:196 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 14:55:59:642:877 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 14:56:3:127:797 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 14:56:3:188:635 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 14:56:3:190:922 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:56:3:242:704 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 14:56:3:928:32 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..5deae19b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:2:149:777 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:2:190:654 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:2:250:383 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:55:2:349:603 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:55:2:351:501 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:2:450:458 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 14:55:2:491:785 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:55:2:492:635 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..1039b521 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:3:770:404 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:3:811:469 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:3:870:382 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 14:55:4:9:834 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:4:237:790 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:55:4:239:710 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:4:279:885 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:55:4:321:219 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:4:321:943 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..f1961064 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:4:698:934 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:4:739:610 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:4:798:870 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 14:55:4:938:219 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:4:989:678 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 14:55:4:991:486 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:55:5:31:505 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 14:55:5:72:660 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:5:73:370 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..ebfa11d2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:6:888:685 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:55:6:929:817 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:6:988:758 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:55:7:128:901 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:55:7:185:662 + Q4 finished at: 2022-4-2 14:55:7:187:423 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:55:7:238:252 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:55:7:279:610 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:7:280:383 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..9baa5bb1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:2:863:946 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:55:2:904:848 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:2:964:315 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 14:55:3:103:339 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:3:302:708 + Q4 finished at: 2022-4-2 14:55:3:304:351 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:55:3:349:947 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:55:3:391:158 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:3:391:841 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..4c7d1a44 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:5:450:143 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:55:5:501:166 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:5:549:984 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:55:5:689:246 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:5:728:356 + Q4 finished at: 2022-4-2 14:55:5:730:138 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:55:5:775:379 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 14:55:5:816:666 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:5:817:386 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..03c81edb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:55:6:148:128 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 14:55:6:189:124 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:55:6:248:31 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 14:55:6:387:336 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:55:6:426:465 + Q4 finished at: 2022-4-2 14:55:6:428:199 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:55:6:477:909 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 14:55:6:519:498 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:55:6:520:240 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..c35d88f3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:10:284:850 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:10:325:905 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:10:384:693 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:10:425:547 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:14:380:102 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:14:434:590 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:15:78:699 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..350e1769 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:15:530:588 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:15:571:533 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:15:630:286 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:15:671:175 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:19:380:753 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:56:19:431:844 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:56:19:979:396 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..718506ea --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:20:441:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:20:482:149 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:20:540:926 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:20:581:786 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:21:881:419 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:56:21:932:989 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:56:22:480:346 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..70bc6fc2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:22:937:643 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:22:978:634 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:23:37:710 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:23:78:914 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:23:757:59 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:23:818:488 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 14:56:24:455:624 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..82fe2386 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:24:910:887 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:24:951:545 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:25:10:944 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:25:52:836 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:25:632:512 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:56:25:684:516 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:56:26:231:87 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..11d7eedc --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:26:685:785 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 14:56:26:726:782 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:26:785:667 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:26:827:484 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 14:56:27:508:676 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:56:27:560:145 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 14:56:28:107:303 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..54924ddf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:28:558:760 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:28:599:596 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:28:658:778 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:56:28:700:602 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:56:29:382:632 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:29:431:236 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:56:29:884:391 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..f65bb713 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:30:296:181 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:30:337:291 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:30:396:97 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:56:30:476:968 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 14:56:30:633:105 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:56:30:745:255 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:56:31:134:782 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..91365b1c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:31:548:494 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:31:589:298 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:31:648:356 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 14:56:31:729:531 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 14:56:32:195:65 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 14:56:32:243:391 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q5 failed at: 2022-4-2 14:56:32:696:788 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..47b77edf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:33:150:271 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:33:191:405 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:33:250:266 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:33:330:468 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 14:56:33:350:205 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:56:33:390:986 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-2 14:56:34:69:635 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:56:34:123:912 + Q12-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 14:56:34:124:741 + Q12 finished at: 2022-4-2 14:56:34:183:684 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:56:34:968:227 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..f834d0f1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:35:461:402 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:35:502:227 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:35:561:377 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 14:56:35:602:191 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 14:56:35:661:371 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 14:56:35:901:771 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-2 14:56:37:191:359 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 14:56:37:239:593 + Q12-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 14:56:37:240:409 + Q12 finished at: 2022-4-2 14:56:37:287:850 +Q9 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q9 failed at: 2022-4-2 14:56:38:89:124 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..79ad9662 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:4:308:566 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:4:349:496 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:4:408:530 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 14:56:4:547:58 + Q4 finished at: 2022-4-2 14:56:4:548:664 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:4:661:970 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:56:4:742:428 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:56:4:783:778 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:4:828:598 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..3788f9d8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:5:204:284 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:5:245:397 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:5:304:161 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 14:56:5:450:722 + Q4 finished at: 2022-4-2 14:56:5:452:287 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:5:552:118 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 14:56:5:593:469 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 14:56:5:634:664 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:5:679:927 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..4ebc03fa --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:6:49:671 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:6:90:783 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:6:149:649 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 14:56:6:289:389 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:56:6:337:583 + Q4 finished at: 2022-4-2 14:56:6:339:204 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:56:6:399:318 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:56:6:441:623 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:6:481:779 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..170e1dd9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:6:858:894 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:6:899:806 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:6:959:553 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 14:56:7:99:913 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:7:144:223 + Q4 finished at: 2022-4-2 14:56:7:145:794 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:56:7:194:787 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-2 14:56:7:239:649 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:7:279:717 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..14c91b40 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:9:444:200 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 14:56:9:485:228 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:9:543:298 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 14:56:9:683:324 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:9:729:636 + Q4 finished at: 2022-4-2 14:56:9:731:219 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 14:56:9:780:476 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:56:9:821:695 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:9:861:794 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..a2792eed --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:7:671:11 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:56:7:711:825 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:7:771:29 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 14:56:7:911:68 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 14:56:7:955:68 + Q4 finished at: 2022-4-2 14:56:7:956:644 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 14:56:8:23:227 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:56:8:71:515 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:8:111:631 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..acb7837e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 14:56:8:482:849 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 14:56:8:523:430 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 14:56:8:582:842 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-2 14:56:8:721:951 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 14:56:8:927:47 + Q4 finished at: 2022-4-2 14:56:8:928:571 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 14:56:8:978:900 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 14:56:9:23:677 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 14:56:9:63:651 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..a8edadcf --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:54:844:373 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:54:888:288 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:54:944:267 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:54:983:504 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:55:21:789 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:55:76:701 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 15:10:55:86:561 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:55:129:55 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:55:169:164 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:55:207:585 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..97e1e93b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:55:639:345 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:55:683:138 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:55:739:310 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:55:778:723 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:55:817:59 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:55:870:479 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q7 failed at: 2022-4-2 15:10:56:582:607 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew.txt new file mode 100644 index 00000000..254129a7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:57:63:989 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:57:108:135 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:57:164:595 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:57:203:276 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:57:242:630 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:10:57:306:266 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:57:358:260 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:10:57:411:834 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:57:451:666 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:10:57:490:241 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..3db68a8b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:59:626:332 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:59:670:478 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:59:726:260 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:59:764:750 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:59:803:961 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:59:849:969 +Q7 finished at: 2022-4-2 15:10:59:868:428 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:59:922:273 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:59:961:999 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:11:0:0:546 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..cbf23179 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:58:7:793 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-2 15:10:58:58:880 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-2 15:10:58:102:420 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 15:10:58:107:998 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-2 15:10:58:152:398 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-2 15:10:58:191:80 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:58:239:286 +Q8 finished at: 2022-4-2 15:10:58:263:169 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-2 15:10:58:302:619 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-2 15:10:58:341:917 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:10:58:380:477 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..efccc514 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:58:825:37 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-2 15:10:58:876:789 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:58:924:945 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-2 15:10:58:963:706 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-2 15:10:59:3:931 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q6 finished at: 2022-4-2 15:10:59:58:351 +Q7 finished at: 2022-4-2 15:10:59:68:128 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:59:120:945 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-2 15:10:59:160:542 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:59:199:22 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat.txt new file mode 100644 index 00000000..1d72a779 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:0:475:210 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 15:11:0:519:543 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:0:575:685 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:11:0:614:468 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:11:0:675:158 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:11:0:714:590 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-2 15:11:0:818:415 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:11:0:912:626 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-2 15:11:1:13:469 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:11:1:139:663 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:11:1:222:484 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:11:1:319:496 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:11:1:359:999 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:11:1:398:739 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f45c6b9a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:7:671:948 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:11:7:715:880 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:7:772:70 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:11:7:811:217 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:11:7:861:272 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:11:7:871:961 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:11:7:911:173 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:11:7:950:132 + Q9-T3 execute opt: 'COMMIT'; +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 finished at: 2022-4-2 15:11:7:998:922 + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-2 15:11:8:14:588 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 15:11:8:57:177 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-2 15:11:8:97:740 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 15:11:8:136:462 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..f640590c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:6:618:347 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:11:6:663:659 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:6:718:277 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:11:6:757:616 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:11:6:818:462 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-2 15:11:6:895:795 + Q7-T3 execute opt: 'COMMIT'; + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:11:6:918:291 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-2 15:11:6:948:728 + Q9 finished at: 2022-4-2 15:11:6:957:528 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:11:7:2:562 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-2 15:11:7:56:692 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:11:7:94:387 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-2 15:11:7:161:339 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-2 15:11:7:203:949 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 15:11:7:242:202 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 15:11:7:243:91 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..bf846cb9 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:1:872:964 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-2 15:11:1:916:808 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:1:972:947 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:11:2:11:612 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:11:2:73:95 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:11:2:112:397 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-2 15:11:2:216:335 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-2 15:11:2:310:543 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-2 15:11:2:411:563 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:11:2:522:452 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:11:2:626:19 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:11:2:716:115 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 15:11:2:756:437 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:11:2:795:237 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..824b2ced --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:3:135:439 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-2 15:11:3:179:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:3:235:332 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-2 15:11:3:273:945 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:11:3:335:349 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-2 15:11:3:374:702 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-2 15:11:3:478:357 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-2 15:11:3:572:787 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-2 15:11:3:673:634 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:11:3:785:187 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:11:3:885:944 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:11:3:978:231 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:11:4:18:986 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:11:4:57:700 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..7989fb25 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:8:566:962 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:11:8:611:93 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-2 15:11:8:654:736 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2022-4-2 15:11:8:666:985 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-2 15:11:8:705:599 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-2 15:11:8:744:844 + Q7-T2 execute opt: 'COMMIT'; + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:11:8:766:963 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q7 finished at: 2022-4-2 15:11:8:793:768 + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-2 15:11:8:806:410 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 15:11:8:845:728 + Q11-T3 execute opt: 'COMMIT'; +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q11 finished at: 2022-4-2 15:11:8:884:288 +Q12 finished at: 2022-4-2 15:11:8:909:346 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-2 15:11:8:962:494 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-2 15:11:9:2:724 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-2 15:11:9:41:168 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..653afee1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,142 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:11:4:532:278 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-2 15:11:4:576:738 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:11:4:632:232 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-2 15:11:4:670:950 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:11:4:710:142 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2022-4-2 15:11:4:732:383 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-2 15:11:4:748:576 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-2 15:11:4:771:712 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:11:4:786:568 + Q8-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:11:4:810:637 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8 finished at: 2022-4-2 15:11:4:834:374 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q12 finished at: 2022-4-2 15:11:4:849:970 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-2 15:11:4:878:258 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-2 15:11:4:920:993 + Q13 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q13 failed at: 2022-4-2 15:11:6:189:277 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..3a1a6167 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:53:523:638 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:10:53:567:808 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:53:623:647 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:10:53:662:888 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:10:53:710:816 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q6 failed at: 2022-4-2 15:10:54:366:205 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..5160c7af --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:52:740:575 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:52:784:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:52:836:952 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:10:52:912:690 + Q5-T2 execute opt: 'COMMIT'; +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:52:958:147 + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 15:10:52:979:104 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:53:21:675 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:10:53:98:573 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:10:53:136:988 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:53:137:707 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..0c6d0ef8 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:4:459:73 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:4:502:849 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:4:559:68 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:4:597:298 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:4:636:322 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:4:804:683 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q6 failed at: 2022-4-2 15:10:5:408:848 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..4be1bfa1 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:5:878:767 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:5:923:206 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:5:978:668 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:6:17:150 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:6:56:452 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:6:101:746 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q7 failed at: 2022-4-2 15:10:6:821:697 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..8e7ff5b4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:7:293:294 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:7:337:279 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:7:393:199 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:7:431:321 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 15:10:7:536:610 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:7:586:894 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:8:83:849 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew.txt new file mode 100644 index 00000000..e3c70822 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:8:511:426 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:8:555:173 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:8:611:431 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:8:687:386 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:10:8:725:714 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 15:10:8:753:772 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:8:855:206 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:8:953:116 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:8:993:279 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:8:994:35 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2.txt new file mode 100644 index 00000000..980640f3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:10:840:563 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:10:884:525 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:10:940:474 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:10:979:579 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:11:18:297 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:10:11:82:840 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:11:132:948 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:10:11:178:628 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:11:218:605 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:11:219:569 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..23024a81 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:11:645:912 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:11:689:827 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:11:745:875 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:11:784:993 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:11:823:187 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:11:860:667 +Q7 finished at: 2022-4-2 15:10:11:888:451 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:11:936:525 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:11:976:427 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:11:977:240 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..7d338fd6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:9:425:495 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 15:10:9:481:999 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:9:526:15 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:9:564:969 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:9:603:17 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 15:10:9:646:33 + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 15:10:9:668:511 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:9:710:872 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-2 15:10:9:750:637 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:9:751:402 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..e3d29eb7 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:10:89:109 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-2 15:10:10:132:947 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:10:189:148 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-2 15:10:10:228:317 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-2 15:10:10:266:411 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + Q6 finished at: 2022-4-2 15:10:10:311:724 + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-2 15:10:10:331:665 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:10:374:245 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-2 15:10:10:414:101 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:10:414:873 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..847c7999 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:2:780:2 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:2:823:926 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:2:879:935 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:2:954:608 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:2:993:572 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-2 15:10:3:22:705 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:3:122:354 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:3:227:555 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:3:267:276 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:3:268:25 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..b1884297 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: sqlserver #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:3:691:857 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:3:735:869 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:3:791:731 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:3:829:812 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:3:868:834 + Q6-T2 execute opt: 'COMMIT'; +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q6 finished at: 2022-4-2 15:10:3:918:783 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 15:10:3:933:993 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:3:987:56 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-2 15:10:4:26:760 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-2 15:10:4:27:450 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat.txt new file mode 100644 index 00000000..58be1c74 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:12:445:15 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:12:489:40 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:12:544:994 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:12:583:27 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-2 15:10:12:622:516 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:10:12:682:683 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:10:12:725:246 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-2 15:10:12:764:724 + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-2 15:10:12:789:927 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:10:12:846:887 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:10:12:891:531 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:10:12:988:91 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:10:13:29:35 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:10:13:29:839 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..1f3924b2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2022-4-2 15:10:13:493:886 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-2 15:10:13:535:120 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2022-4-2 15:10:13:556:325 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-2 15:10:13:600:170 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:10:13:655:995 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-2 15:10:13:696:182 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:10:13:736:254 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2022-4-2 15:10:13:756:66 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-2 15:10:13:794:371 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-2 15:10:13:895:628 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 15:10:14:9:897 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:10:14:107:356 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-2 15:10:14:193:923 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:10:14:232:811 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-2 15:10:14:274:99 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-2 15:10:14:312:719 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..e9f7f591 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:14:783:490 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:14:827:101 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:14:883:153 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:14:921:341 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 15:10:14:960:825 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:10:14:983:301 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-2 15:10:15:22:136 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-2 15:10:15:61:884 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-2 15:10:15:126:183 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:10:15:180:433 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:10:15:235:2 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:10:15:332:518 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-2 15:10:15:372:939 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:10:15:411:665 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..1e4ce153 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:15:752:584 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-2 15:10:15:796:343 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:15:852:336 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-2 15:10:15:890:370 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-2 15:10:15:930:42 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:10:15:952:448 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-2 15:10:15:991:259 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-2 15:10:16:30:759 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-2 15:10:16:95:91 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:10:16:147:162 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-2 15:10:16:198:518 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-2 15:10:16:311:211 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-2 15:10:16:352:558 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-2 15:10:16:391:129 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_dirty_read.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_dirty_read.txt new file mode 100644 index 00000000..417b28c4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:9:57:71:725 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:9:57:115:528 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:9:57:167:35 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:9:57:206:126 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-2 15:9:57:271:960 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:9:57:367:64 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-2 15:9:57:406:564 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:9:57:407:272 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..2f580eab --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:9:58:665:47 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:9:58:709:7 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:9:58:765:27 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:9:58:803:941 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-2 15:9:58:907:331 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:9:59:1:957 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:9:59:130:303 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 15:9:59:169:919 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:9:59:170:685 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..040b732d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: sqlserver #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:9:59:555:526 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:9:59:599:883 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:9:59:655:323 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-2 15:9:59:694:519 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:9:59:731:904 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-2 15:9:59:801:749 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:9:59:849:671 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-2 15:9:59:889:374 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:9:59:890:73 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_lost_self_update.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..dc7f81bb --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_lost_self_update.txt @@ -0,0 +1,39 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:1:647:425 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:1:691:648 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:1:745:924 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 15:10:1:888:910 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 15:10:1:953:238 + Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q4 failed at: 2022-4-2 15:10:2:350:232 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..e881ba50 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:9:57:788:580 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:9:57:832:445 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:9:57:888:655 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:9:57:927:669 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-2 15:9:58:31:209 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:9:58:141:320 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:9:58:236:409 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-2 15:9:58:275:889 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:9:58:276:702 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..56b252e4 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:0:275:757 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:10:0:327:647 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:0:375:639 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-2 15:10:0:414:551 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:10:0:457:730 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 15:10:0:517:960 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:0:560:338 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-2 15:10:0:599:977 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:10:0:600:707 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..21c291c2 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: sqlserver #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:0:937:523 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-2 15:10:0:981:240 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:1:37:550 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-2 15:10:1:76:277 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-2 15:10:1:127:189 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-2 15:10:1:179:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:1:222:71 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-2 15:10:1:261:954 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:10:1:262:956 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..3b7adebe --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:24:551:59 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:24:595:361 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:24:651:54 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:24:725:934 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-2 15:10:24:794:895 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:24:844:809 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:25:341:902 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..7c2bbffe --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:25:772:221 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:25:817:158 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:25:872:364 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:25:947:10 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:10:28:422:459 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:10:28:469:100 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:10:29:26:165 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..d7724aa3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:29:495:570 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:29:539:346 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:29:595:718 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:29:634:175 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:10:33:423:35 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:33:485:796 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q6 failed at: 2022-4-2 15:10:34:26:694 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f2940d12 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: sqlserver #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:34:503:411 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:34:547:349 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:34:603:462 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:34:641:702 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-2 15:10:35:923:502 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:10:35:969:285 +Q7 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 +Q7 failed at: 2022-4-2 15:10:36:627:217 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..23651f4e --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:37:93:838 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:37:137:714 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:37:193:811 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:37:233:129 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:37:271:564 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-2 15:10:37:442:940 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q6 failed at: 2022-4-2 15:10:38:47:27 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..4e8e23a3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:38:523:388 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-2 15:10:38:567:456 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:38:623:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:38:662:836 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-2 15:10:38:701:67 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:38:876:469 +Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q6 failed at: 2022-4-2 15:10:39:480:599 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..cba25d2d --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:39:952:183 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:39:996:301 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:40:52:109 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:40:91:445 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:10:40:201:234 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:40:255:55 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:40:751:942 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..5c10895c --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:41:182:841 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:41:226:971 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:41:282:637 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:41:358:467 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-2 15:10:41:425:594 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:41:633:197 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:42:130:75 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..681c81b6 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: sqlserver #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:42:558:652 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:42:602:549 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:42:658:664 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-2 15:10:42:734:488 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-2 15:10:42:800:880 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-2 15:10:42:858:240 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:43:358:405 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..b4263d86 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c1.txt @@ -0,0 +1,43 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:43:832:781 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:43:876:996 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:43:932:948 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:44:7:694 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2022-4-2 15:10:44:32:869 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 15:10:44:72:329 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-2 15:10:46:553:844 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-2 15:10:46:607:907 + Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q5 failed at: 2022-4-2 15:10:47:104:887 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 15:10:47:350:363 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..bb1062a3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c2.txt @@ -0,0 +1,43 @@ +#### db_type: sqlserver #### +#### test_type: mda_step_wat_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:47:819:404 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:47:863:228 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:47:919:426 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-2 15:10:47:994:22 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2022-4-2 15:10:48:19:491 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-2 15:10:48:295:239 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-2 15:10:51:554:132 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-2 15:10:51:610:89 + Q6 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q6 failed at: 2022-4-2 15:10:52:207:90 + Q8 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. errcode: 40001 + Q8 failed at: 2022-4-2 15:10:52:350:757 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..80c59d67 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:16:775:581 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:16:819:504 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:16:875:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-4-2 15:10:17:17:5 +Q5 finished at: 2022-4-2 15:10:17:17:409 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:10:17:127:707 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-2 15:10:17:167:283 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-2 15:10:17:206:932 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-2 15:10:17:251:280 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..fa49b5aa --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,30 @@ +#### db_type: sqlserver #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:17:632:221 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:17:676:406 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:17:732:399 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-2 15:10:17:882:260 + Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q4 failed at: 2022-4-2 15:10:18:279:187 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write.txt new file mode 100644 index 00000000..1ae0a561 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write.txt @@ -0,0 +1,32 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:18:666:204 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:18:710:218 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:18:766:310 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-2 15:10:18:908:618 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-2 15:10:18:958:521 + Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q4 failed at: 2022-4-2 15:10:19:355:510 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d82e312a --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write_committed.txt @@ -0,0 +1,32 @@ +#### db_type: sqlserver #### +#### test_type: sda_full_write_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:19:753:984 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:19:798:250 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:19:853:845 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-2 15:10:19:997:516 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:20:53:361 + Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q4 failed at: 2022-4-2 15:10:20:450:355 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..63b87de3 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:23:425:74 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-2 15:10:23:469:126 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:23:526:379 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-2 15:10:23:670:640 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-2 15:10:23:726:104 + Q4 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 + Q4 failed at: 2022-4-2 15:10:24:123:79 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..2b7fbe4b --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:20:855:508 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:10:20:899:548 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:20:955:445 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:10:21:31:202 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-2 15:10:21:206:775 +Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q5 failed at: 2022-4-2 15:10:21:710:728 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..2b2cc732 --- /dev/null +++ b/test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: sqlserver #### +#### test_type: sda_lost_update_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2022-4-2 15:10:22:142:650 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-2 15:10:22:186:656 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2022-4-2 15:10:22:242:621 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-2 15:10:22:281:747 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-2 15:10:22:490:902 +Q5 failed reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row errcode: 42000 +Q5 failed at: 2022-4-2 15:10:22:994:953 + +Test Result: Rollback +Reason: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.t1' directly or indirectly in database 'test' to update, delete, or insert the row + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..eccb91ba --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:15:17:391:717 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:15:17:427:134 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:15:20:401:617 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:15:20:441:859 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:15:20:481:587 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:15:20:523:643 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:15:23:396:21 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:15:23:447:383 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:15:53:399:241 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:15:53:439:438 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..b46a33bb --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:16:1:671:282 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:16:1:705:318 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:16:4:677:75 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:16:4:716:996 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:16:4:756:830 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:16:4:796:475 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:16:7:671:601 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:16:7:705:558 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:16:37:678:636 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:16:37:718:691 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..6cb0ad30 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:16:45:953:334 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:16:45:987:543 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:16:48:959:115 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:16:48:999:529 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:16:49:39:142 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:16:51:954:19 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:16:51:988:132 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:16:54:959:660 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:17:24:960:821 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:17:25:1:26 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..662ef40b --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:19:2:41:502 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:19:2:75:636 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:19:5:47:232 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:19:5:87:156 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:19:5:126:947 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:19:5:166:932 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:19:8:42:5 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:19:8:76:97 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:19:38:48:663 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:19:38:88:879 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..8152674c --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:48:7:328:957 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 20:48:7:364:543 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 20:48:7:399:719 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 20:48:8:330:210 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 20:48:8:403:496 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 20:48:8:440:555 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:48:8:478:136 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:48:9:329:760 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 20:48:29:367:67 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 20:48:29:403:231 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 20:48:29:438:865 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..51139b15 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:18:17:761:965 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-18 15:18:17:796:249 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:18:20:728:244 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-18 15:18:20:769:6 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-18 15:18:20:808:999 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:18:20:849:778 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-18 15:18:23:762:560 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:18:23:796:655 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-18 15:18:53:769:126 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:18:53:809:232 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..62a3372c --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:19:46:360:118 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:19:46:394:380 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:19:49:366:72 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:19:49:405:834 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:19:52:377:413 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:19:52:418:582 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:19:55:360:731 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:19:58:366:475 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:20:1:367:176 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:20:4:361:19 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:20:7:366:912 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:20:10:368:334 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:20:40:367:138 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:20:40:407:411 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..87e2ee39 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:24:33:810:836 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:24:33:845:129 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:24:36:816:56 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:24:36:855:950 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:24:36:895:695 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:24:39:817:2 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:24:39:857:907 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:24:39:898:278 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:24:39:938:953 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-18 15:24:42:810:777 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:24:42:844:500 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-18 15:25:12:817:326 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:25:12:857:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c39b88d9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:23:40:499:987 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:23:40:534:825 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:23:43:506:65 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:23:43:546:324 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:23:46:506:762 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-18 15:23:46:547:516 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:23:46:588:189 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:23:49:506:148 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:23:49:546:600 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:23:49:586:864 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-18 15:23:52:506:575 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:23:52:546:512 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-18 15:23:55:500:837 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-18 15:23:55:534:754 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:24:25:540:387 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:24:25:576:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..f1a37275 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:20:48:676:936 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-18 15:20:48:711:103 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:20:51:682:656 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:20:51:723:69 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:20:54:683:791 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:20:54:724:596 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:20:57:677:433 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:21:0:683:232 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:21:3:684:251 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:21:6:677:569 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:21:9:683:489 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:21:12:684:339 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:21:42:685:639 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:21:42:742:259 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..2928622b --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:21:50:870:799 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:21:50:906:231 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:21:53:909:664 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-18 15:21:53:949:760 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:21:56:910:525 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-18 15:21:56:951:685 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-18 15:21:59:904:830 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-18 15:22:2:910:145 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-18 15:22:5:911:215 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:22:8:905:99 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:22:11:910:960 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:22:14:911:445 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:22:44:911:540 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:22:44:951:204 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..f289c970 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:25:21:89:672 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:25:21:123:663 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-18 15:25:21:160:114 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-18 15:25:24:94:583 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-18 15:25:24:134:468 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-18 15:25:24:174:149 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:25:24:213:969 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:25:27:95:483 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-18 15:25:27:136:386 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:25:27:177:66 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:25:27:217:409 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-18 15:25:30:89:331 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-18 15:25:30:123:645 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-18 15:26:0:97:637 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-18 15:26:0:138:240 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..d7a6c712 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:22:53:220:840 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-18 15:22:53:266:405 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:22:56:226:576 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-18 15:22:56:266:885 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:22:56:307:242 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:22:56:347:543 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-18 15:22:56:387:67 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:22:56:427:238 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-18 15:22:59:227:830 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-18 15:22:59:269:11 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-18 15:22:59:309:620 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-18 15:22:59:350:232 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-18 15:22:59:390:808 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:22:59:431:465 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-18 15:23:2:221:462 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-18 15:23:2:267:280 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-18 15:23:32:228:65 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-18 15:23:32:269:261 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tdsql/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..970f0a90 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:14:33:106:757 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:14:33:140:820 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:14:36:111:849 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:14:36:152:208 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:14:36:192:852 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-18 15:14:39:107:572 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:14:39:143:57 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:15:9:118:814 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:15:9:159:42 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tdsql/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..af3f964b --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:13:48:817:780 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:13:48:851:985 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:13:51:784:465 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:13:51:824:621 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:13:51:864:809 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:13:54:818:406 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:13:54:852:79 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:14:24:825:217 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:14:24:865:695 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:14:24:906:497 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f3a93e04 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:48:33:681:580 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:48:33:716:863 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:48:34:682:864 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:48:34:719:566 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 20:48:34:756:530 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:48:36:683:669 +Q6 finished at: 2022-4-23 20:48:36:685:371 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:48:37:681:978 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 20:48:57:683:237 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:48:57:718:849 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..76b0cf6b --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:50:17:952:991 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:50:17:987:209 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:50:20:958:986 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:50:20:999:601 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:50:21:43:893 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:50:21:83:932 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-18 14:50:23:953:767 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:50:23:987:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-18 14:50:53:960:564 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:50:54:0:460 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..50bca9e1 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:51:2:233:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:51:2:267:654 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:51:5:239:481 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:51:5:279:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:51:8:234:307 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:51:8:268:89 + Q5 finished at: 2022-4-18 14:51:8:271:328 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:51:11:239:773 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:51:41:251:970 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:51:41:292:675 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..9edce572 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:51:49:526:931 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 14:51:49:560:970 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:51:52:532:530 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:51:52:572:399 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 14:51:52:611:820 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:51:55:529:106 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:51:58:533:496 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:52:1:527:429 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:52:31:534:641 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:52:31:574:524 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..cf81889a --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:54:8:306:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:54:8:341:75 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:54:11:312:88 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 14:54:11:352:304 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:54:11:391:874 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 14:54:14:306:985 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:54:14:340:765 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:54:17:401:934 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:54:47:314:77 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:54:47:354:253 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..fc33f859 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:54:55:589:148 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:54:55:623:138 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:54:58:594:975 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 14:54:58:635:381 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:54:58:674:926 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:54:58:714:160 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 14:55:1:590:12 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:55:1:624:639 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:55:31:596:801 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:55:31:636:747 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..de8405ce --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:52:39:808:424 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 14:52:39:842:651 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:52:42:814:170 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:52:42:855:24 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-18 14:52:42:894:710 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:52:42:934:637 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 14:52:45:808:948 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:52:45:842:473 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-18 14:53:15:815:793 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:53:15:855:696 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..7ba1c0b9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:53:23:984:175 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 14:53:24:19:358 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:53:27:27:435 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-18 14:53:27:67:88 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-18 14:53:27:108:573 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:53:27:148:473 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 14:53:30:18:180 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:53:30:51:611 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-18 14:54:0:24:863 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:54:0:64:728 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..c29e97a8 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:47:53:112:989 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:47:53:150:541 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:47:56:118:294 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:47:56:158:215 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:47:56:198:334 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:47:59:113:306 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:48:2:198:833 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:48:5:113:211 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:48:35:120:89 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:48:35:160:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ecd63f83 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:48:43:395:933 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:48:43:429:935 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:48:46:401:616 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:48:46:441:474 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:48:46:481:307 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:48:46:520:662 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 14:48:49:396:508 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:48:49:430:286 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:49:19:403:316 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:49:19:443:482 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..0dd9262a --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:55:39:902:589 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:55:39:936:737 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:55:42:908:401 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:55:42:948:303 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:55:42:988:784 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:55:45:909:449 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-18 14:55:45:950:558 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-18 14:55:45:991:68 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-18 14:55:48:903:415 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:55:48:937:506 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:55:51:909:398 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:55:54:910:182 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 14:56:24:949:534 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:56:24:988:937 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..5d80be7e --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-18 14:56:33:228:606 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-18 14:56:33:269:487 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-18 14:56:36:222:301 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-18 14:56:36:256:594 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 14:56:39:229:34 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-18 14:56:39:270:424 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 14:56:39:311:222 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 14:56:42:228:93 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 14:56:42:267:958 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 14:56:45:229:648 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 14:56:48:222:780 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:56:51:228:973 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 14:56:54:229:651 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:57:24:228:965 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 14:57:24:270:535 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 14:57:24:311:285 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..2ec15f59 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:57:32:576:60 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:57:32:609:998 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:57:35:581:748 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:57:35:621:711 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 14:57:35:661:482 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:57:38:586:149 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-18 14:57:38:627:911 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-18 14:57:38:669:317 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-18 14:57:41:576:867 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:57:41:611:120 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:57:44:582:405 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:57:47:583:981 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 14:58:17:583:297 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:58:17:622:798 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..38b0b3a9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:58:25:754:376 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-18 14:58:25:789:385 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:58:28:793:634 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-18 14:58:28:833:968 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 14:58:28:873:882 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:58:31:794:285 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-18 14:58:31:837:190 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-18 14:58:31:877:930 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-18 14:58:34:791:90 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:58:34:825:174 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:58:37:794:63 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:58:40:795:95 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 14:59:10:794:948 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:59:10:836:247 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..c9f759b5 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:42:25:329:647 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:42:25:367:350 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:42:28:338:202 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:42:28:417:951 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 14:42:31:329:662 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:42:34:336:85 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 14:43:4:376:745 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:43:4:417:82 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..be50eb4e --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:44:2:863:843 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:44:2:897:684 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:44:5:867:300 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:44:5:907:946 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-18 14:44:8:861:613 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:44:11:867:57 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:44:14:861:592 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 14:44:44:868:705 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:44:44:908:925 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..f3b6f135 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:44:53:107:861 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:44:53:143:759 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:44:56:113:591 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:44:56:153:556 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:44:56:193:747 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-18 14:44:59:108:653 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:44:59:143:188 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 14:45:29:115:663 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:45:29:155:622 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..36bb4c28 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:47:5:817:242 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:47:5:851:212 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:47:8:822:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 14:47:11:817:829 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 14:47:11:851:535 + Q4 finished at: 2022-4-18 14:47:11:855:51 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:47:14:823:696 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 14:47:44:824:494 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:47:44:864:411 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7954b328 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:43:12:614:644 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 14:43:12:649:188 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:43:15:620:548 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 14:43:15:660:442 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 14:43:18:615:494 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:43:21:621:17 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:43:24:614:884 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 14:43:54:622:39 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:43:54:662:17 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..4778fa8c --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:45:37:351:867 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 14:45:37:386:232 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:45:40:357:133 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-18 14:45:40:398:697 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:45:40:438:395 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 14:45:43:352:239 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:45:43:385:955 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-18 14:46:13:358:942 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:46:13:400:860 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..291e0b0a --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:46:21:534:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 14:46:21:569:383 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:46:24:572:930 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-18 14:46:24:612:705 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:46:24:652:598 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 14:46:27:567:736 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:46:27:601:108 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-18 14:46:57:574:641 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:46:57:614:620 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..21e0db23 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:4:46:937:125 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:4:46:971:154 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:4:49:942:963 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:4:49:982:987 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:4:52:937:933 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:4:52:971:706 + Q5 finished at: 2022-4-18 15:4:52:974:952 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:4:53:15:127 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:5:22:944:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:5:22:984:956 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..504f2e5f --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:5:31:217:63 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:5:31:251:36 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:5:34:222:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:5:34:262:976 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:5:37:221:315 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-3c-625d0dbb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:5:37:818:624 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-3c-625d0dbb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..6c7115d9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:6:18:642:90 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:6:18:676:380 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:6:21:608:637 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:6:21:648:709 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:6:24:646:644 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-41-625d0dea-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:6:25:243:498 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-41-625d0dea-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..6d15cfc9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:7:9:85:633 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:7:9:119:770 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:7:12:52:469 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:7:12:97:971 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:7:15:97:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:7:15:137:896 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-46-625d0e1d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-18 15:7:15:787:384 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-46-625d0e1d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..1f3877b8 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:1:958:380 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 20:49:1:993:904 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:2:959:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 20:49:2:998:453 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 20:49:3:35:173 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 20:49:4:960:156 +Q6 finished at: 2022-4-23 20:49:4:961:669 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 20:49:4:997:38 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:49:24:960:158 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:49:24:995:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c393a0e0 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:29:236:396 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 20:49:29:271:838 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:30:237:696 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 20:49:30:276:528 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 20:49:30:312:997 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:49:32:238:222 +Q6 finished at: 2022-4-23 20:49:32:240:7 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:49:33:236:881 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:49:53:238:214 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:49:53:273:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..07a39ebd --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:9:31:92:426 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:9:31:126:574 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:9:34:99:509 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:9:34:147:241 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:9:37:93:211 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:9:37:127:396 + Q5 finished at: 2022-4-18 15:9:37:130:598 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:9:40:107:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:10:10:99:723 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:10:10:139:759 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..df3fe717 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:10:18:372:289 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:10:18:406:219 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:10:21:378:67 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:10:21:418:529 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:10:24:373:147 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:10:30:373:213 + Q5 finished at: 2022-4-18 15:10:30:376:121 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:10:30:416:710 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:11:0:379:838 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:11:0:420:795 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..cda73ace --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:11:8:652:296 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:11:8:686:98 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:11:11:658:268 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:11:11:697:925 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:11:14:653:77 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:11:14:687:197 + Q5 finished at: 2022-4-18 15:11:14:690:262 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:11:14:730:80 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:11:44:659:975 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:11:44:700:882 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..0c14f0d9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:11:52:967:902 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:11:53:1:985 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:11:55:973:459 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:11:56:13:682 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:11:58:975:376 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:11:59:16:365 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-18 15:12:1:971:972 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-54-625d0f38-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:12:2:869:558 + Q8 finished at: 2022-4-18 15:12:2:945:925 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-54-625d0f38-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..4037cdf0 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:12:46:428:155 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:12:46:462:168 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:12:49:394:761 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:12:49:434:818 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:12:52:394:768 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:12:58:439:739 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-18 15:13:1:432:535 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-5a-625d0f6e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:13:2:329:704 + Q8 finished at: 2022-4-18 15:13:4:467:579 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-5a-625d0f6e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d318473f --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:59:19:61:270 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:59:19:97:151 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:59:22:68:408 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 14:59:25:61:799 + Q4 finished at: 2022-4-18 14:59:25:67:826 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:59:28:68:198 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 14:59:58:68:828 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 14:59:58:124:918 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:59:58:165:148 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..32a0f8df --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:0:6:364:302 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:0:6:398:669 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:0:9:370:295 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-18 15:0:12:365:135 + Q4 finished at: 2022-4-18 15:0:12:368:336 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:0:15:370:896 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:0:45:371:971 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:0:45:427:511 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:0:45:467:517 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..6468e30c --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:0:53:666:194 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:0:53:700:244 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:0:56:672:40 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-18 15:0:59:666:436 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:0:59:701:165 + Q4 finished at: 2022-4-18 15:0:59:703:444 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:1:2:673:74 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:1:32:673:475 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:1:32:713:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..8425c099 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:1:40:914:644 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:1:40:948:992 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:1:43:920:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-18 15:1:46:915:179 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:1:46:949:309 + Q4 finished at: 2022-4-18 15:1:46:952:502 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:1:46:992:292 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:2:16:923:975 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:2:16:964:942 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b2ca35a6 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:4:2:656:456 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:4:2:690:321 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:4:5:662:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:4:8:657:49 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:4:8:691:41 + Q4 finished at: 2022-4-18 15:4:8:694:118 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:4:8:733:763 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:4:38:664:425 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:4:38:704:874 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..b560cfc8 --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:57:479:233 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:49:57:514:659 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:58:481:719 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:49:58:520:918 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:50:0:481:456 +Q5 finished at: 2022-4-23 20:50:0:483:211 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 20:50:0:518:609 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:50:20:481:34 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:50:20:519:63 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9319700f --- /dev/null +++ b/test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:50:24:726:989 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:50:24:763:466 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:50:25:728:286 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:50:25:765:27 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:50:27:729:32 +Q5 finished at: 2022-4-23 20:50:27:730:794 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 20:50:28:727:661 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:50:48:728:730 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:50:48:764:315 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..cb713a4a --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:42:503:147 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:42:535:828 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:43:503:318 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:41:43:536:624 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:41:43:569:303 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:41:43:602:157 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:41:44:504:230 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:41:44:536:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:41:54:507:703 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:41:54:543:599 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..1d57c3f9 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:58:770:750 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:58:804:38 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:59:772:232 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:41:59:805:544 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:41:59:838:390 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:41:59:871:278 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:42:0:771:234 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:42:0:803:707 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:42:10:775:592 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:42:10:811:632 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..54a43dfe --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:42:15:43:528 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:42:15:111:407 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:42:16:43:648 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:42:16:76:829 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:42:16:109:549 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:42:17:43:902 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:42:17:81:34 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:42:18:44:114 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:42:28:47:615 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:42:28:83:552 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..c2e4b535 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:5:186:275 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:43:5:219:0 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:6:191:698 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:43:6:225:772 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:43:6:258:480 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:43:6:291:496 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:43:7:187:103 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:43:7:219:603 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:43:17:190:681 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:43:17:226:425 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..e05579c4 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:52:34:444:395 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 20:52:34:486:718 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 20:52:34:525:613 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 20:52:35:443:334 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 20:52:35:517:933 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 20:52:35:555:85 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:52:35:592:364 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:52:36:444:982 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 20:52:56:479:560 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 20:52:56:516:90 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 20:52:56:551:794 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..c1db5233 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:42:48:918:38 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-18 15:42:48:950:638 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:42:49:886:179 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-18 15:42:49:919:732 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-18 15:42:49:952:957 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:42:49:985:978 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-18 15:42:50:939:456 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:42:50:972:251 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-18 15:43:0:922:528 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:43:0:958:471 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..76a39fc2 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:21:486:548 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:43:21:519:365 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:22:487:448 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:43:22:520:776 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:43:23:490:601 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:43:23:527:110 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:43:24:487:98 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:43:25:487:368 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:43:26:490:929 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:43:27:486:918 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:43:28:488:84 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:43:29:490:910 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:43:39:498:612 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:43:39:537:664 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..6b86a05f --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:45:4:907:138 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:45:4:940:67 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:45:5:907:603 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:45:5:940:761 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:45:5:974:3 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:45:6:911:187 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:45:6:947:667 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:45:6:983:867 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:45:7:20:321 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-18 15:45:7:908:111 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:45:7:940:996 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-18 15:45:17:914:699 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:45:17:953:720 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..9b5df999 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:45:592:531 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:44:45:627:679 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:46:591:988 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:44:46:625:291 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:44:47:595:884 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-18 15:44:47:632:397 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:44:47:668:703 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:44:48:599:57 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:44:48:639:8 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:44:48:678:444 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-18 15:44:49:592:998 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:44:49:626:54 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-18 15:44:50:592:840 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-18 15:44:50:625:103 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:45:0:640:113 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:45:0:680:241 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..bc238946 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:43:796:182 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-18 15:43:43:829:24 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:44:796:121 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:43:44:829:649 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:43:45:799:665 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:43:45:835:966 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:43:46:796:876 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:43:47:796:910 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:43:48:800:63 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:43:49:796:670 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:43:50:796:783 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:43:51:800:145 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:44:1:808:289 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:1:848:132 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..e52d527d --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:5:976:315 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:44:6:9:821 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:7:8:306 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-18 15:44:7:41:457 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:44:8:11:878 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-18 15:44:8:48:312 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-18 15:44:9:9:542 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-18 15:44:10:9:19 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-18 15:44:11:12:264 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:44:12:8:958 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:44:13:9:279 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:44:14:12:579 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:44:24:16:442 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:24:55:566 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..b61161b0 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:45:22:181:589 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:45:22:214:460 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-18 15:45:22:247:289 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-18 15:45:23:183:201 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-18 15:45:23:216:217 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-18 15:45:23:248:810 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:45:23:282:61 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:45:24:184:513 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-18 15:45:24:221:764 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:45:24:257:976 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:45:24:294:324 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-18 15:45:25:181:400 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-18 15:45:25:214:195 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-18 15:45:35:185:328 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-18 15:45:35:222:134 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..2e1ff714 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:28:317:196 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-18 15:44:28:349:845 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:29:324:585 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-18 15:44:29:357:807 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:44:29:391:618 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:44:29:424:717 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-18 15:44:29:457:395 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:44:29:490:445 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-18 15:44:30:320:712 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-18 15:44:30:359:933 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-18 15:44:30:396:251 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-18 15:44:30:432:490 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-18 15:44:30:468:801 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:30:505:164 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-18 15:44:31:324:325 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-18 15:44:31:356:468 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-18 15:44:41:324:744 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-18 15:44:41:363:970 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..7536ff22 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:26:235:443 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:41:26:268:102 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:27:235:580 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:41:27:268:920 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:41:27:301:787 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-18 15:41:28:238:656 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:41:28:271:415 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:41:38:239:976 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:41:38:275:804 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..99abff34 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:9:951:482 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:9:984:828 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:10:918:709 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:41:10:951:859 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:41:10:984:546 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:41:11:951:166 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:41:11:984:962 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:41:21:957:389 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:41:21:993:134 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:41:22:29:3 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..581ab111 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:0:809:710 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:0:848:420 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:1:808:760 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:53:1:846:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 20:53:1:883:914 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 20:53:3:806:834 + Q7 finished at: 2022-4-23 20:53:3:809:936 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:4:810:446 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 20:53:24:808:607 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:53:24:844:204 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..fc2f295b --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:35:191:9 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:35:223:638 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:36:191:121 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:36:224:531 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:32:36:257:343 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:32:36:295:408 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-18 15:32:37:191:680 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:32:37:224:165 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-18 15:32:47:195:409 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:32:47:230:986 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1a3f6b7a --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:51:473:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:51:506:272 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:52:473:942 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:52:506:897 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:32:53:474:222 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:32:53:507:505 + Q5 finished at: 2022-4-18 15:32:53:508:502 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:32:54:474:556 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:33:4:478:280 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:4:513:910 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..bb5a9809 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:8:741:873 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:33:8:774:486 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:9:741:921 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:33:9:776:97 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:33:9:809:74 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:33:10:744:265 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:33:11:746:307 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:12:742:249 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:33:22:746:921 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:22:782:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..08d121ec --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:59:480:793 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:33:59:513:333 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:0:481:11 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:34:0:514:150 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:0:547:112 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:34:1:482:216 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:34:1:514:826 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:34:2:481:437 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:34:12:485:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:34:12:521:162 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..39bdc507 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:34:16:747:495 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:34:16:780:197 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:17:748:60 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:34:17:781:467 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:17:814:403 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:34:17:846:716 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:34:18:748:307 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:34:18:781:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:34:28:752:86 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:34:28:787:811 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..ac9c646c --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:27:8:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 15:33:27:41:470 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:28:9:312 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:33:28:42:267 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:33:28:74:770 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:33:28:107:682 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 15:33:29:9:580 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:29:41:382 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-18 15:33:39:13:226 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:39:50:151 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..5ebb0989 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:43:178:584 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 15:33:43:212:230 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:44:210:667 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-18 15:33:44:243:769 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-18 15:33:44:276:563 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:33:44:309:432 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 15:33:45:211:461 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:45:243:579 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-18 15:33:55:214:990 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:55:250:523 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..5a6df7ba --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:42:388:115 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:31:42:420:691 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:43:388:319 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:31:43:421:737 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:31:43:454:577 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:31:44:388:698 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:31:45:388:964 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:31:46:388:563 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:31:56:392:337 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:31:56:427:895 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..1189597e --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:0:654:190 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:0:687:468 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:1:654:418 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:1:687:508 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:32:1:721:417 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:32:1:754:248 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:32:2:654:804 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:32:2:687:185 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:32:12:658:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:32:12:694:91 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..9e2464a5 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:34:33:56:258 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:34:33:88:925 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:34:56:596 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:34:34:89:610 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:34:122:604 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:34:35:60:178 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-18 15:34:35:96:693 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-18 15:34:35:133:314 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-18 15:34:36:57:369 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:34:36:91:288 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:34:37:57:438 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:34:38:60:607 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:34:48:102:969 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:34:48:142:43 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..25542689 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-18 15:34:52:378:962 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-18 15:34:52:419:417 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-18 15:34:53:371:775 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-18 15:34:53:404:324 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:34:54:375:267 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-18 15:34:54:411:762 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:34:54:448:38 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:34:55:372:244 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:34:55:405:70 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:34:56:379:815 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:34:57:378:664 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:34:58:372:688 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:34:59:375:722 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:9:379:67 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:35:9:418:904 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:35:9:457:994 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..31b814bc --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:13:720:180 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:35:13:752:744 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:14:720:892 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:35:14:753:984 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 15:35:14:786:754 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:35:15:724:61 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-18 15:35:15:760:291 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-18 15:35:15:796:609 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-18 15:35:16:721:4 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:35:16:753:533 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:35:17:721:481 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:35:18:724:500 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:35:28:728:40 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:28:766:952 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..25d8f7f2 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:32:898:5 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-18 15:35:32:931:710 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:33:930:119 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-18 15:35:33:963:273 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 15:35:33:996:350 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:35:34:933:794 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-18 15:35:34:970:138 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-18 15:35:35:6:603 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-18 15:35:35:931:9 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:35:35:963:589 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:35:36:931:15 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:35:37:934:240 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:35:47:937:760 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:47:976:647 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..08bf1251 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:29:42:702:59 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:29:42:734:684 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:29:43:701:861 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:29:43:767:438 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 15:29:44:702:25 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:29:45:702:159 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:29:55:741:497 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:29:55:776:948 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..b68cf440 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:18:208:850 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:30:18:241:309 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:19:208:486 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:30:19:241:706 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-18 15:30:20:208:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:30:21:209:261 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:22:209:569 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 15:30:32:212:765 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:32:248:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..16eb2a2c --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:36:442:245 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:30:36:474:912 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:37:442:684 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:30:37:477:613 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:30:37:511:550 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-18 15:30:38:442:847 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:38:475:369 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 15:30:48:447:578 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:48:483:388 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6eff50b3 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:25:117:112 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:31:25:150:728 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:26:116:285 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 15:31:27:116:906 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:31:27:149:268 + Q4 finished at: 2022-4-18 15:31:27:149:697 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:31:28:117:140 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:31:38:120:538 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:38:156:212 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..ae7a3812 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:29:59:971:224 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:30:0:6:742 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:0:971:15 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:30:1:4:112 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 15:30:1:973:150 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:30:2:971:826 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:3:971:345 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:30:13:975:541 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:14:11:11 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..fedb6911 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:52:677:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:30:52:710:553 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:53:678:111 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:30:53:711:28 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:30:53:743:666 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 15:30:54:678:654 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:54:711:95 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-18 15:31:4:683:585 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:4:720:69 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b0c575ac --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:8:848:995 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:31:8:882:541 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:9:881:189 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-18 15:31:9:914:245 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:31:9:946:941 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 15:31:10:881:345 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:31:10:913:334 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-18 15:31:20:885:412 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:20:922:726 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..5dc2dacc --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:29:104:260 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:29:143:888 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:30:104:611 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:53:30:143:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-23 20:53:31:105:410 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:31:150:626 + Q5 finished at: 2022-4-23 20:53:31:153:680 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:53:31:191:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:53:51:102:653 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:53:51:138:347 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e88fd420 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:8:255:63 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:8:288:881 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:9:255:199 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:9:288:502 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:10:257:327 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-58-625d1560-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:38:10:857:476 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-58-625d1560-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..22c51306 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:25:748:398 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:25:781:326 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:26:708:801 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:26:742:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:27:741:867 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-5d-625d1571-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:38:28:343:51 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-5d-625d1571-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cd0327ce --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:44:162:396 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:44:195:16 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:45:130:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:45:163:396 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:46:163:499 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:38:46:196:538 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-62-625d1584-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-18 15:38:46:863:642 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-62-625d1584-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..3a051dcb --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:0:620:344 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:39:0:652:938 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:1:586:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:39:1:619:813 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:39:1:652:398 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:39:3:619:382 +Q6 finished at: 2022-4-18 15:39:3:620:240 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:39:3:656:252 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:13:622:773 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:13:658:609 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..e3e3f2fd --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:17:921:422 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:39:17:954:141 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:18:886:588 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:39:18:919:740 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:39:18:954:40 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:39:20:887:874 +Q6 finished at: 2022-4-18 15:39:20:888:700 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:39:21:887:491 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:31:892:38 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:31:927:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9679f888 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:36:208:856 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:39:36:242:900 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:37:207:699 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:39:37:241:320 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:39:38:207:896 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:39:38:241:263 + Q5 finished at: 2022-4-18 15:39:38:241:778 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:39:39:208:259 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:49:211:745 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:49:248:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..11261695 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:53:476:591 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:39:53:515:580 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:54:476:762 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:39:54:510:3 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:39:55:482:961 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:39:57:477:603 + Q5 finished at: 2022-4-18 15:39:57:478:602 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:39:57:511:478 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:40:7:485:163 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:40:7:521:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..a954df96 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:55:401:230 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:55:440:239 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:56:400:152 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 20:53:56:440:602 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 20:53:57:403:955 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:57:442:480 + Q5 finished at: 2022-4-23 20:53:57:445:438 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:53:57:482:833 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:54:17:400:9 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:54:17:435:982 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..8505987b --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:40:28:66:634 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:40:28:99:327 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:40:29:67:485 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:40:29:100:504 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:40:30:70:65 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:40:30:107:10 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-18 15:40:31:68:216 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-70-625d15ec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:40:31:968:349 + Q8 finished at: 2022-4-18 15:40:32:37:223 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-70-625d15ec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..eab33a57 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:40:47:562:721 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:40:47:595:263 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:40:48:530:736 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:40:48:563:863 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:40:49:530:738 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:40:51:567:663 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-18 15:40:52:564:273 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-76-625d15ff-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:40:53:464:405 + Q8 finished at: 2022-4-18 15:40:53:598:596 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-76-625d15ff-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..c326781e --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:52:175:2 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:35:52:207:421 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:53:175:224 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 15:35:54:175:611 + Q4 finished at: 2022-4-18 15:35:54:175:906 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:35:55:176:673 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:36:5:179:750 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:36:5:232:914 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:5:268:602 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..03555579 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:9:468:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:9:502:399 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:10:469:357 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-18 15:36:11:468:187 + Q4 finished at: 2022-4-18 15:36:11:468:502 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:36:12:468:540 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:36:22:471:834 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:36:22:524:49 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:22:559:527 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..ea4f4df2 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:26:762:755 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:26:795:330 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:27:762:958 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-18 15:36:28:763:312 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:36:28:796:284 + Q4 finished at: 2022-4-18 15:36:28:796:633 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:36:29:763:657 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:36:39:767:743 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:39:804:45 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..6798de5e --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:43:998:163 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:44:33:978 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:44:998:769 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-18 15:36:45:998:973 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:36:46:31:449 + Q4 finished at: 2022-4-18 15:36:46:31:804 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:36:46:64:624 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:36:56:2:589 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:56:38:224 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..640bfdf4 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:37:35:714:993 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:37:35:747:473 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:37:36:731:225 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:37:37:716:82 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:37:37:749:566 + Q4 finished at: 2022-4-18 15:37:37:751:461 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:37:37:785:912 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:37:47:719:563 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:37:47:755:527 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..8515e2a6 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:54:21:659:361 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:54:21:698:431 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:54:22:658:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:54:22:697:789 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-23 20:54:24:656:112 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:54:24:658:821 +Q6 finished at: 2022-4-23 20:54:24:694:817 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:54:44:657:889 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:54:44:693:623 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..2b455816 --- /dev/null +++ b/test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:37:17:472:38 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:37:17:504:623 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:37:18:472:337 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:37:18:505:413 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:37:20:472:946 +Q5 finished at: 2022-4-18 15:37:20:473:652 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:37:21:474:879 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:37:31:484:98 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:37:31:520:53 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tdsql/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/tdsql/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/tdsql/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/tdsql/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/tdsql/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/centralizend_result/tdsql/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/tdsql/result_summary/serializable_total-result.txt b/test_result/centralizend_result/tdsql/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/centralizend_result/tdsql/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..ed9314ee --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:55:649:6 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:23:55:683:111 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:56:615:509 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:23:56:655:683 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:23:57:654:414 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:23:57:693:262 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-99-6263fdeb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:23:58:350:6 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-99-6263fdeb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..8a79473b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:24:22:74:447 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:24:22:109:490 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:24:23:29:810 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:24:23:69:169 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:24:24:68:968 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:24:24:107:661 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a0-6263fe06-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:24:24:775:449 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a0-6263fe06-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..b9dcf586 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:24:48:488:80 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:24:48:522:156 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:24:49:454:536 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:24:49:493:665 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:24:50:493:547 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a7-6263fe20-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:24:51:89:337 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a7-6263fe20-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..09aae02d --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:26:8:699:307 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:26:8:734:564 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:26:9:665:879 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:26:9:705:680 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:26:10:704:891 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:26:10:743:456 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b9-6263fe70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:26:11:400:883 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b9-6263fe70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..0d192f0b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:25:15:968:256 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 21:25:16:2:367 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 21:25:16:36:275 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 21:25:16:934:793 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:25:17:968:681 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 21:25:17:973:644 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 21:25:18:12:292 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:25:18:51:74 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 21:25:37:970:562 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 21:25:38:6:22 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 21:25:38:40:887 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..5c38d3c6 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:25:42:272:969 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-23 21:25:42:307:782 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:25:43:277:568 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-23 21:25:43:317:621 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-23 21:25:44:278:959 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:25:44:317:748 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b2-6263fe56-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:25:44:974:595 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b2-6263fe56-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..a203da36 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat.txt @@ -0,0 +1,86 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:21:28:7:132 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 12:21:28:44:30 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:21:28:970:0 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 12:21:29:7:199 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:21:29:970:13 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 12:21:30:4:790 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-24 12:21:33:8:364 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-157-6264d049-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 12:21:33:904:522 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 12:21:52:709:607 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-157-6264d049-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..2c1658b8 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:29:9:223:885 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:29:9:258:237 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:29:10:190:386 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:29:11:190:408 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-23 21:29:12:224:901 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-23 21:29:12:258:791 + Q4 finished at: 2022-4-23 21:29:12:263:517 + Q5-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:29:12:298:983 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:29:12:302:324 + Q8 finished at: 2022-4-23 21:29:12:334:487 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:29:12:369:975 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-23 21:29:32:223:152 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-23 21:29:32:255:149 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..83f30d91 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,171 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:20:21:906:223 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 12:20:21:943:337 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:20:22:905:735 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 12:20:22:979:246 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:20:23:902:219 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:20:24:906:45 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 12:20:26:908:95 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:20:26:945:454 + Q9 finished at: 2022-4-24 12:20:26:945:830 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:20:26:982:432 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 12:20:26:982:731 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 12:20:27:19:39 + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14c-6264d007-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q6 failed at: 2022-4-24 12:20:27:504:275 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14c-6264d007-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..843fc799 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,86 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:20:41:367:839 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 12:20:41:404:536 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:20:42:331:569 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 12:20:42:368:578 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:20:43:331:621 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 12:20:43:367:50 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-24 12:20:46:369:581 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14f-6264d01b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 12:20:47:265:789 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 12:21:6:71:47 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14f-6264d01b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..e878d4a8 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,81 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:27:39:902:9 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-23 21:27:39:937:101 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:27:40:901:992 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-23 21:27:40:941:185 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:27:41:901:984 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-23 21:27:41:938:715 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-d3-6263fecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q8 failed at: 2022-4-23 21:27:44:741:390 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-23 21:28:4:638:982 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-d3-6263fecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..dd59de9c --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:21:10:533:651 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 12:21:10:570:426 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 12:21:10:607:10 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 12:21:11:497:374 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 12:21:11:535:777 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:21:12:497:400 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 12:21:12:533:554 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2022-4-24 12:21:13:536:18 + Q7-T2 execute opt: 'COMMIT'; + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 12:21:13:569:7 + Q11-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:21:13:572:975 + Q11 finished at: 2022-4-24 12:21:13:602:2 +Q12 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-168-6264d036-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q12 failed at: 2022-4-24 12:21:14:735:866 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-168-6264d036-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..58ad193c --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:28:12:381:50 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-23 21:28:12:415:314 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:28:13:347:668 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-23 21:28:13:388:208 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 21:28:13:432:630 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-23 21:28:13:471:305 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 21:28:14:347:665 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-23 21:28:14:383:666 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-23 21:28:14:431:981 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:28:15:386:970 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 21:28:15:425:795 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-23 21:28:15:431:774 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-23 21:28:15:467:372 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 21:28:15:503:176 +Q15 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-de-6263feec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q15 failed at: 2022-4-23 21:28:16:882:722 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-de-6263feec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tdsql/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0046ee13 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:29:218:876 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:23:29:252:817 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:30:223:370 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-23 21:23:31:219:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:23:31:253:629 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-93-6263fdd2-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:23:31:624:832 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-93-6263fdd2-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tdsql/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..1112ca71 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:2:902:855 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:23:2:937:12 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:3:906:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-23 21:23:4:902:782 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:23:4:936:336 + Q4 finished at: 2022-4-23 21:23:4:941:187 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:23:4:979:961 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:23:24:939:639 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:23:24:974:486 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:23:25:9:325 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..e37c27be --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:5:6:259:733 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:5:6:295:417 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:5:7:224:975 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:5:7:263:576 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:5:8:264:771 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-19-6263f982-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:5:8:865:144 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-19-6263f982-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..bc978167 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:5:34:679:937 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:5:34:715:292 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:5:35:645:237 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:5:35:683:945 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:5:36:684:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:5:36:723:688 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e-6263f99e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:5:37:381:533 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e-6263f99e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..d43aa058 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:1:133:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:6:1:169:57 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:2:99:229 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:6:2:138:153 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:6:3:138:754 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-22-6263f9b9-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:6:3:735:442 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-22-6263f9b9-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..5167cd5b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:28:555:531 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:6:28:590:720 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:29:520:909 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:6:29:559:765 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:6:30:560:114 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27-6263f9d4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:6:31:156:890 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27-6263f9d4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..84bbe279 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:7:49:453:427 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:7:49:488:734 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:7:50:457:634 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:7:50:497:539 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:7:51:454:397 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:7:51:489:711 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26-6263fa26-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:7:51:958:437 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26-6263fa26-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..dc982e69 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:8:16:882:872 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:8:16:918:172 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:8:17:844:956 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:8:17:884:959 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 21:8:18:880:613 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:8:18:915:947 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-29-6263fa41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:8:19:384:775 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-29-6263fa41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..7f73f850 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:56:975:211 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 21:6:57:10:525 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:57:940:661 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 21:6:58:975:772 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:6:59:10:604 + Q4 finished at: 2022-4-23 21:6:59:14:431 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-23 21:6:59:52:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:6:59:91:149 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-23 21:7:18:976:531 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:7:19:11:604 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..1b441532 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:7:23:144:21 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 21:7:23:180:333 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:7:24:181:749 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 21:7:25:179:176 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:7:25:214:53 + Q4 finished at: 2022-4-23 21:7:25:217:843 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-23 21:7:25:256:255 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:7:25:294:613 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-23 21:7:45:179:818 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:7:45:215:193 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a0a7067e --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:4:11:407:474 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:4:11:442:588 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:4:12:410:694 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:4:12:454:807 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:4:13:412:705 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-10-6263f94b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:4:14:9:332 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-10-6263f94b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..71ba70ab --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:4:39:829:953 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:4:39:865:329 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:4:40:794:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:4:40:833:998 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:4:41:836:960 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:4:41:875:264 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-15-6263f967-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:4:42:533:750 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-15-6263f967-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..f6be0c64 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat.txt @@ -0,0 +1,70 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:8:43:338:753 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:8:43:374:5 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:8:44:304:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:8:44:343:826 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:8:45:339:232 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:8:45:375:296 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:8:46:343:983 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-38-6263fa5b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:8:47:240:544 + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-23 21:8:47:312:162 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-38-6263fa5b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c0a2eaa0 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,166 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-23 21:9:12:760:640 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-23 21:9:12:835:441 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-23 21:9:13:759:71 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:9:14:724:513 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-23 21:9:14:761:179 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 21:9:15:724:545 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:9:16:766:460 +Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-42-6263fa79-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q4 failed at: 2022-4-23 21:9:17:164:652 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-23 21:9:36:765:137 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-23 21:9:37:669:929 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-42-6263fa79-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..078e00c4 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,70 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:9:44:216:510 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:9:44:251:834 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:9:45:181:951 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:9:45:220:819 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:9:46:181:947 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:9:46:221:343 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 21:9:47:221:528 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-4c-6263fa98-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:9:48:118:301 + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-23 21:9:48:189:819 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-4c-6263fa98-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..1e0f80fd --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,67 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:10:13:531:113 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-23 21:10:13:567:618 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:10:14:531:106 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-23 21:10:14:569:933 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:10:15:531:102 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-23 21:10:15:567:279 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 21:10:16:570:892 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-56-6263fab5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:10:17:467:517 + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-23 21:10:17:539:32 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-56-6263fab5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..51ed9b31 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:1:674:100 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:1:1:713:609 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:2:677:288 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 21:1:3:674:682 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:1:3:678:335 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:1:4:677:466 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:1:24:710:918 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 21:1:24:745:980 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0424a315 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:57:194:109 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:1:57:229:409 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:58:197:550 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-23 21:1:59:195:159 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:1:194:989 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:2:1:198:820 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:2:1:237:28 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 21:2:21:195:609 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:2:21:230:587 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..1ca86551 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:2:25:437:120 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:2:25:472:467 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:2:26:440:447 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-23 21:2:27:437:581 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:27:472:773 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:2:27:476:613 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:2:27:514:707 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 21:2:47:438:459 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:2:47:473:445 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..1b87a0e4 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:3:44:129:351 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:3:44:164:425 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:3:45:132:579 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 21:3:46:129:832 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:3:46:165:157 + Q4 finished at: 2022-4-23 21:3:46:168:771 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:3:47:133:225 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:4:7:130:793 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:4:7:166:391 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..79213e34 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:28:949:843 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:1:28:985:241 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:29:953:131 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 21:1:30:950:579 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:1:32:950:136 + Q4 finished at: 2022-4-23 21:1:32:954:36 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:1:32:992:550 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:1:52:951:67 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:1:52:986:42 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..998e13f1 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:2:51:686:191 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 21:2:51:721:411 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:2:52:688:572 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 21:2:53:686:132 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:53:720:909 + Q4 finished at: 2022-4-23 21:2:53:724:671 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:2:53:763:7 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-23 21:3:13:686:775 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:3:13:721:763 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..f7815365 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:3:17:854:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 21:3:17:890:670 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:3:18:892:326 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 21:3:19:889:624 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:3:19:924:534 + Q4 finished at: 2022-4-23 21:3:19:928:294 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:3:19:966:726 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-23 21:3:39:890:625 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:3:39:926:177 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..b6c41c1d --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:16:34:13:569 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:16:34:52:516 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:16:35:16:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:16:35:57:787 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:16:36:18:364 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:16:36:58:239 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-4e-6263fc32-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:16:36:715:254 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-4e-6263fc32-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..37a46f64 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:0:446:485 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:0:483:540 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:1:410:126 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:1:450:518 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:2:451:0 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-52-6263fc4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:17:3:47:730 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-52-6263fc4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..378176e1 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:27:877:89 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:27:913:861 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:28:840:946 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:28:884:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:29:881:876 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-57-6263fc67-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:17:30:478:940 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-57-6263fc67-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..19fd387e --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:56:307:471 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:56:344:300 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:57:271:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:57:311:373 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:58:312:281 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:17:58:352:90 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-5c-6263fc84-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:17:59:9:103 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-5c-6263fc84-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..eea7a9f0 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:18:22:740:399 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:18:22:777:399 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:18:23:704:326 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:18:23:744:461 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:18:24:745:136 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-60-6263fc9e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:18:25:341:791 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-60-6263fc9e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..1b00fa9a --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:18:50:172:600 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:18:50:209:543 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:18:51:136:562 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:18:51:179:218 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:18:52:177:411 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-65-6263fcba-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:18:52:774:105 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-65-6263fcba-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..3abac102 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:19:18:603:104 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:19:18:639:782 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:19:19:567:54 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:19:19:607:243 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:19:20:604:377 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:19:20:641:144 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-7d-6263fcd7-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:19:21:108:353 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-7d-6263fcd7-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..7edfbd95 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:19:46:39:105 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:19:46:75:891 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:19:47:2:611 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:19:47:44:69 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:19:48:39:886 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-80-6263fcf3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:19:48:543:790 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-80-6263fcf3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..939b0344 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:20:14:468:93 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:20:14:505:267 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:20:15:431:223 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:20:15:472:742 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 21:20:16:468:356 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:20:16:505:94 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-84-6263fd0f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:20:16:972:512 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-84-6263fd0f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..f2b32d0b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:20:40:931:362 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:20:40:968:539 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:20:41:895:130 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:20:41:936:937 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:20:42:931:769 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-23 21:20:42:969:150 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-23 21:20:43:936:195 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-76-6263fd28-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:20:44:834:507 + Q8 finished at: 2022-4-23 21:20:44:911:158 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-76-6263fd28-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..cd55af75 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:21:10:398:167 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:21:10:434:935 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:21:11:362:99 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:21:11:402:515 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:21:12:362:108 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-23 21:21:14:399:190 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-23 21:21:15:403:259 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-7c-6263fd46-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:21:16:300:98 + Q8 finished at: 2022-4-23 21:21:16:438:277 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-7c-6263fd46-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..02cd9270 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:13:23:782:21 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:13:23:818:703 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:13:24:785:427 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 21:13:25:782:625 + Q4 finished at: 2022-4-23 21:13:25:786:244 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:13:26:787:659 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-23 21:13:46:820:391 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-23 21:13:46:872:980 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:13:46:909:834 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..6226c96b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:13:51:123:939 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:13:51:160:734 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:13:52:126:303 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-23 21:13:53:123:739 + Q4 finished at: 2022-4-23 21:13:53:127:409 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:13:54:127:91 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-23 21:14:14:124:381 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-23 21:14:14:178:350 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:14:14:214:975 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..f8444b76 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:14:18:429:816 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:14:18:466:745 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:14:19:432:883 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-23 21:14:20:430:586 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:14:20:467:441 + Q4 finished at: 2022-4-23 21:14:20:471:132 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:14:21:433:978 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-23 21:14:41:431:96 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:14:41:467:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d81dda48 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:14:45:679:620 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:14:45:716:422 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:14:46:682:522 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-23 21:14:47:680:52 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:14:47:716:696 + Q4 finished at: 2022-4-23 21:14:47:720:462 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:14:47:760:388 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-23 21:15:7:680:811 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:15:7:718:510 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..2bafe1e6 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:16:7:728:800 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:16:7:765:956 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:16:8:692:446 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-23 21:16:9:729:164 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:16:9:765:805 + Q4 finished at: 2022-4-23 21:16:9:769:659 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:16:9:809:420 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:16:29:729:725 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:16:29:766:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..a0444e85 --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:15:11:929:604 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:15:11:966:563 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:15:12:937:284 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-23 21:15:13:930:843 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:15:13:967:597 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-63-6263fbe0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:15:14:334:750 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-63-6263fbe0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..12a4f38b --- /dev/null +++ b/test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:15:39:330:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:15:39:367:735 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:15:40:294:369 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-23 21:15:41:331:560 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-66-6263fbfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:15:41:735:685 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-66-6263fbfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..03d8ec55 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:14:599:440 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:14:601:339 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:14:700:260 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:14:702:231 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:14:703:981 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:14:705:754 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:26:14:811:770 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:26:14:813:11 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:26:14:815:631 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:14:816:746 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..f91a52bb --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:15:60:303 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:15:64:659 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:15:160:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:15:162:165 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:15:164:119 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:15:165:615 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:26:15:264:519 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224383810928640, conflictStartTS=432224383837143040, conflictCommitTS=432224383838453760, key={tableID=2670, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:16:66:803 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224383810928640, conflictStartTS=432224383837143040, conflictCommitTS=432224383838453760, key={tableID=2670, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..c6a07684 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:16:313:314 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:16:315:258 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:16:415:564 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:16:417:679 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:16:419:640 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:26:16:514:462 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:26:16:516:136 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:26:16:613:796 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:26:16:616:585 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:26:16:617:699 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..76b2127c --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:17:788:658 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:17:790:394 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:17:888:615 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:17:890:280 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:17:891:932 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:17:893:404 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:26:17:989:123 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:26:17:990:488 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:26:17:992:670 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:17:993:667 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..ce0b370b --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:16:868:522 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:26:16:871:730 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:26:16:873:604 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-1 17:26:16:968:300 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:26:16:971:212 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:26:16:972:886 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:26:16:974:159 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:26:17:68:856 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:26:17:72:28 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:26:17:75:236 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:26:17:76:541 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1d8a71a9 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:17:325:246 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:26:17:328:237 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:17:425:871 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:26:17:428:939 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:26:17:431:407 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:17:432:676 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:26:17:529:625 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:26:17:531:50 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:26:17:533:695 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:17:534:852 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..d18b1444 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:18:237:943 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:26:18:240:267 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:18:337:883 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:26:18:340:5 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:26:18:437:919 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:26:18:440:104 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:26:18:538:589 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:26:18:638:731 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:26:18:738:547 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:26:18:838:278 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:26:18:938:588 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:26:19:38:462 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:26:19:41:276 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:26:19:42:234 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..bca19063 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:22:686:57 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:22:688:176 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:22:786:71 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:26:22:787:846 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:26:22:789:429 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-1 17:26:22:886:192 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:26:22:888:295 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:26:22:889:872 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:26:22:891:146 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:26:22:986:934 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:26:22:988:107 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:26:22:990:728 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:26:22:991:759 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a1d91353 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:21:930:6 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:21:932:675 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:22:29:898 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:22:32:726 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:26:22:129:918 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:26:22:131:599 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:26:22:132:855 + Q8-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-1 17:26:22:231:964 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:26:22:233:839 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:22:235:241 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:26:22:333:828 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:26:22:335:249 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:26:22:431:523 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:26:22:432:784 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:26:22:436:630 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:26:22:437:592 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..3fc812ef --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:19:285:322 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:26:19:287:226 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:19:384:851 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:26:19:386:829 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:26:19:488:5 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:26:19:490:114 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:26:19:585:354 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:26:19:685:530 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:26:19:785:536 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:26:19:885:449 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:26:19:985:415 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:26:20:85:532 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:26:20:88:77 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:26:20:89:166 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..7cc7df23 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:20:326:913 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:26:20:331:344 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:20:428:67 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:26:20:430:230 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:26:20:529:331 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:26:20:531:444 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:26:20:627:662 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:26:20:732:840 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:26:20:827:512 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:26:20:927:474 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:26:21:27:561 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:26:21:127:667 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:26:21:130:322 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:26:21:131:269 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..c02257e6 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:23:235:893 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:26:23:237:812 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:26:23:239:841 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-1 17:26:23:335:613 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:26:23:337:644 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:26:23:339:244 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:26:23:340:475 + Q8-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-1 17:26:23:435:572 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:26:23:437:555 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:26:23:439:468 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:26:23:440:602 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:26:23:536:165 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:26:23:537:589 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:26:23:540:389 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:26:23:541:729 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..cc600077 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:21:377:352 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:26:21:379:602 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:21:477:300 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:26:21:479:444 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:21:481:124 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:26:21:483:31 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:26:21:484:537 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:26:21:485:870 + Q9-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q9 finished at: 2022-4-1 17:26:21:577:382 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:26:21:579:682 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:26:21:581:246 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:26:21:583:156 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:26:21:584:764 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:26:21:586:126 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:26:21:680:985 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:26:21:682:129 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:26:21:684:965 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:26:21:686:74 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..7f60c5bd --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:13:442:818 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:26:13:447:179 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:13:544:92 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:26:13:545:840 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:26:13:547:183 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:26:13:644:109 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224383386779648, conflictStartTS=432224383413256192, conflictCommitTS=432224383414042624, key={tableID=2664, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-1 17:26:14:345:998 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224383386779648, conflictStartTS=432224383413256192, conflictCommitTS=432224383414042624, key={tableID=2664, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..5bc8b91a --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:12:960:836 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:12:962:564 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:13:75:102 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:26:13:76:772 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:26:13:77:974 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:26:13:176:601 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:26:13:177:751 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:26:13:180:29 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:26:13:181:63 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:13:182:89 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..61704a56 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:39:234:302 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:39:236:269 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:39:334:847 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:39:336:734 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:39:338:504 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-1 17:25:39:441:520 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:25:39:536:409 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224374419357696, conflictStartTS=432224374445572096, conflictCommitTS=432224374498525184, key={tableID=2571, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:25:40:440:915 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224374419357696, conflictStartTS=432224374445572096, conflictCommitTS=432224374498525184, key={tableID=2571, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..18156228 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:40:678:74 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:40:680:90 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:40:778:258 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:40:780:381 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:40:782:204 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:40:783:572 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:25:40:880:749 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224374797631488, conflictStartTS=432224374824108032, conflictCommitTS=432224374825418752, key={tableID=2574, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:25:41:682:584 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224374797631488, conflictStartTS=432224374824108032, conflictCommitTS=432224374825418752, key={tableID=2574, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9debebeb --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:41:917:791 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:41:919:761 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:42:18:48 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:42:20:193 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:42:22:16 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:25:42:120:829 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:42:122:262 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224375148904448, conflictStartTS=432224375122690048, conflictCommitTS=432224375176429568, key={tableID=2577, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-1 17:25:43:19:587 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224375148904448, conflictStartTS=432224375122690048, conflictCommitTS=432224375176429568, key={tableID=2577, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..793fdddd --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:43:250:886 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:25:43:252:739 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:43:350:735 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:43:352:461 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:43:354:27 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:25:43:451:884 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:25:43:551:162 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:43:651:16 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:25:43:654:948 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:43:656:18 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..6ecd261a --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:44:792:829 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:44:794:615 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:44:892:770 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:25:44:894:411 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:44:895:952 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:25:44:993:465 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:44:994:781 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:25:45:92:693 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:25:45:95:208 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:45:96:271 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..cf8736f8 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:45:327:837 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:45:329:586 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:45:427:915 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:25:45:430:70 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:45:432:141 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:45:433:101 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:25:45:528:732 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:45:529:975 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:25:45:532:179 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:45:533:100 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..b933b0a8 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:43:919:793 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:25:43:922:894 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:44:20:100 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:44:21:788 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:44:31:550 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:44:33:426 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:25:44:121:358 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:44:122:543 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:25:44:124:786 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:44:125:721 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..89133cb7 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:44:353:712 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:25:44:358:408 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:44:455:540 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:25:44:457:121 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:25:44:458:601 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:44:459:794 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:25:44:557:111 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:44:558:29 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:25:44:560:186 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:44:561:21 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..aca2e633 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:38:139:615 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:38:141:251 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:38:239:656 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:38:241:323 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:38:243:27 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:25:38:344:667 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:25:38:439:673 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:38:544:135 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:25:38:546:446 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:38:547:386 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..76aee8ac --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:38:795:853 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:38:797:789 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:38:895:783 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:38:897:446 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:38:899:201 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:38:900:577 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:25:38:996:353 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:25:38:997:514 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:25:39:0:103 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:25:39:1:92 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..98b3ae84 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:45:766:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:45:768:700 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:45:866:951 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:45:868:660 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:25:45:870:565 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-1 17:25:45:967:81 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:25:45:968:763 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:25:45:970:741 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:25:46:68:76 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:25:46:69:299 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:25:46:167:187 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:25:46:267:262 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:25:46:271:22 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:25:46:271:920 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..23b8a8ec --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q1 finished at: 2022-4-1 17:25:46:505:882 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:25:46:508:568 +Q3-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q3 finished at: 2022-4-1 17:25:46:605:917 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:25:46:607:667 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:25:46:705:832 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:25:46:708:508 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:25:46:710:981 + Q8-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-1 17:25:46:808:176 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:25:46:809:895 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:25:46:908:40 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:25:47:6:153 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:25:47:106:241 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:25:47:206:4 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:25:47:207:192 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:25:47:210:218 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:25:47:211:104 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..368b43cf --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:47:446:623 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:47:448:497 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:47:546:935 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:47:548:620 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:25:47:551:187 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-1 17:25:47:646:648 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:25:47:648:237 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:25:47:650:545 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:25:47:750:571 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:25:47:752:4 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:25:47:847:114 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:25:47:947:25 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:25:47:949:365 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:25:47:950:315 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9b20828e --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:48:180:63 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:25:48:182:102 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:48:279:745 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:25:48:281:413 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:25:48:286:405 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-1 17:25:48:380:89 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:25:48:382:104 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:25:48:384:945 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:25:48:481:444 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:25:48:482:830 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:25:48:580:202 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:25:48:680:213 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:25:48:682:920 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:25:48:683:832 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..2e1b32d0 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:33:630:992 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:33:632:746 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:33:731:962 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:25:33:733:707 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:25:33:831:974 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:33:931:834 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:25:33:934:466 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:25:33:935:332 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..bc851245 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:34:848:123 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:34:849:876 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:34:948:133 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:25:34:949:950 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:25:35:52:562 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:35:148:201 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:35:248:426 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:25:35:250:644 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:35:251:768 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..0ffda640 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:35:511:840 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:35:513:438 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:35:611:885 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:25:35:613:654 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:25:35:614:569 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:25:35:712:348 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:35:713:507 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:25:35:715:461 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:35:716:324 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6ee6cbb3 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:36:907:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:36:909:457 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:37:7:937 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:37:9:828 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:25:37:108:337 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:25:37:109:812 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224373835563008, conflictStartTS=432224373809348608, conflictCommitTS=432224373862301696, key={tableID=2562, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-1 17:25:37:908:601 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224373835563008, conflictStartTS=432224373809348608, conflictCommitTS=432224373862301696, key={tableID=2562, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..679a6997 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:34:190:649 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:25:34:192:594 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:34:290:610 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:34:292:321 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:25:34:391:560 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:34:490:921 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:34:590:592 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:25:34:592:751 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:34:593:663 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..76214967 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:35:984:170 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:25:35:986:792 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:36:71:464 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:36:73:245 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:25:36:74:437 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:25:36:172:571 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:36:173:586 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:25:36:175:570 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:36:176:504 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..05e53a0a --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:36:429:867 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:25:36:434:637 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:36:529:865 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:25:36:531:496 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:25:36:532:618 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:25:36:631:88 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:36:632:155 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:25:36:634:492 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:36:637:814 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..a598a18e --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:56:689:319 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:56:691:50 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:56:789:891 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:56:791:677 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:56:793:288 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:56:794:495 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:25:56:892:683 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378995081216, conflictStartTS=432224379021295616, conflictCommitTS=432224379022606336, key={tableID=2628, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:25:57:694:255 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378995081216, conflictStartTS=432224379021295616, conflictCommitTS=432224379022606336, key={tableID=2628, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..439ee212 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:57:932:315 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:57:934:46 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:58:33:404 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:58:35:58 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:58:36:662 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:25:58:132:767 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:25:58:134:20 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224379347402752, conflictStartTS=432224379320926208, conflictCommitTS=432224379373617152, key={tableID=2631, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-1 17:25:59:35:979 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224379347402752, conflictStartTS=432224379320926208, conflictCommitTS=432224379373617152, key={tableID=2631, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a5446bcf --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:59:276:488 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:59:278:138 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:59:376:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:25:59:378:83 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:25:59:379:785 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:25:59:477:587 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:25:59:576:900 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224379673247744, conflictStartTS=432224379699462144, conflictCommitTS=432224379751890944, key={tableID=2634, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:0:477:327 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224379673247744, conflictStartTS=432224379699462144, conflictCommitTS=432224379751890944, key={tableID=2634, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..6bd3d3d4 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:0:717:160 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:0:719:164 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:0:817:209 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:0:819:102 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:0:820:650 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:0:821:880 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:26:0:917:598 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380050735104, conflictStartTS=432224380076949504, conflictCommitTS=432224380078260224, key={tableID=2637, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:1:719:437 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380050735104, conflictStartTS=432224380076949504, conflictCommitTS=432224380078260224, key={tableID=2637, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..b5e4aabc --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:1:958:635 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:1:960:429 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:2:59:440 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:2:61:951 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:2:63:695 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:26:2:161:99 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:26:2:162:630 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380402794496, conflictStartTS=432224380376317952, conflictCommitTS=432224380429795328, key={tableID=2640, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-1 17:26:3:59:510 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380402794496, conflictStartTS=432224380376317952, conflictCommitTS=432224380429795328, key={tableID=2640, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..e1ac6532 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:3:299:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:26:3:301:212 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:3:399:491 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:3:401:59 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:3:402:511 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:26:3:500:141 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:26:3:599:677 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380727853056, conflictStartTS=432224380754067456, conflictCommitTS=432224380806496256, key={tableID=2643, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:4:500:121 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224380727853056, conflictStartTS=432224380754067456, conflictCommitTS=432224380806496256, key={tableID=2643, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b800534c --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:4:739:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:4:741:470 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:4:839:795 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:4:841:453 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:4:842:953 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:26:4:940:402 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:26:4:941:752 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381131554816, conflictStartTS=432224381105340416, conflictCommitTS=432224381158293504, key={tableID=2646, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-1 17:26:5:840:390 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381131554816, conflictStartTS=432224381105340416, conflictCommitTS=432224381158293504, key={tableID=2646, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..9f8074b2 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:6:79:629 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:6:81:307 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:6:179:517 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:6:181:178 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:6:182:728 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:26:6:280:72 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:26:6:379:899 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381456613376, conflictStartTS=432224381482827776, conflictCommitTS=432224381535256576, key={tableID=2649, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:7:280:225 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381456613376, conflictStartTS=432224381482827776, conflictCommitTS=432224381535256576, key={tableID=2649, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..f949704b --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:7:522:136 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:7:524:95 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:7:622:82 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:26:7:623:804 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:7:625:569 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:26:7:627:44 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:26:7:722:575 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381834625024, conflictStartTS=432224381860839424, conflictCommitTS=432224381862150144, key={tableID=2652, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-1 17:26:8:524:319 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224381834625024, conflictStartTS=432224381860839424, conflictCommitTS=432224381862150144, key={tableID=2652, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..8225bb49 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:8:766:639 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:8:768:770 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:8:866:356 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:8:868:96 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-1 17:26:8:871:606 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-1 17:26:8:966:494 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:26:8:968:202 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-1 17:26:8:969:719 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-1 17:26:9:68:781 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:26:9:70:425 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382187208704, conflictStartTS=432224382160994304, conflictCommitTS=432224382240686080, key={tableID=2655, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q11 failed at: 2022-4-1 17:26:10:268:732 + Q12 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382213423104, conflictStartTS=432224382160994304, conflictCommitTS=432224382240686080, key={tableID=2655, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-1 17:26:10:467:631 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382187208704, conflictStartTS=432224382160994304, conflictCommitTS=432224382240686080, key={tableID=2655, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..47b785fb --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:26:10:712:173 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:26:10:714:284 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:26:10:811:918 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:26:10:813:584 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-1 17:26:10:911:931 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2022-4-1 17:26:11:12:973 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:26:11:112:836 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-1 17:26:11:114:429 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-1 17:26:11:212:758 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:26:11:312:586 +Q11-T1 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; +Q11 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382670864384, conflictStartTS=432224382697078784, conflictCommitTS=432224382828412928, key={tableID=2658, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q11 failed at: 2022-4-1 17:26:12:517:725 + Q12 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382723293184, conflictStartTS=432224382697078784, conflictCommitTS=432224382828412928, key={tableID=2658, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-1 17:26:12:712:980 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224382670864384, conflictStartTS=432224382697078784, conflictCommitTS=432224382828412928, key={tableID=2658, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..6e6db82a --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:48:917:62 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:48:918:649 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:49:17:81 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:49:18:779 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:25:49:116:969 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:49:220:436 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:25:49:222:788 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:25:49:238:123 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:25:49:239:295 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..93929313 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,32 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:49:456:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:49:458:596 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:49:556:694 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:49:558:374 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:25:49:656:932 + Q6-T2 execute opt: 'COMMIT'; + Q6 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377125208064, conflictStartTS=432224377098993664, conflictCommitTS=432224377151422464, key={tableID=2610, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q6 failed at: 2022-4-1 17:25:50:357:539 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377125208064, conflictStartTS=432224377098993664, conflictCommitTS=432224377151422464, key={tableID=2610, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..56aa410e --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:50:592:926 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:50:594:629 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:50:693:157 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:50:695:188 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:25:50:793:607 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:25:50:795:52 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377423265792, conflictStartTS=432224377396789248, conflictCommitTS=432224377449742336, key={tableID=2613, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-1 17:25:51:596:568 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377423265792, conflictStartTS=432224377396789248, conflictCommitTS=432224377449742336, key={tableID=2613, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..9d1026d9 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:51:833:44 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:51:834:798 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:51:931:959 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:51:933:739 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:25:51:935:2 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:25:52:32:384 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377721847808, conflictStartTS=432224377747800064, conflictCommitTS=432224377748586496, key={tableID=2616, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-1 17:25:52:734:517 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224377721847808, conflictStartTS=432224377747800064, conflictCommitTS=432224377748586496, key={tableID=2616, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..398127af --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:55:550:641 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:25:55:552:710 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:55:651:180 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:55:653:91 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:25:55:654:504 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:25:55:750:224 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378696499200, conflictStartTS=432224378722713600, conflictCommitTS=432224378723762176, key={tableID=2625, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-1 17:25:56:452:235 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378696499200, conflictStartTS=432224378722713600, conflictCommitTS=432224378723762176, key={tableID=2625, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..536ed4cb --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:52:976:770 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:25:52:978:377 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:53:76:711 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:53:78:529 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-1 17:25:53:177:323 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:25:53:178:645 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378047954944, conflictStartTS=432224378021740544, conflictCommitTS=432224378074693632, key={tableID=2619, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-1 17:25:53:977:408 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378047954944, conflictStartTS=432224378021740544, conflictCommitTS=432224378074693632, key={tableID=2619, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..c7841396 --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-1 17:25:54:213:51 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:25:54:214:849 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-1 17:25:54:312:901 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:25:54:314:707 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-1 17:25:54:416:620 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:25:54:516:256 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378345750528, conflictStartTS=432224378371964928, conflictCommitTS=432224378425180160, key={tableID=2622, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-1 17:25:55:313:751 + +Test Result: Rollback +[MySQL][ODBC 8.0(w) Driver]Write conflict, txnStartTS=432224378345750528, conflictStartTS=432224378371964928, conflictCommitTS=432224378425180160, key={tableID=2622, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/centralizend_result/tidb_opt/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/tidb_opt/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/centralizend_result/tidb_opt/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..8c7f8b21 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:14:759:122 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:14:761:81 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:14:860:233 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:14:862:445 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:14:864:294 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:14:865:934 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:18:14:962:429 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:14:963:598 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:14:966:154 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:14:967:167 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..112ec1f7 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:15:204:606 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:15:206:319 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:15:304:901 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:15:306:846 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:15:308:477 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:15:309:977 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:15:405:431 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:15:406:951 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:15:424:219 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:15:425:427 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..b634c160 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:15:662:808 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:15:664:591 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:15:762:711 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:15:764:557 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:15:766:137 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:15:863:308 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:15:864:735 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:15:964:385 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:15:966:764 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:15:967:867 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..d8486cc1 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:17:233:579 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:17:235:356 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:17:336:358 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:17:338:323 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:17:340:234 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:17:341:774 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:17:434:266 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:17:435:719 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:17:438:158 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:17:439:436 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..f85b2866 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:16:227:229 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:18:16:249:442 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:18:16:251:304 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-1 17:18:16:327:513 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:18:16:330:423 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:18:16:332:151 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:16:333:628 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:16:428:438 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:18:16:431:422 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:18:16:434:5 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:16:435:57 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..fe67e21f --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:16:771:733 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:18:16:775:200 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:16:871:520 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:18:16:874:356 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:18:16:877:982 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:16:879:402 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:18:16:984:345 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:16:985:832 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:18:16:988:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:16:989:724 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..f2ea1158 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:17:696:585 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:18:17:698:635 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:17:800:203 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:17:802:545 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:17:898:214 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:17:900:337 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:18:17:997:556 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:18:97:429 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:18:18:197:552 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:18:297:75 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:18:397:201 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:18:497:390 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:18:500:379 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:18:501:585 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..2600a199 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:22:140:966 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:22:142:998 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:22:241:76 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:22:242:985 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:22:244:361 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:22:341:273 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:18:22:343:484 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:22:345:240 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:22:346:749 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:18:22:441:970 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:18:22:443:185 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:18:22:445:716 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:18:22:446:695 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..7cf85e90 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:21:370:783 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:21:374:385 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:21:470:483 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:21:473:153 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:21:571:434 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:18:21:573:365 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:21:574:853 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:18:21:673:481 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:18:21:676:49 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:21:677:554 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:18:21:772:226 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:21:773:422 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:18:21:873:804 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:18:21:875:178 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:18:21:879:468 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:18:21:880:639 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..27eaa1eb --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:18:742:179 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:18:18:744:238 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:18:842:117 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:18:844:184 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:18:942:159 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:18:944:128 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:18:19:42:806 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:19:144:627 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:18:19:242:904 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:19:342:830 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:19:442:702 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:19:542:756 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:18:19:545:271 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:19:546:410 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..00bb4379 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:19:779:86 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:18:19:783:351 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:19:879:9 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:18:19:880:986 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:19:979:293 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:18:19:981:567 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:18:20:79:807 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:18:20:179:847 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:18:20:280:55 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:20:379:600 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:20:479:608 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:20:579:819 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:20:582:483 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:20:583:625 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..5a580e12 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:22:685:674 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:18:22:687:804 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:18:22:689:749 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-1 17:18:22:785:692 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:18:22:787:860 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:18:22:789:673 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:22:791:696 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:18:22:885:725 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:18:22:887:955 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:18:22:890:38 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:22:891:184 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:18:22:988:972 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:18:22:990:574 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:18:22:993:524 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:18:22:994:532 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..4a66559f --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:20:825:498 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:18:20:827:553 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:20:928:71 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:18:20:930:268 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:20:932:96 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:20:934:38 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:18:20:935:785 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:20:937:198 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-1 17:18:21:25:522 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:18:21:27:683 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:18:21:29:370 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:18:21:31:394 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:18:21:33:53 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:21:34:420 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:18:21:126:537 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:18:21:127:772 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:18:21:130:713 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:18:21:131:796 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..26427bda --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:14:316:260 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:14:320:587 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:14:416:134 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:14:417:805 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:14:419:89 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:18:14:518:242 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:14:519:677 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:14:521:743 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:14:522:794 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..40a6a7d2 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:13:871:278 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:13:873:269 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:13:972:99 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:13:973:945 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:13:975:889 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:18:14:72:735 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:14:73:804 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:14:75:985 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:14:77:198 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:14:78:270 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..6fcc1918 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:52:447:732 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:52:449:688 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:52:547:640 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:52:549:412 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:52:551:84 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:17:52:762:853 +Q6 finished at: 2022-4-1 17:17:52:795:218 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:52:848:184 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:17:52:850:988 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:52:852:116 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..c4b2dc4a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:53:108:887 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:53:110:741 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:53:208:892 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:53:211:256 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:53:213:400 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:53:214:824 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:17:53:312:761 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:53:314:76 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:17:53:316:427 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:53:317:359 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..4bfd525a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:53:567:987 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:53:569:879 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:53:668:191 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:53:670:229 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:17:53:770:884 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:53:776:131 + Q5 finished at: 2022-4-1 17:17:53:776:671 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:17:53:868:202 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:53:870:447 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:53:871:363 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..531d1e18 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:54:121:952 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:17:54:123:764 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:54:221:897 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:54:223:779 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:17:54:225:297 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:17:54:322:754 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:17:54:422:152 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:54:521:894 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:54:524:235 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:54:525:118 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..25c1a1f0 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:55:706:739 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:55:708:619 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:55:808:192 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:17:55:822:53 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:55:824:12 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:17:55:914:420 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:55:920:788 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:17:56:12:262 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:56:15:209 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:56:16:423 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..f0f86f41 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:56:318:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:56:320:771 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:56:420:141 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:17:56:421:969 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:56:423:939 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:56:424:986 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:17:56:523:175 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:56:524:506 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:56:526:952 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:56:528:23 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..e001425a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:54:780:204 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:17:54:782:844 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:54:879:991 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:54:881:691 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:17:54:883:280 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:54:884:456 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:17:54:983:360 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:54:984:334 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:17:54:986:273 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:54:987:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..c1386b3e --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:55:238:688 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:17:55:243:763 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:55:338:894 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:17:55:340:885 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:17:55:342:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:55:344:173 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:17:55:440:5 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:55:441:40 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:17:55:443:280 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:55:444:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..fc6fc91a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:51:337:450 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:51:339:206 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:51:437:597 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:51:439:597 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:51:441:348 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:17:51:538:245 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:17:51:640:184 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:51:737:630 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:51:739:960 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:51:740:990 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..1b93be75 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:51:994:273 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:51:996:263 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:52:94:438 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:52:96:799 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:52:98:573 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:52:99:856 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:17:52:194:745 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:17:52:195:927 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:17:52:198:207 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:17:52:199:180 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..f04c3125 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:56:809:848 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:56:811:741 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:56:912:94 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:56:913:947 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:17:56:915:933 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:17:57:12:133 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:17:57:14:13 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:17:57:16:85 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:17:57:111:109 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:17:57:112:495 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:17:57:212:393 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:17:57:310:775 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:17:57:314:467 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:17:57:315:572 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..cbf4a886 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-1 17:17:57:600:213 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:17:57:602:929 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-1 17:17:57:713:470 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:17:57:719:499 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:17:57:801:574 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:17:57:804:339 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:17:57:807:19 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:17:57:900:578 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:17:57:902:544 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:17:58:4:206 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:17:58:102:450 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:17:58:200:738 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:17:58:300:550 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:17:58:301:784 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:17:58:305:178 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:17:58:306:106 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..2053927e --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:58:567:406 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:58:570:480 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:58:674:990 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:17:58:677:25 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:17:58:711:868 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:17:58:767:639 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:17:58:769:467 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:17:58:771:909 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:17:58:869:771 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:17:58:871:396 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:17:58:968:277 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:17:59:68:68 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:17:59:70:578 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:17:59:71:491 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..7dabf720 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:59:324:782 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:17:59:329:51 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:59:432:425 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:17:59:434:200 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:17:59:436:814 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:17:59:527:998 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:17:59:529:803 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:17:59:532:125 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:17:59:626:206 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:17:59:627:517 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:17:59:724:986 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:17:59:828:267 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:17:59:831:155 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:17:59:832:201 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..4dac8098 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:47:518:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:47:520:345 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:47:620:909 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:17:47:622:572 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:17:47:718:531 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:47:818:469 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:17:47:821:287 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:17:47:822:342 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..da7fb7e6 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:48:746:422 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:48:748:247 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:48:846:447 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:17:48:848:227 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:17:48:948:557 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:49:46:282 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:49:148:77 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:17:49:150:248 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:49:151:139 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b4c89394 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:49:409:445 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:49:411:456 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:49:509:666 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:17:49:511:952 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:17:49:513:109 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:17:49:609:833 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:49:611:82 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:17:49:613:305 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:49:614:307 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..b0627806 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:50:769:928 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:17:50:771:783 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:50:869:976 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:17:50:970:571 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:17:50:990:655 + Q4 finished at: 2022-4-1 17:17:51:63:993 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:17:51:82:538 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:17:51:84:783 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:51:85:586 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..939a8782 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:48:88:955 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:17:48:90:969 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:48:188:708 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:17:48:190:399 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:17:48:289:444 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:17:48:389:5 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:48:491:897 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:17:48:494:232 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:48:495:153 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..c68a3c71 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:49:864:265 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:17:49:866:605 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:49:964:282 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:17:49:966:126 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:17:49:967:473 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:17:50:65:406 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:50:66:655 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:17:50:68:565 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:50:69:544 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..6f8fb380 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:17:50:314:454 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:17:50:368:164 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:17:50:414:458 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:17:50:416:321 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:17:50:417:440 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:17:50:516:228 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:17:50:517:162 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:17:50:519:391 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:17:50:520:204 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..a196f58c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:4:23:316 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:4:25:168 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:4:124:124 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:4:125:966 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:18:4:227:633 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:4:248:652 + Q5 finished at: 2022-4-1 17:18:4:280:195 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:4:281:510 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:4:284:410 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:4:285:511 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..67f3bd0b --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:4:520:498 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:4:522:376 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:4:620:415 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:4:622:299 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:4:766:889 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:4:820:814 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:18:5:431:565 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..38757763 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:5:667:766 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:5:670:834 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:5:767:333 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:5:769:168 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:5:880:677 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:5:967:859 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:18:6:480:823 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cccc0977 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:6:716:61 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:6:717:811 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:6:816:158 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:6:817:967 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:6:941:872 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:6:943:309 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:18:7:639:788 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..f358b76c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:7:874:757 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:7:876:649 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:7:974:225 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:7:975:963 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:7:977:610 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:8:179:388 +Q6 finished at: 2022-4-1 17:18:8:180:107 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:8:181:467 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:8:183:940 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:8:184:962 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7ad20233 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:8:417:932 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:8:419:702 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:8:518:86 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:8:520:2 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:8:521:679 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:8:733:253 +Q6 finished at: 2022-4-1 17:18:8:761:750 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:8:818:352 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:8:820:737 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:8:821:762 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c4163b6c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:9:54:136 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:9:55:998 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:9:154:265 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:9:156:201 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:9:267:207 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:9:283:201 + Q5 finished at: 2022-4-1 17:18:9:283:528 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:9:354:429 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:9:356:769 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:9:357:790 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..43309280 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:9:591:549 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:9:593:205 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:9:691:512 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:9:693:496 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:9:804:511 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:10:6:819 + Q5 finished at: 2022-4-1 17:18:10:47:740 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:10:49:249 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:10:51:587 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:10:52:570 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..f76ea842 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:10:285:560 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:10:287:509 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:10:385:645 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:10:387:422 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:10:493:354 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:10:504:9 + Q5 finished at: 2022-4-1 17:18:10:504:298 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:10:505:615 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:10:508:2 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:10:508:883 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1f4869d4 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:10:744:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:10:746:856 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:10:844:530 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:10:846:363 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:10:944:594 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:10:958:782 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:18:11:75:920 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:11:148:827 + Q8 finished at: 2022-4-1 17:18:11:149:214 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:11:245:82 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:18:11:965:622 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..6bb05d14 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:12:206:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:12:208:725 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:12:306:711 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:12:308:681 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:12:406:733 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:12:612:997 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:18:12:729:424 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:12:823:166 + Q8 finished at: 2022-4-1 17:18:12:855:286 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:13:9:13 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:18:13:624:444 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..367b0a52 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:0:202:793 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:0:204:534 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:0:335:899 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:18:0:406:215 + Q4 finished at: 2022-4-1 17:18:0:432:437 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:0:503:132 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:18:0:505:288 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:18:0:539:222 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:0:543:729 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..67b4dbdb --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:0:776:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:0:778:220 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:0:876:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:18:0:987:415 + Q4 finished at: 2022-4-1 17:18:0:987:859 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:1:80:378 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:18:1:82:640 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:18:1:96:629 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:1:98:626 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..1b576a5a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:1:315:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:1:317:227 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:1:415:479 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:18:1:515:943 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:18:1:527:907 + Q4 finished at: 2022-4-1 17:18:1:587:730 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:1:615:689 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:18:1:618:691 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:1:619:525 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d5e87209 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:1:847:239 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:1:849:47 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:1:947:256 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:18:2:47:820 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:2:59:888 + Q4 finished at: 2022-4-1 17:18:2:88:449 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:2:89:864 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:18:2:91:982 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:2:93:51 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..f651510c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:3:530:183 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:3:532:23 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:3:630:70 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:18:3:730:652 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:3:751:632 + Q4 finished at: 2022-4-1 17:18:3:787:408 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:3:788:812 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:3:790:994 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:3:791:947 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..54215405 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:2:322:116 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:2:323:794 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:2:422:101 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:2:423:966 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:2:632:394 +Q5 finished at: 2022-4-1 17:18:2:660:990 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:18:2:662:645 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:2:664:865 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:2:665:805 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..70f63738 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:2:897:458 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:2:899:241 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:2:997:478 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:2:999:484 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:3:212:643 +Q5 finished at: 2022-4-1 17:18:3:244:885 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:3:297:618 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:3:299:723 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:3:300:744 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..14e114fe --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:50:282:523 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:50:284:223 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:50:384:50 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:50:386:80 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:50:387:732 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:50:389:120 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:18:50:483:43 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:50:484:126 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:50:486:192 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:50:487:270 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..11751c74 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:50:741:146 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:50:743:10 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:50:841:29 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:50:843:64 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:50:845:10 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:50:846:433 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:50:941:996 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:50:943:422 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:50:945:989 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:50:947:119 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..2494bef8 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:51:204:505 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:51:206:151 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:51:304:528 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:51:306:222 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:51:307:968 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:51:408:875 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:51:410:317 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:51:504:986 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:51:507:613 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:51:508:643 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..f86954bb --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:52:729:190 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:52:730:948 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:52:829:266 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:52:831:86 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:52:832:867 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:52:834:304 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:52:929:979 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:52:931:517 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:52:933:811 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:52:934:869 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..d0484c17 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:51:792:93 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-1 17:18:51:794:887 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-1 17:18:51:796:703 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-1 17:18:51:892:38 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-1 17:18:51:894:878 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-1 17:18:51:896:667 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:51:898:19 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:51:992:459 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-1 17:18:51:995:395 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-1 17:18:52:17:11 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:52:18:320 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..97915f9e --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:52:272:338 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-1 17:18:52:275:353 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:52:372:473 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-1 17:18:52:376:201 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-1 17:18:52:379:43 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:52:380:507 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-1 17:18:52:474:286 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:52:475:571 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-1 17:18:52:477:746 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:52:478:777 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..a005a361 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:53:190:390 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:18:53:192:537 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:53:290:310 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:53:292:443 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:53:392:212 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:53:394:298 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:18:53:491:82 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:53:591:371 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:18:53:691:347 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:53:791:19 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:53:891:58 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:53:991:89 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:53:993:927 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:53:997:549 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..ce54079c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:57:701:203 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:57:703:186 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:57:802:14 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:57:804:2 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:57:805:397 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:57:901:199 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:18:57:903:797 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:57:905:480 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:57:906:818 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-1 17:18:58:2:354 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:18:58:3:548 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-1 17:18:58:6:281 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:18:58:7:454 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..5930da18 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:56:931:108 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:56:933:786 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:57:31:145 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:57:33:835 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:57:131:140 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-1 17:18:57:133:44 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:57:134:436 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:18:57:232:93 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:18:57:234:91 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:57:235:518 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-1 17:18:57:332:848 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:57:334:21 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-1 17:18:57:433:728 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-1 17:18:57:435:1 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:18:57:439:101 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:18:57:440:182 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..bef0d401 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:54:256:184 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-1 17:18:54:258:397 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:54:356:97 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:54:358:122 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:54:456:88 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:54:457:959 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-1 17:18:54:556:826 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-1 17:18:54:656:712 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-1 17:18:54:760:759 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:54:856:628 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:54:956:695 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:55:57:24 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:18:55:59:491 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:55:60:539 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..954fe524 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:55:307:587 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-1 17:18:55:311:953 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:55:407:651 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-1 17:18:55:409:755 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:55:507:558 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-1 17:18:55:509:581 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-1 17:18:55:608:352 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-1 17:18:55:708:614 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-1 17:18:55:808:578 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:55:908:46 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:56:8:412 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:56:108:35 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:56:110:722 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:56:111:752 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..25319fe8 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:58:265:658 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:18:58:267:749 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-1 17:18:58:269:824 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-1 17:18:58:365:700 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-1 17:18:58:367:995 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-1 17:18:58:370:1 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:58:371:356 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:18:58:465:628 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-1 17:18:58:467:815 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:18:58:469:876 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:58:471:10 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-1 17:18:58:566:403 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-1 17:18:58:567:913 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-1 17:18:58:570:640 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-1 17:18:58:571:805 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..8ad969aa --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:56:366:289 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-1 17:18:56:368:417 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:56:466:234 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-1 17:18:56:468:499 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:56:470:188 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-1 17:18:56:472:319 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-1 17:18:56:474:129 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:56:475:578 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-1 17:18:56:566:275 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-1 17:18:56:568:376 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-1 17:18:56:570:21 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-1 17:18:56:571:981 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-1 17:18:56:573:596 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:56:574:963 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-1 17:18:56:667:487 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-1 17:18:56:668:701 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-1 17:18:56:671:432 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-1 17:18:56:672:415 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c7d0b286 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:49:812:969 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:49:814:851 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:49:916:341 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:49:918:346 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:49:919:885 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-1 17:18:50:14:70 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:50:15:517 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:50:17:873 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:50:18:977 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..94cae838 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:49:351:711 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:49:353:431 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:49:451:816 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:49:453:678 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:49:454:952 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:18:49:552:238 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:49:553:497 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:49:555:579 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:49:556:577 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:49:557:448 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..aca8bdff --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:28:138:748 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:28:140:648 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:28:239:473 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:28:241:395 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:28:243:160 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:28:441:732 +Q6 finished at: 2022-4-1 17:18:28:442:240 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:28:539:148 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:18:28:541:816 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:28:542:945 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..70a229b1 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:28:788:384 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:28:790:351 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:28:888:319 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:28:890:393 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:28:892:374 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:28:893:595 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:28:989:292 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:28:990:668 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-1 17:18:28:993:224 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:28:994:272 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..cbd6eeb1 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:29:244:577 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:29:246:796 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:29:344:454 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:29:345:987 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:18:29:451:966 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:29:462:756 + Q5 finished at: 2022-4-1 17:18:29:463:476 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:29:545:854 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:29:548:441 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:29:549:500 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..48ffd56d --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:29:804:940 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:29:806:847 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:29:908:199 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:29:911:129 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:29:913:132 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:18:30:8:805 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:30:106:512 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:30:205:139 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:30:207:970 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:30:209:37 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..89330ca0 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:31:389:299 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:31:391:502 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:31:488:264 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:31:490:480 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:31:492:406 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:31:588:997 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:31:590:309 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:31:687:923 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:31:690:578 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:31:692:60 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..c8593962 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:31:956:142 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:31:957:945 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:32:57:522 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:32:59:404 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:32:61:352 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:32:62:346 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:32:161:33 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:32:162:475 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:32:165:488 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:32:166:585 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..a943b74a --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:30:478:821 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:18:30:481:599 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:30:580:254 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:30:582:245 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:30:584:42 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:30:585:586 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:18:30:680:414 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:30:681:659 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-1 17:18:30:683:809 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:30:684:794 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..aee32930 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:30:932:928 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-1 17:18:30:941:337 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:31:32:161 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-1 17:18:31:34:288 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-1 17:18:31:36:75 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:31:37:441 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-1 17:18:31:133:687 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:31:134:768 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-1 17:18:31:137:277 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:31:138:399 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..35ab3b08 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:27:42:324 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:27:44:53 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:27:142:591 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:27:144:598 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:27:146:611 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-1 17:18:27:242:964 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:27:342:758 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:27:442:580 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:27:444:919 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:27:445:844 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2cda2b7b --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:27:688:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:27:690:229 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:27:788:397 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:27:790:120 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:27:791:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:27:792:952 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:18:27:889:167 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:27:890:325 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:27:892:528 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:27:893:466 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..25612b58 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:32:421:217 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:32:441:957 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:32:524:124 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:32:525:995 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-1 17:18:32:527:868 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:32:621:211 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:32:623:57 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-1 17:18:32:625:121 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-1 17:18:32:722:306 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:32:723:685 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:32:821:546 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:32:921:503 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:32:925:124 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:32:926:239 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..d655be63 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-1 17:18:33:175:349 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-1 17:18:33:178:48 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-1 17:18:33:275:332 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-1 17:18:33:277:24 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:33:376:151 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-1 17:18:33:379:154 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:18:33:382:46 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-1 17:18:33:476:92 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-1 17:18:33:478:21 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-1 17:18:33:577:317 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-1 17:18:33:675:683 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:33:775:786 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-1 17:18:33:875:531 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:33:876:755 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-1 17:18:33:880:56 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-1 17:18:33:880:967 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..cebe2755 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:34:126:580 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:34:128:346 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:34:226:456 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:34:228:73 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:18:34:230:716 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:34:326:558 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:34:328:327 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-1 17:18:34:330:967 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:18:34:433:684 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:34:435:312 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:34:526:767 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:34:626:835 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-1 17:18:34:628:946 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:34:629:912 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..91a9724b --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:34:868:785 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-1 17:18:34:872:877 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:34:968:938 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-1 17:18:34:970:802 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-1 17:18:34:973:126 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:35:68:941 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-1 17:18:35:70:663 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-1 17:18:35:73:89 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-1 17:18:35:170:447 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-1 17:18:35:171:726 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:35:269:112 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:35:372:213 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-1 17:18:35:375:42 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-1 17:18:35:376:80 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..f2f8c6df --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:23:340:585 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:23:342:483 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:23:441:152 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:23:442:965 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:18:23:543:99 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:23:640:304 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-1 17:18:23:642:911 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:23:643:834 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..e54303fd --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:24:524:952 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:24:526:999 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:24:624:877 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:24:626:601 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-1 17:18:24:728:575 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:24:824:939 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:24:926:390 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:18:24:928:728 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:24:929:876 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..06b3e66d --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:25:169:701 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:25:171:733 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:25:269:676 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-1 17:18:25:271:819 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:25:273:581 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-1 17:18:25:370:474 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:25:371:815 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-1 17:18:25:373:932 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:25:374:912 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..95584d5f --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:26:496:957 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:26:498:608 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:26:597:25 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:18:26:697:678 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:18:26:713:125 + Q4 finished at: 2022-4-1 17:18:26:747:442 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:26:797:191 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:26:799:257 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:26:800:94 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..5d195ed9 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:23:881:129 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:23:882:814 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:23:981:190 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:23:982:928 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-1 17:18:24:81:768 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:24:181:367 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:24:281:132 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:24:283:324 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:24:284:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..d6b6c4a7 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:25:613:427 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:18:25:615:709 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:25:713:446 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:25:715:99 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:25:716:215 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:18:25:814:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:25:815:707 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-1 17:18:25:817:454 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:25:818:300 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..42195cfc --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:26:53:8 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-1 17:18:26:57:856 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:26:153:74 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-1 17:18:26:155:17 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:26:156:234 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-1 17:18:26:254:22 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:26:255:10 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-1 17:18:26:256:875 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:26:257:770 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-read-skew_repeatable-read.txt b/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-read-skew_repeatable-read.txt new file mode 100644 index 00000000..9392d87b --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-read-skew_repeatable-read.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: half-predicate-read-skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------tidb_half-predicate-read-skew test prepare---------- +T1 execute sql: 'DROP TABLE IF EXISTS t1;' +T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + +----------tidb_half-predicate-read-skew test run---------- +T1 execute sql: 'select * from t1 where v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 execute sql: 'update t1 set v=2 where k=1;' + T2 execute sql: 'insert into t1 values(0,0);' +T1 execute sql: 'select * from t1 where k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,2) + + T3 execute sql: 'select * from t1;' + current_result: + (0,0) (1,2) + *(1) expected_result: + (0,0) (1,2) + *(2) expected_result: + (0,0) (1,2) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-write-skew_repeatable-read.txt b/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-write-skew_repeatable-read.txt new file mode 100644 index 00000000..ef528ad4 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-write-skew_repeatable-read.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: half-predicate-write-skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------tidb_half-predicate-write-skew test prepare---------- +T1 execute sql: 'DROP TABLE IF EXISTS t1;' +T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + +----------tidb_half-predicate-write-skew test run---------- +T1 execute sql: 'select * from t1 where v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 execute sql: 'select * from t1 where k=1;' + current_result: + (1,1) + (1) expected_result: + (1,2) + *(2) expected_result: + (1,1) + +T1 execute sql: 'update t1 set v=2 where k=1;' + T2 execute sql: 'insert into t1 values(0,0);' + T3 execute sql: 'select * from t1;' + current_result: + (0,0) (1,2) + *(1) expected_result: + (0,0) (1,2) + *(2) expected_result: + (0,0) (1,2) + + +Test Result: Exception +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..b5987602 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:39:456:404 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:39:458:134 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:39:556:527 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:39:558:289 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-1 17:18:39:664:20 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:39:669:237 + Q5 finished at: 2022-4-1 17:18:39:669:533 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:39:670:828 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:39:673:157 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:39:674:42 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..ff5b2b98 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:39:919:549 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:39:921:293 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:40:19:806 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:40:21:628 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:40:140:366 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:40:219:938 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:18:40:738:250 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a5bc1ae6 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:40:992:612 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:40:994:500 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:41:92:591 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:41:94:573 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:41:217:550 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:41:294:149 +Q6 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-1 17:18:41:815:491 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..2d318df2 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:42:64:173 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:42:65:861 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:42:164:117 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:42:165:846 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-1 17:18:42:284:635 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:42:285:986 +Q7 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-1 17:18:42:982:480 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5642a1f3 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:43:233:215 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:43:234:834 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:43:333:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:43:335:173 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:43:336:759 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:43:543:321 +Q6 finished at: 2022-4-1 17:18:43:543:771 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:43:545:119 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:43:547:365 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:43:548:404 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..9aee3526 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:43:800:846 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-1 17:18:43:802:505 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:43:904:125 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:43:906:337 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-1 17:18:43:908:331 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:44:121:557 +Q6 finished at: 2022-4-1 17:18:44:121:880 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:44:201:368 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:44:203:758 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:44:204:741 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..55275f9c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:44:464:798 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:44:466:616 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:44:567:1 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:44:569:647 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:44:670:231 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:44:685:987 + Q5 finished at: 2022-4-1 17:18:44:718:311 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-1 17:18:44:765:234 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:44:767:659 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:44:768:716 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..c38774ba --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:45:23:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:45:25:469 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:45:123:609 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:45:125:363 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-1 17:18:45:232:662 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:45:430:631 + Q5 finished at: 2022-4-1 17:18:45:477:930 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:45:479:338 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:45:482:74 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:45:483:163 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..8b8510dd --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:45:733:818 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:45:735:590 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:45:833:625 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-1 17:18:45:835:455 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-1 17:18:45:941:569 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-1 17:18:45:957:453 + Q5 finished at: 2022-4-1 17:18:45:957:842 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:45:959:216 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-1 17:18:45:964:820 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:45:965:963 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..e59c9f71 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:46:221:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:46:223:106 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:46:321:192 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:46:323:25 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-1 17:18:46:424:27 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:46:434:556 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-1 17:18:46:534:511 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-1 17:18:46:628:209 + Q8 finished at: 2022-4-1 17:18:46:628:520 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:46:721:954 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:18:47:434:504 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..2bd1da08 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:47:689:987 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:47:691:750 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:47:790:686 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-1 17:18:47:792:661 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-1 17:18:47:892:71 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-1 17:18:48:95:309 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-1 17:18:48:200:495 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-1 17:18:48:302:211 + Q8 finished at: 2022-4-1 17:18:48:342:272 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-1 17:18:48:491:37 +Q9 failed reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-1 17:18:49:100:688 + +Test Result: Rollback +Reason: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.25-TiDB-v4.0.10]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..c2ae16f5 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:35:621:612 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:35:623:482 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:35:721:575 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-1 17:18:35:822:416 + Q4 finished at: 2022-4-1 17:18:35:822:549 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:35:921:778 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:18:35:923:951 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:18:35:948:426 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:35:949:734 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..f62b8419 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:36:171:816 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:36:173:508 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:36:271:738 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-1 17:18:36:378:337 + Q4 finished at: 2022-4-1 17:18:36:378:621 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:36:472:270 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-1 17:18:36:474:591 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-1 17:18:36:496:216 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:36:497:395 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..79754370 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:36:726:925 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:36:728:791 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:36:826:967 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-1 17:18:36:927:342 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:18:36:932:775 + Q4 finished at: 2022-4-1 17:18:36:933:137 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:37:27:145 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:18:37:29:486 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:37:30:425 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..c6cb147c --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:37:277:443 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:37:279:91 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:37:377:292 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-1 17:18:37:477:773 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:37:488:445 + Q4 finished at: 2022-4-1 17:18:37:488:738 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:37:489:903 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-1 17:18:37:491:986 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:37:492:963 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..74875ee6 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:38:953:266 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-1 17:18:38:955:48 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:39:53:300 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-1 17:18:39:153:833 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:39:169:936 + Q4 finished at: 2022-4-1 17:18:39:203:317 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-1 17:18:39:204:807 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:39:207:130 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:39:208:236 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..78524700 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:37:735:732 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:37:737:319 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:37:835:664 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:37:837:558 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-1 17:18:38:50:696 +Q5 finished at: 2022-4-1 17:18:38:51:106 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-1 17:18:38:52:418 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:38:54:550 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:38:55:608 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..047ebb94 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-1 17:18:38:302:254 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-1 17:18:38:304:184 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-1 17:18:38:402:343 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-1 17:18:38:404:211 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-1 17:18:38:612:120 +Q5 finished at: 2022-4-1 17:18:38:612:440 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-1 17:18:38:702:519 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-1 17:18:38:704:894 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-1 17:18:38:706:128 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/tidb_per/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/tidb_per/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/tidb_per/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/tidb_per/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/tidb_per/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..42d5fc7b --- /dev/null +++ b/test_result/centralizend_result/tidb_per/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..af5c58de --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt @@ -0,0 +1,107 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Avoid + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Avoid + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Avoid + +rat_mda_step_rat_predicate_based_insert: Avoid + +wat_sda_dirty_write_1abort: Timeout + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..2410e404 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:36:26:203:890 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:36:26:922:251 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:36:27:203:961 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:36:27:267:657 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:36:27:331:236 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:36:27:395:316 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-11 0:36:28:857:273 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:36:28:915:31 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:36:38:201:272 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-11 0:36:38:888:167 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:36:39:685:667 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:36:39:743:568 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..17202cb7 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:36:44:617:572 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:36:45:324:834 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:36:45:620:156 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:36:45:684:269 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:36:45:748:124 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:36:45:811:124 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 +Q7 failed at: 2022-4-11 0:36:47:324:860 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..23f7b920 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:37:1:529:759 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:37:2:236:706 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:37:2:535:373 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-11 0:37:3:309:651 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:37:3:374:792 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-11 0:37:3:536:355 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q7 failed at: 2022-4-11 0:37:4:299:120 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..016328cf --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,52 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:44:9:858:657 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-13 14:44:10:523:515 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:44:14:864:101 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 14:44:15:509:851 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-13 14:44:15:565:930 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 14:44:15:618:832 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-13 14:44:19:863:24 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q8 failed at: 2022-4-13 14:44:20:725:7 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..36ab62dc --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,77 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:37:19:331:595 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-11 0:37:19:391:411 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-11 0:37:19:451:712 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-11 0:37:20:341:445 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:37:21:343:356 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-11 0:37:21:347:330 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-11 0:37:21:401:151 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:37:21:461:435 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:37:31:341:360 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-11 0:37:31:403:706 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-4-11 0:37:31:465:385 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-4-11 0:37:31:532:686 + Q13-T3 execute sql: 'COMMIT TRANSACTION;' + Q13 finished at: 2022-4-11 0:37:31:680:174 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..c8b7c1d5 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:37:36:66:298 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-11 0:37:36:999:691 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:37:37:60:110 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-11 0:37:38:38:234 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7 finished at: 2022-4-11 0:37:38:66:948 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:37:38:363:474 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:37:38:419:723 +Q8 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q8 failed at: 2022-4-11 0:37:38:924:428 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..50166211 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt @@ -0,0 +1,88 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:45:54:623:580 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q2 finished at: 2022-4-13 14:45:55:397:283 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:45:59:621:940 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-13 14:46:0:298:816 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-13 14:46:4:625:888 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-13 14:46:5:260:710 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-4-13 14:46:9:629:210 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-13 14:46:14:626:62 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q9 finished at: 2022-4-13 14:46:19:635:811 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q10 failed at: 2022-4-13 14:46:25:638:495 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..5d59ff27 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,128 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:40:0:959:422 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:40:1:651:966 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:40:1:961:748 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-4-11 0:40:2:22:240 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:40:2:79:519 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:40:2:961:927 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-4-11 0:40:3:636:653 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-11 0:40:3:699:437 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-11 0:40:3:765:984 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-4-11 0:40:4:902:26 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-11 0:40:4:960:318 + Q12-T4 execute sql: 'BEGIN TRANSACTION;' + Q12 finished at: 2022-4-11 0:40:13:963:330 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-4-11 0:40:15:203:270 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-4-11 0:40:15:907:992 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-11 0:40:15:967:910 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..2049b939 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,245 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:44:37:691:800 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-13 14:44:38:310:514 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:44:42:688:796 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 14:44:43:336:732 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-13 14:44:47:694:692 + Q6-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-4-13 14:44:47:753:904 + Q7-T3 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-13 14:44:47:810:406 + Q8-T4 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-13 14:44:52:686:253 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-13 14:44:52:743:987 + Q10-T4 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-13 14:44:52:794:342 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,0) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-4-13 14:44:58:320:197 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-13 14:44:58:370:605 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-4-13 14:45:3:267:17 +Q14-T1 execute sql: 'COMMIT TRANSACTION;' +Q14 finished at: 2022-4-13 14:45:3:316:265 + Q15-T5 execute sql: 'BEGIN TRANSACTION;' + Q15 finished at: 2022-4-13 14:45:7:689:392 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-13 14:45:8:418:998 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-13 14:45:9:76:482 + Q18-T5 execute sql: 'COMMIT TRANSACTION;' + Q18 finished at: 2022-4-13 14:45:9:125:854 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..32e5f921 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,92 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:38:33:306:179 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-11 0:38:34:47:850 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:38:34:308:824 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-11 0:38:35:188:491 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-11 0:38:35:301:986 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-11 0:38:36:42:449 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-4-11 0:38:36:576:295 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-4-11 0:38:37:312:170 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:38:39:311:98 + Q9 finished at: 2022-4-11 0:38:39:319:241 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q11 failed at: 2022-4-11 0:38:41:414:690 + Q12 finished at: 2022-4-11 0:38:41:577:581 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..3c96efda --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,89 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:38:56:464:222 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q2 finished at: 2022-4-11 0:38:57:194:95 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:38:57:458:728 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q4 finished at: 2022-4-11 0:38:58:137:833 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-11 0:38:58:459:275 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-11 0:38:59:417:241 +Q7 finished at: 2022-4-11 0:38:59:465:998 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-4-11 0:39:0:460:236 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-4-11 0:39:1:465:176 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:39:2:469:918 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q11 failed at: 2022-4-11 0:39:4:573:15 + Q12 finished at: 2022-4-11 0:39:4:644:557 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..7526ba89 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,123 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:45:21:712:81 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-13 14:45:22:380:988 +Q3-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q3 finished at: 2022-4-13 14:45:23:35:581 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-13 14:45:26:713:838 + Q5-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q5 finished at: 2022-4-13 14:45:27:363:840 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-4-13 14:45:27:417:996 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-13 14:45:27:471:30 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-13 14:45:31:726:955 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-4-13 14:45:32:347:447 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-13 14:45:33:35:269 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-13 14:45:33:89:804 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-4-13 14:45:36:716:196 +Q13-T1 execute sql: 'COMMIT TRANSACTION;' +Q13 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q13 failed at: 2022-4-13 14:45:38:72:419 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..b5a51c77 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,184 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 1:4:30:562:799 +Q2-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q2 finished at: 2022-4-11 1:4:31:279:356 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 1:4:31:552:630 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q4 finished at: 2022-4-11 1:4:32:229:873 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 1:4:32:287:496 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 1:4:32:548:424 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-11 1:4:33:328:709 + Q7-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7 finished at: 2022-4-11 1:4:33:389:999 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-11 1:4:33:453:639 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-4-11 1:4:34:107:784 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-4-11 1:4:34:164:395 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-4-11 1:4:34:170:607 +Q16-T1 execute sql: 'COMMIT TRANSACTION;' +Q16 finished at: 2022-4-11 1:4:34:234:390 + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-4-11 1:4:34:812:614 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-4-11 1:4:34:864:352 + Q14-T3 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-11 1:4:34:915:353 + Q17-T4 execute sql: 'BEGIN TRANSACTION;' + Q17 finished at: 2022-4-11 1:4:43:560:977 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) (2,0,2,1) + *(1) expected_result: + (0,1,0,2) (2,0,2,1) + *(2) expected_result: + (0,1,0,2) (2,0,2,1) + *(3) expected_result: + (0,1,0,2) (2,0,2,1) + *(4) expected_result: + (0,1,0,2) (2,0,2,1) + *(5) expected_result: + (0,1,0,2) (2,0,2,1) + *(6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-4-11 1:4:44:516:50 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-4-11 1:4:45:200:297 + Q20-T4 execute sql: 'COMMIT TRANSACTION;' + Q20 finished at: 2022-4-11 1:4:45:260:365 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..8dfb100f --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:46:52:210:42 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-13 14:46:52:872:832 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:46:57:210:908 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-13 14:46:57:264:718 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-13 14:46:57:317:347 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649832412.183854643,0 t errcode: HY000 +Q6 failed at: 2022-4-13 14:47:2:822:108 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649832412.183854643,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..d379608a --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:35:51:539:255 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 0:35:52:205:81 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:35:52:275:179 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 0:35:52:332:963 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:35:52:389:428 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 0:35:53:901:791 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:35:53:952:885 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:36:3:277:907 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 0:36:4:553:212 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:36:4:613:927 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..9317a999 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:23:41:336:651 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:23:41:389:392 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:23:42:345:813 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:23:42:404:637 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q6 finished at: 2022-4-11 0:23:43:406:560 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q5 failed at: 2022-4-11 0:23:44:515:518 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..81e88f72 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,36 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:24:0:218:7 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:24:0:278:449 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:24:1:217:865 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:24:1:278:157 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 finished at: 2022-4-11 0:24:2:273:31 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:24:2:334:9 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q5 failed at: 2022-4-11 0:24:4:98:640 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..33a50693 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,68 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:24:17:135:564 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:24:17:188:202 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:24:18:143:523 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:24:18:204:658 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-11 0:24:19:808:3 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:24:19:867:841 + Q5 finished at: 2022-4-11 0:24:19:876:733 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-11 0:24:20:146:705 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:24:30:149:717 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,2) + + Q10 finished at: 2022-4-11 0:24:30:894:441 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:24:31:581:984 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:24:31:645:315 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..512c1ec4 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:24:36:242:119 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:24:36:926:576 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:24:37:250:386 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:24:37:574:9 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:24:37:635:103 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-11 0:24:38:922:993 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:24:39:248:845 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:24:40:250:227 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:24:50:255:38 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-11 0:24:50:973:240 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:24:51:708:150 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:24:51:771:348 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ea6834d6 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:31:45:309:13 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-13 11:31:45:363:655 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:31:55:316:700 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 11:31:55:975:995 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-13 11:32:5:312:942 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-13 11:32:5:368:597 + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-13 11:32:6:5:528 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-13 11:32:15:311:121 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-13 11:32:25:315:346 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-13 11:32:26:11:947 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-13 11:32:26:645:924 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-13 11:32:26:696:277 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..a7737eaf --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:30:26:235:807 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-13 11:30:26:290:607 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:30:36:236:16 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 11:30:36:893:813 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-13 11:30:46:244:942 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-13 11:30:46:297:395 + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-13 11:30:46:905:362 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 11:30:46:954:509 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-13 11:30:56:236:151 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-13 11:30:56:853:44 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-13 11:30:57:495:301 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-13 11:30:57:544:933 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..1f40d2ca --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:53:13:888:75 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-11 0:53:14:551:933 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:53:14:611:317 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:53:14:674:204 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:53:14:735:113 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:53:14:795:75 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-4-11 0:53:16:239:234 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:53:16:303:77 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:53:25:601:652 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-4-11 0:53:26:321:270 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-4-11 0:53:27:36:812 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:53:27:90:523 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..4541d615 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,62 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:25:14:93:27 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 0:25:14:826:643 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:25:15:93:555 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-11 0:25:15:153:722 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-11 0:25:15:212:973 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:25:15:273:459 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 0:25:17:24:741 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:25:17:79:801 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:25:26:96:474 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-4-11 0:25:26:779:803 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-11 0:25:26:842:15 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..5f630d4c --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:23:2:342:542 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:23:2:399:840 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:23:3:350:35 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:23:3:411:498 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-11 0:23:5:266:568 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:23:6:366:102 + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-11 0:23:6:998:634 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:23:7:51:731 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:23:16:346:876 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-11 0:23:17:144:896 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:23:18:129:181 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:23:18:188:752 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..8a5c4042 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,75 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:23:23:31:244 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:23:23:123:11 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:23:24:31:850 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:23:24:84:242 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-11 0:23:25:662:872 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:23:25:726:630 + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-11 0:23:26:492:863 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:23:26:550:382 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:23:35:37:328 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-11 0:23:35:751:772 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:23:36:713:180 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:23:36:774:914 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..313c6151 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt @@ -0,0 +1,131 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:26:6:950:808 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:26:7:5:934 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:26:7:958:482 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:26:8:24:756 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:26:8:958:201 + Q7-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-4-11 0:26:10:585:53 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:26:10:645:925 + Q7 finished at: 2022-4-11 0:26:10:652:455 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-11 0:26:11:519:440 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-11 0:26:11:580:534 + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-4-11 0:26:12:205:369 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:26:12:264:995 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-11 0:26:21:953:291 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-4-11 0:26:22:777:690 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-4-11 0:26:23:469:758 + Q16-T4 execute sql: 'COMMIT TRANSACTION;' + Q16 finished at: 2022-4-11 0:26:23:527:604 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..dcac0b75 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,245 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN TRANSACTION;' + Q1 finished at: 2022-4-11 0:26:28:93:96 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q2 finished at: 2022-4-11 0:26:28:810:50 +Q3-T1 execute sql: 'BEGIN TRANSACTION;' +Q3 finished at: 2022-4-11 0:26:29:88:12 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-4-11 0:26:29:141:174 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-11 0:26:30:93:321 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q6 finished at: 2022-4-11 0:26:30:820:568 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + Q8-T2 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:26:31:101:492 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-11 0:26:31:168:35 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-11 0:26:32:949:584 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-11 0:26:33:98:350 + current_result: + (0,1,0,3) + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,0) + (11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,0) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q7 finished at: 2022-4-11 0:26:33:765:995 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:26:34:99:219 + Q13-T3 execute sql: 'COMMIT TRANSACTION;' + Q13 finished at: 2022-4-11 0:26:35:101:650 + Q14-T4 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-11 0:26:36:98:767 + Q15-T5 execute sql: 'BEGIN TRANSACTION;' + Q15 finished at: 2022-4-11 0:26:46:98:658 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-11 0:26:47:299:352 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-11 0:26:47:963:256 + Q18-T5 execute sql: 'COMMIT TRANSACTION;' + Q18 finished at: 2022-4-11 0:26:48:109:915 + +The current result is consistent with the [(13) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..ce98c643 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,112 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:26:52:557:816 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:26:52:634:185 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:26:53:835:600 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-11 0:26:53:903:408 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:26:54:563:265 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-11 0:26:54:629:465 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-11 0:26:55:561:904 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:26:55:622:208 + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 0:26:55:634:334 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-11 0:26:56:561:806 + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-11 0:26:56:566:668 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:26:57:566:536 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-11 0:27:7:558:508 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-11 0:27:8:560:456 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-11 0:27:8:618:290 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..e7680903 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,109 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:27:12:873:412 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-11 0:27:12:940:973 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:27:13:880:441 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-11 0:27:13:945:534 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:27:14:866:3 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-11 0:27:14:920:25 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-11 0:27:15:876:359 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:27:15:936:178 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 0:27:15:949:258 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-11 0:27:16:886:473 + Q11 finished at: 2022-4-11 0:27:17:155:576 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:27:17:875:971 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-11 0:27:28:142:514 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-4-11 0:27:29:435:488 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-11 0:27:29:533:501 + +The current result is consistent with the [(5) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..bba31edc --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,48 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:20:48:270:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:20:48:326:205 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:20:49:278:82 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 0:20:50:282:269 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 0:20:59:5:514 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:20:59:59:863 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-11 0:21:1:272:675 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-4-11 0:21:9:88:63 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-11 0:21:9:417:80 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..44110c89 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:21:32:495:361 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:21:32:548:499 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:21:33:767:527 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-11 0:21:34:506:786 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:21:36:515:359 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 0:21:37:189:652 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:21:37:248:833 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:21:46:508:806 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-11 0:21:47:231:810 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:21:47:294:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..399cdd11 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:21:51:618:577 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:21:51:680:321 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:21:52:620:459 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-11 0:21:53:612:546 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:21:53:667:920 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 0:21:54:331:694 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:21:54:394:872 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:22:3:615:511 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-11 0:22:4:613:548 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:22:4:668:432 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..5ca8554d --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:22:43:701:99 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:22:43:761:443 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:22:44:703:170 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 0:22:47:932:877 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-11 0:22:47:986:155 + Q4 finished at: 2022-4-11 0:22:48:1:541 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:22:48:62:911 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:22:56:700:495 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 0:22:57:706:484 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:22:57:769:481 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..168b91c5 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:47:19:796:350 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 14:47:20:442:636 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:47:24:797:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-13 14:47:24:851:499 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-13 14:47:30:440:779 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 14:47:34:803:772 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-13 14:47:39:796:692 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-13 14:47:44:804:568 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-13 14:47:45:498:389 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-13 14:47:45:557:789 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..091a1480 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:22:8:997:980 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 0:22:9:929:554 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:22:10:262:111 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-11 0:22:10:325:595 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:22:10:395:495 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 0:22:12:615:962 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:22:12:672:994 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:22:20:994:781 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-4-11 0:22:21:991:882 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:22:22:55:381 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..52fc86e0 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:22:26:567:430 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 0:22:27:283:384 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:22:27:566:956 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-11 0:22:27:627:332 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:22:27:688:15 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 0:22:29:216:396 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:22:29:265:760 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:22:38:563:850 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-4-11 0:22:39:318:374 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:22:39:374:393 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..3f7482dd --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,68 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:31:12:54:331 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:31:12:112:680 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:31:13:53:56 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:31:13:107:457 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-11 0:31:14:728:114 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:31:14:789:218 + Q5 finished at: 2022-4-11 0:31:14:799:674 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:31:14:862:280 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-11 0:31:24:61:589 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-11 0:31:25:779:222 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-11 0:31:26:443:694 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:31:26:503:668 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..0a88ef14 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:31:31:87:477 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:31:31:143:529 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:31:32:82:34 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:31:32:136:704 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-11 0:31:33:156:372 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q6 failed at: 2022-4-11 0:31:33:748:878 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..7a0c0f91 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:31:48:920:389 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:31:48:975:501 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:31:49:927:209 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:31:49:989:62 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-11 0:31:50:984:890 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q5 failed at: 2022-4-11 0:31:51:479:113 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f1a01fa1 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:32:7:779:790 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:32:7:834:129 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:32:8:787:448 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:32:8:848:318 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-11 0:32:9:844:826 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-11 0:32:9:899:510 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q5 failed at: 2022-4-11 0:32:10:337:529 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..ce323135 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:32:24:679:264 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:32:25:407:197 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:32:25:671:486 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:32:25:735:380 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:32:25:797:246 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-11 0:32:27:681:264 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 +Q6 failed at: 2022-4-11 0:32:28:295:392 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..a0570940 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:32:42:561:224 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-11 0:32:43:272:75 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:32:43:570:309 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:32:43:625:548 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-11 0:32:43:680:27 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:32:45:575:177 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 +Q6 failed at: 2022-4-11 0:32:46:189:636 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..07a69147 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:33:19:639:637 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-13 11:33:19:695:232 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:33:29:636:693 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 11:33:30:339:943 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-13 11:33:39:643:173 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-13 11:33:39:698:394 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 + Q5 failed at: 2022-4-13 11:33:40:212:427 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..0fca67b7 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:39:44:888:265 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-13 11:39:44:943:813 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:39:49:884:600 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 11:39:50:525:712 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-13 11:39:54:891:503 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-13 11:40:4:899:304 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 + Q5 failed at: 2022-4-13 11:40:5:412:236 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..b35f2ceb --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,43 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:40:58:124:336 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-13 11:40:58:179:417 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:41:3:123:835 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-13 11:41:3:849:88 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-13 11:41:8:128:576 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-13 11:41:8:183:974 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W errcode: HY000 + Q5 failed at: 2022-4-13 11:41:8:704:889 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_write_too_old: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_W + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..72298ce9 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:33:55:435:879 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:33:55:490:466 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:33:56:440:111 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:33:56:510:85 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:33:57:440:759 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' +Q9 finished at: 2022-4-11 0:33:58:442:344 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-11 0:33:58:500:497 + Q5 finished at: 2022-4-11 0:33:58:509:400 + Q7 finished at: 2022-4-11 0:33:58:515:186 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-11 0:33:59:449:133 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:34:0:436:607 + Q11 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q11 failed at: 2022-4-11 0:34:0:726:252 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..5bb3375b --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES FROM (MINVALUE) TO (2), PARTITION p1 VALUES FROM (2) TO (MAXVALUE));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:34:15:374:226 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-11 0:34:15:434:413 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:34:16:372:193 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-11 0:34:16:429:44 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-11 0:34:17:377:889 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' +Q9 finished at: 2022-4-11 0:34:18:376:681 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-11 0:34:20:376:663 + Q5 finished at: 2022-4-11 0:34:20:385:75 + Q10-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:34:20:392:982 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' + Q8 finished at: 2022-4-11 0:34:20:453:225 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-11 0:34:21:384:282 + Q10 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q10 failed at: 2022-4-11 0:34:21:439:625 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..0d3e0d99 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,42 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:28:18:634:500 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:28:18:700:933 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:28:19:597:715 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 0:28:20:602:823 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-11 0:28:31:587:42 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 0:28:40:426:477 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-11 0:28:40:482:999 + Q4 failed reason: Timeout has been expired. Connection will be closed., [1] errcode: HY000 + Q4 failed at: 2022-4-11 0:28:50:6:409 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..357be636 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:29:24:696:241 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:29:24:757:802 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:29:25:690:361 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'COMMIT TRANSACTION;' +Q5 finished at: 2022-4-11 0:29:26:698:829 + Q4 finished at: 2022-4-11 0:29:26:706:675 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:29:27:689:488 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-11 0:29:37:694:602 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 0:29:38:472:287 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-11 0:29:38:532:271 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..97dc0b95 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:29:43:127:759 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:29:43:191:594 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:29:44:120:152 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-11 0:29:45:122:211 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-11 0:29:45:180:224 + Q4 finished at: 2022-4-11 0:29:45:191:206 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:29:46:391:80 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:29:56:126:326 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-11 0:29:56:835:204 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:29:56:895:509 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..99f076bd --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:30:1:212:624 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:30:1:275:714 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:30:2:204:263 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-11 0:30:3:213:958 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:30:3:269:604 + Q4 finished at: 2022-4-11 0:30:3:545:477 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:30:3:601:639 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:30:13:212:455 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-11 0:30:14:126:639 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:30:14:184:459 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..8b808b8c --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:30:54:753:221 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 0:30:54:815:940 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:30:55:744:775 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 0:30:57:369:122 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-11 0:30:57:425:340 + Q4 finished at: 2022-4-11 0:30:57:435:601 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-11 0:30:57:763:731 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-11 0:31:6:753:376 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 0:31:7:436:495 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-11 0:31:7:496:121 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..e9b41dd8 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:30:18:522:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 0:30:19:263:84 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:30:19:513:263 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 0:30:19:569:665 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-11 0:30:21:523:568 +Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649608218.488774953,0 t errcode: HY000 +Q5 failed at: 2022-4-11 0:30:22:42:837 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649608218.488774953,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..23d6dda4 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-11 0:30:36:114:449 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 0:30:36:816:469 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-11 0:30:37:108:971 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 0:30:37:168:186 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-11 0:30:39:109:716 +Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649608236.079703279,0 t errcode: HY000 +Q5 failed at: 2022-4-11 0:30:39:621:962 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649608236.079703279,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..af5c58de --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt @@ -0,0 +1,107 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Avoid + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Avoid + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Avoid + +rat_mda_step_rat_predicate_based_insert: Avoid + +wat_sda_dirty_write_1abort: Timeout + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..ad9e5892 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:41:45:44:847 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:41:45:758:993 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:41:46:51:124 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:41:46:115:505 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-10 23:41:46:179:772 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:41:46:241:917 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-10 23:41:47:696:271 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:41:47:753:959 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:41:57:50:650 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:41:57:745:386 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:41:57:803:646 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..bef47cd2 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:42:2:176:881 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:42:2:843:630 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:42:3:175:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:42:3:239:24 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-10 23:42:3:301:256 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:42:3:364:368 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649605322.144604879,0 t errcode: HY000 +Q7 failed at: 2022-4-10 23:42:4:879:570 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649605322.144604879,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..8e06f7b0 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:42:18:864:150 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:42:19:627:278 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:42:19:865:667 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-10 23:42:20:859:478 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:42:20:894:444 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q7 finished at: 2022-4-10 23:42:20:912:456 + Q5 finished at: 2022-4-10 23:42:20:956:780 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q8 failed at: 2022-4-10 23:42:22:672:657 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..13c7f124 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:43:10:243:975 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:43:10:993:430 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:43:11:245:827 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-10 23:43:12:239:260 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:43:12:292:14 + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:43:12:959:995 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-10 23:43:13:22:264 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q6 failed at: 2022-4-10 23:43:13:686:108 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..2fe90481 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,77 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:42:36:590:296 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-10 23:42:36:652:717 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-10 23:42:36:712:702 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-10 23:42:37:591:732 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:42:38:585:287 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-10 23:42:38:604:641 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-10 23:42:38:665:671 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:42:38:727:530 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:42:48:583:375 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-10 23:42:48:638:836 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-4-10 23:42:48:693:965 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-4-10 23:42:48:758:38 + Q13-T3 execute sql: 'COMMIT TRANSACTION;' + Q13 finished at: 2022-4-10 23:42:49:144:840 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..24c6f665 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,50 @@ +#### db_type: crdb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:54:32:839:78 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-13 14:54:33:560:708 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:54:37:839:230 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-13 14:54:38:529:5 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-13 14:54:38:614:834 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 14:54:38:672:816 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-13 14:54:42:838:551 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q8 failed at: 2022-4-13 14:54:43:699:944 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..3aa927c5 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt @@ -0,0 +1,86 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:55:33:155:956 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-13 14:55:33:785:711 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:55:38:159:312 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,3) + (2) expected_result: + (0,3) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,3) + *(6) expected_result: + (0,1) + + Q4 finished at: 2022-4-13 14:55:38:940:604 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-13 14:55:43:157:302 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + *(6) expected_result: + (1,3) + + Q6 finished at: 2022-4-13 14:55:43:852:293 +Q7-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q7 finished at: 2022-4-13 14:55:48:159:856 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-13 14:55:53:162:831 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-13 14:55:58:154:519 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q10 failed at: 2022-4-13 14:56:4:168:709 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f9e063a1 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,109 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:52:52:536:729 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,3) + (4) expected_result: + (0,3) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:52:53:298:866 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:52:53:542:457 + Q4-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q4 finished at: 2022-4-10 23:52:53:602:723 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:52:53:661:112 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:52:54:807:195 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,3) + *(1) expected_result: + (0,3) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,3) + *(4) expected_result: + (0,3) + (5) expected_result: + (0,1) + (6) expected_result: + (0,1) + + Q7 finished at: 2022-4-10 23:52:55:699:439 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-10 23:52:55:761:176 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-10 23:52:55:822:142 + current_result: + (1,3) + *(1) expected_result: + (1,3) + *(2) expected_result: + (1,3) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,3) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-10 23:52:56:184:944 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-10 23:52:56:241:826 + Q12-T4 execute sql: 'BEGIN TRANSACTION;' + Q12 finished at: 2022-4-10 23:53:5:544:552 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + *(3) expected_result: + (0,3) (1,1) + *(4) expected_result: + (0,3) (1,1) + *(5) expected_result: + (0,3) (1,1) + *(6) expected_result: + (0,3) (1,1) + + Q13 finished at: 2022-4-10 23:53:6:258:78 + Q14-T4 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-10 23:53:6:317:187 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..15528bee --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,210 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:52:32:130:120 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,3) + (7) expected_result: + (0,3) + *(8) expected_result: + (0,1) + (9) expected_result: + (0,3) + (10) expected_result: + (0,3) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,3) + (13) expected_result: + (0,3) + (14) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:52:32:831:983 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:52:33:126:724 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,3) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + *(6) expected_result: + (1,3) + *(7) expected_result: + (1,3) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,3) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:52:33:882:112 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-10 23:52:34:133:866 + Q6-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q6 finished at: 2022-4-10 23:52:34:196:807 + Q7-T3 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:52:34:519:64 + Q8-T4 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:52:35:134:725 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-10 23:52:35:198:934 + Q10-T4 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:52:35:259:652 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,3) + (4) expected_result: + (0,3) + *(5) expected_result: + (0,1) + *(6) expected_result: + (0,1) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + (9) expected_result: + (0,3) + (10) expected_result: + (0,3) + (11) expected_result: + (0,3) + *(12) expected_result: + (0,1) + (13) expected_result: + (0,3) + (14) expected_result: + (0,3) + + Q11 finished at: 2022-4-10 23:52:36:963:327 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:52:37:16:970 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + *(2) expected_result: + (1,3) + *(3) expected_result: + (1,3) + *(4) expected_result: + (1,3) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,3) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,3) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,3) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-10 23:52:37:733:279 +Q14-T1 execute sql: 'COMMIT TRANSACTION;' +Q14 finished at: 2022-4-10 23:52:37:788:118 + Q15-T5 execute sql: 'BEGIN TRANSACTION;' + Q15 finished at: 2022-4-10 23:52:47:132:671 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + *(3) expected_result: + (0,3) (1,1) + *(4) expected_result: + (0,3) (1,1) + *(5) expected_result: + (0,3) (1,1) + *(6) expected_result: + (0,3) (1,1) + *(7) expected_result: + (0,3) (1,1) + *(8) expected_result: + (0,3) (1,1) + *(9) expected_result: + (0,3) (1,1) + *(10) expected_result: + (0,3) (1,1) + *(11) expected_result: + (0,3) (1,1) + *(12) expected_result: + (0,3) (1,1) + *(13) expected_result: + (0,3) (1,1) + *(14) expected_result: + (0,3) (1,1) + + Q16 finished at: 2022-4-10 23:52:48:88:134 + Q17-T5 execute sql: 'COMMIT TRANSACTION;' + Q17 finished at: 2022-4-10 23:52:48:145:382 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..d5bf2e04 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,90 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:45:8:435:405 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-10 23:45:9:111:873 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:45:9:436:105 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + null + *(6) expected_result: + (0,1) + + Q4 finished at: 2022-4-10 23:45:10:159:766 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-10 23:45:10:439:914 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + current_result: + (1,3) + (1) expected_result: + null + *(2) expected_result: + (1,3) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + *(6) expected_result: + (1,3) + + Q6 finished at: 2022-4-10 23:45:11:390:649 +Q7 finished at: 2022-4-10 23:45:11:710:950 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-10 23:45:12:439:388 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-10 23:45:13:717:125 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:45:14:436:71 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:45:16:444:961 + Q11 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q11 failed at: 2022-4-10 23:45:16:541:819 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..ab94beea --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,87 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:45:30:976:29 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0) + (5) expected_result: + (2,0) + (6) expected_result: + (2,0) + +Q2 finished at: 2022-4-10 23:45:31:773:917 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:45:31:975:689 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-10 23:45:32:980:456 + Q5 finished at: 2022-4-10 23:45:33:252:918 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q7 finished at: 2022-4-10 23:45:33:984:539 + current_result: + null + (1) expected_result: + (1,3) + *(2) expected_result: + null + (3) expected_result: + (1,3) + (4) expected_result: + (1,3) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-10 23:45:34:52:358 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + Q8 finished at: 2022-4-10 23:45:34:977:604 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-10 23:45:35:981:729 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:45:36:980:497 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:45:38:982:784 + Q11 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 + Q11 failed at: 2022-4-10 23:45:39:81:284 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..0cc8a346 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,121 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:55:0:461:108 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + *(6) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 14:55:1:107:506 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + *(2) expected_result: + (1,3) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + (6) expected_result: + (1,1) + +Q3 finished at: 2022-4-13 14:55:1:758:154 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2022-4-13 14:55:5:472:765 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + *(2) expected_result: + (1,3) + *(3) expected_result: + (1,3) + *(4) expected_result: + (1,3) + *(5) expected_result: + (1,3) + *(6) expected_result: + (1,3) + + Q5 finished at: 2022-4-13 14:55:6:81:838 + Q6-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q6 finished at: 2022-4-13 14:55:6:142:984 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-13 14:55:6:204:333 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-13 14:55:10:456:699 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,3) + (2) expected_result: + (0,3) + *(3) expected_result: + (0,1) + (4) expected_result: + (0,3) + *(5) expected_result: + (0,1) + *(6) expected_result: + (0,1) + + Q9 finished at: 2022-4-13 14:55:11:127:581 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,3) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,3) + (6) expected_result: + (1,3) + + Q10 finished at: 2022-4-13 14:55:11:753:842 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-13 14:55:11:803:243 +Q12-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q12 finished at: 2022-4-13 14:55:15:465:462 +Q13-T1 execute sql: 'COMMIT TRANSACTION;' +Q13 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE errcode: HY000 +Q13 failed at: 2022-4-13 14:55:16:821:790 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#retry_serializable: restart transaction: TransactionRetryWithProtoRefreshError: TransactionRetryError: retry txn (RETRY_SE + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..2c78b1d3 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,165 @@ +#### db_type: crdb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:51:35:103:489 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-10 23:51:35:914:460 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:51:36:97:56 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-10 23:51:36:779:935 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-10 23:51:36:843:156 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:51:37:100:117 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-10 23:51:37:861:890 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-10 23:51:37:927:158 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-10 23:51:38:170:814 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-10 23:51:38:233:14 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-10 23:51:38:293:877 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-10 23:51:38:960:730 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-10 23:51:39:25:957 + Q14-T3 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-10 23:51:39:84:440 + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-10 23:51:41:163:121 +Q16-T1 execute sql: 'COMMIT TRANSACTION;' +Q16 finished at: 2022-4-10 23:51:41:217:677 + Q17-T4 execute sql: 'BEGIN TRANSACTION;' + Q17 finished at: 2022-4-10 23:51:48:90:222 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q18 finished at: 2022-4-10 23:51:48:791:416 + Q19-T4 execute sql: 'COMMIT TRANSACTION;' + Q19 finished at: 2022-4-10 23:51:48:842:725 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..84e46402 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:41:8:1:24 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-10 23:41:8:708:146 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:41:9:0:757 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-10 23:41:9:63:196 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:41:9:124:901 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649605267.968943689,0 t errcode: HY000 +Q6 failed at: 2022-4-10 23:41:10:609:789 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649605267.968943689,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..ba166c72 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:40:50:859:611 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-10 23:40:51:566:551 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:40:51:849:650 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-10 23:40:51:905:358 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:40:51:961:177 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-10 23:40:53:741:718 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:40:53:799:394 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:41:2:855:91 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-10 23:41:3:618:103 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:41:3:674:833 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..fff57753 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,39 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:4:44:873:336 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:4:45:207:282 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:4:45:878:520 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:4:45:942:68 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q6 failed at: 2022-4-10 23:4:47:534:326 + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-10 23:4:47:578:416 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..f9f68dee --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,39 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:5:3:549:545 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:5:3:609:115 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:5:4:548:331 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:5:4:604:168 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q7 failed at: 2022-4-10 23:5:6:314:501 + current_result: + (0,1) + (1) expected_result: + (0,3) + *(2) expected_result: + (0,1) + + Q5 finished at: 2022-4-10 23:5:7:301:815 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..5330a88b --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,57 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:5:20:246:174 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:5:20:573:492 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:5:21:243:418 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:5:21:299:82 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-10 23:5:22:848:930 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:5:22:910:238 + Q5 finished at: 2022-4-10 23:5:22:913:989 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-10 23:5:23:252:207 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:5:33:246:360 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:5:33:944:918 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:5:34:4:5 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..cc22f443 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:5:38:414:279 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-10 23:5:39:178:90 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:5:39:419:698 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:5:39:477:282 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-10 23:5:39:532:77 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-10 23:5:41:52:641 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:5:41:425:851 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:5:42:416:857 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:5:52:422:43 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:5:53:107:998 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:5:53:166:808 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..b3782c77 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:25:1:477:337 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-13 11:25:1:532:769 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:25:11:475:917 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-13 11:25:12:131:351 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-13 11:25:21:479:90 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-13 11:25:21:531:960 + current_result: + (0,1) + (1) expected_result: + (0,3) + *(2) expected_result: + (0,1) + + Q5 finished at: 2022-4-13 11:25:22:132:550 + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-13 11:25:31:478:736 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-13 11:27:11:482:156 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-13 11:27:12:105:119 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-13 11:27:12:160:411 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..696b9784 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 11:28:3:484:676 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-13 11:28:3:541:244 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 11:28:13:481:72 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-13 11:28:14:204:527 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-13 11:28:23:486:319 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-13 11:28:23:541:85 + current_result: + (0,1) + (1) expected_result: + (0,3) + *(2) expected_result: + (0,1) + + Q5 finished at: 2022-4-13 11:28:24:123:34 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 11:28:24:176:33 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-13 11:28:33:483:28 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-13 11:28:34:143:58 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-13 11:28:34:192:669 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..dde2c4c0 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:5:57:570:281 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-10 23:5:58:305:773 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:5:58:579:168 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:5:58:643:519 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-10 23:5:58:705:220 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:5:58:763:188 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-10 23:6:0:280:876 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:6:0:340:7 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:6:9:578:831 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-4-10 23:6:10:287:309 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:6:10:344:914 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..49a02b26 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,62 @@ +#### db_type: crdb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:6:14:598:695 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-10 23:6:15:282:957 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:6:15:606:535 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-10 23:6:15:668:983 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-10 23:6:15:730:305 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:6:15:794:667 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-10 23:6:17:290:74 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:6:17:349:467 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:6:26:605:855 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-4-10 23:6:27:244:501 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:6:27:304:406 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..6017c7ed --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:4:7:210:843 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:4:7:275:661 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:4:8:201:99 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:4:8:260:951 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-10 23:4:9:839:720 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:4:11:213:226 + current_result: + (0,3) + *(1) expected_result: + (0,3) + (2) expected_result: + (0,1) + + Q5 finished at: 2022-4-10 23:4:12:118:674 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:4:12:175:714 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:4:21:208:806 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:4:23:243:982 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:4:23:303:658 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..fcc037ef --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,64 @@ +#### db_type: crdb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:4:27:706:71 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:4:27:770:203 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:4:28:673:130 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:4:28:729:113 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-10 23:4:30:353:441 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:4:30:409:296 + current_result: + (0,3) + *(1) expected_result: + (0,3) + (2) expected_result: + (0,1) + + Q5 finished at: 2022-4-10 23:4:31:400:810 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:4:31:462:92 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:4:39:680:628 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:4:40:418:798 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:4:40:478:600 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..679c7aa6 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt @@ -0,0 +1,112 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:9:38:119:687 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:9:38:184:238 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:9:39:117:108 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:9:39:180:256 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:9:40:116:400 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-10 23:9:40:179:530 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-10 23:9:41:793:948 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:9:41:849:890 + current_result: + (0,3) + *(1) expected_result: + (0,3) + *(2) expected_result: + (0,3) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,3) + (6) expected_result: + (0,1) + + Q5 finished at: 2022-4-10 23:9:42:728:469 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:9:42:792:299 + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,3) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,3) + (6) expected_result: + (1,3) + + Q8 finished at: 2022-4-10 23:9:43:452:945 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:9:43:515:870 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-10 23:9:53:115:362 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) (2,1) + *(1) expected_result: + (0,3) (1,1) (2,1) + *(2) expected_result: + (0,3) (1,1) (2,1) + *(3) expected_result: + (0,3) (1,1) (2,1) + *(4) expected_result: + (0,3) (1,1) (2,1) + *(5) expected_result: + (0,3) (1,1) (2,1) + *(6) expected_result: + (0,3) (1,1) (2,1) + + Q14 finished at: 2022-4-10 23:9:54:95:534 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-10 23:9:54:146:570 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..aafd7ab3 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,210 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN TRANSACTION;' + Q1 finished at: 2022-4-10 23:9:58:523:358 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + *(3) expected_result: + (0,1) + (4) expected_result: + (0,3) + (5) expected_result: + (0,3) + *(6) expected_result: + (0,1) + (7) expected_result: + (0,3) + (8) expected_result: + (0,3) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,3) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,3) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q2 finished at: 2022-4-10 23:9:59:239:564 +Q3-T1 execute sql: 'BEGIN TRANSACTION;' +Q3 finished at: 2022-4-10 23:9:59:522:529 +Q4-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q4 finished at: 2022-4-10 23:9:59:580:174 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2022-4-10 23:10:0:519:813 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + *(2) expected_result: + (1,3) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,3) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,3) + *(12) expected_result: + (1,3) + *(13) expected_result: + (1,3) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-10 23:10:1:293:13 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:10:1:527:401 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-10 23:10:1:590:756 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,3) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,3) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,3) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,3) + *(13) expected_result: + (1,3) + *(14) expected_result: + (1,3) + + Q10 finished at: 2022-4-10 23:10:3:164:683 +Q11-T1 execute sql: 'COMMIT TRANSACTION;' +Q11 finished at: 2022-4-10 23:10:3:525:64 + current_result: + (0,3) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,3) + *(4) expected_result: + (0,3) + *(5) expected_result: + (0,3) + (6) expected_result: + (0,1) + *(7) expected_result: + (0,3) + *(8) expected_result: + (0,3) + *(9) expected_result: + (0,3) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,3) + *(14) expected_result: + (0,3) + + Q7 finished at: 2022-4-10 23:10:4:188:691 + Q12-T2 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:10:4:525:429 + Q13-T3 execute sql: 'COMMIT TRANSACTION;' + Q13 finished at: 2022-4-10 23:10:5:526:4 + Q14-T4 execute sql: 'COMMIT TRANSACTION;' + Q14 finished at: 2022-4-10 23:10:6:525:131 + Q15-T5 execute sql: 'BEGIN TRANSACTION;' + Q15 finished at: 2022-4-10 23:10:16:523:708 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,3) (1,1) + *(1) expected_result: + (0,3) (1,1) + *(2) expected_result: + (0,3) (1,1) + *(3) expected_result: + (0,3) (1,1) + *(4) expected_result: + (0,3) (1,1) + *(5) expected_result: + (0,3) (1,1) + *(6) expected_result: + (0,3) (1,1) + *(7) expected_result: + (0,3) (1,1) + *(8) expected_result: + (0,3) (1,1) + *(9) expected_result: + (0,3) (1,1) + *(10) expected_result: + (0,3) (1,1) + *(11) expected_result: + (0,3) (1,1) + *(12) expected_result: + (0,3) (1,1) + *(13) expected_result: + (0,3) (1,1) + *(14) expected_result: + (0,3) (1,1) + + Q16 finished at: 2022-4-10 23:10:17:239:194 + Q17-T5 execute sql: 'COMMIT TRANSACTION;' + Q17 finished at: 2022-4-10 23:10:17:302:353 + +The current result is consistent with the [(13) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..e4594135 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,112 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:10:21:767:62 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:10:21:832:403 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:10:22:768:589 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:10:22:832:591 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:10:23:767:86 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-10 23:10:23:832:307 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-10 23:10:24:764:602 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:10:24:824:406 + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-10 23:10:24:834:567 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:10:25:771:147 + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2022-4-10 23:10:25:776:173 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:10:26:770:326 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-10 23:10:36:766:872 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-10 23:10:37:515:412 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-10 23:10:37:573:573 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..54eac4cf --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,109 @@ +#### db_type: crdb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:10:41:850:440 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-10 23:10:41:921:774 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:10:42:844:42 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-10 23:10:42:906:453 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:10:43:843:474 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-10 23:10:43:904:669 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-10 23:10:44:846:113 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:10:44:908:513 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-10 23:10:44:916:156 + Q11-T2 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:10:45:847:790 + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2022-4-10 23:10:45:854:904 + Q12-T3 execute sql: 'COMMIT TRANSACTION;' + Q12 finished at: 2022-4-10 23:10:46:846:336 + Q13-T4 execute sql: 'BEGIN TRANSACTION;' + Q13 finished at: 2022-4-10 23:10:56:837:277 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-4-10 23:10:57:555:965 + Q15-T4 execute sql: 'COMMIT TRANSACTION;' + Q15 finished at: 2022-4-10 23:10:57:605:846 + +The current result is consistent with the [(5) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..17b1f73e --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,48 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 22:59:35:79:313 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 22:59:35:136:214 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 22:59:36:74:646 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-10 22:59:37:202:611 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-10 22:59:46:16:43 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 22:59:46:68:717 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-10 22:59:48:70:485 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-4-10 22:59:56:264:153 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-10 22:59:56:321:756 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..f5b30b75 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:0:19:399:26 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:0:19:719:602 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:0:20:391:282 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-10 23:0:21:394:81 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:0:23:399:567 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-10 23:0:24:15:977 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:0:24:68:289 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:0:33:396:467 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-10 23:0:34:76:113 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:0:34:133:725 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..bd251c3e --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:0:38:729:882 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:0:38:786:233 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:0:39:732:268 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-10 23:0:40:739:560 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:0:40:801:726 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-10 23:0:41:699:423 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:0:41:751:677 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:0:50:844:227 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-10 23:0:52:90:857 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:0:52:145:803 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..e939808b --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:1:30:983:655 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:1:31:46:790 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:1:31:978:102 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-10 23:1:33:696:961 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-10 23:1:33:760:685 + Q4 finished at: 2022-4-10 23:1:33:766:662 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:1:33:978:831 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:1:43:980:792 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-10 23:1:44:704:179 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:1:44:758:813 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..c69c9b9b --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:56:30:728:381 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 14:56:31:370:910 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:56:35:732:762 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-13 14:56:35:795:595 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-13 14:56:41:335:407 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-13 14:56:45:735:673 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-13 14:56:50:732:814 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-13 14:56:55:723:420 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-13 14:56:56:389:146 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-13 14:56:56:436:166 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..1a833f4a --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,61 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:0:56:449:14 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-10 23:0:57:193:645 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:0:57:451:441 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-10 23:0:57:511:366 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:0:57:575:205 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-10 23:0:59:157:281 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:0:59:218:64 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:1:8:453:831 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-4-10 23:1:9:120:525 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:1:9:192:832 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..17e641b6 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,60 @@ +#### db_type: crdb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:1:13:552:689 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-10 23:1:14:303:655 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:1:14:544:379 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-10 23:1:14:599:840 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:1:14:656:890 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-10 23:1:16:305:97 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:1:16:360:310 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:1:25:548:549 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-4-10 23:1:26:331:900 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:1:26:383:270 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..2975fbde --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,57 @@ +#### db_type: crdb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:26:0:656:361 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:26:0:722:999 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:26:1:653:545 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-10 23:26:1:717:900 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + *(1) expected_result: + (1,3) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-10 23:26:3:306:511 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:26:3:363:896 + Q5 finished at: 2022-4-10 23:26:3:378:617 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:26:3:434:258 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2022-4-10 23:26:12:652:128 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,3) (1,1) + + Q10 finished at: 2022-4-10 23:26:13:628:354 + Q11-T3 execute sql: 'COMMIT TRANSACTION;' + Q11 finished at: 2022-4-10 23:26:13:679:545 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..a4406be0 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:26:18:96:99 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:26:18:435:368 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:26:19:87:206 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:26:19:144:42 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-10 23:26:20:156:817 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:26:20:220:842 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q5 failed at: 2022-4-10 23:26:20:657:61 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..8dc9ea07 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,32 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:26:36:544:514 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:26:36:609:276 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:26:37:536:160 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:26:37:592:693 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-10 23:26:38:607:70 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q6 failed at: 2022-4-10 23:26:39:202:582 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..546e0129 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: crdb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:26:56:111:969 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:26:56:175:981 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:26:57:111:835 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:26:57:172:478 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-10 23:26:58:167:422 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:26:58:224:149 +Q7 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q7 failed at: 2022-4-10 23:26:58:870:286 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..2ef87672 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:57:8:812:823 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-13 14:57:9:517:120 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:57:13:816:323 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 14:57:13:875:205 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-13 14:57:13:933:636 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute sql: 'COMMIT TRANSACTION;' + Q8 finished at: 2022-4-13 14:57:23:819:604 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833028.786071639,0 t errcode: HY000 +Q6 failed at: 2022-4-13 14:57:24:431:97 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833028.786071639,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c4fe7c80 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:57:41:430:156 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,3) + +Q2 finished at: 2022-4-13 14:57:42:77:12 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:57:46:433:657 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 14:57:46:494:126 + Q5-T2 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' + Q5 finished at: 2022-4-13 14:57:46:557:131 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-13 14:57:56:435:887 +Q6 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833061.403802746,0 t errcode: HY000 +Q6 failed at: 2022-4-13 14:57:57:46:131 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833061.403802746,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..45cf1874 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:27:49:433:195 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:27:49:496:181 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:27:50:428:392 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:27:51:161:516 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-10 23:27:51:436:865 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:27:51:499:990 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604470.398056723,0 t errcode: HY000 + Q5 failed at: 2022-4-10 23:27:52:10:200 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604470.398056723,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..491873ab --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:28:7:120:184 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:28:7:185:32 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:28:8:118:784 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:28:8:814:717 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-10 23:28:9:123:65 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:28:11:123:822 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604488.084931377,0 t errcode: HY000 + Q5 failed at: 2022-4-10 23:28:11:820:214 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604488.084931377,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..6a48c564 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 3);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:28:26:67:418 +Q2-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q2 finished at: 2022-4-10 23:28:26:131:135 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:28:26:790:762 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,3) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,3) + + Q4 finished at: 2022-4-10 23:28:27:459:335 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-10 23:28:27:797:714 +Q8-T1 execute sql: 'COMMIT TRANSACTION;' +Q8 finished at: 2022-4-10 23:28:27:861:182 + Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604506.760633062,0 t errcode: HY000 + Q5 failed at: 2022-4-10 23:28:28:372:348 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604506.760633062,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..3e321810 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:32:7:897:423 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:32:7:954:15 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:32:8:901:813 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:32:8:964:269 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:32:9:891:403 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-10 23:32:9:943:715 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-10 23:32:10:954:712 +Q10-T1 execute sql: 'COMMIT TRANSACTION;' +Q10 finished at: 2022-4-10 23:32:11:8:709 + Q5 finished at: 2022-4-10 23:32:11:30:241 + Q8 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 + Q8 failed at: 2022-4-10 23:32:11:831:931 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..4127cefd --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: crdb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:32:27:617:153 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:32:27:671:194 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:32:28:620:177 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-10 23:32:28:682:215 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2022-4-10 23:32:29:613:25 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-10 23:32:29:664:700 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-10 23:32:30:685:660 + Q10-T2 execute sql: 'COMMIT TRANSACTION;' +Q9 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA errcode: HY000 +Q9 failed at: 2022-4-10 23:32:31:570:525 + Q10 finished at: 2022-4-10 23:32:31:628:115 + Q8 finished at: 2022-4-10 23:32:31:634:699 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html#abort_reason_pusher_aborted: restart transaction: TransactionRetryWithProtoRefreshError: TransactionAbortedError(ABORT_REA + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..6901a30a --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,42 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:18:22:352:872 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:18:22:415:888 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:18:23:76:950 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-10 23:18:24:86:388 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-10 23:18:35:81:285 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,2) + + Q8 finished at: 2022-4-10 23:18:43:53:311 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-10 23:18:43:382:778 + Q4 failed reason: Timeout has been expired. Connection will be closed., [1] errcode: HY000 + Q4 failed at: 2022-4-10 23:18:53:485:619 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..1cb4689a --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: crdb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:22:15:0:316 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:22:15:62:851 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:22:15:993:940 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'COMMIT TRANSACTION;' +Q5 finished at: 2022-4-10 23:22:17:1:966 + Q4 finished at: 2022-4-10 23:22:17:9:837 + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:22:18:6:520 + Q7-T3 execute sql: 'BEGIN TRANSACTION;' + Q7 finished at: 2022-4-10 23:22:28:2:467 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-10 23:22:28:993:585 + Q9-T3 execute sql: 'COMMIT TRANSACTION;' + Q9 finished at: 2022-4-10 23:22:29:57:949 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..ba043475 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:22:33:389:154 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:22:33:450:823 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:22:34:399:525 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-10 23:22:35:399:719 +Q6-T1 execute sql: 'COMMIT TRANSACTION;' +Q6 finished at: 2022-4-10 23:22:35:457:357 + Q4 finished at: 2022-4-10 23:22:35:479:684 + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-10 23:22:36:395:41 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:22:46:397:324 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-10 23:22:48:133:995 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:22:48:197:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..1ea74b7b --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,47 @@ +#### db_type: crdb #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:22:52:537:64 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:22:52:600:429 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:22:53:536:169 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-10 23:22:54:537:136 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:22:54:590:997 + Q4 finished at: 2022-4-10 23:22:54:606:17 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:22:54:664:35 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:23:4:542:354 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-10 23:23:5:551:960 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:23:5:608:705 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..87f4c7dc --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,54 @@ +#### db_type: crdb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:23:46:181:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-10 23:23:46:507:193 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:23:47:186:8 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-10 23:23:49:86:703 +Q7-T1 execute sql: 'COMMIT TRANSACTION;' +Q7 finished at: 2022-4-10 23:23:49:147:991 + Q4 finished at: 2022-4-10 23:23:49:153:491 + Q5-T2 execute sql: 'COMMIT TRANSACTION;' + Q5 finished at: 2022-4-10 23:23:49:216:432 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2022-4-10 23:23:58:179:55 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-10 23:23:58:869:472 + Q10-T3 execute sql: 'COMMIT TRANSACTION;' + Q10 finished at: 2022-4-10 23:23:58:926:495 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f3a73537 --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-13 14:58:19:7:992 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-13 14:58:19:724:603 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-13 14:58:24:16:813 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-13 14:58:24:81:529 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute sql: 'COMMIT TRANSACTION;' + Q7 finished at: 2022-4-13 14:58:34:19:348 +Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833098.981855541,0 t errcode: HY000 +Q5 failed at: 2022-4-13 14:58:34:525:884 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649833098.981855541,0 t + diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..7a41b4fd --- /dev/null +++ b/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: crdb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2022-4-10 23:23:27:555:87 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-10 23:23:28:323:100 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2022-4-10 23:23:28:559:476 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-10 23:23:28:619:530 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute sql: 'COMMIT TRANSACTION;' + Q6 finished at: 2022-4-10 23:23:30:564:210 +Q5 failed reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604207.528359096,0 t errcode: HY000 +Q5 failed at: 2022-4-10 23:23:31:79:894 + +Test Result: Rollback +Reason: Server error [SQL state: 40001]. Server's hint: See: https://www.cockroachlabs.com/docs/v21.2/transaction-retry-error-reference.html: restart transaction: TransactionRetryWithProtoRefreshError: WriteTooOldError: write at timestamp 1649604207.528359096,0 t + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..b0278d33 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:28:28:243:109 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:28:28:256:41 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:28:29:243:106 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:28:29:262:81 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:28:29:268:545 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:28:29:291:688 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:28:30:250:568 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:28:30:252:196 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:28:40:252:505 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:28:40:252:691 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..81a9c03b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:28:44:330:175 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:28:44:343:561 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:28:45:330:185 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:28:45:343:817 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:28:45:350:455 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:28:45:365:891 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:28:46:337:33 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:28:46:372:110 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:28:56:338:995 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:28:56:339:184 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..8f2cb44f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:29:0:410:248 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:29:0:423:54 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:29:1:410:263 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:29:1:424:714 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:29:1:432:142 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:29:3:429:986 +Q6 finished at: 2022-4-11 13:29:3:435:394 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:29:3:453:378 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:29:13:419:24 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:29:13:419:211 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..884a9c91 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:29:49:634:863 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:29:49:648:78 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:29:50:634:856 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:29:50:651:176 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:29:50:658:538 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:29:50:677:868 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:29:51:641:747 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:29:51:657:373 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:30:1:643:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:30:1:643:786 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..3411b53b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:29:17:485:628 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-11 13:29:17:498:315 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-11 13:29:17:504:700 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 13:29:18:485:650 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-11 13:29:18:502:877 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-11 13:29:18:508:361 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:29:18:532:783 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:29:19:500:245 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-11 13:29:29:493:931 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-11 13:29:29:499:593 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:29:29:499:793 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..d8fa33d6 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:29:33:568:391 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-11 13:29:33:585:74 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:29:34:568:371 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-11 13:29:34:585:115 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-11 13:29:34:594:236 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:29:34:607:888 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-11 13:29:35:577:847 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:29:35:592:234 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-11 13:29:45:578:339 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:29:45:578:551 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..468b5b2e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:30:5:709:312 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 13:30:5:722:296 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:30:6:709:314 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:30:6:724:300 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:30:7:709:312 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:30:7:722:646 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-11 13:30:8:716:535 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:30:11:739:686 + Q8 finished at: 2022-4-11 13:30:11:744:941 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:30:12:722:803 + Q9 finished at: 2022-4-11 13:30:12:728:7 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:30:13:727:225 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:30:23:726:885 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:30:23:727:92 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..53c6f291 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:31:48:104:567 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:31:48:117:642 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:31:49:104:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:31:49:118:428 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:31:49:131:438 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:31:50:104:546 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:31:50:117:483 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-11 13:31:50:124:16 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:31:50:141:450 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-11 13:31:51:112:108 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 13:31:51:113:753 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-11 13:32:1:113:193 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 13:32:1:114:837 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c7112e90 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:31:29:11:26 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:31:29:24:160 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:31:30:11:7 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:31:30:25:551 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:31:31:11:15 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-11 13:31:31:23:400 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:31:31:36:918 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:31:32:11:38 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-11 13:31:32:23:762 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:31:32:36:582 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-11 13:31:33:19:257 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:31:33:20:923 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-11 13:31:34:18:795 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-11 13:31:34:20:497 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 13:31:44:28:445 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:31:44:28:714 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..752fe7f8 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:30:27:792:799 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-11 13:30:27:806:849 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:30:28:792:792 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:30:28:807:91 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:30:29:792:791 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:30:29:805:790 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-11 13:30:30:799:460 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:30:33:807:568 + Q8 finished at: 2022-4-11 13:30:33:812:731 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:30:34:805:309 + Q9 finished at: 2022-4-11 13:30:34:810:378 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:30:35:805:341 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 13:30:45:800:887 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:30:45:801:93 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..9cdb9a18 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:30:49:838:513 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 13:30:49:851:716 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:30:50:838:509 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-11 13:30:50:852:382 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:30:51:838:522 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-11 13:30:51:851:639 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-11 13:30:52:847:449 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-11 13:30:53:852:597 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-11 13:30:54:852:731 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:30:55:859:56 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:30:56:850:623 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:30:57:851:402 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:31:7:848:108 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:31:7:848:311 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..0e27281b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (100) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:32:5:175:885 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:32:5:187:156 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-11 13:32:5:192:290 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 13:32:6:175:890 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-11 13:32:6:187:194 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-11 13:32:6:194:36 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:32:6:212:583 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:32:7:175:897 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-11 13:32:7:186:987 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 13:32:7:192:121 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:32:7:193:789 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-11 13:32:8:182:924 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-11 13:32:8:209:478 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-11 13:32:18:181:586 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-11 13:32:18:183:253 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..70dc0acc --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:31:11:921:554 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-11 13:31:11:934:529 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:31:12:921:569 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-11 13:31:12:935:673 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:31:12:942:408 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:31:12:949:713 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-11 13:31:12:956:321 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:31:12:968:810 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-11 13:31:13:921:649 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-11 13:31:13:935:288 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-11 13:31:13:943:266 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-11 13:31:13:951:443 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-11 13:31:13:958:686 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:31:13:974:776 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-11 13:31:14:929:122 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-11 13:31:14:930:771 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-11 13:31:24:930:268 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-11 13:31:24:930:487 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..b29f9875 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:28:12:174:972 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:28:12:186:132 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:28:13:174:959 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:28:13:188:982 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:28:13:200:521 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-11 13:28:14:182:162 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:28:14:224:895 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:28:24:182:843 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:28:24:183:46 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..10795041 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:27:56:101:345 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:27:56:112:951 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:27:57:101:318 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:27:57:122:74 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:27:57:138:650 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 13:27:58:107:82 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:27:58:108:737 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:28:8:116:447 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:28:8:116:646 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:28:8:116:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..292af6d3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:17:0:864:906 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:17:0:877:359 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:17:1:864:894 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:17:1:877:397 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:17:1:885:731 +Q6-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:17:3:892:190 +Q6 finished at: 2022-4-11 13:17:3:898:787 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:17:4:879:336 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:17:14:873:597 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,2) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,2) + + Q10 finished at: 2022-4-11 13:17:14:878:946 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:17:14:879:142 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..53a9800d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:17:18:964:120 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:17:18:976:547 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:17:19:964:114 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:17:19:977:583 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:17:19:985:940 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:17:19:998:284 +Q7-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-11 13:17:20:972:300 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:17:20:991:901 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:17:30:972:644 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,2) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,2) + + Q10 finished at: 2022-4-11 13:17:30:978:56 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:17:30:978:345 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..41339a08 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:13:45:942:612 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:13:45:952:492 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:13:46:942:598 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 14:13:46:963:335 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 14:13:47:950:923 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 14:13:47:970:912 + Q5 finished at: 2022-4-11 14:13:47:977:518 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 14:13:48:958:146 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 14:13:58:959:554 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 14:13:58:965:17 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 14:13:58:965:192 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..97753cdb --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:17:52:116:320 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:17:52:129:716 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:17:53:116:325 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:17:53:128:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:17:53:134:920 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 13:17:54:123:929 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:17:55:138:163 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:17:56:118:30 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:18:6:124:863 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:18:6:125:66 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..c239f8a6 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:18:42:309:712 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:18:42:322:87 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:18:43:309:726 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:18:43:323:786 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:18:43:330:885 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:18:44:316:649 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:18:44:341:271 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:18:45:311:367 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:18:55:318:323 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:18:55:318:533 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..d35fba94 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:18:59:381:988 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:18:59:394:269 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:19:0:381:985 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:19:0:396:514 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:19:0:403:455 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:19:0:405:71 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:19:1:389:8 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:19:1:405:312 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:19:11:390:361 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:19:11:390:602 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..d5fa94e7 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:18:10:192:574 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 13:18:10:205:743 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:18:11:192:411 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:18:11:207:67 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:18:11:214:35 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:18:11:226:632 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 13:18:12:200:87 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:18:12:201:789 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-11 13:18:22:201:135 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:18:22:201:339 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..f03096d5 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:18:26:242:464 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 13:18:26:255:717 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:18:27:242:471 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-11 13:18:27:260:464 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-11 13:18:27:268:980 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:18:27:285:775 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 13:18:28:250:299 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:18:28:252:151 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-11 13:18:38:250:989 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:18:38:251:192 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..be51af82 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:16:26:646:386 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:16:26:658:893 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:16:27:646:386 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:16:27:658:827 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:16:27:667:383 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 13:16:28:655:457 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:16:29:659:274 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:16:30:659:707 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:16:40:655:804 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 13:16:40:661:128 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:16:40:661:324 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..048da071 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,74 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:16:44:770:87 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:16:44:782:534 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:16:45:770:83 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:16:45:782:287 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:16:45:790:511 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:16:45:807:603 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:16:46:779:36 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:16:46:792:89 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:16:56:778:790 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 13:16:56:784:114 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:16:56:784:290 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..3acd03b9 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:19:15:502:523 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:19:15:515:78 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:19:16:502:515 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:19:16:515:785 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:19:16:524:70 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:19:17:502:526 + Q7-T3 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-11 13:19:17:515:243 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-11 13:19:17:523:768 +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,113-0,1) + (5) expected_result: + (2,113-0,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-11 13:19:18:511:671 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:19:18:523:749 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:19:19:521:445 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:19:20:515:387 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + (4) expected_result: + + (5) expected_result: + + *(6) expected_result: + (0,1) + + Q13 finished at: 2022-4-11 13:19:30:520:177 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + + Q14 finished at: 2022-4-11 13:19:30:526:548 + Q15-T4 execute sql: 'SELECT * FROM t3 ORDER BY k;' + current_result: + (2,1) + *(1) expected_result: + (2,1) + *(2) expected_result: + (2,1) + *(3) expected_result: + (2,1) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + + Q15 finished at: 2022-4-11 13:19:30:532:66 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:19:30:532:279 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..1cbccd46 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-11 13:19:34:599:125 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-11 13:19:34:612:809 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-11 13:19:35:599:129 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-11 13:19:35:613:728 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:19:36:599:117 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-11 13:19:36:612:388 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:19:36:619:930 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:19:37:599:135 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 13:19:38:607:154 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 13:19:39:612:666 + Q9 finished at: 2022-4-11 13:19:39:621:536 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:19:40:613:921 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 13:19:41:600:913 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:19:51:600:938 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 13:19:51:606:565 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:19:51:608:206 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..ad3cd39c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:19:55:722:138 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:19:55:734:477 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:19:56:722:142 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:19:56:735:572 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 13:19:56:745:853 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:19:57:722:162 + Q7-T3 execute sql: 'DELETE FROM t3 WHERE k=2;' + Q7 finished at: 2022-4-11 13:19:57:734:303 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t2 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-11 13:19:57:749:78 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t3 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-11 13:19:58:733:11 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:19:58:743:969 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:19:59:739:709 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:20:0:749:123 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 13:20:10:729:965 + Q14-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-11 13:20:10:737:945 + Q15-T4 execute sql: 'SELECT * FROM t3;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-11 13:20:10:745:887 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:20:10:747:558 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9299ecef --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:20:14:789:553 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-11 13:20:14:803:270 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:20:15:789:549 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-11 13:20:15:808:310 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 13:20:15:817:946 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:20:16:789:596 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-11 13:20:16:808:933 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-11 13:20:16:821:345 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-11 13:20:17:799:761 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:20:17:829:946 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:20:18:806:158 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:20:19:802:742 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:20:29:798:261 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:20:29:799:959 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..a19873f1 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: gp #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:14:28:151:230 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:14:28:164:344 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:14:29:151:232 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:14:29:169:681 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 13:14:30:153:18 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:14:31:152:864 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:14:41:166:834 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:14:41:167:18 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..9421f313 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:15:3:286:140 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:15:3:299:30 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:15:4:286:130 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:15:4:297:417 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-11 13:15:5:293:604 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:15:6:287:758 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:15:7:306:113 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 13:15:17:293:831 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:15:17:294:28 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..9a80b4bf --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:15:21:349:635 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:15:21:362:313 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:15:22:349:451 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:15:22:360:210 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:15:22:361:763 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-11 13:15:23:356:514 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:15:23:371:993 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 13:15:33:356:962 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:15:33:357:142 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..deea38f6 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:16:9:519:499 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:16:9:532:194 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:16:10:519:487 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 13:16:11:525:43 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 13:16:11:539:210 + Q4 finished at: 2022-4-11 13:16:11:548:153 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:16:12:535:39 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:16:22:527:251 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:16:22:527:539 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..14ea3650 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:14:45:218:408 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:14:45:229:771 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:14:46:218:394 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:14:46:234:597 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 13:14:47:224:998 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:14:48:231:779 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:14:49:220:102 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:14:59:226:62 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:14:59:226:268 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..f1383500 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:15:37:416:880 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:15:37:430:276 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:15:38:416:821 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:15:38:430:991 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:15:38:450:952 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 13:15:39:424:371 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:15:39:426:11 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-11 13:15:49:424:466 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:15:49:424:697 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..012c9126 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:15:53:465:400 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:15:53:478:720 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:15:54:465:410 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-11 13:15:54:481:264 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:15:54:495:94 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 13:15:55:472:962 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:15:55:474:611 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-11 13:16:5:473:387 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:16:5:473:628 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..fd0f02ac --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:23:34:300:947 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:23:34:313:969 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:23:35:300:945 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:23:36:308:739 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:23:36:324:811 + Q4 finished at: 2022-4-11 13:23:36:333:955 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-11 13:23:36:340:532 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:23:36:363:606 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:23:46:310:138 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:23:46:310:349 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..5c42321e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:30:26:321:153 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:30:26:331:20 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:30:27:321:164 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:30:27:344:822 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:30:28:849:711 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:30:48:926:164 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a96174fd --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:29:49:429:200 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:29:49:438:780 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:29:50:429:184 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:29:50:451:423 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:29:51:956:233 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:30:12:33:960 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..e37a44d9 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:29:11:943:237 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:29:11:953:44 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:29:12:943:197 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:29:12:963:453 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:29:14:468:97 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-11 14:29:34:648:142 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5f0c2fdf --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:24:41:676:204 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:24:41:689:463 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:24:42:676:194 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:24:42:689:644 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:24:42:696:0 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:24:44:694:873 +Q6 finished at: 2022-4-11 13:24:44:700:107 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:24:44:724:550 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:24:54:684:950 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:24:54:685:251 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..aeaeec4e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:24:58:737:766 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:24:58:750:754 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:24:59:737:755 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:24:59:751:70 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:24:59:757:495 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:25:1:752:161 +Q6 finished at: 2022-4-11 13:25:1:757:356 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:25:2:756:56 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:25:12:746:384 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:25:12:746:594 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d549f64c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:25:16:801:23 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:25:16:813:258 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:25:17:801:18 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:25:17:815:6 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:25:18:807:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:25:18:819:541 + Q5 finished at: 2022-4-11 13:25:18:825:18 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:25:19:822:869 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:25:29:809:554 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:25:29:809:767 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..342a0c92 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:25:33:864:185 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:25:33:876:425 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:25:34:864:192 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:25:34:877:60 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:25:35:871:105 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:25:37:887:285 + Q5 finished at: 2022-4-11 13:25:37:892:450 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:25:37:910:921 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:25:47:872:813 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:25:47:873:42 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..069d55e2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:25:51:943:76 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:25:51:955:482 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:25:52:943:78 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:25:52:957:758 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:25:53:950:16 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:25:53:965:830 + Q5 finished at: 2022-4-11 13:25:53:970:948 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:25:53:991:369 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:26:3:951:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:26:3:951:928 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..8c8571f1 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:27:15:66:491 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:27:15:77:63 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:27:16:66:583 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:27:16:88:477 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 10:27:17:66:543 + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:27:17:88:845 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:27:18:893:920 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-18 10:27:36:593:549 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:27:38:971:702 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..85d7daa4 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:28:16:924:365 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:28:16:934:866 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:28:17:924:318 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:28:17:946:639 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 10:28:18:924:399 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:28:20:938:598 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:28:22:743:804 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-18 10:28:40:529:723 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:28:42:829:829 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..0ad55b45 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:21:35:805:367 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:21:35:818:372 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:21:36:805:370 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 13:21:37:807:92 + Q4 finished at: 2022-4-11 13:21:37:816:867 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:21:38:819:506 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 13:21:48:821:135 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 13:21:48:839:330 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:21:48:839:547 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..8d8912d3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:21:52:889:392 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:21:52:901:889 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:21:53:889:256 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-11 13:21:54:902:380 + Q4 finished at: 2022-4-11 13:21:54:911:740 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:21:55:902:296 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 13:22:5:897:52 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 13:22:5:920:977 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:22:5:921:161 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..890ba4b6 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:22:9:975:542 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:22:9:987:982 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:22:10:975:538 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-11 13:22:11:982:482 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 13:22:12:7:636 + Q4 finished at: 2022-4-11 13:22:12:16:850 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:22:12:989:283 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-11 13:22:22:983:206 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:22:22:983:423 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..8435ab06 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:22:27:37:164 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:22:27:49:662 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:22:28:37:161 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-11 13:22:29:44:111 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:22:29:59:384 + Q4 finished at: 2022-4-11 13:22:29:68:337 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:22:29:80:922 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-11 13:22:39:44:728 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:22:39:44:941 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..d4619b50 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:23:18:230:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:23:18:243:349 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:23:19:230:738 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 13:23:20:236:160 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:23:20:250:693 + Q4 finished at: 2022-4-11 13:23:20:260:309 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:23:20:279:986 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:23:30:238:225 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:23:30:238:429 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..7b11e073 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:22:43:102:64 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:22:43:113:152 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:22:44:102:76 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:22:44:115:741 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:22:46:116:849 +Q5 finished at: 2022-4-11 13:22:46:122:427 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 13:22:46:137:26 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:22:56:109:787 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:22:56:109:987 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..ccfbbfbf --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:23:0:160:695 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:23:0:171:578 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:23:1:160:686 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:23:1:174:211 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:23:3:179:339 +Q5 finished at: 2022-4-11 13:23:3:184:679 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:23:4:174:489 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:23:14:168:551 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:23:14:168:739 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..18ad6ce8 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Avoid + +wat_mda_step_wat_c2: Avoid + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..1ba5280a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt @@ -0,0 +1,107 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..4a01c038 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:55:10:100:907 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:55:10:114:341 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:55:11:100:904 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:55:11:113:623 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:55:11:120:6 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:55:11:136:736 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:55:12:108:598 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:55:12:110:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:55:22:110:554 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:55:22:110:850 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..08accb28 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:55:26:170:724 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:55:26:185:99 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:55:27:170:706 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:55:27:183:926 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:55:27:190:768 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:55:27:203:120 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update (seg3 9.134.190.63:6001 pid=28565); errcode: 40001 +Q7 failed at: 2022-4-11 13:55:28:879:340 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg3 9.134.190.63:6001 pid=28565); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..90661229 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:55:42:237:124 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:55:42:251:614 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:55:43:237:118 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:55:43:250:233 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:55:43:257:418 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:55:45:263:319 +Q6 finished at: 2022-4-11 13:55:45:268:585 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:55:45:292:395 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:55:55:246:120 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:55:55:246:311 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..168e6f9c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:56:31:498:775 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:56:31:512:72 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:56:32:498:754 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:56:32:512:861 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:56:32:520:134 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:56:32:537:893 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:56:33:505:865 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:56:33:523:923 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:56:43:507:302 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:56:43:507:503 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..acc0dbf7 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:55:59:316:494 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-11 13:55:59:328:904 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-11 13:55:59:335:256 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 13:56:0:316:498 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-11 13:56:0:332:411 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-11 13:56:0:337:787 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:56:0:358:298 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:56:1:333:446 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-11 13:56:11:324:997 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-11 13:56:11:330:587 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:56:11:330:804 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..67b2321a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:56:15:404:237 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-11 13:56:15:420:829 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:56:16:404:229 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-11 13:56:16:421:931 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-11 13:56:16:431:710 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:56:16:449:883 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-11 13:56:17:413:696 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:56:17:428:680 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-11 13:56:27:413:881 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:56:27:414:97 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..4291b00d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:56:47:591:170 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 13:56:47:604:777 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:56:48:591:152 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:56:48:605:846 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:56:49:591:161 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:56:49:604:240 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-11 13:56:50:598:202 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:56:53:606:145 + Q8 finished at: 2022-4-11 13:56:53:611:386 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:56:54:605:709 + Q9 finished at: 2022-4-11 13:56:54:611:103 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:56:55:614:25 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:57:5:602:752 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:57:5:602:966 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..37be143f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:58:29:958:204 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:58:29:971:662 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:58:30:958:185 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:58:30:970:994 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:58:30:982:91 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:58:31:958:193 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:58:31:971:931 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-11 13:58:31:978:615 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:58:31:995:707 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-11 13:58:32:965:979 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 13:58:32:967:682 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-11 13:58:42:967:386 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 13:58:42:969:68 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..d609349e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:58:10:875:450 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:58:10:888:902 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:58:11:875:456 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:58:11:888:621 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:58:12:875:465 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-11 13:58:12:888:55 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:58:12:904:134 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:58:13:875:502 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-11 13:58:13:889:279 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:58:13:904:170 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-11 13:58:14:883:195 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:58:14:884:960 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-11 13:58:15:883:684 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-11 13:58:15:885:503 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 13:58:25:886:706 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:58:25:886:969 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..f9df15df --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:57:9:672:840 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-11 13:57:9:686:116 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:57:10:672:818 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:57:10:685:674 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:57:11:672:843 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:57:11:685:803 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-11 13:57:12:679:764 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:57:15:690:454 + Q8 finished at: 2022-4-11 13:57:15:695:449 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:57:16:690:253 + Q9 finished at: 2022-4-11 13:57:16:695:377 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:57:17:688:6 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 13:57:27:680:950 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:57:27:681:152 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..8ce3ccc7 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:57:31:721:617 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 13:57:31:735:169 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:57:32:721:613 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-11 13:57:32:736:43 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:57:33:721:637 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-11 13:57:33:734:728 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-11 13:57:34:729:980 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-11 13:57:35:735:111 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-11 13:57:36:735:146 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:57:37:732:923 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:57:38:735:515 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:57:39:736:889 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:57:49:731:164 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:57:49:731:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..84ccc00d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (100) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:58:47:30:663 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:58:47:42:294 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-11 13:58:47:48:472 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 13:58:48:30:725 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-11 13:58:48:44:804 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-11 13:58:48:51:652 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:58:48:68:370 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:58:49:30:681 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-11 13:58:49:41:747 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 13:58:49:46:972 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:58:49:48:592 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-11 13:58:50:37:838 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-11 13:58:50:52:923 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-11 13:59:0:36:335 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-11 13:59:0:38:28 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..678737df --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:57:53:806:540 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-11 13:57:53:819:782 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:57:54:806:531 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-11 13:57:54:820:755 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:57:54:827:608 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 13:57:54:834:631 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-11 13:57:54:841:193 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:57:54:853:940 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-11 13:57:55:806:532 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-11 13:57:55:823:451 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-11 13:57:55:830:201 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-11 13:57:55:837:461 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-11 13:57:55:844:349 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:57:55:856:448 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-11 13:57:56:814:423 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-11 13:57:56:816:159 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-11 13:58:6:815:422 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-11 13:58:6:815:734 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..179bb34d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:54:54:37:631 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:54:54:48:987 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:54:55:37:633 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:54:55:51:36 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:54:55:70:355 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=4086); errcode: 40001 +Q6 failed at: 2022-4-11 13:54:56:646:994 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=4086); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..23d6681f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:54:37:966:724 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:54:37:978:448 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:54:38:966:685 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:54:38:981:915 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:54:38:998:251 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 13:54:39:972:251 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:54:39:974:25 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:54:49:976:368 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:54:49:976:552 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:54:49:976:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..9cb7115e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:36:14:861:461 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:36:14:873:579 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:36:15:861:464 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:36:15:873:744 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:36:15:882:348 +Q6-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:36:17:878:738 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=27958); errcode: 40001 +Q6 failed at: 2022-4-11 13:36:18:486:587 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=27958); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..35322115 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:36:33:0:717 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:36:33:13:113 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:36:34:0:734 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:36:34:13:204 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:36:34:21:859 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:36:34:94:239 +Q7-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=24868); errcode: 40001 +Q7 failed at: 2022-4-11 13:36:35:715:366 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=24868); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..cf27b81f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:12:1:617:368 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:12:1:627:243 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:12:2:617:371 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 14:12:2:633:33 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 14:12:3:625:636 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 14:12:3:639:580 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=12112); errcode: 40001 + Q5 failed at: 2022-4-11 14:12:4:147:403 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=12112); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..7fdaafbb --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:37:6:175:411 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:37:6:188:330 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:37:7:175:412 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:37:7:189:219 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:37:7:195:737 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 13:37:8:182:589 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:37:9:191:663 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:37:10:177:41 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:37:20:183:874 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:37:20:184:80 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..d7dccc49 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:37:56:363:978 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:37:56:376:248 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:37:57:363:962 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:37:57:378:425 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:37:57:385:571 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:37:58:370:640 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:37:58:382:387 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:37:59:365:635 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:38:9:372:550 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:38:9:372:782 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..586958e8 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:38:13:428:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:38:13:440:561 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:38:14:428:477 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:38:14:442:823 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:38:14:450:242 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:38:14:451:915 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:38:15:435:186 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:38:15:450:522 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 13:38:25:436:905 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:38:25:437:134 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2dba7941 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:42:20:744:911 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0 ORDER BY k;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 14:42:20:758:738 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:42:21:744:890 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-11 14:42:21:759:309 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-11 14:42:21:765:607 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 14:42:21:780:428 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0 ORDER BY k;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 14:42:22:753:19 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 14:42:22:754:609 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-11 14:42:32:756:73 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 14:42:32:756:273 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..3863c875 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:37:40:298:714 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 13:37:40:311:359 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:37:41:298:703 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-11 13:37:41:317:114 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-11 13:37:41:325:724 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:37:41:340:700 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 13:37:42:306:108 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:37:42:307:696 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-11 13:37:52:307:40 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:37:52:307:265 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..09c16bda --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:35:40:664:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:35:40:676:719 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:35:41:664:546 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:35:41:677:297 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:35:41:686:15 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 13:35:42:673:102 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:35:43:682:505 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:35:44:678:857 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:35:54:673:650 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 13:35:54:678:743 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:35:54:678:948 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ed3ab7fd --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:35:58:766:72 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:35:58:778:313 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:35:59:766:61 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:35:59:778:437 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:35:59:787:22 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:35:59:802:426 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:36:0:774:754 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:36:0:792:958 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 13:36:10:774:488 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 13:36:10:779:522 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:36:10:779:698 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..de69b286 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:38:29:557:146 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:38:29:569:632 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:38:30:555:31 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 13:38:30:567:599 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 13:38:30:576:271 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:38:31:555:18 + Q7-T3 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-11 13:38:31:567:136 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-11 13:38:31:575:271 +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,113-0,1) + (5) expected_result: + (2,113-0,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-11 13:38:32:563:705 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:38:32:580:902 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:38:33:572:320 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:38:34:573:645 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + (4) expected_result: + + (5) expected_result: + + *(6) expected_result: + (0,1) + + Q13 finished at: 2022-4-11 13:38:44:566:250 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + + Q14 finished at: 2022-4-11 13:38:44:571:886 + Q15-T4 execute sql: 'SELECT * FROM t3 ORDER BY k;' + current_result: + (2,1) + *(1) expected_result: + (2,1) + *(2) expected_result: + (2,1) + *(3) expected_result: + (2,1) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + + Q15 finished at: 2022-4-11 13:38:44:577:361 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:38:44:577:589 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c0eea391 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-11 13:38:48:639:888 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-11 13:38:48:653:581 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-11 13:38:49:639:884 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-11 13:38:49:651:940 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:38:50:639:891 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-11 13:38:50:652:638 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:38:50:659:438 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:38:51:639:915 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 13:38:52:647:830 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 13:38:53:660:350 + Q9 finished at: 2022-4-11 13:38:53:669:392 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:38:54:669:607 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 13:38:55:641:599 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:39:5:641:675 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 13:39:5:647:381 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:39:5:649:67 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..28310e71 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:39:9:760:662 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:39:9:772:763 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:39:10:760:673 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:39:10:773:77 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 13:39:10:783:420 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:39:11:760:656 + Q7-T3 execute sql: 'DELETE FROM t3 WHERE k=2;' + Q7 finished at: 2022-4-11 13:39:11:772:310 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t2 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-11 13:39:11:781:941 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t3 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-11 13:39:12:771:128 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:39:12:783:957 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:39:13:772:754 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:39:14:778:651 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 13:39:24:768:746 + Q14-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-11 13:39:24:776:753 + Q15-T4 execute sql: 'SELECT * FROM t3;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-11 13:39:24:784:539 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:39:24:786:203 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..e6c8dde7 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:39:28:826:993 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-11 13:39:28:840:354 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:39:29:826:987 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-11 13:39:29:846:263 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 13:39:29:856:195 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:39:30:827:3 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-11 13:39:30:845:157 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-11 13:39:30:854:475 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-11 13:39:31:836:855 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 13:39:31:863:835 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:39:32:843:901 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:39:33:843:914 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 13:39:43:835:679 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 13:39:43:837:446 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..477c731d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: gp #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:33:42:185:77 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:33:42:197:932 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:33:43:185:49 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:33:43:198:324 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 13:33:44:186:649 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:33:45:186:841 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:33:55:194:449 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:33:55:194:633 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..cc7c946f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:34:17:339:390 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:34:17:351:659 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:34:18:339:385 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:34:18:352:316 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-11 13:34:19:346:261 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:34:20:341:79 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:34:21:354:415 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 13:34:31:346:917 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:34:31:347:113 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..0082d2e3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:34:35:406:692 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:34:35:418:948 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:34:36:406:728 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 13:34:36:421:68 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:34:36:422:777 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-11 13:34:37:413:665 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:34:37:444:974 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 13:34:47:414:79 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:34:47:414:257 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..3963a3a3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:35:23:575:612 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:35:23:588:64 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:35:24:575:630 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 13:35:25:580:983 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 13:35:25:595:890 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=27962); errcode: 40001 + Q4 failed at: 2022-4-11 13:35:26:6:847 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=27962); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..6ddb2204 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:33:59:262:927 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:33:59:273:777 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:34:0:262:933 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:34:0:277:803 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 13:34:1:268:595 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:34:2:287:518 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:34:3:264:579 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 13:34:13:270:872 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:34:13:271:50 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..94d6f239 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:34:51:462:992 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:34:51:475:855 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:34:52:462:993 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:34:52:476:583 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:34:52:493:428 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 13:34:53:470:262 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:34:53:471:850 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-11 13:35:3:470:399 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:35:3:470:586 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..618f55bf --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:35:7:513:381 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:35:7:526:344 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:35:8:513:378 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-11 13:35:8:528:544 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:35:8:545:717 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 13:35:9:520:856 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:35:9:522:396 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-11 13:35:19:521:127 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:35:19:521:342 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..794a5a3e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:45:38:663:23 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:45:38:675:514 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:45:39:663:18 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 13:45:40:670:568 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:45:40:682:4 + Q4 finished at: 2022-4-11 13:45:40:691:133 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg3 9.134.190.63:6001 pid=26712); errcode: 40001 + Q5 failed at: 2022-4-11 13:45:41:199:429 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg3 9.134.190.63:6001 pid=26712); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..a2a94a4f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:26:34:941:476 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:26:34:951:230 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:26:35:941:428 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:26:35:955:681 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:26:37:460:618 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:26:57:546:426 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..3bb5ff04 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:27:24:434:872 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:27:24:444:489 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:27:25:434:850 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:27:25:450:870 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:27:26:955:571 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:27:47:39:825 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..3ec5761f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:28:3:351:512 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:28:3:361:393 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:28:4:351:486 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:28:4:367:576 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:28:5:872:516 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-11 14:28:26:56:516 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..4e5df3ed --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:46:46:23:38 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:46:46:35:950 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:46:47:23:22 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:46:47:35:477 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:46:47:42:28 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 13:46:49:36:308 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=32037); errcode: 40001 +Q6 failed at: 2022-4-11 13:46:49:643:18 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=32037); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ef6ba9e2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:47:3:83:78 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:47:3:96:111 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:47:4:83:66 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 13:47:4:95:456 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 13:47:4:102:256 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:47:6:96:798 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=32037); errcode: 40001 +Q6 failed at: 2022-4-11 13:47:6:703:542 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg0 9.135.218.12:6000 pid=32037); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..bcd4ae31 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:47:21:139:395 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:47:21:152:273 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:47:22:139:382 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:47:22:152:619 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:47:23:146:171 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:47:23:164:674 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); errcode: 40001 + Q5 failed at: 2022-4-11 13:47:23:672:173 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..aedf408e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:47:38:201:792 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:47:38:214:227 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:47:39:201:783 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:47:39:215:85 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 13:47:40:208:857 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:47:42:214:908 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); errcode: 40001 + Q5 failed at: 2022-4-11 13:47:42:721:854 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..7aa1d324 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:47:56:256:35 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:47:56:268:679 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:47:57:256:25 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:47:57:269:408 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 13:47:58:262:862 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 13:47:58:275:74 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); errcode: 40001 + Q5 failed at: 2022-4-11 13:47:58:781:950 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg2 9.134.190.63:6000 pid=26711); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..bab01714 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:26:24:666:112 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:26:24:676:649 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:26:25:666:125 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:26:25:683:297 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 10:26:26:666:100 + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:26:26:681:333 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:26:28:486:341 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-18 10:26:46:188:337 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:26:48:571:363 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..79f8ec2a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT) DISTRIBUTED RANDOMLY PARTITION BY RANGE(v) (PARTITION p0 START (0) INCLUSIVE END (2) EXCLUSIVE, PARTITION p1 START (2) INCLUSIVE END (4) EXCLUSIVE);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:25:42:110:483 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:25:42:120:885 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:25:43:110:489 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:25:43:125:810 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 10:25:44:110:572 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:25:46:124:223 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:25:47:929:71 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-18 10:26:5:715:812 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:26:8:15:745 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..06ac2eb2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:43:40:235:706 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:43:40:248:753 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:43:41:235:715 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 13:43:42:237:502 + Q4 finished at: 2022-4-11 13:43:42:247:738 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:43:43:256:487 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 13:43:53:245:434 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 13:43:53:261:748 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:43:53:261:950 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..cee85466 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,30 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:43:57:320:807 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:43:57:333:280 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:43:58:320:795 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-11 13:43:59:332:508 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); errcode: 40001 + Q4 failed at: 2022-4-11 13:43:59:744:424 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..4b624eb1 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt @@ -0,0 +1,32 @@ +#### db_type: gp #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:44:14:372:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:44:14:385:206 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:44:15:372:681 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-11 13:44:16:379:609 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 13:44:16:399:418 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); errcode: 40001 + Q4 failed at: 2022-4-11 13:44:16:810:102 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..bc49a41e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,32 @@ +#### db_type: gp #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:44:31:428:514 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:44:31:441:29 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:44:32:428:501 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-11 13:44:33:435:446 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:44:33:448:873 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); errcode: 40001 + Q4 failed at: 2022-4-11 13:44:33:859:726 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..1c77877e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:45:22:598:789 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 13:45:22:611:278 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:45:23:598:783 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 13:45:24:604:451 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 13:45:24:624:510 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); errcode: 40001 + Q4 failed at: 2022-4-11 13:45:25:35:153 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32041); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..3ea46809 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:44:47:481:207 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:44:47:492:382 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:44:48:481:183 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:44:48:494:59 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:44:50:498:358 +Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32038); errcode: 40001 +Q5 failed at: 2022-4-11 13:44:51:5:422 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32038); + diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..be06cafd --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:45:4:545:87 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 13:45:4:556:254 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:45:5:545:212 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 13:45:5:558:65 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 13:45:7:560:662 +Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32038); errcode: 40001 +Q5 failed at: 2022-4-11 13:45:8:67:826 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=32038); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..b6985d44 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:57:12:824:612 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:57:12:836:415 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:57:13:824:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:57:13:838:35 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:57:13:844:653 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:57:13:861:813 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:57:14:830:225 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:57:14:831:814 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:57:24:833:421 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:57:24:833:635 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..64be99f9 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:57:28:891:725 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:57:28:902:737 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:57:29:891:689 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:57:29:905:956 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:57:29:913:3 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:57:29:934:634 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:57:30:898:664 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:57:30:912:990 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:57:40:900:16 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:57:40:900:220 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..92de881c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:57:44:954:218 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:57:44:965:161 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:57:45:954:211 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:57:45:966:381 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:57:45:973:199 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:57:47:971:687 +Q6 finished at: 2022-4-11 12:57:47:976:856 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:57:47:987:530 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:57:57:962:623 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:57:57:962:815 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..0eb68f98 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:58:34:214:936 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:58:34:226:988 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:58:35:214:931 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:58:35:229:13 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:58:35:235:678 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:58:35:253:244 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:58:36:221:808 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:58:36:239:644 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:58:46:223:202 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:58:46:223:390 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..ee29034a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:58:2:27:841 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-11 12:58:2:40:668 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-11 12:58:2:47:702 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 12:58:3:27:832 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-11 12:58:3:43:541 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-11 12:58:3:49:83 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:58:3:60:256 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:58:4:38:820 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-11 12:58:14:36:252 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-11 12:58:14:41:574 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:58:14:41:767 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..00fa66da --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:58:18:132:300 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-11 12:58:18:152:908 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:58:19:132:287 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-11 12:58:19:151:431 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-11 12:58:19:160:654 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:58:19:180:65 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-11 12:58:20:141:752 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:58:20:155:678 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-11 12:58:30:141:896 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:58:30:142:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..703e462b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:58:50:295:955 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 12:58:50:309:8 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:58:51:295:964 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:58:51:308:413 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:58:52:295:957 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:58:52:307:56 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-11 12:58:53:303:46 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:58:56:308:676 + Q8 finished at: 2022-4-11 12:58:56:314:21 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:58:57:318:846 + Q9 finished at: 2022-4-11 12:58:57:324:197 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:58:58:317:573 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:59:8:313:72 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:59:8:313:297 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f8111cf1 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:0:32:676:97 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:0:32:687:336 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:0:33:676:115 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 13:0:33:688:652 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 13:0:33:705:569 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 13:0:34:676:103 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 13:0:34:687:346 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-11 13:0:34:694:145 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 13:0:34:708:150 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-11 13:0:35:681:898 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 13:0:35:683:602 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-11 13:0:45:684:686 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 13:0:45:686:324 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..9c5d4d22 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:0:13:587:775 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 13:0:13:599:304 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 13:0:14:587:773 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 13:0:14:600:200 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 13:0:15:587:790 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-11 13:0:15:600:92 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:0:15:614:753 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:0:16:587:806 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-11 13:0:16:601:195 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 13:0:16:621:377 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-11 13:0:17:593:523 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 13:0:17:595:211 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-11 13:0:18:593:442 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-11 13:0:18:595:73 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 13:0:28:604:844 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 13:0:28:605:94 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..940d1826 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:59:12:391:894 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-11 12:59:12:405:321 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:59:13:391:881 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:59:13:403:845 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:59:14:391:879 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:59:14:402:767 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-11 12:59:15:399:318 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:59:18:408:286 + Q8 finished at: 2022-4-11 12:59:18:413:359 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:59:19:410:954 + Q9 finished at: 2022-4-11 12:59:19:415:820 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:59:20:407:94 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 12:59:30:399:762 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:59:30:399:982 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..bab370fb --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:59:34:442:817 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 12:59:34:455:886 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:59:35:442:810 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-11 12:59:35:454:769 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:59:36:442:825 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-11 12:59:36:454:141 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-11 12:59:37:452:621 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:59:40:454:709 + Q8 finished at: 2022-4-11 12:59:40:460:817 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:59:41:459:30 + Q9 finished at: 2022-4-11 12:59:41:464:939 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:59:42:459:789 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:59:52:451:683 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:59:52:451:913 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..1f35803c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 13:0:49:745:803 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 13:0:49:756:794 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-11 13:0:49:762:113 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 13:0:50:745:818 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-11 13:0:50:757:8 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-11 13:0:50:764:51 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 13:0:50:784:126 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 13:0:51:745:834 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-11 13:0:51:756:937 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 13:0:51:762:302 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 13:0:51:763:961 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-11 13:0:52:752:819 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-11 13:0:52:779:326 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-11 13:1:2:751:335 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-11 13:1:2:752:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..aaba9d81 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:59:56:520:289 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-11 12:59:56:532:261 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:59:57:520:310 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-11 12:59:57:532:451 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:59:57:539:348 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:59:57:544:663 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-11 12:59:57:551:283 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:59:57:564:423 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-11 12:59:58:520:304 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-11 12:59:58:533:161 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-11 12:59:58:539:707 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-11 12:59:58:544:765 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-11 12:59:58:551:89 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:59:58:562:80 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-11 12:59:59:527:889 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-11 12:59:59:529:518 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-11 13:0:9:528:928 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-11 13:0:9:529:148 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..b53235ef --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:56:56:760:790 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:56:56:771:607 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:56:57:760:786 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:56:57:774:778 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:56:57:790:899 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-11 12:56:58:767:808 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:56:58:780:903 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:57:8:768:445 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:57:8:768:629 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..00313de2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:56:40:695:132 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:56:40:706:456 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:56:41:695:147 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:56:41:715:677 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:56:41:727:347 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 12:56:42:701:59 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:56:42:702:672 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:56:52:710:383 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:56:52:710:592 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:56:52:710:762 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..9f06ada5 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:27:22:891:679 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:27:22:904:191 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:27:23:891:667 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:27:23:905:272 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:27:23:913:682 +Q6-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:27:25:910:859 +Q6 finished at: 2022-4-11 12:27:25:917:647 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:27:26:909:471 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:27:36:900:27 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,2) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,2) + + Q10 finished at: 2022-4-11 12:27:36:905:218 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:27:36:905:412 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..67c508fa --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:27:40:986:935 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:27:40:999:448 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:27:41:986:896 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:27:42:6:552 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:27:42:12:749 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:27:42:29:768 +Q7-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-11 12:27:42:995:398 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:27:43:19:82 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:27:52:995:249 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,2) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,2) + + Q10 finished at: 2022-4-11 12:27:53:0:336 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:27:53:0:541 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..17f1165a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:27:57:124:301 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:27:57:136:830 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:27:58:124:285 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:27:58:138:424 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:27:59:131:141 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:27:59:150:438 + Q5 finished at: 2022-4-11 12:27:59:156:776 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:28:0:174:342 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:28:10:132:716 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:28:10:137:842 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:28:10:138:37 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..ae56cb79 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:28:14:209:141 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:28:14:220:192 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:28:15:209:145 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:28:15:223:42 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:28:15:229:202 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:28:16:214:668 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:28:17:229:82 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:28:18:210:853 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:28:28:217:417 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:28:28:217:636 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..6007c42f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:29:4:416:265 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:29:4:428:685 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:29:5:416:273 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:29:5:432:430 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:29:5:437:250 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:29:6:423:165 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:29:6:439:77 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:29:7:417:821 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:29:17:424:729 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:29:17:424:951 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..469436d7 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:29:21:481:608 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:29:21:493:978 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:29:22:481:594 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:29:22:494:30 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:29:22:498:786 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:29:22:500:516 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:29:23:488:522 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:29:23:513:26 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:29:33:490:41 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:29:33:490:277 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..91d11a13 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:28:32:276:152 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 12:28:32:289:396 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:28:33:276:168 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:28:33:287:901 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:28:33:293:696 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:28:33:317:498 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 12:28:34:283:500 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:28:34:285:109 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-11 12:28:44:284:608 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:28:44:284:818 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..5b0a7b5c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:28:48:332:127 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 12:28:48:345:381 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:28:49:332:137 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-11 12:28:49:347:26 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-11 12:28:49:359:723 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:28:49:377:865 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 12:28:50:339:522 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:28:50:341:300 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-11 12:29:0:340:613 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:29:0:340:825 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..15f720fb --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:26:48:619:914 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:26:48:632:521 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:26:49:619:905 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:26:49:632:16 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:26:49:638:334 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:26:50:626:913 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:26:51:634:706 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:26:52:639:176 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:27:2:629:0 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:27:2:634:428 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:27:2:634:648 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..e4e305aa --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,74 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:27:6:782:146 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:27:6:794:893 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:27:7:782:184 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:27:7:795:507 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:27:7:801:792 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:27:7:815:66 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:27:8:789:99 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:27:8:807:443 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:27:18:790:633 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:27:18:796:196 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:27:18:796:423 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..3a3e1153 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:29:37:624:541 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:29:37:637:247 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:29:38:624:552 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:29:38:636:695 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:29:38:642:930 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:29:39:624:553 + Q7-T3 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-11 12:29:39:637:370 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-11 12:29:39:644:47 +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-11 12:29:40:633:658 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:29:40:651:684 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:29:41:635:472 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:29:42:638:795 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + *(6) expected_result: + (0,1) + + Q13 finished at: 2022-4-11 12:29:52:642:211 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + + Q14 finished at: 2022-4-11 12:29:52:647:726 + Q15-T4 execute sql: 'SELECT * FROM t3 ORDER BY k;' + current_result: + (2,1) + *(1) expected_result: + (2,1) + *(2) expected_result: + (2,1) + *(3) expected_result: + (2,1) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + + Q15 finished at: 2022-4-11 12:29:52:653:273 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:29:52:653:624 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..31fd4b13 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-11 12:29:56:716:583 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-11 12:29:56:728:78 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-11 12:29:57:716:572 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-11 12:29:57:730:595 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:29:58:716:574 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-11 12:29:58:727:790 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 12:29:58:733:578 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 12:29:59:716:602 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 12:30:0:722:308 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 12:30:1:731:342 + Q9 finished at: 2022-4-11 12:30:1:740:282 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:30:2:734:326 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 12:30:3:718:331 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:30:13:718:302 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 12:30:13:724:159 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:30:13:725:890 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c6fdda55 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:30:17:849:106 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:30:17:861:243 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:30:18:849:89 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:30:18:860:686 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 12:30:18:868:872 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:30:19:849:103 + Q7-T3 execute sql: 'DELETE FROM t3 WHERE k=2;' + Q7 finished at: 2022-4-11 12:30:19:861:17 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t2 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-11 12:30:19:870:547 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t3 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-11 12:30:20:859:958 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:30:20:874:557 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:30:21:862:557 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:30:22:866:921 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 12:30:32:856:984 + Q14-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-11 12:30:32:864:698 + Q15-T4 execute sql: 'SELECT * FROM t3;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-11 12:30:32:872:245 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:30:32:873:820 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..47c93493 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:30:36:910:79 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-11 12:30:36:924:326 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:30:37:910:54 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-11 12:30:37:920:583 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 12:30:37:928:228 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:30:38:910:66 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-11 12:30:38:921:47 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-11 12:30:38:929:41 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-11 12:30:39:923:369 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:30:39:936:799 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:30:40:921:702 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:30:41:921:472 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:30:51:918:607 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:30:51:920:192 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..7d20b6e2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: gp #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:24:50:95:376 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:24:50:108:195 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:24:51:95:357 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:24:51:114:278 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 12:24:52:97:77 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:24:53:96:940 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 12:25:3:110:845 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:25:3:111:27 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..e3cf2923 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:25:25:241:31 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:25:25:253:513 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:25:26:241:12 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:25:26:251:576 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-11 12:25:27:247:909 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:25:28:242:588 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:25:29:259:82 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 12:25:39:248:524 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:25:39:248:706 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..df059c11 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:25:43:309:658 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:25:43:322:103 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:25:44:309:659 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:25:44:320:175 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:25:44:321:665 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-11 12:25:45:316:573 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:25:45:332:82 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 12:25:55:317:153 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:25:55:317:334 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..adc2ebce --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:26:31:496:312 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:26:31:508:775 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:26:32:496:289 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 12:26:33:501:763 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 12:26:33:519:780 + Q4 finished at: 2022-4-11 12:26:33:528:677 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:26:34:511:691 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:26:44:503:899 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:26:44:504:88 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..0f92c2a0 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:25:7:176:922 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:25:7:188:12 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:25:8:176:914 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:25:8:191:523 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 12:25:9:182:541 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:25:10:195:946 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:25:11:178:573 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:25:21:184:595 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:25:21:184:779 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..32fd6117 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:25:59:375:160 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 12:25:59:389:560 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:26:0:375:154 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:26:0:386:776 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:26:0:409:85 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 12:26:1:382:552 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:26:1:384:170 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-11 12:26:11:382:638 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:26:11:382:827 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..dc23ada2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:26:15:427:112 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 12:26:15:440:834 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:26:16:427:264 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-11 12:26:16:442:948 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:26:16:458:141 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 12:26:17:434:517 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:26:17:436:124 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-11 12:26:27:434:713 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:26:27:434:894 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..1df88bfc --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,67 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:44:48:698:135 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:44:48:710:664 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:44:49:698:149 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:44:49:710:580 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:44:50:705:10 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:44:50:716:500 + Q5 finished at: 2022-4-11 12:44:50:723:168 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:44:50:735:376 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:45:0:707:137 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:45:0:712:461 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:45:0:712:644 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..4393731b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:45:4:800:874 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:45:4:813:547 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:45:5:800:891 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:45:5:813:537 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 12:45:7:318:489 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 12:45:27:405:777 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..76421f95 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:45:31:494:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:45:31:506:904 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:45:32:494:457 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:45:32:508:343 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 12:45:34:13:59 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 12:45:54:99:341 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..6d3b6948 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:45:58:184:883 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:45:58:197:534 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:45:59:184:886 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:45:59:199:26 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 12:46:0:703:824 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-11 12:46:20:889:734 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5008ea7f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:46:24:982:105 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:46:24:993:109 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:46:25:982:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:46:25:995:970 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:46:26:10:163 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:46:27:999:579 +Q6 finished at: 2022-4-11 12:46:28:10:408 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:46:28:27:112 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:46:37:990:499 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:46:37:990:716 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..96f7a007 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:46:42:87:134 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:46:42:98:402 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:46:43:87:121 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:46:43:101:238 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:46:43:108:7 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:46:45:111:223 +Q6 finished at: 2022-4-11 12:46:45:116:517 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:46:46:113:20 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:46:56:95:411 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:46:56:95:632 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..1cf1917e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:47:0:161:609 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:47:0:174:224 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:47:1:161:607 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:47:1:174:977 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:47:2:168:480 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:47:2:184:748 + Q5 finished at: 2022-4-11 12:47:2:190:185 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:47:3:186:317 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:47:13:169:895 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:47:13:170:104 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..ed090d74 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:47:17:233:611 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:47:17:246:271 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:47:18:233:562 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:47:18:244:549 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:47:19:240:425 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:47:21:246:438 + Q5 finished at: 2022-4-11 12:47:21:252:95 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:47:21:265:337 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:47:31:241:859 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:47:31:242:207 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..35516b2f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:47:35:303:274 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:47:35:315:853 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:47:36:303:277 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:47:36:316:164 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:47:37:310:111 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:47:37:322:263 + Q5 finished at: 2022-4-11 12:47:37:327:895 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:47:37:339:976 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:47:47:311:744 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:47:47:311:975 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..46c5a4d2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:20:57:467:238 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:20:57:481:193 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:20:58:467:214 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:20:58:489:466 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 10:20:59:467:220 + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:20:59:489:312 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:21:1:294:582 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-18 10:21:18:994:830 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:21:21:372:464 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..e032ea6f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:20:17:994:618 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:20:18:8:721 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:20:18:994:599 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:20:19:20:289 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 10:20:19:994:719 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:20:22:9:184 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:20:23:814:261 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-18 10:20:41:599:828 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:20:43:899:746 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..953e4592 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:42:50:137:988 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:42:50:150:890 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:42:51:137:963 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 12:42:52:139:961 + Q4 finished at: 2022-4-11 12:42:52:149:614 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:42:53:152:119 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 12:43:3:162:715 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 12:43:3:188:644 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:43:3:188:910 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..7338eb48 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:43:7:239:57 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:43:7:251:435 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:43:8:238:853 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-11 12:43:9:254:358 + Q4 finished at: 2022-4-11 12:43:9:263:507 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:43:10:255:567 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 12:43:20:246:673 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 12:43:20:265:739 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:43:20:265:942 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..a66f25cd --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:43:24:316:654 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:43:24:329:552 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:43:25:316:501 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-11 12:43:26:323:243 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 12:43:26:335:503 + Q4 finished at: 2022-4-11 12:43:26:345:44 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:43:27:342:123 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-11 12:43:37:323:986 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:43:37:324:162 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..5c10574f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:43:41:378:669 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:43:41:391:394 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:43:42:378:656 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-11 12:43:43:386:754 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:43:43:411:554 + Q4 finished at: 2022-4-11 12:43:43:420:732 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:43:43:432:831 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-11 12:43:53:386:144 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:43:53:386:345 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..024990d2 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:44:32:587:289 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:44:32:599:761 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:44:33:587:292 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 12:44:34:592:579 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:44:34:607:481 + Q4 finished at: 2022-4-11 12:44:34:616:636 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:44:34:629:835 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:44:44:594:675 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:44:44:594:974 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..787d7383 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:43:57:463:501 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:43:57:474:623 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:43:58:463:495 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:43:58:477:357 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:44:0:492:231 +Q5 finished at: 2022-4-11 12:44:0:497:768 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 12:44:0:509:12 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:44:10:471:185 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:44:10:471:368 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..96bfee69 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:44:14:524:775 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:44:14:535:860 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:44:15:524:733 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:44:15:539:234 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:44:17:538:894 +Q5 finished at: 2022-4-11 12:44:17:544:151 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:44:18:536:518 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:44:28:532:175 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:44:28:532:591 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..18ad6ce8 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Avoid + +wat_mda_step_wat_c2: Avoid + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..1ba5280a --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt @@ -0,0 +1,107 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..0fd72e06 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:18:44:307:450 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:18:44:318:851 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:18:45:307:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:18:45:320:35 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:18:45:326:441 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:18:45:347:255 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:18:46:313:35 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:18:46:314:798 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:18:56:316:873 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:18:56:317:188 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..d2de88f3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:19:0:378:11 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:19:0:389:248 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:19:1:378:11 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:19:1:394:396 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:19:1:400:615 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:19:1:426:426 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=23981); errcode: 40001 +Q7 failed at: 2022-4-11 12:19:3:86:619 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=23981); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..fa83cdef --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:19:16:445:656 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:19:16:457:64 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:19:17:445:675 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:19:17:456:729 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:19:17:463:421 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:19:19:461:53 +Q6 finished at: 2022-4-11 12:19:19:467:278 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:19:19:478:310 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:19:29:454:96 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:19:29:454:279 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..5206ac97 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:20:5:692:127 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:20:5:703:37 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:20:6:692:128 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:20:6:704:531 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:20:6:711:73 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:20:6:725:671 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:20:7:699:597 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:20:7:715:416 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:20:17:700:938 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:20:17:701:150 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..5fd18f76 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:19:33:509:540 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-11 12:19:33:522:207 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-11 12:19:33:529:390 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 12:19:34:509:535 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-11 12:19:34:523:965 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-11 12:19:34:529:928 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:19:34:545:233 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:19:35:524:216 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-11 12:19:45:517:849 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-11 12:19:45:523:387 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:19:45:523:617 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..de686585 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:19:49:615:72 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-11 12:19:49:635:67 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:19:50:615:65 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-11 12:19:50:631:776 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-11 12:19:50:641:706 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:19:50:658:58 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-11 12:19:51:624:719 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:19:51:640:13 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-11 12:20:1:624:737 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:20:1:625:24 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..f4947b76 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:20:21:763:720 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 12:20:21:777:194 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:20:22:763:717 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:20:22:775:652 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:20:23:763:737 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:20:23:775:12 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-11 12:20:24:770:839 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:20:27:778:95 + Q8 finished at: 2022-4-11 12:20:27:783:445 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:20:28:793:183 + Q9 finished at: 2022-4-11 12:20:28:798:738 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:20:29:775:444 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:20:39:775:395 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:20:39:775:706 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..62bfe290 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:22:4:172:489 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:22:4:184:48 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:22:5:172:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:22:5:184:761 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:22:5:201:887 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:22:6:172:470 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 12:22:6:183:448 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-11 12:22:6:190:23 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:22:6:208:481 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-11 12:22:7:178:103 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 12:22:7:179:877 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-11 12:22:17:181:210 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 12:22:17:182:964 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c280ac51 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:21:45:63:889 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:21:45:75:442 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:21:46:63:883 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:21:46:75:89 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:21:47:63:878 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-11 12:21:47:76:502 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:21:47:91:991 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 12:21:48:63:904 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-11 12:21:48:78:214 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:21:48:92:263 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-11 12:21:49:69:489 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:21:49:71:61 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-11 12:21:50:69:563 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-11 12:21:50:71:253 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 12:22:0:74:799 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:22:0:75:38 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..51105eba --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:20:43:844:136 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-11 12:20:43:857:511 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:20:44:844:142 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:20:44:854:935 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:20:45:844:161 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:20:45:855:320 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-11 12:20:46:850:760 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:20:49:857:131 + Q8 finished at: 2022-4-11 12:20:49:862:2 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:20:50:860:806 + Q9 finished at: 2022-4-11 12:20:50:866:162 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:20:51:857:20 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 12:21:1:852:447 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:21:1:852:653 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..fc70a83d --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:21:5:900:133 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-11 12:21:5:913:887 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:21:6:900:107 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-11 12:21:6:912:4 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:21:7:900:118 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-11 12:21:7:911:199 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-11 12:21:8:910:12 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:21:11:914:840 + Q8 finished at: 2022-4-11 12:21:11:920:812 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:21:12:917:291 + Q9 finished at: 2022-4-11 12:21:12:923:470 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:21:13:913:821 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:21:23:908:886 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:21:23:909:89 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..6c4e80ee --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:22:21:240:343 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 12:22:21:251:747 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-11 12:22:21:256:829 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-11 12:22:22:240:331 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-11 12:22:22:251:697 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-11 12:22:22:258:276 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:22:22:280:960 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 12:22:23:240:358 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-11 12:22:23:251:801 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 12:22:23:257:516 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:22:23:259:173 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-11 12:22:24:247:466 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-11 12:22:24:265:113 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-11 12:22:34:246:355 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-11 12:22:34:248:50 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..4b1e1abc --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: gp #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:21:27:973:860 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-11 12:21:27:984:959 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:21:28:973:855 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-11 12:21:28:986:144 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:21:28:992:778 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-11 12:21:28:997:741 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-11 12:21:29:9:845 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:21:29:25:907 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-11 12:21:29:973:866 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-11 12:21:29:987:476 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-11 12:21:29:994:281 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-11 12:21:29:999:552 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-11 12:21:30:10:526 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:21:30:26:919 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-11 12:21:30:981:610 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-11 12:21:30:983:287 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-11 12:21:40:982:520 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-11 12:21:40:982:739 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..45a5aa16 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:18:28:244:17 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:18:28:255:195 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:18:29:243:996 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:18:29:257:536 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:18:29:273:805 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=23981); errcode: 40001 +Q6 failed at: 2022-4-11 12:18:30:852:827 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=23981); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..f106cddf --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:18:12:170:972 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:18:12:182:556 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:18:13:170:943 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:18:13:185:182 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:18:13:205:733 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 12:18:14:176:567 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:18:14:178:280 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:18:24:180:384 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:18:24:180:600 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:18:24:180:789 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..96f3921b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:4:4:941:179 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:4:4:953:655 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:4:5:941:184 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:4:5:954:905 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:4:5:961:226 +Q6-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:4:7:954:742 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14973); errcode: 40001 +Q6 failed at: 2022-4-11 12:4:8:563:44 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14973); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..e4b6886b --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:4:23:48:742 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:4:23:61:150 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:4:24:48:747 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:4:24:61:214 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:4:24:67:587 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:4:24:95:416 +Q7-T1 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' +Q7 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14973); errcode: 40001 +Q7 failed at: 2022-4-11 12:4:25:758:717 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14973); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9e7eeb38 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:4:39:171:436 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:4:39:184:127 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:4:40:171:413 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:4:40:184:130 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:4:41:178:498 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:4:41:194:116 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14977); errcode: 40001 + Q5 failed at: 2022-4-11 12:4:41:702:105 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14977); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..15665ee0 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:4:56:228:69 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:4:56:239:345 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:4:57:228:61 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:4:57:240:533 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:4:57:246:933 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:4:58:233:567 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:4:59:243:209 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:5:0:229:780 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:5:10:236:698 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:5:10:236:934 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..bdc4ba16 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:5:46:425:298 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:5:46:437:993 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:5:47:425:294 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:5:47:436:193 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:5:47:441:205 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:5:48:432:197 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:5:48:452:623 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:5:49:426:928 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:5:59:434:303 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:5:59:434:608 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..077280af --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:6:3:496:202 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:6:3:508:763 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:6:4:496:187 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:6:4:508:409 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:6:4:513:500 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:6:4:515:182 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:6:5:503:228 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:6:5:517:55 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-11 12:6:15:504:955 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:6:15:505:263 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..1765ae14 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:5:14:305:418 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 12:5:14:318:640 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:5:15:305:418 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:5:15:318:556 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:5:15:324:635 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:5:15:339:725 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 12:5:16:312:679 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:5:16:314:381 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-11 12:5:26:313:879 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:5:26:314:83 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..89e94c42 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: gp #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:5:30:353:821 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-11 12:5:30:367:362 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:5:31:353:824 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-11 12:5:31:370:157 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-11 12:5:31:377:972 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:5:31:391:314 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-11 12:5:32:361:188 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:5:32:362:847 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-11 12:5:42:362:165 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-11 12:5:42:362:403 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..068d6b3f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:3:30:726:490 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:3:30:739:182 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:3:31:726:439 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:3:31:738:858 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:3:31:745:429 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-11 12:3:32:733:733 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:3:33:749:919 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:3:34:738:708 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:3:44:735:457 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:3:44:740:726 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:3:44:740:922 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..7e34b375 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: gp #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:3:48:830:815 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:3:48:843:415 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:3:49:830:813 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:3:49:844:639 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:3:49:851:35 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:3:49:867:294 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:3:50:837:721 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:3:50:853:345 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-11 12:4:0:839:348 + Q10-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + + Q10 finished at: 2022-4-11 12:4:0:844:636 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:4:0:844:825 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..b3d91cb3 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:6:19:642:821 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:6:19:655:264 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:6:20:642:821 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:6:20:655:223 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-11 12:6:20:661:711 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:6:21:642:825 + Q7-T3 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-11 12:6:21:655:691 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-11 12:6:21:662:343 +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-11 12:6:22:651:951 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:6:22:666:507 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:6:23:654:9 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:6:24:670:71 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + *(6) expected_result: + (0,1) + + Q13 finished at: 2022-4-11 12:6:34:653:647 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + *(2) expected_result: + (1,1) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + + Q14 finished at: 2022-4-11 12:6:34:659:227 + Q15-T4 execute sql: 'SELECT * FROM t3 ORDER BY k;' + current_result: + (2,1) + *(1) expected_result: + (2,1) + *(2) expected_result: + (2,1) + *(3) expected_result: + (2,1) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + + Q15 finished at: 2022-4-11 12:6:34:664:774 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:6:34:665:79 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..1191b92c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-11 12:6:38:764:429 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-11 12:6:38:776:112 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-11 12:6:39:764:432 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-11 12:6:39:778:749 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-11 12:6:40:764:433 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-11 12:6:40:775:460 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 12:6:40:780:756 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-11 12:6:41:764:449 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-11 12:6:42:770:186 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-11 12:6:43:779:599 + Q9 finished at: 2022-4-11 12:6:43:788:755 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:6:44:781:985 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-11 12:6:45:766:228 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:6:55:766:260 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-11 12:6:55:771:942 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:6:55:773:574 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..2fcb3598 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,147 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:6:59:913:458 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:6:59:925:784 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:7:0:913:443 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:7:0:925:642 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 12:7:0:933:969 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:7:1:913:396 + Q7-T3 execute sql: 'DELETE FROM t3 WHERE k=2;' + Q7 finished at: 2022-4-11 12:7:1:925:559 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t2 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-11 12:7:1:934:241 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t3 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-11 12:7:2:924:242 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:7:2:938:953 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:7:3:931:162 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:7:4:925:437 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-11 12:7:14:921:228 + Q14-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-11 12:7:14:929:68 + Q15-T4 execute sql: 'SELECT * FROM t3;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-11 12:7:14:936:762 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-11 12:7:14:938:439 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..30aa0ee1 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: gp #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:7:18:975:868 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-11 12:7:18:990:249 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:7:19:975:845 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-11 12:7:19:985:822 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-11 12:7:19:993:703 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-11 12:7:20:975:845 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-11 12:7:20:987:55 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-11 12:7:20:994:909 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-11 12:7:21:988:753 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-11 12:7:22:9:565 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-11 12:7:22:988:679 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-11 12:7:23:991:163 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-11 12:7:33:984:524 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-11 12:7:33:986:270 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..0795ce32 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: gp #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:1:32:218:982 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:1:32:232:108 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:1:33:218:944 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:1:33:232:505 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 12:1:34:220:657 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:1:35:220:679 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-11 12:1:45:228:353 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:1:45:228:552 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..c0361c87 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:2:7:401:43 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:2:7:413:584 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:2:8:401:10 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:2:8:411:946 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-11 12:2:9:408:35 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:2:10:402:725 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:2:11:445:464 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 12:2:21:408:718 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:2:21:408:898 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..95f9c6da --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: gp #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:2:25:461:403 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:2:25:473:978 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:2:26:461:405 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-11 12:2:26:473:444 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:2:26:475:17 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-11 12:2:27:468:401 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:2:27:481:619 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-11 12:2:37:469:126 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:2:37:469:332 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..ea52e305 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:3:13:640:927 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:3:13:653:568 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:3:14:640:884 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 12:3:15:646:444 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 12:3:15:663:204 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14977); errcode: 40001 + Q4 failed at: 2022-4-11 12:3:16:73:779 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=14977); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..fb4d7acc --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:1:49:307:355 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:1:49:318:471 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:1:50:307:365 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:1:50:322:6 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-11 12:1:51:312:969 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:1:52:319:684 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:1:53:309:18 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-11 12:2:3:315:464 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:2:3:315:643 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..a1db5262 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:2:41:531:947 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 12:2:41:545:180 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:2:42:531:905 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-11 12:2:42:543:982 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:2:42:561:783 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 12:2:43:539:338 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:2:43:540:969 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-11 12:2:53:539:699 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:2:53:539:927 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..c0dc52ad --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: gp #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:2:57:577:870 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-11 12:2:57:591:165 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:2:58:577:848 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-11 12:2:58:592:408 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-11 12:2:58:607:338 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-11 12:2:59:585:376 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:2:59:586:984 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-11 12:3:9:585:471 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:3:9:585:663 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..682e8fba --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: gp #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:11:58:415:697 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:11:58:428:52 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:11:59:415:704 + Q4-T2 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-11 12:11:59:428:110 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-11 12:12:0:422:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:12:0:443:257 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q5 failed at: 2022-4-11 12:12:0:951:946 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..ff8b71bb --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:21:14:825:804 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:21:14:838:710 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:21:15:825:871 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:21:15:840:625 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:21:17:345:264 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:21:37:430:869 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4ea3d24e --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:22:17:554:901 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:22:17:567:537 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:22:18:554:778 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:22:18:569:288 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:22:20:74:185 +Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q6 failed at: 2022-4-11 14:22:40:159:610 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f4970452 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: gp #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 14:22:57:696:729 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 14:22:57:709:336 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 14:22:58:696:742 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 14:22:58:716:641 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET v=1 WHERE k=1;' + Q5 failed reason: ERROR: deadlock detected errcode: 40P01 + Q5 failed at: 2022-4-11 14:23:0:221:676 +Q7 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q7 failed at: 2022-4-11 14:23:20:401:658 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..889c8086 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:13:5:814:929 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:13:5:825:798 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:13:6:814:906 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:13:6:827:342 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:13:6:833:805 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-11 12:13:8:848:579 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); errcode: 40001 +Q6 failed at: 2022-4-11 12:13:9:455:223 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..4be37c54 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:13:22:883:667 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-11 12:13:22:894:686 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:13:23:883:653 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-11 12:13:23:896:137 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-11 12:13:23:902:589 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:13:25:899:821 +Q6 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); errcode: 40001 +Q6 failed at: 2022-4-11 12:13:26:506:921 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d9343406 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:13:40:947:387 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:13:40:959:690 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:13:41:947:393 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:13:41:958:354 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:13:42:954:179 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:13:42:968:258 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q5 failed at: 2022-4-11 12:13:43:474:986 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..3915c919 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:13:58:24:437 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:13:58:36:925 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:13:59:24:401 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:13:59:35:336 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-11 12:14:0:31:515 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:14:2:43:884 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q5 failed at: 2022-4-11 12:14:2:550:546 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..59bfdf1c --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: gp #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:14:16:91:17 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:14:16:103:308 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:14:17:91:5 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-11 12:14:17:101:925 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-11 12:14:18:97:643 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-11 12:14:18:125:63 + Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q5 failed at: 2022-4-11 12:14:18:631:592 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..19c01b13 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:22:34:300:123 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:22:34:314:172 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:22:35:300:252 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:22:35:319:757 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 10:22:36:300:147 + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:22:36:315:760 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:22:38:120:775 + Q5 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q5 failed at: 2022-4-18 10:22:55:824:997 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:22:58:205:2 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..2edb6fc0 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 10:23:13:219:398 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 10:23:13:233:50 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 10:23:14:219:413 + Q4-T2 execute sql: 'UPDATE t2 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 10:23:14:235:774 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 10:23:15:219:431 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t3 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 10:23:17:233:454 + Q8-T3 execute sql: 'UPDATE t2 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t3 SET v=1 WHERE k=2;' + Q8 failed reason: ERROR: deadlock detected errcode: 40P01 + Q8 failed at: 2022-4-18 10:23:19:38:590 + Q6 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 + Q6 failed at: 2022-4-18 10:23:36:824:434 +Q9 failed reason: ERROR: canceling statement due to lock timeout; errcode: 55P03 +Q9 failed at: 2022-4-18 10:23:39:124:442 + +Test Result: Rollback +Reason: ERROR: deadlock detected + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..89ef5fb6 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:9:59:920:531 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:9:59:933:361 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:10:0:920:565 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-11 12:10:1:922:233 + Q4 finished at: 2022-4-11 12:10:1:933:98 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:10:2:951:842 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-11 12:10:12:929:946 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-11 12:10:12:949:221 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-11 12:10:12:949:408 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..a26a17fd --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,30 @@ +#### db_type: gp #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:10:17:5:734 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:10:17:18:152 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:10:18:5:738 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-11 12:10:19:23:242 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q4 failed at: 2022-4-11 12:10:19:434:57 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..f9e2a27f --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt @@ -0,0 +1,32 @@ +#### db_type: gp #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:10:34:60:675 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:10:34:73:32 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:10:35:60:848 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-11 12:10:36:67:372 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-11 12:10:36:90:348 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q4 failed at: 2022-4-11 12:10:36:500:936 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..7a2c2404 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,32 @@ +#### db_type: gp #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:10:51:113:556 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:10:51:125:949 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:10:52:113:544 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-11 12:10:53:120:225 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:10:53:143:813 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q4 failed at: 2022-4-11 12:10:53:554:39 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..a79a2e68 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:11:42:303:393 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-11 12:11:42:315:789 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:11:43:303:391 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-11 12:11:44:308:581 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-11 12:11:44:352:983 + Q4 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); errcode: 40001 + Q4 failed at: 2022-4-11 12:11:44:763:409 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20625); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..dffec363 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:11:7:168:297 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:11:7:179:295 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:11:8:168:308 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:11:8:182:815 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-11 12:11:10:187:226 +Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); errcode: 40001 +Q5 failed at: 2022-4-11 12:11:10:693:851 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); + diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..e7c0de33 --- /dev/null +++ b/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: gp #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-11 12:11:24:227:728 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-11 12:11:24:238:715 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-11 12:11:25:227:726 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-11 12:11:25:240:299 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-11 12:11:27:247:511 +Q5 failed reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); errcode: 40001 +Q5 failed at: 2022-4-11 12:11:27:754:317 + +Test Result: Rollback +Reason: ERROR: could not serialize access due to concurrent update (seg1 9.135.218.12:6001 pid=20622); + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..2b6655c2 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:31:47:433:445 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:31:47:438:508 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:31:48:433:385 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 11:31:48:441:7 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:31:48:443:298 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:31:48:460:637 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 11:31:49:435:418 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:31:49:435:957 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:31:59:436:456 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:31:59:437:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..15734546 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:32:3:805:249 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:32:3:810:485 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:32:4:805:270 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 11:32:4:812:64 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:32:4:814:635 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:32:4:825:446 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 11:32:5:807:945 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:32:5:814:403 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:32:15:808:443 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:32:15:809:30 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..c9d92ed3 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:33:8:974:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:33:8:981:12 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:33:9:974:877 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 11:33:9:980:75 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:33:9:983:616 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 11:33:10:979:99 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 11:33:10:988:215 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 11:33:11:982:866 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:33:21:978:719 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 11:33:21:979:262 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..5cf44b50 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:32:20:98:502 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:32:20:104:732 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:32:21:98:420 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 11:32:21:103:922 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:32:21:108:170 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:32:21:124:759 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 11:32:22:102:631 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:32:22:113:373 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:32:32:101:674 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:32:32:102:274 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..144a6b0a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:32:36:435:46 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-14 11:32:36:437:527 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-14 11:32:36:438:412 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 11:32:37:435:9 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-14 11:32:37:436:215 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-14 11:32:37:436:995 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 11:32:37:448:442 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:32:38:439:48 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-14 11:32:48:436:622 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-14 11:32:48:437:548 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:32:48:438:61 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1ade2c38 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:32:52:687:707 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-14 11:32:52:690:69 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:32:53:687:690 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-14 11:32:53:689:271 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-14 11:32:53:691:413 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:32:53:694:784 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-14 11:32:54:688:714 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:32:54:693:154 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-14 11:33:4:689:368 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:33:4:690:60 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..d5bf4142 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:34:5:743:455 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 11:34:5:749:937 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:34:6:743:428 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 11:34:6:746:258 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:34:7:743:432 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 11:34:7:749:245 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-14 11:34:8:747:976 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 11:34:9:746:714 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-14 11:34:10:747:671 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 11:34:11:753:28 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:34:12:754:384 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:34:13:752:649 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 11:34:23:747:387 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:34:23:748:106 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..283ad294 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:43:6:125:278 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:43:6:131:496 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:43:7:125:252 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:43:7:131:692 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:43:7:139:350 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:43:8:125:253 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:43:8:129:748 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 10:43:8:131:909 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:43:8:138:892 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-14 10:43:9:128:71 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 10:43:9:128:757 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-14 10:43:19:130:549 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 10:43:19:131:270 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..cfe0d396 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:42:46:815:938 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:42:46:820:984 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:42:47:815:896 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:42:47:818:860 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:42:48:815:987 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-14 10:42:48:822:396 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:42:48:837:395 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 10:42:49:816:4 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 10:42:49:820:70 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:42:49:829:555 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-14 10:42:50:818:666 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:42:50:819:559 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-14 10:42:51:818:714 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-14 10:42:51:819:523 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 10:43:1:821:12 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 10:43:1:821:678 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..dd7bb1e4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:33:26:179:424 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-14 11:33:26:186:72 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:33:27:179:468 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 11:33:27:185:548 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:33:28:179:503 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 11:33:28:182:775 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-14 11:33:29:183:18 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-14 11:33:30:182:596 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-14 11:33:31:181:649 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 11:33:32:186:415 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:33:33:187:7 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:33:34:188:378 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 11:33:44:182:764 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:33:44:183:349 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..382d3225 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:42:7:201:691 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 10:42:7:207:368 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:42:8:201:724 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-14 10:42:8:204:609 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:42:9:201:819 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-14 10:42:9:210:42 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-14 10:42:10:208:231 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-14 10:42:11:202:749 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-14 10:42:12:204:316 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:42:13:205:613 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:42:14:205:768 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:42:15:205:876 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:42:25:207:228 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:42:25:207:874 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..44398432 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:33:48:430:472 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 11:33:48:437:725 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-14 11:33:48:440:461 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 11:33:49:430:440 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-14 11:33:49:433:828 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-14 11:33:49:438:581 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 11:33:49:547:64 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 11:33:50:430:442 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-14 11:33:50:434:892 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 11:33:50:437:274 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:33:50:437:916 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-14 11:33:51:433:649 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-14 11:33:51:443:572 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-14 11:34:1:434:541 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-14 11:34:1:435:118 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..55515336 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:42:29:508:291 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-14 10:42:29:515:260 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:42:30:508:323 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-14 10:42:30:513:102 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:42:30:517:596 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 10:42:30:520:579 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-14 10:42:30:523:696 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:42:30:533:741 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-14 10:42:31:508:391 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-14 10:42:31:511:353 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-14 10:42:31:515:708 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-14 10:42:31:517:939 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-14 10:42:31:520:524 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:42:31:531:458 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-14 10:42:32:510:521 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-14 10:42:32:511:165 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-14 10:42:42:511:738 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-14 10:42:42:512:527 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..d5e4b1d7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:34:27:899:295 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 11:34:27:905:350 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:34:28:899:337 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 11:34:28:905:362 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 11:34:28:924:12 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-14 11:34:29:903:681 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 11:34:29:911:73 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 11:34:39:902:893 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 11:34:39:903:445 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..da1237da --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:34:44:63:38 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:34:44:68:794 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:34:45:62:862 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 11:34:45:68:182 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 11:34:45:173:576 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 11:34:46:65:528 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 11:34:46:66:29 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 11:34:56:68:44 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 11:34:56:68:613 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:34:56:68:995 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..778acbbb --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:30:14:58:413 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:30:14:64:898 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:30:15:58:315 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:30:15:62:311 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:30:15:66:192 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:30:17:165:556 +Q6 finished at: 2022-4-14 10:30:17:171:703 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:30:18:72:703 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-14 10:30:28:62:279 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:30:28:62:889 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..fe38664d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:30:32:249:961 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:30:32:255:987 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:30:33:250:1 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:30:33:253:280 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:30:33:256:928 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:30:33:364:393 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-14 10:30:34:253:871 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:30:34:267:390 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-14 10:30:44:253:830 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:30:44:254:380 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1cf48ed0 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:30:48:485:632 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:30:48:491:904 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:30:49:485:628 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:30:49:489:56 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:30:50:489:181 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:30:50:593:385 + Q5 finished at: 2022-4-14 10:30:50:598:999 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:30:51:499:830 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:31:1:489:296 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:31:1:489:819 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..5679f94b --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:31:5:705:711 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:31:5:711:195 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:31:6:705:718 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:31:6:710:760 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:31:6:713:476 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:31:7:708:460 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:31:8:813:930 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:31:9:706:28 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:31:19:709:462 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:31:19:710:28 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..6271e266 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:31:56:400:427 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:31:56:407:37 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:31:57:400:395 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:31:57:405:797 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:31:57:407:801 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:31:58:403:400 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:31:58:510:832 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:31:59:401:9 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:32:9:405:886 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:32:9:406:388 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..7caf8379 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:32:13:671:50 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:32:13:677:928 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:32:14:670:992 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:32:14:676:727 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:32:14:678:453 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:32:14:679:17 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:32:15:674:579 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:32:15:683:976 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:32:25:674:30 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:32:25:674:588 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..f16fca14 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:31:23:869:524 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:31:23:874:152 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:31:24:869:596 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:31:24:875:153 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:31:24:877:57 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:31:24:891:509 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:31:25:871:493 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:31:25:872:81 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-14 10:31:35:872:645 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:31:35:873:266 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..93e441e7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:31:40:16:741 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:31:40:23:203 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:31:41:16:736 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-14 10:31:41:26:104 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-14 10:31:41:27:722 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:31:41:32:57 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:31:42:17:980 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:31:42:18:537 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-14 10:31:52:20:661 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:31:52:21:354 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..f398b05b --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:29:39:337:758 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:29:39:344:367 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:29:40:337:732 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:29:40:342:79 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:29:40:344:976 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:29:41:340:281 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:29:42:351:582 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:29:43:352:363 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:29:53:340:909 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:29:53:341:466 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..301d4227 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:29:57:695:947 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:29:57:702:138 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:29:58:695:872 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:29:58:703:800 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:29:58:707:946 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:29:58:745:399 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:29:59:699:257 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:29:59:710:920 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:30:9:700:368 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:30:9:701:100 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..7bcff099 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:32:29:948:789 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:32:29:956:314 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:32:30:948:763 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:32:30:952:368 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:32:30:955:823 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:32:31:948:779 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:32:31:952:576 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-14 10:32:31:955:75 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-14 10:32:32:951:717 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:32:32:961:281 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:32:33:969:470 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:32:34:963:903 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:32:44:954:10 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:32:44:954:575 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..8ff58f97 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-14 10:32:49:157:555 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-14 10:32:49:163:846 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-14 10:32:50:156:620 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-14 10:32:50:161:127 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:32:51:156:659 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-14 10:32:51:160:51 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:32:51:162:672 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 10:32:52:156:668 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 10:32:52:160:415 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 10:32:53:159:861 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 10:32:54:264:959 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:32:55:170:339 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 10:32:56:157:148 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:33:6:157:166 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 10:33:6:161:398 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 10:33:6:161:965 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..884c44ae --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:33:10:370:114 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:33:10:377:571 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:33:11:369:971 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:33:11:373:617 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:33:11:377:477 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:33:12:369:961 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:33:12:373:615 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-14 10:33:12:376:528 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:33:13:372:948 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:33:13:391:301 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:33:14:391:829 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:33:15:379:82 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 10:33:25:373:716 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:33:25:374:277 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..e9ce273f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:33:29:535:210 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-14 10:33:29:548:528 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:33:30:535:196 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-14 10:33:30:538:190 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:33:30:543:890 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:33:31:535:230 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-14 10:33:31:538:57 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-14 10:33:31:541:233 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:33:32:538:289 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:33:32:542:83 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:33:33:544:959 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:33:34:539:742 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:33:44:539:471 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:33:44:540:50 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..c8afeadb --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:27:39:17:980 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:27:39:28:610 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:27:40:17:984 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:27:40:23:64 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:27:41:18:397 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:27:42:18:200 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:27:52:21:597 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:27:52:22:150 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..51e24525 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:28:14:540:5 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:28:14:554:921 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:28:15:540:25 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:28:15:545:832 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-14 10:28:16:546:659 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:28:17:540:656 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:28:18:550:393 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:28:28:545:918 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:28:28:546:489 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..9d2ff7de --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:28:32:797:913 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:28:32:823:784 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:28:33:797:872 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:28:33:803:413 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:28:33:804:1 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-14 10:28:34:800:745 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:28:34:907:723 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:28:44:801:129 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:28:44:806:264 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..bf8c5194 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:29:21:931:897 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:29:21:937:351 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:29:22:931:873 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:29:23:934:940 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:29:23:943:428 + Q4 finished at: 2022-4-14 10:29:24:31:657 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:29:24:940:146 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:29:34:936:176 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:29:34:936:735 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..30d03184 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:27:56:255:321 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:27:56:261:238 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:27:57:255:385 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:27:57:285:670 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:27:58:258:173 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:27:59:270:489 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:28:0:255:646 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:28:10:260:422 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:28:10:260:968 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..29be8a09 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:28:49:181:838 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:28:49:187:659 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:28:50:181:802 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:28:50:200:173 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:28:50:315:301 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:28:51:183:520 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:28:51:184:85 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-14 10:29:1:186:297 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:29:1:186:846 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..c2891f6c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:29:5:550:946 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:29:5:554:874 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:29:6:550:877 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-14 10:29:6:560:979 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:29:6:564:843 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:29:7:551:689 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:29:7:552:259 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-14 10:29:17:557:357 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:29:17:558:37 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..d161c2b9 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:35:48:778:325 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:35:48:784:999 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:35:49:778:292 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:35:49:782:67 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:35:50:782:164 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:35:50:890:41 + Q5 finished at: 2022-4-14 10:35:50:895:895 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:35:50:904:574 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:36:0:783:676 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:36:0:784:293 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..8e3c54ff --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:36:4:986:402 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:36:4:993:480 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:36:5:986:393 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:36:5:992:192 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:36:16:436:930 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:36:17:575:666 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..8bbcb798 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:36:22:181:562 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:36:22:188:418 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:36:23:193:858 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:36:23:198:152 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:36:33:661:896 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:36:34:695:977 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..d84fc7e4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:36:40:502:201 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:36:40:507:211 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:36:41:514:635 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:36:41:520:752 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:36:51:943:81 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-14 10:36:53:111:702 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..3e6bd249 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:36:57:485:6 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:36:57:490:337 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:36:58:494:772 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:36:58:501:668 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:36:58:504:766 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:37:0:498:165 +Q6 finished at: 2022-4-14 10:37:0:532:784 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:37:0:543:309 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:37:10:490:979 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:37:10:491:750 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..82f268b8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:37:14:812:389 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:37:14:818:720 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:37:15:812:481 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:37:15:817:29 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:37:15:819:824 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:37:17:819:414 +Q6 finished at: 2022-4-14 10:37:17:839:770 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:37:18:830:626 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:37:28:817:940 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:37:28:818:619 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..5cfff1b1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:37:33:117:66 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:37:33:123:489 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:37:34:117:27 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:37:34:122:248 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:37:35:120:143 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:37:35:128:950 + Q5 finished at: 2022-4-14 10:37:35:134:861 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:37:36:127:23 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:37:46:119:981 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:37:46:120:674 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..5dde713d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:37:50:278:179 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:37:50:285:409 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:37:51:278:91 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:37:51:283:427 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:37:52:282:688 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:37:54:387:944 + Q5 finished at: 2022-4-14 10:37:54:397:423 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:37:54:408:434 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:38:4:282:866 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:38:4:283:639 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..c039a1a3 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:38:8:550:709 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:38:8:556:648 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:38:9:550:739 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:38:9:557:355 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:38:10:553:638 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:38:10:572:808 + Q5 finished at: 2022-4-14 10:38:10:588:233 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:38:10:597:313 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:38:20:553:704 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:38:20:554:389 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ebb440a2 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:38:24:854:516 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:38:24:859:676 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:38:25:854:476 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:38:25:862:202 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:38:26:854:552 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:38:26:858:658 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:38:36:335:324 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:38:37:639:543 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:38:38:667:912 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..88d22fa4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:38:44:148:906 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:38:44:155:253 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:38:45:157:537 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:38:45:161:271 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:38:46:156:761 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:38:48:152:647 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-14 10:38:57:654:743 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:38:58:861:706 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:38:59:961:54 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4690d0ab --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:33:48:694:580 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:33:48:701:99 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:33:49:694:571 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:33:50:695:175 + Q4 finished at: 2022-4-14 10:33:50:698:616 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:33:51:797:481 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-14 10:34:1:699:529 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-14 10:34:1:741:151 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:34:1:741:797 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..65c656d5 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:34:5:911:701 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:34:5:920:37 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:34:6:911:587 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-14 10:34:7:919:481 + Q4 finished at: 2022-4-14 10:34:7:925:303 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:34:8:925:269 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-14 10:34:18:917:268 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-14 10:34:18:953:336 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:34:18:954:11 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..734dcf42 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:34:23:91:262 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:34:23:98:222 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:34:24:91:150 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-14 10:34:25:94:108 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:34:25:199:546 + Q4 finished at: 2022-4-14 10:34:25:206:736 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:34:26:104:148 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-14 10:34:36:95:857 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:34:36:96:559 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..a16f6880 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:34:40:379:962 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:34:40:385:72 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:34:41:379:986 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-14 10:34:42:382:955 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:34:42:398:546 + Q4 finished at: 2022-4-14 10:34:42:419:650 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:34:42:428:212 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-14 10:34:52:383:660 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:34:52:384:295 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..3d6a4c60 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:35:32:477:454 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:35:32:482:938 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:35:33:477:410 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 10:35:34:480:682 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:35:34:489:392 + Q4 finished at: 2022-4-14 10:35:34:495:767 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:35:34:504:748 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:35:44:482:732 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:35:44:483:398 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..d6dbcf9c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:34:56:746:434 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:34:56:751:811 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:34:57:746:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:34:57:755:781 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:34:59:763:658 +Q5 finished at: 2022-4-14 10:34:59:775:632 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:34:59:785:773 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:35:9:751:56 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:35:9:751:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..436de6a9 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:35:14:92:706 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:35:14:98:359 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:35:15:92:637 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:35:15:100:881 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:35:17:101:488 +Q5 finished at: 2022-4-14 10:35:17:107:537 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:35:18:103:442 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:35:28:97:490 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:35:28:98:207 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..7c6649c1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:24:35:355:273 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:24:35:363:570 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:24:36:355:301 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 11:24:36:360:227 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:24:36:362:782 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:24:36:376:355 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 11:24:37:357:503 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:24:37:358:342 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:24:47:360:11 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:24:47:360:514 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..505f20c7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:24:51:565:493 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:24:51:572:432 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:24:52:565:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 11:24:52:571:850 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:24:52:574:84 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:24:52:582:485 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-14 11:24:54:269:526 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..91ea3dd8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:25:56:571:614 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:25:56:576:333 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:25:57:571:542 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 11:25:57:577:331 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:25:57:581:485 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 11:25:58:574:848 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 11:25:58:587:698 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 11:25:59:579:565 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:26:9:574:743 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 11:26:9:575:285 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..694f9afa --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:25:7:746:308 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:25:7:753:182 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:25:8:746:305 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 11:25:8:754:609 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:25:8:758:7 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:25:8:765:772 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 11:25:9:750:286 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:25:9:763:150 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 11:25:19:751:760 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:25:19:752:287 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..a4bc5976 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:25:23:949:761 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-14 11:25:23:952:530 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-14 11:25:23:953:421 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 11:25:24:949:742 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-14 11:25:24:951:555 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-14 11:25:24:952:354 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 11:25:24:955:839 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:25:25:953:460 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-14 11:25:35:951:86 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-14 11:25:35:952:387 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:25:35:952:828 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..6c25f37a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:25:40:207:250 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-14 11:25:40:209:831 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:25:41:207:243 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-14 11:25:41:208:623 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-14 11:25:41:210:656 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 11:25:41:213:863 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-14 11:25:42:208:332 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 11:25:42:211:976 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-14 11:25:52:208:986 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:25:52:209:593 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..19023c36 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:26:53:540:288 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 11:26:53:546:378 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:26:54:540:217 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 11:26:54:547:436 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:26:55:540:240 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 11:26:55:544:280 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-14 11:26:56:544:71 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 11:26:57:544:841 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-14 11:26:58:543:357 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 11:26:59:551:707 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:27:0:549:797 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:27:1:550:654 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 11:27:11:545:464 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:27:11:546:192 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..c596073d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:1:13:670:433 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:1:13:676:857 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:1:14:670:375 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 11:1:14:676:328 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 11:1:14:685:772 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 11:1:15:670:376 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 11:1:15:673:995 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 11:1:15:676:4 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 11:1:15:687:17 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-14 11:1:16:672:372 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 11:1:16:673:61 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-14 11:1:26:675:383 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 11:1:26:676:68 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..6b9e7ffd --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:0:54:398:39 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:0:54:405:587 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:0:55:398:16 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 11:0:55:403:306 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:0:56:398:26 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-14 11:0:56:402:280 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 11:0:56:426:87 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 11:0:57:398:99 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 11:0:57:401:424 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:0:57:419:108 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-14 11:0:58:400:766 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:0:58:401:533 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-14 11:0:59:400:577 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-14 11:0:59:401:272 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 11:1:9:402:27 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 11:1:9:402:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..d0b7fe87 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:26:13:938:803 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-14 11:26:13:945:415 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:26:14:938:802 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 11:26:14:943:119 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:26:15:938:899 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 11:26:15:942:287 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-14 11:26:16:942:475 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-14 11:26:17:942:538 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-14 11:26:18:941:299 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 11:26:19:948:4 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:26:20:947:941 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:26:21:948:872 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 11:26:31:942:914 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:26:31:943:571 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..99f7d779 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:0:14:797:828 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 11:0:14:804:876 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:0:15:797:809 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-14 11:0:15:802:903 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 11:0:16:797:813 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-14 11:0:16:803:715 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-14 11:0:17:805:452 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-14 11:0:18:799:342 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-14 11:0:19:799:581 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 11:0:20:801:485 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:0:21:802:645 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 11:0:22:802:840 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 11:0:32:803:901 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:0:32:804:701 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..75d2d317 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:26:36:258:202 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 11:26:36:264:40 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-14 11:26:36:266:421 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 11:26:37:258:212 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-14 11:26:37:261:254 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-14 11:26:37:266:156 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 11:26:37:374:305 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 11:26:38:258:208 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-14 11:26:38:262:978 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 11:26:38:265:536 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 11:26:38:266:73 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-14 11:26:39:260:927 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-14 11:26:39:269:313 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-14 11:26:49:261:464 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-14 11:26:49:262:770 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..790ce5ad --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:0:37:90:650 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-14 11:0:37:97:759 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:0:38:90:667 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-14 11:0:38:96:924 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 11:0:38:101:140 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 11:0:38:103:316 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-14 11:0:38:105:992 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 11:0:38:121:361 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-14 11:0:39:90:660 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-14 11:0:39:95:501 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-14 11:0:39:99:610 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-14 11:0:39:101:895 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-14 11:0:39:104:686 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 11:0:39:115:914 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-14 11:0:40:92:940 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-14 11:0:40:93:662 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-14 11:0:50:96:0 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-14 11:0:50:96:685 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..d82031b8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:27:15:895:82 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 11:27:15:900:618 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:27:16:895:149 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 11:27:16:902:239 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 11:27:16:912:936 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-14 11:27:18:500:404 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..98a31923 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 11:27:32:154:719 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 11:27:32:160:549 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 11:27:33:154:646 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 11:27:33:162:479 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 11:27:33:175:1 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 11:27:34:156:909 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 11:27:34:157:632 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 11:27:44:158:954 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 11:27:44:159:565 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 11:27:44:160:39 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..0742d82c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:48:22:76:678 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:48:22:82:753 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:48:23:76:673 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:48:23:80:1 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:48:23:82:812 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:48:25:184:14 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:48:25:791:635 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..14f31f58 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:48:40:274:13 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:48:40:280:482 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:48:41:273:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:48:41:277:482 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:48:41:280:733 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:48:41:387:512 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-14 10:48:42:977:756 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..13a37e8d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:48:56:510:874 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:48:56:517:143 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:48:57:510:856 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:48:57:514:437 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:48:58:514:289 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:48:58:620:64 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:48:59:130:492 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..a4d6ac13 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:49:13:705:619 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:49:13:712:447 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:49:14:716:872 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:49:14:720:580 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:49:14:724:277 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:49:15:707:556 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:49:16:813:270 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:49:17:706:161 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:49:27:710:978 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:49:27:711:582 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ac3e1bfa --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:50:4:645:678 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:50:4:651:73 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:50:5:645:624 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:50:5:651:724 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:50:5:653:663 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:50:6:648:641 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:50:6:659:351 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:50:7:646:276 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:50:17:648:837 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:50:17:649:459 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..20e8af10 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:50:21:947:6 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:50:21:955:97 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:50:22:946:976 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:50:22:951:389 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:50:22:953:395 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:50:22:953:920 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:50:23:949:614 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:50:23:959:902 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:50:33:953:225 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:50:33:953:990 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..a74c00b7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:49:31:898:685 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:49:31:903:154 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:49:32:898:679 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:49:32:905:192 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:49:32:907:250 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:49:33:16:844 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:49:33:899:672 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:49:33:900:211 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-14 10:49:43:901:702 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:49:43:902:307 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..00685dcd --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:49:48:243:717 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:49:48:247:65 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:49:49:243:708 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-14 10:49:49:250:372 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-14 10:49:49:251:537 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:49:49:259:277 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:49:50:244:555 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:49:50:245:129 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-14 10:50:0:249:965 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:50:0:250:540 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..6f9916cd --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:47:47:498:17 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:47:47:504:870 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:47:48:499:83 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:47:48:501:766 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:47:48:505:464 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:47:49:500:163 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:47:50:507:506 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:47:51:512:78 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:48:1:504:241 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:48:1:504:844 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c0a8a75f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:48:5:783:982 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:48:5:789:470 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:48:6:784:32 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:48:6:791:569 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:48:6:794:598 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:48:6:806:956 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:48:7:787:336 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:48:7:794:778 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:48:17:787:820 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:48:17:788:326 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..480a7305 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:50:38:111:991 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:50:38:118:806 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:50:39:112:14 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:50:39:115:191 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:50:39:118:75 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:50:40:112:39 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:50:40:115:485 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-14 10:50:40:117:607 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-14 10:50:41:114:672 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:50:41:124:301 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:50:42:123:451 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:50:43:127:533 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:50:53:118:454 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:50:53:119:28 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..23a7b400 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-14 10:50:57:461:490 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-14 10:50:57:468:994 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-14 10:50:58:461:377 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-14 10:50:58:465:704 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:50:59:461:459 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-14 10:50:59:468:267 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:50:59:470:550 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 10:51:0:461:581 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 10:51:0:464:947 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 10:51:1:464:350 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 10:51:2:473:316 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:51:3:468:315 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 10:51:4:461:924 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:51:14:462:288 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 10:51:14:465:938 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 10:51:14:466:556 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..592f8625 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:51:18:819:408 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:51:18:826:69 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:51:19:819:431 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:51:19:825:4 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:51:19:827:874 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:51:20:819:435 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:51:20:823:205 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-14 10:51:20:825:451 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:51:21:823:472 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:51:21:833:236 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:51:22:832:87 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:51:23:827:342 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 10:51:33:823:492 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:51:33:824:120 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9299cd15 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:51:38:160:3 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-14 10:51:38:171:128 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:51:39:160:25 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-14 10:51:39:161:912 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:51:39:167:128 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:51:40:160:33 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-14 10:51:40:161:923 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-14 10:51:40:164:620 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:51:41:162:545 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:51:41:167:526 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:51:42:164:713 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:51:43:163:354 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:51:53:164:347 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:51:53:164:964 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..73dbf961 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:45:47:879:468 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:45:47:885:500 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:45:48:879:482 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:45:48:885:346 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:45:49:879:957 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:45:50:879:943 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:46:0:884:588 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:46:0:885:242 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..7253e628 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:46:23:365:427 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:46:23:370:831 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:46:24:365:432 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:46:24:369:466 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-14 10:46:25:368:757 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:46:26:365:942 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:46:27:473:380 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:46:37:370:459 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:46:37:370:963 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..e6a8eed6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:46:41:681:918 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:46:41:688:96 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:46:42:681:882 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:46:42:686:521 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:46:42:687:263 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-14 10:46:43:685:155 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:46:43:794:409 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:46:53:685:415 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:46:53:685:911 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..4664cd50 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:47:30:311:800 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:47:30:319:787 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:47:31:311:705 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:47:32:314:926 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:47:32:325:752 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-14 10:47:32:755:334 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..a7aa92a1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:46:5:72:341 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:46:5:79:204 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:46:6:72:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:46:6:80:290 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:46:7:74:572 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:46:8:83:324 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:46:9:72:666 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:46:19:77:308 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:46:19:77:777 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..5357f45e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:46:57:912:682 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:46:57:915:664 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:46:58:912:641 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:46:58:919:94 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:46:59:23:910 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:46:59:913:544 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:46:59:914:83 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-14 10:47:9:917:535 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:47:9:918:128 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..e8fe235a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:47:14:96:284 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:47:14:101:156 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:47:15:96:231 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-14 10:47:15:105:864 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:47:15:111:147 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:47:16:97:525 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:47:16:98:13 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-14 10:47:26:102:131 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:47:26:102:720 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..cd04ad50 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:53:56:650:574 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:53:56:657:301 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:53:57:651:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:53:57:654:397 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:53:58:654:186 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:53:58:662:704 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:53:59:172:403 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..f7b14559 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:54:12:993:382 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:54:12:999:90 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:54:14:3:426 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:54:14:6:956 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:54:24:417:399 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:54:25:505:956 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..219b1596 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:54:30:469:829 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:54:30:474:557 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:54:31:480:926 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:54:31:484:310 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:54:41:896:316 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:54:42:975:719 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..45ad4d0f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:54:48:944:60 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:54:48:949:358 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:54:49:954:53 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:54:49:957:344 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:55:0:442:210 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-14 10:55:1:551:833 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..07b57935 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:55:5:926:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:55:5:933:316 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:55:6:937:377 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:55:6:942:383 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:55:6:946:393 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:55:8:945:752 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:55:9:663:460 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..dca4efcc --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:55:23:156:738 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:55:23:162:534 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:55:24:156:650 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:55:24:161:308 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:55:24:163:851 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:55:26:264:445 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:55:26:976:616 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..7fe83bbf --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:55:41:512:617 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:55:41:519:899 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:55:42:512:734 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:55:42:520:762 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:55:43:515:445 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:55:43:526:727 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:55:44:40:667 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..be57183c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:55:58:769:708 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:55:58:775:842 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:55:59:771:26 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:55:59:774:492 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:56:0:772:138 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:56:2:876:195 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:56:3:384:335 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..c83ca4b6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:56:17:38:304 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:56:17:44:407 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:56:18:39:508 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:56:18:42:940 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:56:19:40:898 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:56:19:148:6 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:56:19:654:139 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..96c65511 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:56:33:281:33 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:56:33:287:945 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:56:34:284:419 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:56:34:287:835 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:56:35:280:914 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:56:35:286:961 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:56:44:697:216 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:56:45:994:228 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:56:47:91:842 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..a354afbd --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:56:52:558:533 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:56:52:565:686 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:56:53:566:806 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:56:53:570:81 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:56:54:574:146 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:56:56:561:369 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-14 10:57:6:113:89 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:57:7:341:110 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:57:8:371:128 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e3d9479a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:51:57:384:215 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:51:57:391:542 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:51:58:384:95 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:51:59:384:644 + Q4 finished at: 2022-4-14 10:51:59:387:111 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:52:0:398:563 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-14 10:52:10:389:229 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-14 10:52:10:443:370 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:52:10:443:986 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..fe007af6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:52:14:601:731 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:52:14:609:732 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:52:15:601:702 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-14 10:52:16:610:272 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-14 10:52:17:67:479 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..7fac5a6c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:52:31:789:392 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:52:31:797:713 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:52:32:790:374 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-14 10:52:33:791:918 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:52:33:811:285 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-14 10:52:34:216:520 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..34417e34 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:52:48:943:853 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:52:48:951:538 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:52:49:944:672 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-14 10:52:50:946:968 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:52:50:995:798 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-14 10:52:51:414:694 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..2065638d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:53:40:488:464 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:53:40:495:892 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:53:41:488:543 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 10:53:42:491:853 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:53:42:502:222 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-14 10:53:42:916:568 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..03c7ff8f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:53:5:142:955 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:53:5:149:893 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:53:6:143:626 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:53:6:148:504 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:53:8:161:803 +Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-14 10:53:8:677:869 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..49bbdbf5 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:53:22:328:502 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:53:22:335:881 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:53:23:328:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:53:23:335:106 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:53:25:335:826 +Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-14 10:53:25:843:800 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..b499ad8b --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:0:45:818:968 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:0:45:821:136 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:0:46:818:997 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 12:0:46:821:290 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:0:46:822:27 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:0:46:827:980 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 12:0:47:819:534 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:0:47:819:958 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:0:57:820:432 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:0:57:820:878 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..58c661af --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:1:2:47:849 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:1:2:50:541 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:1:3:47:913 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 12:1:3:50:881 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:1:3:51:848 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:1:3:54:975 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 12:1:4:48:928 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:1:4:52:311 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:1:14:49:645 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:1:14:50:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..2833dc4e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:1:18:383:332 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:1:18:385:686 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:1:19:383:115 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:1:19:384:258 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:1:19:386:145 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 12:1:20:383:758 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 12:1:20:387:827 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:1:21:386:613 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:1:31:384:532 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:1:31:385:110 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..fcf0c407 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:2:8:77:812 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:2:8:80:597 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:2:9:77:736 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:2:9:79:90 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:2:9:80:990 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:2:9:88:334 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 12:2:10:78:665 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:2:10:81:562 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:2:20:79:379 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:2:20:79:922 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..1ca25a5f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:1:35:584:279 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-14 12:1:35:586:898 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-14 12:1:35:587:876 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 12:1:36:584:183 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-14 12:1:36:585:703 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-14 12:1:36:586:576 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:1:36:595:624 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:1:37:588:511 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-14 12:1:47:585:94 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-14 12:1:47:585:889 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:1:47:586:450 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..7ccbf800 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:1:51:915:197 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-14 12:1:51:917:632 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:1:52:915:285 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-14 12:1:52:916:720 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-14 12:1:52:919:47 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:1:52:923:13 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-14 12:1:53:916:240 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:1:53:925:849 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-14 12:2:3:916:984 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:2:3:917:561 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..e65dede1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:2:24:402:635 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 12:2:24:405:25 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:2:25:402:601 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 12:2:25:404:556 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:2:26:402:630 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:2:26:403:740 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-14 12:2:27:404:425 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:2:28:403:448 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-14 12:2:29:403:488 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:2:30:411:831 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:2:31:411:913 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:2:32:412:168 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 12:2:42:404:771 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:2:42:405:328 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..48a74437 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:4:7:523:824 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:4:7:526:396 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:4:8:523:748 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 12:4:8:526:68 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:4:8:529:279 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 12:4:9:524:4 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 12:4:9:525:577 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:4:9:526:417 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 12:4:9:529:69 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-14 12:4:10:524:788 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 12:4:10:525:471 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-14 12:4:20:525:485 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 12:4:20:526:109 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c85582c1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:3:48:379:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:3:48:382:263 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:3:49:379:709 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:3:49:381:121 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:3:50:379:736 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-14 12:3:50:382:61 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:3:50:386:762 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 12:3:51:379:823 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 12:3:51:381:257 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:3:51:384:788 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-14 12:3:52:380:707 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:3:52:381:295 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-14 12:3:53:380:728 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-14 12:3:53:381:222 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 12:4:3:382:705 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 12:4:3:383:255 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..f8fe2cdf --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:2:46:566:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-14 12:2:46:569:96 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:2:47:566:687 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 12:2:47:568:340 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:2:48:566:727 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:2:48:568:456 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-14 12:2:49:568:573 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:2:50:567:697 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-14 12:2:51:567:650 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:2:52:569:933 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:2:53:569:939 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:2:54:570:3 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 12:3:4:570:531 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:3:4:571:167 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..91eb9732 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:3:8:804:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 12:3:8:810:675 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:3:9:804:512 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-14 12:3:9:806:972 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:3:10:804:534 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-14 12:3:10:805:689 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-14 12:3:11:807:321 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-14 12:3:12:806:257 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-14 12:3:13:805:473 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:3:14:808:882 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:3:15:809:862 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:3:16:819:686 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 12:3:26:806:341 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:3:26:806:862 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..dbc1d04c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:4:24:878:994 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 12:4:24:881:389 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-14 12:4:24:883:307 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 12:4:25:878:914 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-14 12:4:25:880:337 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-14 12:4:25:882:153 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:4:25:886:766 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 12:4:26:878:917 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-14 12:4:26:880:212 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 12:4:26:880:967 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:4:26:881:495 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-14 12:4:27:879:644 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-14 12:4:27:886:689 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-14 12:4:37:880:489 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-14 12:4:37:881:76 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..6e462aa6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:3:31:58:664 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-14 12:3:31:61:53 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:3:32:58:674 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-14 12:3:32:60:221 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:3:32:62:28 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:3:32:63:138 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-14 12:3:32:64:132 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:3:32:67:124 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-14 12:3:33:58:772 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-14 12:3:33:60:531 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-14 12:3:33:61:600 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-14 12:3:33:62:480 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-14 12:3:33:63:230 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:3:33:77:843 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-14 12:3:34:59:742 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-14 12:3:34:60:341 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-14 12:3:44:60:628 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-14 12:3:44:61:245 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..ae1be79b --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:0:29:567:143 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 12:0:29:571:861 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:0:30:567:126 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 12:0:30:569:976 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:0:30:573:260 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-14 12:0:31:570:61 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 12:0:31:576:836 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 12:0:41:568:733 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 12:0:41:569:292 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..7a79c139 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:0:13:442:806 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:0:13:445:167 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:0:14:442:708 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 12:0:14:445:733 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:0:14:449:506 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 12:0:15:443:359 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 12:0:15:443:793 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 12:0:25:448:233 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 12:0:25:448:818 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:0:25:449:346 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..ea0c05c7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:9:53:952:670 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:9:53:955:330 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:9:54:952:660 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:9:54:954:76 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:9:54:955:995 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:9:56:960:488 +Q6 finished at: 2022-4-14 10:9:56:960:792 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:9:57:956:494 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-14 10:10:7:954:61 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:10:7:954:538 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..23c4a84f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:10:12:103:666 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:10:12:106:459 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:10:13:103:665 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:10:13:106:122 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:10:13:107:863 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:10:13:113:9 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-14 10:10:14:104:939 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:10:14:113:453 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-14 10:10:24:105:730 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:10:24:106:339 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..92917f1c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:10:28:417:896 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:10:28:420:490 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:10:29:417:807 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:10:29:419:187 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:10:30:419:424 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:10:30:427:120 + Q5 finished at: 2022-4-14 10:10:30:427:452 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:10:31:423:928 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:10:41:419:223 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:10:41:419:678 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..905c4a5a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:10:45:547:624 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:10:45:550:439 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:10:46:547:561 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:10:46:550:232 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:10:46:551:79 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:10:47:548:626 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:10:48:553:989 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:10:49:548:26 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:10:59:549:313 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:10:59:549:868 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..2ffcf684 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:11:36:253:604 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:11:36:255:846 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:11:37:253:545 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:11:37:255:782 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:11:37:256:548 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:11:38:254:316 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:11:38:259:412 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:11:39:253:890 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:11:49:255:153 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:11:49:255:711 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..5bbaf0fe --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:11:53:410:752 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:11:53:413:592 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:11:54:410:768 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:11:54:413:239 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:11:54:414:94 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:11:54:414:652 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:11:55:411:662 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:11:55:414:977 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:12:5:412:598 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:12:5:413:229 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..1e5dc081 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:11:3:905:828 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:11:3:908:319 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:11:4:905:752 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:11:4:907:877 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:11:4:908:663 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:11:4:912:279 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:11:5:906:375 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:11:5:906:850 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-14 10:11:15:907:288 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:11:15:907:799 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..0df868fc --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:11:20:27:827 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-14 10:11:20:34:790 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:11:21:27:810 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-14 10:11:21:31:762 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-14 10:11:21:33:423 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:11:21:38:270 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-14 10:11:22:37:502 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:11:22:39:314 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-14 10:11:32:29:645 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:11:32:30:466 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..269ae57c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:9:19:396:903 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:9:19:399:361 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:9:20:396:853 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:9:20:398:115 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:9:20:399:828 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-14 10:9:21:397:646 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:9:22:403:177 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:9:23:404:126 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:9:33:398:760 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:9:33:399:408 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..53bd3fa5 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:9:37:598:976 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:9:37:602:69 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:9:38:598:913 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:9:38:600:818 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:9:38:602:579 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:9:38:608:905 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:9:39:599:861 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:9:39:603:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:9:49:600:678 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:9:49:601:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..ecca012a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:12:9:737:701 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:12:9:740:150 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:12:10:737:682 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:12:10:739:259 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-14 10:12:10:741:492 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:12:11:737:665 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:12:11:739:23 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-14 10:12:11:739:945 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-14 10:12:12:738:706 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:12:12:741:932 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:12:13:740:227 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:12:14:743:88 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:12:24:739:734 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:12:24:740:447 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..70970148 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-14 10:12:29:51:440 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-14 10:12:29:54:759 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-14 10:12:30:51:377 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-14 10:12:30:53:893 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:12:31:51:466 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-14 10:12:31:52:981 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:12:31:53:828 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 10:12:32:51:434 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 10:12:32:52:748 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 10:12:33:52:441 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 10:12:34:55:150 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:12:35:55:135 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 10:12:36:51:785 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:12:46:51:920 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 10:12:46:53:917 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 10:12:46:54:424 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..14a4ab80 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:12:50:182:876 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:12:50:185:254 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:12:51:182:903 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:12:51:184:457 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:12:51:186:552 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:12:52:182:898 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-14 10:12:52:184:417 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-14 10:12:52:185:406 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:12:53:183:758 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:12:53:192:831 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:12:54:187:594 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:12:55:185:956 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 10:13:5:184:856 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:13:5:185:589 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..5f5ea642 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:13:9:506:514 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-14 10:13:9:512:281 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:13:10:506:555 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-14 10:13:10:508:704 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-14 10:13:10:512:508 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:13:11:506:535 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-14 10:13:11:507:744 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-14 10:13:11:508:638 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-14 10:13:12:508:333 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 10:13:12:516:31 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 10:13:13:510:911 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 10:13:14:510:459 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 10:13:24:508:255 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 10:13:24:508:864 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..8ab47568 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:7:19:703:736 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:7:19:706:389 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:7:20:703:580 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:7:20:707:753 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:7:21:704:115 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:7:22:704:127 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 10:7:32:705:314 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:7:32:705:896 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..4fb9bca2 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:7:55:277:319 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:7:55:282:697 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:7:56:277:307 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:7:56:279:734 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-14 10:7:57:279:662 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:7:58:277:786 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:7:59:281:423 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:8:9:278:690 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:8:9:279:260 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..6fd0012e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:8:13:516:43 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:8:13:520:780 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:8:14:516:59 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 10:8:14:518:421 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:8:14:518:937 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-14 10:8:15:517:623 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:8:15:522:9 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-14 10:8:25:517:538 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:8:25:517:990 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..b6525bb3 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:9:2:135:424 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:9:2:140:234 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:9:3:135:574 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:9:4:139:706 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:9:4:144:618 + Q4 finished at: 2022-4-14 10:9:4:147:626 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:9:5:138:655 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:9:15:137:645 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:9:15:138:358 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..9a1b60fe --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:7:37:36:823 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:7:37:40:869 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:7:38:36:807 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:7:38:39:160 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-14 10:7:39:38:185 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:7:40:44:618 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:7:41:37:283 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:7:51:39:473 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:7:51:39:979 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..aceae760 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:8:29:795:219 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:8:29:800:39 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:8:30:795:159 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-14 10:8:30:797:795 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:8:30:803:286 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:8:31:802:31 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:8:31:802:638 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-14 10:8:41:796:868 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:8:41:797:465 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..2f8c2821 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:8:45:898:5 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 10:8:45:905:452 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:8:46:897:945 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-14 10:8:46:901:794 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:8:46:906:162 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-14 10:8:47:899:582 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:8:47:900:241 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-14 10:8:57:899:391 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:8:57:899:869 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..e48ca825 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:15:28:452:50 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:15:28:454:378 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:15:29:452:63 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 10:15:29:453:323 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 10:15:30:453:704 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:15:30:457:826 + Q5 finished at: 2022-4-14 10:15:30:458:113 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:15:30:461:317 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:15:40:453:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:15:40:454:145 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..6ab8f703 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:15:44:597:575 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:15:44:600:559 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:15:45:597:560 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:15:45:599:225 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:15:56:4:804 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:15:57:101:529 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..716a64ba --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:16:1:933:979 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:16:1:936:454 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:16:2:936:688 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:16:2:939:218 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:16:13:410:796 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-14 10:16:14:444:91 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..24160c50 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:16:20:58:626 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:16:20:61:312 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:16:21:63:164 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:16:21:64:258 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:16:31:467:726 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-14 10:16:32:664:829 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..09425f00 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:16:37:15:0 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:16:37:17:452 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:16:38:17:885 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:16:38:21:835 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:16:38:23:590 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:16:40:19:897 +Q6 finished at: 2022-4-14 10:16:40:23:628 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:16:40:27:789 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:16:50:16:490 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:16:50:17:45 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c1e1e7a9 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:16:54:158:939 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 10:16:54:161:755 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:16:55:158:906 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:16:55:161:412 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 10:16:55:162:283 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:16:57:162:46 +Q6 finished at: 2022-4-14 10:16:57:162:410 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:16:58:176:252 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:17:8:160:627 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:17:8:161:376 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..0140c1b9 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:17:12:504:32 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:17:12:506:595 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:17:13:503:984 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:17:13:506:43 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:17:14:504:788 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:17:14:514:878 + Q5 finished at: 2022-4-14 10:17:14:515:112 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 10:17:15:508:69 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:17:25:505:749 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:17:25:506:321 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..ebfed6c7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:17:29:674:914 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:17:29:677:684 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:17:30:674:942 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:17:30:677:383 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 10:17:31:675:648 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:17:33:679:148 + Q5 finished at: 2022-4-14 10:17:33:679:462 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:17:33:682:49 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:17:43:676:555 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:17:43:677:189 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..0983dce7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:17:48:16:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:17:48:18:603 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:17:49:16:145 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 10:17:49:18:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 10:17:50:17:16 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 10:17:50:22:490 + Q5 finished at: 2022-4-14 10:17:50:22:758 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:17:50:33:219 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 10:18:0:17:787 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 10:18:0:18:474 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..afa406cb --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:18:4:213:61 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:18:4:215:483 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:18:5:213:103 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:18:5:214:494 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 10:18:6:213:125 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:18:6:214:829 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-14 10:18:15:619:842 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:18:16:920:867 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:18:18:20:416 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..d00c82d6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:18:23:545:147 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:18:23:547:509 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:18:24:557:647 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 10:18:24:562:599 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 10:18:25:564:123 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-14 10:18:27:547:2 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-14 10:18:37:49:857 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-14 10:18:38:294:503 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-14 10:18:39:346:741 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e64ae3a0 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:13:28:736:745 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:13:28:741:802 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:13:29:736:665 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-14 10:13:30:737:190 + Q4 finished at: 2022-4-14 10:13:30:737:907 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:13:31:739:877 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-14 10:13:41:738:513 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-14 10:13:41:768:14 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:13:41:869:56 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..a379737d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:13:46:54:415 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:13:46:58:848 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:13:47:54:340 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-14 10:13:48:58:738 + Q4 finished at: 2022-4-14 10:13:48:61:750 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:13:49:58:753 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-14 10:13:59:56:90 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-14 10:13:59:95:322 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:13:59:95:954 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..a7e5c558 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:14:3:277:292 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:14:3:282:633 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:14:4:277:340 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-14 10:14:5:279:694 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:14:5:284:167 + Q4 finished at: 2022-4-14 10:14:5:287:335 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:14:6:281:55 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-14 10:14:16:279:446 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:14:16:280:172 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..6912bb32 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:14:20:517:834 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:14:20:522:209 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:14:21:517:822 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-14 10:14:22:519:327 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:14:22:530:583 + Q4 finished at: 2022-4-14 10:14:22:536:99 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:14:22:546:739 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-14 10:14:32:519:259 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:14:32:519:844 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..3d3c4c52 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:15:12:216:23 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-14 10:15:12:220:987 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:15:13:216:77 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 10:15:14:219:978 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:15:14:223:920 + Q4 finished at: 2022-4-14 10:15:14:225:965 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 10:15:14:228:442 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:15:24:217:755 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:15:24:218:396 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..828f2e63 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:14:36:748:857 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:14:36:753:730 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:14:37:748:977 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:14:37:751:787 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 10:14:39:753:48 +Q5 finished at: 2022-4-14 10:14:39:817:85 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-14 10:14:39:820:945 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:14:49:750:811 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:14:49:751:445 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..5dfa7034 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 10:14:53:980:8 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 10:14:53:984:249 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 10:14:54:980:22 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 10:14:54:982:782 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 10:14:56:984:626 +Q5 finished at: 2022-4-14 10:14:57:57:467 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 10:14:57:988:210 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 10:15:7:981:564 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 10:15:7:982:124 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..e78d00e0 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:50:31:782:889 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:50:31:785:404 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:50:32:782:904 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-14 12:50:32:785:655 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:50:32:786:594 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:50:32:789:888 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-14 12:50:33:783:735 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:50:33:784:258 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:50:43:784:465 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:50:43:785:42 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..d6cfa159 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:50:48:79:476 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:50:48:82:485 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:50:49:79:449 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-14 12:50:49:82:334 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:50:49:83:164 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:50:49:89:237 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-14 12:50:50:780:659 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..f05c386d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:51:4:219:633 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:51:4:222:260 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:51:5:219:578 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:51:5:221:12 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:51:5:222:959 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-14 12:51:6:220:571 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 12:51:6:223:693 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:51:7:225:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:51:17:221:223 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:51:17:221:763 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..6349bf11 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:51:54:108:208 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:51:54:111:12 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:51:55:108:224 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:51:55:109:975 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:51:55:111:826 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:51:55:115:674 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-14 12:51:56:109:18 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:51:56:113:34 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-14 12:52:6:110:245 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:52:6:110:840 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..d855eb0a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,71 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:51:21:601:166 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-14 12:51:21:604:18 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-14 12:51:21:604:837 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 12:51:22:601:77 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-14 12:51:22:602:935 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-14 12:51:22:603:796 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:51:22:608:760 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:51:23:605:502 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-14 12:51:33:603:271 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-14 12:51:33:604:902 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:51:33:605:389 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..a7df94e2 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:51:37:765:292 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-14 12:51:37:767:935 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:51:38:765:303 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-14 12:51:38:766:844 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-14 12:51:38:768:929 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-14 12:51:38:772:255 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-14 12:51:39:766:377 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-14 12:51:39:769:320 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-14 12:51:49:766:832 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:51:49:767:393 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..e54f105c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:52:10:264:316 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 12:52:10:266:563 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:52:11:264:305 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 12:52:11:265:855 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:52:12:264:359 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:52:12:265:787 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-14 12:52:13:266:253 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:52:14:265:371 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-14 12:52:15:265:476 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:52:16:271:9 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:52:17:267:619 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:52:18:269:303 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 12:52:28:266:410 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:52:28:267:109 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..42ac2cad --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:53:53:442:707 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:53:53:445:546 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:53:54:442:681 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 12:53:54:445:441 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:53:54:450:720 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-14 12:53:55:442:721 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-14 12:53:55:444:515 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:53:55:445:375 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 12:53:55:453:721 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-14 12:53:56:443:504 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-14 12:53:56:443:980 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-14 12:54:6:445:10 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-14 12:54:6:445:546 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..d4130e38 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:53:34:105:103 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:53:34:108:400 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:53:35:104:995 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-14 12:53:35:106:767 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:53:36:105:14 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-14 12:53:36:107:496 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:53:36:111:262 + Q8-T4 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 12:53:37:105:4 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-14 12:53:37:106:521 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:53:37:109:636 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-14 12:53:38:105:941 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:53:38:106:516 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-14 12:53:39:106:172 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-14 12:53:39:106:748 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-14 12:53:49:108:579 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-14 12:53:49:109:210 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..55acd404 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:52:32:587:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-14 12:52:32:590:926 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:52:33:587:809 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-14 12:52:33:589:614 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:52:34:587:926 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:52:34:591:513 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-14 12:52:35:589:620 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-14 12:52:36:588:465 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-14 12:52:37:588:542 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:52:38:591:548 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:52:39:591:689 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:52:40:591:497 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-14 12:52:50:590:826 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:52:50:591:344 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..6bcacca5 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:52:54:711:136 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-14 12:52:54:717:557 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:52:55:711:157 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-14 12:52:55:713:785 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-14 12:52:56:711:189 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-14 12:52:56:712:711 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-14 12:52:57:714:158 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-14 12:52:58:712:550 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-14 12:52:59:712:231 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-14 12:53:0:716:813 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:53:1:717:69 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-14 12:53:2:714:941 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-14 12:53:12:713:418 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:53:12:714:127 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..ff9a25fa --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:54:10:654:276 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-14 12:54:10:656:768 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-14 12:54:10:657:677 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-4-14 12:54:11:654:407 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-14 12:54:11:656:107 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-14 12:54:11:658:114 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-14 12:54:11:661:216 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-14 12:54:12:654:395 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-14 12:54:12:656:78 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-14 12:54:12:656:972 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-14 12:54:12:657:605 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-14 12:54:13:655:336 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-14 12:54:13:660:443 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-14 12:54:23:656:154 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-14 12:54:23:656:872 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..7381bf31 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:53:16:950:831 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-14 12:53:16:953:649 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:53:17:950:910 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-14 12:53:17:952:976 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-14 12:53:17:955:73 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-14 12:53:17:956:25 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-14 12:53:17:956:832 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-14 12:53:17:960:482 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-4-14 12:53:18:950:884 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-14 12:53:18:952:736 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-14 12:53:18:953:470 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-14 12:53:18:954:288 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-14 12:53:18:954:981 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-14 12:53:18:958:603 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-14 12:53:19:951:582 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-14 12:53:19:952:44 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-14 12:53:29:953:187 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-14 12:53:29:953:760 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..377ffc78 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:50:15:551:928 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-14 12:50:15:555:931 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:50:16:551:848 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-14 12:50:16:555:392 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:50:16:558:949 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-14 12:50:18:155:381 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..75e80e1e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-14 12:49:59:312:183 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-14 12:49:59:317:23 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-14 12:50:0:312:223 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-14 12:50:0:314:818 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-14 12:50:0:318:28 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-14 12:50:1:314:150 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-14 12:50:1:314:586 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-14 12:50:11:314:59 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-14 12:50:11:314:641 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-14 12:50:11:315:163 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..7a95bf0e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:58:25:937:783 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:58:25:941:166 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:58:26:937:780 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:58:26:939:637 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 20:58:26:941:399 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-13 20:58:28:941:254 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-13 20:58:29:542:129 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..cc709fdc --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:58:44:86:991 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:58:44:89:751 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:58:45:87:15 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:58:45:88:668 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 20:58:45:90:498 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:58:45:98:318 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q7 failed at: 2022-4-13 20:58:46:788:324 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..0599aac4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:59:0:423:83 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:59:0:426:148 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:59:1:423:78 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:59:1:424:917 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-13 20:59:2:424:898 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:59:2:430:407 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-13 20:59:2:931:274 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..bc6dc8b6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:59:17:609:776 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 20:59:17:612:591 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:59:18:626:864 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:59:18:630:795 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-13 20:59:18:631:949 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-13 20:59:19:610:682 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-13 20:59:20:613:442 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 20:59:21:610:268 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-13 20:59:31:611:503 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 20:59:31:612:85 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..df6f7cc1 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:0:8:364:222 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:0:8:367:187 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:0:9:364:257 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-13 21:0:9:367:79 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 21:0:9:367:807 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-13 21:0:10:365:23 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 21:0:10:372:22 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-13 21:0:11:364:602 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-13 21:0:21:366:386 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 21:0:21:367:66 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..1a320679 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:0:25:517:922 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:0:25:520:715 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:0:26:517:842 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-13 21:0:26:520:77 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 21:0:26:520:805 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 21:0:26:521:298 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-13 21:0:27:518:939 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 21:0:27:521:884 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-13 21:0:37:519:678 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 21:0:37:520:435 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..c04c03bc --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:59:35:934:937 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-13 20:59:35:937:845 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:59:36:934:954 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:59:36:937:766 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-13 20:59:36:938:471 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:59:36:942:309 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-13 20:59:37:935:650 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 20:59:37:936:136 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-13 20:59:47:937:112 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 20:59:47:937:704 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..78cfb2a5 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:59:52:54:981 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-13 20:59:52:61:331 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:59:53:55:20 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-13 20:59:53:60:369 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-13 20:59:53:61:600 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:59:53:65:615 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-13 20:59:54:56:377 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 20:59:54:56:921 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-13 21:0:4:56:797 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 21:0:4:57:430 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..26623b6d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:57:51:451:226 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:57:51:454:228 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:57:52:451:970 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:57:52:454:698 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 20:57:52:457:592 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-13 20:57:53:451:859 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-13 20:57:54:459:760 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 20:57:55:456:621 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-13 20:58:5:453:420 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 20:58:5:454:99 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..8bf3b6f8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:58:9:605:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:58:9:608:687 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:58:10:605:653 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 20:58:10:607:276 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 20:58:10:609:136 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:58:10:615:272 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-13 20:58:11:606:551 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 20:58:11:610:179 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-13 20:58:21:607:154 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-13 20:58:21:607:688 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..7516f5e8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:0:41:850:886 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:0:41:853:751 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:0:42:850:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 21:0:42:852:714 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-13 21:0:42:854:514 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-13 21:0:43:850:822 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-13 21:0:43:852:625 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-13 21:0:43:853:464 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-13 21:0:44:851:541 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-13 21:0:44:855:139 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-13 21:0:45:854:918 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-13 21:0:46:855:395 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-13 21:0:56:852:954 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-13 21:0:56:853:606 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..e6413a0e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-4-13 21:1:1:37:84 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-13 21:1:1:41:861 +Q3-T1 execute sql: 'BEGIN;' +Q3 finished at: 2022-4-13 21:1:2:37:29 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-13 21:1:2:39:882 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-13 21:1:3:37:65 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-13 21:1:3:38:843 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-13 21:1:3:39:790 + Q8-T2 execute sql: 'BEGIN;' + Q8 finished at: 2022-4-13 21:1:4:37:118 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-13 21:1:4:38:717 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-13 21:1:5:38:228 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-13 21:1:6:40:946 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-13 21:1:7:44:847 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-13 21:1:8:37:662 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-13 21:1:18:37:794 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-13 21:1:18:39:711 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-13 21:1:18:40:241 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c92fbb2c --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:1:22:376:782 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:1:22:379:455 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:1:23:376:769 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-13 21:1:23:378:535 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-13 21:1:23:380:370 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-13 21:1:24:376:780 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-13 21:1:24:378:540 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-13 21:1:24:379:406 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-13 21:1:25:377:541 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-13 21:1:25:382:438 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-13 21:1:26:383:653 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-13 21:1:27:380:260 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-13 21:1:37:379:160 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-13 21:1:37:379:793 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..c9b47ceb --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:1:41:522:45 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-13 21:1:41:528:565 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:1:42:522:95 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-13 21:1:42:524:815 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-13 21:1:42:528:82 + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-13 21:1:43:522:31 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-13 21:1:43:523:536 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-13 21:1:43:524:563 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-13 21:1:44:523:941 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-13 21:1:44:532:14 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-13 21:1:45:528:919 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-13 21:1:46:525:700 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-13 21:1:56:523:898 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-13 21:1:56:524:474 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..a38d9968 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:55:51:810:653 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:55:51:813:180 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:55:52:810:620 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-13 20:55:52:813:171 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-13 20:55:53:811:192 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:55:54:811:331 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-13 20:56:4:812:545 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-13 20:56:4:813:152 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..5bbfc43d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:56:27:431:375 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:56:27:436:347 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:56:28:431:399 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-13 20:56:28:433:751 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-13 20:56:29:433:206 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:56:30:431:831 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:56:31:436:357 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-13 20:56:41:433:58 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 20:56:41:433:597 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..79f8174a --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:56:45:641:748 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:56:45:645:982 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:56:46:641:705 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-13 20:56:46:644:251 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-13 20:56:46:644:774 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-13 20:56:47:643:276 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:56:47:650:779 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-13 20:56:57:643:724 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 20:56:57:644:262 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..b6d5848b --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:57:34:211:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 20:57:34:216:918 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:57:35:211:543 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-13 20:57:36:214:875 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-13 20:57:36:222:73 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-13 20:57:36:631:668 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7cc2b19d --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:56:9:127:817 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 20:56:9:131:915 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:56:10:127:808 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-13 20:56:10:131:501 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-13 20:56:11:129:656 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 20:56:12:136:631 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:56:13:128:403 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-13 20:56:23:130:666 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 20:56:23:131:160 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..ad196ef8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:57:1:857:888 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-13 20:57:1:862:497 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:57:2:857:936 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-13 20:57:2:860:285 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-13 20:57:2:863:782 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-13 20:57:3:859:498 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:57:3:859:987 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-13 20:57:13:859:377 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 20:57:13:859:909 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..cef7e6c6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 20:57:17:969:13 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-13 20:57:17:975:122 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 20:57:18:969:44 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-13 20:57:18:972:673 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-13 20:57:18:976:900 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-13 20:57:19:970:525 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 20:57:19:971:140 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-13 20:57:29:971:237 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 20:57:29:971:734 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..c286fa11 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:4:0:303:273 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:4:0:305:938 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:4:1:304:306 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-13 21:4:1:307:218 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-13 21:4:2:304:974 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 21:4:2:313:67 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:4:2:908:635 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..64fffefd --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:4:16:617:583 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:4:16:620:808 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:4:17:626:843 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:4:17:627:917 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:4:28:32:210 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-13 21:4:29:129:371 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a61d60d7 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:4:33:766:855 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:4:33:769:772 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:4:34:771:561 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:4:34:774:753 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:4:45:256:739 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-13 21:4:46:269:137 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..7625f1b6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:4:52:106:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:4:52:109:713 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:4:53:110:936 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:4:53:111:865 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:5:3:516:595 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-13 21:5:4:713:916 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..d5e1fc66 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:5:8:853:689 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 21:5:8:856:275 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:5:9:858:651 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:5:9:862:507 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-13 21:5:9:863:802 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-13 21:5:11:858:865 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-13 21:5:12:462:402 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..46e4eb48 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:5:26:196:213 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-13 21:5:26:198:990 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:5:27:196:222 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:5:27:199:7 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-13 21:5:27:199:815 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-13 21:5:29:202:782 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q6 failed at: 2022-4-13 21:5:29:803:538 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..ab511767 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:5:44:381:806 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:5:44:384:656 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:5:45:381:790 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-13 21:5:45:384:158 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-13 21:5:46:382:711 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 21:5:46:385:900 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:5:46:886:841 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..14b171e8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:6:1:711:505 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:6:1:714:632 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:6:2:712:348 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-13 21:6:2:715:953 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-13 21:6:3:712:69 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 21:6:5:716:516 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:6:6:240:784 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..d3c7e5af --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:6:19:847:731 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:6:19:850:477 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:6:20:848:443 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-13 21:6:20:850:375 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-13 21:6:21:848:612 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-13 21:6:21:853:121 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:6:22:353:894 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..8b74d7f8 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:6:36:180:235 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:6:36:183:202 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:6:37:181:89 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:6:37:183:714 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN;' + Q6 finished at: 2022-4-13 21:6:38:180:261 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-13 21:6:38:181:958 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q5 failed at: 2022-4-13 21:6:47:616:276 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-13 21:6:48:893:498 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-13 21:6:49:991:34 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..3130346e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:6:55:382:139 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:6:55:384:655 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:6:56:388:698 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-13 21:6:56:389:848 + Q5-T3 execute sql: 'BEGIN;' + Q5 finished at: 2022-4-13 21:6:57:386:292 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-13 21:6:59:385:104 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q6 failed at: 2022-4-13 21:7:8:890:174 + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q8 failed at: 2022-4-13 21:7:10:89:876 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-13 21:7:11:185:123 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..abb97f92 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:2:0:746:474 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:2:0:751:292 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:2:1:746:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-13 21:2:2:747:191 + Q4 finished at: 2022-4-13 21:2:2:747:872 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 21:2:3:760:363 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-13 21:2:13:748:968 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-13 21:2:13:777:878 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-13 21:2:13:778:569 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..f334319f --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:2:17:883:649 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:2:17:888:427 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:2:18:883:626 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-13 21:2:19:888:2 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-13 21:2:20:292:99 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..8b31a1a9 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:2:35:107:500 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:2:35:112:30 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:2:36:108:531 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-13 21:2:37:108:892 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-13 21:2:37:117:609 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-13 21:2:37:606:744 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..35cb65d6 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:2:52:328:581 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:2:52:333:703 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:2:53:329:213 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-13 21:2:54:330:220 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 21:2:54:334:230 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-13 21:2:54:745:862 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..e1366688 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:3:44:68:665 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-13 21:3:44:72:845 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:3:45:68:643 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-13 21:3:46:72:143 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-13 21:3:46:76:561 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 + Q4 failed at: 2022-4-13 21:3:46:479:573 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..2fa46f09 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:3:8:559:948 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-13 21:3:8:563:916 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:3:9:560:607 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-13 21:3:9:564:179 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-13 21:3:11:564:96 +Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-13 21:3:12:162:410 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..86fce082 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-4-13 21:3:25:822:305 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-13 21:3:25:827:79 + Q3-T2 execute sql: 'BEGIN;' + Q3 finished at: 2022-4-13 21:3:26:822:330 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-13 21:3:26:824:777 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-13 21:3:28:826:178 +Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction errcode: HY000 +Q5 failed at: 2022-4-13 21:3:29:424:653 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.25]can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..f407cc73 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:9:16:692:937 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:9:17:693:497 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:9:18:742:65 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 16:9:19:720:608 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:9:19:783:540 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:9:19:947:110 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 16:9:20:739:339 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:9:20:780:294 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:9:30:695:541 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:9:30:784:688 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:9:30:874:945 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:9:30:917:680 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..e2edfe83 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:11:18:112:744 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:11:19:110:84 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:11:20:163:124 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 16:11:21:114:585 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:11:21:157:801 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:11:21:200:380 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 16:11:22:114:528 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:11:22:160:241 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:11:32:110:97 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:11:32:197:70 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + (2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-3-30 16:11:32:282:303 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:11:32:322:857 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..cf1472c9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:11:47:897:436 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:11:48:895:736 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:11:49:941:431 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 16:11:50:965:288 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:11:51:24:789 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 16:11:51:901:768 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 16:11:51:942:149 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 16:11:52:905:874 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:12:2:900:621 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:12:2:987:844 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:12:3:75:121 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:12:3:117:102 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a0849f55 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:14:20:404:160 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:14:21:405:265 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:14:22:450:319 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 16:14:23:468:686 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:14:23:527:581 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:14:23:574:228 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 16:14:24:409:52 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:14:24:452:18 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:14:34:401:315 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:14:34:480:502 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:14:34:558:881 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:14:34:596:446 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..29975a26 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:12:18:322:417 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:12:19:320:407 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 16:12:20:368:270 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 16:12:20:410:766 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 16:12:21:366:318 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 16:12:21:408:66 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 16:12:21:451:403 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:12:22:323:521 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:12:32:316:328 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 16:12:32:393:238 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-3-30 16:12:32:468:683 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-3-30 16:12:32:523:609 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 16:12:32:560:888 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..d7f378ea --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:13:51:941:987 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:13:52:947:608 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 16:13:53:984:216 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 16:13:54:983:928 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 16:13:55:25:518 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:13:55:66:349 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 16:13:55:944:38 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:13:55:984:202 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:14:5:940:438 + Q10-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q10 finished at: 2022-3-30 16:14:6:16:65 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 16:14:6:51:933 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..a556cd05 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:14:48:605:574 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:14:49:611:924 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:14:50:607:844 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q4 finished at: 2022-3-30 16:14:51:650:713 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 16:14:52:663:85 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 16:14:53:673:364 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-3-30 16:14:54:608:538 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 16:14:55:616:828 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q9 finished at: 2022-3-30 16:14:56:627:223 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 16:14:57:608:339 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 16:14:58:614:447 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:14:59:613:914 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 16:15:9:610:307 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 16:15:9:702:157 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 16:15:9:792:490 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 16:15:9:836:327 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..273102ca --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,125 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:17:43:219:846 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:17:44:220:15 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:17:45:219:65 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q4 finished at: 2022-3-30 16:17:46:266:153 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-3-30 16:17:47:223:86 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:17:47:265:923 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-3-30 16:17:48:262:190 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 16:17:48:307:349 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 16:17:48:348:819 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-3-30 16:17:49:264:114 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 16:17:49:304:225 + Q12-T4 execute sql: 'BEGIN;' + Q12 finished at: 2022-3-30 16:17:59:219:931 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-3-30 16:17:59:314:403 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-3-30 16:17:59:407:834 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 16:17:59:452:404 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..86fb5c9d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,242 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:17:9:444:365 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:17:10:442:898 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:17:11:446:772 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 16:17:12:444:810 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q5 finished at: 2022-3-30 16:17:13:493:8 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 16:17:14:487:34 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q7 finished at: 2022-3-30 16:17:15:451:136 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 16:17:15:495:729 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 16:17:16:469:799 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 16:17:16:515:34 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,0) + (8) expected_result: + (0,1,0,0) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + (12) expected_result: + (0,1,0,0) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-3-30 16:17:17:485:771 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:17:17:523:932 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,0) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-3-30 16:17:18:487:11 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 16:17:18:526:736 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 16:17:28:448:146 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 16:17:28:538:762 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 16:17:28:631:77 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 16:17:28:673:812 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..0346b73d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:15:27:46:208 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:15:28:41:804 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:15:29:46:938 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 16:15:30:98:705 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 16:15:31:90:253 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 16:15:32:97:405 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-3-30 16:15:33:48:261 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-3-30 16:15:34:44:814 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' + Q9 finished at: 2022-3-30 16:15:35:48:537 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 16:15:36:48:297 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 16:15:37:45:438 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:15:38:49:281 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 16:15:48:44:304 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 16:15:48:131:977 + Q15-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + (1) expected_result: + + (2) expected_result: + + (3) expected_result: + + (4) expected_result: + + (5) expected_result: + + (6) expected_result: + + + Q15 finished at: 2022-3-30 16:15:48:219:363 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 16:15:48:260:983 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..49e2f59e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,125 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:16:1:951:797 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:16:2:950:476 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:16:3:950:558 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q4 finished at: 2022-3-30 16:16:5:1:2 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 16:16:5:997:71 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 16:16:7:22:160 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q7 finished at: 2022-3-30 16:16:7:952:638 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-3-30 16:16:8:952:646 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-3-30 16:16:9:959:721 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 16:16:10:953:691 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 16:16:11:952:761 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:16:12:956:576 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 16:16:22:948:949 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + *(1) expected_result: + (0,1,0,0) (2,0,2,0) + *(2) expected_result: + (0,1,0,0) (2,0,2,0) + *(3) expected_result: + (0,1,0,0) (2,0,2,0) + *(4) expected_result: + (0,1,0,0) (2,0,2,0) + *(5) expected_result: + (0,1,0,0) (2,0,2,0) + *(6) expected_result: + (0,1,0,0) (2,0,2,0) + + Q14 finished at: 2022-3-30 16:16:23:30:825 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q15 finished at: 2022-3-30 16:16:23:114:595 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 16:16:23:152:919 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..1e3bd60e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,159 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:18:12:606:377 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:18:13:607:715 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:18:14:607:46 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q4 finished at: 2022-3-30 16:18:15:653:141 +Q5-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q5 finished at: 2022-3-30 16:18:15:739:19 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 16:18:16:677:110 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-3-30 16:18:16:730:628 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 16:18:16:778:258 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-3-30 16:18:17:652:39 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 16:18:17:736:679 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 16:18:17:777:439 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-3-30 16:18:18:609:526 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 16:18:18:651:929 + Q14-T4 execute sql: 'BEGIN;' + Q14 finished at: 2022-3-30 16:18:28:607:917 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q15 finished at: 2022-3-30 16:18:28:696:638 + Q16-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q16 finished at: 2022-3-30 16:18:28:783:646 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-3-30 16:18:28:825:209 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..921a70c1 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,181 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:16:39:754:190 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:16:40:749:405 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:16:41:757:586 +Q4-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q4 finished at: 2022-3-30 16:16:42:802:768 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q5 finished at: 2022-3-30 16:16:43:794:542 + Q6-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-3-30 16:16:43:834:835 + Q7-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q7 finished at: 2022-3-30 16:16:43:911:765 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 16:16:43:951:567 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 16:16:43:991:206 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-3-30 16:16:44:808:214 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-3-30 16:16:44:854:378 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-3-30 16:16:44:947:428 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-3-30 16:16:44:993:840 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 16:16:45:41:615 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,1) + (1) expected_result: + (2,0,2,0) + (2) expected_result: + (2,0,2,0) + (3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + *(5) expected_result: + (2,0,2,1) + *(6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-3-30 16:16:45:799:323 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 16:16:45:841:181 + Q17-T4 execute sql: 'BEGIN;' + Q17 finished at: 2022-3-30 16:16:55:753:292 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) (2,0,2,1) + *(1) expected_result: + (0,1,0,2) (2,0,2,1) + *(2) expected_result: + (0,1,0,2) (2,0,2,1) + *(3) expected_result: + (0,1,0,2) (2,0,2,1) + *(4) expected_result: + (0,1,0,2) (2,0,2,1) + *(5) expected_result: + (0,1,0,2) (2,0,2,1) + *(6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-3-30 16:16:55:841:687 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-3-30 16:16:55:927:385 + Q20-T4 execute opt: 'COMMIT'; + Q20 finished at: 2022-3-30 16:16:55:968:587 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..45001b8c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:8:49:545:750 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:8:50:542:281 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 16:8:51:587:702 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 16:8:52:545:367 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 16:8:52:584:265 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-3-30 16:8:53:544:251 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 16:8:53:584:617 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 16:9:3:548:203 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 16:9:3:636:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 16:9:3:679:339 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..c24ccb2c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:8:22:869:209 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:8:23:867:631 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 16:8:24:914:750 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 16:8:25:870:291 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 16:8:25:911:548 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 16:8:26:911:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 16:8:26:952:596 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 16:8:36:869:644 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 16:8:36:955:231 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 16:8:36:996:401 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c06edbad --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,67 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:44:10:564:476 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:44:11:559:958 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:44:12:569:423 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:44:13:584:50 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:44:13:688:42 +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:44:15:565:724 +Q6 finished at: 2022-3-30 15:44:15:587:477 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:44:16:567:57 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:44:26:558:110 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:44:26:637:164 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-3-30 15:44:26:714:65 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:44:26:751:30 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ba205c35 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,67 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:45:7:231:863 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:45:8:229:321 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:45:9:236:564 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:45:10:249:858 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:45:10:348:241 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:45:10:494:622 +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 finished at: 2022-3-30 15:45:11:236:121 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:45:11:279:998 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:45:21:230:14 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:45:21:314:329 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-3-30 15:45:21:396:772 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:45:21:436:258 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..d40c9dbd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,67 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:46:17:223:238 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:46:18:226:848 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:46:19:231:480 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:46:20:255:904 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 15:46:21:277:43 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:46:21:318:971 + Q5 finished at: 2022-3-30 15:46:21:436:763 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 15:46:22:233:338 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:46:32:232:372 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,2) + + Q10 finished at: 2022-3-30 15:46:32:319:652 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:46:32:404:988 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:46:32:445:976 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..d7e51f18 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:47:12:51:846 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:47:13:52:221 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:47:14:97:119 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:47:15:75:258 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:47:15:133:595 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 15:47:16:96:338 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:47:17:57:856 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:47:18:55:416 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:47:28:55:216 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:47:28:143:46 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:47:28:231:649 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:47:28:272:971 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..baa2fb2d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:49:26:304:996 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:49:27:301:676 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:49:28:309:780 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:49:29:362:346 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:49:29:458:773 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 15:49:30:309:723 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:49:30:352:200 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 15:49:31:303:351 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:49:41:303:166 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:49:41:382:672 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:49:41:461:925 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:49:41:499:838 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..bc9553fe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:50:1:701:637 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:50:2:699:508 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:50:3:703:888 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:50:4:770:172 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:50:4:876:621 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:50:4:919:839 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 15:50:5:703:699 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:50:5:746:790 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:50:15:697:616 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:50:15:778:871 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:50:15:860:187 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:50:15:899:72 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..40616e55 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:47:56:205:332 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:47:57:203:150 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q3 finished at: 2022-3-30 15:47:58:256:923 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:47:59:208:347 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:47:59:251:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:47:59:295:614 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-3-30 15:48:0:252:289 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:48:0:295:573 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:48:10:202:541 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-3-30 15:48:10:286:260 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-3-30 15:48:10:370:214 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:48:10:410:795 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..05f4f0d4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:48:27:285:105 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:48:28:290:706 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 15:48:29:329:396 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 15:48:30:292:135 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 15:48:30:335:862 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:48:30:381:210 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 15:48:31:325:395 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:48:31:363:376 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:48:41:288:299 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-3-30 15:48:41:377:285 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:48:41:418:92 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..7dc8a45e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:42:2:702:658 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:42:3:705:932 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:42:4:707:690 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:42:5:734:650 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:42:5:841:365 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 15:42:6:745:895 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:42:7:712:132 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:42:8:705:144 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:42:18:707:816 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:42:18:796:713 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:42:18:884:699 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:42:18:927:477 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..a1456cdb --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:43:10:166:553 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:43:11:171:320 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:43:12:171:357 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:43:13:177:176 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:43:13:260:442 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:43:13:302:452 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 15:43:14:207:372 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:43:14:244:519 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:43:24:171:983 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:43:24:256:628 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:43:24:341:286 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:43:24:381:855 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..d8defc3f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:50:34:446:44 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:50:35:445:315 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:50:36:438:973 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-3-30 15:50:37:450:933 + Q5-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-3-30 15:50:38:469:611 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q6 finished at: 2022-3-30 15:50:38:578:456 + Q7-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-3-30 15:50:39:442:110 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-3-30 15:50:39:522:184 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-3-30 15:50:40:494:74 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:50:40:540:435 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:50:41:451:574 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:50:42:441:757 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:50:52:442:367 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 15:50:52:527:460 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 15:50:52:611:774 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 15:50:52:652:169 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..3cab05cd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,244 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 15:51:8:192:839 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 15:51:9:191:531 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:51:10:191:997 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 15:51:11:193:21 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:51:12:245:2 +Q6-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6 finished at: 2022-3-30 15:51:13:194:801 + Q7-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q7 finished at: 2022-3-30 15:51:14:242:885 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q8 finished at: 2022-3-30 15:51:14:336:974 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 15:51:15:213:415 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 15:51:16:241:127 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 15:51:17:194:61 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:51:18:198:733 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 15:51:19:192:557 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 15:51:20:193:193 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 15:51:30:190:554 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 15:51:30:281:837 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 15:51:30:371:382 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 15:51:30:414:316 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..1b5253a3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:51:56:896:209 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:51:57:899:963 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:51:58:899:153 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 15:51:59:899:72 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 15:52:0:901:652 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 15:52:0:984:610 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 15:52:1:901:314 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 15:52:1:983:859 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 15:52:2:936:190 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:52:2:974:942 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:52:3:902:95 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:52:4:901:451 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:52:14:901:705 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 15:52:14:989:882 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 15:52:15:30:892 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..e4557486 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:52:34:712:698 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:52:35:711:106 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:52:36:711:405 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 15:52:37:716:152 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 15:52:38:713:203 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 15:52:38:793:992 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 15:52:39:713:528 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 15:52:39:800:122 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 15:52:40:756:106 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:52:40:798:864 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:52:41:711:178 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:52:42:715:727 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:52:52:710:986 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-3-30 15:52:52:789:908 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 15:52:52:827:249 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..1707a2d8 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 15:36:36:53:792 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 15:36:37:61:545 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:36:37:109:540 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 15:36:38:95:156 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 15:36:39:62:183 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:36:40:53:797 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 15:36:50:55:47 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 15:36:50:135:237 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:36:50:173:786 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..163be83e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:37:56:361:58 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:37:57:353:119 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:37:58:365:251 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 15:37:59:390:564 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-30 15:38:0:362:267 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:38:1:353:438 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:38:2:364:221 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:38:12:358:708 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 15:38:12:440:430 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:38:12:479:37 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..9d9d8f56 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:38:59:679:483 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:39:0:686:872 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:39:1:682:722 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 15:39:2:733:496 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:39:2:776:390 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-30 15:39:3:707:140 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:39:3:744:127 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:39:13:682:451 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 15:39:13:758:55 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:39:13:793:876 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..2fc3f4ad --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:41:22:264:297 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:41:23:266:234 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:41:24:267:306 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 15:41:26:305:200 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 15:41:26:345:386 + Q4 finished at: 2022-3-30 15:41:26:347:283 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:41:27:268:95 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:41:37:267:55 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:41:37:352:896 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:41:37:393:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..9fd16699 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:37:7:898:530 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:37:8:899:584 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 15:37:9:942:669 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 15:37:10:902:595 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 15:37:11:940:26 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:37:12:902:92 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:37:13:899:364 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:37:23:897:264 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:37:23:977:732 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:37:24:15:789 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..2382db62 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:40:8:893:838 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:40:9:896:985 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 15:40:10:930:120 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-30 15:40:11:901:803 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:40:11:945:596 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 15:40:12:928:159 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:40:12:963:498 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:40:22:899:864 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 15:40:22:990:697 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:40:23:34:81 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..1f0b8a18 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:40:44:409:678 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:40:45:415:342 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 15:40:46:453:574 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 15:40:47:418:397 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:40:47:465:230 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 15:40:48:450:742 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:40:48:489:186 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:40:58:408:184 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 15:40:58:486:34 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:40:58:523:249 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..8a30430f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,67 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:58:13:818:908 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:58:14:815:798 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:58:15:822:898 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:58:16:821:658 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 15:58:17:863:334 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:58:17:907:374 + Q5 finished at: 2022-3-30 15:58:17:918:687 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:58:17:961:228 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:58:27:818:388 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:58:27:908:498 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:58:28:2:213 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:58:28:44:834 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..6b311eb6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:59:21:769:17 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:59:22:766:259 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:59:23:773:821 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:59:24:789:954 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 15:59:35:282:159 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 15:59:36:356:204 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..149ed2f7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:59:55:73:884 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:59:56:73:882 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:59:57:79:126 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:59:58:79:139 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 16:0:8:533:43 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 16:0:9:642:105 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..9772a885 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:0:28:365:48 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:0:29:362:850 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 16:0:30:371:655 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 16:0:31:367:608 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 16:0:41:874:921 +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-3-30 16:0:43:86:358 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..4d54dc99 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:2:16:537:990 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:2:17:536:804 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:2:18:582:171 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 16:2:19:559:317 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:2:19:615:65 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 16:2:21:542:498 +Q6 finished at: 2022-3-30 16:2:21:595:645 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 16:2:21:636:834 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:2:31:543:321 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:2:31:636:147 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:2:31:727:379 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:2:31:772:453 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..5ff3f8ac --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:3:48:194:298 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:3:49:198:685 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 16:3:50:236:318 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 16:3:51:224:11 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 16:3:51:286:197 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 16:3:53:205:182 +Q6 finished at: 2022-3-30 16:3:53:256:206 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:3:54:197:119 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:4:4:200:883 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:4:4:289:187 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:4:4:377:141 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:4:4:419:507 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..942f04d0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:4:21:990:750 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:4:22:984:650 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 16:4:23:996:621 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 16:4:25:47:174 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 16:4:25:996:83 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 16:4:26:40:668 + Q5 finished at: 2022-3-30 16:4:26:59:19 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 16:4:26:990:346 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:4:36:990:817 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:4:37:80:449 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:4:37:168:488 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:4:37:210:732 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..3e4a259d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:4:52:327:215 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:4:53:329:188 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 16:4:54:331:883 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 16:4:55:395:926 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 16:4:56:331:691 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:4:58:331:129 + Q5 finished at: 2022-3-30 16:4:58:388:952 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 16:4:58:434:735 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:5:8:327:789 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:5:8:410:753 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:5:8:494:930 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:5:8:533:914 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..e36d1b7d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,65 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:5:22:30:915 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:5:23:30:219 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 16:5:24:36:53 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 16:5:25:77:286 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 16:5:26:34:141 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 16:5:26:78:291 + Q5 finished at: 2022-3-30 16:5:26:149:340 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 16:5:26:193:704 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 16:5:36:27:470 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 16:5:36:108:854 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 16:5:36:188:557 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 16:5:36:227:483 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1d6bc2fe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:5:53:993:813 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:5:54:993:589 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:5:55:988:569 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 16:5:56:998:841 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 16:5:57:998:186 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 16:5:58:990:610 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 16:6:8:620:384 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 16:6:9:798:247 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 16:6:10:849:363 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..0bca5131 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 16:6:27:96:275 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 16:6:28:103:952 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 16:6:29:100:526 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 16:6:30:105:564 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 16:6:31:109:488 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 16:6:32:101:186 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 16:6:41:740:504 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 16:6:42:927:177 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 16:6:43:945:721 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d909584e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,44 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:53:10:861:687 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:53:11:861:364 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:53:12:864:300 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 15:53:14:861:541 + Q4 finished at: 2022-3-30 15:53:14:863:217 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:53:15:863:631 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 15:53:25:859:908 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 15:53:25:939:968 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:53:25:978:965 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..4827414a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,44 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:53:47:841:423 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:53:48:836:487 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:53:49:838:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 15:53:51:837:780 + Q4 finished at: 2022-3-30 15:53:51:837:799 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:53:52:838:360 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 15:54:2:837:896 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 15:54:2:916:757 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:54:2:954:856 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..8a745daf --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:54:23:424:505 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:54:24:422:588 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:54:25:426:556 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 15:54:27:425:226 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 15:54:27:469:433 + Q4 finished at: 2022-3-30 15:54:27:469:493 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:54:28:424:755 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:54:38:423:298 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-3-30 15:54:38:511:538 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:54:38:553:81 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..67935e0e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:54:57:177:260 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:54:58:180:49 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:54:59:180:327 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 15:55:1:177:908 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:55:1:219:231 + Q4 finished at: 2022-3-30 15:55:1:219:466 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:55:1:263:742 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:55:11:175:235 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-3-30 15:55:11:253:529 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:55:11:291:117 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..a6a6a8f8 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:57:34:660:276 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:57:35:659:370 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:57:36:662:728 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 15:57:38:701:973 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2022-3-30 15:57:38:742:395 + Q5-T2 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:57:38:743:801 + Q5 finished at: 2022-3-30 15:57:38:783:950 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:57:48:662:492 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:57:48:751:496 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:57:48:794:135 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..9cbb99ea --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:56:3:444:45 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:56:4:444:853 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 15:56:5:488:962 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 15:56:6:447:120 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:56:8:446:765 +Q5 finished at: 2022-3-30 15:56:8:447:546 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 15:56:8:491:54 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:56:18:448:313 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:56:18:540:167 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:56:18:584:276 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9b510ade --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:56:33:970:636 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:56:34:971:487 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 15:56:36:17:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 15:56:36:975:90 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:56:38:973:321 +Q5 finished at: 2022-3-30 15:56:38:974:329 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:56:39:973:20 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:56:49:973:77 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:56:50:65:357 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:56:50:108:817 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..e74ac78d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:20:54:231:591 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:20:55:232:441 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:20:56:275:762 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:20:57:255:673 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:20:57:313:733 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:20:57:466:70 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 15:20:58:274:897 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:20:58:314:854 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:21:8:231:852 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:21:8:321:115 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:21:8:409:45 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:21:8:451:20 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..dc967511 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:21:26:777:11 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:21:27:780:569 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:21:28:822:68 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:21:29:786:462 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:21:29:832:357 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:21:29:877:727 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 15:21:31:479:131 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..dc206392 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:22:7:597:419 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:22:8:591:589 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:22:9:647:499 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:22:10:656:40 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:22:10:712:53 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 15:22:11:602:796 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:22:11:648:982 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 15:22:12:597:633 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:22:22:599:346 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:22:22:727:665 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:22:22:816:154 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:22:22:858:961 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..56032616 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:24:20:342:293 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:24:21:339:296 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:24:22:390:831 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:24:23:384:940 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:24:23:427:386 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:24:23:468:676 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 15:24:24:345:30 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:24:24:390:5 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:24:34:343:877 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:24:34:437:2 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:24:34:528:863 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:24:34:572:982 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..4e05f590 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:22:50:965:242 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:22:51:962:158 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 15:22:53:5:658 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 15:22:53:48:108 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 15:22:54:14:421 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 15:22:54:51:924 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:22:54:91:362 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:22:54:965:523 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:23:4:970:690 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 15:23:5:65:281 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-3-30 15:23:5:158:334 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-3-30 15:23:5:221:453 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 15:23:5:269:408 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..b3052b1f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:23:41:420:855 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:23:42:422:34 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 15:23:43:465:546 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 15:23:44:465:188 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 15:23:44:507:615 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:23:44:550:296 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 15:23:45:421:836 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:23:45:463:932 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:23:55:421:342 + Q10-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q10 finished at: 2022-3-30 15:23:55:505:727 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:23:55:545:792 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..0c2f6c0b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:24:52:576:329 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:24:53:573:305 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:24:54:574:684 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q4 finished at: 2022-3-30 15:24:55:626:134 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:24:56:617:783 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 15:24:57:637:420 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-3-30 15:24:58:602:540 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 15:24:59:577:862 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q9 finished at: 2022-3-30 15:25:0:591:378 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:25:1:578:981 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:25:2:575:777 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:25:3:580:404 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:25:13:573:762 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 15:25:13:655:6 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 15:25:13:736:366 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 15:25:13:775:124 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..387e1683 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:28:48:591:353 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:28:49:596:123 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:28:50:600:984 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q4 finished at: 2022-3-30 15:28:51:635:366 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-3-30 15:28:52:598:596 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:28:52:642:795 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-3-30 15:28:53:636:21 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 15:28:53:680:43 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:28:53:721:790 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-3-30 15:28:54:635:476 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 15:28:54:673:421 + Q12-T4 execute sql: 'BEGIN;' + Q12 finished at: 2022-3-30 15:29:4:594:100 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-3-30 15:29:4:679:912 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-3-30 15:29:4:764:666 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 15:29:4:804:995 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..e846c473 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,244 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:28:10:846:678 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:28:11:846:175 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:28:12:845:232 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 15:28:13:851:48 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q5 finished at: 2022-3-30 15:28:14:893:40 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 15:28:15:914:982 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q7 finished at: 2022-3-30 15:28:16:849:274 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 15:28:16:890:89 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 15:28:17:855:968 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:28:17:901:887 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,0) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-3-30 15:28:18:907:169 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:28:18:947:399 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-3-30 15:28:19:890:870 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 15:28:19:930:692 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 15:28:29:848:807 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 15:28:29:936:480 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 15:28:30:23:546 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 15:28:30:65:594 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..0c4eee09 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:25:36:967:112 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:25:37:971:771 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:25:38:965:20 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 15:25:40:11:646 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:25:41:20:624 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 15:25:42:25:163 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-3-30 15:25:42:969:621 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-3-30 15:25:43:976:704 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' + Q9 finished at: 2022-3-30 15:25:44:986:148 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:25:45:969:154 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:25:46:974:221 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:25:47:970:814 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:25:57:970:65 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 15:25:58:59:70 + Q15-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + (1) expected_result: + + (2) expected_result: + + (3) expected_result: + + (4) expected_result: + + (5) expected_result: + + (6) expected_result: + + + Q15 finished at: 2022-3-30 15:25:58:146:751 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 15:25:58:188:726 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..ac8d286f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,125 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:26:24:602:338 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:26:25:612:802 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:26:26:609:152 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q4 finished at: 2022-3-30 15:26:27:646:893 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 15:26:28:663:595 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 15:26:29:677:424 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q7 finished at: 2022-3-30 15:26:30:604:51 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-3-30 15:26:31:615:229 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-3-30 15:26:32:617:888 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:26:33:605:196 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:26:34:615:249 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:26:35:615:576 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:26:45:603:528 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + *(1) expected_result: + (0,1,0,0) (2,0,2,0) + *(2) expected_result: + (0,1,0,0) (2,0,2,0) + *(3) expected_result: + (0,1,0,0) (2,0,2,0) + *(4) expected_result: + (0,1,0,0) (2,0,2,0) + *(5) expected_result: + (0,1,0,0) (2,0,2,0) + *(6) expected_result: + (0,1,0,0) (2,0,2,0) + + Q14 finished at: 2022-3-30 15:26:45:684:305 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q15 finished at: 2022-3-30 15:26:45:762:98 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 15:26:45:797:679 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..7240f9e4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,159 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:29:24:869:272 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:29:25:876:595 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:29:26:871:948 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q4 finished at: 2022-3-30 15:29:27:912:883 +Q5-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q5 finished at: 2022-3-30 15:29:27:997:126 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 15:29:28:952:879 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-3-30 15:29:29:6:1 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:29:29:57:461 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-3-30 15:29:29:917:539 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 15:29:30:1:949 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:29:30:42:935 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-3-30 15:29:31:2:349 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 15:29:31:44:635 + Q14-T4 execute sql: 'BEGIN;' + Q14 finished at: 2022-3-30 15:29:40:874:912 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q15 finished at: 2022-3-30 15:29:40:967:136 + Q16-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q16 finished at: 2022-3-30 15:29:41:58:118 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-3-30 15:29:41:102:34 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..1b13c86a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,183 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:27:28:270:45 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:27:29:271:986 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:27:30:279:140 +Q4-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q4 finished at: 2022-3-30 15:27:31:315:605 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q5 finished at: 2022-3-30 15:27:32:317:917 + Q6-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-3-30 15:27:32:361:202 + Q7-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q7 finished at: 2022-3-30 15:27:32:445:236 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 15:27:32:488:636 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:27:32:531:888 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-3-30 15:27:33:318:26 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-3-30 15:27:33:363:572 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-3-30 15:27:33:450:647 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-3-30 15:27:33:494:189 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 15:27:33:538:77 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-3-30 15:27:34:311:876 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 15:27:34:351:331 + Q17-T4 execute sql: 'BEGIN;' + Q17 finished at: 2022-3-30 15:27:44:267:423 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) (2,0,2,1) + *(1) expected_result: + (0,1,0,2) (2,0,2,1) + *(2) expected_result: + (0,1,0,2) (2,0,2,1) + *(3) expected_result: + (0,1,0,2) (2,0,2,1) + *(4) expected_result: + (0,1,0,2) (2,0,2,1) + *(5) expected_result: + (0,1,0,2) (2,0,2,1) + *(6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-3-30 15:27:44:345:874 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-3-30 15:27:44:424:324 + Q20-T4 execute opt: 'COMMIT'; + Q20 finished at: 2022-3-30 15:27:44:465:636 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c12f8064 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:20:3:17:385 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:20:4:13:740 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 15:20:5:64:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 15:20:6:16:509 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:20:6:64:880 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 15:20:7:618:793 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..e917b7d5 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:19:27:572:344 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:19:28:568:329 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 15:19:29:621:282 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 15:19:30:570:993 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 15:19:30:612:871 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 15:19:31:618:862 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:19:31:663:990 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 15:19:41:573:23 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 15:19:41:665:188 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 15:19:41:709:194 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..955d7410 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:47:58:191:908 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:47:59:184:758 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:48:0:185:85 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:48:1:190:406 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:48:1:286:39 +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 14:48:3:187:519 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 14:48:3:813:682 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..3c21b685 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:49:26:589:729 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:49:27:593:47 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:49:28:594:603 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:49:29:621:849 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:49:29:736:238 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:49:29:895:502 +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 14:49:31:295:851 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..08b15007 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:49:58:266:750 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:49:59:267:407 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:50:0:271:719 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:50:1:292:276 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 14:50:2:311:261 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:50:2:352:268 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 14:50:2:955:192 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..60d3456b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:51:51:404:586 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:51:52:406:525 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 14:51:53:450:456 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:51:54:426:111 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 14:51:54:482:438 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 14:51:55:449:283 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 14:51:56:412:438 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:51:57:405:250 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:52:7:404:555 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 14:52:7:490:371 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 14:52:7:571:322 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 14:52:7:610:358 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..105c0990 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:59:8:418:956 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:59:9:421:625 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:59:10:424:284 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 14:59:11:490:270 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:59:11:592:104 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 14:59:12:424:275 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:59:12:465:587 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 14:59:13:423:598 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:59:23:417:631 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 14:59:23:497:316 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 14:59:23:575:352 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 14:59:23:612:735 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..6636f032 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:59:51:34:749 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:59:52:32:959 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:59:53:39:593 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 14:59:54:94:959 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:59:54:196:504 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:59:54:238:138 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 14:59:55:39:358 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:59:55:83:478 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 15:0:5:31:679 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 15:0:5:115:340 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 15:0:5:197:457 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:0:5:237:350 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2267f783 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:54:39:22:980 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:54:40:22:275 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q3 finished at: 2022-3-30 14:54:41:69:906 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:54:42:41:889 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-3-30 14:54:42:100:120 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:54:42:255:541 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-3-30 14:54:43:75:510 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:54:43:118:168 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:54:53:19:902 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-3-30 14:54:53:100:356 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-3-30 14:54:53:180:829 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 14:54:53:218:620 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..b5facd5c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:57:58:425:863 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:57:59:427:969 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 14:58:0:468:192 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 14:58:1:430:556 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 14:58:1:472:893 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:58:1:516:116 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 14:58:2:464:187 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:58:2:501:661 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:58:12:424:546 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-3-30 14:58:12:505:482 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 14:58:12:542:557 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a8ae030e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:46:13:336:260 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:46:14:337:742 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:46:15:342:241 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:46:16:350:39 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:46:16:449:473 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 14:46:17:384:431 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 14:46:18:339:213 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:46:19:339:647 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:46:29:334:453 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 14:46:29:419:442 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 14:46:29:502:895 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 14:46:29:543:94 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2f6ee54f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:47:16:465:537 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:47:17:469:562 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 14:47:18:470:517 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 14:47:19:493:596 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 14:47:19:596:606 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:47:19:750:240 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 14:47:20:508:138 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 14:47:20:547:992 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 14:47:30:469:763 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 14:47:30:556:490 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 14:47:30:642:29 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 14:47:30:683:188 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..b585b868 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:2:4:243:509 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:2:5:249:2 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:2:6:242:915 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-3-30 15:2:7:248:597 + Q5-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-3-30 15:2:8:272:612 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q6 finished at: 2022-3-30 15:2:8:379:268 + Q7-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-3-30 15:2:9:246:221 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-3-30 15:2:9:329:2 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-3-30 15:2:10:286:331 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:2:10:327:592 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:2:11:253:12 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:2:12:245:591 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:2:22:248:594 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 15:2:22:340:461 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 15:2:22:430:252 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 15:2:22:473:301 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..e5f71707 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,244 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 15:2:39:138:888 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 15:2:40:144:36 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:2:41:136:830 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 15:2:42:139:327 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 15:2:43:184:748 +Q6-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6 finished at: 2022-3-30 15:2:44:147:300 + Q7-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q7 finished at: 2022-3-30 15:2:45:202:949 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q8 finished at: 2022-3-30 15:2:45:298:826 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 15:2:46:144:316 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 15:2:47:182:190 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 15:2:48:146:955 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:2:49:141:445 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 15:2:50:138:675 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 15:2:51:139:37 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 15:3:1:139:423 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 15:3:1:227:443 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 15:3:1:309:839 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 15:3:1:349:56 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..093dca34 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:3:21:159:16 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:3:22:165:53 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:3:23:164:741 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 15:3:24:161:753 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 15:3:25:167:11 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 15:3:25:256:422 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 15:3:26:165:733 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 15:3:26:254:460 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 15:3:27:199:356 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:3:27:238:886 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:3:28:168:278 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:3:29:167:938 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:3:39:160:41 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 15:3:39:238:156 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 15:3:39:276:72 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..951b62ae --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:3:55:855:779 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:3:56:860:838 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:3:57:861:930 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 15:3:58:858:15 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 15:3:59:861:858 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 15:3:59:947:685 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 15:4:0:863:454 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 15:4:0:951:179 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 15:4:1:895:74 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 15:4:1:933:543 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 15:4:2:862:319 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 15:4:3:863:905 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 15:4:13:864:424 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-3-30 15:4:13:957:743 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 15:4:14:2:132 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..a9df6d10 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 14:38:14:32:354 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 14:38:15:26:249 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 14:38:15:67:426 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 14:38:16:77:853 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 14:38:17:27:177 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:38:18:31:46 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 14:38:28:32:285 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 14:38:28:124:809 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 14:38:28:169:358 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..ba4ef89e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:39:56:876:782 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:39:57:878:492 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 14:39:58:879:819 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 14:39:59:924:270 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-30 14:40:0:876:987 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:40:1:878:936 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:40:2:886:160 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 14:40:12:882:176 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 14:40:12:973:817 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 14:40:13:17:883 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..2f13f031 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:40:35:636:43 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:40:36:641:329 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 14:40:37:638:650 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 14:40:38:686:935 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 14:40:38:728:533 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-30 14:40:39:638:110 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:40:39:676:437 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 14:40:49:641:319 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 14:40:49:727:704 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 14:40:49:769:12 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..96a1e5b3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:45:44:541:273 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:45:45:547:400 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 14:45:46:544:413 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 14:45:48:581:927 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 14:45:48:621:931 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 14:45:49:23:807 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..96298f0c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:38:42:498:735 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:38:43:497:894 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 14:38:44:548:216 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 14:38:45:499:614 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 14:38:46:558:96 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 14:38:47:500:468 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:38:48:499:427 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 14:38:58:499:533 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 14:38:58:593:148 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 14:38:58:637:991 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..dde15411 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:41:5:225:258 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:41:6:224:905 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 14:41:7:270:642 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-30 14:41:8:226:667 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 14:41:8:269:835 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 14:41:9:268:101 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:41:9:309:458 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 14:41:19:226:190 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 14:41:19:313:537 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 14:41:19:355:628 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..ec5a1fb0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 14:41:31:846:14 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 14:41:32:845:475 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 14:41:33:892:60 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 14:41:34:848:599 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 14:41:34:892:862 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 14:41:35:888:893 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 14:41:35:930:905 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 14:41:45:844:324 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 14:41:45:929:306 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 14:41:45:970:589 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..e36fb5ae --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:8:27:135:951 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:8:28:136:492 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:8:29:140:346 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:8:30:160:310 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 15:8:31:182:721 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:8:31:225:192 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 15:8:31:738:807 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..420b9bd4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:10:46:202:534 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:10:47:200:141 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:10:48:207:579 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:10:49:227:41 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 15:10:59:690:21 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 15:11:0:712:428 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..cb06de20 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:11:24:21:284 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:11:25:18:193 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:11:26:26:182 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:11:27:39:910 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 15:11:37:564:461 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 15:11:38:625:910 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..48a3c04b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:12:46:987:70 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:12:47:985:510 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:12:48:992:132 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:12:50:12:529 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 15:13:0:485:639 +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-3-30 15:13:1:657:222 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..db3c36a9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:13:22:792:401 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:13:23:794:121 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:13:24:835:651 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:13:25:840:760 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:13:25:932:99 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 15:13:27:800:838 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 15:13:28:449:387 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..d8a72116 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:14:31:647:494 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:14:32:653:242 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 15:14:33:693:89 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 15:14:34:677:644 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 15:14:34:740:867 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:14:36:659:905 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 15:14:37:315:467 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c3a589e2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:15:34:273:576 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:15:35:275:9 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:15:36:278:624 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:15:37:338:816 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 15:15:38:278:234 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:15:38:318:891 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 15:15:38:894:604 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..a421da98 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:16:54:376:682 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:16:55:378:143 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:16:56:446:454 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:16:57:425:591 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 15:16:58:379:578 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:17:0:379:573 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 15:17:0:889:549 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..34b64868 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:17:28:269:655 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:17:29:265:316 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 15:17:30:273:947 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 15:17:31:329:804 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 15:17:32:273:827 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 15:17:32:319:296 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 15:17:32:889:515 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..f6eab4c6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:18:3:15:538 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:18:4:20:657 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:18:5:18:298 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 15:18:6:20:477 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 15:18:7:46:471 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 15:18:8:20:418 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 15:18:17:625:107 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 15:18:18:764:435 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 15:18:19:910:780 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..98b2136d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:18:41:763:703 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:18:42:759:476 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 15:18:43:762:408 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 15:18:44:768:459 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 15:18:45:783:978 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 15:18:46:766:70 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 15:18:56:404:194 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 15:18:57:606:584 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 15:18:58:623:232 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..977d3dc5 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,44 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:4:32:192:287 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:4:33:190:58 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:4:34:195:303 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2022-3-30 15:4:36:191:869 +Q5 finished at: 2022-3-30 15:4:36:193:179 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:4:37:193:357 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 15:4:47:191:229 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 15:4:47:279:641 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 15:4:47:321:946 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..928a7963 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,28 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:5:4:14:690 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:5:5:15:919 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:5:6:17:667 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 15:5:8:17:421 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 15:5:8:418:664 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..b4562a26 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,30 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:5:31:492:901 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:5:32:490:384 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:5:33:495:564 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 15:5:35:494:497 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 15:5:35:538:509 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 15:5:35:939:561 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..271b913c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,30 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:6:5:655:867 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:6:6:654:657 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:6:7:658:646 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 15:6:9:656:322 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:6:9:697:428 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 15:6:10:99:441 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..768e4c1a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:7:55:234:612 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:7:56:219:945 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 15:7:57:227:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 15:7:59:271:717 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 15:7:59:318:480 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 15:7:59:719:147 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..e0d640e3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:6:41:312:897 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:6:42:311:938 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 15:6:43:359:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 15:6:44:315:4 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 15:6:46:318:701 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 15:6:46:819:579 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..38474274 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 15:7:16:979:650 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 15:7:17:983:96 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 15:7:19:35:218 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 15:7:19:985:703 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 15:7:21:985:363 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 15:7:22:486:113 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..7ba63bfe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:25:15:782:299 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:25:16:783:556 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:25:17:800:113 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:25:18:788:8 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:25:18:806:64 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:25:18:823:797 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 19:25:19:798:70 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:25:19:811:186 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:25:29:782:548 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 19:25:29:816:702 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 19:25:29:847:847 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:25:29:860:781 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..0b696aea --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:26:22:912:757 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:26:23:925:3 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:26:24:933:243 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:26:25:939:534 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:26:25:972:52 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:26:26:96:642 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 19:26:27:617:622 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..8952c524 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:27:22:611:401 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:27:23:617:615 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:27:24:632:247 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:27:25:651:812 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:27:25:685:606 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 19:27:26:615:903 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:27:26:633:385 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 19:27:27:615:955 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:27:37:609:43 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 19:27:37:639:903 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 19:27:37:669:367 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:27:37:682:851 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..49591aa0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:29:51:473:956 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:29:52:474:83 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:29:53:496:342 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:29:54:496:425 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:29:54:515:605 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:29:54:534:286 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 19:29:55:477:11 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:29:55:495:612 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:30:5:473:97 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 19:30:5:507:957 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 19:30:5:541:432 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:30:5:556:466 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..0286065a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:28:0:759:266 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:28:1:759:549 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 19:28:2:777:65 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 19:28:2:791:612 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 19:28:3:783:30 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 19:28:3:799:18 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 19:28:3:815:686 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:28:4:761:245 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:28:14:760:339 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 19:28:14:794:515 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-3-30 19:28:14:827:437 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-3-30 19:28:14:862:85 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 19:28:14:877:731 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..fc6e043c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:28:45:175:734 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:28:46:175:393 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 19:28:47:195:818 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 19:28:48:193:78 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 19:28:48:209:598 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:28:48:226:796 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 19:28:49:176:417 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:28:49:194:757 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:28:59:176:404 + Q10-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q10 finished at: 2022-3-30 19:28:59:212:539 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:28:59:228:707 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..e41616e9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:30:22:275:731 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:30:23:274:768 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:30:24:272:840 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q4 finished at: 2022-3-30 19:30:25:296:868 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 19:30:26:293:381 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 19:30:27:316:965 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-3-30 19:30:28:278:729 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 19:30:29:280:990 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q9 finished at: 2022-3-30 19:30:30:291:389 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:30:31:278:45 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:30:32:277:713 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:30:33:279:437 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:30:43:276:423 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 19:30:43:312:748 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 19:30:43:348:615 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 19:30:43:364:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..875ee1d8 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:34:1:521:280 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:34:2:520:15 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:34:3:519:773 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q4 finished at: 2022-3-30 19:34:4:556:482 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-3-30 19:34:5:523:178 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:34:5:541:799 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-3-30 19:34:6:539:627 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 19:34:6:559:264 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 19:34:6:576:535 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-3-30 19:34:7:542:530 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 19:34:7:559:4 + Q12-T4 execute sql: 'BEGIN;' + Q12 finished at: 2022-3-30 19:34:17:519:578 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-3-30 19:34:17:553:899 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-3-30 19:34:17:586:802 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 19:34:17:601:548 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c0997a1a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,244 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:33:20:851:641 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:33:21:853:811 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:33:22:854:429 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 19:33:23:853:671 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q5 finished at: 2022-3-30 19:33:24:870:284 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 19:33:25:874:981 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q7 finished at: 2022-3-30 19:33:26:857:427 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 19:33:26:875:361 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 19:33:27:874:270 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 19:33:27:894:323 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,0) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-3-30 19:33:28:871:754 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:33:28:887:377 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-3-30 19:33:29:867:546 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 19:33:29:880:503 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 19:33:39:852:591 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 19:33:39:884:689 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 19:33:39:915:381 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 19:33:39:929:62 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..31bb18ef --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:30:59:687:393 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:31:0:691:611 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:31:1:696:534 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 19:31:2:708:642 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 19:31:3:713:976 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 19:31:4:733:478 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-3-30 19:31:5:690:289 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-3-30 19:31:6:696:596 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' + Q9 finished at: 2022-3-30 19:31:7:707:349 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:31:8:689:839 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:31:9:694:783 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:31:10:696:785 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:31:20:690:514 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 19:31:20:724:815 + Q15-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + (1) expected_result: + + (2) expected_result: + + (3) expected_result: + + (4) expected_result: + + (5) expected_result: + + (6) expected_result: + + + Q15 finished at: 2022-3-30 19:31:20:758:767 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 19:31:20:774:28 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..7d8dee93 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,125 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:31:49:640:166 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:31:50:637:902 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:31:51:638:427 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q4 finished at: 2022-3-30 19:31:52:664:269 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 19:31:53:657:384 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 19:31:54:660:294 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q7 finished at: 2022-3-30 19:31:55:641:541 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-3-30 19:31:56:639:201 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-3-30 19:31:57:639:200 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:31:58:643:404 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:31:59:640:647 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:32:0:641:676 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:32:10:639:961 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + *(1) expected_result: + (0,1,0,0) (2,0,2,0) + *(2) expected_result: + (0,1,0,0) (2,0,2,0) + *(3) expected_result: + (0,1,0,0) (2,0,2,0) + *(4) expected_result: + (0,1,0,0) (2,0,2,0) + *(5) expected_result: + (0,1,0,0) (2,0,2,0) + *(6) expected_result: + (0,1,0,0) (2,0,2,0) + + Q14 finished at: 2022-3-30 19:32:10:676:212 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q15 finished at: 2022-3-30 19:32:10:710:962 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 19:32:10:726:766 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..0d6439f4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,159 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:35:8:961:622 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:35:9:963:322 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:35:10:960:634 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q4 finished at: 2022-3-30 19:35:11:982:693 +Q5-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q5 finished at: 2022-3-30 19:35:12:19:258 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-3-30 19:35:13:8:111 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-3-30 19:35:13:32:499 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 19:35:13:55:596 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-3-30 19:35:13:979:240 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 19:35:14:9:469 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:35:14:24:34 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-3-30 19:35:14:964:470 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 19:35:14:981:795 + Q14-T4 execute sql: 'BEGIN;' + Q14 finished at: 2022-3-30 19:35:24:961:686 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q15 finished at: 2022-3-30 19:35:24:996:697 + Q16-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q16 finished at: 2022-3-30 19:35:25:30:147 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-3-30 19:35:25:44:967 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..fafbe4a1 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,183 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:32:49:521:848 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:32:50:520:955 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:32:51:520:643 +Q4-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q4 finished at: 2022-3-30 19:32:52:545:204 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q5 finished at: 2022-3-30 19:32:53:544:435 + Q6-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-3-30 19:32:53:563:404 + Q7-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q7 finished at: 2022-3-30 19:32:53:598:711 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-3-30 19:32:53:618:959 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 19:32:53:637:851 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-3-30 19:32:54:540:0 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-3-30 19:32:54:557:75 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-3-30 19:32:54:590:768 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-3-30 19:32:54:607:723 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 19:32:54:625:805 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-3-30 19:32:55:541:895 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 19:32:55:561:338 + Q17-T4 execute sql: 'BEGIN;' + Q17 finished at: 2022-3-30 19:33:5:520:244 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) (2,0,2,1) + *(1) expected_result: + (0,1,0,2) (2,0,2,1) + *(2) expected_result: + (0,1,0,2) (2,0,2,1) + *(3) expected_result: + (0,1,0,2) (2,0,2,1) + *(4) expected_result: + (0,1,0,2) (2,0,2,1) + *(5) expected_result: + (0,1,0,2) (2,0,2,1) + *(6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-3-30 19:33:5:556:135 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-3-30 19:33:5:590:786 + Q20-T4 execute opt: 'COMMIT'; + Q20 finished at: 2022-3-30 19:33:5:606:230 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..12fae00c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:24:35:408:267 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:24:36:411:943 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 19:24:37:425:513 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 19:24:38:413:977 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 19:24:38:432:919 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 19:24:40:9:225 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..37552168 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:24:2:317:953 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:24:3:315:998 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 19:24:4:338:713 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 19:24:5:318:660 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 19:24:5:335:276 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 19:24:6:335:200 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:24:6:351:637 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 19:24:16:315:79 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 19:24:16:346:869 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 19:24:16:362:62 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f14c3d0b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:55:52:117:213 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:55:53:120:678 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 18:55:54:121:869 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:55:55:148:550 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 18:55:55:207:199 +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 18:55:57:132:405 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 18:55:57:761:140 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..8af03b98 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:56:12:393:498 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:56:13:396:829 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 18:56:14:398:334 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:56:15:431:534 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 18:56:15:490:209 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:56:15:620:266 +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 18:56:17:98:306 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..6c45c55d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:56:30:671:768 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:56:31:675:584 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 18:56:32:676:946 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:56:33:709:718 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 18:56:34:692:857 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:56:34:710:435 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 18:56:35:225:231 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..b9a98f28 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:56:49:935:443 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:56:50:948:171 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 18:56:51:956:255 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:56:52:954:149 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 18:56:52:994:305 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 18:56:53:956:428 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 18:56:54:945:2 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 18:56:55:935:585 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 18:57:5:944:234 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 18:57:5:981:210 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 18:57:6:17:852 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 18:57:6:34:629 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..be9485aa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:1:1:942:575 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:1:2:943:945 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:1:3:948:544 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:1:4:982:201 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 19:1:5:32:762 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 19:1:5:947:443 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:1:5:965:93 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 19:1:6:945:353 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:1:16:945:816 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 19:1:16:977:682 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 19:1:17:9:334 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:1:17:23:607 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..42b149a3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:1:21:279:226 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:1:22:280:808 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:1:23:284:671 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:1:24:319:234 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 19:1:24:368:421 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:1:24:385:857 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 19:1:25:284:192 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:1:25:300:990 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 19:1:35:278:838 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 19:1:35:310:830 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 19:1:35:344:129 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:1:35:358:157 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..0a7c36f2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:57:10:320:954 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:57:11:324:376 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q3 finished at: 2022-3-30 18:57:12:341:886 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:57:13:342:548 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-3-30 18:57:13:379:20 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:57:13:509:430 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-3-30 18:57:14:338:885 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 18:57:14:354:370 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 18:57:24:322:355 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-3-30 18:57:24:359:960 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-3-30 18:57:24:398:456 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 18:57:24:415:408 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..4ccf0fcb --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:59:14:729:66 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:59:15:729:970 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 18:59:16:762:682 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 18:59:17:732:541 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 18:59:17:748:801 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:59:17:766:941 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 18:59:18:746:510 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 18:59:18:761:847 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 18:59:28:729:812 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-3-30 18:59:28:788:873 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 18:59:28:805:869 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..788228b4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:55:13:310:286 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:55:14:313:769 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 18:55:15:315:314 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:55:16:343:447 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 18:55:16:401:68 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-3-30 18:55:17:331:585 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 18:55:18:319:962 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 18:55:19:312:954 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 18:55:29:311:906 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 18:55:29:349:299 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 18:55:29:385:857 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 18:55:29:402:408 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2b7d50a0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,72 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:55:33:745:773 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:55:34:748:981 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 18:55:35:750:582 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 18:55:36:776:940 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 18:55:36:837:452 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:55:36:964:639 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 18:55:37:765:819 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 18:55:37:783:619 + Q9-T3 execute sql: 'BEGIN;' + Q9 finished at: 2022-3-30 18:55:47:746:910 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-3-30 18:55:47:784:179 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-3-30 18:55:47:820:952 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 18:55:47:837:686 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..8145c31a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt @@ -0,0 +1,128 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:1:39:631:184 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:1:40:632:492 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:1:41:630:720 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-3-30 19:1:42:636:162 + Q5-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-3-30 19:1:43:651:760 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q6 finished at: 2022-3-30 19:1:43:702:323 + Q7-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-3-30 19:1:44:632:484 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-3-30 19:1:44:665:980 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-3-30 19:1:45:649:811 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:1:45:666:658 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:1:46:637:924 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:1:47:633:318 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:1:57:634:290 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-3-30 19:1:57:682:483 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-3-30 19:1:57:726:972 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 19:1:57:745:900 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..ba7d77af --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,244 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 19:2:2:10:590 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 19:2:3:10:380 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:2:4:8:36 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 19:2:5:8:777 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-3-30 19:2:6:58:388 +Q6-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6 finished at: 2022-3-30 19:2:7:12:617 + Q7-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q7 finished at: 2022-3-30 19:2:8:27:368 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q8 finished at: 2022-3-30 19:2:8:60:275 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-3-30 19:2:9:32:75 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-3-30 19:2:10:40:972 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 19:2:11:10:980 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:2:12:14:532 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 19:2:13:8:101 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 19:2:14:12:489 + Q15-T5 execute sql: 'BEGIN;' + Q15 finished at: 2022-3-30 19:2:24:8:471 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-3-30 19:2:24:43:87 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-3-30 19:2:24:76:567 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 19:2:24:91:459 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..da3bd17d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:2:28:254:32 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:2:29:255:415 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:2:30:253:831 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 19:2:31:257:380 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 19:2:32:273:355 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 19:2:32:312:793 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 19:2:33:254:352 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 19:2:33:284:917 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 19:2:34:271:628 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:2:34:288:492 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:2:35:260:547 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:2:36:255:806 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:2:46:259:33 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-3-30 19:2:46:307:548 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 19:2:46:326:551 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..1efe3d06 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:5:24:348:559 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:5:25:350:35 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:5:26:351:330 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 19:5:27:358:508 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 19:5:28:351:60 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 19:5:28:384:981 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 19:5:29:351:783 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 19:5:29:386:443 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 19:5:30:365:114 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 19:5:30:381:262 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 19:5:31:353:436 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 19:5:32:353:549 + Q13-T4 execute sql: 'BEGIN;' + Q13 finished at: 2022-3-30 19:5:42:351:60 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-3-30 19:5:42:386:154 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 19:5:42:401:889 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..2775eee1 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 18:51:54:338:188 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 18:51:55:336:25 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 18:51:55:354:223 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 18:51:56:359:471 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 18:51:57:336:428 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:51:58:338:218 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 18:52:8:338:106 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 18:52:8:385:488 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 18:52:8:402:451 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..73ef7038 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:52:32:717:958 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:52:33:719:863 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 18:52:34:722:599 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 18:52:35:739:776 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-30 18:52:36:719:167 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:52:37:720:63 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:52:38:720:437 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 18:52:48:720:119 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 18:52:48:757:155 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 18:52:48:774:225 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..5c395c72 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:52:52:907:418 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:52:53:909:176 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 18:52:54:910:73 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 18:52:55:929:308 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 18:52:55:946:640 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-30 18:52:56:908:241 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:52:56:925:843 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 18:53:6:908:903 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-3-30 18:53:6:945:445 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 18:53:6:962:777 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..d1165657 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:53:47:449:867 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:53:48:451:749 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 18:53:49:452:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 18:53:51:468:758 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 18:53:51:486:465 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 18:53:51:888:530 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..cd8190cf --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:52:12:534:486 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:52:13:536:204 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 18:52:14:553:836 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 18:52:15:537:812 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 18:52:16:551:426 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 18:52:17:538:452 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:52:18:534:793 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 18:52:28:535:996 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-3-30 18:52:28:572:760 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 18:52:28:589:684 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..2c0e748d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:53:11:97:69 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:53:12:98:954 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 18:53:13:116:514 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-30 18:53:14:100:962 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 18:53:14:120:450 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 18:53:15:114:343 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:53:15:130:86 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 18:53:25:98:594 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 18:53:25:135:91 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 18:53:25:152:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..e83ffaaa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 18:53:29:267:895 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 18:53:30:267:129 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 18:53:31:285:742 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 18:53:32:268:544 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 18:53:32:287:823 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 18:53:33:282:594 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 18:53:33:298:172 + Q8-T3 execute sql: 'BEGIN;' + Q8 finished at: 2022-3-30 18:53:43:266:896 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 18:53:43:303:403 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 18:53:43:320:409 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..452ca731 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:10:13:689:631 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:10:14:687:502 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:10:15:690:771 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:10:16:691:944 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-3-30 19:10:17:703:995 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:10:17:720:319 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 19:10:18:247:198 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..b4c98724 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:10:31:948:413 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:10:32:952:539 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:10:33:954:36 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:10:34:954:115 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 19:10:45:466:77 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 19:10:46:534:244 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..cc41df0d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:10:51:212:955 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:10:52:216:898 +Q3-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:10:53:217:435 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:10:54:218:780 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 19:11:4:709:566 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 19:11:5:819:419 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..a887993f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,25 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:11:11:473:920 + Q2-T2 execute sql: 'BEGIN;' + Q2 failed reason: [ma-2.0.3][5.6.25]ORA-00600: internal error code, arguments: -6210, Transaction is timeout errcode: 25000 + Q2 failed at: 2022-3-30 19:11:12:675:612 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..2618e765 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:11:29:753:111 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:11:30:753:987 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:11:31:774:500 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:11:32:759:158 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:11:32:777:140 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 19:11:34:756:645 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 19:11:35:377:374 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..f7e38b32 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:11:49:17:734 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:11:50:18:464 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q3 finished at: 2022-3-30 19:11:51:37:469 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-3-30 19:11:52:33:910 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-3-30 19:11:52:51:507 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 19:11:54:21:245 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 19:11:54:649:133 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..5b8ba19c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:12:9:270:628 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:12:10:292:467 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:12:11:274:185 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:12:12:304:22 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 19:12:13:272:765 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:12:13:289:433 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 19:12:13:858:194 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..601b5a6b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:12:28:525:866 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:12:29:529:161 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:12:30:530:708 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:12:31:547:933 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-3-30 19:12:32:528:478 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:12:34:528:432 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 19:12:35:61:811 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..3e03195a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:20:18:717:613 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:20:19:718:641 +Q3-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q3 finished at: 2022-3-30 19:20:20:720:722 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-3-30 19:20:21:741:412 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-3-30 19:20:22:719:52 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 19:20:22:736:402 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 19:20:23:279:50 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..2d192d83 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:13:7:49:522 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:13:8:50:446 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:13:9:50:274 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 19:13:10:54:226 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 19:13:11:55:80 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 19:13:12:51:571 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 19:13:21:600:538 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 19:13:22:838:498 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 19:13:23:916:600 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..3080ae23 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,42 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'DROP TABLE t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:13:29:302:362 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:13:30:305:861 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 19:13:31:305:688 +Q4-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q4 finished at: 2022-3-30 19:13:32:307:395 + Q5-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q5 finished at: 2022-3-30 19:13:33:308:38 + Q6-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-3-30 19:13:34:304:700 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 19:13:43:913:998 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 19:13:45:113:180 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 19:13:46:161:32 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..f7802c7b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,44 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:19:39:294:429 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:19:40:295:331 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 19:19:41:297:579 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 19:19:43:294:195 + Q4 finished at: 2022-3-30 19:19:43:295:340 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:19:44:297:884 + Q7-T3 execute sql: 'BEGIN;' + Q7 finished at: 2022-3-30 19:19:54:293:349 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 19:19:54:327:721 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 19:19:54:342:878 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..e9a6db8f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,28 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:8:19:845:726 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:8:20:847:931 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 19:8:21:848:446 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 19:8:23:847:912 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 19:8:24:251:873 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..1eb310be --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt @@ -0,0 +1,30 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:8:38:959:76 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:8:39:960:239 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 19:8:40:961:958 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 19:8:42:959:653 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 19:8:42:975:667 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 19:8:43:376:969 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..70914099 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,30 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:8:58:74:230 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:8:59:75:242 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 19:9:0:77:144 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 19:9:2:74:609 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:9:2:90:828 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 19:9:2:491:621 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..85bfb232 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:9:55:421:580 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:9:56:422:16 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 19:9:57:425:892 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 19:9:59:437:802 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 19:9:59:453:708 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 19:9:59:854:330 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..6da3c51a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:9:16:189:125 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:9:17:189:824 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 19:9:18:206:921 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 19:9:19:191:508 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 19:9:21:192:331 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 19:9:21:693:51 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9b4c3934 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,37 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 19:9:35:309:198 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 19:9:36:310:130 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 19:9:37:327:82 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 19:9:38:312:114 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 19:9:40:312:608 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 19:9:40:813:361 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..0f0afd1f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:49:44:519:835 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:49:45:523:589 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:49:46:574:282 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 11:49:47:526:908 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:49:47:545:311 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:49:47:565:725 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 11:49:48:536:400 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:49:48:550:257 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:49:58:541:272 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:49:58:557:144 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..68dac16b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:50:22:114:453 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:50:23:115:164 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:50:24:133:406 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:50:25:118:103 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:50:25:134:59 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:50:25:152:16 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 11:50:26:114:731 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:50:26:132:724 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:50:36:136:995 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:50:36:153:857 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..78afc0a7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:50:52:561:80 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:50:53:566:394 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:50:54:580:597 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 11:50:55:579:652 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:50:55:595:672 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 11:50:56:561:627 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:50:56:579:192 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 11:50:57:563:174 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:51:7:579:780 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:51:7:594:758 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..e721e520 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:52:11:923:264 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:52:12:919:738 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:52:13:939:151 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 11:52:14:939:993 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:52:14:956:899 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:52:14:974:707 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 11:52:15:920:312 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:52:15:937:527 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:52:25:939:296 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:52:25:955:464 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..753c1df6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,73 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:51:20:923:108 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:51:21:924:509 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 11:51:22:940:363 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 11:51:22:953:758 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 11:51:23:944:399 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 11:51:23:959:174 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 11:51:23:975:576 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:51:24:925:239 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-3-30 11:51:34:945:895 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 11:51:34:980:449 + Q11-T3 execute sql: 'DROP TABLE mytab;' + Q11 finished at: 2022-3-30 11:51:35:15:127 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:51:35:31:559 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..80f3c80a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:51:46:587:226 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:51:47:585:970 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 11:51:48:608:793 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 11:51:49:603:315 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 11:51:49:618:758 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:51:49:634:259 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 11:51:50:587:981 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:51:50:604:740 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-3-30 11:52:0:601:536 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:52:0:614:847 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..f4d8f7ad --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:52:41:196:837 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:52:42:197:225 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:52:43:195:979 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q4 finished at: 2022-3-30 11:52:44:216:324 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:52:45:217:777 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 11:52:46:215:931 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-3-30 11:52:47:197:144 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:52:48:198:401 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-3-30 11:52:49:196:926 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:52:50:197:856 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:52:51:199:740 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:52:52:203:257 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:53:2:209:365 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:53:2:222:535 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..eceb51d2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:55:31:339:67 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:55:32:339:712 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:55:33:340:787 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q4 finished at: 2022-3-30 11:55:34:357:595 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:55:35:341:508 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:55:35:358:247 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-3-30 11:55:36:359:444 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:55:36:375:603 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:55:36:393:323 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-3-30 11:55:37:355:799 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 11:55:37:369:777 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-3-30 11:55:47:358:717 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 11:55:47:373:361 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..b6217c5d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,206 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:54:56:97:919 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:54:57:100:616 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:54:58:102:92 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 11:54:59:101:830 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 11:55:0:116:160 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 11:55:1:122:136 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7 finished at: 2022-3-30 11:55:2:104:912 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 11:55:2:124:401 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 11:55:3:103:496 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:55:3:122:43 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-3-30 11:55:4:118:697 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:55:4:134:721 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-3-30 11:55:5:113:384 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 11:55:5:126:706 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 11:55:15:118:283 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 11:55:15:133:144 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..20babe59 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:53:18:552:217 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:53:19:560:655 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:53:20:552:811 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 11:53:21:572:819 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:53:22:575:87 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 11:53:23:572:392 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-3-30 11:53:24:553:945 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:53:25:560:648 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-3-30 11:53:26:553:469 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:53:27:554:748 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:53:28:562:703 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:53:29:555:319 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 11:53:39:584:650 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:53:39:603:122 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..fca08cca --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:53:51:20:106 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:53:52:18:266 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:53:53:21:34 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0) + (5) expected_result: + (2,0) + (6) expected_result: + (2,0) + +Q4 finished at: 2022-3-30 11:53:54:42:85 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 11:53:55:36:568 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,0) + *(2) expected_result: + null + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 11:53:56:36:404 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-3-30 11:53:57:21:390 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-3-30 11:53:58:18:218 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-3-30 11:53:59:19:260 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:54:0:22:563 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:54:1:21:914 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:54:2:21:145 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + *(1) expected_result: + (0,0) (1,0) (2,0) + *(2) expected_result: + (0,0) (1,0) (2,0) + *(3) expected_result: + (0,0) (1,0) (2,0) + *(4) expected_result: + (0,0) (1,0) (2,0) + *(5) expected_result: + (0,0) (1,0) (2,0) + *(6) expected_result: + (0,0) (1,0) (2,0) + + Q13 finished at: 2022-3-30 11:54:12:38:131 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:54:12:53:237 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..a391a55e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:56:3:630:410 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:56:4:630:440 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:56:5:627:985 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q4 finished at: 2022-3-30 11:56:6:650:201 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q5 finished at: 2022-3-30 11:56:6:684:474 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 11:56:7:652:682 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-3-30 11:56:7:672:359 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 11:56:7:690:855 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 11:56:8:643:940 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 11:56:8:672:6 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:56:8:685:625 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-3-30 11:56:9:630:718 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 11:56:9:649:334 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-3-30 11:56:19:644:140 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 11:56:19:657:629 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..40c6050f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,161 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:54:24:100:355 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:54:25:100:370 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:54:26:102:402 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q4 finished at: 2022-3-30 11:54:27:119:727 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q5 finished at: 2022-3-30 11:54:28:119:491 + Q6-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-3-30 11:54:28:136:859 + Q7-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q7 finished at: 2022-3-30 11:54:28:167:827 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:54:28:182:972 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:54:28:200:7 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-3-30 11:54:29:128:303 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-3-30 11:54:29:145:696 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-3-30 11:54:29:181:238 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-3-30 11:54:29:198:398 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:54:29:217:194 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-3-30 11:54:30:121:118 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 11:54:30:136:331 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-3-30 11:54:40:123:619 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 11:54:40:141:194 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..1aff7300 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:49:9:548:88 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:49:10:548:68 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 11:49:11:567:813 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 11:49:12:551:43 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 11:49:12:570:104 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-3-30 11:49:13:548:308 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:49:13:566:163 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 11:49:23:566:323 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:49:23:582:159 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..ad2eb5ba --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,57 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:48:25:500:617 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:48:26:501:348 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:48:27:520:303 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 11:48:28:502:880 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 11:48:28:521:866 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 11:48:29:517:333 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:48:29:532:728 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 11:48:39:515:488 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:48:39:528:477 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..44cb7b95 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:53:11:605:963 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:53:12:605:5 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:53:13:609:603 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:53:14:605:846 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 1:53:14:694:258 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 1:53:16:606:337 + Q7 finished at: 2022-3-30 1:53:16:607:117 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 1:53:17:608:114 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-3-30 1:54:48:647:929 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 1:54:48:688:116 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..359947e6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:55:2:11:283 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:55:3:10:471 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:55:4:13:942 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:55:5:11:357 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 1:55:5:145:658 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:55:5:188:459 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-3-30 1:55:6:12:86 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 1:55:6:55:187 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-3-30 1:56:37:52:756 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 1:56:37:92:805 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..3046922a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:56:50:415:527 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:56:51:415:457 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:56:52:418:636 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:56:53:415:489 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 1:56:54:459:498 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:56:54:502:905 + Q5 finished at: 2022-3-30 1:56:54:504:167 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 1:56:55:416:822 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 1:58:26:457:419 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 1:58:26:497:597 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..9a064703 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:58:39:815:661 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:58:40:815:238 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 1:58:41:861:418 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:58:42:817:211 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 1:58:42:857:878 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 1:58:43:859:163 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 1:58:44:817:40 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 1:58:45:815:780 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:0:16:857:266 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:0:16:897:529 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ee14140d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:4:6:984:399 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:4:7:984:519 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:4:8:987:202 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 2:4:10:26:879 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 2:4:10:112:220 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 2:4:10:984:834 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 2:4:11:28:657 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 2:4:11:984:154 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:5:43:26:387 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:5:43:66:955 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..5b1d2a55 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:5:56:383:930 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:5:57:382:987 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:5:58:387:110 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 2:5:59:426:226 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 2:5:59:509:616 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:5:59:550:986 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 2:6:0:385:334 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:6:0:428:313 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:7:31:426:410 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:7:31:466:633 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..7484b7f9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:0:30:222:883 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:0:31:222:117 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 2:0:32:267:944 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-3-30 2:0:33:223:796 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-3-30 2:0:33:264:632 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:0:33:306:881 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 2:0:34:264:966 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:0:34:306:143 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 2:2:5:267:128 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:2:5:307:421 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..7bed423e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:2:18:578:182 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:2:19:577:485 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 2:2:20:628:439 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 2:2:21:578:770 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 2:2:21:619:296 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:2:21:665:383 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 2:2:22:620:414 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:2:22:661:517 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-3-30 2:3:53:619:889 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:3:53:660:350 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..526b871a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:49:32:801:693 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:49:33:800:961 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:49:34:804:370 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:49:35:805:875 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 1:49:35:889:70 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 1:49:36:845:696 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 1:49:37:803:19 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 1:49:38:803:713 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 1:51:9:843:945 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 1:51:9:884:130 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ece0f0fa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:51:23:206:323 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:51:24:205:467 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:51:25:209:146 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 1:51:26:206:439 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 1:51:26:289:373 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:51:26:331:968 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 1:51:27:250:373 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 1:51:27:293:461 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 1:52:58:248:885 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 1:52:58:289:110 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..0c21125c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:58:38:289:252 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:58:39:288:797 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:58:40:286:159 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:58:41:292:576 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-3-30 11:58:42:290:326 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q6 finished at: 2022-3-30 11:58:42:325:524 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-3-30 11:58:43:288:27 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-3-30 11:58:43:320:262 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-3-30 11:58:44:309:545 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:58:44:329:210 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:58:45:291:253 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:58:46:288:968 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:58:56:307:48 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:58:56:322:710 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..1f621fc0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 11:57:5:201:63 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 11:57:6:201:321 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:57:7:204:376 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 11:57:8:201:234 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:57:9:221:677 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-3-30 11:57:10:202:659 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q7 finished at: 2022-3-30 11:57:11:224:211 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 11:57:11:259:540 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 11:57:12:203:651 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 11:57:13:220:852 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 11:57:14:204:519 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:57:15:203:798 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 11:57:16:203:153 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:57:26:201:304 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 11:57:26:233:938 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 11:57:26:248:927 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c2fcbdc3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:57:37:538:47 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:57:38:537:353 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:57:39:536:840 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:57:40:540:815 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 11:57:41:538:908 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 11:57:41:587:695 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 11:57:42:537:946 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 11:57:42:570:377 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 11:57:43:556:966 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:57:43:574:483 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:57:44:539:821 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:57:45:538:891 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 11:57:55:565:367 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:57:55:580:327 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..484a457d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:58:6:522:638 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:58:7:523:414 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:58:8:523:612 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 11:58:9:525:886 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 11:58:10:525:303 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 11:58:10:559:740 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 11:58:11:524:83 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 11:58:11:575:369 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 11:58:12:540:706 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:58:12:557:902 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:58:13:532:173 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:58:14:525:941 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:58:24:541:898 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:58:24:557:272 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..4d3579ce --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 1:36:49:476:448 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 1:36:50:477:25 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:36:50:520:535 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 1:36:51:520:431 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 1:36:52:477:240 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:36:53:476:414 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-3-30 1:38:24:519:850 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-3-30 1:38:24:577:362 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..f2602568 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:40:28:109:912 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:40:29:109:793 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:40:30:112:531 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 1:40:31:234:768 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-30 1:40:32:227:612 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:40:33:113:870 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:40:34:112:443 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 1:42:5:151:706 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 1:42:5:191:835 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..81c2cd61 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:42:18:465:184 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:42:19:463:645 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:42:20:467:383 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 1:42:21:507:283 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 1:42:21:547:573 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-30 1:42:22:465:9 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:42:22:507:842 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 1:43:53:506:240 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 1:43:53:546:264 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..0aaf36c7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:47:43:403:135 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:47:44:402:616 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 1:47:45:405:904 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 1:47:47:446:683 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 1:47:47:490:116 + Q4 finished at: 2022-3-30 1:47:47:491:218 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 1:47:48:404:564 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 1:49:19:446:181 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 1:49:19:486:432 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..bd025b07 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:38:37:796:410 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:38:38:793:285 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 1:38:39:839:955 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 1:38:40:796:182 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 1:38:41:838:81 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:38:42:798:286 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:38:43:794:523 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 1:40:14:835:580 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..25dca004 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,54 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:44:6:777:293 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:44:7:777:881 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 1:44:8:821:872 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-30 1:44:9:777:870 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 1:44:9:820:5 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 1:44:10:822:820 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:44:10:864:405 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-3-30 1:45:41:818:902 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..7b26d283 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:45:55:46:744 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:45:56:46:53 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 1:45:57:92:211 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 1:45:58:47:470 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 1:45:58:89:556 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 1:45:59:90:208 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 1:45:59:131:383 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 1:47:30:88:608 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 1:47:30:129:586 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..0980ec2b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,55 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:28:6:763:856 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:28:7:762:625 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:28:8:766:71 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 2:28:9:763:374 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 2:28:10:810:561 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:28:10:853:542 + Q5 finished at: 2022-3-30 2:28:10:854:960 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:28:10:897:52 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:29:41:805:465 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:29:41:845:860 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..15192306 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:29:55:164:733 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:29:56:163:81 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:29:57:166:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 2:29:58:163:864 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 2:30:8:610:322 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 2:30:9:670:156 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..061be1aa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:59:36:935:94 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:59:37:932:988 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:59:38:937:98 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:59:39:933:250 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 11:59:50:351:535 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 11:59:51:443:488 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..7aeaf3fd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 12:0:24:31:802 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 12:0:25:29:339 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 12:0:26:39:822 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 12:0:27:30:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 12:0:37:455:637 +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-3-30 12:0:38:637:937 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..af80e8af --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:35:22:761:24 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:35:23:761:116 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 2:35:24:806:287 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 2:35:25:762:326 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 2:35:25:802:850 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 2:35:27:762:101 +Q7-T1 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 2:35:27:762:677 +Q7 finished at: 2022-3-30 2:35:27:804:719 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:36:58:802:810 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:36:58:852:136 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..99e9014a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:37:12:167:418 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:37:13:166:453 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 2:37:14:212:446 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 2:37:15:168:376 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 2:37:15:209:159 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 2:37:17:168:94 + Q7 finished at: 2022-3-30 2:37:17:169:21 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:37:18:169:823 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:38:49:209:99 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:38:49:249:93 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9cd1d678 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:39:2:564:132 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:39:3:563:221 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:39:4:567:349 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 2:39:5:606:430 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 2:39:6:564:753 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 2:39:6:607:860 + Q5 finished at: 2022-3-30 2:39:6:609:176 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 2:39:7:565:629 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:40:38:605:930 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:40:38:646:968 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..66176ef3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:40:51:968:680 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:40:52:967:849 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:40:53:971:577 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 2:40:55:11:119 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 2:40:55:969:95 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:40:57:971:102 + Q5 finished at: 2022-3-30 2:40:57:972:269 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 2:40:58:14:484 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:42:29:10:712 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:42:29:50:954 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..ec06ee6e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,53 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:42:42:372:612 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:42:43:367:404 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:42:44:370:218 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 2:42:45:409:682 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 2:42:46:367:882 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 2:42:46:411:70 + Q5 finished at: 2022-3-30 2:42:46:412:548 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:42:46:454:947 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 2:44:17:409:256 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 2:44:17:449:567 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1b80c968 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:44:30:815:144 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:44:31:814:490 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 2:44:32:814:166 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 2:44:33:817:990 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 2:44:34:815:226 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 2:44:35:815:42 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 2:44:45:358:947 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 2:44:46:559:178 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 2:44:47:617:854 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..cba51a83 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 12:1:15:194:239 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 12:1:16:195:330 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 12:1:17:194:338 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 12:1:18:197:446 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 12:1:19:196:276 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 12:1:20:196:669 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 12:1:29:718:51 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 12:1:30:919:688 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 12:1:32:2:779 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..248350cd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,43 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:15:22:153:754 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:15:23:152:931 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:15:24:156:454 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 2:15:26:154:776 + Q4 finished at: 2022-3-30 2:15:26:155:920 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:15:27:155:404 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-3-30 2:16:58:195:543 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 2:16:58:236:408 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..d4c5a3ff --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:17:11:508:50 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:17:12:507:159 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:17:13:510:818 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 2:17:15:510:384 + Q4 finished at: 2022-3-30 2:17:15:511:830 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 2:17:16:510:855 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-3-30 2:18:47:550:330 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-3-30 2:18:47:608:431 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:18:47:649:430 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..77e7f922 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:19:0:921:57 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:19:1:920:171 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:19:2:923:559 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 2:19:4:922:99 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 2:19:4:965:77 + Q4 finished at: 2022-3-30 2:19:4:966:427 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 2:19:5:922:393 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-3-30 2:20:36:962:722 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:20:37:2:925 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..534802cd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:20:50:282:532 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:20:51:280:610 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:20:52:284:16 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 2:20:54:282:86 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 2:20:54:325:231 + Q4 finished at: 2022-3-30 2:20:54:326:648 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 2:20:54:368:937 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-3-30 2:22:25:323:80 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:22:25:363:872 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..5104474a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:26:18:359:498 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:26:19:358:523 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 2:26:20:362:493 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 2:26:22:402:989 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 2:26:22:446:30 + Q4 finished at: 2022-3-30 2:26:22:447:308 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 2:26:22:489:761 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 2:27:53:400:846 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:27:53:441:16 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..764602f6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:22:38:636:664 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:22:39:635:640 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 2:22:40:681:719 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 2:22:41:637:526 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 2:22:43:637:393 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 2:22:43:638:115 +Q6 finished at: 2022-3-30 2:22:43:680:466 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 2:24:14:678:261 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:24:14:718:736 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..516c449b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,50 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 2:24:28:4:455 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 2:24:28:998:695 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 2:24:30:44:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 2:24:31:0:376 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 2:24:33:0:145 + Q6 finished at: 2022-3-30 2:24:33:0:983 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 2:24:34:1:698 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 2:26:5:41:136 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 2:26:5:81:445 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..8891d0f3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:38:21:527:981 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:38:22:524:492 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 10:38:23:548:301 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 10:38:24:526:402 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 10:38:24:539:605 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 10:38:24:554:758 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 10:38:25:547:832 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 10:38:25:564:792 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 10:39:56:548:96 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 10:39:56:564:200 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..4022b671 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:9:7:283:344 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:9:8:286:676 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 1:9:9:325:743 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 1:9:10:288:460 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 1:9:10:330:744 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 1:9:10:374:812 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 1:9:11:984:610 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..88f8bc67 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:47:56:929:266 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:47:57:927:215 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 10:47:58:949:950 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 10:47:59:945:642 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 10:47:59:961:999 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 10:48:0:930:449 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 10:48:0:948:958 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 10:48:1:929:505 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 10:48:42:947:33 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 10:48:42:962:174 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..d51bbafe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:40:59:522:135 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:41:0:522:664 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 10:41:1:542:564 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 10:41:2:555:889 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 10:41:2:571:910 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 10:41:2:587:979 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 10:41:3:522:746 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 10:41:3:538:923 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 10:41:44:540:396 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 10:41:44:554:754 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..6fb7b741 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,73 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:42:25:600:868 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:42:26:601:46 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 10:42:27:620:902 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 10:42:27:636:527 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 10:42:28:621:311 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 10:42:28:637:212 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 10:42:28:654:908 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 10:42:29:603:216 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-3-30 10:43:10:622:401 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 10:43:10:658:771 + Q11-T3 execute sql: 'DROP TABLE mytab;' + Q11 finished at: 2022-3-30 10:43:10:694:695 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 10:43:10:712:19 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..026092d0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:46:46:243:39 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:46:47:244:507 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 10:46:48:262:85 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 10:46:49:267:689 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 10:46:49:285:664 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 10:46:49:306:904 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 10:46:50:243:722 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 10:46:50:260:260 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-3-30 10:47:31:259:847 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 10:47:31:274:504 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..5463ddbf --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:1:21:958:17 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:1:22:957:349 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:1:23:956:901 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q4 finished at: 2022-3-30 11:1:24:978:239 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:1:25:977:149 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 11:1:26:975:920 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-3-30 11:1:27:959:194 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:1:28:957:806 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-3-30 11:1:29:957:432 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:1:30:961:0 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:1:31:964:391 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:1:32:959:559 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:2:13:979:567 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:2:13:996:599 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..bbdea31f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:50:20:529:345 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:50:21:539:380 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 10:50:22:528:354 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q4 finished at: 2022-3-30 10:50:23:549:30 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 10:50:24:532:386 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 10:50:24:550:90 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-3-30 10:50:25:545:915 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 10:50:25:567:844 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 10:50:25:585:680 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-3-30 10:50:26:548:721 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 10:50:26:564:153 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-3-30 10:51:7:550:907 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 10:51:7:567:289 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..bbfcb606 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:51:46:91:440 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:51:47:92:478 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 10:51:48:90:375 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 10:51:49:91:302 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 10:51:50:109:915 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 10:51:51:112:551 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7 finished at: 2022-3-30 10:51:52:93:499 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 10:51:52:108:964 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 10:51:53:92:155 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 10:51:53:108:406 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-3-30 10:51:54:111:43 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 10:51:54:126:812 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-3-30 10:51:55:114:167 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 10:51:55:128:370 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 10:52:36:113:268 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 10:52:36:129:404 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..cb759377 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:53:8:529:675 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:53:9:525:840 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 10:53:10:531:659 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 10:53:11:549:104 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 10:53:12:543:328 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 10:53:13:550:950 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-3-30 10:53:14:530:912 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-3-30 10:53:15:526:857 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-3-30 10:53:16:531:483 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 10:53:17:532:67 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 10:53:18:540:572 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 10:53:19:533:371 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 10:54:0:551:993 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 10:54:0:568:626 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..ab140a73 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:55:16:115:883 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:55:17:114:310 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 10:55:18:114:850 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0) + (5) expected_result: + (2,0) + (6) expected_result: + (2,0) + +Q4 finished at: 2022-3-30 10:55:19:137:90 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 10:55:20:133:277 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,0) + *(2) expected_result: + null + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 10:55:21:134:397 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-3-30 10:55:22:117:124 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-3-30 10:55:23:115:194 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-3-30 10:55:24:115:370 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 10:55:25:118:383 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 10:55:26:116:658 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 10:55:27:116:983 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + *(1) expected_result: + (0,0) (1,0) (2,0) + *(2) expected_result: + (0,0) (1,0) (2,0) + *(3) expected_result: + (0,0) (1,0) (2,0) + *(4) expected_result: + (0,0) (1,0) (2,0) + *(5) expected_result: + (0,0) (1,0) (2,0) + *(6) expected_result: + (0,0) (1,0) (2,0) + + Q13 finished at: 2022-3-30 10:56:8:130:94 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 10:56:8:143:776 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..3b45690d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 10:57:43:540:556 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 10:57:44:538:222 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 10:57:45:537:209 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q4 finished at: 2022-3-30 10:57:46:562:581 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q5 finished at: 2022-3-30 10:57:46:600:881 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 10:57:47:555:801 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-3-30 10:57:47:572:309 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 10:57:47:590:25 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 10:57:48:554:520 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 10:57:48:584:92 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 10:57:48:598:857 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-3-30 10:57:49:541:515 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 10:57:49:561:309 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-3-30 10:58:30:559:961 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 10:58:30:574:291 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..a24bdfaf --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:0:4:85:415 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:0:5:87:449 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:0:6:84:246 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q4 finished at: 2022-3-30 11:0:7:104:343 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q5 finished at: 2022-3-30 11:0:8:107:511 + Q6-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-3-30 11:0:8:124:950 + Q7-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q7 finished at: 2022-3-30 11:0:8:160:121 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 11:0:8:177:44 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:0:8:195:944 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-3-30 11:0:9:100:539 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-3-30 11:0:9:113:981 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-3-30 11:0:9:142:96 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-3-30 11:0:9:155:717 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:0:9:171:177 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-3-30 11:0:10:104:439 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 11:0:10:118:946 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-3-30 11:0:51:105:780 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 11:0:51:121:343 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..d684b5af --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 1:5:30:978:497 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 1:5:31:982:46 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 1:5:33:21:375 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 1:5:33:983:780 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 1:5:34:27:696 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 1:5:35:579:675 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..a1340414 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:2:41:50:598 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:2:42:52:118 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:2:43:68:83 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 11:2:44:55:69 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 11:2:44:72:865 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 11:2:45:66:317 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:2:45:80:191 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 11:3:26:68:244 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 11:3:26:82:454 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..0232ca96 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:8:43:40:383 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:8:44:38:992 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:8:45:42:904 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 0:8:46:39:869 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 0:8:46:71:737 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 0:8:48:41:423 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 0:8:48:643:104 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..24a0b934 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:3:53:445:5 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:3:54:442:807 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:3:55:447:680 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 11:3:56:443:638 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:3:56:475:429 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:3:56:492:91 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 11:3:58:145:911 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1f00f317 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:12:21:216:310 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:12:22:214:759 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:12:23:219:105 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 0:12:24:215:614 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 0:12:25:234:915 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 0:12:25:255:227 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 0:12:25:752:887 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..25c322c0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:5:12:679:679 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:5:13:682:639 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:5:14:716:855 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 11:5:15:683:875 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:5:15:700:925 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 11:5:16:696:877 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 11:5:17:683:181 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:5:18:679:968 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:5:59:705:914 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:5:59:720:914 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..93573a57 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:19:36:897:790 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:19:37:895:943 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:19:38:900:128 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 0:19:39:913:670 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 0:19:39:945:626 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 0:19:40:897:856 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 0:19:40:915:982 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 0:19:41:896:350 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 0:21:12:916:797 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 0:21:12:933:443 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..9e04073f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:21:26:105:741 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:21:27:104:547 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:21:28:108:650 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 0:21:29:122:261 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 0:21:29:155:83 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 0:21:29:169:870 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 0:21:30:106:238 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:21:30:124:128 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 0:23:1:125:733 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 0:23:1:143:258 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..87096e7b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:16:0:522:206 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:16:1:521:81 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 0:16:2:542:860 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-3-30 0:16:3:522:780 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-3-30 0:16:3:538:775 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 0:16:3:555:641 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 0:16:4:539:690 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:16:4:555:911 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 0:17:35:541:639 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 0:17:35:558:206 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..3c43d21c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:17:48:688:247 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:17:49:686:698 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 0:17:50:708:663 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 0:17:51:688:289 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 0:17:51:703:230 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 0:17:51:721:287 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 0:17:52:705:580 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:17:52:721:783 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-3-30 0:19:23:707:325 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 0:19:23:723:631 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..3dd93911 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:6:42:551:676 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:6:43:548:620 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:6:44:553:68 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 11:6:45:550:619 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:6:45:579:668 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 11:6:46:571:634 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 11:6:47:550:721 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:6:48:552:866 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 11:7:29:570:599 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 11:7:29:586:464 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..e2f0b73d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:6:54:834:997 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:6:55:834:118 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:6:56:838:250 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 0:6:57:834:808 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 0:6:57:866:745 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 0:6:57:885:642 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 0:6:58:853:868 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:6:58:872:92 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 0:8:29:854:391 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 0:8:29:870:817 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..e8aaab13 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:11:56:146:229 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:11:57:145:798 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:11:58:143:970 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:11:59:151:101 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-3-30 11:12:0:146:861 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q6 finished at: 2022-3-30 11:12:0:183:372 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-3-30 11:12:1:146:581 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-3-30 11:12:1:177:765 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-3-30 11:12:2:164:150 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:12:2:181:259 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:12:3:149:903 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:12:4:146:776 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:12:14:165:850 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:12:14:181:461 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..db3d0a5f --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 11:9:44:7:297 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 11:9:45:6:730 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:9:46:6:596 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 11:9:47:8:469 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 11:9:48:30:195 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-3-30 11:9:49:9:142 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q7 finished at: 2022-3-30 11:9:50:24:791 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 11:9:50:59:790 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 11:9:51:9:19 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 11:9:52:25:160 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 11:9:53:8:964 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:9:54:10:566 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 11:9:55:6:324 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:10:5:7:476 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 11:10:5:41:396 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 11:10:5:57:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..476748d0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:10:25:914:509 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:10:26:909:845 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:10:27:910:52 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:10:28:912:343 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 11:10:29:912:346 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 11:10:29:989:44 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 11:10:30:912:215 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 11:10:30:948:353 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 11:10:31:927:714 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:10:31:945:678 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:10:32:912:322 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:10:33:913:81 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 11:10:43:929:192 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:10:43:945:308 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..bd0e9d2d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:11:11:390:150 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:11:12:389:354 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:11:13:389:549 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 11:11:14:391:944 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 11:11:15:391:500 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 11:11:15:435:70 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 11:11:16:392:364 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 11:11:16:434:84 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 11:11:17:407:579 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 11:11:17:425:743 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 11:11:18:391:479 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 11:11:19:391:150 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 11:11:29:407:564 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 11:11:29:423:34 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..caf4d1f7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-29 23:52:22:458:226 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-29 23:52:23:459:409 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-29 23:52:23:479:289 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-29 23:52:24:475:931 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-29 23:52:25:459:686 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-29 23:52:26:458:409 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-3-29 23:53:57:478:828 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-3-29 23:53:57:513:143 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..8444dd50 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-29 23:56:0:801:298 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-29 23:56:1:799:916 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-29 23:56:2:804:31 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-29 23:56:3:818:355 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-29 23:56:4:801:783 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-29 23:56:5:800:340 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-29 23:56:6:803:508 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-29 23:57:37:821:289 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-29 23:57:37:837:815 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..a41aed78 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-29 23:57:50:990:244 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-29 23:57:51:988:872 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-29 23:57:52:992:730 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-29 23:57:54:7:15 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-29 23:57:54:22:543 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-29 23:57:54:990:575 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-29 23:57:55:8:486 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-29 23:59:26:34:501 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-29 23:59:26:51:416 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..4bf09357 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:3:15:527:364 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:3:16:526:153 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:3:17:530:398 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 0:3:19:546:443 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 0:3:19:564:446 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 0:3:19:964:449 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7523331a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-29 23:54:10:630:679 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-29 23:54:11:630:669 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-29 23:54:12:650:385 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-29 23:54:13:630:945 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-29 23:54:14:648:468 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-29 23:54:15:631:330 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-29 23:54:16:630:963 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-29 23:55:47:649:750 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..6b4f92fb --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-29 23:59:39:184:813 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-29 23:59:40:183:354 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-29 23:59:41:205:128 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-29 23:59:42:184:755 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-29 23:59:42:201:389 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-29 23:59:43:202:123 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-29 23:59:43:218:327 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-3-30 0:1:14:204:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..2add5c74 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:1:27:334:874 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:1:28:333:304 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 0:1:29:355:723 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 0:1:30:340:174 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 0:1:30:357:772 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 0:1:31:352:35 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 0:1:31:368:250 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 0:3:2:354:53 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 0:3:2:370:531 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..582297b2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:43:34:163:576 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:43:35:162:744 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:43:36:166:297 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 0:43:37:163:725 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 0:43:38:181:979 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:43:38:199:629 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 0:43:38:699:570 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..02c56956 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:13:5:704:623 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:13:6:704:184 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:13:7:707:499 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:13:8:705:193 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 11:13:19:128:218 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 11:13:20:209:842 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..3eeaa006 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:13:34:881:442 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:13:35:881:822 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:13:36:885:428 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:13:37:882:61 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 11:13:48:305:126 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 11:13:49:386:796 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..972bfec3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:14:6:591:210 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:14:7:590:432 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:14:8:594:354 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:14:9:592:297 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 11:14:20:12:853 +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-3-30 11:14:21:192:978 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..1266c54d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:14:38:518:92 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:14:39:512:586 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 11:14:40:536:662 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 11:14:41:514:475 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 11:14:41:531:537 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 11:14:43:515:104 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 11:14:44:116:641 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..29b8f1b7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:52:39:342:173 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:52:40:345:559 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 0:52:41:384:496 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 0:52:42:347:188 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 0:52:42:389:408 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 0:52:44:348:273 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 0:52:44:948:967 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..5f97a67b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:15:12:828:221 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:15:13:830:597 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:15:14:831:219 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 11:15:15:845:880 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 11:15:16:828:231 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:15:16:845:664 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 11:15:17:346:449 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..289ca181 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:56:18:655:861 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:56:19:659:575 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:56:20:659:62 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 0:56:21:705:341 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 0:56:22:656:727 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 0:56:24:658:541 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 0:56:25:159:25 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..fa99a756 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:15:39:68:57 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:15:40:66:306 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:15:41:70:275 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 11:15:42:85:258 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 11:15:43:67:965 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 11:15:43:85:191 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 11:15:43:585:673 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..b875d1a4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:16:52:699:360 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:16:53:696:667 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:16:54:699:602 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:16:55:703:24 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 11:16:56:699:149 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 11:16:57:701:133 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 11:17:7:218:242 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 11:17:8:420:290 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 11:17:9:500:939 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..ef8172c2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:18:12:810:897 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:18:13:807:884 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 11:18:14:808:934 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 11:18:15:810:698 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 11:18:16:808:861 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 11:18:17:811:98 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 11:18:27:326:356 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 11:18:28:529:609 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 11:18:29:609:100 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..095c211b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,43 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:18:45:773:291 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:18:46:773:746 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:18:47:775:459 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 11:18:49:773:473 + Q4 finished at: 2022-3-30 11:18:49:775:57 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 11:18:50:775:833 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-3-30 11:19:0:790:313 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 11:19:0:805:123 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..a9597cb9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:32:40:453:128 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:32:41:451:968 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:32:42:456:94 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 0:32:44:455:106 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 0:32:44:854:998 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..a0da25f8 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:19:30:198:19 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:19:31:196:274 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:19:32:198:117 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 11:19:34:195:436 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 11:19:34:212:24 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 11:19:34:614:101 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..c725e4c6 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:36:18:723:28 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:36:19:721:737 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 0:36:20:726:57 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 0:36:22:723:678 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 0:36:22:741:759 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 0:36:23:141:663 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..4117d4d7 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:20:19:766:653 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:20:20:767:415 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 11:20:21:769:612 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 11:20:23:783:771 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 11:20:23:801:128 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 11:20:24:202:901 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..2fce26a0 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 11:21:11:470:244 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 11:21:12:471:700 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 11:21:13:487:967 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 11:21:14:474:65 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 11:21:16:474:820 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 11:21:16:975:645 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..82ac4dc9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 0:39:55:991:362 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 0:39:56:990:82 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 0:39:58:11:427 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 0:39:58:991:855 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 0:40:0:992:646 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 0:40:1:494:60 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..a5e025b4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..4139416e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Timeout + +wat_dda_full_write_skew_c2: Timeout + +wat_dda_full_write_skew_committed: Timeout + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Timeout + +wat_mda_step_wat_c2: Timeout + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..204724fe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:51:4:827:349 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:51:5:826:672 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:51:6:847:499 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:51:7:829:310 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:51:7:844:657 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:51:7:861:384 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 21:51:8:845:962 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:51:8:862:460 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:51:18:909:858 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:51:18:923:378 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..705a7fab --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:51:42:373:770 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:51:43:372:521 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:51:44:392:119 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:51:45:376:15 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:51:45:388:875 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:51:45:404:120 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 21:51:47:75:482 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..6f9c0436 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:52:8:29:236 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:52:9:30:452 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:52:10:46:240 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:52:11:47:67 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:52:11:63:488 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 21:52:12:28:524 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:52:12:44:861 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 21:52:13:30:531 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:52:23:41:9 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:52:23:53:49 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..3b4ab581 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:53:30:864:359 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:53:31:865:477 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:53:32:883:185 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:53:33:884:47 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:53:33:904:475 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:53:33:921:743 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 21:53:34:865:329 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:53:34:881:536 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:53:44:883:418 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:53:44:898:149 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..66a6884d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,73 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:52:35:313:361 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:52:36:316:62 +Q3-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q3 finished at: 2022-3-30 21:52:37:332:843 +Q4-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q4 finished at: 2022-3-30 21:52:37:347:322 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-3-30 21:52:38:337:437 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-3-30 21:52:38:354:941 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:52:38:374:258 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:52:39:315:318 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-3-30 21:52:49:328:992 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-3-30 21:52:49:359:44 + Q11-T3 execute sql: 'DROP TABLE mytab;' + Q11 finished at: 2022-3-30 21:52:49:390:186 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:52:49:404:449 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..86dad322 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:53:1:830:45 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:53:2:827:725 +Q3-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q3 finished at: 2022-3-30 21:53:3:851:121 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-3-30 21:53:4:845:543 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-3-30 21:53:4:861:722 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:53:4:878:59 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-3-30 21:53:5:830:688 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:53:5:850:293 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-3-30 21:53:15:847:916 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:53:15:863:371 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..a56adf4a --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:54:1:993:807 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:54:2:992:78 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:54:3:991:210 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q4 finished at: 2022-3-30 21:54:5:11:546 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:54:6:12:141 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 21:54:7:9:41 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-3-30 21:54:8:60:976 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 21:54:8:992:626 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-3-30 21:54:9:991:861 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:54:10:994:210 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:54:11:994:751 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:54:12:993:234 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 21:54:23:13:131 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:54:23:29:605 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..15bba300 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,107 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:58:7:877:770 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:58:8:879:98 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:58:9:879:508 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q4 finished at: 2022-3-30 21:58:10:896:67 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:58:11:882:11 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:58:11:899:641 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-3-30 21:58:12:897:18 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 21:58:12:912:783 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:58:12:930:167 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-3-30 21:58:13:894:669 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 21:58:13:908:721 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-3-30 21:58:23:893:198 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 21:58:23:906:628 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..9172e92d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:56:20:115:620 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:56:21:118:547 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:56:22:118:962 + Q4-T4 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 21:56:23:116:80 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 21:56:24:134:167 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 21:56:25:140:214 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7 finished at: 2022-3-30 21:56:26:123:311 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 21:56:26:142:437 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 21:56:27:116:954 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:56:27:133:9 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-3-30 21:56:28:137:625 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:56:28:154:227 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-3-30 21:56:29:131:245 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-3-30 21:56:29:144:739 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 21:56:39:136:314 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 21:56:39:151:817 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..07e27489 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:54:35:993:653 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:54:36:993:252 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:54:37:996:226 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q4 finished at: 2022-3-30 21:54:39:22:148 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:54:40:12:535 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 21:54:41:17:188 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-3-30 21:54:41:995:233 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-3-30 21:54:42:994:195 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-3-30 21:54:43:996:948 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:54:44:996:0 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:54:45:995:519 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:54:46:998:854 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 21:54:57:7:973 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:54:57:20:775 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..9d606181 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:55:11:263:422 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:55:12:262:919 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:55:13:261:956 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0) + (5) expected_result: + (2,0) + (6) expected_result: + (2,0) + +Q4 finished at: 2022-3-30 21:55:14:284:484 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,0) + *(6) expected_result: + null + + Q5 finished at: 2022-3-30 21:55:15:282:787 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,0) + *(2) expected_result: + null + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-3-30 21:55:16:280:557 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-3-30 21:55:17:265:14 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-3-30 21:55:18:263:717 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-3-30 21:55:19:262:912 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:55:20:266:134 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:55:21:265:646 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:55:22:264:247 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + *(1) expected_result: + (0,0) (1,0) (2,0) + *(2) expected_result: + (0,0) (1,0) (2,0) + *(3) expected_result: + (0,0) (1,0) (2,0) + *(4) expected_result: + (0,0) (1,0) (2,0) + *(5) expected_result: + (0,0) (1,0) (2,0) + *(6) expected_result: + (0,0) (1,0) (2,0) + + Q13 finished at: 2022-3-30 21:55:32:279:643 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:55:32:293:512 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..56f1320d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,139 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:59:3:201:955 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:59:4:200:71 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:59:5:201:126 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q4 finished at: 2022-3-30 21:59:6:222:526 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q5 finished at: 2022-3-30 21:59:6:257:424 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-3-30 21:59:7:219:880 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-3-30 21:59:7:235:416 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:59:7:251:724 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-3-30 21:59:8:220:239 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 21:59:8:251:295 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:59:8:266:620 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-3-30 21:59:9:202:957 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-3-30 21:59:9:220:863 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-3-30 21:59:19:219:125 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-3-30 21:59:19:234:222 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..b138bf84 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,163 @@ +#### db_type: ob #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:55:48:244:662 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:55:49:238:447 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:55:50:240:570 +Q4-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q4 finished at: 2022-3-30 21:55:51:258:761 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q5 finished at: 2022-3-30 21:55:52:256:706 + Q6-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-3-30 21:55:52:271:653 + Q7-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q7 finished at: 2022-3-30 21:55:52:300:642 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-3-30 21:55:52:314:773 + Q9-T2 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:55:52:330:656 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-3-30 21:55:53:265:364 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-3-30 21:55:53:281:256 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-3-30 21:55:53:313:864 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-3-30 21:55:53:329:613 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:55:53:347:104 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-3-30 21:55:54:256:662 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-3-30 21:55:54:271:468 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-3-30 21:56:4:258:292 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-3-30 21:56:4:273:442 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0c8c95a3 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:50:39:167:709 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:50:40:168:966 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 21:50:41:183:891 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 21:50:42:170:958 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 21:50:42:186:612 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 21:50:43:768:225 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..f45bf00c --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:50:14:286:484 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:50:15:288:510 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:50:16:305:268 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 21:50:17:291:968 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 21:50:17:309:23 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 21:50:18:302:672 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:50:18:316:230 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 21:50:28:346:409 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:50:28:402:12 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..61b1beb9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:29:55:344:402 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:29:56:344:722 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:29:57:347:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:29:58:345:911 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:29:58:377:246 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:30:0:347:73 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 21:30:0:947:757 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..c3f45324 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:30:35:754:772 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:30:36:757:609 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:30:37:757:640 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:30:38:758:450 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:30:38:791:465 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:30:38:808:713 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q7 failed at: 2022-3-30 21:30:40:457:675 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..b0c2b398 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:31:8:324:255 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:31:9:325:111 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:31:10:327:761 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:31:11:326:792 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 21:31:12:340:232 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:31:12:355:106 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 21:31:12:855:81 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..9c3e0e65 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:31:39:836:108 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:31:40:838:555 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:31:41:856:771 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:31:42:836:700 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:31:42:852:546 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 21:31:43:855:156 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:31:44:837:201 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:31:45:836:241 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:31:55:855:334 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:31:55:871:302 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..cbd71093 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:33:17:605:391 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:33:18:605:432 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:33:19:608:492 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:33:20:622:527 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:33:20:651:557 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 21:33:21:605:829 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:33:21:620:926 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 21:33:22:605:974 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:33:32:625:509 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:33:32:641:33 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..65207f8e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:33:55:489:529 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:33:56:488:655 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:33:57:490:998 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:33:58:507:255 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:33:58:539:33 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:33:58:553:584 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 21:33:59:488:596 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:33:59:504:27 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:34:9:511:325 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:34:9:527:590 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2be6d448 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,62 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:32:11:105:306 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:32:12:104:343 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 21:32:13:125:498 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:32:14:106:26 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:32:14:123:12 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:32:14:141:638 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 21:32:15:122:723 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:32:15:139:450 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-3-30 21:32:25:121:524 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:32:25:137:282 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..e143335e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:32:50:69:28 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:32:51:70:757 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q3 finished at: 2022-3-30 21:32:52:89:265 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-3-30 21:32:53:75:385 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-3-30 21:32:53:91:848 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:32:53:109:967 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-3-30 21:32:54:84:904 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:32:54:99:198 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-3-30 21:33:4:88:630 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:33:4:103:993 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a36a90ec --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:28:24:902:362 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:28:25:902:434 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:28:26:905:469 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:28:27:904:171 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:28:27:936:556 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-3-30 21:28:28:920:537 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:28:29:904:633 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:28:30:904:868 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:28:40:919:786 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:28:40:935:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c76cea69 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,60 @@ +#### db_type: ob #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:29:6:764:540 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:29:7:764:117 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:29:8:769:403 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:29:9:773:13 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:29:9:806:179 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:29:9:822:353 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 21:29:10:782:389 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:29:10:799:155 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-3-30 21:29:20:780:521 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-3-30 21:29:20:794:287 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..0a56bf75 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:34:55:425:811 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:34:56:427:987 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:34:57:426:371 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 21:34:58:428:444 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-3-30 21:34:59:428:742 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q6 finished at: 2022-3-30 21:34:59:466:571 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-3-30 21:35:0:427:149 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-3-30 21:35:0:458:588 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-3-30 21:35:1:441:320 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:35:1:457:408 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:35:2:430:467 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:35:3:428:717 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 21:35:13:447:363 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:35:13:462:302 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..65510760 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,208 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 21:35:29:335:592 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 21:35:30:329:633 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:35:31:330:934 + Q4-T2 execute sql: 'BEGIN;' + Q4 finished at: 2022-3-30 21:35:32:330:954 + Q5-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q5 finished at: 2022-3-30 21:35:33:350:436 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-3-30 21:35:34:331:606 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q7 finished at: 2022-3-30 21:35:35:348:843 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 21:35:35:377:878 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-3-30 21:35:36:333:157 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-3-30 21:35:37:347:951 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-3-30 21:35:38:332:365 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:35:39:333:813 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-3-30 21:35:40:331:164 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:35:50:331:994 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-3-30 21:35:50:363:933 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-3-30 21:35:50:378:455 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..01d60eaa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,108 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:36:14:985:144 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:36:15:982:248 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:36:16:982:344 +Q4-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q4 finished at: 2022-3-30 21:36:17:985:666 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q5 finished at: 2022-3-30 21:36:18:984:560 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 21:36:19:17:478 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-3-30 21:36:19:983:778 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-3-30 21:36:20:17:364 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-3-30 21:36:21:1:425 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:36:21:19:132 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:36:21:985:121 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:36:22:990:221 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-3-30 21:36:33:1:273 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:36:33:16:480 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..38fbbd23 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,105 @@ +#### db_type: ob #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:36:49:204:240 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:36:50:205:387 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:36:51:204:310 +Q4-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q4 finished at: 2022-3-30 21:36:52:206:275 + Q5-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q5 finished at: 2022-3-30 21:36:53:207:576 + Q6-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q6 finished at: 2022-3-30 21:36:53:244:255 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-3-30 21:36:54:206:164 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-3-30 21:36:54:239:84 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-3-30 21:36:55:221:967 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-3-30 21:36:55:238:750 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-3-30 21:36:56:207:630 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-3-30 21:36:57:206:615 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-3-30 21:37:7:220:575 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-3-30 21:37:7:234:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..d7cb261b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: ob #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- + Q1-T2 execute sql: 'BEGIN;' + Q1 finished at: 2022-3-30 21:25:23:926:179 +Q2-T1 execute sql: 'BEGIN;' +Q2 finished at: 2022-3-30 21:25:24:925:271 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:25:24:941:995 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 21:25:25:945:381 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 21:25:26:925:854 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:25:27:926:477 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-3-30 21:25:37:942:44 + Q8-T3 execute sql: 'DROP TABLE t1;' + Q8 finished at: 2022-3-30 21:25:37:973:912 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..dad62d72 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:26:27:770:639 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:26:28:770:843 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:26:29:773:714 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 21:26:30:788:991 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-3-30 21:26:31:770:894 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:26:32:771:167 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:26:33:772:911 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 21:26:43:792:935 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:26:43:809:616 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..290f4fe4 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,52 @@ +#### db_type: ob #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:26:59:419:986 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:27:0:422:489 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:27:1:423:961 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-3-30 21:27:2:440:404 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 21:27:2:455:908 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-3-30 21:27:3:420:630 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:27:3:436:665 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-3-30 21:27:13:439:775 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:27:13:454:440 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..df4dbad5 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:25:58:504:858 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:25:59:504:573 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:26:0:523:522 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-3-30 21:26:1:507:392 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-3-30 21:26:2:520:517 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:26:3:507:24 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:26:4:505:241 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-3-30 21:26:14:522:816 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..903a0e81 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,56 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:27:25:365:372 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:27:26:363:367 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 21:27:27:390:185 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-3-30 21:27:28:366:163 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 21:27:28:381:333 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 21:27:29:382:504 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:27:29:397:467 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-3-30 21:27:39:384:433 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..8486d10b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: ob #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:27:49:951:473 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:27:50:951:261 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q3 finished at: 2022-3-30 21:27:51:972:856 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-3-30 21:27:52:953:984 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-3-30 21:27:52:971:498 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-3-30 21:27:53:968:414 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:27:53:983:584 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-3-30 21:28:3:970:856 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-3-30 21:28:3:986:31 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..6594e95d --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:42:41:561:249 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:42:42:563:529 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:42:43:564:856 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-3-30 21:42:44:565:588 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-3-30 21:42:45:577:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:42:45:593:318 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 21:42:46:95:559 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..a0bce9a5 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:43:9:821:357 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:43:10:824:242 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:43:11:824:717 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:43:12:826:172 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 21:43:23:256:783 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 21:43:24:323:606 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4d0a8bf2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:43:38:252:72 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:43:39:252:71 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:43:40:253:536 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:43:41:253:750 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 21:43:51:679:167 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q6 failed at: 2022-3-30 21:43:52:759:667 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..c94c5313 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,33 @@ +#### db_type: ob #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:44:4:675:265 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:44:5:675:718 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:44:6:678:241 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:44:7:677:529 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q5 failed at: 2022-3-30 21:44:18:96:42 +Q7 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q7 failed at: 2022-3-30 21:44:19:276:733 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..30b92a15 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:46:5:230:649 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:46:6:226:528 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:46:7:250:678 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:46:8:230:251 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:46:8:243:333 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 21:46:10:229:236 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 21:46:10:831:614 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7fc958f9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:46:54:306:785 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:46:55:305:469 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q3 finished at: 2022-3-30 21:46:56:324:403 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-3-30 21:46:57:309:688 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-3-30 21:46:57:326:894 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:46:59:308:101 +Q6 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q6 failed at: 2022-3-30 21:46:59:909:25 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9b2c3940 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:47:26:270:928 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:47:27:268:177 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:47:28:273:963 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:47:29:285:702 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 21:47:30:271:404 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:47:30:289:591 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 21:47:30:788:577 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..3cf6a8fe --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:47:57:255:998 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:47:58:256:851 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:47:59:257:16 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:48:0:274:456 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-3-30 21:48:1:254:833 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:48:3:256:438 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 21:48:3:758:291 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..241c21d2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:48:23:576:583 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:48:24:577:426 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:48:25:579:259 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-3-30 21:48:26:599:303 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-3-30 21:48:27:577:138 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-3-30 21:48:27:592:673 + Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q5 failed at: 2022-3-30 21:48:28:94:924 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..d993c679 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:48:49:665:885 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:48:50:666:38 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:48:51:666:630 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 21:48:52:669:140 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 21:48:53:666:935 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 21:48:54:668:916 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 21:49:4:191:381 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 21:49:5:392:130 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 21:49:6:472:577 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..ef055556 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: ob #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:49:19:67:710 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:49:20:71:194 + Q3-T3 execute sql: 'BEGIN;' + Q3 finished at: 2022-3-30 21:49:21:69:855 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-3-30 21:49:22:70:386 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q5 finished at: 2022-3-30 21:49:23:73:163 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-3-30 21:49:24:72:586 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q6 failed at: 2022-3-30 21:49:33:597:910 + Q8 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 + Q8 failed at: 2022-3-30 21:49:34:797:675 +Q9 failed reason: [ma-2.0.3][5.6.25]ORA-30006: resource busy; acquire with WAIT timeout expired errcode: HY000 +Q9 failed at: 2022-3-30 21:49:35:879:744 + +Test Result: Timeout +Reason: Transaction execution timeout + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e7d202d2 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,43 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:37:22:83:278 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:37:23:85:400 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:37:24:86:555 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-3-30 21:37:26:83:672 + Q4 finished at: 2022-3-30 21:37:26:85:518 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:37:27:87:589 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-3-30 21:37:37:106:34 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-3-30 21:37:37:123:347 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..2009a5e9 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,29 @@ +#### db_type: ob #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:37:51:712:884 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:37:52:712:593 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:37:53:715:788 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-3-30 21:37:55:714:857 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 21:37:56:115:344 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..03ab38cd --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:38:54:267:720 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:38:55:269:968 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:38:56:270:504 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-3-30 21:38:58:268:336 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-3-30 21:38:58:284:133 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 21:38:58:687:33 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..4cc674fa --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,31 @@ +#### db_type: ob #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:39:33:626:200 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:39:34:622:53 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:39:35:625:690 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-3-30 21:39:37:623:109 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:39:37:639:257 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 21:39:38:40:681 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..3a955931 --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:41:35:538:731 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:41:36:539:743 +Q3-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q3 finished at: 2022-3-30 21:41:37:541:759 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-3-30 21:41:39:559:409 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-3-30 21:41:39:578:779 + Q4 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 + Q4 failed at: 2022-3-30 21:41:39:979:744 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..179f308e --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:40:7:744:814 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:40:8:743:374 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 21:40:9:765:153 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 21:40:10:745:992 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-3-30 21:40:12:745:775 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 21:40:13:247:486 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..ca66513b --- /dev/null +++ b/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,38 @@ +#### db_type: ob #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN;' +Q1 finished at: 2022-3-30 21:40:41:85:411 + Q2-T2 execute sql: 'BEGIN;' + Q2 finished at: 2022-3-30 21:40:42:84:862 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q3 finished at: 2022-3-30 21:40:43:103:208 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-3-30 21:40:44:87:565 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-3-30 21:40:46:87:401 +Q5 failed reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction errcode: 25000 +Q5 failed at: 2022-3-30 21:40:46:588:83 + +Test Result: Rollback +Reason: [ma-2.0.3][5.6.25]ORA-08177: can't serialize access for this transaction + diff --git a/test_result/disttibuted_result/readme.txt b/test_result/disttibuted_result/readme.txt new file mode 100644 index 00000000..2be4d524 --- /dev/null +++ b/test_result/disttibuted_result/readme.txt @@ -0,0 +1,6 @@ +ob: Oceanbase +crdb: CockroachDB +gp: greenplum + +single: centrailized test +dist: distributed test \ No newline at end of file diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..7f3a83c6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:26:20:661:649 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:26:20:700:288 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:26:21:696:330 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:26:21:732:617 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:26:21:767:754 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:26:21:802:615 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-23 22:26:22:699:857 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:26:22:738:400 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:26:42:699:695 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:26:42:738:554 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:26:42:777:367 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:26:42:815:901 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..2b5c0f97 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:26:47:110:74 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:26:47:148:851 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:26:48:144:683 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:26:48:180:697 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:26:48:215:759 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:26:48:250:615 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-23 22:26:49:148:548 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:26:49:187:266 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:27:9:148:90 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:27:9:186:942 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + (2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-23 22:27:9:225:595 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:27:9:263:892 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..cd1b51b7 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:27:13:559:594 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:27:13:598:216 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:27:14:594:245 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:27:14:632:336 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:27:14:667:554 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-23 22:27:15:597:836 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:27:15:636:489 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 22:27:16:594:506 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:27:36:597:627 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:27:36:636:508 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:27:36:675:181 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:27:36:713:621 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..531db3ef --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:28:33:757:520 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:28:33:796:503 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:28:34:792:261 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:28:34:827:583 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:28:34:862:868 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:28:34:897:732 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-23 22:28:35:795:771 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:28:35:834:260 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:28:55:795:465 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:28:55:834:321 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:28:55:873:197 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:28:55:911:586 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..1bccf08e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:27:40:974:420 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 22:27:41:13:174 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 22:27:41:51:272 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 22:27:42:8:988 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (,) + (1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 22:27:42:44:354 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 22:27:42:79:474 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:27:42:114:828 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:27:43:13:142 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:28:3:12:548 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 22:28:3:51:453 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-4-23 22:28:3:90:80 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-4-23 22:28:3:146:870 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-23 22:28:3:184:928 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..ca9201b4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:28:7:381:599 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-23 22:28:7:420:237 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:28:8:419:874 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + null + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-23 22:28:8:457:723 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-23 22:28:9:420:594 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:28:9:458:996 + Q5 finished at: 2022-4-23 22:28:9:459:555 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:28:9:494:759 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:28:29:381:624 + Q10-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q10 finished at: 2022-4-23 22:28:29:420:781 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:28:29:459:120 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..612576f6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,129 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:29:0:246:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q2 finished at: 2022-4-23 22:29:0:285:134 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:29:1:280:993 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-23 22:29:1:317:705 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 22:29:2:284:455 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-23 22:29:2:323:516 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-4-23 22:29:3:284:602 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-23 22:29:4:281:510 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q9 finished at: 2022-4-23 22:29:5:285:159 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 22:29:6:285:15 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:29:7:281:251 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:29:8:284:667 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-23 22:29:28:282:103 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,0) + (1) expected_result: + (0,1,0,3) (2,0,2,1) + (2) expected_result: + (0,1,0,3) (2,0,2,1) + (3) expected_result: + (0,1,0,3) (2,0,2,1) + (4) expected_result: + (0,1,0,3) (2,0,2,1) + (5) expected_result: + (0,1,0,3) (2,0,2,1) + (6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-4-23 22:29:28:318:330 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-4-23 22:29:28:354:530 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-23 22:29:28:390:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f44e1d07 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,126 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:31:34:464:623 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:31:34:503:772 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:31:35:499:309 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-4-23 22:31:35:536:172 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 22:31:35:571:68 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 22:31:36:502:715 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-4-23 22:31:36:541:884 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-23 22:31:36:580:613 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 22:31:36:619:89 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-4-23 22:31:37:503:161 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-23 22:31:37:541:716 + Q12-T4 execute opt: 'BEGIN' + Q12 finished at: 2022-4-23 22:31:57:500:294 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-4-23 22:31:57:536:531 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-4-23 22:31:57:573:321 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-23 22:31:57:609:82 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..585de452 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,243 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:31:5:16:876 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:31:5:55:824 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:31:6:51:291 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + (14) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:31:6:88:145 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 22:31:7:54:985 + Q6-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-4-23 22:31:7:93:895 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:31:7:133:509 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:31:8:52:338 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-23 22:31:8:88:672 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:31:8:124:529 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,0) + (8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + (12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-4-23 22:31:9:52:566 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:31:9:87:799 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-4-23 22:31:10:55:560 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-23 22:31:10:94:278 + Q15-T5 execute opt: 'BEGIN' + Q15 finished at: 2022-4-23 22:31:30:53:524 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-23 22:31:30:92:278 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + (14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-23 22:31:30:129:832 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-23 22:31:30:166:867 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..91930b7d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,129 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:18:49:141:253 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 15:18:49:178:489 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:18:50:140:342 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-24 15:18:50:214:345 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 15:18:51:136:791 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 15:18:51:203:759 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-4-24 15:18:52:140:939 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-4-24 15:18:53:141:261 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 15:18:55:141:228 + Q9 finished at: 2022-4-24 15:18:55:141:981 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 15:18:56:141:472 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:18:57:137:643 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 15:19:7:146:824 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-24 15:19:7:215:130 + Q15-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-24 15:19:7:249:376 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 15:19:7:283:373 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..3731074d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,126 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:30:5:99:806 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q2 finished at: 2022-4-23 22:30:5:139:674 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:30:6:134:429 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q4 finished at: 2022-4-23 22:30:6:169:841 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 22:30:7:137:679 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-23 22:30:7:178:371 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q7 finished at: 2022-4-23 22:30:8:137:804 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-4-23 22:30:9:137:519 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-4-23 22:30:10:138:418 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 22:30:11:138:457 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:30:12:135:265 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:30:13:139:73 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-23 22:30:33:135:484 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + *(1) expected_result: + (0,1,0,0) (2,0,2,0) + *(2) expected_result: + (0,1,0,0) (2,0,2,0) + *(3) expected_result: + (0,1,0,0) (2,0,2,0) + *(4) expected_result: + (0,1,0,0) (2,0,2,0) + *(5) expected_result: + (0,1,0,0) (2,0,2,0) + *(6) expected_result: + (0,1,0,0) (2,0,2,0) + + Q14 finished at: 2022-4-23 22:30:33:171:970 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q15 finished at: 2022-4-23 22:30:33:208:152 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-23 22:30:33:244:718 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..f7f56eb2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,160 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:32:1:916:887 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-23 22:32:1:955:583 +Q3-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q3 finished at: 2022-4-23 22:32:1:994:125 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 22:32:2:951:435 + Q5-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q5 finished at: 2022-4-23 22:32:2:986:887 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-4-23 22:32:3:22:264 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:32:3:57:522 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:32:3:954:748 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-4-23 22:32:3:993:777 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-23 22:32:4:32:804 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:32:4:71:175 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-4-23 22:32:4:955:963 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-23 22:32:4:994:672 + Q14-T4 execute opt: 'BEGIN' + Q14 finished at: 2022-4-23 22:32:24:952:550 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q15 finished at: 2022-4-23 22:32:24:989:86 + Q16-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + + Q16 finished at: 2022-4-23 22:32:25:25:347 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-4-23 22:32:25:61:221 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..74dc87fb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,182 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:30:37:577:986 +Q2-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q2 finished at: 2022-4-23 22:30:37:616:743 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:30:38:612:649 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + (3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q4 finished at: 2022-4-23 22:30:38:649:316 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:30:38:684:513 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-23 22:30:38:719:906 + Q7-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7 finished at: 2022-4-23 22:30:38:755:71 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 22:30:38:789:851 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:30:39:615:921 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + (1) expected_result: + (2,0,2,0) + (2) expected_result: + (2,0,2,0) + (3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-4-23 22:30:39:654:833 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-4-23 22:30:39:693:333 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-4-23 22:30:39:731:977 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-4-23 22:30:39:770:415 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 22:30:39:808:899 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-4-23 22:30:40:616:376 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-23 22:30:40:654:850 + Q17-T4 execute opt: 'BEGIN' + Q17 finished at: 2022-4-23 22:31:0:613:509 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + (1) expected_result: + (0,1,0,2) (2,0,2,1) + (2) expected_result: + (0,1,0,2) (2,0,2,1) + (3) expected_result: + (0,1,0,2) (2,0,2,1) + (4) expected_result: + (0,1,0,2) (2,0,2,1) + (5) expected_result: + (0,1,0,2) (2,0,2,1) + (6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-4-23 22:31:0:649:932 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-4-23 22:31:0:686:193 + Q20-T4 execute opt: 'COMMIT'; + Q20 finished at: 2022-4-23 22:31:0:722:175 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..af0d0c10 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:17:30:198:67 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 15:17:30:238:631 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:17:31:215:989 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 15:17:31:302:868 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 15:17:31:345:211 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 15:17:32:198:652 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:17:32:238:912 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:17:42:198:410 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 15:17:42:278:909 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:17:42:318:907 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..371cdb27 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:17:5:96:342 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 15:17:5:134:260 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:17:6:100:650 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 15:17:6:176:758 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 15:17:6:214:796 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 15:17:7:98:49 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:17:7:131:798 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:17:17:101:273 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 15:17:17:179:147 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:17:17:218:350 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..866248bd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:7:22:57:978 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:7:22:99:908 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:7:23:49:28 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:7:23:114:724 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:7:23:147:805 +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 15:7:25:50:42 +Q6 finished at: 2022-4-24 15:7:25:54:225 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:7:26:60:163 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:7:36:52:196 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:7:36:124:110 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-24 15:7:36:159:866 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:7:36:195:407 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..6f73312f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:7:49:266:311 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:7:49:303:13 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:7:50:271:56 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:7:50:352:257 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:7:50:393:86 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:7:50:433:686 +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 finished at: 2022-4-24 15:7:51:266:540 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:7:51:303:131 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:8:1:269:794 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:8:1:350:197 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-24 15:8:1:391:595 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:8:1:431:683 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9e951e51 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:8:15:23:370 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:8:15:60:89 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:8:16:28:1 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:8:16:110:922 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 15:8:17:26:952 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:8:17:63:315 + Q5 finished at: 2022-4-24 15:8:17:63:574 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 15:8:18:28:644 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:8:28:28:270 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,2) + + Q10 finished at: 2022-4-24 15:8:28:108:39 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:8:28:149:109 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:8:28:188:873 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..f91bbc18 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:8:48:623:258 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 15:8:48:663:271 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:8:49:623:155 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:8:49:702:677 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 15:8:49:742:463 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 15:8:50:623:627 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 15:8:51:623:657 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:8:52:623:258 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:9:2:615:989 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:9:2:682:20 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:9:2:714:878 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:9:2:747:475 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..0650df7f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:9:52:359:528 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:9:52:394:245 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:9:53:365:113 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 15:9:53:443:316 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:9:53:481:996 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 15:9:54:360:147 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:9:54:395:113 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 15:9:55:363:721 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:10:5:368:892 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:10:5:445:862 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:10:5:484:205 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:10:5:522:23 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..28fbe0bb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:10:30:31:411 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:10:30:71:81 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:10:31:33:455 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 15:10:31:114:521 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:10:31:159:430 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:10:31:199:696 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 15:10:32:32:37 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:10:32:71:615 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:10:42:28:565 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:10:42:101:528 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:10:42:138:184 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:10:42:174:181 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..a1b4d79f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:9:17:740:209 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-24 15:9:17:774:130 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:9:18:743:675 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:9:18:817:392 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-4-24 15:9:18:854:326 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:9:18:891:483 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-4-24 15:9:19:740:715 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:9:19:774:32 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:9:29:744:153 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-4-24 15:9:29:817:129 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-4-24 15:9:29:853:510 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:9:29:889:760 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..0c379942 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:24:35:16:356 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 12:24:35:51:215 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:24:36:24:441 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 12:24:36:105:481 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 12:24:36:145:870 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:24:36:189:68 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 12:24:37:17:422 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:24:37:49:904 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:24:47:20:659 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-4-24 12:24:47:94:268 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 12:24:47:130:789 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..ee080714 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:10:38:304:959 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-23 22:10:38:343:838 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:10:39:339:504 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:10:39:376:9 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-23 22:10:39:411:203 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-23 22:10:40:343:488 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:10:41:339:901 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:10:42:345:703 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:11:2:343:25 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:11:2:381:941 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:11:2:420:852 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:11:2:458:918 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..4c0e9673 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:6:41:961:776 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:6:42:0:486 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:6:42:959:310 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:6:43:32:423 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:6:43:69:168 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:6:43:105:637 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 15:6:43:961:774 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:6:44:0:23 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:6:53:963:931 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:6:54:47:859 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:6:54:88:927 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:6:54:129:245 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..80b220b0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,129 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:15:10:757:471 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-23 22:15:10:796:246 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:15:11:792:145 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:15:11:827:321 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + (3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + (6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-23 22:15:11:862:761 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 22:15:12:795:491 + Q7-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-4-23 22:15:12:834:337 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-4-23 22:15:12:873:46 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-4-23 22:15:13:796:31 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 22:15:13:834:597 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:15:14:792:527 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:15:15:795:669 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-23 22:15:35:792:916 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,0) + (1) expected_result: + (0,1,0,3) (2,0,2,1) + (2) expected_result: + (0,1,0,3) (2,0,2,1) + (3) expected_result: + (0,1,0,3) (2,0,2,1) + (4) expected_result: + (0,1,0,3) (2,0,2,1) + (5) expected_result: + (0,1,0,3) (2,0,2,1) + (6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-4-23 22:15:35:865:417 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,1) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-4-23 22:15:35:901:892 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-23 22:15:35:937:756 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..e69e61f0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,245 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-24 15:10:53:701:471 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q2 finished at: 2022-4-24 15:10:53:774:481 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-24 15:10:54:698:322 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-4-24 15:10:54:731:728 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 15:10:55:701:311 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q6 finished at: 2022-4-24 15:10:55:773:983 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q7 finished at: 2022-4-24 15:10:55:810:609 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:10:56:705:993 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-24 15:10:56:786:800 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-24 15:10:57:702:472 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 15:10:58:698:721 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:10:59:706:124 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 15:11:0:701:690 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 15:11:1:702:44 + Q15-T5 execute opt: 'BEGIN' + Q15 finished at: 2022-4-24 15:11:11:699:476 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-24 15:11:11:765:149 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-24 15:11:11:798:182 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 15:11:11:830:461 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..850734f7 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,110 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:11:30:538:980 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 15:11:30:575:993 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:11:31:541:652 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 15:11:31:621:297 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 15:11:31:661:15 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:11:32:546:138 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 15:11:32:620:216 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 15:11:32:657:607 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 15:11:33:539:747 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 15:11:33:576:706 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 15:11:34:542:511 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:11:35:548:747 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 15:11:45:538:639 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-24 15:11:45:611:412 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 15:11:45:647:414 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..add1e7a4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,107 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:16:41:864:115 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-23 22:16:41:903:640 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:16:42:898:590 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-23 22:16:42:935:164 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 22:16:42:970:471 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 22:16:43:902:209 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-23 22:16:43:940:850 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-23 22:16:43:979:396 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-23 22:16:44:902:418 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 22:16:44:940:870 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 22:16:45:899:568 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:16:46:902:878 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-23 22:17:6:900:825 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-4-23 22:17:6:937:262 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-23 22:17:6:973:41 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..3f9f872e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,48 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:7:28:341:530 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:7:28:380:244 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:7:29:342:406 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 22:7:29:412:670 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 22:7:30:341:939 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:7:31:338:595 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-23 22:7:51:341:768 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-4-23 22:7:51:418:891 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 22:7:51:457:625 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..de62ac21 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:5:18:425:554 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 15:5:18:459:527 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:5:19:432:250 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 15:5:19:513:530 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 15:5:20:430:404 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:5:21:432:547 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:5:22:426:137 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:5:32:424:815 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 15:5:32:495:778 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:5:32:528:360 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..d70b1b5e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:5:47:661:407 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 15:5:47:700:906 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:5:48:658:827 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 15:5:48:732:868 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 15:5:48:769:812 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 15:5:49:661:926 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:5:49:701:686 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:5:59:655:4 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 15:5:59:733:506 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:5:59:766:619 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..90a4c759 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:10:10:885:420 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:10:10:924:70 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:10:11:919:766 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 22:10:12:923:801 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 22:10:12:962:634 + Q4 finished at: 2022-4-23 22:10:12:962:867 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:10:13:920:840 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:10:33:923:368 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-23 22:10:33:962:200 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:10:34:0:387 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..0085289e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:24:51:263:342 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 12:24:51:296:409 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:24:52:303:553 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 12:24:53:296:323 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:24:55:296:512 + Q4 finished at: 2022-4-24 12:24:55:301:78 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:24:55:342:229 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:25:5:299:971 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:25:5:336:620 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:25:5:373:94 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..677fb69b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:6:11:761:833 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 15:6:11:799:0 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:6:12:763:298 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 15:6:12:837:393 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 15:6:12:874:99 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 15:6:13:762:561 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:6:13:799:88 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:6:23:760:779 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 15:6:23:832:548 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:6:23:867:775 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..e45de0eb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,58 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:9:44:621:313 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 22:9:44:662:352 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:9:45:656:177 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-23 22:9:45:692:733 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 22:9:45:728:503 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 22:9:46:659:697 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:9:46:697:639 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:10:6:659:343 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-4-23 22:10:6:699:417 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:10:6:737:753 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..c9be9d91 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:13:54:855:664 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:13:54:889:619 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:13:55:859:459 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:13:55:933:664 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 15:13:56:856:466 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 15:13:56:890:94 + Q5 finished at: 2022-4-24 15:13:56:894:814 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:13:56:931:816 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 15:14:6:859:127 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 15:14:6:933:530 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 15:14:6:970:517 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:14:7:6:987 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..a0b41ef2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,34 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:14:19:729:624 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:14:19:766:408 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:14:20:727:58 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:14:20:795:870 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 15:14:21:728:522 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-276-6264f8cb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-24 15:14:22:332:582 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-276-6264f8cb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..2280c974 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:14:44:391:610 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:14:44:433:768 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:14:45:384:161 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:14:45:456:713 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 15:14:46:394:300 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-261-6264f8e4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-24 15:14:46:999:497 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-261-6264f8e4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..1d60ce07 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:15:15:200:53 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:15:15:237:288 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:15:16:203:128 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:15:16:283:135 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 15:15:17:205:293 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:15:17:245:687 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-245-6264f903-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-24 15:15:17:901:911 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-245-6264f903-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..28b7c680 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:22:9:908:239 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:22:9:946:846 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:22:10:942:837 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:22:10:978:235 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:22:11:13:461 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-23 22:22:11:946:553 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:22:11:985:261 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 22:22:12:943:68 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:22:32:946:251 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:22:32:985:305 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:22:33:24:99 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:22:33:62:442 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..e7be4821 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:22:37:360:497 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-23 22:22:37:398:990 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:22:38:395:30 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-23 22:22:38:437:453 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:22:38:472:614 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-23 22:22:39:398:802 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:22:40:395:365 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:22:41:398:993 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:23:1:398:580 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:23:1:437:499 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:23:1:476:113 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:23:1:514:422 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..6aee81ed --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:23:5:811:363 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-23 22:23:5:854:288 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:23:6:846:20 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:23:6:881:385 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:23:6:916:415 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-23 22:23:7:849:642 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:23:7:888:205 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 22:23:8:846:100 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:23:28:849:334 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + (1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:23:28:888:310 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:23:28:926:925 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:23:28:965:223 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..0bbf00e4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:23:33:264:956 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-23 22:23:33:304:90 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:23:34:299:487 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:23:34:336:45 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:23:34:371:740 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-23 22:23:35:303:543 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:23:36:299:824 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:23:37:303:184 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:23:57:302:917 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + (1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:23:57:341:982 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:23:57:380:829 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:23:57:419:249 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..b6a7b755 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:24:1:715:433 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-23 22:24:1:754:120 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:24:2:750:169 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-23 22:24:2:785:584 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q5 finished at: 2022-4-23 22:24:2:820:913 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:24:2:856:423 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-23 22:24:3:754:39 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 22:24:3:792:609 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 22:24:23:753:436 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + (1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-23 22:24:23:792:653 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-23 22:24:23:831:489 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 22:24:23:869:939 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..e167e534 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:16:7:959:917 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:16:7:996:396 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:16:8:960:115 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:16:9:32:236 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:16:9:961:97 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:16:10:35:832 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:16:10:980:500 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-248-6264f937-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:16:11:880:837 + Q8 finished at: 2022-4-24 15:16:11:958:906 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-248-6264f937-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..85d480ec --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:16:37:924:255 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:16:37:964:885 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:16:39:42:171 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:16:39:123:465 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:16:39:920:506 + Q7-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:16:40:82:412 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:16:40:926:163 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27e-6264f955-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:16:41:827:176 + Q8 finished at: 2022-4-24 15:16:41:964:596 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27e-6264f955-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..f44ccb58 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:12:15:964:820 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 15:12:15:997:540 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:12:16:969:734 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 15:12:17:965:281 + Q4 finished at: 2022-4-24 15:12:17:969:344 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:12:18:970:555 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 15:12:28:968:357 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 15:12:29:41:443 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 15:12:29:77:402 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..8311c270 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:17:38:379:121 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:17:38:417:563 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:17:39:413:695 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-23 22:17:40:417:632 + Q4 finished at: 2022-4-23 22:17:40:417:895 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 22:17:41:414:502 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-23 22:18:1:417:66 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 22:18:1:455:924 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 22:18:1:494:109 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..a062d3e2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:18:5:646:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:18:5:685:554 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:18:6:681:666 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-23 22:18:7:685:228 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 22:18:7:723:805 + Q4 finished at: 2022-4-23 22:18:7:724:209 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 22:18:8:682:160 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:18:28:685:59 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-23 22:18:28:723:817 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:18:28:761:974 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..ac3fd5ff --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:18:32:905:436 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:18:32:943:826 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:18:33:940:130 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-23 22:18:34:943:731 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:18:34:982:293 + Q4 finished at: 2022-4-23 22:18:34:982:496 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 22:18:35:18:168 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:18:54:943:462 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-23 22:18:54:982:535 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:18:55:20:970 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..faad89ea --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 22:19:54:682:507 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 22:19:54:720:955 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 22:19:55:717:151 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-23 22:19:56:720:902 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 22:19:56:759:454 + Q4 finished at: 2022-4-23 22:19:56:759:841 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 22:19:56:795:357 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 22:20:16:720:662 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-23 22:20:16:761:459 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 22:20:16:799:982 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..39ef234c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:12:40:897:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 15:12:40:938:406 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:12:41:889:750 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 15:12:41:955:788 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 15:12:43:890:638 +Q5 finished at: 2022-4-24 15:12:43:894:77 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 15:12:43:935:368 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:12:53:893:640 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 15:12:53:966:856 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:12:54:3:40 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..5eb5860c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:13:7:598:850 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 15:13:7:639:350 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:13:8:595:514 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 15:13:8:668:708 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 15:13:10:597:472 +Q5 finished at: 2022-4-24 15:13:10:600:579 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 15:13:11:599:867 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 15:13:21:596:438 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 15:13:21:671:228 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 15:13:21:708:311 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..70176c57 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:13:57:772:839 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:13:57:808:366 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:13:58:771:322 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:13:58:836:383 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 13:13:58:868:991 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:13:58:901:885 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 13:13:59:773:84 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:13:59:806:771 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:14:9:778:601 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 13:14:9:858:647 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 13:14:9:898:601 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:14:9:939:376 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..bd2f223f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:14:30:927:364 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:14:30:962:840 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:14:31:931:127 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:14:32:8:393 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 13:14:32:47:185 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:14:32:85:987 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 13:14:32:927:859 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:14:32:963:191 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:14:42:928:230 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 13:14:42:999:581 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + (2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-24 13:14:43:35:692 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:14:43:71:214 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..c75ea75e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:14:54:643:966 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:14:54:676:738 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:14:55:644:920 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 13:14:55:713:234 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 13:14:55:747:346 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 13:14:56:644:230 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:14:56:676:900 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 13:14:57:645:284 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:15:7:651:486 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 13:15:7:731:897 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 13:15:7:772:169 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:15:7:811:864 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..b5bc5c19 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:17:12:707:711 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:17:12:741:626 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:17:13:713:629 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 13:17:13:792:864 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 13:17:13:832:901 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:17:13:873:287 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 13:17:14:707:901 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:17:14:741:460 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:17:24:713:472 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 13:17:24:792:881 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 13:17:24:832:431 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:17:24:871:492 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..0d26f4ea --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:15:23:236:463 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 13:15:23:270:53 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 13:15:23:303:79 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 13:15:24:239:373 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 13:15:24:311:452 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 13:15:24:347:308 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 13:15:24:383:276 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:15:25:237:466 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:15:35:240:320 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 13:15:35:314:116 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-4-24 13:15:35:351:411 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-4-24 13:15:35:408:972 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 13:15:35:445:611 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..69ce4596 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:16:43:642:169 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 13:16:43:679:369 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:16:44:642:483 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 13:16:44:715:616 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 13:16:44:754:97 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:16:44:790:850 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 13:16:45:643:79 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:16:45:679:698 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:16:55:642:831 + Q10-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q10 finished at: 2022-4-24 13:16:55:715:736 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 13:16:55:752:30 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..49ffa74d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,129 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:26:58:969:662 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q2 finished at: 2022-4-24 13:26:59:6:270 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:26:59:970:601 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-24 13:27:0:45:181 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 13:27:0:966:724 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 13:27:1:32:396 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7 finished at: 2022-4-24 13:27:1:970:194 + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-24 13:27:2:971:665 + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 13:27:4:970:363 + Q9 finished at: 2022-4-24 13:27:4:970:479 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 13:27:5:971:417 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:27:6:966:840 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 13:27:16:970:143 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) (2,0,2,1) + *(1) expected_result: + (0,1,0,3) (2,0,2,1) + *(2) expected_result: + (0,1,0,3) (2,0,2,1) + *(3) expected_result: + (0,1,0,3) (2,0,2,1) + *(4) expected_result: + (0,1,0,3) (2,0,2,1) + *(5) expected_result: + (0,1,0,3) (2,0,2,1) + *(6) expected_result: + (0,1,0,3) (2,0,2,1) + + Q14 finished at: 2022-4-24 13:27:17:44:669 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-4-24 13:27:17:81:602 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 13:27:17:117:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..a8ebbf38 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,128 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:36:13:20:314 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:36:13:60:238 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:36:14:13:983 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q4 finished at: 2022-4-24 13:36:14:151:292 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:36:14:185:659 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 13:36:15:18:113 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-4-24 13:36:15:93:185 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-24 13:36:15:130:455 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 13:36:15:174:960 +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-4-24 13:36:16:21:69 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 13:36:16:60:205 + Q12-T4 execute opt: 'BEGIN' + Q12 finished at: 2022-4-24 13:36:26:13:169 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-4-24 13:36:26:77:932 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-4-24 13:36:26:110:431 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 13:36:26:142:349 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..6a9172b9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,245 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:35:34:349:437 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:35:34:387:353 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:35:35:351:373 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 13:35:35:430:652 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 13:35:36:349:264 + Q6-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6 finished at: 2022-4-24 13:35:36:423:278 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 13:35:36:460:804 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:35:37:353:35 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-24 13:35:37:434:490 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:35:37:475:605 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,0) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-4-24 13:35:38:352:507 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:35:38:391:485 +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,0) + (7) expected_result: + (1,3,1,1) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-4-24 13:35:39:350:410 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 13:35:39:387:563 + Q15-T5 execute opt: 'BEGIN' + Q15 finished at: 2022-4-24 13:35:49:352:418 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-24 13:35:49:434:434 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-24 13:35:49:475:302 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 13:35:49:515:98 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..926ae8df --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,129 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:31:46:555:842 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 13:31:46:592:464 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:31:47:559:487 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-24 13:31:47:639:65 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 13:31:48:556:445 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 13:31:48:630:170 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7 finished at: 2022-4-24 13:31:49:556:413 + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q8 finished at: 2022-4-24 13:31:50:560:210 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 13:31:52:556:926 + Q9 finished at: 2022-4-24 13:31:52:561:396 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 13:31:53:560:421 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:31:54:557:503 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 13:32:4:556:968 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-24 13:32:4:633:46 + Q15-T4 execute sql: 'SELECT * FROM t2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q15 finished at: 2022-4-24 13:32:4:670:177 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 13:32:4:707:8 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..d551c4f5 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,126 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:32:29:383:11 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q2 finished at: 2022-4-24 13:32:29:420:975 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:32:30:383:741 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 13:32:30:457:81 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 13:32:31:383:670 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 13:32:31:462:554 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q7 finished at: 2022-4-24 13:32:32:383:515 + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q8 finished at: 2022-4-24 13:32:33:383:968 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q9 finished at: 2022-4-24 13:32:34:384:664 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 13:32:35:383:794 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 13:32:36:384:545 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 13:32:37:384:629 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 13:32:47:387:435 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,0) (2,0,2,0) + *(1) expected_result: + (0,1,0,0) (2,0,2,0) + *(2) expected_result: + (0,1,0,0) (2,0,2,0) + *(3) expected_result: + (0,1,0,0) (2,0,2,0) + *(4) expected_result: + (0,1,0,0) (2,0,2,0) + *(5) expected_result: + (0,1,0,0) (2,0,2,0) + *(6) expected_result: + (0,1,0,0) (2,0,2,0) + + Q14 finished at: 2022-4-24 13:32:47:468:50 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q15 finished at: 2022-4-24 13:32:47:508:366 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 13:32:47:548:397 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..2f7f72b4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,160 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:36:51:258:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-24 13:36:51:299:668 +Q3-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q3 finished at: 2022-4-24 13:36:51:339:859 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 13:36:52:257:344 + Q5-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q5 finished at: 2022-4-24 13:36:52:337:427 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q6 finished at: 2022-4-24 13:36:52:377:5 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 13:36:52:417:540 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:36:53:254:848 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-4-24 13:36:53:329:411 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + (2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + (5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-24 13:36:53:366:538 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 13:36:53:403:263 +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q12 finished at: 2022-4-24 13:36:54:258:629 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 13:36:54:298:889 + Q14-T4 execute opt: 'BEGIN' + Q14 finished at: 2022-4-24 13:37:4:254:159 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q15 finished at: 2022-4-24 13:37:4:328:447 + Q16-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q16 finished at: 2022-4-24 13:37:4:365:290 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-4-24 13:37:4:401:428 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..76c59de9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,184 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:33:51:958:901 +Q2-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q2 finished at: 2022-4-24 13:33:51:992:533 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:33:52:959:678 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q4 finished at: 2022-4-24 13:33:53:27:253 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 13:33:53:60:223 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 13:33:53:93:249 + Q7-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7 finished at: 2022-4-24 13:33:53:126:250 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 13:33:53:159:281 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 13:33:53:957:836 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-4-24 13:33:54:22:729 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-4-24 13:33:54:55:41 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-4-24 13:33:54:87:515 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-4-24 13:33:54:119:863 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 13:33:54:152:422 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,2) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q15 finished at: 2022-4-24 13:33:54:959:504 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 13:33:54:992:201 + Q17-T4 execute opt: 'BEGIN' + Q17 finished at: 2022-4-24 13:34:4:962:830 + Q18-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) (2,0,2,1) + *(1) expected_result: + (0,1,0,2) (2,0,2,1) + *(2) expected_result: + (0,1,0,2) (2,0,2,1) + *(3) expected_result: + (0,1,0,2) (2,0,2,1) + *(4) expected_result: + (0,1,0,2) (2,0,2,1) + *(5) expected_result: + (0,1,0,2) (2,0,2,1) + *(6) expected_result: + (0,1,0,2) (2,0,2,1) + + Q18 finished at: 2022-4-24 13:34:5:37:562 + Q19-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q19 finished at: 2022-4-24 13:34:5:75:11 + Q20-T4 execute opt: 'COMMIT'; + Q20 finished at: 2022-4-24 13:34:5:111:999 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..3ff24810 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:13:32:295:363 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 13:13:32:328:577 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:13:33:295:952 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 13:13:33:362:510 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:13:33:396:349 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 13:13:34:296:351 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:13:34:329:608 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:13:44:295:512 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 13:13:44:362:234 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:13:44:395:78 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..cbe40cb9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:13:2:913:324 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 13:13:2:949:582 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:13:3:917:571 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 13:13:3:999:269 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:13:4:40:340 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 13:13:4:913:420 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:13:4:949:6 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:13:14:912:893 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 13:13:14:985:494 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:13:15:21:169 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..8314e5e5 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:36:32:704:93 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:36:32:745:172 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:36:33:703:324 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:36:33:784:467 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 12:36:33:825:62 +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:36:35:704:75 +Q6 finished at: 2022-4-24 12:36:35:705:56 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:36:36:704:699 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:36:46:698:804 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:36:46:769:635 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-24 12:36:46:805:343 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:36:46:840:605 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..46146e65 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:36:58:815:71 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:36:58:852:148 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:36:59:815:920 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:36:59:890:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 12:36:59:927:926 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:36:59:965:915 +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 finished at: 2022-4-24 12:37:0:815:519 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:37:0:852:127 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:37:10:815:62 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:37:10:889:260 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,2) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,2) + + Q11 finished at: 2022-4-24 12:37:10:926:592 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:37:10:962:845 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..6bed68a9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:38:30:426:477 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:38:30:467:164 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:38:31:423:479 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:38:31:498:103 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 12:38:32:427:379 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:38:32:467:808 + Q5 finished at: 2022-4-24 12:38:32:468:352 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 12:38:33:424:154 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:38:43:422:943 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + *(2) expected_result: + (0,1,0,2) + + Q10 finished at: 2022-4-24 12:38:43:496:29 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:38:43:532:771 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:38:43:568:984 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..029c7dbc --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:29:34:792:829 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 12:29:34:829:303 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:29:35:832:144 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 12:29:36:828:835 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:29:38:829:77 + Q4 finished at: 2022-4-24 12:29:38:829:930 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 12:29:38:867:60 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:29:38:904:289 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:29:48:825:689 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:29:48:859:323 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:29:48:892:742 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:29:48:925:568 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..e05d046e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:39:57:464:178 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:39:57:501:678 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:39:58:463:500 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:39:58:538:66 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 14:39:58:575:103 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:39:59:464:677 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:39:59:501:991 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 14:40:0:463:883 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:40:10:467:623 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 14:40:10:549:602 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 14:40:10:590:617 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:40:10:630:774 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..41e6e71a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:40:36:520:71 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:40:36:556:878 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:40:37:520:678 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:40:37:596:703 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 14:40:37:635:15 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:40:37:672:417 +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 14:40:38:520:614 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:40:38:557:216 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:40:48:521:643 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 14:40:48:596:347 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 14:40:48:633:735 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:40:48:670:908 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2af2b16b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:38:59:828:246 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-24 12:38:59:866:142 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:39:0:827:982 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:39:0:901:306 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q5 finished at: 2022-4-24 12:39:0:938:576 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:39:0:975:294 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-4-24 12:39:1:828:736 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:39:1:865:558 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:39:11:831:879 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-4-24 12:39:11:919:801 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-4-24 12:39:11:960:788 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:39:12:1:314 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..553ab941 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:39:23:492:652 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 12:39:23:531:377 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:39:24:492:311 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 12:39:24:564:566 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 12:39:24:600:604 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:39:24:637:9 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 12:39:25:493:475 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:39:25:530:61 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:39:35:492:274 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-4-24 12:39:35:566:583 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 12:39:35:609:562 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..d856ceac --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:39:7:178:270 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:39:7:212:539 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:39:8:184:702 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:39:8:259:944 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 14:39:8:297:534 +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 14:39:9:178:787 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 14:39:10:182:962 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:39:11:179:741 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:39:21:181:436 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 14:39:21:255:585 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 14:39:21:292:816 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:39:21:329:329 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..fa268a14 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:36:7:935:95 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:36:7:968:671 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:36:8:939:389 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:36:9:13:877 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 12:36:9:51:617 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:36:9:89:239 +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 12:36:9:935:600 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:36:9:968:860 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:36:19:934:497 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:36:19:999:478 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:36:20:32:121 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:36:20:64:351 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..25f82914 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,148 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:37:13:593:591 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:37:13:630:35 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:37:18:586:257 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:37:18:667:569 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:37:18:709:760 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:37:23:586:510 + Q7-T3 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:37:23:668:154 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-4-24 15:37:23:708:699 +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q9 finished at: 2022-4-24 15:37:28:595:288 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 15:37:28:632:13 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 15:37:33:587:552 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 15:37:38:586:753 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 15:38:8:583:768 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q14 finished at: 2022-4-24 15:38:8:659:764 + Q15-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q15 finished at: 2022-4-24 15:38:8:697:795 + Q16-T4 execute sql: 'SELECT * FROM t3 ORDER BY k;' + current_result: + (2,0,2,1) + *(1) expected_result: + (2,0,2,1) + *(2) expected_result: + (2,0,2,1) + *(3) expected_result: + (2,0,2,1) + *(4) expected_result: + (2,0,2,1) + *(5) expected_result: + (2,0,2,1) + *(6) expected_result: + (2,0,2,1) + + Q16 finished at: 2022-4-24 15:38:8:735:688 + Q17-T4 execute opt: 'COMMIT'; + Q17 finished at: 2022-4-24 15:38:8:773:168 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..5fac11bd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,245 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-24 14:42:30:499:863 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q2 finished at: 2022-4-24 14:42:30:574:70 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-24 14:42:31:499:602 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q4 finished at: 2022-4-24 14:42:31:536:254 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:42:32:503:517 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q6 finished at: 2022-4-24 14:42:32:584:860 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q7 finished at: 2022-4-24 14:42:32:625:588 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:42:33:501:898 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9 finished at: 2022-4-24 14:42:33:575:304 + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-24 14:42:34:501:279 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 14:42:35:500:996 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:42:36:500:890 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 14:42:37:504:287 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 14:42:38:500:101 + Q15-T5 execute opt: 'BEGIN' + Q15 finished at: 2022-4-24 14:42:48:496:600 + Q16-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + *(7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,3) + *(14) expected_result: + (0,1,0,3) + + Q16 finished at: 2022-4-24 14:42:48:619:445 + Q17-T5 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,1) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + *(13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,1) + + Q17 finished at: 2022-4-24 14:42:48:653:138 + Q18-T5 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 14:42:48:685:961 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..78b5a709 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,110 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:43:19:564:587 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:43:19:605:74 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:43:20:560:736 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 14:43:20:633:758 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 14:43:20:670:517 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 14:43:21:563:469 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 14:43:21:641:733 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 14:43:21:680:919 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 14:43:22:565:388 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 14:43:22:605:845 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 14:43:23:562:295 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:43:24:565:704 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 14:43:34:558:254 + Q14-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q14 finished at: 2022-4-24 14:43:34:626:339 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 14:43:34:659:805 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..f0520298 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,107 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:42:57:845:71 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 12:42:57:882:784 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:42:58:844:495 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 12:42:58:916:326 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 12:42:58:952:277 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 12:42:59:841:814 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 12:42:59:909:424 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 12:42:59:943:28 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 12:43:0:846:703 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 12:43:0:883:436 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 12:43:1:845:23 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:43:2:842:624 + Q13-T4 execute opt: 'BEGIN' + Q13 finished at: 2022-4-24 12:43:12:849:301 + Q14-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q14 finished at: 2022-4-24 12:43:12:931:474 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 12:43:12:972:15 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..bbe0ed2c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,48 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:38:10:26:954 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 13:38:10:65:826 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:38:11:30:201 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 13:38:11:114:739 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 13:38:12:27:498 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:38:13:30:395 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 13:38:23:24:330 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 13:38:23:96:392 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 13:38:23:132:65 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a6ea764d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:26:43:398:205 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:26:43:434:335 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:26:44:434:827 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 12:26:44:472:225 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 12:26:45:434:337 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:26:46:434:961 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:26:47:473:102 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:26:57:431:123 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 12:26:57:464:619 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:26:57:497:655 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..f3304728 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:36:55:404:860 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:36:55:441:781 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:36:56:407:751 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 14:36:56:488:878 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 14:36:56:528:645 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 14:36:57:404:906 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:36:57:441:613 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:37:7:403:798 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 14:37:7:477:347 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:37:7:512:926 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..4840af84 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:35:15:469:107 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:35:15:509:941 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:35:16:468:856 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 12:35:17:469:877 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 12:35:17:510:406 + Q4 finished at: 2022-4-24 12:35:17:510:506 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:35:18:469:747 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:35:28:465:652 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:35:28:539:380 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:35:28:576:4 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..a747109b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:26:25:160:342 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 12:26:25:196:629 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:26:26:197:885 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 12:26:27:196:595 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:26:29:196:737 + Q4 finished at: 2022-4-24 12:26:29:197:456 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:26:29:235:250 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:26:39:193:292 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:26:39:226:870 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:26:39:260:528 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..7c055df9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:33:46:710:879 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 12:33:46:748:108 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:33:47:711:175 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 12:33:47:785:788 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 12:33:47:823:225 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 12:33:48:871:233 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:33:48:907:678 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:33:58:711:266 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 12:33:58:785:574 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:33:58:823:0 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b526fa1d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:34:24:62:68 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 12:34:24:97:578 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:34:25:69:701 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 12:34:25:151:17 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 12:34:25:191:776 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 12:34:26:62:870 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:34:26:96:686 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:34:36:65:484 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 12:34:36:139:841 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:34:36:176:285 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..1c316187 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,68 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:47:6:857:531 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:47:6:890:712 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:47:7:858:20 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:47:7:924:331 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 12:47:8:858:86 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:47:8:890:770 + Q5 finished at: 2022-4-24 12:47:8:891:50 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:47:8:924:443 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:47:18:863:589 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:47:18:939:914 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:47:18:978:370 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:47:19:16:335 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..4e6b21e6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:47:39:234:876 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:47:39:268:556 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:47:40:237:915 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:47:40:311:16 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 12:47:41:238:216 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:47:41:272:293 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-122-6264d66c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 12:47:41:741:445 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-122-6264d66c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..74f4dfec --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:48:5:561:584 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:48:5:594:303 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:48:6:564:403 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:48:6:635:172 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 12:48:7:563:193 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-16a-6264d686-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 12:48:8:64:954 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-16a-6264d686-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..dfa86fcc --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:48:35:46:45 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:48:35:78:783 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:48:36:61:456 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:48:36:134:283 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 12:48:37:49:693 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:48:37:82:143 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-129-6264d6a4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 12:48:37:550:199 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-129-6264d6a4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..85d19409 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:49:27:814:882 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 12:49:27:852:597 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:49:28:814:563 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:49:28:889:78 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 12:49:28:926:377 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 12:49:30:816:546 +Q6 finished at: 2022-4-24 12:49:30:816:823 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:49:30:854:444 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:49:40:814:917 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:49:40:889:513 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:49:40:926:862 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:49:40:963:535 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..51abb12a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:50:6:484:752 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 12:50:6:522:817 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:50:7:486:630 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 12:50:7:565:600 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 12:50:7:605:490 +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:50:9:487:724 +Q6 finished at: 2022-4-24 12:50:9:488:462 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:50:10:485:478 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:50:20:479:808 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:50:20:544:765 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,2) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:50:20:577:628 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:50:20:609:959 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9e0e13b7 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:51:17:99:452 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:51:17:133:133 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:51:18:103:241 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 12:51:18:177:818 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 12:51:19:100:174 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:51:19:133:936 + Q5 finished at: 2022-4-24 12:51:19:138:184 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 12:51:20:104:1 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:51:30:103:26 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:51:30:177:253 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:51:30:214:450 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:51:30:255:744 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..98b6faef --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:54:49:419:533 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:54:49:457:670 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:54:50:422:743 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 12:54:50:503:288 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 12:54:51:420:120 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:54:53:420:652 + Q5 finished at: 2022-4-24 12:54:53:423:813 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:54:53:464:248 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:55:3:419:964 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:55:3:495:604 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:55:3:533:132 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:55:3:570:329 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..a6cfc4dc --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:55:16:746:892 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 12:55:16:781:15 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:55:17:749:764 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 12:55:17:822:934 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 12:55:18:747:70 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 12:55:18:780:838 + Q5 finished at: 2022-4-24 12:55:18:781:225 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:55:18:817:906 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 12:55:28:753:761 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,2) + *(1) expected_result: + (0,1,0,2) + (2) expected_result: + (0,1,0,3) + + Q10 finished at: 2022-4-24 12:55:28:840:569 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + + Q11 finished at: 2022-4-24 12:55:28:881:703 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:55:28:922:534 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..3b25fa9b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:46:19:563:847 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:46:19:597:531 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:46:20:567:89 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:46:20:641:428 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:46:21:570:864 + Q7-T3 execute sql: 'UPDATE t3 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:46:21:651:804 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:46:22:568:458 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-260-6265004b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:46:23:465:509 + Q8 finished at: 2022-4-24 15:46:23:534:481 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-260-6265004b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..be339106 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:47:13:594:249 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:47:13:631:932 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:47:14:595:819 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:47:14:670:780 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:47:15:598:947 + Q7-T3 execute sql: 'UPDATE t3 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:47:15:680:78 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:47:16:596:708 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-267-62650081-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:47:17:496:334 + Q8 finished at: 2022-4-24 15:47:17:631:606 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-267-62650081-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..16d0646a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:46:56:300:43 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:46:56:337:469 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:46:57:302:874 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 14:46:58:300:712 + Q4 finished at: 2022-4-24 14:46:58:314:959 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:46:59:303:809 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 14:47:9:298:598 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 14:47:9:370:352 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 14:47:9:405:852 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..f4f859f8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:44:22:950:643 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:44:22:984:504 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:44:23:950:391 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 12:44:24:951:433 + Q4 finished at: 2022-4-24 12:44:24:951:713 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:44:25:951:387 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 12:44:35:953:771 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 12:44:36:26:795 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 12:44:36:63:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..3586843a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:44:48:126:940 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:44:48:160:723 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:44:49:130:868 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 12:44:50:127:632 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 12:44:50:161:349 + Q4 finished at: 2022-4-24 12:44:50:161:491 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:44:51:131:32 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:45:1:130:671 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-24 12:45:1:205:432 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:45:1:242:379 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..db47e3f3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:45:15:791:638 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:45:15:824:500 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:45:16:799:965 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 12:45:17:792:279 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:45:17:825:274 + Q4 finished at: 2022-4-24 12:45:17:829:665 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 12:45:17:870:693 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:45:27:796:47 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-24 12:45:27:870:377 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:45:27:907:584 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..ab0aecce --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:46:43:47:712 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 12:46:43:81:374 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:46:44:58:209 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 12:46:45:48:716 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:46:45:83:98 + Q4 finished at: 2022-4-24 12:46:45:85:364 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 12:46:45:122:370 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:46:55:54:718 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:46:55:135:229 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:46:55:175:210 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..1a5ef1d3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:45:47:216:696 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 12:45:47:253:804 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:45:48:212:700 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 12:45:48:277:120 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:45:50:213:529 +Q5 finished at: 2022-4-24 12:45:50:218:282 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 12:45:50:254:850 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:46:0:220:875 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:46:0:302:9 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:46:0:342:139 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..362c63ed --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,52 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:46:15:24:95 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 12:46:15:64:799 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:46:16:16:565 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 12:46:16:83:31 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 12:46:18:17:866 +Q5 finished at: 2022-4-24 12:46:18:21:372 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 12:46:19:26:136 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:46:29:20:454 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 12:46:29:94:301 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:46:29:131:206 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..2572a301 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:26:44:67:658 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:26:44:104:413 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:26:45:69:14 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:26:45:144:212 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + Q5 finished at: 2022-4-24 14:26:46:69:473 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:26:46:107:334 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-229-6264eda4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-24 14:26:46:769:323 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-229-6264eda4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..b4cc008b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:27:8:795:44 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:27:8:829:0 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:27:9:797:974 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:27:9:871:553 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 14:27:10:799:528 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:27:10:836:333 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1ff-6264edbc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-24 14:27:11:497:78 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1ff-6264edbc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..9d485e1b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt @@ -0,0 +1,50 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:27:32:438:902 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:27:32:479:809 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:27:33:435:704 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:27:33:510:260 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:27:34:440:411 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:27:34:480:799 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-204-6264edd5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:27:34:941:409 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-204-6264edd5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..efe9ff7f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,50 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:29:7:546:660 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:29:7:584:722 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:29:8:542:610 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:29:8:609:293 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 14:29:9:548:384 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:29:9:585:976 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-20b-6264ee34-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:29:10:45:717 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-20b-6264ee34-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..819f245a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,77 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:28:10:996:44 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 14:28:11:35:541 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 14:28:11:72:323 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 14:28:11:995:538 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 14:28:12:992:327 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' +Q8 finished at: 2022-4-24 14:28:12:996:813 + Q6 finished at: 2022-4-24 14:28:13:30:1 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 14:28:13:66:666 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:28:22:995:751 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 14:28:23:69:806 + Q11-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q11 finished at: 2022-4-24 14:28:23:106:694 + Q12-T3 execute sql: 'DROP TABLE mytab;' + Q12 finished at: 2022-4-24 14:28:23:160:872 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 14:28:23:197:255 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..7e9598e1 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,48 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:28:39:675:478 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 14:28:39:715:593 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:28:40:668:462 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 14:28:40:734:518 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-24 14:28:41:674:329 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:28:41:707:273 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1c7-6264ee17-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-24 14:28:42:377:195 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1c7-6264ee17-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..d2c169d0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt @@ -0,0 +1,87 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:29:30:644:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + (2,0,2,1) + (5) expected_result: + (2,0,2,1) + (6) expected_result: + (2,0,2,1) + +Q2 finished at: 2022-4-24 14:29:30:680:423 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:29:31:641:185 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-24 14:29:31:708:106 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:29:32:644:771 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 14:29:32:718:833 +Q7-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q8-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q8 finished at: 2022-4-24 14:29:35:643:792 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-20e-6264ee4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 14:29:36:547:793 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 14:29:55:348:260 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-20e-6264ee4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..92e9861d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,128 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:33:0:798:700 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:33:0:836:657 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:33:1:793:845 + Q4-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 14:33:2:798:425 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,0) + (5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,1) + +Q10 finished at: 2022-4-24 14:33:3:799:421 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 14:33:3:836:783 + Q4 finished at: 2022-4-24 14:33:3:846:941 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 14:33:3:881:332 + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q7 finished at: 2022-4-24 14:33:3:885:828 + Q8-T3 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8 finished at: 2022-4-24 14:33:3:923:658 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 14:33:3:961:145 + Q12-T4 execute opt: 'BEGIN' + Q12 finished at: 2022-4-24 14:33:13:797:793 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + *(2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,3) + + Q13 finished at: 2022-4-24 14:33:13:883:454 + Q14-T4 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + (1,3,1,1) + *(1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,1) + *(4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,1) + *(6) expected_result: + (1,3,1,1) + + Q14 finished at: 2022-4-24 14:33:13:920:444 + Q15-T4 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 14:33:13:956:982 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..5bc1fb2b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,172 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:32:28:726:214 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,3) + (7) expected_result: + (0,1,0,3) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:32:28:762:644 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:32:29:722:534 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + *(9) expected_result: + (1,3,1,0) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + (12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,1) + *(14) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:32:29:790:318 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:32:30:721:333 + Q6-T3 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:32:31:724:744 + Q9-T4 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + *(7) expected_result: + (0,1,0,0) + *(8) expected_result: + (0,1,0,0) + (9) expected_result: + (0,1,0,3) + (10) expected_result: + (0,1,0,3) + (11) expected_result: + (0,1,0,3) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q11 finished at: 2022-4-24 14:32:33:727:469 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:32:33:761:58 + Q9 finished at: 2022-4-24 14:32:33:764:126 + Q10-T4 execute opt: 'COMMIT'; + current_result: + (1,3,1,1) + (1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,1) + (6) expected_result: + (1,3,1,0) + *(7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,0) + *(10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,1) + (13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,1) + +Q13 finished at: 2022-4-24 14:32:33:797:133 +Q14-T1 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:32:33:800:422 +Q14 finished at: 2022-4-24 14:32:33:832:777 + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-251-6264eefe-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q6 failed at: 2022-4-24 14:32:34:326:814 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-251-6264eefe-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..94c44bda --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,87 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:30:6:530:361 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 14:30:6:567:520 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:30:7:530:473 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + null + *(6) expected_result: + (0,1,0,0) + + Q4 finished at: 2022-4-24 14:30:7:604:386 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:30:8:530:113 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + null + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + null + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 14:30:8:603:490 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE value1=0;' + Q8-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE value1=2;' + Q8 finished at: 2022-4-24 14:30:11:533:95 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-239-6264ee70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 14:30:12:432:939 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 14:30:31:237:388 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-239-6264ee70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..a7d1255b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,84 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:30:42:622:168 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,0,2,0) + (5) expected_result: + (2,0,2,0) + (6) expected_result: + (2,0,2,0) + +Q2 finished at: 2022-4-24 14:30:42:660:669 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:30:43:625:266 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + null + (1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1,0,0) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 14:30:43:705:129 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:30:44:618:287 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + null + (1) expected_result: + (1,3,1,0) + *(2) expected_result: + null + (3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,0) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 14:30:44:685:730 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' + Q8-T2 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + Q8 finished at: 2022-4-24 14:30:47:622:998 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1ca-6264ee94-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 14:30:48:520:573 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 14:31:7:320:920 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1ca-6264ee94-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..6b3b17d5 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,121 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:33:50:863:294 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-24 14:33:50:901:31 +Q3-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q3 finished at: 2022-4-24 14:33:50:938:516 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 14:33:51:859:484 + Q5-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q5 finished at: 2022-4-24 14:33:51:925:836 + Q6-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:33:52:862:847 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + *(5) expected_result: + (0,1,0,0) + *(6) expected_result: + (0,1,0,0) + + Q9 finished at: 2022-4-24 14:33:52:936:663 + Q10-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' +Q12-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-24 14:33:53:865:358 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 14:33:53:901:655 +Q12 finished at: 2022-4-24 14:33:53:902:328 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 14:33:53:939:486 + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1d5-6264ef4f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q6 failed at: 2022-4-24 14:33:54:466:71 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1d5-6264ef4f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..6943f1b6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,128 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0, 2, 0);' + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:31:40:947:893 +Q2-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,2) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + +Q2 finished at: 2022-4-24 14:31:40:987:438 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:31:41:945:377 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,2) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,2) + (6) expected_result: + (0,1,0,2) + + Q4 finished at: 2022-4-24 14:31:42:21:141 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5 finished at: 2022-4-24 14:31:42:57:760 + Q6-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + *(3) expected_result: + (1,3,1,0) + *(4) expected_result: + (1,3,1,0) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q6 finished at: 2022-4-24 14:31:42:94:578 + Q7-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:31:42:945:598 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE value1=2;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE value1=2;' + Q7 finished at: 2022-4-24 14:31:43:947:362 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 14:31:43:983:955 + current_result: + (2,0,2,0) + *(1) expected_result: + (2,0,2,0) + *(2) expected_result: + (2,0,2,0) + *(3) expected_result: + (2,0,2,0) + *(4) expected_result: + (2,0,2,0) + *(5) expected_result: + (2,0,2,0) + *(6) expected_result: + (2,0,2,0) + + Q10 finished at: 2022-4-24 14:31:43:984:243 + Q11-T3 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=2;' + Q11 finished at: 2022-4-24 14:31:44:21:229 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,3) + *(1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,0) + *(3) expected_result: + (0,1,0,3) + *(4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,0) + (6) expected_result: + (0,1,0,0) + + Q12 finished at: 2022-4-24 14:31:44:58:684 + Q13-T3 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q13 finished at: 2022-4-24 14:31:44:95:858 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 14:31:44:133:695 +Q15 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-21a-6264eecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q15 failed at: 2022-4-24 14:31:45:447:100 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-21a-6264eecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c7f262c0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,38 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:26:21:258:230 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 14:26:21:298:771 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:26:22:257:937 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 14:26:23:259:801 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:26:23:300:529 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-226-6264ed8e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-24 14:26:23:659:568 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-226-6264ed8e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..d2583c7b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:25:46:418:103 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 14:25:46:455:228 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:25:47:417:834 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 14:25:48:418:751 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:25:48:454:938 + Q4 finished at: 2022-4-24 14:25:48:458:40 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 14:25:48:494:728 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:25:58:413:608 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 14:25:58:479:332 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:25:58:511:312 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..dde6adb4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,34 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:58:34:607:295 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 13:58:34:647:940 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:58:35:600:734 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:58:35:668:442 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q6 finished at: 2022-4-24 13:58:36:609:104 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e8-6264e70b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 13:58:37:106:455 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e8-6264e70b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..5d314797 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:59:1:59:676 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 13:59:1:97:417 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:59:2:59:164 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:59:2:132:778 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' +Q7 finished at: 2022-4-24 13:59:3:61:541 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:59:3:99:59 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1ec-6264e726-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 13:59:3:561:432 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1ec-6264e726-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..83e97a02 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:59:26:761:703 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 13:59:26:798:527 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:59:27:757:831 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:59:27:823:877 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 13:59:28:764:102 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:59:28:801:43 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1ca-6264e73f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 13:59:29:260:72 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1ca-6264e73f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..859903dd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:59:52:144:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 13:59:52:182:436 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:59:53:144:809 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:59:53:221:270 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + Q5 finished at: 2022-4-24 13:59:54:145:978 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1cd-6264e758-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-24 13:59:54:745:670 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1cd-6264e758-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..34826d88 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:4:2:367:822 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:4:2:408:275 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:4:3:362:952 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:4:3:436:118 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:4:4:368:704 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:4:4:409:644 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-193-6264e853-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:4:4:865:314 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-193-6264e853-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..9b0d6e4e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:4:26:866:98 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:4:26:903:317 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:4:27:861:746 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE k=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:4:27:926:718 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 14:4:28:868:313 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:4:28:905:217 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-196-6264e86b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:4:29:364:284 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-196-6264e86b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..efae420b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,75 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:0:22:298:617 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q2 finished at: 2022-4-24 14:0:22:338:573 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:0:23:301:141 + Q4-T2 execute sql: 'DELETE FROM t2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:0:23:385:508 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE value2=0;' + current_result: + (0,1,0,0) + (1) expected_result: + null + *(2) expected_result: + (0,1,0,0) + +Q7 finished at: 2022-4-24 14:0:24:300:104 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:0:24:339:480 + Q5 finished at: 2022-4-24 14:0:24:340:864 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:0:24:383:391 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:0:34:293:146 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q10 finished at: 2022-4-24 14:0:34:359:466 + Q11-T3 execute sql: 'SELECT * FROM t2 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q11 finished at: 2022-4-24 14:0:34:392:614 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 14:0:34:425:189 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..897189a8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:3:39:232:989 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 14:3:39:273:838 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:3:40:234:534 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 14:3:41:233:235 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:3:41:272:615 + Q4 finished at: 2022-4-24 14:3:41:273:42 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 14:3:41:313:793 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:3:41:354:492 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-24 14:3:51:233:72 + Q10-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q10 finished at: 2022-4-24 14:3:51:313:332 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 14:3:51:353:130 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..cec848db --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:56:29:872:374 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 13:56:29:913:110 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:56:30:867:334 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:56:30:939:107 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q6-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1; ' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q6 finished at: 2022-4-24 13:56:31:873:736 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-18a-6264e68e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 13:56:32:370:414 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-18a-6264e68e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..6cbb039f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:57:7:768:310 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 13:57:7:804:985 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:57:8:767:363 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 13:57:8:839:659 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 13:57:9:769:879 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 13:57:9:806:424 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1ba-6264e6b4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 13:57:10:266:261 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1ba-6264e6b4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..3dd61bc3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt @@ -0,0 +1,73 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:48:46:576:185 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:48:46:615:416 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:48:47:570:145 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:48:47:639:212 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:48:48:577:305 + Q7-T3 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:48:48:656:702 + Q8-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' +Q9-T1 execute sql: 'SELECT * FROM t3 WHERE value1=2;' + current_result: + (0,1,0,0) + (1) expected_result: + (0,1,0,3) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + *(4) expected_result: + (0,1,0,0) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + + Q5 finished at: 2022-4-24 15:48:49:583:339 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-298-626500de-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:48:50:483:362 + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + *(6) expected_result: + (1,3,1,0) + + Q8 finished at: 2022-4-24 15:48:50:556:71 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-298-626500de-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..bb7e8d77 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,167 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-24 14:10:6:496:991 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + *(3) expected_result: + (0,1,0,0) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + *(9) expected_result: + (0,1,0,0) + (10) expected_result: + (0,1,0,3) + *(11) expected_result: + (0,1,0,0) + (12) expected_result: + (0,1,0,3) + *(13) expected_result: + (0,1,0,0) + *(14) expected_result: + (0,1,0,0) + + Q2 finished at: 2022-4-24 14:10:6:574:342 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-24 14:10:7:498:90 +Q4-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 14:10:8:496:359 + Q6-T3 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + *(2) expected_result: + (1,3,1,0) + (3) expected_result: + (1,3,1,1) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + (7) expected_result: + (1,3,1,1) + *(8) expected_result: + (1,3,1,0) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + *(11) expected_result: + (1,3,1,0) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + (14) expected_result: + (1,3,1,1) + + Q6 finished at: 2022-4-24 14:10:8:573:353 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:10:9:498:234 + Q9-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q10-T4 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + *(2) expected_result: + (0,1,0,0) + (3) expected_result: + (0,1,0,3) + (4) expected_result: + (0,1,0,3) + (5) expected_result: + (0,1,0,3) + *(6) expected_result: + (0,1,0,0) + (7) expected_result: + (0,1,0,3) + (8) expected_result: + (0,1,0,3) + (9) expected_result: + (0,1,0,3) + *(10) expected_result: + (0,1,0,0) + *(11) expected_result: + (0,1,0,0) + *(12) expected_result: + (0,1,0,0) + (13) expected_result: + (0,1,0,3) + (14) expected_result: + (0,1,0,3) + + Q7 finished at: 2022-4-24 14:10:10:499:808 +Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1f9-6264e9bf-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q4 failed at: 2022-4-24 14:10:10:899:133 + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + *(3) expected_result: + (1,3,1,0) + (4) expected_result: + (1,3,1,1) + *(5) expected_result: + (1,3,1,0) + (6) expected_result: + (1,3,1,1) + *(7) expected_result: + (1,3,1,0) + (8) expected_result: + (1,3,1,1) + (9) expected_result: + (1,3,1,1) + (10) expected_result: + (1,3,1,1) + (11) expected_result: + (1,3,1,1) + *(12) expected_result: + (1,3,1,0) + *(13) expected_result: + (1,3,1,0) + *(14) expected_result: + (1,3,1,0) + + Q10 finished at: 2022-4-24 14:10:30:501:52 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-24 14:10:31:399:574 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1f9-6264e9bf-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..807767e4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,69 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:10:43:883:91 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:10:43:918:55 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:10:44:882:36 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 14:10:44:949:197 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 14:10:45:886:808 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 14:10:45:963:170 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 14:10:46:884:807 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-19e-6264e9e3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 14:10:47:786:48 + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 14:10:47:854:506 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-19e-6264e9e3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..ad61940e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,66 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:11:16:308:675 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 14:11:16:343:400 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:11:17:311:740 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 14:11:17:385:503 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 14:11:18:308:575 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 14:11:18:375:830 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 14:11:19:314:391 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1a3-6264ea04-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 14:11:20:210:933 + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 14:11:20:277:417 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1a3-6264ea04-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..01d698eb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,48 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:40:17:358:323 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 13:40:17:398:313 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:40:18:352:448 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 13:40:19:355:272 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 13:40:19:356:266 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:40:20:353:444 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 13:40:30:350:767 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 13:40:30:422:415 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 13:40:30:457:664 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..4111ef17 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:53:37:192:145 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 13:53:37:228:976 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:53:38:191:957 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 13:53:39:192:559 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:53:41:192:940 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 13:53:41:193:67 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:53:41:229:390 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:53:51:192:325 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 13:53:51:276:283 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:53:51:312:659 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b919d762 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:54:3:617:378 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 13:54:3:653:640 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:54:4:618:278 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 13:54:5:620:401 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:54:5:656:677 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 13:54:5:661:11 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:54:5:697:522 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:54:15:617:491 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q9 finished at: 2022-4-24 13:54:15:689:710 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:54:15:725:349 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..ea385944 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:55:55:688:229 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 13:55:55:725:327 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:55:56:672:759 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 13:55:57:687:77 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 13:55:57:723:919 + Q4 finished at: 2022-4-24 13:55:57:727:447 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 13:55:58:673:743 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:56:8:673:363 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 13:56:8:746:164 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:56:8:782:59 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..3fe15bd2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:41:3:100:93 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 13:41:3:133:422 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:41:4:107:251 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 13:41:5:100:870 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:41:7:100:646 + Q4 finished at: 2022-4-24 13:41:7:104:529 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 13:41:7:145:784 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:41:17:99:855 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 13:41:17:168:683 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:41:17:201:40 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..f0b42642 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:54:58:383:103 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 13:54:58:416:68 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:54:59:381:751 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 13:55:0:382:212 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:55:0:414:519 + Q4 finished at: 2022-4-24 13:55:0:415:161 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:55:0:448:524 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:55:10:385:465 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 13:55:10:459:280 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:55:10:495:715 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..e035e29d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 13:55:28:315:429 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 13:55:28:350:65 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 13:55:29:318:157 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 13:55:30:315:895 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 13:55:30:349:429 + Q4 finished at: 2022-4-24 13:55:30:349:442 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 13:55:30:386:949 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 13:55:40:314:234 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 13:55:40:380:523 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 13:55:40:413:518 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..cbc10b35 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:20:48:149:661 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:20:48:189:189 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:20:49:151:927 + Q4-T2 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:20:49:237:837 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + *(1) expected_result: + (1,3,1,0) + (2) expected_result: + (1,3,1,1) + +Q7 finished at: 2022-4-24 14:20:50:151:345 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:20:50:190:705 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1b0-6264ec41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:20:50:652:963 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1b0-6264ec41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..11cf2b7d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:21:16:428:719 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:21:16:462:315 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:21:17:432:426 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:21:17:513:217 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:21:18:436:731 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:21:18:469:846 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-214-6264ec5d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:21:18:937:141 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-214-6264ec5d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..48b3d6a9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,34 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:21:46:250:33 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:21:46:286:904 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:21:47:249:698 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:21:47:322:608 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:21:48:251:809 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-217-6264ec7b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:21:48:752:152 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-217-6264ec7b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..966f310f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:22:11:344:891 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:22:11:378:166 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:22:12:350:468 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:22:12:422:349 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 14:22:13:346:629 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:22:13:379:629 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1b4-6264ec94-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:22:13:850:656 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1b4-6264ec94-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..30bdf001 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:22:35:589:955 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:22:35:627:380 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:22:36:586:62 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:22:36:651:400 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 14:22:37:589:961 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1ec-6264ecab-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-24 14:22:38:194:741 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1ec-6264ecab-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..bb1bbb4a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:22:59:478:481 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE value1=0;' + current_result: + (0,1,0,0) + *(1) expected_result: + (0,1,0,0) + (2) expected_result: + (0,1,0,3) + +Q2 finished at: 2022-4-24 14:22:59:516:571 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:23:0:474:359 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 14:23:0:543:442 + Q5-T2 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' + Q5 finished at: 2022-4-24 14:23:1:476:826 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-21b-6264ecc3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-24 14:23:2:80:704 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-21b-6264ecc3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..289d87e3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:23:28:696:285 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:23:28:729:686 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:23:29:699:201 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:23:29:872:646 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:23:30:697:798 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:23:30:731:114 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1f4-6264ece1-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:23:31:201:230 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-1f4-6264ece1-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..75fc44c4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:23:55:838:446 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:23:55:879:155 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:23:56:844:284 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:23:56:917:691 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q6-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q6 finished at: 2022-4-24 14:23:57:839:976 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1ba-6264ecfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:23:58:336:685 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1ba-6264ecfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..e956ae73 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:24:27:387:106 +Q2-T1 execute sql: 'UPDATE t1 SET value2=3 WHERE value1=0;' +Q2 finished at: 2022-4-24 14:24:27:424:162 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:24:28:391:39 + Q4-T2 execute sql: 'SELECT * FROM t2 WHERE value1=1;' + current_result: + (1,3,1,0) + (1) expected_result: + (1,3,1,1) + *(2) expected_result: + (1,3,1,0) + + Q4 finished at: 2022-4-24 14:24:28:476:576 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' +Q7-T1 execute sql: 'UPDATE t2 SET value2=1 WHERE value1=1;' +Q7 finished at: 2022-4-24 14:24:29:388:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 14:24:29:425:511 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1c0-6264ed1c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-24 14:24:29:890:380 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-99-1c0-6264ed1c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ae50c8c3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:49:56:418:1 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:49:56:458:284 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:49:57:417:781 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:49:57:497:145 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:49:58:415:398 + Q7-T3 execute sql: 'UPDATE t3 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:49:58:494:347 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:49:59:419:585 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26c-62650124-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:50:0:319:547 + Q8 finished at: 2022-4-24 15:50:0:400:384 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26c-62650124-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..ddc74021 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,43 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t2;' +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t3;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t2 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'CREATE TABLE t3 (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1, 0, 0);' +Q0-T1 execute sql: 'INSERT INTO t2 VALUES (1, 3, 1, 0);' +Q0-T1 execute sql: 'INSERT INTO t3 VALUES (2, 0, 2, 0);' + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 15:50:22:70:415 +Q2-T1 execute sql: 'UPDATE t1 SET value2=1 WHERE value1=0;' +Q2 finished at: 2022-4-24 15:50:22:107:664 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 15:50:23:66:727 + Q4-T2 execute sql: 'UPDATE t2 SET value2=2 WHERE value1=1;' + Q4 finished at: 2022-4-24 15:50:23:134:142 + Q5-T2 execute sql: 'UPDATE t1 SET value2=2 WHERE value1=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-24 15:50:24:70:902 + Q7-T3 execute sql: 'UPDATE t3 SET value2=3 WHERE value1=2;' + Q7 finished at: 2022-4-24 15:50:24:145:812 + Q8-T3 execute sql: 'UPDATE t2 SET value2=3 WHERE value1=1;' +Q9-T1 execute sql: 'UPDATE t3 SET value2=1 WHERE value1=2;' + Q5 finished at: 2022-4-24 15:50:25:68:463 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-293-6265013e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-24 15:50:25:971:933 + Q8 finished at: 2022-4-24 15:50:26:107:707 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='1-cf-293-6265013e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..ee16c5ca --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:12:8:949:470 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:12:8:986:250 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:12:9:949:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 14:12:10:949:830 + Q4 finished at: 2022-4-24 14:12:10:949:936 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:12:11:950:100 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 14:12:21:948:912 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 14:12:22:25:453 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 14:12:22:61:690 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..7620f9ed --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,45 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:14:28:8:184 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:14:28:48:425 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:14:29:8:567 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 14:14:30:9:405 + Q4 finished at: 2022-4-24 14:14:30:10:142 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 14:14:31:9:323 + Q7-T3 execute opt: 'BEGIN' + Q7 finished at: 2022-4-24 14:14:41:4:988 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 14:14:41:79:4 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 14:14:41:115:300 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..bea20708 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:17:39:465:817 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:17:39:506:261 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:17:40:466:291 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 14:17:41:466:221 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 14:17:41:506:633 + Q4 finished at: 2022-4-24 14:17:41:507:276 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 14:17:42:467:26 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:17:52:463:55 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-24 14:17:52:538:151 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:17:52:575:49 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..c0e38e4c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:18:9:164:430 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:18:9:202:869 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:18:10:170:467 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 14:18:11:164:751 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:18:11:202:969 + Q4 finished at: 2022-4-24 14:18:11:205:973 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 14:18:11:246:75 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:18:21:163:545 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q9 finished at: 2022-4-24 14:18:21:236:776 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:18:21:274:408 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..d0547122 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:20:16:720:723 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 14:20:16:758:301 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:20:17:719:115 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 14:20:18:721:358 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 14:20:18:758:916 + Q4 finished at: 2022-4-24 14:20:18:761:753 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 14:20:18:798:278 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 14:20:28:719:573 + Q9-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q9 finished at: 2022-4-24 14:20:28:795:25 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 14:20:28:831:412 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..466f92b4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,38 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:18:39:472:277 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 14:18:39:513:848 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:18:40:468:672 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 14:18:41:474:609 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 14:18:41:515:529 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1eb-6264ebc0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-24 14:18:41:874:193 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-1eb-6264ebc0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..0af89e84 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,36 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 14:19:8:536:812 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 14:19:8:572:457 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 14:19:9:540:424 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 14:19:10:538:346 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-20d-6264ebdd-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-24 14:19:10:938:864 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-20d-6264ebdd-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..eccb91ba --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:15:17:391:717 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:15:17:427:134 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:15:20:401:617 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:15:20:441:859 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:15:20:481:587 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:15:20:523:643 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:15:23:396:21 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:15:23:447:383 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:15:53:399:241 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:15:53:439:438 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..b46a33bb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:16:1:671:282 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:16:1:705:318 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:16:4:677:75 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:16:4:716:996 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:16:4:756:830 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:16:4:796:475 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:16:7:671:601 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:16:7:705:558 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:16:37:678:636 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:16:37:718:691 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..6cb0ad30 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:16:45:953:334 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:16:45:987:543 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:16:48:959:115 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:16:48:999:529 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:16:49:39:142 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:16:51:954:19 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:16:51:988:132 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:16:54:959:660 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:17:24:960:821 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:17:25:1:26 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..662ef40b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:19:2:41:502 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:19:2:75:636 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:19:5:47:232 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:19:5:87:156 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:19:5:126:947 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:19:5:166:932 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:19:8:42:5 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:19:8:76:97 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:19:38:48:663 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:19:38:88:879 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..8152674c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:48:7:328:957 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 20:48:7:364:543 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 20:48:7:399:719 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 20:48:8:330:210 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 20:48:8:403:496 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 20:48:8:440:555 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:48:8:478:136 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:48:9:329:760 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 20:48:29:367:67 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 20:48:29:403:231 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 20:48:29:438:865 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..51139b15 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:18:17:761:965 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-18 15:18:17:796:249 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:18:20:728:244 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-18 15:18:20:769:6 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-18 15:18:20:808:999 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:18:20:849:778 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-18 15:18:23:762:560 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:18:23:796:655 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-18 15:18:53:769:126 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:18:53:809:232 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..62a3372c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:19:46:360:118 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:19:46:394:380 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:19:49:366:72 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:19:49:405:834 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:19:52:377:413 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:19:52:418:582 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:19:55:360:731 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:19:58:366:475 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:20:1:367:176 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:20:4:361:19 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:20:7:366:912 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:20:10:368:334 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:20:40:367:138 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:20:40:407:411 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..87e2ee39 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:24:33:810:836 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:24:33:845:129 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:24:36:816:56 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:24:36:855:950 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:24:36:895:695 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:24:39:817:2 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:24:39:857:907 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:24:39:898:278 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:24:39:938:953 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-18 15:24:42:810:777 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:24:42:844:500 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-18 15:25:12:817:326 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:25:12:857:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c39b88d9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:23:40:499:987 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:23:40:534:825 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:23:43:506:65 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:23:43:546:324 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:23:46:506:762 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-18 15:23:46:547:516 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:23:46:588:189 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:23:49:506:148 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:23:49:546:600 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:23:49:586:864 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-18 15:23:52:506:575 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:23:52:546:512 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-18 15:23:55:500:837 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-18 15:23:55:534:754 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:24:25:540:387 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:24:25:576:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..f1a37275 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:20:48:676:936 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-18 15:20:48:711:103 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:20:51:682:656 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:20:51:723:69 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:20:54:683:791 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:20:54:724:596 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:20:57:677:433 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:21:0:683:232 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:21:3:684:251 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:21:6:677:569 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:21:9:683:489 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:21:12:684:339 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:21:42:685:639 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:21:42:742:259 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..2928622b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:21:50:870:799 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:21:50:906:231 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:21:53:909:664 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-18 15:21:53:949:760 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:21:56:910:525 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-18 15:21:56:951:685 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-18 15:21:59:904:830 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-18 15:22:2:910:145 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-18 15:22:5:911:215 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:22:8:905:99 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:22:11:910:960 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:22:14:911:445 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:22:44:911:540 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:22:44:951:204 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..f289c970 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:25:21:89:672 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:25:21:123:663 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-18 15:25:21:160:114 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-18 15:25:24:94:583 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-18 15:25:24:134:468 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-18 15:25:24:174:149 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:25:24:213:969 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:25:27:95:483 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-18 15:25:27:136:386 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:25:27:177:66 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:25:27:217:409 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-18 15:25:30:89:331 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-18 15:25:30:123:645 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-18 15:26:0:97:637 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-18 15:26:0:138:240 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..d7a6c712 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:22:53:220:840 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-18 15:22:53:266:405 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:22:56:226:576 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-18 15:22:56:266:885 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:22:56:307:242 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:22:56:347:543 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-18 15:22:56:387:67 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:22:56:427:238 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-18 15:22:59:227:830 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-18 15:22:59:269:11 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-18 15:22:59:309:620 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-18 15:22:59:350:232 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-18 15:22:59:390:808 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:22:59:431:465 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-18 15:23:2:221:462 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-18 15:23:2:267:280 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-18 15:23:32:228:65 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-18 15:23:32:269:261 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..970f0a90 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:14:33:106:757 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:14:33:140:820 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:14:36:111:849 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:14:36:152:208 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:14:36:192:852 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-18 15:14:39:107:572 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:14:39:143:57 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:15:9:118:814 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:15:9:159:42 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..af3f964b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:13:48:817:780 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:13:48:851:985 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:13:51:784:465 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:13:51:824:621 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:13:51:864:809 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:13:54:818:406 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:13:54:852:79 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:14:24:825:217 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:14:24:865:695 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:14:24:906:497 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..f3a93e04 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:48:33:681:580 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:48:33:716:863 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:48:34:682:864 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:48:34:719:566 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 20:48:34:756:530 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:48:36:683:669 +Q6 finished at: 2022-4-23 20:48:36:685:371 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:48:37:681:978 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 20:48:57:683:237 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:48:57:718:849 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..76b0cf6b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:50:17:952:991 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:50:17:987:209 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:50:20:958:986 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:50:20:999:601 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:50:21:43:893 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:50:21:83:932 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-18 14:50:23:953:767 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:50:23:987:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-18 14:50:53:960:564 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:50:54:0:460 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..50bca9e1 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:51:2:233:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:51:2:267:654 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:51:5:239:481 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:51:5:279:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:51:8:234:307 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:51:8:268:89 + Q5 finished at: 2022-4-18 14:51:8:271:328 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:51:11:239:773 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:51:41:251:970 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:51:41:292:675 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..9edce572 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:51:49:526:931 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 14:51:49:560:970 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:51:52:532:530 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:51:52:572:399 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 14:51:52:611:820 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:51:55:529:106 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:51:58:533:496 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:52:1:527:429 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:52:31:534:641 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:52:31:574:524 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..cf81889a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:54:8:306:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:54:8:341:75 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:54:11:312:88 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 14:54:11:352:304 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:54:11:391:874 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 14:54:14:306:985 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:54:14:340:765 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:54:17:401:934 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:54:47:314:77 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:54:47:354:253 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..fc33f859 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:54:55:589:148 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:54:55:623:138 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:54:58:594:975 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 14:54:58:635:381 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:54:58:674:926 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:54:58:714:160 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 14:55:1:590:12 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:55:1:624:639 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:55:31:596:801 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:55:31:636:747 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..de8405ce --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:52:39:808:424 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 14:52:39:842:651 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:52:42:814:170 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:52:42:855:24 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-18 14:52:42:894:710 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:52:42:934:637 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 14:52:45:808:948 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:52:45:842:473 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-18 14:53:15:815:793 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:53:15:855:696 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..7ba1c0b9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:53:23:984:175 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 14:53:24:19:358 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:53:27:27:435 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-18 14:53:27:67:88 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-18 14:53:27:108:573 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:53:27:148:473 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 14:53:30:18:180 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:53:30:51:611 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-18 14:54:0:24:863 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:54:0:64:728 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..c29e97a8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:47:53:112:989 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:47:53:150:541 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:47:56:118:294 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:47:56:158:215 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:47:56:198:334 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 14:47:59:113:306 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:48:2:198:833 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:48:5:113:211 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:48:35:120:89 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:48:35:160:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ecd63f83 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:48:43:395:933 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:48:43:429:935 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:48:46:401:616 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:48:46:441:474 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:48:46:481:307 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:48:46:520:662 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 14:48:49:396:508 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 14:48:49:430:286 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 14:49:19:403:316 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 14:49:19:443:482 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..0dd9262a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:55:39:902:589 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:55:39:936:737 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:55:42:908:401 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:55:42:948:303 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 14:55:42:988:784 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:55:45:909:449 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-18 14:55:45:950:558 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-18 14:55:45:991:68 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-18 14:55:48:903:415 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:55:48:937:506 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:55:51:909:398 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:55:54:910:182 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 14:56:24:949:534 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:56:24:988:937 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..5d80be7e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-18 14:56:33:228:606 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-18 14:56:33:269:487 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-18 14:56:36:222:301 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-18 14:56:36:256:594 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 14:56:39:229:34 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-18 14:56:39:270:424 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 14:56:39:311:222 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 14:56:42:228:93 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 14:56:42:267:958 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 14:56:45:229:648 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 14:56:48:222:780 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:56:51:228:973 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 14:56:54:229:651 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:57:24:228:965 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 14:57:24:270:535 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 14:57:24:311:285 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..2ec15f59 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:57:32:576:60 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:57:32:609:998 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:57:35:581:748 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 14:57:35:621:711 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 14:57:35:661:482 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:57:38:586:149 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-18 14:57:38:627:911 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-18 14:57:38:669:317 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-18 14:57:41:576:867 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:57:41:611:120 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:57:44:582:405 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:57:47:583:981 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 14:58:17:583:297 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:58:17:622:798 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..38b0b3a9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:58:25:754:376 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-18 14:58:25:789:385 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:58:28:793:634 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-18 14:58:28:833:968 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 14:58:28:873:882 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 14:58:31:794:285 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-18 14:58:31:837:190 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-18 14:58:31:877:930 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-18 14:58:34:791:90 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 14:58:34:825:174 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 14:58:37:794:63 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 14:58:40:795:95 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 14:59:10:794:948 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 14:59:10:836:247 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..c9f759b5 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:42:25:329:647 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:42:25:367:350 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:42:28:338:202 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:42:28:417:951 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 14:42:31:329:662 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:42:34:336:85 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 14:43:4:376:745 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 14:43:4:417:82 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..be50eb4e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:44:2:863:843 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:44:2:897:684 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:44:5:867:300 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:44:5:907:946 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-18 14:44:8:861:613 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:44:11:867:57 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:44:14:861:592 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 14:44:44:868:705 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:44:44:908:925 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..f3b6f135 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:44:53:107:861 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:44:53:143:759 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:44:56:113:591 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 14:44:56:153:556 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:44:56:193:747 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-18 14:44:59:108:653 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:44:59:143:188 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 14:45:29:115:663 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:45:29:155:622 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..36bb4c28 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:47:5:817:242 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:47:5:851:212 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:47:8:822:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 14:47:11:817:829 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 14:47:11:851:535 + Q4 finished at: 2022-4-18 14:47:11:855:51 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 14:47:14:823:696 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 14:47:44:824:494 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:47:44:864:411 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..7954b328 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:43:12:614:644 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 14:43:12:649:188 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:43:15:620:548 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 14:43:15:660:442 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 14:43:18:615:494 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:43:21:621:17 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:43:24:614:884 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 14:43:54:622:39 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:43:54:662:17 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..4778fa8c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:45:37:351:867 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 14:45:37:386:232 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:45:40:357:133 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-18 14:45:40:398:697 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:45:40:438:395 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 14:45:43:352:239 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:45:43:385:955 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-18 14:46:13:358:942 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:46:13:400:860 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..291e0b0a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:46:21:534:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 14:46:21:569:383 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:46:24:572:930 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-18 14:46:24:612:705 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 14:46:24:652:598 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 14:46:27:567:736 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 14:46:27:601:108 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-18 14:46:57:574:641 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:46:57:614:620 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..21e0db23 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:4:46:937:125 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:4:46:971:154 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:4:49:942:963 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:4:49:982:987 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:4:52:937:933 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:4:52:971:706 + Q5 finished at: 2022-4-18 15:4:52:974:952 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:4:53:15:127 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:5:22:944:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:5:22:984:956 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..504f2e5f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:5:31:217:63 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:5:31:251:36 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:5:34:222:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:5:34:262:976 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:5:37:221:315 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-3c-625d0dbb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:5:37:818:624 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-3c-625d0dbb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..6c7115d9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:6:18:642:90 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:6:18:676:380 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:6:21:608:637 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:6:21:648:709 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:6:24:646:644 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-41-625d0dea-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:6:25:243:498 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-41-625d0dea-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..6d15cfc9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:7:9:85:633 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:7:9:119:770 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:7:12:52:469 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:7:12:97:971 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:7:15:97:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:7:15:137:896 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-46-625d0e1d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-18 15:7:15:787:384 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-46-625d0e1d-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..1f3877b8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:1:958:380 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 20:49:1:993:904 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:2:959:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 20:49:2:998:453 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 20:49:3:35:173 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 20:49:4:960:156 +Q6 finished at: 2022-4-23 20:49:4:961:669 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 20:49:4:997:38 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:49:24:960:158 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:49:24:995:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c393a0e0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:29:236:396 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 20:49:29:271:838 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:30:237:696 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 20:49:30:276:528 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 20:49:30:312:997 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:49:32:238:222 +Q6 finished at: 2022-4-23 20:49:32:240:7 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:49:33:236:881 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:49:53:238:214 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:49:53:273:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..07a39ebd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:9:31:92:426 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:9:31:126:574 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:9:34:99:509 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:9:34:147:241 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:9:37:93:211 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:9:37:127:396 + Q5 finished at: 2022-4-18 15:9:37:130:598 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:9:40:107:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:10:10:99:723 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:10:10:139:759 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..df3fe717 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:10:18:372:289 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:10:18:406:219 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:10:21:378:67 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:10:21:418:529 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:10:24:373:147 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:10:30:373:213 + Q5 finished at: 2022-4-18 15:10:30:376:121 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:10:30:416:710 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:11:0:379:838 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:11:0:420:795 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..cda73ace --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:11:8:652:296 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:11:8:686:98 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:11:11:658:268 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:11:11:697:925 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:11:14:653:77 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:11:14:687:197 + Q5 finished at: 2022-4-18 15:11:14:690:262 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:11:14:730:80 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:11:44:659:975 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:11:44:700:882 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..0c14f0d9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:11:52:967:902 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:11:53:1:985 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:11:55:973:459 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:11:56:13:682 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:11:58:975:376 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:11:59:16:365 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-18 15:12:1:971:972 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-54-625d0f38-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:12:2:869:558 + Q8 finished at: 2022-4-18 15:12:2:945:925 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-54-625d0f38-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..4037cdf0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:12:46:428:155 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:12:46:462:168 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:12:49:394:761 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:12:49:434:818 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:12:52:394:768 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:12:58:439:739 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-18 15:13:1:432:535 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-5a-625d0f6e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:13:2:329:704 + Q8 finished at: 2022-4-18 15:13:4:467:579 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-e5-5a-625d0f6e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d318473f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 14:59:19:61:270 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 14:59:19:97:151 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 14:59:22:68:408 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 14:59:25:61:799 + Q4 finished at: 2022-4-18 14:59:25:67:826 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 14:59:28:68:198 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 14:59:58:68:828 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 14:59:58:124:918 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 14:59:58:165:148 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..32a0f8df --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:0:6:364:302 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:0:6:398:669 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:0:9:370:295 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-18 15:0:12:365:135 + Q4 finished at: 2022-4-18 15:0:12:368:336 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:0:15:370:896 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:0:45:371:971 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:0:45:427:511 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:0:45:467:517 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..6468e30c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:0:53:666:194 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:0:53:700:244 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:0:56:672:40 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-18 15:0:59:666:436 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:0:59:701:165 + Q4 finished at: 2022-4-18 15:0:59:703:444 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:1:2:673:74 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:1:32:673:475 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:1:32:713:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..8425c099 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:1:40:914:644 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:1:40:948:992 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:1:43:920:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-18 15:1:46:915:179 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:1:46:949:309 + Q4 finished at: 2022-4-18 15:1:46:952:502 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:1:46:992:292 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:2:16:923:975 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:2:16:964:942 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b2ca35a6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:4:2:656:456 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:4:2:690:321 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:4:5:662:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:4:8:657:49 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:4:8:691:41 + Q4 finished at: 2022-4-18 15:4:8:694:118 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:4:8:733:763 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:4:38:664:425 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:4:38:704:874 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..b560cfc8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:49:57:479:233 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:49:57:514:659 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:49:58:481:719 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:49:58:520:918 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:50:0:481:456 +Q5 finished at: 2022-4-23 20:50:0:483:211 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 20:50:0:518:609 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:50:20:481:34 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:50:20:519:63 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9319700f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:50:24:726:989 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:50:24:763:466 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:50:25:728:286 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:50:25:765:27 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:50:27:729:32 +Q5 finished at: 2022-4-23 20:50:27:730:794 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 20:50:28:727:661 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:50:48:728:730 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:50:48:764:315 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..cb713a4a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:42:503:147 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:42:535:828 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:43:503:318 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:41:43:536:624 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:41:43:569:303 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:41:43:602:157 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:41:44:504:230 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:41:44:536:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:41:54:507:703 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:41:54:543:599 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..1d57c3f9 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:58:770:750 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:58:804:38 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:59:772:232 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:41:59:805:544 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:41:59:838:390 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:41:59:871:278 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:42:0:771:234 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:42:0:803:707 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:42:10:775:592 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:42:10:811:632 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..54a43dfe --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:42:15:43:528 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:42:15:111:407 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:42:16:43:648 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:42:16:76:829 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:42:16:109:549 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:42:17:43:902 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:42:17:81:34 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:42:18:44:114 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:42:28:47:615 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:42:28:83:552 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..c2e4b535 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:5:186:275 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:43:5:219:0 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:6:191:698 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:43:6:225:772 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:43:6:258:480 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:43:6:291:496 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:43:7:187:103 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:43:7:219:603 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:43:17:190:681 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:43:17:226:425 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..e05579c4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:52:34:444:395 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 20:52:34:486:718 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 20:52:34:525:613 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 20:52:35:443:334 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 20:52:35:517:933 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 20:52:35:555:85 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:52:35:592:364 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:52:36:444:982 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 20:52:56:479:560 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 20:52:56:516:90 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 20:52:56:551:794 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..c1db5233 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:42:48:918:38 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-18 15:42:48:950:638 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:42:49:886:179 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-18 15:42:49:919:732 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-18 15:42:49:952:957 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:42:49:985:978 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-18 15:42:50:939:456 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:42:50:972:251 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-18 15:43:0:922:528 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:43:0:958:471 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..76a39fc2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:21:486:548 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:43:21:519:365 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:22:487:448 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:43:22:520:776 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:43:23:490:601 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:43:23:527:110 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:43:24:487:98 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:43:25:487:368 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:43:26:490:929 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:43:27:486:918 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:43:28:488:84 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:43:29:490:910 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:43:39:498:612 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:43:39:537:664 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..6b86a05f --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:45:4:907:138 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:45:4:940:67 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:45:5:907:603 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:45:5:940:761 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:45:5:974:3 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:45:6:911:187 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:45:6:947:667 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:45:6:983:867 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:45:7:20:321 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-18 15:45:7:908:111 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:45:7:940:996 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-18 15:45:17:914:699 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:45:17:953:720 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..9b5df999 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:45:592:531 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:44:45:627:679 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:46:591:988 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:44:46:625:291 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:44:47:595:884 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-18 15:44:47:632:397 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:44:47:668:703 + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:44:48:599:57 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:44:48:639:8 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:44:48:678:444 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-18 15:44:49:592:998 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:44:49:626:54 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-18 15:44:50:592:840 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-18 15:44:50:625:103 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:45:0:640:113 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:45:0:680:241 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..bc238946 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:43:43:796:182 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-18 15:43:43:829:24 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:43:44:796:121 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:43:44:829:649 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:43:45:799:665 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:43:45:835:966 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-18 15:43:46:796:876 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-18 15:43:47:796:910 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-18 15:43:48:800:63 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:43:49:796:670 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:43:50:796:783 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:43:51:800:145 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:44:1:808:289 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:1:848:132 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..e52d527d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:5:976:315 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-18 15:44:6:9:821 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:7:8:306 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-18 15:44:7:41:457 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:44:8:11:878 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-18 15:44:8:48:312 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-18 15:44:9:9:542 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-18 15:44:10:9:19 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-18 15:44:11:12:264 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:44:12:8:958 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:44:13:9:279 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:44:14:12:579 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:44:24:16:442 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:24:55:566 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..b61161b0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:45:22:181:589 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:45:22:214:460 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-18 15:45:22:247:289 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-18 15:45:23:183:201 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-18 15:45:23:216:217 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-18 15:45:23:248:810 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:45:23:282:61 + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:45:24:184:513 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-18 15:45:24:221:764 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:45:24:257:976 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:45:24:294:324 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-18 15:45:25:181:400 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-18 15:45:25:214:195 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-18 15:45:35:185:328 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-18 15:45:35:222:134 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..2e1ff714 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:44:28:317:196 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-18 15:44:28:349:845 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:44:29:324:585 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-18 15:44:29:357:807 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:44:29:391:618 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-18 15:44:29:424:717 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-18 15:44:29:457:395 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:44:29:490:445 + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-18 15:44:30:320:712 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-18 15:44:30:359:933 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-18 15:44:30:396:251 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-18 15:44:30:432:490 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-18 15:44:30:468:801 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:44:30:505:164 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-18 15:44:31:324:325 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-18 15:44:31:356:468 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-18 15:44:41:324:744 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-18 15:44:41:363:970 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..7536ff22 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:26:235:443 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:41:26:268:102 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:27:235:580 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:41:27:268:920 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:41:27:301:787 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-18 15:41:28:238:656 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:41:28:271:415 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:41:38:239:976 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:41:38:275:804 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..99abff34 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:41:9:951:482 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:41:9:984:828 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:41:10:918:709 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:41:10:951:859 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:41:10:984:546 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:41:11:951:166 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:41:11:984:962 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:41:21:957:389 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:41:21:993:134 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:41:22:29:3 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..581ab111 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:0:809:710 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:0:848:420 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:1:808:760 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:53:1:846:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 20:53:1:883:914 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 20:53:3:806:834 + Q7 finished at: 2022-4-23 20:53:3:809:936 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:4:810:446 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 20:53:24:808:607 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:53:24:844:204 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..fc2f295b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:35:191:9 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:35:223:638 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:36:191:121 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:36:224:531 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:32:36:257:343 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:32:36:295:408 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-18 15:32:37:191:680 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:32:37:224:165 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-18 15:32:47:195:409 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:32:47:230:986 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1a3f6b7a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:51:473:702 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:51:506:272 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:52:473:942 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:52:506:897 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:32:53:474:222 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:32:53:507:505 + Q5 finished at: 2022-4-18 15:32:53:508:502 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:32:54:474:556 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:33:4:478:280 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:4:513:910 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..bb5a9809 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:8:741:873 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:33:8:774:486 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:9:741:921 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:33:9:776:97 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:33:9:809:74 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:33:10:744:265 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:33:11:746:307 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:12:742:249 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:33:22:746:921 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:22:782:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..08d121ec --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:59:480:793 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:33:59:513:333 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:0:481:11 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:34:0:514:150 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:0:547:112 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:34:1:482:216 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:34:1:514:826 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:34:2:481:437 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:34:12:485:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:34:12:521:162 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..39bdc507 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:34:16:747:495 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:34:16:780:197 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:17:748:60 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:34:17:781:467 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:17:814:403 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:34:17:846:716 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-18 15:34:18:748:307 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:34:18:781:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:34:28:752:86 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:34:28:787:811 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..ac9c646c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:27:8:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 15:33:27:41:470 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:28:9:312 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:33:28:42:267 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:33:28:74:770 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:33:28:107:682 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 15:33:29:9:580 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:29:41:382 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-18 15:33:39:13:226 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:39:50:151 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..5ebb0989 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:33:43:178:584 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-18 15:33:43:212:230 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:33:44:210:667 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-18 15:33:44:243:769 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-18 15:33:44:276:563 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:33:44:309:432 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-18 15:33:45:211:461 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:33:45:243:579 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-18 15:33:55:214:990 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:33:55:250:523 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..5a6df7ba --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:42:388:115 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:31:42:420:691 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:43:388:319 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:31:43:421:737 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:31:43:454:577 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-18 15:31:44:388:698 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:31:45:388:964 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:31:46:388:563 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:31:56:392:337 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:31:56:427:895 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..1189597e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:32:0:654:190 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:32:0:687:468 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:32:1:654:418 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:32:1:687:508 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:32:1:721:417 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:32:1:754:248 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-18 15:32:2:654:804 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:32:2:687:185 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:32:12:658:649 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:32:12:694:91 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..9e2464a5 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:34:33:56:258 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:34:33:88:925 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:34:34:56:596 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:34:34:89:610 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-18 15:34:34:122:604 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:34:35:60:178 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-18 15:34:35:96:693 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-18 15:34:35:133:314 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-18 15:34:36:57:369 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:34:36:91:288 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:34:37:57:438 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:34:38:60:607 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:34:48:102:969 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:34:48:142:43 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..25542689 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-18 15:34:52:378:962 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-18 15:34:52:419:417 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-18 15:34:53:371:775 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-18 15:34:53:404:324 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:34:54:375:267 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-18 15:34:54:411:762 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:34:54:448:38 + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-18 15:34:55:372:244 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-18 15:34:55:405:70 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-18 15:34:56:379:815 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-18 15:34:57:378:664 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:34:58:372:688 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-18 15:34:59:375:722 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:9:379:67 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-18 15:35:9:418:904 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-18 15:35:9:457:994 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..31b814bc --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:13:720:180 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:35:13:752:744 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:14:720:892 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-18 15:35:14:753:984 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 15:35:14:786:754 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:35:15:724:61 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-18 15:35:15:760:291 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-18 15:35:15:796:609 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-18 15:35:16:721:4 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:35:16:753:533 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:35:17:721:481 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:35:18:724:500 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-18 15:35:28:728:40 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:28:766:952 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..25d8f7f2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:32:898:5 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-18 15:35:32:931:710 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:33:930:119 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-18 15:35:33:963:273 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-18 15:35:33:996:350 + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:35:34:933:794 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-18 15:35:34:970:138 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-18 15:35:35:6:603 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-18 15:35:35:931:9 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-18 15:35:35:963:589 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-18 15:35:36:931:15 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-18 15:35:37:934:240 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-18 15:35:47:937:760 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-18 15:35:47:976:647 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..08bf1251 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:29:42:702:59 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:29:42:734:684 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:29:43:701:861 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:29:43:767:438 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 15:29:44:702:25 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:29:45:702:159 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-18 15:29:55:741:497 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:29:55:776:948 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..b68cf440 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:18:208:850 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:30:18:241:309 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:19:208:486 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:30:19:241:706 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-18 15:30:20:208:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:30:21:209:261 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:22:209:569 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 15:30:32:212:765 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:32:248:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..16eb2a2c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:36:442:245 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:30:36:474:912 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:37:442:684 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-18 15:30:37:477:613 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:30:37:511:550 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-18 15:30:38:442:847 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:38:475:369 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-18 15:30:48:447:578 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:48:483:388 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6eff50b3 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:25:117:112 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:31:25:150:728 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:26:116:285 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 15:31:27:116:906 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:31:27:149:268 + Q4 finished at: 2022-4-18 15:31:27:149:697 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:31:28:117:140 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:31:38:120:538 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:38:156:212 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..ae7a3812 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:29:59:971:224 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:30:0:6:742 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:0:971:15 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:30:1:4:112 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-18 15:30:1:973:150 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:30:2:971:826 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:3:971:345 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:30:13:975:541 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:30:14:11:11 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..fedb6911 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:30:52:677:914 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:30:52:710:553 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:30:53:678:111 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-18 15:30:53:711:28 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:30:53:743:666 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 15:30:54:678:654 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:30:54:711:95 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-18 15:31:4:683:585 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:4:720:69 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b0c575ac --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:31:8:848:995 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-18 15:31:8:882:541 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:31:9:881:189 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-18 15:31:9:914:245 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:31:9:946:941 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-18 15:31:10:881:345 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:31:10:913:334 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-18 15:31:20:885:412 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:31:20:922:726 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..5dc2dacc --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:29:104:260 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:29:143:888 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:30:104:611 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 20:53:30:143:522 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-23 20:53:31:105:410 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:31:150:626 + Q5 finished at: 2022-4-23 20:53:31:153:680 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:53:31:191:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:53:51:102:653 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:53:51:138:347 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e88fd420 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:8:255:63 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:8:288:881 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:9:255:199 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:9:288:502 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:10:257:327 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-58-625d1560-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:38:10:857:476 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-58-625d1560-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..22c51306 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:25:748:398 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:25:781:326 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:26:708:801 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:26:742:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:27:741:867 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-5d-625d1571-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-18 15:38:28:343:51 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-5d-625d1571-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cd0327ce --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:38:44:162:396 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:38:44:195:16 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:38:45:130:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:38:45:163:396 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-18 15:38:46:163:499 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:38:46:196:538 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-62-625d1584-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-18 15:38:46:863:642 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-62-625d1584-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..3a051dcb --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:0:620:344 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:39:0:652:938 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:1:586:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:39:1:619:813 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:39:1:652:398 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:39:3:619:382 +Q6 finished at: 2022-4-18 15:39:3:620:240 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:39:3:656:252 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:13:622:773 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:13:658:609 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..e3e3f2fd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:17:921:422 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-18 15:39:17:954:141 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:18:886:588 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:39:18:919:740 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-18 15:39:18:954:40 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:39:20:887:874 +Q6 finished at: 2022-4-18 15:39:20:888:700 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:39:21:887:491 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:31:892:38 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:31:927:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..9679f888 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:36:208:856 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:39:36:242:900 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:37:207:699 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:39:37:241:320 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:39:38:207:896 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:39:38:241:263 + Q5 finished at: 2022-4-18 15:39:38:241:778 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-18 15:39:39:208:259 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:39:49:211:745 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:39:49:248:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..11261695 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:39:53:476:591 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:39:53:515:580 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:39:54:476:762 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-18 15:39:54:510:3 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-18 15:39:55:482:961 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-18 15:39:57:477:603 + Q5 finished at: 2022-4-18 15:39:57:478:602 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:39:57:511:478 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-18 15:40:7:485:163 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-18 15:40:7:521:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..a954df96 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:53:55:401:230 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 20:53:55:440:239 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:53:56:400:152 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 20:53:56:440:602 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 20:53:57:403:955 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 20:53:57:442:480 + Q5 finished at: 2022-4-23 20:53:57:445:438 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 20:53:57:482:833 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 20:54:17:400:9 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 20:54:17:435:982 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..8505987b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:40:28:66:634 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:40:28:99:327 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:40:29:67:485 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:40:29:100:504 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-18 15:40:30:70:65 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:40:30:107:10 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-18 15:40:31:68:216 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-70-625d15ec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:40:31:968:349 + Q8 finished at: 2022-4-18 15:40:32:37:223 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-70-625d15ec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..eab33a57 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:40:47:562:721 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:40:47:595:263 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:40:48:530:736 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-18 15:40:48:563:863 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-18 15:40:49:530:738 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-18 15:40:51:567:663 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-18 15:40:52:564:273 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-76-625d15ff-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-18 15:40:53:464:405 + Q8 finished at: 2022-4-18 15:40:53:598:596 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='2-74-76-625d15ff-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..c326781e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:35:52:175:2 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:35:52:207:421 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:35:53:175:224 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-18 15:35:54:175:611 + Q4 finished at: 2022-4-18 15:35:54:175:906 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:35:55:176:673 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:36:5:179:750 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:36:5:232:914 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:5:268:602 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..03555579 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:9:468:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:9:502:399 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:10:469:357 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-18 15:36:11:468:187 + Q4 finished at: 2022-4-18 15:36:11:468:502 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:36:12:468:540 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-18 15:36:22:471:834 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-18 15:36:22:524:49 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:22:559:527 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..ea4f4df2 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:26:762:755 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:26:795:330 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:27:762:958 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-18 15:36:28:763:312 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-18 15:36:28:796:284 + Q4 finished at: 2022-4-18 15:36:28:796:633 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-18 15:36:29:763:657 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:36:39:767:743 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:39:804:45 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..6798de5e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:36:43:998:163 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:36:44:33:978 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:36:44:998:769 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-18 15:36:45:998:973 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:36:46:31:449 + Q4 finished at: 2022-4-18 15:36:46:31:804 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:36:46:64:624 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-18 15:36:56:2:589 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:36:56:38:224 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..640bfdf4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:37:35:714:993 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-18 15:37:35:747:473 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:37:36:731:225 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-18 15:37:37:716:82 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:37:37:749:566 + Q4 finished at: 2022-4-18 15:37:37:751:461 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-18 15:37:37:785:912 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:37:47:719:563 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:37:47:755:527 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..8515e2a6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 20:54:21:659:361 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 20:54:21:698:431 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 20:54:22:658:243 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-23 20:54:22:697:789 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-23 20:54:24:656:112 +Q6-T1 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 20:54:24:658:821 +Q6 finished at: 2022-4-23 20:54:24:694:817 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 20:54:44:657:889 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 20:54:44:693:623 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..2b455816 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-18 15:37:17:472:38 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-18 15:37:17:504:623 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-18 15:37:18:472:337 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-18 15:37:18:505:413 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-18 15:37:20:472:946 +Q5 finished at: 2022-4-18 15:37:20:473:652 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-18 15:37:21:474:879 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-18 15:37:31:484:98 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-18 15:37:31:520:53 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..ed9314ee --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:55:649:6 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:23:55:683:111 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:56:615:509 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:23:56:655:683 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:23:57:654:414 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:23:57:693:262 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-99-6263fdeb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:23:58:350:6 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-99-6263fdeb-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..8a79473b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:24:22:74:447 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:24:22:109:490 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:24:23:29:810 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:24:23:69:169 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:24:24:68:968 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:24:24:107:661 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a0-6263fe06-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:24:24:775:449 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a0-6263fe06-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..b9dcf586 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:24:48:488:80 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:24:48:522:156 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:24:49:454:536 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:24:49:493:665 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:24:50:493:547 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a7-6263fe20-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:24:51:89:337 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-a7-6263fe20-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..09aae02d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:26:8:699:307 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:26:8:734:564 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:26:9:665:879 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:26:9:705:680 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:26:10:704:891 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:26:10:743:456 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b9-6263fe70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:26:11:400:883 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b9-6263fe70-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..0d192f0b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:25:15:968:256 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-23 21:25:16:2:367 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-23 21:25:16:36:275 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-23 21:25:16:934:793 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:25:17:968:681 + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2022-4-23 21:25:17:973:644 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-23 21:25:18:12:292 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:25:18:51:74 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-23 21:25:37:970:562 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-23 21:25:38:6:22 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 21:25:38:40:887 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..5c38d3c6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: tdsql #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:25:42:272:969 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-23 21:25:42:307:782 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:25:43:277:568 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-23 21:25:43:317:621 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2022-4-23 21:25:44:278:959 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:25:44:317:748 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b2-6263fe56-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:25:44:974:595 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-b2-6263fe56-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..a203da36 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt @@ -0,0 +1,86 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:21:28:7:132 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 12:21:28:44:30 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:21:28:970:0 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 12:21:29:7:199 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:21:29:970:13 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 12:21:30:4:790 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2022-4-24 12:21:33:8:364 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-157-6264d049-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 12:21:33:904:522 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 12:21:52:709:607 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-157-6264d049-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..2c1658b8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:29:9:223:885 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:29:9:258:237 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:29:10:190:386 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:29:11:190:408 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-23 21:29:12:224:901 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-23 21:29:12:258:791 + Q4 finished at: 2022-4-23 21:29:12:263:517 + Q5-T2 execute opt: 'COMMIT'; + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:29:12:298:983 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:29:12:302:324 + Q8 finished at: 2022-4-23 21:29:12:334:487 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:29:12:369:975 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-23 21:29:32:223:152 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-23 21:29:32:255:149 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..83f30d91 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,171 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:20:21:906:223 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 12:20:21:943:337 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:20:22:905:735 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 12:20:22:979:246 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:20:23:902:219 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:20:24:906:45 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 12:20:26:908:95 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 12:20:26:945:454 + Q9 finished at: 2022-4-24 12:20:26:945:830 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 12:20:26:982:432 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 12:20:26:982:731 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 12:20:27:19:39 + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14c-6264d007-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q6 failed at: 2022-4-24 12:20:27:504:275 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14c-6264d007-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..843fc799 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,86 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:20:41:367:839 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 12:20:41:404:536 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-24 12:20:42:331:569 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 12:20:42:368:578 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-24 12:20:43:331:621 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 12:20:43:367:50 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2022-4-24 12:20:46:369:581 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14f-6264d01b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q9 failed at: 2022-4-24 12:20:47:265:789 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 12:21:6:71:47 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-14f-6264d01b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..e878d4a8 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,81 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:27:39:902:9 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-23 21:27:39:937:101 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:27:40:901:992 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-23 21:27:40:941:185 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:27:41:901:984 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-23 21:27:41:938:715 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-d3-6263fecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q8 failed at: 2022-4-23 21:27:44:741:390 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-23 21:28:4:638:982 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-d3-6263fecc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..dd59de9c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-24 12:21:10:533:651 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 12:21:10:570:426 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 12:21:10:607:10 + Q4-T2 execute opt: 'BEGIN' + Q4 finished at: 2022-4-24 12:21:11:497:374 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 12:21:11:535:777 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN' + Q8 finished at: 2022-4-24 12:21:12:497:400 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 12:21:12:533:554 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2022-4-24 12:21:13:536:18 + Q7-T2 execute opt: 'COMMIT'; + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 12:21:13:569:7 + Q11-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 12:21:13:572:975 + Q11 finished at: 2022-4-24 12:21:13:602:2 +Q12 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-168-6264d036-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q12 failed at: 2022-4-24 12:21:14:735:866 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-168-6264d036-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..58ad193c --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: tdsql #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:28:12:381:50 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-23 21:28:12:415:314 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:28:13:347:668 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-23 21:28:13:388:208 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 21:28:13:432:630 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-23 21:28:13:471:305 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN' + Q9 finished at: 2022-4-23 21:28:14:347:665 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-23 21:28:14:383:666 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-23 21:28:14:431:981 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:28:15:386:970 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 21:28:15:425:795 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-23 21:28:15:431:774 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-23 21:28:15:467:372 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 21:28:15:503:176 +Q15 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-de-6263feec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q15 failed at: 2022-4-23 21:28:16:882:722 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-de-6263feec-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0046ee13 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:29:218:876 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:23:29:252:817 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:30:223:370 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-23 21:23:31:219:728 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:23:31:253:629 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-93-6263fdd2-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:23:31:624:832 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-93-6263fdd2-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..1112ca71 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:23:2:902:855 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:23:2:937:12 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:23:3:906:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-23 21:23:4:902:782 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:23:4:936:336 + Q4 finished at: 2022-4-23 21:23:4:941:187 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:23:4:979:961 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:23:24:939:639 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:23:24:974:486 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:23:25:9:325 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..e37c27be --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:5:6:259:733 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:5:6:295:417 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:5:7:224:975 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:5:7:263:576 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:5:8:264:771 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-19-6263f982-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:5:8:865:144 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-19-6263f982-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..bc978167 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:5:34:679:937 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:5:34:715:292 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:5:35:645:237 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:5:35:683:945 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:5:36:684:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:5:36:723:688 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e-6263f99e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:5:37:381:533 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-1e-6263f99e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..d43aa058 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:1:133:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:6:1:169:57 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:2:99:229 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:6:2:138:153 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:6:3:138:754 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-22-6263f9b9-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:6:3:735:442 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-22-6263f9b9-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..5167cd5b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:28:555:531 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:6:28:590:720 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:29:520:909 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:6:29:559:765 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:6:30:560:114 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27-6263f9d4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:6:31:156:890 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-27-6263f9d4-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..84bbe279 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:7:49:453:427 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:7:49:488:734 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:7:50:457:634 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:7:50:497:539 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:7:51:454:397 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:7:51:489:711 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26-6263fa26-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:7:51:958:437 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-26-6263fa26-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..dc982e69 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:8:16:882:872 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:8:16:918:172 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:8:17:844:956 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:8:17:884:959 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 21:8:18:880:613 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:8:18:915:947 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-29-6263fa41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:8:19:384:775 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-29-6263fa41-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..7f73f850 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:6:56:975:211 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 21:6:57:10:525 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:6:57:940:661 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 21:6:58:975:772 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:6:59:10:604 + Q4 finished at: 2022-4-23 21:6:59:14:431 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-23 21:6:59:52:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:6:59:91:149 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-23 21:7:18:976:531 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:7:19:11:604 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..1b441532 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tdsql #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:7:23:144:21 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 21:7:23:180:333 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:7:24:181:749 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 21:7:25:179:176 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:7:25:214:53 + Q4 finished at: 2022-4-23 21:7:25:217:843 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-23 21:7:25:256:255 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:7:25:294:613 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-23 21:7:45:179:818 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 21:7:45:215:193 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a0a7067e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:4:11:407:474 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:4:11:442:588 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:4:12:410:694 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:4:12:454:807 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:4:13:412:705 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-10-6263f94b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:4:14:9:332 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-10-6263f94b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..71ba70ab --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:4:39:829:953 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:4:39:865:329 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:4:40:794:867 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:4:40:833:998 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:4:41:836:960 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:4:41:875:264 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-15-6263f967-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:4:42:533:750 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-15-6263f967-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..f6be0c64 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt @@ -0,0 +1,70 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:8:43:338:753 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:8:43:374:5 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:8:44:304:142 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:8:44:343:826 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:8:45:339:232 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:8:45:375:296 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 21:8:46:343:983 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-38-6263fa5b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:8:47:240:544 + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-23 21:8:47:312:162 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-38-6263fa5b-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c0a2eaa0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,166 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN' + Q1 finished at: 2022-4-23 21:9:12:760:640 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-23 21:9:12:835:441 +Q3-T1 execute opt: 'BEGIN' +Q3 finished at: 2022-4-23 21:9:13:759:71 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:9:14:724:513 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-23 21:9:14:761:179 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN' + Q8 finished at: 2022-4-23 21:9:15:724:545 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:9:16:766:460 +Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-42-6263fa79-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q4 failed at: 2022-4-23 21:9:17:164:652 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-23 21:9:36:765:137 + Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]set_1650716943_1:Lock wait timeout exceeded; try restarting transaction errcode: HY000 + Q9 failed at: 2022-4-23 21:9:37:669:929 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-42-6263fa79-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..078e00c4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,70 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:9:44:216:510 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:9:44:251:834 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:9:45:181:951 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:9:45:220:819 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:9:46:181:947 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-23 21:9:46:221:343 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 21:9:47:221:528 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-4c-6263fa98-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:9:48:118:301 + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-23 21:9:48:189:819 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-4c-6263fa98-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..1e0f80fd --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,67 @@ +#### db_type: tdsql #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:10:13:531:113 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-23 21:10:13:567:618 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:10:14:531:106 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-23 21:10:14:569:933 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:10:15:531:102 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-23 21:10:15:567:279 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 21:10:16:570:892 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-56-6263fab5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:10:17:467:517 + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-23 21:10:17:539:32 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-56-6263fab5-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..51ed9b31 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:1:674:100 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:1:1:713:609 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:2:677:288 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 21:1:3:674:682 + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:1:3:678:335 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:1:4:677:466 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 21:1:24:710:918 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 21:1:24:745:980 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0424a315 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:57:194:109 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:1:57:229:409 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:58:197:550 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-23 21:1:59:195:159 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:1:194:989 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:2:1:198:820 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:2:1:237:28 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 21:2:21:195:609 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:2:21:230:587 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..1ca86551 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:2:25:437:120 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:2:25:472:467 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:2:26:440:447 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-23 21:2:27:437:581 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:27:472:773 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 21:2:27:476:613 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:2:27:514:707 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 21:2:47:438:459 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:2:47:473:445 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..1b87a0e4 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:3:44:129:351 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:3:44:164:425 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:3:45:132:579 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 21:3:46:129:832 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:3:46:165:157 + Q4 finished at: 2022-4-23 21:3:46:168:771 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:3:47:133:225 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:4:7:130:793 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:4:7:166:391 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..79213e34 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:1:28:949:843 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:1:28:985:241 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:1:29:953:131 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 21:1:30:950:579 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:1:32:950:136 + Q4 finished at: 2022-4-23 21:1:32:954:36 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:1:32:992:550 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:1:52:951:67 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:1:52:986:42 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..998e13f1 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:2:51:686:191 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 21:2:51:721:411 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:2:52:688:572 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 21:2:53:686:132 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:2:53:720:909 + Q4 finished at: 2022-4-23 21:2:53:724:671 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:2:53:763:7 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-23 21:3:13:686:775 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:3:13:721:763 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..f7815365 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tdsql #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:3:17:854:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 21:3:17:890:670 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:3:18:892:326 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 21:3:19:889:624 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:3:19:924:534 + Q4 finished at: 2022-4-23 21:3:19:928:294 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:3:19:966:726 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-23 21:3:39:890:625 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:3:39:926:177 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..b6c41c1d --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:16:34:13:569 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:16:34:52:516 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:16:35:16:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 21:16:35:57:787 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:16:36:18:364 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:16:36:58:239 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-4e-6263fc32-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:16:36:715:254 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-4e-6263fc32-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..37a46f64 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:0:446:485 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:0:483:540 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:1:410:126 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:1:450:518 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:2:451:0 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-52-6263fc4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:17:3:47:730 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-52-6263fc4c-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..378176e1 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:27:877:89 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:27:913:861 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:28:840:946 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:28:884:493 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:29:881:876 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-57-6263fc67-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:17:30:478:940 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-57-6263fc67-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..19fd387e --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tdsql #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:17:56:307:471 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:17:56:344:300 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:17:57:271:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:17:57:311:373 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:17:58:312:281 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:17:58:352:90 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-5c-6263fc84-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q7 failed at: 2022-4-23 21:17:59:9:103 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-5c-6263fc84-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..eea7a9f0 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:18:22:740:399 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:18:22:777:399 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:18:23:704:326 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:18:23:744:461 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:18:24:745:136 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-60-6263fc9e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:18:25:341:791 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-60-6263fc9e-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..1b00fa9a --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:18:50:172:600 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 21:18:50:209:543 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:18:51:136:562 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:18:51:179:218 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-23 21:18:52:177:411 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-65-6263fcba-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q6 failed at: 2022-4-23 21:18:52:774:105 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-65-6263fcba-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..3abac102 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:19:18:603:104 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:19:18:639:782 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:19:19:567:54 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:19:19:607:243 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:19:20:604:377 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:19:20:641:144 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-7d-6263fcd7-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:19:21:108:353 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-7d-6263fcd7-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..7edfbd95 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:19:46:39:105 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:19:46:75:891 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:19:47:2:611 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:19:47:44:69 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 21:19:48:39:886 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-80-6263fcf3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:19:48:543:790 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-80-6263fcf3-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..939b0344 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: tdsql #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:20:14:468:93 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:20:14:505:267 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:20:15:431:223 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 21:20:15:472:742 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 21:20:16:468:356 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 21:20:16:505:94 + Q5 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-84-6263fd0f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q5 failed at: 2022-4-23 21:20:16:972:512 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-84-6263fd0f-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..f2b32d0b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:20:40:931:362 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:20:40:968:539 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:20:41:895:130 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:20:41:936:937 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN' + Q6 finished at: 2022-4-23 21:20:42:931:769 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-23 21:20:42:969:150 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-23 21:20:43:936:195 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-76-6263fd28-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:20:44:834:507 + Q8 finished at: 2022-4-23 21:20:44:911:158 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-76-6263fd28-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..cd55af75 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tdsql #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:21:10:398:167 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:21:10:434:935 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:21:11:362:99 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-23 21:21:11:402:515 + Q5-T3 execute opt: 'BEGIN' + Q5 finished at: 2022-4-23 21:21:12:362:108 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-23 21:21:14:399:190 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-23 21:21:15:403:259 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-7c-6263fd46-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 +Q9 failed at: 2022-4-23 21:21:16:300:98 + Q8 finished at: 2022-4-23 21:21:16:438:277 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='3-2c-7c-6263fd46-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..02cd9270 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:13:23:782:21 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:13:23:818:703 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:13:24:785:427 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 21:13:25:782:625 + Q4 finished at: 2022-4-23 21:13:25:786:244 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:13:26:787:659 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-23 21:13:46:820:391 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-23 21:13:46:872:980 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:13:46:909:834 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..6226c96b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:13:51:123:939 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:13:51:160:734 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:13:52:126:303 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-23 21:13:53:123:739 + Q4 finished at: 2022-4-23 21:13:53:127:409 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 21:13:54:127:91 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-23 21:14:14:124:381 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-23 21:14:14:178:350 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:14:14:214:975 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..f8444b76 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:14:18:429:816 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:14:18:466:745 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:14:19:432:883 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-23 21:14:20:430:586 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:14:20:467:441 + Q4 finished at: 2022-4-23 21:14:20:471:132 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 21:14:21:433:978 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-23 21:14:41:431:96 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:14:41:467:661 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d81dda48 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tdsql #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:14:45:679:620 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:14:45:716:422 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:14:46:682:522 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-23 21:14:47:680:52 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:14:47:716:696 + Q4 finished at: 2022-4-23 21:14:47:720:462 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:14:47:760:388 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-23 21:15:7:680:811 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:15:7:718:510 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..2bafe1e6 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:16:7:728:800 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 21:16:7:765:956 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:16:8:692:446 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-23 21:16:9:729:164 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 21:16:9:765:805 + Q4 finished at: 2022-4-23 21:16:9:769:659 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 21:16:9:809:420 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 21:16:29:729:725 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 21:16:29:766:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..a0444e85 --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:15:11:929:604 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:15:11:966:563 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:15:12:937:284 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-23 21:15:13:930:843 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 21:15:13:967:597 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-63-6263fbe0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:15:14:334:750 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-63-6263fbe0-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..12a4f38b --- /dev/null +++ b/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tdsql #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN' +Q1 finished at: 2022-4-23 21:15:39:330:622 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-23 21:15:39:367:735 + Q3-T2 execute opt: 'BEGIN' + Q3 finished at: 2022-4-23 21:15:40:294:369 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-23 21:15:41:331:560 + Q4 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-66-6263fbfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' errcode: HY000 + Q4 failed at: 2022-4-23 21:15:41:735:685 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-8.0.22-v18-txsql-2.0.1-V2.0R710D002-20210517-2251]Got an error in the state of 'ABORTING', xid='4-95-66-6263fbfc-0', errmsg='XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected' + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..5144f5a1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:42:33:779:91 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:42:33:784:729 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:42:34:779:31 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:42:34:780:214 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:42:34:781:140 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:42:34:781:726 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:42:35:779:792 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:42:35:780:187 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:42:45:779:917 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:42:45:780:311 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..538ed5e6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:42:49:806:540 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:42:49:811:800 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:42:50:806:617 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:42:50:809:107 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:42:50:810:96 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:42:50:810:725 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:42:51:807:562 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738971105624065, conflictStartTS=432738971367768064, conflictCommitTS=432738971368816640, key={tableID=2795, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:42:52:608:425 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738971105624065, conflictStartTS=432738971367768064, conflictCommitTS=432738971368816640, key={tableID=2795, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..c565db3e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:43:5:831:344 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:43:5:836:867 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:43:6:831:324 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:43:6:832:445 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:43:6:833:342 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:43:7:831:801 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:43:7:832:410 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:43:8:831:577 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:43:18:832:20 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:43:18:832:435 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..2ef0d1d8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:43:54:914:95 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:43:54:919:548 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:43:55:913:866 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:43:55:915:720 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:43:55:916:564 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:43:55:917:191 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:43:56:914:658 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:43:56:915:219 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:44:6:914:669 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:44:6:915:53 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..86e32e07 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:43:22:859:781 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 10:43:22:860:781 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 10:43:22:861:313 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 10:43:23:859:794 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 10:43:23:861:185 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 10:43:23:861:816 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:43:23:862:472 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:43:24:860:112 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 10:43:34:860:468 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 10:43:34:861:326 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:43:34:861:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..b0bb7ca0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:43:38:888:140 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 10:43:38:889:764 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:43:39:888:205 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 10:43:39:890:368 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 10:43:39:891:67 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:43:39:891:654 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 10:43:40:888:442 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:43:40:889:47 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 10:43:50:888:800 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:43:50:889:214 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..c24d1efc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:44:10:941:278 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 10:44:10:946:691 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:44:11:941:299 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:44:11:943:504 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:44:12:941:301 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:44:12:942:488 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 10:44:13:942:246 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:44:14:942:355 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 10:44:15:942:226 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:44:16:941:617 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:44:17:941:689 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:44:18:941:776 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:44:28:942:182 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:44:28:942:583 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..3b41c815 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:45:53:78:316 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:45:53:83:861 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:45:54:78:270 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:45:54:79:465 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:45:54:80:88 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:45:55:78:268 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:45:55:79:481 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:45:55:80:355 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:45:55:80:982 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 10:45:56:79:450 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 10:45:56:79:927 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 10:46:6:79:257 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 10:46:6:79:658 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..5cf96034 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:45:34:49:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:45:34:55:482 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:45:35:49:799 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:45:35:51:815 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:45:36:49:828 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 10:45:36:50:917 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:45:36:51:524 + Q8-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 10:45:37:49:947 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 10:45:37:51:313 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:45:37:51:939 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 10:45:38:50:821 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:45:38:51:261 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 10:45:39:50:936 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 10:45:39:51:393 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 10:45:49:51:88 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 10:45:49:51:532 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..5827a7e1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:44:32:970:25 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 10:44:32:975:559 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:44:33:969:976 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:44:33:971:806 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:44:34:969:975 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:44:34:971:117 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 10:44:35:970:802 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:44:36:970:893 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 10:44:37:970:673 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:44:38:970:577 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:44:39:970:383 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:44:40:970:439 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 10:44:50:970:980 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:44:50:971:403 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..79f4954a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:44:54:996:297 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 10:44:55:1:920 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:44:55:996:244 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 10:44:55:998:198 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:44:56:996:342 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 10:44:56:997:659 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 10:44:57:996:914 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 10:44:58:996:675 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 10:44:59:996:577 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:45:0:996:695 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:45:1:996:666 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:45:2:996:836 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:45:12:997:531 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:45:12:998:43 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..14c45f78 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:46:10:108:402 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:46:10:113:844 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 10:46:10:114:825 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 10:46:11:108:381 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 10:46:11:109:743 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 10:46:11:110:747 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:46:11:111:410 + Q8-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 10:46:12:108:552 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 10:46:12:109:749 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 10:46:12:110:661 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:46:12:111:71 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 10:46:13:109:518 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 10:46:13:110:318 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 10:46:23:109:214 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 10:46:23:109:651 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..cad91527 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:45:17:25:922 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 10:45:17:31:531 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:45:18:24:512 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 10:45:18:25:711 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:45:18:26:548 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:45:18:27:521 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 10:45:18:28:360 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:45:18:28:953 + Q9-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q9 finished at: 2022-4-24 10:45:19:24:595 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 10:45:19:25:867 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 10:45:19:26:738 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 10:45:19:27:825 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 10:45:19:28:741 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:45:19:29:389 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 10:45:20:25:605 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 10:45:20:26:48 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 10:45:30:25:521 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 10:45:30:25:997 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0a913b56 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:42:17:753:149 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:42:17:758:792 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:42:18:753:104 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:42:18:755:302 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:42:18:755:932 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 10:42:19:753:852 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738962703122432, conflictStartTS=432738962965266432, conflictCommitTS=432738962965790720, key={tableID=2785, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:42:20:454:806 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738962703122432, conflictStartTS=432738962965266432, conflictCommitTS=432738962965790720, key={tableID=2785, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..6d2ab660 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:42:1:721:906 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:42:1:727:522 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:42:2:721:835 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:42:2:723:27 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:42:2:723:619 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 10:42:3:722:809 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:42:3:723:196 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:42:13:722:515 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:42:13:722:887 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:42:13:723:179 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..dcceda5d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:33:16:940:413 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:33:16:945:965 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:33:17:940:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:33:17:941:740 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:33:17:942:698 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-24 10:33:18:941:177 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:33:19:940:549 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738820932239360, conflictStartTS=432738821194383360, conflictCommitTS=432738821718671360, key={tableID=2630, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:33:21:740:938 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738820932239360, conflictStartTS=432738821194383360, conflictCommitTS=432738821718671360, key={tableID=2630, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..32e613e8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:33:34:967:148 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:33:34:972:525 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:33:35:967:92 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:33:35:968:330 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:33:35:969:392 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:33:35:969:866 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 10:33:36:968:85 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738825657909248, conflictStartTS=432738825919791104, conflictCommitTS=432738825920577536, key={tableID=2635, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:33:37:769:69 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738825657909248, conflictStartTS=432738825919791104, conflictCommitTS=432738825920577536, key={tableID=2635, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..748138d8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:33:50:993:292 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:33:50:998:904 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:33:51:993:246 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:33:51:994:512 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:33:51:995:492 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:33:52:993:998 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:33:52:994:475 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738830121172992, conflictStartTS=432738829859028992, conflictCommitTS=432738830383579136, key={tableID=2640, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:33:54:793:877 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738830121172992, conflictStartTS=432738829859028992, conflictCommitTS=432738830383579136, key={tableID=2640, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..d22e81de --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:34:8:16:863 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:34:8:22:348 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:34:9:16:693 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:34:9:17:855 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:34:9:18:877 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:34:10:17:572 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:34:11:16:887 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:34:12:16:679 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:34:22:17:623 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:34:22:17:938 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..dab970be --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:34:58:98:191 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:34:58:103:576 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:34:59:98:177 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:34:59:99:420 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:34:59:100:396 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:35:0:99:31 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:35:0:99:552 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:35:1:98:236 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:35:11:98:900 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:35:11:99:244 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..76e2c0f0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:35:15:125:146 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:35:15:130:529 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:35:16:125:186 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:35:16:127:372 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:35:16:128:223 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:35:16:128:556 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:35:17:126:251 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:35:17:126:823 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:35:27:125:952 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:35:27:126:433 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..e86caddd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:34:26:44:675 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:34:26:49:915 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:34:27:44:747 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:34:27:46:653 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:34:27:47:652 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:34:27:48:278 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:34:28:45:493 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:34:28:45:824 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 10:34:38:45:364 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:34:38:45:744 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..65c2eb88 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:34:42:70:572 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:34:42:75:759 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:34:43:70:614 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 10:34:43:71:459 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 10:34:43:71:987 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:34:43:72:547 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:34:44:71:179 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:34:44:71:525 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 10:34:54:71:392 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:34:54:71:744 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..8586c38a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:32:42:886:313 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:32:42:891:718 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:32:43:886:177 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:32:43:887:331 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:32:43:888:236 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:32:44:887:27 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:32:45:886:463 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:32:46:886:354 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:32:56:887:46 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:32:56:887:360 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..66a6041d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:33:0:912:971 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:33:0:918:379 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:33:1:913:33 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:33:1:915:733 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:33:1:916:923 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:33:1:917:516 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:33:2:913:875 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:33:2:914:401 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:33:12:913:764 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:33:12:914:73 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..00c084f2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:35:31:152:442 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:35:31:157:977 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:35:32:152:410 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:35:32:154:774 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:35:32:155:739 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:35:33:152:407 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:35:33:153:536 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 10:35:33:154:564 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 10:35:34:153:466 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:35:34:154:135 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:35:35:152:703 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:35:36:152:673 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:35:46:153:553 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:35:46:153:878 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..919d8ee0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q1 finished at: 2022-4-24 10:35:50:180:346 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 10:35:50:186:250 +Q3-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q3 finished at: 2022-4-24 10:35:51:180:342 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 10:35:51:182:488 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:35:52:180:341 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 10:35:52:181:951 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:35:52:183:238 + Q8-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 10:35:53:180:387 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 10:35:53:181:699 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 10:35:54:181:464 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 10:35:55:180:648 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:35:56:180:610 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 10:35:57:180:493 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:36:7:180:730 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 10:36:7:182:462 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 10:36:7:182:883 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..e1354fdf --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:36:11:208:393 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:36:11:209:536 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:36:12:208:386 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:36:12:209:617 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:36:12:210:903 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:36:13:208:416 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:36:13:209:650 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 10:36:13:210:970 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:36:14:209:854 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:36:14:210:447 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:36:15:208:666 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:36:16:208:653 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 10:36:26:209:245 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:36:26:209:594 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..89c61570 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:36:30:234:359 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 10:36:30:235:209 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:36:31:234:359 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 10:36:31:234:862 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:36:31:240:623 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:36:32:234:391 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 10:36:32:234:913 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 10:36:32:236:346 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:36:33:235:672 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:36:33:236:243 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:36:34:234:646 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:36:35:234:624 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:36:45:235:344 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:36:45:235:682 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..4be7a30b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:30:44:706:921 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:30:44:712:283 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:30:45:706:938 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:30:45:708:170 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 10:30:46:706:968 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:30:47:706:828 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:30:57:707:625 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:30:57:707:945 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..4d729716 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:31:19:757:822 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:31:19:763:202 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:31:20:757:853 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:31:20:758:923 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 10:31:21:758:852 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:31:22:757:857 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:31:23:758:143 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 10:31:33:758:504 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:31:33:758:803 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b4cc8d21 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:31:37:784:381 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:31:37:789:753 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:31:38:784:317 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:31:38:785:419 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:31:38:785:713 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 10:31:39:785:99 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:31:39:785:645 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 10:31:49:784:928 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:31:49:785:258 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..c32ee0fa --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:32:25:860:389 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:32:25:865:596 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:32:26:860:444 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:32:26:862:412 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 10:32:27:861:270 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:32:27:861:779 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738807804067840, conflictStartTS=432738807541923840, conflictCommitTS=432738808066473984, key={tableID=2615, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:32:29:561:610 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738807804067840, conflictStartTS=432738807541923840, conflictCommitTS=432738808066473984, key={tableID=2615, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..b223267c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:31:1:731:874 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:31:1:737:345 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:31:2:731:880 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:31:2:734:92 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 10:31:3:732:676 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:31:4:732:92 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:31:5:731:886 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:31:15:732:609 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:31:15:732:945 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..7f049bc6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:31:53:808:797 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:31:53:813:894 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:31:54:808:827 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:31:54:811:73 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:31:54:811:552 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 10:31:55:809:180 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:31:55:809:491 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 10:32:5:809:449 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:32:5:809:741 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..ab64cf68 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:32:9:834:318 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:32:9:839:592 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:32:10:834:201 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 10:32:10:836:165 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:32:10:836:622 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 10:32:11:834:962 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:32:11:835:322 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 10:32:21:834:983 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:32:21:835:327 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..ff76bbe5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:38:47:440:531 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:38:47:446:16 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:38:48:440:665 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:38:48:442:511 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:38:48:443:523 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:38:48:444:164 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:38:49:441:388 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738907570831360, conflictStartTS=432738907832975360, conflictCommitTS=432738907833761792, key={tableID=2725, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:38:50:242:316 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738907570831360, conflictStartTS=432738907832975360, conflictCommitTS=432738907833761792, key={tableID=2725, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..8ab6ab07 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:39:3:466:651 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:39:3:472:212 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:39:4:466:599 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:39:4:467:812 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:39:4:468:737 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:39:5:467:474 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:39:5:468:100 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738912034095104, conflictStartTS=432738911771951104, conflictCommitTS=432738912296501248, key={tableID=2730, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:39:7:267:279 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738912034095104, conflictStartTS=432738911771951104, conflictCommitTS=432738912296501248, key={tableID=2730, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..cd2e0ca9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:39:20:492:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:39:20:498:358 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:39:21:492:569 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:39:21:493:931 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:39:21:494:786 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:39:22:493:379 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:39:23:492:880 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738916235214848, conflictStartTS=432738916497358848, conflictCommitTS=432738917021646848, key={tableID=2735, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:39:25:293:203 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738916235214848, conflictStartTS=432738916497358848, conflictCommitTS=432738917021646848, key={tableID=2735, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..72e6ea4c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:39:38:516:25 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:39:38:521:371 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:39:39:515:986 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:39:39:517:218 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:39:39:518:98 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:39:39:518:734 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:39:40:517:65 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738920959836160, conflictStartTS=432738921221980160, conflictCommitTS=432738921222766592, key={tableID=2740, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:39:41:317:940 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738920959836160, conflictStartTS=432738921221980160, conflictCommitTS=432738921222766592, key={tableID=2740, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..1d3362b6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:39:54:542:252 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:39:54:547:718 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:39:55:542:185 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:39:55:543:400 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:39:55:544:465 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:39:56:543:43 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:39:56:543:628 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738925423362048, conflictStartTS=432738925161218048, conflictCommitTS=432738925685768192, key={tableID=2745, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:39:58:342:894 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738925423362048, conflictStartTS=432738925161218048, conflictCommitTS=432738925685768192, key={tableID=2745, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..a1473502 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:40:11:568:301 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:40:11:573:757 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:40:12:568:223 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:40:12:569:525 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:40:12:570:663 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:40:13:569:94 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:40:14:568:666 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738929624481792, conflictStartTS=432738929886625792, conflictCommitTS=432738930410913792, key={tableID=2750, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:40:16:368:938 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738929624481792, conflictStartTS=432738929886625792, conflictCommitTS=432738930410913792, key={tableID=2750, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..c9f782be --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:40:29:592:154 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:40:29:597:599 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:40:30:592:117 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:40:30:593:334 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:40:30:594:276 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:40:31:593:112 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:40:31:593:692 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738934611509248, conflictStartTS=432738934349365248, conflictCommitTS=432738934873915392, key={tableID=2755, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:40:33:392:898 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738934611509248, conflictStartTS=432738934349365248, conflictCommitTS=432738934873915392, key={tableID=2755, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..a87c95bd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:40:46:615:983 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:40:46:621:313 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:40:47:615:961 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:40:47:617:233 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:40:47:618:197 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:40:48:616:937 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:40:49:616:366 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738938811842560, conflictStartTS=432738939073986560, conflictCommitTS=432738939598536704, key={tableID=2760, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:40:51:416:693 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738938811842560, conflictStartTS=432738939073986560, conflictCommitTS=432738939598536704, key={tableID=2760, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..20c80686 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:41:4:642:468 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:41:4:647:938 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:41:5:642:435 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:41:5:643:628 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:41:5:644:697 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:41:5:645:337 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:41:6:643:371 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738943537512448, conflictStartTS=432738943799656448, conflictCommitTS=432738943800442880, key={tableID=2765, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:41:7:444:286 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738943537512448, conflictStartTS=432738943799656448, conflictCommitTS=432738943800442880, key={tableID=2765, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..9d5054d0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:41:20:669:366 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:41:20:675:63 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:41:21:669:287 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:41:21:670:495 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:41:21:671:434 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:41:22:669:294 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 10:41:22:670:534 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 10:41:22:671:550 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 10:41:23:670:242 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:41:23:671:141 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738948001038336, conflictStartTS=432738947738894336, conflictCommitTS=432738948525588480, key={tableID=2770, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q11 failed at: 2022-4-24 10:41:25:770:38 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738948263182336, conflictStartTS=432738947738894336, conflictCommitTS=432738948525588480, key={tableID=2770, handle=3} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 10:41:26:870:132 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738948001038336, conflictStartTS=432738947738894336, conflictCommitTS=432738948525588480, key={tableID=2770, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..f97b6cd2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:41:39:696:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:41:39:701:861 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:41:40:696:263 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:41:40:697:484 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:41:41:696:238 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2022-4-24 10:41:42:697:198 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 10:41:43:697:62 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 10:41:43:698:10 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 10:41:44:697:327 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:41:45:696:509 +Q11-T1 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; +Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738952726708224, conflictStartTS=432738952988852224, conflictCommitTS=432738954299572224, key={tableID=2775, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q11 failed at: 2022-4-24 10:41:47:796:770 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738953250996224, conflictStartTS=432738952988852224, conflictCommitTS=432738954299572224, key={tableID=2775, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 10:41:48:896:875 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738952726708224, conflictStartTS=432738952988852224, conflictCommitTS=432738954299572224, key={tableID=2775, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..619eb952 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:36:49:261:330 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:36:49:266:735 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:36:50:261:291 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:36:50:262:433 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 10:36:51:261:273 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:36:52:261:763 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 10:37:2:262:105 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 10:37:2:277:316 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:37:2:277:742 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..abbed4c6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,32 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:37:6:288:372 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:37:6:293:752 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:37:7:288:391 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:37:7:290:432 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 10:37:8:288:653 + Q6-T2 execute opt: 'COMMIT'; + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738881316585472, conflictStartTS=432738881054441472, conflictCommitTS=432738881578729472, key={tableID=2695, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q6 failed at: 2022-4-24 10:37:9:889:208 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738881316585472, conflictStartTS=432738881054441472, conflictCommitTS=432738881578729472, key={tableID=2695, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..7986fbe5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:37:23:314:46 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:37:23:319:402 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:37:24:313:950 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:37:24:315:121 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 10:37:25:314:823 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:37:25:315:429 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738885779587072, conflictStartTS=432738885517443072, conflictCommitTS=432738886042255360, key={tableID=2700, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:37:27:14:593 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738885779587072, conflictStartTS=432738885517443072, conflictCommitTS=432738886042255360, key={tableID=2700, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..0a18530a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:37:40:339:420 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:37:40:345:85 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:37:41:339:359 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:37:41:340:631 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:37:41:341:242 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 10:37:42:340:223 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738889980706816, conflictStartTS=432738890242850816, conflictCommitTS=432738890243375104, key={tableID=2705, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:37:43:41:180 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738889980706816, conflictStartTS=432738890242850816, conflictCommitTS=432738890243375104, key={tableID=2705, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..30182887 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:38:31:414:519 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:38:31:419:994 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:38:32:414:491 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:38:32:415:565 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:38:32:416:377 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 10:38:33:416:249 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738903369711616, conflictStartTS=432738903631855616, conflictCommitTS=432738903632379904, key={tableID=2720, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:38:34:117:156 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738903369711616, conflictStartTS=432738903631855616, conflictCommitTS=432738903632379904, key={tableID=2720, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..e2334532 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:37:56:365:144 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:37:56:370:584 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:37:57:365:101 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:37:57:366:212 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 10:37:58:365:844 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:37:58:372:589 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738894443970560, conflictStartTS=432738894181826560, conflictCommitTS=432738894707949568, key={tableID=2710, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:38:0:65:783 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738894443970560, conflictStartTS=432738894181826560, conflictCommitTS=432738894707949568, key={tableID=2710, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..fc8d4c39 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:38:13:390:648 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:38:13:396:208 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:38:14:390:587 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:38:14:391:725 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 10:38:15:391:385 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:38:16:390:924 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738898644828160, conflictStartTS=432738898906972160, conflictCommitTS=432738899431260160, key={tableID=2715, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:38:18:91:252 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432738898644828160, conflictStartTS=432738898906972160, conflictCommitTS=432738899431260160, key={tableID=2715, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..b3dc5c19 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:1:11:982:822 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:1:11:988:295 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:1:12:982:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:1:12:983:986 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:1:12:984:865 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:1:12:985:477 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:1:13:983:540 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:1:13:983:922 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:1:23:983:635 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:1:23:984:41 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..2a5b9e13 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:1:28:8:414 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:1:28:13:732 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:1:29:8:347 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:1:29:10:107 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:1:29:10:966 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:1:29:11:667 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:1:30:9:293 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739264235569152, conflictStartTS=432739264497713152, conflictCommitTS=432739264498499584, key={tableID=3061, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:1:30:810:242 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739264235569152, conflictStartTS=432739264497713152, conflictCommitTS=432739264498499584, key={tableID=3061, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..090aead0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:1:44:34:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:1:44:39:586 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:1:45:34:44 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:1:45:35:295 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:1:45:36:285 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:1:46:35:12 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:1:46:38:45 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:1:47:34:352 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:1:57:34:854 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:1:57:35:343 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..c2df0b0c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:2:33:114:896 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:2:33:120:380 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:2:34:114:931 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:2:34:117:339 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:2:34:118:151 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:2:34:118:902 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:2:35:115:526 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:2:35:116:90 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:2:45:115:617 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:2:45:116:7 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..782ee340 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:2:1:61:386 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 11:2:1:62:563 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 11:2:1:63:62 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:2:2:61:352 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 11:2:2:66:221 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 11:2:2:66:915 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:2:2:67:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:2:3:61:656 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 11:2:13:62:513 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 11:2:13:63:573 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:2:13:63:979 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..24061f89 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:2:17:89:581 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 11:2:17:91:27 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:2:18:89:589 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 11:2:18:91:155 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 11:2:18:91:902 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:2:18:92:491 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 11:2:19:90:72 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:2:19:90:792 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 11:2:29:90:163 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:2:29:90:662 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..9457e102 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:2:49:142:459 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:2:49:147:963 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:2:50:142:429 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:2:50:144:841 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:2:51:142:402 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:2:51:143:732 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:2:52:143:254 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:2:53:143:158 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:2:54:143:298 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:2:55:142:819 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:2:56:142:846 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:2:57:142:837 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:3:7:143:403 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:3:7:143:802 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..593796d1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:4:31:276:657 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:4:31:282:276 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:4:32:276:601 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:4:32:277:804 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:4:32:278:416 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:4:33:276:681 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:4:33:278:7 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:4:33:279:111 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:4:33:279:804 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 11:4:34:277:560 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 11:4:34:277:991 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 11:4:44:277:537 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 11:4:44:277:995 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..5ba97251 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:4:12:248:913 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:4:12:254:771 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:4:13:248:804 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:4:13:250:144 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:4:14:248:778 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 11:4:14:249:879 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:4:14:250:583 + Q8-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:4:15:248:816 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 11:4:15:250:82 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:4:15:250:756 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 11:4:16:249:988 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:4:16:250:441 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 11:4:17:251:741 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 11:4:17:252:217 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 11:4:27:250:30 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 11:4:27:250:458 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..c8a52558 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:3:11:175:323 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 11:3:11:180:926 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:3:12:169:985 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:3:12:171:235 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:3:13:169:989 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:3:13:171:266 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:3:14:170:696 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:3:15:170:708 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:3:16:170:834 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:3:17:170:357 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:3:18:170:331 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:3:19:170:346 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 11:3:29:170:861 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:3:29:171:321 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..330cfa8c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:3:33:195:610 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:3:33:200:945 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:3:34:195:631 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 11:3:34:197:896 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:3:35:195:626 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 11:3:35:196:990 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 11:3:36:196:186 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 11:3:37:195:955 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 11:3:38:195:914 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:3:39:196:182 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:3:40:196:84 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:3:41:196:64 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:3:51:196:623 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:3:51:197:17 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..e762eb9c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:4:48:303:133 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:4:48:308:878 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 11:4:48:310:249 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:4:49:303:104 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 11:4:49:304:645 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 11:4:49:305:541 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:4:49:306:176 + Q8-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:4:50:303:80 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 11:4:50:304:464 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 11:4:50:305:440 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:4:50:305:862 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 11:4:51:303:891 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 11:4:51:309:533 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 11:5:1:303:968 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 11:5:1:304:422 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..6df16691 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:3:55:223:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 11:3:55:228:894 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:3:56:223:397 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 11:3:56:225:550 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:3:56:226:431 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:3:56:227:398 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 11:3:56:228:391 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:3:56:229:5 + Q9-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q9 finished at: 2022-4-24 11:3:57:223:426 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 11:3:57:224:904 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 11:3:57:225:942 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 11:3:57:227:94 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 11:3:57:228:158 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:3:57:228:841 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 11:3:58:224:398 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 11:3:58:224:843 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 11:4:8:224:178 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 11:4:8:224:621 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..925b7972 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:0:55:956:627 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:0:55:961:913 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:0:56:956:616 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:0:56:957:929 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:0:56:958:581 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 11:0:57:957:471 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739255833329664, conflictStartTS=432739256095473664, conflictCommitTS=432739256095997952, key={tableID=3051, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:0:58:658:446 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739255833329664, conflictStartTS=432739256095473664, conflictCommitTS=432739256095997952, key={tableID=3051, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..d34dfd1e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:0:39:930:767 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:0:39:936:0 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:0:40:930:721 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:0:40:931:882 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:0:40:932:454 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 11:0:41:931:593 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:0:41:931:966 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 11:0:51:931:483 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:0:51:931:875 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:0:51:932:151 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c5a37545 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:51:55:150:835 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:51:55:156:223 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:51:56:150:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:51:56:151:953 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:51:56:152:868 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-24 10:51:57:151:614 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:51:58:151:42 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739114064281600, conflictStartTS=432739114326425600, conflictCommitTS=432739114850713600, key={tableID=2896, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:51:59:951:387 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739114064281600, conflictStartTS=432739114326425600, conflictCommitTS=432739114850713600, key={tableID=2896, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..4f7fb0e3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:52:13:177:981 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:52:13:183:640 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:52:14:177:770 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:52:14:178:883 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:52:14:179:968 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:52:14:180:564 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 10:52:15:178:624 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739118789951488, conflictStartTS=432739119052095488, conflictCommitTS=432739119052881920, key={tableID=2901, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:52:15:979:555 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739118789951488, conflictStartTS=432739119052095488, conflictCommitTS=432739119052881920, key={tableID=2901, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..40328040 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:52:29:201:761 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:52:29:207:219 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:52:30:201:721 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:52:30:203:749 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:52:30:204:720 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:52:31:202:681 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:52:31:203:295 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739123252690944, conflictStartTS=432739122990546944, conflictCommitTS=432739123515359232, key={tableID=2906, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:52:33:2:382 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739123252690944, conflictStartTS=432739122990546944, conflictCommitTS=432739123515359232, key={tableID=2906, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..cbfbf7ca --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:52:46:227:630 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:52:46:233:121 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:52:47:227:509 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:52:47:228:623 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:52:47:229:445 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:52:48:228:300 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:52:49:227:763 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:52:50:227:717 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:53:0:228:506 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:53:0:228:836 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a50bca1e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:53:36:307:543 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:53:36:312:694 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:53:37:307:638 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:53:37:309:620 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:53:37:310:491 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:53:38:308:382 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:53:38:308:934 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:53:39:307:618 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:53:49:308:406 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:53:49:308:745 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..97e0cd2f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:53:53:335:342 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:53:53:340:764 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:53:54:335:328 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:53:54:337:779 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:53:54:338:783 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:53:54:339:199 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:53:55:336:266 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:53:55:336:895 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:54:5:336:12 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:54:5:336:390 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..9a92f420 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:53:4:254:524 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:53:4:259:942 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:53:5:254:515 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:53:5:256:362 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:53:5:257:301 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:53:5:257:832 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:53:6:255:277 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:53:6:255:660 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 10:53:16:255:242 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:53:16:255:559 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..9aed9253 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:53:20:280:680 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:53:20:285:949 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:53:21:280:690 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 10:53:21:281:665 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 10:53:21:282:314 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:53:21:282:899 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:53:22:281:383 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:53:22:281:706 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 10:53:32:281:502 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:53:32:281:916 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..b552f654 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:51:21:96:875 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:51:21:102:340 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:51:22:96:795 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:51:22:97:918 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:51:22:98:847 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:51:23:97:718 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:51:24:96:989 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:51:25:96:981 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:51:35:97:557 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:51:35:97:874 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..240d8180 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:51:39:123:940 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:51:39:129:331 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:51:40:124:153 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:51:40:126:326 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:51:40:127:490 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:51:40:128:86 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:51:41:124:881 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:51:41:125:556 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:51:51:124:725 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:51:51:125:60 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..35ff9458 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:54:9:364:108 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:54:9:369:671 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:54:10:364:105 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:54:10:366:308 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:54:10:367:397 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:54:11:364:97 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:54:11:365:307 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 10:54:11:366:345 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 10:54:12:365:344 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:54:12:365:853 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:54:13:364:443 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:54:14:364:359 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:54:24:365:228 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:54:24:365:556 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..c37c0464 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q1 finished at: 2022-4-24 10:54:28:391:857 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 10:54:28:397:785 +Q3-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q3 finished at: 2022-4-24 10:54:29:391:779 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 10:54:29:393:922 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 10:54:30:391:831 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 10:54:30:393:362 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:54:30:394:447 + Q8-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 10:54:31:391:929 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 10:54:31:393:285 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 10:54:32:392:988 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 10:54:33:392:134 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:54:34:392:212 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 10:54:35:392:4 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:54:45:391:990 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 10:54:45:394:76 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 10:54:45:394:443 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..3685fd7f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:54:49:420:944 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:54:49:426:353 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:54:50:420:922 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:54:50:422:780 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:54:50:424:65 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:54:51:420:966 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:54:51:422:190 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 10:54:51:423:532 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:54:52:422:242 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:54:52:422:882 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:54:53:421:229 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:54:54:421:245 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 10:55:4:421:856 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:55:4:422:305 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..33eb62ba --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:55:8:446:609 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 10:55:8:447:489 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:55:9:446:668 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 10:55:9:447:247 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:55:9:453:93 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 10:55:10:446:641 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 10:55:10:447:189 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 10:55:10:448:652 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:55:11:448:143 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:55:11:448:765 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:55:12:446:935 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:55:13:446:880 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:55:23:447:530 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:55:23:447:866 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..155ecce4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:49:22:916:38 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:49:22:921:317 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:49:23:915:979 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:49:23:917:213 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 10:49:24:915:803 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:49:25:915:807 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:49:35:916:735 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:49:35:917:43 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..d3a5c9c4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:49:57:968:29 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:49:57:973:649 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:49:58:967:862 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:49:58:969:808 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 10:49:59:968:786 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:50:0:967:897 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:50:1:968:141 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 10:50:11:968:605 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:50:11:968:903 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..441c4439 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:50:15:994:412 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:50:15:999:621 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:50:16:994:378 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:50:16:995:419 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:50:16:995:706 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 10:50:17:995:238 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:50:17:995:778 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 10:50:27:995:47 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:50:27:995:373 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..a2f7c7a5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:51:4:71:254 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:51:4:76:644 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:51:5:71:261 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:51:5:75:313 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 10:51:6:72:31 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:51:6:72:569 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739100936372224, conflictStartTS=432739100674228224, conflictCommitTS=432739101198778368, key={tableID=2881, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:51:7:771:872 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739100936372224, conflictStartTS=432739100674228224, conflictCommitTS=432739101198778368, key={tableID=2881, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..a703713f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:49:39:942:245 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:49:39:947:622 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:49:40:942:174 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:49:40:943:335 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 10:49:41:942:988 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:49:42:942:445 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:49:43:942:164 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:49:53:942:896 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:49:53:943:208 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..e3f5eda8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:50:32:19:337 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:50:32:24:613 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:50:33:19:347 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:50:33:20:956 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:50:33:21:436 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 10:50:34:20:95 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:50:34:20:411 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 10:50:44:20:46 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:50:44:20:363 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..81dd31f1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:50:48:44:569 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:50:48:49:805 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:50:49:44:598 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 10:50:49:46:167 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:50:49:46:664 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 10:50:50:45:60 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:50:50:45:373 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 10:51:0:45:303 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:51:0:45:610 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..ede74972 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:57:25:650:584 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:57:25:655:939 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:57:26:650:576 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:57:26:651:915 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:57:26:652:811 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:57:26:653:417 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:57:27:651:555 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739200702873600, conflictStartTS=432739200965017600, conflictCommitTS=432739200965804032, key={tableID=2991, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:57:28:452:414 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739200702873600, conflictStartTS=432739200965017600, conflictCommitTS=432739200965804032, key={tableID=2991, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..01717dea --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:57:41:676:641 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:57:41:681:989 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:57:42:676:674 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:57:42:677:857 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:57:42:678:772 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:57:43:677:498 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:57:43:678:49 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739205166137344, conflictStartTS=432739204903993344, conflictCommitTS=432739205428543488, key={tableID=2996, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:57:45:477:498 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739205166137344, conflictStartTS=432739204903993344, conflictCommitTS=432739205428543488, key={tableID=2996, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..640a0976 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:57:58:701:366 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:57:58:707:113 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:57:59:701:153 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:57:59:702:516 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:57:59:703:525 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:58:0:701:970 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:58:1:701:495 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739209366994944, conflictStartTS=432739209629138944, conflictCommitTS=432739210153426944, key={tableID=3001, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:58:3:501:766 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739209366994944, conflictStartTS=432739209629138944, conflictCommitTS=432739210153426944, key={tableID=3001, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..049b48a9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:58:16:729:134 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:58:16:734:711 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:58:17:729:127 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:58:17:730:343 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:58:17:731:274 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:58:17:731:932 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:58:18:729:902 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739214092926976, conflictStartTS=432739214355070976, conflictCommitTS=432739214355595264, key={tableID=3006, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:58:19:530:786 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739214092926976, conflictStartTS=432739214355070976, conflictCommitTS=432739214355595264, key={tableID=3006, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..bdc20997 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:58:32:755:11 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:58:32:760:424 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:58:33:755:58 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:58:33:756:250 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:58:33:757:217 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:58:34:755:917 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:58:34:756:484 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739218555928576, conflictStartTS=432739218293784576, conflictCommitTS=432739218818596864, key={tableID=3011, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:58:36:555:715 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739218555928576, conflictStartTS=432739218293784576, conflictCommitTS=432739218818596864, key={tableID=3011, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..abc9eab7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:58:49:781:347 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:58:49:786:723 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:58:50:781:346 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:58:50:782:639 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:58:50:783:553 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:58:51:782:103 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:58:52:781:675 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739222757310464, conflictStartTS=432739223019454464, conflictCommitTS=432739223543742464, key={tableID=3016, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:58:54:581:905 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739222757310464, conflictStartTS=432739223019454464, conflictCommitTS=432739223543742464, key={tableID=3016, handle=2} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..abbc2195 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:59:7:805:317 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:59:7:808:791 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:59:8:805:408 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:59:8:806:558 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:59:8:807:390 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:59:9:806:267 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:59:9:806:864 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739227744337920, conflictStartTS=432739227482193920, conflictCommitTS=432739228006744064, key={tableID=3021, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 10:59:11:606:242 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739227744337920, conflictStartTS=432739227482193920, conflictCommitTS=432739228006744064, key={tableID=3021, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..376bab93 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:59:24:830:346 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:59:24:835:845 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:59:25:830:327 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:59:25:831:328 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:59:25:832:131 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:59:26:831:288 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:59:27:830:707 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739231945195520, conflictStartTS=432739232207339520, conflictCommitTS=432739232731627520, key={tableID=3026, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:59:29:630:887 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739231945195520, conflictStartTS=432739232207339520, conflictCommitTS=432739232731627520, key={tableID=3026, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..66144e56 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:59:42:854:488 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:59:42:859:805 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:59:43:854:421 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:59:43:855:299 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:59:43:856:124 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:59:43:856:780 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:59:44:855:361 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739236670078976, conflictStartTS=432739236932222976, conflictCommitTS=432739236932747264, key={tableID=3031, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 10:59:45:656:391 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739236670078976, conflictStartTS=432739236932222976, conflictCommitTS=432739236932747264, key={tableID=3031, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..6a02fc3d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:59:58:881:15 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:59:58:886:264 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:59:59:881:61 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:59:59:882:288 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 10:59:59:883:213 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:0:0:881:53 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:0:0:882:379 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:0:0:883:370 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:0:1:881:610 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:0:1:882:162 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739241133342720, conflictStartTS=432739240871198720, conflictCommitTS=432739241657892864, key={tableID=3036, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q11 failed at: 2022-4-24 11:0:3:982:64 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739241395486720, conflictStartTS=432739240871198720, conflictCommitTS=432739241657892864, key={tableID=3036, handle=3} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:0:5:81:832 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739241133342720, conflictStartTS=432739240871198720, conflictCommitTS=432739241657892864, key={tableID=3036, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..dab2eea8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:0:17:907:550 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:0:17:912:809 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:0:18:907:541 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:0:18:908:864 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:0:19:907:483 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2022-4-24 11:0:20:908:409 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:0:21:908:467 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:0:21:909:632 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:0:22:908:517 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:0:23:907:942 +Q11-T1 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; +Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739245859012608, conflictStartTS=432739246121156608, conflictCommitTS=432739247431876608, key={tableID=3041, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q11 failed at: 2022-4-24 11:0:26:8:227 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739246383300608, conflictStartTS=432739246121156608, conflictCommitTS=432739247431876608, key={tableID=3041, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:0:27:108:219 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739245859012608, conflictStartTS=432739246121156608, conflictCommitTS=432739247431876608, key={tableID=3041, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..8638c1e7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:55:27:475:495 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:55:27:480:993 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:55:28:475:429 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:55:28:476:644 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 10:55:29:475:434 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:55:30:475:792 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 10:55:40:476:191 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 10:55:40:491:392 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:55:40:491:840 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..8056b035 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,32 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:55:44:501:212 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:55:44:506:409 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:55:45:501:212 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:55:45:503:58 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 10:55:46:501:442 + Q6-T2 execute opt: 'COMMIT'; + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739174449414144, conflictStartTS=432739174187270144, conflictCommitTS=432739174711558144, key={tableID=2961, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q6 failed at: 2022-4-24 10:55:48:101:966 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739174449414144, conflictStartTS=432739174187270144, conflictCommitTS=432739174711558144, key={tableID=2961, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..399c7f8a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:56:1:526:544 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:56:1:532:245 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:56:2:526:463 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:56:2:527:991 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 10:56:3:527:215 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:56:3:527:859 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739178912415744, conflictStartTS=432739178650271744, conflictCommitTS=432739179174821888, key={tableID=2966, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:56:5:227:50 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739178912415744, conflictStartTS=432739178650271744, conflictCommitTS=432739179174821888, key={tableID=2966, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..4013264d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:56:18:551:915 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:56:18:557:526 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:56:19:551:768 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:56:19:552:942 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:56:19:553:533 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 10:56:20:552:602 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739183113273344, conflictStartTS=432739183375417344, conflictCommitTS=432739183375941632, key={tableID=2971, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:56:21:253:505 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739183113273344, conflictStartTS=432739183375417344, conflictCommitTS=432739183375941632, key={tableID=2971, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..c7fa0b63 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:57:9:624:629 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:57:9:630:119 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:57:10:624:559 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:57:10:626:549 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:57:10:627:163 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 10:57:11:625:390 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739196501753856, conflictStartTS=432739196763897856, conflictCommitTS=432739196764422144, key={tableID=2986, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:57:12:326:336 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739196501753856, conflictStartTS=432739196763897856, conflictCommitTS=432739196764422144, key={tableID=2986, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..788375ad --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:56:34:577:362 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:56:34:582:966 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:56:35:577:334 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:56:35:578:694 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 10:56:36:578:23 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:56:36:578:573 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739187576537088, conflictStartTS=432739187314393088, conflictCommitTS=432739187838943232, key={tableID=2976, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 10:56:38:277:920 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739187576537088, conflictStartTS=432739187314393088, conflictCommitTS=432739187838943232, key={tableID=2976, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..b24a2005 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 10:56:51:600:145 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:56:51:605:509 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 10:56:52:600:103 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:56:52:601:448 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 10:56:53:601:173 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:56:54:600:440 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739191776870400, conflictStartTS=432739192039014400, conflictCommitTS=432739192563302400, key={tableID=2981, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 10:56:56:300:756 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739191776870400, conflictStartTS=432739192039014400, conflictCommitTS=432739192563302400, key={tableID=2981, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..a957c600 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:39:33:754:86 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:39:33:754:649 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:39:34:754:103 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:39:34:754:821 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:39:34:755:422 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:39:34:756:118 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:39:35:754:359 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:39:35:754:729 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:39:45:754:805 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:39:45:755:181 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..eacc44b8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:39:49:779:697 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:39:49:780:249 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:39:50:779:723 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:39:50:781:245 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:39:50:781:708 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:39:50:782:275 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:39:51:780:91 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739867631026176, conflictStartTS=432739867893170176, conflictCommitTS=432739867893956608, key={tableID=3404, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:39:52:581:57 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739867631026176, conflictStartTS=432739867893170176, conflictCommitTS=432739867893956608, key={tableID=3404, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..9a044007 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:40:5:803:594 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:40:5:804:197 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:40:6:803:606 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:40:6:804:193 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:40:6:804:685 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:40:7:803:719 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:40:7:804:270 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:40:8:803:906 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:40:18:804:248 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:40:18:804:643 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..d6d419e7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:40:54:883:285 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:40:54:883:917 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:40:55:883:210 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:40:55:884:857 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:40:55:885:468 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:40:55:886:105 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:40:56:883:509 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:40:56:884:168 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:41:6:883:931 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:41:6:884:370 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..c22c486b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:40:22:830:297 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 11:40:22:831:227 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 11:40:22:831:697 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:40:23:830:401 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 11:40:23:832:455 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 11:40:23:833:109 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:40:23:833:770 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:40:24:830:705 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 11:40:34:831:19 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 11:40:34:832:69 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:40:34:832:563 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..443b47dd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:40:38:858:5 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 11:40:38:859:413 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:40:39:858:47 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 11:40:39:859:616 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 11:40:39:860:449 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:40:39:861:65 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 11:40:40:858:344 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:40:40:858:947 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 11:40:50:858:603 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:40:50:859:57 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..d777f841 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:41:10:908:52 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:41:10:908:657 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:41:11:908:73 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:41:11:908:791 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:41:12:908:79 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:41:12:908:751 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:41:13:908:282 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:41:14:908:338 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:41:15:908:366 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:41:16:908:398 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:41:17:908:434 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:41:18:908:547 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:41:28:909:85 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:41:28:909:511 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..dd1101da --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:42:53:35:602 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:42:53:36:310 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:42:54:35:651 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:42:54:39:963 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:42:54:40:561 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:42:55:35:751 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:42:55:36:504 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:42:55:37:52 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:42:55:37:686 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 11:42:56:35:946 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 11:42:56:36:422 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 11:43:6:36:560 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 11:43:6:37:5 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..2c0c5be2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:42:34:9:610 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:42:34:10:643 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:42:35:9:529 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:42:35:11:46 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:42:36:9:355 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 11:42:36:9:975 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:42:36:10:615 + Q8-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:42:37:9:487 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 11:42:37:10:147 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:42:37:10:831 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 11:42:38:9:841 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:42:38:10:292 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 11:42:39:9:902 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 11:42:39:10:411 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 11:42:49:10:480 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 11:42:49:10:913 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..f0334d8b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:41:32:934:805 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 11:41:32:935:449 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:41:33:934:723 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:41:33:935:328 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:41:34:934:715 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:41:34:935:286 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:41:35:934:958 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:41:36:934:940 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:41:37:934:923 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:41:38:935:138 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:41:39:935:163 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:41:40:935:134 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 11:41:50:935:535 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:41:50:936:1 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..7703c0eb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:41:54:959:71 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:41:54:959:760 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:41:55:959:25 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 11:41:55:960:534 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:41:56:959:118 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 11:41:56:959:785 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 11:41:57:959:280 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 11:41:58:959:246 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 11:41:59:959:421 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:42:0:959:455 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:42:1:959:552 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:42:2:959:495 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:42:12:959:915 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:42:12:960:318 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..9cf4d488 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:43:10:63:522 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:43:10:64:217 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 11:43:10:64:904 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:43:11:63:482 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 11:43:11:64:202 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 11:43:11:64:825 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:43:11:65:474 + Q8-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:43:12:63:532 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 11:43:12:64:267 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 11:43:12:64:867 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:43:12:65:292 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 11:43:13:63:734 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 11:43:13:64:358 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 11:43:23:64:131 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 11:43:23:64:573 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..db7bcc81 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:42:16:985:21 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 11:42:16:985:709 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:42:17:985:22 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 11:42:17:985:660 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:42:17:986:125 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:42:17:986:660 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 11:42:17:987:73 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:42:17:987:741 + Q9-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q9 finished at: 2022-4-24 11:42:18:985:69 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 11:42:18:985:756 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 11:42:18:986:288 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 11:42:18:986:846 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 11:42:18:987:298 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:42:18:987:910 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 11:42:19:985:281 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 11:42:19:985:693 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 11:42:29:985:774 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 11:42:29:986:183 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..023d4c1a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:39:17:729:213 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:39:17:729:842 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:39:18:729:258 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:39:18:729:912 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:39:18:730:498 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 11:39:19:729:478 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739859229310976, conflictStartTS=432739859491454976, conflictCommitTS=432739859491717120, key={tableID=3398, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:39:20:430:339 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739859229310976, conflictStartTS=432739859491454976, conflictCommitTS=432739859491717120, key={tableID=3398, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..b0d9cb0a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:39:1:704:962 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:39:1:705:676 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:39:2:704:981 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:39:2:705:581 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:39:2:706:109 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 11:39:3:705:213 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:39:3:705:626 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 11:39:13:705:489 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:39:13:705:873 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:39:13:706:338 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..74c1f9bf --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:30:16:962:774 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:30:16:963:382 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:30:17:962:719 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:30:17:963:303 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:30:17:963:797 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-24 11:30:18:962:980 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:30:19:962:851 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739717470486528, conflictStartTS=432739717732630528, conflictCommitTS=432739718256918528, key={tableID=3305, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:30:21:763:369 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739717470486528, conflictStartTS=432739717732630528, conflictCommitTS=432739718256918528, key={tableID=3305, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..b8ee9ca6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:30:34:987:274 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:30:34:987:933 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:30:35:987:272 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:30:35:987:873 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:30:35:988:385 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:30:35:988:903 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 11:30:36:987:489 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739722195632128, conflictStartTS=432739722457776128, conflictCommitTS=432739722458038272, key={tableID=3308, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:30:37:788:319 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739722195632128, conflictStartTS=432739722457776128, conflictCommitTS=432739722458038272, key={tableID=3308, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..e7d4a1c3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:30:51:11:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:30:51:12:160 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:30:52:11:598 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:30:52:12:197 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:30:52:12:777 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:30:53:12:308 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:30:53:12:903 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739726658371584, conflictStartTS=432739726396227584, conflictCommitTS=432739726920777728, key={tableID=3311, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:30:54:812:70 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739726658371584, conflictStartTS=432739726396227584, conflictCommitTS=432739726920777728, key={tableID=3311, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..fb5ed353 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:31:8:37:516 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:31:8:38:178 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:31:9:36:100 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:31:9:36:851 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:31:9:37:306 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:31:10:36:463 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:31:11:36:389 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:31:12:36:230 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:31:22:36:912 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:31:22:37:229 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..215ffa9f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:31:58:110:704 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:31:58:111:446 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:31:59:110:668 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:31:59:112:357 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:31:59:112:811 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:32:0:110:939 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:32:0:111:489 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:32:1:110:671 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:32:11:111:168 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:32:11:111:500 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..f951fe1d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:32:15:135:556 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:32:15:136:144 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:32:16:135:568 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:32:16:137:265 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:32:16:137:864 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:32:16:138:253 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:32:17:135:739 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:32:17:136:418 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:32:27:136:274 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:32:27:136:630 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..da07b7bc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:31:26:61:544 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 11:31:26:62:532 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:31:27:61:603 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:31:27:68:520 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:31:27:69:78 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:31:27:69:665 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 11:31:28:62:259 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:31:28:62:593 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 11:31:38:62:44 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:31:38:62:373 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..194114df --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:31:42:85:381 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 11:31:42:90:791 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:31:43:85:440 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 11:31:43:86:842 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 11:31:43:87:319 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:31:43:87:930 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 11:31:44:85:874 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:31:44:86:196 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 11:31:54:85:975 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:31:54:86:328 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..14207f57 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:29:42:913:573 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:29:42:914:154 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:29:43:912:389 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:29:43:913:86 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:29:43:913:749 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:29:44:912:698 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:29:45:912:653 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:29:46:912:610 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:29:56:913:102 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:29:56:913:510 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..b02e8b9a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:30:0:937:481 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:30:0:938:308 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:30:1:937:388 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:30:1:939:369 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:30:1:939:868 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:30:1:940:376 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:30:2:937:658 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:30:2:938:162 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:30:12:938:122 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:30:12:938:439 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..86a06e44 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:32:31:161:488 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:32:31:162:129 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:32:32:161:443 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:32:32:162:888 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:32:32:163:454 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:32:33:161:467 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 11:32:33:162:63 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 11:32:33:162:645 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 11:32:34:161:757 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:32:34:162:310 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:32:35:161:701 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:32:36:161:730 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:32:46:162:322 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:32:46:162:659 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..6290aa07 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q1 finished at: 2022-4-24 11:32:50:187:176 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 11:32:50:187:934 +Q3-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q3 finished at: 2022-4-24 11:32:51:187:201 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 11:32:51:187:829 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:32:52:187:230 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 11:32:52:188:10 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:32:52:188:696 + Q8-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:32:53:187:232 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 11:32:53:188:451 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 11:32:54:187:710 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 11:32:55:187:590 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:32:56:187:526 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 11:32:57:187:371 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:33:7:187:378 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 11:33:7:188:549 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 11:33:7:188:846 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..59cfbdad --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:33:11:213:842 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:33:11:214:375 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:33:12:213:863 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:33:12:214:395 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 11:33:12:215:275 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:33:13:213:875 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 11:33:13:214:419 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 11:33:13:215:269 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 11:33:14:214:947 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:33:14:215:507 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:33:15:214:81 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:33:16:214:178 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 11:33:26:214:467 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:33:26:214:820 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..8f405714 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:33:30:237:718 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 11:33:30:238:223 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:33:31:237:687 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 11:33:31:238:717 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 11:33:31:239:727 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:33:32:237:709 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 11:33:32:238:247 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 11:33:32:239:166 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 11:33:33:238:352 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:33:33:238:880 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:33:34:237:983 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:33:35:238:46 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:33:45:238:499 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:33:45:238:837 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..6170d2ea --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:27:44:743:466 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:27:44:744:58 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:27:45:743:787 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:27:45:744:567 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 11:27:46:743:354 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:27:47:743:364 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:27:57:744:50 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:27:57:744:340 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..61428ec7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:28:19:792:250 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:28:19:792:874 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:28:20:792:279 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:28:20:792:888 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 11:28:21:792:450 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:28:22:792:236 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:28:23:792:444 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 11:28:33:792:870 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:28:33:793:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..54caebc7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:28:37:815:565 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:28:37:816:233 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:28:38:815:494 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:28:38:816:73 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:28:38:816:358 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 11:28:39:815:702 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:28:39:816:227 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 11:28:49:815:847 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:28:49:816:221 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..2cea3b2c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:29:25:887:743 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:29:25:888:309 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:29:26:887:792 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:29:26:889:83 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 11:29:27:887:956 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:29:27:888:499 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739704343625728, conflictStartTS=432739704081481728, conflictCommitTS=432739704606031872, key={tableID=3296, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:29:29:588:252 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739704343625728, conflictStartTS=432739704081481728, conflictCommitTS=432739704606031872, key={tableID=3296, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..954a8103 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:28:1:767:869 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:28:1:768:491 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:28:2:767:880 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:28:2:769:254 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 11:28:3:768:313 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:28:4:768:88 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:28:5:767:879 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 11:28:15:768:460 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:28:15:768:798 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..b65a7b1a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:28:53:840:213 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:28:53:841:314 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:28:54:840:231 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:28:54:840:764 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:28:54:841:261 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 11:28:55:840:697 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:28:55:840:972 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 11:29:5:840:726 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:29:5:841:48 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4e24b698 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:29:9:863:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:29:9:869:0 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:29:10:863:563 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 11:29:10:865:169 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:29:10:865:671 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 11:29:11:864:320 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:29:11:864:639 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 11:29:21:864:156 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:29:21:864:465 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..a3ed1f7d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:35:47:431:679 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:35:47:432:301 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:35:48:431:627 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:35:48:432:240 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:35:48:432:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:35:48:433:375 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:35:49:432:58 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739804100952064, conflictStartTS=432739804363096064, conflictCommitTS=432739804363620352, key={tableID=3362, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:35:50:232:958 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739804100952064, conflictStartTS=432739804363096064, conflictCommitTS=432739804363620352, key={tableID=3362, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..2ce0b5a6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:36:3:456:514 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:36:3:457:215 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:36:4:456:463 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:36:4:457:100 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:36:4:457:634 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:36:5:456:782 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:36:5:457:400 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739808563953664, conflictStartTS=432739808301809664, conflictCommitTS=432739808826359808, key={tableID=3365, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:36:7:257:224 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739808563953664, conflictStartTS=432739808301809664, conflictCommitTS=432739808826359808, key={tableID=3365, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..9aa25945 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:36:20:481:661 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:36:20:482:461 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:36:21:481:512 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:36:21:482:95 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:36:21:482:677 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:36:22:481:768 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:36:23:481:817 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739812764811264, conflictStartTS=432739813026955264, conflictCommitTS=432739813551243264, key={tableID=3368, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:36:25:282:194 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739812764811264, conflictStartTS=432739813026955264, conflictCommitTS=432739813551243264, key={tableID=3368, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..53f11d4a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:36:38:506:386 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:36:38:506:980 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:36:39:506:308 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:36:39:506:993 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:36:39:507:421 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:36:39:507:957 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:36:40:506:556 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739817489956864, conflictStartTS=432739817752100864, conflictCommitTS=432739817752363008, key={tableID=3371, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:36:41:307:551 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739817489956864, conflictStartTS=432739817752100864, conflictCommitTS=432739817752363008, key={tableID=3371, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..01b8ae6a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:36:54:530:116 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:36:54:530:833 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:36:55:530:64 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:36:55:530:733 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:36:55:531:217 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:36:56:530:267 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:36:56:530:873 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739821952434176, conflictStartTS=432739821690552320, conflictCommitTS=432739822214840320, key={tableID=3374, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:36:58:330:741 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739821952434176, conflictStartTS=432739821690552320, conflictCommitTS=432739822214840320, key={tableID=3374, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..eda2f655 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:37:11:555:510 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:37:11:556:229 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:37:12:555:277 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:37:12:555:915 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:37:12:556:365 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:37:13:555:531 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:37:14:555:565 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739826153553920, conflictStartTS=432739826415697920, conflictCommitTS=432739826939985920, key={tableID=3377, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:37:16:355:939 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739826153553920, conflictStartTS=432739826415697920, conflictCommitTS=432739826939985920, key={tableID=3377, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..6ae84061 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:37:29:582:59 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:37:29:582:779 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:37:30:580:406 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:37:30:581:54 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:37:30:581:525 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:37:31:580:756 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:37:31:581:406 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739831140843520, conflictStartTS=432739830878961664, conflictCommitTS=432739831403249664, key={tableID=3380, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:37:33:381:151 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739831140843520, conflictStartTS=432739830878961664, conflictCommitTS=432739831403249664, key={tableID=3380, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..8cd5db84 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:37:46:604:258 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:37:46:604:979 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:37:47:604:369 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:37:47:605:177 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:37:47:605:712 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:37:48:604:435 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:37:49:604:606 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739835341438976, conflictStartTS=432739835603582976, conflictCommitTS=432739836127870976, key={tableID=3383, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:37:51:404:917 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739835341438976, conflictStartTS=432739835603582976, conflictCommitTS=432739836127870976, key={tableID=3383, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..a30c33cd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:38:4:629:115 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:38:4:629:737 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:38:5:629:53 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:38:5:629:633 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:38:5:630:131 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:38:5:630:668 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:38:6:629:447 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739840066584576, conflictStartTS=432739840328466432, conflictCommitTS=432739840328990720, key={tableID=3386, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:38:7:430:345 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739840066584576, conflictStartTS=432739840328466432, conflictCommitTS=432739840328990720, key={tableID=3386, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1dfccc92 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:38:20:654:445 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:38:20:655:24 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:38:21:654:325 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:38:21:654:925 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:38:21:655:404 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:38:22:654:400 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:38:22:655:33 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:38:22:655:541 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:38:23:654:639 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:38:23:655:922 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739844529586176, conflictStartTS=432739844267442176, conflictCommitTS=432739845054136320, key={tableID=3389, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q11 failed at: 2022-4-24 11:38:25:755:66 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739844791730176, conflictStartTS=432739844267442176, conflictCommitTS=432739845054136320, key={tableID=3389, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:38:26:855:107 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739844529586176, conflictStartTS=432739844267442176, conflictCommitTS=432739845054136320, key={tableID=3389, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..e7d0fba0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:38:39:680:418 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:38:39:681:156 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:38:40:680:301 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:38:40:680:990 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:38:41:680:648 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2022-4-24 11:38:42:680:542 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:38:43:680:584 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:38:43:681:32 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:38:44:680:632 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:38:45:680:743 +Q11-T1 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; +Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739849254993920, conflictStartTS=432739849517137920, conflictCommitTS=432739850827857920, key={tableID=3392, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q11 failed at: 2022-4-24 11:38:47:781:33 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739849779281920, conflictStartTS=432739849517137920, conflictCommitTS=432739850827857920, key={tableID=3392, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:38:48:881:104 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739849254993920, conflictStartTS=432739849517137920, conflictCommitTS=432739850827857920, key={tableID=3392, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e8d94923 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:33:49:262:959 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:33:49:263:527 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:33:50:262:916 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:33:50:263:507 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 11:33:51:262:986 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:33:52:263:233 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 11:34:2:263:629 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 11:34:2:278:388 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:34:2:278:826 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..65786973 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,32 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:34:6:288:423 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:34:6:289:27 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:34:7:288:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:34:7:289:10 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 11:34:8:288:691 + Q6-T2 execute opt: 'COMMIT'; + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739777849065472, conflictStartTS=432739777586921472, conflictCommitTS=432739778111209472, key={tableID=3344, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q6 failed at: 2022-4-24 11:34:9:889:40 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739777849065472, conflictStartTS=432739777586921472, conflictCommitTS=432739778111209472, key={tableID=3344, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..76349a6a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:34:23:312:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:34:23:313:32 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:34:24:312:511 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:34:24:313:229 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 11:34:25:312:747 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:34:25:313:423 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739782311804928, conflictStartTS=432739782049660928, conflictCommitTS=432739782574211072, key={tableID=3347, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:34:27:13:160 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739782311804928, conflictStartTS=432739782049660928, conflictCommitTS=432739782574211072, key={tableID=3347, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..74f9f041 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:34:40:336:875 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:34:40:337:619 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:34:41:336:816 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:34:41:337:438 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:34:41:337:996 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 11:34:42:337:4 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739786512400384, conflictStartTS=432739786774544384, conflictCommitTS=432739786774806528, key={tableID=3350, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:34:43:37:998 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739786512400384, conflictStartTS=432739786774544384, conflictCommitTS=432739786774806528, key={tableID=3350, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..9975b6c2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:35:31:407:725 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:35:31:408:364 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:35:32:407:732 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:35:32:408:333 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:35:32:408:882 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 11:35:33:407:921 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739799900356608, conflictStartTS=432739800162500608, conflictCommitTS=432739800162762752, key={tableID=3359, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:35:34:108:838 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739799900356608, conflictStartTS=432739800162500608, conflictCommitTS=432739800162762752, key={tableID=3359, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..3c94df74 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:34:56:360:560 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:34:56:361:236 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:34:57:360:514 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:34:57:361:140 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 11:34:58:360:785 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:34:58:361:369 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739790975139840, conflictStartTS=432739790712995840, conflictCommitTS=432739791237545984, key={tableID=3353, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:35:0:61:198 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739790975139840, conflictStartTS=432739790712995840, conflictCommitTS=432739791237545984, key={tableID=3353, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..d75851c4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:35:13:384:747 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:35:13:385:349 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:35:14:384:800 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:35:14:385:385 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 11:35:15:384:994 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:35:16:385:235 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739795175735296, conflictStartTS=432739795437879296, conflictCommitTS=432739795962167296, key={tableID=3356, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:35:18:85:365 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739795175735296, conflictStartTS=432739795437879296, conflictCommitTS=432739795962167296, key={tableID=3356, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..01c3022b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:22:48:642:216 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:22:48:642:957 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:22:49:642:213 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:22:49:642:866 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:22:49:643:328 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:22:49:643:915 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:22:50:642:436 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:22:50:642:829 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:23:0:642:829 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:23:0:643:186 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..56bb798a --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:23:4:667:781 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:23:4:668:372 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:23:5:667:726 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:23:5:668:974 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:23:5:669:531 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:23:5:670:143 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:23:6:668:14 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739604146946048, conflictStartTS=432739604409090048, conflictCommitTS=432739604409614336, key={tableID=3242, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:23:7:469:8 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739604146946048, conflictStartTS=432739604409090048, conflictCommitTS=432739604409614336, key={tableID=3242, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..68ab5cb9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:23:20:692:338 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:23:20:692:968 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:23:21:692:352 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:23:21:693:9 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:23:21:693:556 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:23:22:692:681 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:23:22:693:313 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:23:23:692:675 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:23:33:692:982 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:23:33:693:378 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..29a79a0b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:24:9:770:411 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:24:9:770:982 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:24:10:770:656 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:24:10:772:137 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:24:10:772:842 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:24:10:773:541 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:24:11:770:658 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:24:11:771:318 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:24:21:771:19 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:24:21:771:441 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..eebbefbc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:23:37:717:252 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 11:23:37:718:577 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 11:23:37:719:160 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:23:38:717:154 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 11:23:38:719:462 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 11:23:38:719:994 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:23:38:720:657 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:23:39:717:491 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 11:23:49:718:75 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 11:23:49:719:114 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:23:49:719:588 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..cd2cb1e1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:23:53:745:336 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 11:23:53:746:711 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:23:54:745:326 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 11:23:54:747:424 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 11:23:54:748:71 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:23:54:748:693 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 11:23:55:745:821 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:23:55:746:527 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 11:24:5:745:854 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:24:5:746:259 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..f9102636 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:24:25:796:755 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:24:25:797:418 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:24:26:796:540 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:24:26:797:706 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:24:27:796:584 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:24:27:797:281 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:24:28:796:861 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:24:29:796:810 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:24:30:796:856 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:24:31:796:885 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:24:32:796:943 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:24:33:796:984 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:24:43:797:447 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:24:43:797:887 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..f5ba694f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:26:7:925:598 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:26:7:926:390 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:26:8:925:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:26:8:926:157 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:26:8:926:751 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:26:9:925:549 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:26:9:926:244 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:26:9:926:719 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:26:9:927:313 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 11:26:10:925:820 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 11:26:10:926:295 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 11:26:20:926:332 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 11:26:20:926:741 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..9fbcc0bb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:25:48:899:442 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:25:48:900:299 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:25:49:899:332 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:25:49:900:216 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:25:50:899:419 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 11:25:50:900:130 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:25:50:900:791 + Q8-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:25:51:899:436 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 11:25:51:900:161 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:25:51:900:854 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 11:25:52:899:988 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:25:52:900:520 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 11:25:53:902:503 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 11:25:53:903:73 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 11:26:3:900:576 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 11:26:3:901:7 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..968d649c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:24:47:823:325 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 11:24:47:823:988 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:24:48:823:344 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:24:48:824:49 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:24:49:823:235 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:24:49:823:793 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 11:24:50:823:500 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 11:24:51:823:508 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 11:24:52:823:479 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:24:53:823:760 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:24:54:823:743 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:24:55:823:663 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 11:25:5:824:87 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:25:5:824:511 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..8859656d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:25:9:847:617 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 11:25:9:848:319 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:25:10:847:569 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 11:25:10:849:306 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:25:11:847:657 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 11:25:11:848:355 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 11:25:12:847:949 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 11:25:13:847:810 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 11:25:14:848:18 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:25:15:848:21 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:25:16:847:921 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:25:17:848:106 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:25:27:848:448 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:25:27:848:874 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..034742ab --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:26:24:951:536 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:26:24:952:245 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 11:26:24:952:881 + Q4-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q4 finished at: 2022-4-24 11:26:25:951:484 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 11:26:25:952:181 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 11:26:25:952:662 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:26:25:953:309 + Q8-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:26:26:951:510 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 11:26:26:952:228 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 11:26:26:952:763 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:26:26:953:173 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 11:26:27:951:822 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 11:26:27:952:987 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 11:26:37:952:86 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 11:26:37:952:528 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..35faa887 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:25:31:873:708 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 11:25:31:874:347 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:25:32:873:795 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 11:25:32:875:273 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:25:32:875:913 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 11:25:32:876:617 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 11:25:32:877:190 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:25:32:877:904 + Q9-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q9 finished at: 2022-4-24 11:25:33:873:787 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 11:25:33:874:640 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 11:25:33:875:282 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 11:25:33:875:996 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 11:25:33:876:600 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:25:33:877:278 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 11:25:34:874:90 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 11:25:34:874:616 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 11:25:44:874:516 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 11:25:44:874:932 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..673d026e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:22:32:617:143 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:22:32:617:744 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:22:33:617:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:22:33:617:906 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:22:33:618:503 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 11:22:34:617:390 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739595745230848, conflictStartTS=432739596007374848, conflictCommitTS=432739596007636992, key={tableID=3236, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:22:35:318:281 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739595745230848, conflictStartTS=432739596007374848, conflictCommitTS=432739596007636992, key={tableID=3236, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..ac17e33f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:22:16:592:842 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:22:16:593:416 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:22:17:592:816 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:22:17:594:579 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:22:17:595:129 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 11:22:18:593:47 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:22:18:593:438 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 11:22:28:593:487 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:22:28:593:865 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:22:28:594:139 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..d8086cfd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:13:31:852:807 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:13:31:853:321 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:13:32:852:769 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:13:32:853:306 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:13:32:853:812 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2022-4-24 11:13:33:853:23 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:13:34:852:951 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739453986930688, conflictStartTS=432739454249074688, conflictCommitTS=432739454773362688, key={tableID=3143, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:13:36:653:419 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739453986930688, conflictStartTS=432739454249074688, conflictCommitTS=432739454773362688, key={tableID=3143, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..0271eca5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:13:49:877:176 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:13:49:877:728 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:13:50:877:313 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:13:50:877:952 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:13:50:878:519 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:13:50:879:51 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 11:13:51:877:477 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739458712076288, conflictStartTS=432739458974220288, conflictCommitTS=432739458974482432, key={tableID=3146, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:13:52:678:330 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739458712076288, conflictStartTS=432739458974220288, conflictCommitTS=432739458974482432, key={tableID=3146, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..0e006356 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:14:5:901:962 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:14:5:902:650 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:14:6:901:665 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:14:6:902:250 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:14:6:902:700 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:14:7:901:836 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:14:7:902:417 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739463174815744, conflictStartTS=432739462912671744, conflictCommitTS=432739463437221888, key={tableID=3149, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:14:9:702:183 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739463174815744, conflictStartTS=432739462912671744, conflictCommitTS=432739463437221888, key={tableID=3149, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..5c62a40d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:14:22:926:81 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:14:22:926:650 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:14:23:926:335 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:14:23:926:902 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:14:23:927:396 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:14:24:926:420 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:14:25:926:301 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:14:26:926:134 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:14:36:926:835 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:14:36:927:156 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ed69890e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:15:13:0:206 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:15:13:0:868 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:15:14:0:153 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:15:14:2:436 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:15:14:2:883 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:15:15:0:457 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:15:15:1:38 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:15:16:0:188 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:15:26:0:814 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:15:26:1:121 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..038720a3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:15:30:25:205 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:15:30:25:804 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:15:31:25:142 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:15:31:27:186 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:15:31:27:622 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:15:31:27:928 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:15:32:25:481 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:15:32:26:77 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:15:42:25:874 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:15:42:26:289 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..73687277 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:14:40:951:252 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 11:14:40:952:110 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:14:41:951:290 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:14:41:951:819 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:14:41:952:223 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:14:41:952:739 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 11:14:42:951:993 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:14:42:952:337 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 11:14:52:951:733 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:14:52:952:42 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..ac947a64 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:14:56:974:698 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 11:14:56:979:996 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:14:57:974:621 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 11:14:57:975:162 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 11:14:57:975:577 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:14:57:976:86 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 11:14:58:975:179 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:14:58:975:514 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 11:15:8:975:538 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:15:8:975:911 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..94c7a788 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:12:57:802:799 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:12:57:803:423 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:12:58:802:824 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:12:58:803:369 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:12:58:803:859 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 11:12:59:803:28 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:13:0:803:145 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:13:1:802:928 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:13:11:803:530 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:13:11:803:831 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..65220860 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:13:15:827:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:13:15:828:317 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:13:16:827:651 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:13:16:828:276 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:13:16:828:809 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:13:16:829:321 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:13:17:827:931 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 11:13:17:828:652 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 11:13:27:828:344 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:13:27:828:673 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..fc8dcc39 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:15:46:51:326 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:15:46:52:139 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:15:47:51:240 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:15:47:51:779 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 11:15:47:52:331 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:15:48:51:280 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 11:15:48:51:832 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 11:15:48:52:372 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 11:15:49:51:664 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:15:49:52:207 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:15:50:51:462 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:15:51:51:521 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:16:1:52:74 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:16:1:52:443 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..f7091ca8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN OPTIMISTIC;' + Q1 finished at: 2022-4-24 11:16:5:77:44 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 11:16:5:77:846 +Q3-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q3 finished at: 2022-4-24 11:16:6:77:105 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 11:16:6:79:772 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:16:7:77:78 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 11:16:7:77:924 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:16:7:78:585 + Q8-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q8 finished at: 2022-4-24 11:16:8:77:32 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 11:16:8:77:670 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 11:16:9:77:516 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 11:16:10:77:353 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:16:11:77:343 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 11:16:12:77:183 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:16:22:77:256 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 11:16:22:78:696 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 11:16:22:79:94 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..8e114ec6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:16:26:103:57 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:16:26:103:586 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:16:27:103:87 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:16:27:104:182 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 11:16:27:105:124 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:16:28:103:124 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 11:16:28:103:693 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 11:16:28:104:617 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 11:16:29:103:654 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:16:29:104:179 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:16:30:103:370 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:16:31:103:498 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 11:16:41:103:805 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:16:41:104:126 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..91fa917e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:16:45:125:435 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 11:16:45:126:9 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:16:46:125:458 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 11:16:46:126:88 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 11:16:46:127:307 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:16:47:125:463 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 11:16:47:126:13 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 11:16:47:126:899 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 11:16:48:126:436 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:16:48:127:137 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 11:16:49:125:716 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 11:16:50:125:795 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 11:17:0:126:281 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 11:17:0:126:619 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..59895b2e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:10:59:633:870 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:10:59:634:517 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:11:0:633:984 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:11:0:634:645 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 11:11:1:633:817 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:11:2:633:868 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 11:11:12:634:645 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 11:11:12:634:935 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..1a4ffae4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:11:34:682:724 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:11:34:683:312 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:11:35:682:713 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:11:35:684:896 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 11:11:36:682:921 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:11:37:682:702 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:11:38:682:937 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 11:11:48:683:359 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:11:48:683:632 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..c107c77b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:11:52:706:267 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:11:52:706:876 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:11:53:706:231 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 11:11:53:706:799 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:11:53:707:66 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 11:11:54:706:426 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:11:54:706:920 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 11:12:4:706:786 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:12:4:707:91 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..6e6ca217 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:12:40:779:524 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:12:40:780:137 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:12:41:779:514 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:12:41:781:320 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 11:12:42:779:816 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:12:42:780:523 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739440860594176, conflictStartTS=432739440598450176, conflictCommitTS=432739441123000320, key={tableID=3134, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:12:44:479:987 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739440860594176, conflictStartTS=432739440598450176, conflictCommitTS=432739441123000320, key={tableID=3134, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..18838bff --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:11:16:658:579 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:11:16:659:316 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:11:17:658:535 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:11:17:660:379 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 11:11:18:658:789 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:11:19:658:759 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:11:20:658:521 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 11:11:30:659:77 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:11:30:659:494 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..b2c56d85 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:12:8:729:754 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:12:8:730:784 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:12:9:729:746 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 11:12:9:731:452 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:12:9:731:939 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 11:12:10:730:542 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:12:10:730:844 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 11:12:20:730:511 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:12:20:730:917 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..021ef3b0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:12:24:754:368 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 11:12:24:759:562 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:12:25:754:398 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 11:12:25:757:420 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:12:25:757:928 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 11:12:26:755:12 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:12:26:755:343 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 11:12:36:754:962 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:12:36:755:328 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..aafcc45f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:19:2:319:957 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:19:2:320:572 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:19:3:318:955 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 11:19:3:319:646 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:19:3:320:67 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:19:3:320:605 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 11:19:4:319:232 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739540616871936, conflictStartTS=432739540878753792, conflictCommitTS=432739540879278080, key={tableID=3200, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:19:5:120:161 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739540616871936, conflictStartTS=432739540878753792, conflictCommitTS=432739540879278080, key={tableID=3200, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..403f8b7f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:19:18:343:582 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:19:18:344:179 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:19:19:343:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:19:19:344:232 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:19:19:344:744 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:19:20:343:815 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:19:20:344:386 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739545079611392, conflictStartTS=432739544817467392, conflictCommitTS=432739545342017536, key={tableID=3203, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:19:22:144:228 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739545079611392, conflictStartTS=432739544817467392, conflictCommitTS=432739545342017536, key={tableID=3203, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..c91b9e41 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:19:35:368:780 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:19:35:369:384 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:19:36:368:668 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:19:36:369:269 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:19:36:369:734 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:19:37:368:904 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:19:38:368:944 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739549280468992, conflictStartTS=432739549542612992, conflictCommitTS=432739550066900992, key={tableID=3206, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:19:40:169:311 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739549280468992, conflictStartTS=432739549542612992, conflictCommitTS=432739550066900992, key={tableID=3206, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..319ba0e9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,37 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:19:53:393:602 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:19:53:394:242 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:19:54:393:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:19:54:394:174 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:19:54:394:595 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:19:54:395:136 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:19:55:393:861 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739554005614592, conflictStartTS=432739554267758592, conflictCommitTS=432739554268020736, key={tableID=3209, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:19:56:194:754 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739554005614592, conflictStartTS=432739554267758592, conflictCommitTS=432739554268020736, key={tableID=3209, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..0fe9ea2c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:20:9:416:572 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:20:9:417:163 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:20:10:416:578 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:20:10:417:188 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:20:10:417:629 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:20:11:416:850 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:20:11:417:416 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739558468091904, conflictStartTS=432739558205947904, conflictCommitTS=432739558730498048, key={tableID=3212, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:20:13:217:233 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739558468091904, conflictStartTS=432739558205947904, conflictCommitTS=432739558730498048, key={tableID=3212, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c8b8c5c4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:20:26:442:366 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 11:20:26:442:964 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:20:27:442:392 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:20:27:443:654 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 11:20:27:444:77 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:20:28:442:633 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:20:29:442:722 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739562669211648, conflictStartTS=432739562931355648, conflictCommitTS=432739563455643648, key={tableID=3215, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:20:31:243:91 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739562669211648, conflictStartTS=432739562931355648, conflictCommitTS=432739563455643648, key={tableID=3215, handle=1} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..bbe47cb4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:20:44:467:825 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:20:44:468:497 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:20:45:467:824 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:20:45:468:436 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:20:45:468:976 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:20:46:468:102 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 11:20:46:468:764 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739567656501248, conflictStartTS=432739567394357248, conflictCommitTS=432739567918907392, key={tableID=3218, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q8 failed at: 2022-4-24 11:20:48:268:504 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739567656501248, conflictStartTS=432739567394357248, conflictCommitTS=432739567918907392, key={tableID=3218, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..1c00ffe2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:21:1:492:333 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:21:1:492:956 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:21:2:492:395 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:21:2:494:365 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:21:2:494:918 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 11:21:3:492:596 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 11:21:4:492:682 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739571857358848, conflictStartTS=432739572119502848, conflictCommitTS=432739572643790848, key={tableID=3221, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:21:6:293:11 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739571857358848, conflictStartTS=432739572119502848, conflictCommitTS=432739572643790848, key={tableID=3221, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..07887eb2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,44 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:21:19:516:327 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:21:19:516:942 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:21:20:516:322 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 11:21:20:516:928 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:21:20:517:384 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:21:20:517:943 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 11:21:21:516:632 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739576582242304, conflictStartTS=432739576844386304, conflictCommitTS=432739576844648448, key={tableID=3224, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q8 failed at: 2022-4-24 11:21:22:317:519 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739576582242304, conflictStartTS=432739576844386304, conflictCommitTS=432739576844648448, key={tableID=3224, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..2542cd30 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:21:35:542:866 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:21:35:543:510 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:21:36:542:856 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:21:36:543:516 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2022-4-24 11:21:36:543:933 + Q6-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q6 finished at: 2022-4-24 11:21:37:542:883 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:21:37:544:882 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:21:37:545:300 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:21:38:543:139 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 11:21:38:543:731 + Q11-T2 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; + Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739581045506048, conflictStartTS=432739580783362048, conflictCommitTS=432739581570056192, key={tableID=3227, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q11 failed at: 2022-4-24 11:21:40:643:606 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739581307650048, conflictStartTS=432739580783362048, conflictCommitTS=432739581570056192, key={tableID=3227, handle=2} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:21:41:743:625 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739581045506048, conflictStartTS=432739580783362048, conflictCommitTS=432739581570056192, key={tableID=3227, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..dc596101 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:21:54:568:576 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:21:54:569:226 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:21:55:568:542 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 11:21:55:569:134 + Q5-T3 execute sql: 'BEGIN OPTIMISTIC;' + Q5 finished at: 2022-4-24 11:21:56:568:597 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2022-4-24 11:21:57:568:797 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 11:21:58:568:817 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2022-4-24 11:21:58:569:277 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2022-4-24 11:21:59:568:849 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 11:22:0:568:898 +Q11-T1 execute opt: 'COMMIT'; + Q12-T3 execute opt: 'COMMIT'; +Q11 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739585770913792, conflictStartTS=432739586033057792, conflictCommitTS=432739587343777792, key={tableID=3230, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q11 failed at: 2022-4-24 11:22:2:669:289 + Q12 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739586295201792, conflictStartTS=432739586033057792, conflictCommitTS=432739587343777792, key={tableID=3230, handle=1} primary=[]byte(nil) [try again later] errcode: HY000 + Q12 failed at: 2022-4-24 11:22:3:769:296 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739585770913792, conflictStartTS=432739586033057792, conflictCommitTS=432739587343777792, key={tableID=3230, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..44386a48 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:17:4:150:302 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:17:4:151:85 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:17:5:150:199 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:17:5:150:807 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 11:17:6:150:231 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:17:7:150:541 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 11:17:17:150:898 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 11:17:17:165:516 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 11:17:17:165:948 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..52828381 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,32 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:17:21:175:779 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:17:21:176:383 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:17:22:175:780 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:17:22:176:387 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 11:17:23:176:37 + Q6-T2 execute opt: 'COMMIT'; + Q6 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739514364723200, conflictStartTS=432739514102579200, conflictCommitTS=432739514626867200, key={tableID=3182, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q6 failed at: 2022-4-24 11:17:24:776:331 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739514364723200, conflictStartTS=432739514102579200, conflictCommitTS=432739514626867200, key={tableID=3182, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..bb56e182 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:17:38:199:891 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:17:38:200:486 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:17:39:199:881 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:17:39:200:519 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 11:17:40:200:107 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:17:40:200:706 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739518827462656, conflictStartTS=432739518565318656, conflictCommitTS=432739519089868800, key={tableID=3185, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:17:41:900:488 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739518827462656, conflictStartTS=432739518565318656, conflictCommitTS=432739519089868800, key={tableID=3185, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..dc59e281 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,34 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:17:55:223:74 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:17:55:223:669 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:17:56:223:71 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:17:56:223:700 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:17:56:224:243 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 11:17:57:223:437 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739523027795968, conflictStartTS=432739523289939968, conflictCommitTS=432739523290464256, key={tableID=3188, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:17:57:924:359 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739523027795968, conflictStartTS=432739523289939968, conflictCommitTS=432739523290464256, key={tableID=3188, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..ca79a5b6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:18:46:295:257 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 11:18:46:295:862 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:18:47:295:236 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:18:47:298:823 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 11:18:47:299:342 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 11:18:48:295:445 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739536416276480, conflictStartTS=432739536678420480, conflictCommitTS=432739536679469056, key={tableID=3197, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:18:48:996:327 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739536416276480, conflictStartTS=432739536678420480, conflictCommitTS=432739536679469056, key={tableID=3197, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..646769d5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:18:11:246:859 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:18:11:247:436 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:18:12:246:863 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:18:12:247:599 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 11:18:13:247:125 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 11:18:13:247:839 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739527490535424, conflictStartTS=432739527228391424, conflictCommitTS=432739527752941568, key={tableID=3191, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 + Q7 failed at: 2022-4-24 11:18:14:947:485 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739527490535424, conflictStartTS=432739527228391424, conflictCommitTS=432739527752941568, key={tableID=3191, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..07013a34 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,41 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN OPTIMISTIC;' +Q1 finished at: 2022-4-24 11:18:28:270:832 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 11:18:28:271:446 + Q3-T2 execute sql: 'BEGIN OPTIMISTIC;' + Q3 finished at: 2022-4-24 11:18:29:270:643 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 11:18:29:271:249 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2022-4-24 11:18:30:270:844 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 11:18:31:270:946 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739531691130880, conflictStartTS=432739531953274880, conflictCommitTS=432739532477562880, key={tableID=3194, handle=0} primary=[]byte(nil) [try again later] errcode: HY000 +Q7 failed at: 2022-4-24 11:18:32:971:288 + +Test Result: Rollback +[MySQL][ODBC 5.2(w) Driver]Write conflict, txnStartTS=432739531691130880, conflictStartTS=432739531953274880, conflictCommitTS=432739532477562880, key={tableID=3194, handle=0} primary=[]byte(nil) [try again later] + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..45e2cffc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..da22c292 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:16:17:364:765 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:16:17:370:175 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:16:18:364:789 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:16:18:366:319 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:16:18:367:534 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:16:18:368:298 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:16:19:365:623 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:16:19:366:37 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:16:39:365:806 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:16:39:366:189 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..cccdf404 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:16:43:394:9 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:16:43:399:180 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:16:44:393:991 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:16:44:396:758 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:16:44:398:109 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:16:44:398:916 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:16:45:395:135 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:16:45:395:908 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:17:5:394:705 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:17:5:395:97 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..2b21db71 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:17:9:419:999 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:17:9:425:631 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:17:10:420:28 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:17:10:422:841 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:17:10:424:95 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:17:11:421:16 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:17:11:421:771 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:17:12:420:679 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:17:32:420:774 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:17:32:421:183 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..5104be5c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:18:28:502:258 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:18:28:507:777 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:18:29:502:222 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:18:29:503:993 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:18:29:505:220 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:18:29:505:815 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:18:30:503:482 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:18:30:504:171 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:18:50:503:113 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:18:50:503:563 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..fb75517f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:17:36:447:508 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 10:17:36:448:688 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 10:17:36:449:279 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 10:17:37:447:527 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 10:17:37:449:581 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 10:17:37:450:163 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:17:37:450:873 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:17:38:447:830 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 10:17:58:448:687 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 10:17:58:449:564 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:17:58:449:958 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..7060971f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:18:2:475:482 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 10:18:2:476:834 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:18:3:475:479 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 10:18:3:477:587 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 10:18:3:478:393 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:18:3:479:44 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 10:18:4:475:991 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:18:4:476:617 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 10:18:24:476:153 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:18:24:476:683 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..6e31afa0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:18:54:529:466 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 10:18:54:534:945 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:18:55:529:505 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:18:55:532:162 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:18:56:529:505 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:18:56:530:840 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 10:18:57:530:915 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:18:58:530:777 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 10:18:59:530:634 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:19:0:529:903 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:19:1:529:856 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:19:2:529:912 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:19:22:530:479 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:19:22:530:893 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..151638a3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:21:26:665:204 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:21:26:670:880 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:21:27:665:110 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:21:27:667:387 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:21:27:667:976 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 10:21:28:665:164 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:21:28:666:404 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:21:28:667:501 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:21:28:668:238 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 10:21:29:666:42 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 10:21:29:666:477 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 10:21:49:666:76 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 10:21:49:666:517 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..ef58ff26 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:20:57:637:421 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:20:57:643:212 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:20:58:637:967 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:20:58:639:348 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:20:59:637:404 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 10:20:59:638:848 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:20:59:639:508 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 10:21:0:637:381 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 10:21:0:638:754 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:21:0:639:408 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 10:21:1:638:415 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:21:1:638:853 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 10:21:2:638:474 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 10:21:2:638:906 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 10:21:22:638:573 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 10:21:22:639:10 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..16b55543 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:19:26:557:336 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 10:19:26:562:969 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:19:27:557:294 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 10:19:27:559:286 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:19:28:557:330 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:19:28:558:542 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 10:19:29:558:656 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 10:19:30:558:422 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 10:19:31:558:411 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:19:32:557:842 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:19:33:557:717 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:19:34:557:719 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 10:19:54:558:99 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:19:54:558:544 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..2b5ccf60 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:19:58:583:316 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 10:19:58:588:897 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:19:59:583:256 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 10:19:59:585:536 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:20:0:583:272 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 10:20:0:584:656 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 10:20:1:583:880 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 10:20:2:583:562 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 10:20:3:583:675 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:20:4:583:659 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:20:5:583:658 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:20:6:583:694 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:20:26:584:104 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:20:26:584:525 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..bf80e742 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:21:53:692:308 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 10:21:53:697:887 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 10:21:53:698:895 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 10:21:54:692:332 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 10:21:54:701:522 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 10:21:54:702:667 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:21:54:703:332 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 10:21:55:692:357 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 10:21:55:693:670 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 10:21:55:694:619 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:21:55:695:72 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 10:21:56:693:473 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 10:21:56:694:240 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 10:22:16:693:163 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 10:22:16:693:618 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..fa705587 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:20:30:609:238 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 10:20:30:614:864 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:20:31:609:223 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 10:20:31:615:49 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:20:31:616:238 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 10:20:31:617:377 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 10:20:31:618:712 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:20:31:619:393 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-24 10:20:32:609:309 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 10:20:32:610:581 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 10:20:32:611:701 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 10:20:32:612:769 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 10:20:32:614:129 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:20:32:614:914 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 10:20:33:610:215 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 10:20:33:610:779 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 10:20:53:610:320 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 10:20:53:610:742 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..38c400ef --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:15:51:337:842 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:15:51:343:444 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:15:52:337:850 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:15:52:340:226 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:15:52:340:934 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 10:15:53:338:944 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:15:53:339:668 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:16:13:338:527 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:16:13:338:951 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..604e8cf8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:15:25:311:327 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:15:25:316:744 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:15:26:311:263 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 10:15:26:312:758 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:15:26:313:372 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 10:15:27:312:125 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:15:27:312:572 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:15:47:311:974 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:15:47:312:381 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:15:47:312:690 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..d63edf35 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:1:40:516:546 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:1:40:522:135 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:1:41:516:519 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:1:41:518:509 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:1:41:519:634 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:1:43:516:742 +Q6 finished at: 2022-4-24 10:1:43:517:818 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:1:44:516:792 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 10:2:4:517:312 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:2:4:517:646 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..d9cb4d79 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:2:8:542:719 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:2:8:548:451 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:2:9:542:692 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:2:9:544:984 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:2:9:546:39 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:2:9:546:565 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 10:2:10:543:823 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:2:10:544:452 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 10:2:30:543:454 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:2:30:543:799 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..4677bb21 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:2:34:569:256 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:2:34:575:94 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:2:35:569:201 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:2:35:571:480 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:2:36:570:299 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:2:36:570:914 + Q5 finished at: 2022-4-24 10:2:36:571:831 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:2:37:569:444 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:2:57:569:975 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:2:57:570:275 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..879f3c08 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:3:1:595:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:3:1:601:87 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:3:2:595:844 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:3:2:598:131 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:3:2:599:443 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:3:3:596:639 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:3:4:596:34 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:3:5:595:838 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:3:25:596:603 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:3:25:596:941 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..6e0205d0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:4:21:673:549 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:4:21:679:84 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:4:22:673:621 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:4:22:675:429 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:4:22:676:254 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:4:23:674:637 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:4:23:675:183 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:4:24:673:570 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:4:44:674:395 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:4:44:674:701 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..49950b2d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:4:48:702:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:4:48:708:119 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:4:49:702:484 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:4:49:704:548 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:4:49:705:352 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:4:49:705:656 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:4:50:703:656 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:4:50:704:181 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:5:10:703:296 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:5:10:703:626 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..bc969d4b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:3:29:622:348 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:3:29:627:575 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:3:30:622:395 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:3:30:624:0 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:3:30:625:578 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:3:30:626:166 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:3:31:623:102 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:3:31:623:444 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 10:3:51:623:118 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:3:51:623:530 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..c84f4b93 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:3:55:647:508 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 10:3:55:652:884 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:3:56:647:488 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 10:3:56:649:305 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 10:3:56:649:963 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:3:56:650:520 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 10:3:57:648:308 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:3:57:648:720 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 10:4:17:648:287 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:4:17:648:652 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..21960d1e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:0:46:465:64 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:0:46:470:801 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:0:47:465:65 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:0:47:467:934 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:0:47:469:143 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 10:0:48:466:12 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:0:49:465:241 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:0:50:465:183 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:1:10:465:848 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:1:10:466:183 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..77461df3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:1:14:491:758 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:1:14:497:495 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:1:15:491:741 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:1:15:494:217 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:1:15:495:342 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:1:15:495:834 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:1:16:492:586 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:1:16:493:80 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:1:36:492:446 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:1:36:492:760 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..97d13d3c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:5:14:729:318 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:5:14:734:997 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:5:15:729:326 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:5:15:731:542 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 10:5:15:732:785 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 10:5:16:729:310 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:5:16:730:849 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 10:5:16:732:56 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 10:5:17:730:284 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:5:17:730:801 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:5:18:729:580 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:5:19:729:620 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:5:39:730:387 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:5:39:730:758 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..d6b38845 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-24 10:5:43:756:151 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 10:5:43:762:50 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-24 10:5:44:756:118 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 10:5:44:758:240 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:5:45:756:83 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 10:5:45:757:504 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 10:5:45:758:533 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 10:5:46:756:181 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 10:5:46:757:748 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 10:5:47:757:250 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 10:5:48:756:390 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:5:49:756:512 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 10:5:50:756:446 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:6:10:756:253 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 10:6:10:757:619 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 10:6:10:757:936 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..ced50e09 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:6:14:783:948 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:6:14:789:683 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:6:15:783:898 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:6:15:786:479 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:6:15:787:898 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 10:6:16:783:906 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 10:6:16:785:292 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 10:6:16:786:812 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:6:17:785:177 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:6:17:785:730 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:6:18:784:263 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:6:19:784:201 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 10:6:39:784:710 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:6:39:785:95 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..f37b4b63 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:6:43:807:789 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 10:6:43:808:803 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:6:44:807:786 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 10:6:44:809:428 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 10:6:44:810:983 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 10:6:45:807:848 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 10:6:45:808:644 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 10:6:45:810:265 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 10:6:46:808:675 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 10:6:46:809:189 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 10:6:47:808:87 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 10:6:48:808:92 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 10:7:8:808:724 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 10:7:8:809:375 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..ed7329bd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:57:38:289:52 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 9:57:38:294:725 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:57:39:289:158 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 9:57:39:291:608 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 9:57:40:289:42 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 9:57:41:289:32 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 9:58:1:289:886 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 9:58:1:290:277 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..3e508b88 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:58:33:339:113 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 9:58:33:344:828 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:58:34:339:49 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 9:58:34:340:729 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 9:58:35:340:201 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 9:58:36:339:0 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 9:58:37:339:553 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 9:58:57:339:706 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 9:58:57:340:67 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..adc2bb96 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:59:1:364:650 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 9:59:1:370:192 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:59:2:364:662 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 9:59:2:366:717 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 9:59:2:367:4 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 9:59:3:365:780 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 9:59:3:366:379 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 9:59:23:365:302 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 9:59:23:365:620 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..15a99833 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:0:19:438:961 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:0:19:444:742 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:0:20:438:760 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 10:0:21:439:614 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:0:21:440:110 + Q4 finished at: 2022-4-24 10:0:21:441:98 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:0:22:439:34 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:0:42:439:479 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:0:42:439:780 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..6d2b2eb0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:58:5:313:583 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 9:58:5:318:960 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:58:6:313:620 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 9:58:6:319:152 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 9:58:7:314:358 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 9:58:8:313:770 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 9:58:9:313:598 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 9:58:29:314:240 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 9:58:29:314:560 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..714cd9cc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:59:27:390:231 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 9:59:27:395:552 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:59:28:390:264 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 9:59:28:392:226 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 9:59:28:392:845 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 9:59:29:390:818 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 9:59:29:391:122 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 9:59:49:390:935 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 9:59:49:391:251 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4ee2c070 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 9:59:53:413:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 9:59:53:418:652 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 9:59:54:413:388 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 9:59:54:415:66 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 9:59:54:415:606 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 9:59:55:414:110 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 9:59:55:414:521 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 10:0:15:414:105 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:0:15:414:418 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..78eb17ba --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:10:21:18:961 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:10:21:24:750 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:10:22:18:937 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 10:10:22:21:193 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 10:10:23:19:731 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:10:23:20:289 + Q5 finished at: 2022-4-24 10:10:23:21:114 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:10:23:21:713 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:10:43:19:991 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:10:43:20:383 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..caf7c651 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:10:47:46:564 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:10:47:52:128 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:10:48:46:615 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:10:48:49:942 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 10:10:49:48:617 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 10:10:49:648:273 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..78a445eb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:11:14:73:283 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:11:14:78:887 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:11:15:73:332 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:11:15:74:895 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 10:11:16:75:303 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 10:11:16:674:939 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cae40a23 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:11:42:99:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:11:42:105:316 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:11:43:99:724 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:11:43:101:215 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 10:11:44:101:668 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:11:44:102:497 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 10:11:44:801:180 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..e55caa92 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:12:8:124:862 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:12:8:130:167 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:12:9:124:864 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:12:9:126:383 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:12:9:127:762 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:12:11:125:198 +Q6 finished at: 2022-4-24 10:12:11:126:181 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:12:11:126:813 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:12:31:125:832 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:12:31:126:196 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..892560b4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:12:35:151:889 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 10:12:35:157:374 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:12:36:151:842 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:12:36:153:786 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 10:12:36:155:122 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:12:38:152:194 +Q6 finished at: 2022-4-24 10:12:38:153:154 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:12:39:152:206 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:12:59:152:636 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:12:59:153:19 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..085f5d22 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:13:3:178:956 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:13:3:184:591 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:13:4:178:973 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:13:4:181:909 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:13:5:180:347 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:13:5:181:62 + Q5 finished at: 2022-4-24 10:13:5:181:862 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 10:13:6:179:283 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:13:26:179:786 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:13:26:180:161 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..62754fef --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:13:30:204:116 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:13:30:209:980 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:13:31:204:162 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:13:31:205:840 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 10:13:32:205:369 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:13:34:204:526 + Q5 finished at: 2022-4-24 10:13:34:205:534 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:13:34:206:160 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:13:54:205:35 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:13:54:205:430 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..37b24c67 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:13:58:231:571 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:13:58:237:228 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:13:59:231:524 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 10:13:59:232:600 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 10:14:0:234:99 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 10:14:0:235:73 + Q5 finished at: 2022-4-24 10:14:0:236:173 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:14:0:236:949 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 10:14:20:232:354 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 10:14:20:232:832 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..7a30f6e1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:14:24:258:768 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:14:24:264:527 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:14:25:258:750 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:14:25:262:660 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 10:14:26:258:735 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 10:14:26:260:120 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-24 10:14:27:260:956 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 10:14:28:160:545 + Q8 finished at: 2022-4-24 10:14:28:162:406 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..45bb5e6f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:14:53:285:356 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:14:53:291:185 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:14:54:285:355 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 10:14:54:286:872 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 10:14:55:285:395 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 10:14:57:286:488 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-24 10:14:58:287:680 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 10:14:59:187:189 + Q8 finished at: 2022-4-24 10:14:59:286:606 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e596e2aa --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:7:12:834:23 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:7:12:839:645 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:7:13:833:973 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 10:7:14:834:79 + Q4 finished at: 2022-4-24 10:7:14:835:113 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:7:15:834:347 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 10:7:35:834:719 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 10:7:35:849:543 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:7:35:850:23 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..94f5fd52 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:7:39:860:116 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:7:39:865:918 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:7:40:860:51 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 10:7:41:860:267 + Q4 finished at: 2022-4-24 10:7:41:861:235 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:7:42:860:430 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 10:8:2:860:762 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 10:8:2:875:762 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:8:2:876:217 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..a050c061 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:8:6:886:557 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:8:6:892:215 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:8:7:886:489 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 10:8:8:887:733 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:8:8:888:580 + Q4 finished at: 2022-4-24 10:8:8:889:460 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:8:9:886:834 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 10:8:29:887:303 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:8:29:887:740 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..8822a2c6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:8:33:913:8 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:8:33:920:224 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:8:34:912:768 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 10:8:35:913:950 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:8:35:914:642 + Q4 finished at: 2022-4-24 10:8:35:915:508 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:8:35:916:115 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 10:8:55:913:432 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:8:55:913:760 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..cc32f26b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:9:54:990:294 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 10:9:54:995:989 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:9:55:990:205 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 10:9:56:991:130 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:9:56:991:685 + Q4 finished at: 2022-4-24 10:9:56:992:584 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 10:9:56:993:164 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:10:16:993:596 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:10:16:994:51 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..cb97349e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:8:59:938:544 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:8:59:944:157 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:9:0:938:542 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:9:0:940:583 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 10:9:2:938:863 +Q5 finished at: 2022-4-24 10:9:2:939:825 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 10:9:2:940:413 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:9:22:938:995 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:9:22:939:336 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..a0000a13 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 10:9:26:964:197 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 10:9:26:969:658 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 10:9:27:964:218 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 10:9:27:966:724 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 10:9:29:964:531 +Q5 finished at: 2022-4-24 10:9:29:965:482 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 10:9:30:964:576 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 10:9:50:964:990 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 10:9:50:965:462 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..72427cd6 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:19:6:854:702 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:19:6:860:165 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:19:7:854:659 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:19:7:856:584 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:19:7:857:843 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:19:7:858:731 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 1:19:8:855:530 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:19:8:855:978 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:19:28:855:246 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:19:28:855:676 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..53df58a8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:19:32:881:84 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:19:32:886:510 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:19:33:881:157 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:19:33:883:326 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:19:33:884:754 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:19:33:885:539 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 1:19:34:882:176 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:19:34:882:838 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:19:54:881:943 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:19:54:882:448 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..fbcf7e54 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:19:58:906:479 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:19:58:911:735 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:19:59:906:547 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:19:59:908:593 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:19:59:909:805 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 1:20:0:907:646 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:20:0:908:275 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:20:1:906:750 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:20:21:907:316 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:20:21:907:698 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a7ee55f1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:21:17:988:790 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:21:17:994:171 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:21:18:988:793 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:21:18:989:926 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:21:18:991:145 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:21:18:991:805 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 1:21:19:989:720 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:21:19:990:377 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:21:39:989:592 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:21:39:990:0 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..15c4d111 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:20:25:934:498 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 1:20:25:935:455 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 1:20:25:936:37 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 1:20:26:934:577 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 1:20:26:936:554 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 1:20:26:937:311 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:20:26:937:999 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:20:27:934:850 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 1:20:47:935:442 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 1:20:47:936:456 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:20:47:936:969 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..7a5e2671 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:20:51:962:220 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 1:20:51:963:639 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:20:52:962:285 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 1:20:52:964:527 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 1:20:52:965:349 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:20:52:965:915 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 1:20:53:962:741 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:20:53:963:357 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 1:21:13:962:832 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:21:13:963:232 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..90366d80 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:21:44:14:372 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 1:21:44:19:801 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:21:45:14:384 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 1:21:45:16:254 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:21:46:14:425 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 1:21:46:15:774 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 1:21:47:15:346 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 1:21:48:15:610 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 1:21:49:15:598 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:21:50:14:758 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:21:51:14:780 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:21:52:14:779 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 1:22:12:15:406 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:22:12:15:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..9c110b88 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:24:16:148:996 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:24:16:154:583 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:24:17:148:972 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 1:24:17:157:319 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:24:17:158:55 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 1:24:18:149:36 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 1:24:18:150:437 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 1:24:18:151:742 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:24:18:152:492 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 1:24:19:149:954 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 1:24:19:150:481 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 1:24:39:149:841 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 1:24:39:150:264 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..4b439c23 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:23:47:121:244 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:23:47:127:13 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:23:48:121:256 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:23:48:123:198 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:23:49:121:300 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 1:23:49:122:998 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:23:49:123:756 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 1:23:50:121:178 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 1:23:50:122:728 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:23:50:123:348 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 1:23:51:122:338 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:23:51:122:783 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 1:23:52:122:372 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 1:23:52:122:824 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 1:24:12:122:497 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 1:24:12:123:11 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..23950cc3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:22:16:42:206 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 1:22:16:47:694 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:22:17:42:266 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 1:22:17:44:515 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:22:18:42:217 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 1:22:18:43:489 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 1:22:19:43:341 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 1:22:20:43:179 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 1:22:21:43:343 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:22:22:42:567 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:22:23:42:511 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:22:24:42:654 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 1:22:44:43:26 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:22:44:43:428 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..94a22b81 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:22:48:68:639 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 1:22:48:74:143 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:22:49:68:706 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 1:22:49:70:780 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:22:50:68:609 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 1:22:50:69:814 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 1:22:51:69:305 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 1:22:52:68:983 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 1:22:53:69:37 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:22:54:69:34 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:22:55:69:82 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:22:56:69:80 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 1:23:16:69:564 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:23:16:70:7 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..d6b5de48 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(100));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:24:43:175:952 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 1:24:43:181:560 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 1:24:43:182:733 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 1:24:44:175:896 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 1:24:44:177:843 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 1:24:44:179:80 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:24:44:179:846 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 1:24:45:175:884 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 1:24:45:177:235 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 1:24:45:178:369 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:24:45:178:817 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 1:24:46:177:73 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 1:24:46:177:842 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 1:25:6:176:756 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 1:25:6:177:171 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..82008fcf --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:23:20:96:863 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 1:23:20:102:378 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:23:21:97:161 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 1:23:21:98:394 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:23:21:99:581 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 1:23:21:100:657 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 1:23:21:101:876 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:23:21:102:609 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-24 1:23:22:96:901 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 1:23:22:98:136 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 1:23:22:99:186 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 1:23:22:100:261 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 1:23:22:101:533 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:23:22:102:367 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 1:23:23:97:865 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 1:23:23:98:368 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 1:23:43:97:892 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 1:23:43:98:359 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..1b281760 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:18:40:827:983 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 1:18:40:833:191 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:18:41:828:61 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 1:18:41:830:359 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:18:41:831:54 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 1:18:42:829:199 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:18:42:829:952 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:19:2:828:613 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:19:2:829:7 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..687f1997 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:18:14:801:702 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:18:14:807:136 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:18:15:801:714 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 1:18:15:803:200 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:18:15:803:890 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 1:18:16:803:18 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:18:16:803:404 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:18:36:802:438 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:18:36:802:852 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:18:36:803:115 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..3c2a556e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:4:30:13:342 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:4:30:19:112 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:4:31:13:311 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:4:31:15:550 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:4:31:16:721 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:4:33:13:530 +Q6 finished at: 2022-4-24 1:4:33:14:453 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:4:34:13:570 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 1:4:54:14:10 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:4:54:14:314 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..1d21c438 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:4:58:40:13 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:4:58:45:924 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:4:59:39:856 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:4:59:42:987 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:4:59:44:79 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:4:59:44:628 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 1:5:0:40:980 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:5:0:41:618 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 1:5:20:40:554 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:5:20:40:885 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1c9cdaa9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:5:24:66:193 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:5:24:71:824 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:5:25:66:236 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:5:25:68:300 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 1:5:26:67:15 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:5:26:67:627 + Q5 finished at: 2022-4-24 1:5:26:68:487 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:5:27:66:534 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:5:47:67:7 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:5:47:67:416 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..043a4a15 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:5:51:93:98 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:5:51:98:495 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:5:52:93:60 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:5:52:97:626 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:5:52:98:973 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 1:5:53:93:828 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:5:54:93:249 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:5:55:93:114 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:6:15:93:849 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:6:15:94:203 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..3c7179db --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:7:11:171:436 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:7:11:177:148 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:7:12:171:448 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:7:12:173:610 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:7:12:174:452 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 1:7:13:172:670 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:7:13:173:271 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:7:14:171:485 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:7:34:172:277 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:7:34:172:639 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..1a84cfac --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:7:38:198:354 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:7:38:204:58 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:7:39:198:351 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:7:39:200:288 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:7:39:201:115 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:7:39:201:460 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 1:7:40:199:508 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:7:40:200:150 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:8:0:199:81 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:8:0:199:420 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..3bc7fc82 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:6:19:119:849 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 1:6:19:125:264 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:6:20:119:792 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:6:20:121:177 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:6:20:122:367 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:6:20:123:8 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 1:6:21:120:434 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:6:21:120:783 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 1:6:41:120:409 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:6:41:120:768 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..9d6ed583 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:6:45:144:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 1:6:45:150:279 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:6:46:144:841 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 1:6:46:146:514 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 1:6:46:147:95 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:6:46:147:591 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 1:6:47:145:620 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:6:47:145:972 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 1:7:7:145:687 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:7:7:146:6 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..1fd91e2d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:3:35:956:885 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:3:35:962:563 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:3:36:956:836 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:3:36:958:768 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:3:36:959:795 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 1:3:37:957:436 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:3:38:957:58 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:3:39:956:984 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:3:59:957:579 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:3:59:957:901 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..b66f9449 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:4:3:987:262 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:4:3:992:966 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:4:4:987:218 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:4:4:989:255 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:4:4:990:222 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:4:4:990:767 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 1:4:5:988:77 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:4:5:988:624 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:4:25:987:883 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:4:25:988:201 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..33012019 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:8:4:224:336 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:8:4:229:978 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:8:5:224:326 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:8:5:226:668 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 1:8:5:227:813 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 1:8:6:224:334 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 1:8:6:225:834 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 1:8:6:226:979 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 1:8:7:225:323 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:8:7:225:864 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:8:8:224:757 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:8:9:224:640 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 1:8:29:225:386 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:8:29:225:759 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..d1b3d0b3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-24 1:8:33:251:234 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 1:8:33:256:839 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-24 1:8:34:251:254 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 1:8:34:253:931 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:8:35:251:251 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 1:8:35:252:723 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 1:8:35:253:765 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 1:8:36:251:286 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 1:8:36:252:810 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 1:8:37:252:386 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 1:8:38:251:507 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:8:39:251:572 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 1:8:40:251:442 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:9:0:251:432 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 1:9:0:252:811 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 1:9:0:253:127 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..1b2dfdba --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:9:4:279:639 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:9:4:285:306 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:9:5:279:632 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:9:5:281:519 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 1:9:5:283:56 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 1:9:6:279:622 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 1:9:6:280:957 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 1:9:6:282:450 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 1:9:7:280:898 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:9:7:281:437 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:9:8:279:867 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:9:9:279:917 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 1:9:29:280:470 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:9:29:280:851 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..5a1469c5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:9:33:302:533 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 1:9:33:303:460 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:9:34:302:666 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 1:9:34:304:341 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 1:9:34:306:205 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 1:9:35:302:525 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 1:9:35:303:203 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 1:9:35:304:611 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 1:9:36:303:676 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 1:9:36:304:229 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 1:9:37:302:791 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 1:9:38:302:920 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 1:9:58:303:559 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 1:9:58:303:917 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..0760b7ac --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:0:27:781:816 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:0:27:787:644 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:0:28:781:836 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 1:0:28:783:70 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 1:0:29:781:713 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:0:30:781:674 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 1:0:50:782:546 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:0:50:782:845 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..db3fc6b8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:1:22:830:901 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:1:22:836:184 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:1:23:830:952 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 1:1:23:832:685 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 1:1:24:832:238 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:1:25:830:821 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:1:26:831:218 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 1:1:46:831:398 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:1:46:831:690 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..e9fd1f5d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:1:50:856:308 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:1:50:861:921 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:1:51:856:360 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 1:1:51:858:260 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:1:51:858:678 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 1:1:52:857:517 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:1:52:858:66 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 1:2:12:857:1 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:2:12:857:309 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..7fbd8632 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:3:8:930:487 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:3:8:936:147 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:3:9:930:483 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 1:3:10:931:132 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 1:3:10:931:656 + Q4 finished at: 2022-4-24 1:3:10:932:593 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:3:11:930:763 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:3:31:930:965 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:3:31:931:265 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..853d5fe5 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:0:54:806:140 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:0:54:811:704 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:0:55:806:165 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 1:0:55:807:982 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 1:0:56:806:831 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:0:57:806:336 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:0:58:806:19 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:1:18:806:789 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:1:18:807:106 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..5d4a94fe --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:2:16:883:192 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 1:2:16:888:221 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:2:17:882:95 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 1:2:17:883:471 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:2:17:883:996 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 1:2:18:882:829 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:2:18:883:240 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 1:2:38:882:764 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:2:38:883:163 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..3dc03d8b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:2:42:905:751 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 1:2:42:910:973 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:2:43:905:732 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 1:2:43:907:534 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:2:43:908:77 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 1:2:44:906:388 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:2:44:906:768 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 1:3:4:906:294 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:3:4:906:695 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..af9d2081 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:13:10:513:221 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:13:10:518:905 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:13:11:513:238 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 1:13:11:515:237 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 1:13:12:514:3 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:13:12:514:562 + Q5 finished at: 2022-4-24 1:13:12:515:450 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:13:12:516:74 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:13:32:513:997 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:13:32:514:361 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..1c61f124 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:13:36:539:844 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:13:36:545:512 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:13:37:539:821 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:13:37:541:770 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 1:13:38:542:25 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 1:13:39:141:524 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..6048c9bd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:14:3:565:928 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:14:3:571:582 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:14:4:565:926 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:14:4:567:466 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 1:14:5:568:65 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 1:14:6:167:551 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..e9b47ab9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:14:31:591:970 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:14:31:597:768 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:14:32:591:872 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:14:32:593:241 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 1:14:33:593:808 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:14:33:594:655 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 1:14:34:293:487 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..ca5f51d4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:14:57:616:575 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:14:57:622:129 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:14:58:616:550 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:14:58:618:34 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:14:58:619:178 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:15:0:616:912 +Q6 finished at: 2022-4-24 1:15:0:617:875 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:15:0:618:465 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:15:20:617:363 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:15:20:617:739 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..a64f0bb2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:15:24:643:645 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 1:15:24:649:212 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:15:25:643:548 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:15:25:645:696 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 1:15:25:646:959 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:15:27:643:887 +Q6 finished at: 2022-4-24 1:15:27:644:793 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:15:28:643:954 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:15:48:644:844 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:15:48:645:303 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b26e1c56 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:15:52:670:983 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:15:52:676:615 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:15:53:671:21 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:15:53:672:803 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 1:15:54:672:99 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:15:54:672:814 + Q5 finished at: 2022-4-24 1:15:54:673:610 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 1:15:55:671:383 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:16:15:671:757 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:16:15:672:207 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..c941d7a7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:16:19:697:787 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:16:19:703:507 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:16:20:697:697 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:16:20:698:903 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 1:16:21:698:739 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:16:23:698:32 + Q5 finished at: 2022-4-24 1:16:23:698:961 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:16:23:699:573 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:16:43:698:539 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:16:43:698:965 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..99286983 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:16:47:723:563 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:16:47:729:240 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:16:48:723:598 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 1:16:48:725:445 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 1:16:49:724:619 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 1:16:49:725:273 + Q5 finished at: 2022-4-24 1:16:49:726:203 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:16:49:726:833 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 1:17:9:724:403 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 1:17:9:724:815 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ec8288bc --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:17:13:750:833 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:17:13:756:605 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:17:14:750:840 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:17:14:753:835 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 1:17:15:750:818 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 1:17:15:752:321 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-24 1:17:16:752:979 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 1:17:17:652:569 + Q8 finished at: 2022-4-24 1:17:17:654:512 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..488aa752 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:17:42:777:749 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:17:42:783:376 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:17:43:777:729 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 1:17:43:779:127 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 1:17:44:777:759 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 1:17:46:779:65 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-24 1:17:47:779:419 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 1:17:48:679:507 + Q8 finished at: 2022-4-24 1:17:48:779:55 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..4d6360e1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:10:2:328:872 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:10:2:334:575 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:10:3:328:851 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 1:10:4:328:898 + Q4 finished at: 2022-4-24 1:10:4:329:978 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:10:5:329:359 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 1:10:25:329:513 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 1:10:25:344:442 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:10:25:344:957 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..1678c620 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:10:29:355:248 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:10:29:360:974 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:10:30:355:261 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 1:10:31:355:459 + Q4 finished at: 2022-4-24 1:10:31:356:578 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:10:32:355:577 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 1:10:52:356:33 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 1:10:52:371:109 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:10:52:371:588 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..dad24579 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:10:56:382:48 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:10:56:387:592 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:10:57:382:111 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 1:10:58:383:284 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 1:10:58:383:989 + Q4 finished at: 2022-4-24 1:10:58:384:768 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:10:59:382:353 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 1:11:19:382:768 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:11:19:383:128 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..fc74fdec --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:11:23:406:604 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:11:23:411:972 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:11:24:406:593 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 1:11:25:407:821 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:11:25:408:493 + Q4 finished at: 2022-4-24 1:11:25:409:317 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:11:25:409:838 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 1:11:45:407:234 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:11:45:407:575 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b1a450da --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:12:44:486:941 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 1:12:44:492:940 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:12:45:486:863 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 1:12:46:487:861 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:12:46:488:445 + Q4 finished at: 2022-4-24 1:12:46:489:239 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 1:12:46:489:785 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:13:6:487:497 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:13:6:487:870 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..5d184529 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:11:49:431:580 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 1:11:49:437:49 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:11:50:431:582 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 1:11:50:433:514 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 1:11:52:431:871 +Q5 finished at: 2022-4-24 1:11:52:432:914 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 1:11:52:433:445 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:12:12:432:266 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:12:12:432:661 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..2856e08d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 1:12:16:456:6 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 1:12:16:461:463 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 1:12:17:455:971 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 1:12:17:458:256 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 1:12:19:456:325 +Q5 finished at: 2022-4-24 1:12:19:457:280 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 1:12:20:456:276 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 1:12:40:456:809 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 1:12:40:457:244 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..42d5fc7b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..36f98120 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:9:32:864:927 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:9:32:865:661 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:9:33:864:942 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:9:33:866:442 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:9:33:866:996 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:9:33:867:552 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 0:9:34:865:52 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:9:34:865:426 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:9:54:865:514 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:9:54:865:904 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..8bf3295b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:9:58:890:590 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:9:58:891:234 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:9:59:890:484 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:9:59:893:563 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:9:59:894:69 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:9:59:894:614 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:10:0:890:847 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:10:0:891:445 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:10:20:891:95 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:10:20:891:496 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..2497c6b7 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:10:24:914:745 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:10:24:915:476 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:10:25:914:653 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:10:25:916:377 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:10:25:916:962 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:10:26:915:14 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:10:26:915:697 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:10:27:915:62 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:10:47:915:325 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:10:47:915:730 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..3af21b8d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:11:43:980:821 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:11:43:981:422 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:11:44:980:866 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:11:44:984:732 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:11:44:985:295 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:11:44:985:913 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:11:45:981:187 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:11:45:981:788 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:12:5:981:454 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:12:5:981:855 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..8a687096 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:10:51:927:440 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 0:10:51:928:684 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 0:10:51:929:232 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 0:10:52:927:337 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 0:10:52:929:653 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 0:10:52:930:198 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:10:52:930:850 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:10:53:927:713 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 0:11:13:928:150 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 0:11:13:929:171 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:11:13:929:581 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..b7385115 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:11:17:955:259 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 0:11:17:956:668 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:11:18:955:242 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 0:11:18:956:622 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 0:11:18:957:422 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:11:18:958:10 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 0:11:19:955:694 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:11:19:956:246 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 0:11:39:955:855 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:11:39:956:283 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..df7e1216 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:12:10:6:598 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 0:12:10:7:263 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:12:11:6:570 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:12:11:8:717 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:12:12:6:598 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:12:12:7:264 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 0:12:13:6:924 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:12:14:6:916 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 0:12:15:7:1 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:12:16:6:961 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:12:17:6:937 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:12:18:6:971 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:12:38:7:270 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:12:38:7:667 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..9c75e855 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:14:42:135:76 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:14:42:135:914 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:14:43:134:907 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:14:43:140:534 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:14:43:141:122 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:14:44:134:872 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 0:14:44:135:759 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:14:44:136:449 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:14:44:137:178 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 0:14:45:135:299 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 0:14:45:135:858 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 0:15:5:135:666 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 0:15:5:136:110 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a9f522aa --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:14:13:107:654 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:14:13:108:430 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:14:14:107:588 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:14:14:109:733 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:14:15:107:610 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 0:14:15:108:290 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:14:15:108:898 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 0:14:16:107:733 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 0:14:16:108:646 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:14:16:109:287 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 0:14:17:108:90 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:14:17:108:612 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 0:14:18:108:131 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 0:14:18:108:594 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 0:14:38:108:860 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 0:14:38:109:409 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..91d66bba --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:12:42:31:861 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 0:12:42:32:549 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:12:43:31:948 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:12:43:33:731 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:12:44:31:819 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:12:44:32:452 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 0:12:45:32:246 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:12:46:32:231 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 0:12:47:32:118 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:12:48:32:258 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:12:49:32:286 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:12:50:32:254 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 0:13:10:32:644 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:13:10:33:82 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..661a3583 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:13:14:55:961 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 0:13:14:56:852 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:13:15:55:946 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 0:13:15:57:941 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:13:16:55:995 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 0:13:16:56:662 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 0:13:17:56:226 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 0:13:18:56:286 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 0:13:19:56:343 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:13:20:56:302 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:13:21:56:446 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:13:22:56:410 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:13:42:56:774 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:13:42:57:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..e4759de8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:15:9:160:788 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 0:15:9:161:494 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 0:15:9:162:72 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 0:15:10:160:748 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 0:15:10:162:451 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 0:15:10:163:146 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:15:10:163:860 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 0:15:11:160:853 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 0:15:11:161:732 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 0:15:11:162:455 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:15:11:162:982 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 0:15:12:161:160 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 0:15:12:161:868 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 0:15:32:161:412 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 0:15:32:161:849 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..765a1cfb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:13:46:82:757 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 0:13:46:83:452 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:13:47:82:687 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 0:13:47:84:711 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:13:47:85:270 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:13:47:85:938 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 0:13:47:86:513 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:13:47:87:70 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-24 0:13:48:82:699 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 0:13:48:83:410 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 0:13:48:83:995 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 0:13:48:84:563 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 0:13:48:85:84 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:13:48:85:631 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 0:13:49:83:128 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 0:13:49:83:618 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 0:14:9:83:695 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 0:14:9:84:159 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..3c2dbd98 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:9:6:839:913 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:9:6:840:633 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:9:7:839:815 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:9:7:841:133 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:9:7:841:697 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 0:9:8:840:215 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:9:8:840:816 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:9:28:840:193 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:9:28:840:604 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..407945ca --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:8:40:815:145 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:8:40:815:638 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:8:41:815:226 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:8:41:815:944 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:8:41:816:565 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 0:8:42:815:423 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:8:42:815:817 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:9:2:815:721 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:9:2:816:92 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:9:2:816:352 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..18ad308c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:54:56:66:721 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:54:56:67:501 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:54:57:66:659 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:54:57:68:185 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:54:57:68:746 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 23:54:59:66:900 +Q6 finished at: 2022-4-23 23:54:59:67:252 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:55:0:66:917 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 23:55:20:67:224 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:55:20:67:558 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..5a70235d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:55:24:91:489 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:55:24:92:157 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:55:25:91:521 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:55:25:92:880 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:55:25:93:398 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:55:25:93:854 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-23 23:55:26:91:733 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:55:26:92:222 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-23 23:55:46:92:236 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:55:46:92:562 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..be3097c8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:55:50:115:673 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:55:50:116:299 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:55:51:115:792 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:55:51:118:121 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-23 23:55:52:116:9 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:55:52:116:602 + Q5 finished at: 2022-4-23 23:55:52:116:989 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 23:55:53:115:885 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:56:13:116:403 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:56:13:116:854 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..2431b950 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:56:17:141:969 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 23:56:17:142:587 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:56:18:140:739 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:56:18:141:479 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-23 23:56:18:142:2 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-23 23:56:19:140:996 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 23:56:20:141:8 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:56:21:140:664 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:56:41:141:403 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:56:41:141:727 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..c362711b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:57:37:214:215 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:57:37:214:886 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:57:38:214:178 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 23:57:38:215:703 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:57:38:216:144 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-23 23:57:39:214:470 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:57:39:215:2 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 23:57:40:214:207 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:58:0:214:830 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:58:0:215:153 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..841d6e9c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:58:4:239:418 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:58:4:240:125 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:58:5:239:401 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-23 23:58:5:240:706 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:58:5:241:158 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:58:5:241:459 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-23 23:58:6:239:693 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:58:6:240:209 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:58:26:240:322 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:58:26:240:810 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..2e690b30 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:56:45:166:155 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 23:56:45:167:194 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:56:46:166:85 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:56:46:167:393 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-23 23:56:46:167:824 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:56:46:168:290 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 23:56:47:166:882 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:56:47:167:203 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-23 23:57:7:166:699 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:57:7:167:142 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..e9b537d4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:57:11:189:899 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-23 23:57:11:195:211 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:57:12:189:920 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-23 23:57:12:192:243 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-23 23:57:12:192:936 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:57:12:193:580 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-23 23:57:13:190:668 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:57:13:191:68 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-23 23:57:33:190:546 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:57:33:190:881 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..d5ab6033 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:54:2:16:22 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:54:2:16:844 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:54:3:15:913 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:54:3:17:280 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:54:3:17:816 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-23 23:54:4:16:148 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 23:54:5:16:98 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:54:6:16:149 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:54:26:16:445 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:54:26:16:758 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..98ab9c6f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:54:30:41:405 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:54:30:42:54 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:54:31:41:467 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:54:31:42:732 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:54:31:43:263 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:54:31:43:734 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2022-4-23 23:54:32:41:673 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-23 23:54:32:42:259 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-23 23:54:52:42:89 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-23 23:54:52:42:383 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..1a5eec63 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:58:30:266:696 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:58:30:267:366 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:58:31:266:680 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:58:31:267:843 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-23 23:58:31:268:622 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-23 23:58:32:266:648 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-23 23:58:32:267:367 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-23 23:58:32:267:993 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-23 23:58:33:267:34 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 23:58:33:267:544 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 23:58:34:266:994 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 23:58:35:266:931 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-23 23:58:55:267:596 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 23:58:55:267:913 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..0bcf670b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-23 23:58:59:291:14 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-23 23:58:59:291:826 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-23 23:59:0:290:960 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-23 23:59:0:292:332 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-23 23:59:1:291:73 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-23 23:59:1:291:913 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 23:59:1:292:611 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-23 23:59:2:291:73 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-23 23:59:2:291:821 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-23 23:59:3:291:552 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-23 23:59:4:291:296 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 23:59:5:291:298 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-23 23:59:6:291:147 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 23:59:26:291:209 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-23 23:59:26:292:439 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-23 23:59:26:292:805 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..cff2d5bb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:59:30:316:96 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:59:30:316:700 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:59:31:316:72 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-23 23:59:31:317:870 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-23 23:59:31:318:803 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-23 23:59:32:316:126 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-23 23:59:32:316:827 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-23 23:59:32:317:707 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-23 23:59:33:316:716 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-23 23:59:33:317:260 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-23 23:59:34:316:340 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-23 23:59:35:316:358 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-23 23:59:55:316:878 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-23 23:59:55:317:203 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..0d9855a1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:59:59:340:77 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-23 23:59:59:340:941 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:0:0:340:92 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 0:0:0:341:982 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 0:0:0:343:85 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:0:1:340:69 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 0:0:1:340:711 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 0:0:1:341:809 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 0:0:2:340:863 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:0:2:341:402 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:0:3:340:553 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:0:4:340:378 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:0:24:340:951 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:0:24:341:299 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..8efeda80 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:50:53:844:917 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:50:53:845:696 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:50:54:845:12 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 23:50:54:845:670 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-23 23:50:55:844:873 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:50:56:844:865 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-23 23:51:16:846:789 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-23 23:51:16:847:76 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a9d6a4c8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:51:48:894:837 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:51:48:895:468 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:51:49:894:775 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 23:51:49:896:290 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-23 23:51:50:895:49 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:51:51:894:830 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:51:52:894:951 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 23:52:12:895:446 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:52:12:895:785 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..b0cba149 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:52:16:919:353 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:52:16:919:931 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:52:17:919:394 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-23 23:52:17:920:137 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 23:52:17:920:554 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-23 23:52:18:919:653 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:52:18:920:228 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-23 23:52:38:920:223 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:52:38:920:643 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..12827dde --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:53:34:992:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-23 23:53:34:993:402 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:53:35:992:854 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 23:53:36:993:57 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-23 23:53:36:993:570 + Q4 finished at: 2022-4-23 23:53:36:994:74 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-23 23:53:37:992:967 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 23:53:57:993:429 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:53:57:993:734 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..8951cf77 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:51:20:870:655 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-23 23:51:20:871:234 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:51:21:870:709 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-23 23:51:21:871:918 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-23 23:51:22:871:9 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-23 23:51:23:870:869 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:51:24:870:643 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-23 23:51:44:871:205 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:51:44:871:485 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..add2e3ce --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:52:42:945:101 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 23:52:42:946:242 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:52:43:945:263 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-23 23:52:43:946:875 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 23:52:43:947:323 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 23:52:44:945:850 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:52:44:946:149 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-23 23:53:4:945:518 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:53:4:945:787 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..40cce817 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-23 23:53:8:968:522 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-23 23:53:8:973:825 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-23 23:53:9:968:624 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-23 23:53:9:969:725 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-23 23:53:9:970:192 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-23 23:53:10:969:15 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-23 23:53:10:969:323 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-23 23:53:30:969:61 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-23 23:53:30:969:372 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..56cc9fdb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:3:36:539:377 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:3:36:540:22 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:3:37:539:279 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:3:37:541:10 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 0:3:38:539:554 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:3:38:540:74 + Q5 finished at: 2022-4-24 0:3:38:540:455 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:3:38:541:13 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:3:58:540:8 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:3:58:540:453 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..998f0177 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:4:2:564:772 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:4:2:565:398 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:4:3:564:805 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:4:3:566:645 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:4:4:565:869 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 0:4:5:165:760 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..0c8dea4c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:4:29:589:478 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:4:29:590:162 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:4:30:589:555 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:4:30:590:452 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:4:31:590:416 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 0:4:32:190:288 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..81a057e0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:4:57:614:102 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:4:57:614:819 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:4:58:614:98 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:4:58:614:804 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:4:59:615:143 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:4:59:615:860 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 0:5:0:314:906 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..ea6e1221 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:5:23:638:353 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:5:23:639:28 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:5:24:638:331 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:5:24:638:998 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:5:24:639:594 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:5:26:638:635 +Q6 finished at: 2022-4-24 0:5:26:638:995 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:5:26:639:629 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:5:46:638:972 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:5:46:639:341 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..94b095e8 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:5:50:665:569 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:5:50:666:289 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:5:51:665:569 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:5:51:666:217 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:5:51:666:743 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:5:53:665:901 +Q6 finished at: 2022-4-24 0:5:53:666:237 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:5:54:665:862 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:6:14:666:223 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:6:14:666:752 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..bd7a5d34 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:6:18:691:173 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:6:18:691:880 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:6:19:691:347 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:6:19:692:6 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:6:20:691:484 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:6:20:692:60 + Q5 finished at: 2022-4-24 0:6:20:692:358 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:6:21:691:399 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:6:41:691:790 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:6:41:692:249 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..d1b412f9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:6:45:715:987 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:6:45:716:709 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:6:46:715:995 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:6:46:717:436 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:6:47:716:246 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:6:49:716:292 + Q5 finished at: 2022-4-24 0:6:49:716:786 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:6:49:717:273 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:7:9:716:688 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:7:9:717:45 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..9d7686ba --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:7:13:741:759 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:7:13:742:440 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:7:14:741:717 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:7:14:743:165 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:7:15:742:20 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:7:15:742:582 + Q5 finished at: 2022-4-24 0:7:15:742:862 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:7:15:743:287 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:7:35:742:362 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:7:35:742:747 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..00c24630 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:7:39:767:645 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:7:39:768:287 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:7:40:767:685 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:7:40:768:968 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:7:41:767:835 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 0:7:41:768:554 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-24 0:7:42:768:588 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 0:7:43:668:524 + Q8 finished at: 2022-4-24 0:7:43:669:779 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..b7b3abaf --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:8:8:792:786 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:8:8:793:425 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:8:9:792:809 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:8:9:793:475 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:8:10:792:777 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 0:8:12:793:228 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-24 0:8:13:793:843 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 0:8:14:693:681 + Q8 finished at: 2022-4-24 0:8:14:793:366 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..01950b11 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:0:28:365:229 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:0:28:366:24 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:0:29:365:242 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 0:0:30:365:319 + Q4 finished at: 2022-4-24 0:0:30:365:732 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:0:31:365:474 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 0:0:51:365:863 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 0:0:51:381:165 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:0:51:381:633 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..2f307746 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:0:55:391:591 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:0:55:392:245 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:0:56:391:570 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 0:0:57:391:843 + Q4 finished at: 2022-4-24 0:0:57:392:220 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:0:58:391:822 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 0:1:18:392:161 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 0:1:18:406:818 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:1:18:407:298 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..c95371fd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:1:22:416:68 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:1:22:416:857 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:1:23:416:7 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 0:1:24:416:231 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 0:1:24:416:799 + Q4 finished at: 2022-4-24 0:1:24:417:163 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:1:25:416:247 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 0:1:45:416:599 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:1:45:416:997 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..5fb41b93 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:1:49:440:600 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:1:49:441:357 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:1:50:440:541 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 0:1:51:440:829 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:1:51:441:529 + Q4 finished at: 2022-4-24 0:1:51:441:889 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:1:51:442:300 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 0:2:11:441:59 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:2:11:441:422 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..472aeb31 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:3:10:514:55 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:3:10:514:901 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:3:11:514:76 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 0:3:12:514:246 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:3:12:514:813 + Q4 finished at: 2022-4-24 0:3:12:515:166 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:3:12:515:582 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:3:32:514:584 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:3:32:514:944 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..c068425b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:2:15:465:236 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:2:15:465:844 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:2:16:465:213 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:2:16:467:309 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:2:18:465:581 +Q5 finished at: 2022-4-24 0:2:18:465:916 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 0:2:18:466:353 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:2:38:465:820 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:2:38:466:189 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..455e0db0 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:2:42:490:352 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:2:42:490:965 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:2:43:490:264 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:2:43:491:693 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:2:45:490:487 +Q5 finished at: 2022-4-24 0:2:45:491:13 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:2:46:490:570 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:3:6:490:899 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:3:6:491:491 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..2297092c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:37:9:716:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:37:9:716:685 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:37:10:716:166 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:37:10:717:914 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:37:10:718:379 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:37:10:718:939 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 0:37:11:716:349 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:37:11:716:796 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:37:31:716:714 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:37:31:717:107 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..c1c1a5da --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:37:35:741:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:37:35:742:212 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:37:36:741:658 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:37:36:743:7 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:37:36:743:505 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:37:36:744:175 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:37:37:742:11 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:37:37:742:590 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:37:57:742:194 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:37:57:742:585 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..a9312b07 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:38:1:767:385 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:38:1:767:989 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:38:2:767:417 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:38:2:769:152 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:38:2:769:846 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:38:3:767:710 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:38:3:768:294 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:38:4:767:743 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:38:24:768:78 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:38:24:768:496 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..14967613 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:39:20:848:393 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:39:20:849:28 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:39:21:848:409 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:39:21:849:830 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:39:21:850:413 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:39:21:850:996 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:39:22:848:619 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:39:22:849:211 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:39:42:849:56 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:39:42:849:464 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..5194a01f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL PRIMARY KEY);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:38:28:794:46 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2022-4-24 0:38:28:795:259 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2022-4-24 0:38:28:795:813 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 0:38:29:794:59 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2022-4-24 0:38:29:796:73 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2022-4-24 0:38:29:796:645 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:38:29:797:214 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:38:30:794:417 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2022-4-24 0:38:50:794:932 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2022-4-24 0:38:50:795:776 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:38:50:796:186 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..692aeb2b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type));' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:38:54:822:67 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2022-4-24 0:38:54:823:693 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:38:55:822:13 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (saving,500,) (checking,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + (2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2022-4-24 0:38:55:823:699 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2022-4-24 0:38:55:824:560 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:38:55:825:196 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2022-4-24 0:38:56:822:577 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:38:56:823:229 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,saving,1400) (kevin,checking,1400) + (1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + (2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2022-4-24 0:39:16:823:180 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:39:16:823:624 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..f4281754 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:39:46:874:938 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 0:39:46:875:490 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:39:47:875:243 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:39:47:876:871 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:39:48:875:2 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:39:48:875:636 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2022-4-24 0:39:49:875:214 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:39:50:875:384 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2022-4-24 0:39:51:875:378 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:39:52:875:271 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:39:53:875:360 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:39:54:875:355 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:40:14:875:899 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:40:14:876:272 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..68074e5b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:42:19:3:893 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:42:19:4:569 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:42:20:3:829 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:42:20:4:448 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:42:20:5:80 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:42:21:3:951 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 0:42:21:4:647 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:42:21:5:241 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:42:21:5:842 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2022-4-24 0:42:22:4:905 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 0:42:22:5:350 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2022-4-24 0:42:42:4:787 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 0:42:42:5:272 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..52d9e5b4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:41:49:978:101 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:41:49:978:865 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:41:50:978:62 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:41:50:979:949 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:41:51:978:111 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2022-4-24 0:41:51:978:824 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:41:51:979:421 + Q8-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 0:41:52:978:47 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 0:41:52:978:787 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:41:52:979:376 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2022-4-24 0:41:53:978:576 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:41:53:979:54 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2022-4-24 0:41:54:978:618 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2022-4-24 0:41:54:979:58 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 0:42:14:979:97 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 0:42:14:979:524 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..bd71390b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:40:18:901:332 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2022-4-24 0:40:18:901:998 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:40:19:901:152 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:40:19:901:826 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:40:20:901:296 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:40:20:902:55 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2022-4-24 0:40:21:901:489 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2022-4-24 0:40:22:901:390 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2022-4-24 0:40:23:901:482 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:40:24:901:566 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:40:25:901:467 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:40:26:901:538 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 0:40:46:901:793 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:40:46:902:313 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..4a88443f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:40:50:925:672 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2022-4-24 0:40:50:926:374 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:40:51:925:770 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2022-4-24 0:40:51:927:187 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:40:52:925:630 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2022-4-24 0:40:52:926:282 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2022-4-24 0:40:53:926:105 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2022-4-24 0:40:54:926:7 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2022-4-24 0:40:55:925:999 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:40:56:926:74 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:40:57:926:89 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:40:58:926:46 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:41:18:926:575 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:41:18:927:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..55e2ad2c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:42:46:29:918 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 0:42:46:30:578 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2022-4-24 0:42:46:31:109 + Q4-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q4 finished at: 2022-4-24 0:42:47:29:902 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2022-4-24 0:42:47:31:289 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2022-4-24 0:42:47:31:825 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:42:47:32:413 + Q8-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 0:42:48:29:908 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2022-4-24 0:42:48:30:600 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 0:42:48:31:147 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:42:48:31:581 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2022-4-24 0:42:49:30:185 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2022-4-24 0:42:49:30:792 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2022-4-24 0:43:9:30:660 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2022-4-24 0:43:9:31:176 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..e5604551 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: tidb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:41:22:952:430 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2022-4-24 0:41:22:953:122 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:41:23:952:392 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2022-4-24 0:41:23:953:994 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:41:23:954:588 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2022-4-24 0:41:23:955:145 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2022-4-24 0:41:23:955:632 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:41:23:956:270 + Q9-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q9 finished at: 2022-4-24 0:41:24:952:446 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2022-4-24 0:41:24:953:226 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2022-4-24 0:41:24:953:877 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2022-4-24 0:41:24:954:505 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2022-4-24 0:41:24:955:105 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:41:24:955:704 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2022-4-24 0:41:25:952:709 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2022-4-24 0:41:25:953:160 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2022-4-24 0:41:45:953:189 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2022-4-24 0:41:45:953:606 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..f58b141f --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:36:43:692:56 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:36:43:692:748 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:36:44:691:810 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:36:44:692:495 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:36:44:693:48 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2022-4-24 0:36:45:692:257 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:36:45:692:892 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:37:5:692:356 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:37:5:692:775 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..125ed853 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,62 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:36:17:666:583 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:36:17:667:148 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:36:18:666:614 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:36:18:667:315 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:36:18:668:6 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 0:36:19:666:866 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:36:19:667:276 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:36:39:667:185 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:36:39:667:563 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:36:39:667:819 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..ff2af13d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:22:32:915:650 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:22:32:916:430 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:22:33:915:591 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:22:33:916:938 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:22:33:917:476 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:22:35:915:774 +Q6 finished at: 2022-4-24 0:22:35:916:141 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:22:36:915:786 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 0:22:56:916:186 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:22:56:916:579 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..b159be92 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:23:0:940:851 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:23:0:941:543 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:23:1:940:866 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:23:1:942:38 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:23:1:942:571 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:23:1:943:31 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2022-4-24 0:23:2:941:257 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:23:2:941:782 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2022-4-24 0:23:22:941:516 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:23:22:941:836 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9bca5b98 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:23:26:965:755 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:23:26:966:440 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:23:27:965:742 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:23:27:967:100 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 0:23:28:965:908 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:23:28:966:438 + Q5 finished at: 2022-4-24 0:23:28:966:807 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:23:29:965:923 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:23:49:966:345 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:23:49:966:684 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..0d7ca664 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:23:53:991:54 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:23:53:991:796 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:23:54:990:992 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:23:54:992:539 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:23:54:993:7 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 0:23:55:991:149 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:23:56:991:236 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:23:57:991:7 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:24:17:991:745 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:24:17:992:68 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..bf3aab6e --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:25:14:65:197 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:25:14:65:823 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:25:15:65:238 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:25:15:66:753 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:25:15:67:175 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:25:16:65:760 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:25:16:66:327 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:25:17:65:449 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:25:37:65:903 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:25:37:66:216 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..cda7d95d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:25:41:90:479 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:25:41:91:81 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:25:42:90:508 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:25:42:91:682 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:25:42:92:119 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:25:42:92:415 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:25:43:90:790 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:25:43:91:290 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:26:3:91:171 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:26:3:91:497 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..6e74af17 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:24:22:15:47 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 0:24:22:16:50 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:24:23:14:950 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:24:23:16:89 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:24:23:16:600 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:24:23:17:53 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 0:24:24:15:696 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:24:24:16:13 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2022-4-24 0:24:44:15:723 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:24:44:16:150 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..92c802cf --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:24:48:39:935 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2022-4-24 0:24:48:45:197 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:24:49:39:973 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2022-4-24 0:24:49:41:296 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2022-4-24 0:24:49:41:784 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:24:49:42:279 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2022-4-24 0:24:50:40:417 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:24:50:40:764 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2022-4-24 0:25:10:40:586 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:25:10:40:897 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..26d8a1cd --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:21:38:867:392 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:21:38:868:34 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:21:39:867:439 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:21:39:869:367 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:21:39:869:973 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2022-4-24 0:21:40:867:515 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:21:41:867:585 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:21:42:867:618 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:22:2:868:80 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:22:2:868:396 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c3e5b7c3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: tidb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:22:6:892:657 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:22:6:893:460 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:22:7:892:373 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:22:7:893:728 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:22:7:894:253 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:22:7:894:693 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 0:22:8:892:785 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:22:8:893:357 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:22:28:892:846 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:22:28:893:128 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..79de48f1 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:26:7:114:858 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:26:7:115:640 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:26:8:114:804 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:26:8:116:264 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2022-4-24 0:26:8:116:839 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:26:9:114:869 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2022-4-24 0:26:9:115:638 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2022-4-24 0:26:9:116:218 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2022-4-24 0:26:10:115:197 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:26:10:115:739 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:26:11:115:92 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:26:12:115:76 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:26:32:115:766 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:26:32:116:80 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..34a1b6af --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute sql: 'BEGIN PESSIMISTIC;' + Q1 finished at: 2022-4-24 0:26:36:140:637 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2022-4-24 0:26:36:141:431 +Q3-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q3 finished at: 2022-4-24 0:26:37:140:676 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2022-4-24 0:26:37:142:13 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:26:38:140:690 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2022-4-24 0:26:38:141:489 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 0:26:38:142:126 + Q8-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q8 finished at: 2022-4-24 0:26:39:140:681 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2022-4-24 0:26:39:141:397 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2022-4-24 0:26:40:141:226 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2022-4-24 0:26:41:140:920 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:26:42:141:9 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2022-4-24 0:26:43:140:862 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:27:3:140:853 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2022-4-24 0:27:3:142:45 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2022-4-24 0:27:3:142:350 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..4af161a3 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:27:7:167:109 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:27:7:167:721 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:27:8:167:54 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:27:8:168:432 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 0:27:8:169:322 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:27:9:167:81 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2022-4-24 0:27:9:167:782 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2022-4-24 0:27:9:168:691 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2022-4-24 0:27:10:167:865 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:27:10:168:376 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:27:11:167:277 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:27:12:167:393 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2022-4-24 0:27:32:167:449 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:27:32:167:813 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..53025a25 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: tidb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:27:36:193:173 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2022-4-24 0:27:36:193:860 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:27:37:190:805 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2022-4-24 0:27:37:193:475 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2022-4-24 0:27:37:194:374 + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:27:38:190:772 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2022-4-24 0:27:38:191:411 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2022-4-24 0:27:38:192:396 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2022-4-24 0:27:39:191:497 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2022-4-24 0:27:39:192:66 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2022-4-24 0:27:40:191:95 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2022-4-24 0:27:41:191:49 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2022-4-24 0:28:1:191:613 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2022-4-24 0:28:1:191:955 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..6ee856ee --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:18:30:698:47 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:18:30:698:705 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:18:31:698:160 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:18:31:698:805 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 0:18:32:698:38 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:18:33:698:147 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2022-4-24 0:18:53:698:683 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:18:53:699:32 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a97467d9 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:19:25:746:38 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:19:25:746:817 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:19:26:746:51 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:19:26:747:308 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2022-4-24 0:19:27:746:251 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:19:28:745:972 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:19:29:746:188 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 0:19:49:746:623 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:19:49:746:958 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..1bc4f4c4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:19:53:770:524 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:19:53:771:169 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:19:54:770:565 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2022-4-24 0:19:54:771:834 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:19:54:772:104 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2022-4-24 0:19:55:770:758 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:19:55:771:269 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2022-4-24 0:20:15:771:173 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:20:15:771:492 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..9329e729 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:21:11:842:876 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:21:11:843:500 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:21:12:842:879 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 0:21:13:842:986 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 0:21:13:843:529 + Q4 finished at: 2022-4-24 0:21:13:843:955 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:21:14:843:58 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:21:34:843:181 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:21:34:843:546 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..ff96f7f2 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:18:57:721:530 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:18:57:722:151 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:18:58:721:571 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:18:58:723:527 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2022-4-24 0:18:59:721:766 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:19:0:721:711 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:19:1:721:525 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:19:21:722:104 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:19:21:722:408 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..c3ad8610 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:20:19:795:25 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 0:20:19:796:1 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:20:20:795:49 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2022-4-24 0:20:20:795:687 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:20:20:796:137 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 0:20:21:795:660 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:20:21:795:980 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2022-4-24 0:20:41:795:555 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:20:41:795:827 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..43790c11 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: tidb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:20:45:818:878 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2022-4-24 0:20:45:824:55 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:20:46:818:927 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2022-4-24 0:20:46:821:87 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:20:46:821:596 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2022-4-24 0:20:47:819:529 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:20:47:819:843 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2022-4-24 0:21:7:819:293 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:21:7:819:589 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..f537723b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: tidb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:31:13:389:109 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:31:13:389:803 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:31:14:389:201 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2022-4-24 0:31:14:391:574 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2022-4-24 0:31:15:389:271 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:31:15:389:852 + Q5 finished at: 2022-4-24 0:31:15:390:170 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:31:15:390:642 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:31:35:389:593 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:31:35:389:948 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..6ae0ba40 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:31:39:414:439 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:31:39:415:108 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:31:40:414:442 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:31:40:423:128 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:31:41:415:404 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 0:31:42:15:356 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..e5151761 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,33 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:32:6:439:668 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:32:6:440:407 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:32:7:439:598 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:32:7:440:264 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:32:8:440:418 +Q6 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q6 failed at: 2022-4-24 0:32:9:40:355 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..16678aff --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: tidb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:32:34:464:560 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:32:34:465:227 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:32:35:464:577 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:32:35:465:226 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2022-4-24 0:32:36:465:395 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:32:36:466:62 +Q7 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q7 failed at: 2022-4-24 0:32:37:165:307 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..944d3891 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:33:0:489:788 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:33:0:490:347 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:33:1:489:782 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:33:1:490:476 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:33:1:490:946 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:33:3:490:44 +Q6 finished at: 2022-4-24 0:33:3:490:339 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:33:3:493:269 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:33:23:490:469 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:33:23:490:893 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..32294353 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:33:27:514:396 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2022-4-24 0:33:27:514:961 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:33:28:514:379 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:33:28:515:988 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2022-4-24 0:33:28:516:446 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:33:30:514:701 +Q6 finished at: 2022-4-24 0:33:30:515:30 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:33:31:514:662 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:33:51:515:38 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:33:51:515:421 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d0a99545 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:33:55:539:980 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:33:55:540:730 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:33:56:540:17 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:33:56:541:460 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:33:57:540:234 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:33:57:540:867 + Q5 finished at: 2022-4-24 0:33:57:541:222 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2022-4-24 0:33:58:540:269 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:34:18:540:673 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:34:18:541:38 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..707eaca4 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:34:22:565:625 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:34:22:566:271 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:34:23:565:569 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:34:23:567:681 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2022-4-24 0:34:24:565:848 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:34:26:565:856 + Q5 finished at: 2022-4-24 0:34:26:566:215 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:34:26:566:733 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:34:46:566:259 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:34:46:566:748 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..863b88ff --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: tidb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:34:50:591:434 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:34:50:592:203 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:34:51:591:339 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2022-4-24 0:34:51:592:829 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2022-4-24 0:34:52:591:663 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2022-4-24 0:34:52:592:349 + Q5 finished at: 2022-4-24 0:34:52:592:709 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:34:52:593:216 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2022-4-24 0:35:12:592:94 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2022-4-24 0:35:12:592:581 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1ea9ca05 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:35:16:616:269 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:35:16:616:928 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:35:17:616:292 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:35:17:618:88 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q6 finished at: 2022-4-24 0:35:18:616:246 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 0:35:18:617:13 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2022-4-24 0:35:19:617:144 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 0:35:20:517:114 + Q8 finished at: 2022-4-24 0:35:20:518:295 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..29f4773c --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,40 @@ +#### db_type: tidb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:35:45:642:400 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:35:45:643:179 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:35:46:642:365 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2022-4-24 0:35:46:643:34 + Q5-T3 execute sql: 'BEGIN PESSIMISTIC;' + Q5 finished at: 2022-4-24 0:35:47:642:328 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2022-4-24 0:35:49:642:762 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2022-4-24 0:35:50:643:381 +Q9 failed reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction errcode: HY000 +Q9 failed at: 2022-4-24 0:35:51:543:286 + Q8 finished at: 2022-4-24 0:35:51:642:921 + +Test Result: Rollback +Reason: [MySQL][ODBC 5.2(w) Driver][mysqld-5.7.25-TiDB-v5.4.0]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..06831831 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:28:5:214:848 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:28:5:215:496 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:28:6:214:831 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2022-4-24 0:28:7:214:958 + Q4 finished at: 2022-4-24 0:28:7:215:356 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:28:8:215:66 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 0:28:28:215:503 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 0:28:28:230:190 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:28:28:230:703 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..73be7150 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:28:32:240:359 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:28:32:241:120 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:28:33:240:368 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2022-4-24 0:28:34:240:592 + Q4 finished at: 2022-4-24 0:28:34:240:937 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:28:35:240:544 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2022-4-24 0:28:55:240:874 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2022-4-24 0:28:55:255:637 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:28:55:256:192 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..217fd621 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:28:59:267:499 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:28:59:268:147 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:29:0:267:491 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2022-4-24 0:29:1:267:729 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 0:29:1:268:300 + Q4 finished at: 2022-4-24 0:29:1:268:697 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:29:2:267:723 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 0:29:22:268:106 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:29:22:268:466 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..69b84722 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: tidb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:29:26:291:95 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:29:26:291:756 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:29:27:291:122 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2022-4-24 0:29:28:291:345 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:29:28:292:25 + Q4 finished at: 2022-4-24 0:29:28:292:335 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:29:28:292:858 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2022-4-24 0:29:48:291:810 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:29:48:292:161 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..a0919606 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: tidb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:30:47:363:713 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2022-4-24 0:30:47:364:368 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:30:48:363:755 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2022-4-24 0:30:49:363:937 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:30:49:364:553 + Q4 finished at: 2022-4-24 0:30:49:364:922 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2022-4-24 0:30:49:365:382 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:31:9:364:252 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:31:9:364:644 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..c0750b4d --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:29:52:313:886 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:29:52:314:613 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:29:53:313:870 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:29:53:320:739 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2022-4-24 0:29:55:314:131 +Q5 finished at: 2022-4-24 0:29:55:314:471 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2022-4-24 0:29:55:314:927 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:30:15:314:452 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:30:15:314:819 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..160a3beb --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: tidb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute sql: 'BEGIN PESSIMISTIC;' +Q1 finished at: 2022-4-24 0:30:19:338:642 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2022-4-24 0:30:19:339:263 + Q3-T2 execute sql: 'BEGIN PESSIMISTIC;' + Q3 finished at: 2022-4-24 0:30:20:338:594 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2022-4-24 0:30:20:339:287 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2022-4-24 0:30:22:338:883 +Q5 finished at: 2022-4-24 0:30:22:339:190 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2022-4-24 0:30:23:338:892 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2022-4-24 0:30:43:339:299 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2022-4-24 0:30:43:339:701 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..42d5fc7b --- /dev/null +++ b/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/readme.txt b/test_result/readme.txt new file mode 100644 index 00000000..5b1cdbcb --- /dev/null +++ b/test_result/readme.txt @@ -0,0 +1,7 @@ +test_cases: it inclucdes 33 test cases that show in the paper, and some other cases from known anomalies, and predicate anomalies. +centrailized_result: the result are from single machine node +distributed_result: the result are from the distributed environment + +Each database result includes +(1) a summary for all tested result in folder +(2) test results at different isolation levels \ No newline at end of file diff --git a/test_result/test_cases/iat_dda_read_skew_committed.txt b/test_result/test_cases/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..6dc7af49 --- /dev/null +++ b/test_result/test_cases/iat_dda_read_skew_committed.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/test_result/test_cases/iat_dda_read_write_skew1_committed.txt b/test_result/test_cases/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..794a5a36 --- /dev/null +++ b/test_result/test_cases/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/test_result/test_cases/iat_dda_write_skew.txt b/test_result/test_cases/iat_dda_write_skew.txt new file mode 100644 index 00000000..744cb016 --- /dev/null +++ b/test_result/test_cases/iat_dda_write_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-2-update t1 set v=1 where k=0; +6-1-update t1 set v=1 where k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-select * from t1 ORDER BY k; +8-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/iat_dda_write_skew_committed.txt b/test_result/test_cases/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..d897428d --- /dev/null +++ b/test_result/test_cases/iat_dda_write_skew_committed.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-2-update t1 set v=1 where k=0; +6-2-COMMIT; +7-1-update t1 set v=1 where k=1; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/test_cases/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..e286f7b1 --- /dev/null +++ b/test_result/test_cases/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES (1, 10); +0-1-INSERT INTO mytab VALUES (1, 20); +0-1-INSERT INTO mytab VALUES (2, 100); +0-1-INSERT INTO mytab VALUES (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +12-3-COMMIT; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/test_result/test_cases/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/test_cases/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..fe3720d6 --- /dev/null +++ b/test_result/test_cases/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,26 @@ +ParamNum:3 +0-1-DROP TABLE IF EXISTS account; +0-1-create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type)) +0-1-insert into account values ('kevin','saving', 500); +0-1-insert into account values ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +9-3-select * from account; +10-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +9-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +9-kevin,checking,1400 kevin,saving,1400 +} diff --git a/test_result/test_cases/iat_mda_step_iat.txt b/test_result/test_cases/iat_mda_step_iat.txt new file mode 100644 index 00000000..9f1a518a --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-1-update t1 set v=1 where k=0; +8-2-update t1 set v=1 where k=1; +9-3-update t1 set v=1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +2-2,0 +4-0,1 +6-1,1 +13-0,1 1,1 2,1 + +2-2,0 +4-0,1 +6-1,0 +13-0,1 1,1 2,1 + +2-2,0 +4-0,0 +6-1,1 +13-0,1 1,1 2,1 + +2-2,1 +4-0,0 +6-1,1 +13-0,1 1,1 2,1 + +2-2,1 +4-0,1 +6-1,0 +13-0,1 1,1 2,1 + +2-2,1 +4-0,0 +6-1,0 +13-0,1 1,1 2,1 +} diff --git a/test_result/test_cases/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/test_cases/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..74f59396 --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1 ORDER BY k; +13-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/test_result/test_cases/iat_mda_step_iat_cross_phenomenon.txt b/test_result/test_cases/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..de6d8b92 --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-5-select * from t1 ORDER BY k; +16-5-COMMIT; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/test_result/test_cases/iat_mda_step_iat_predicate_based_delete.txt b/test_result/test_cases/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b9a1ea80 --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-1-DELETE FROM t1 WHERE k=0; +8-2-DELETE FROM t1 WHERE k=1; +9-3-DELETE FROM t1 WHERE k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-2,0 +4-null +6-null +13-null + +2-2,0 +4-null +6-1,0 +13-null + +2-2,0 +4-0,0 +6-null +13-null + +2-null +4-0,0 +6-1,1 +13-null + +2-null +4-null +6-1,0 +13-null + +2-null +4-0,0 +6-1,0 +13-null +} \ No newline at end of file diff --git a/test_result/test_cases/iat_mda_step_iat_predicate_based_insert.txt b/test_result/test_cases/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..3f683ea3 --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-1-INSERT INTO t1 VALUES (0, 0); +8-2-INSERT INTO t1 VALUES (1, 0); +9-3-INSERT INTO t1 VALUES (2, 0); +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +2-null +4-0,1 +6-1,1 +13-0,1 1,1 2,1 + +2-null +4-0,1 +6-null +13-0,1 1,1 2,1 + +2-null +4-null +6-1,1 +13-0,1 1,1 2,1 + +2-2,1 +4-null +6-1,1 +13-0,1 1,1 2,1 + +2-2,1 +4-0,1 +6-null +13-0,1 1,1 2,1 + +2-2,1 +4-null +6-null +13-0,1 1,1 2,1 +} diff --git a/test_result/test_cases/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/test_cases/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..05df640e --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1 ORDER BY k; +15-3-COMMIT; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/test_result/test_cases/iat_mda_step_iat_uname_anomaly.txt b/test_result/test_cases/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..be4deaad --- /dev/null +++ b/test_result/test_cases/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,75 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-select * from t1 where k=2; +11-3-update t1 set v=1 where k=2; +12-3-select * from t1 where k=0; +13-3-update t1 set v=2 where k=0; +14-3-commit; +15-1-select * from t1 where k=2; +16-1-commit; +17-4-select * from t1 ORDER BY k; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +10-2,0 +12-0,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +10-2,0 +12-0,0 +15-2,0 +17-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +10-2,0 +12-0,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,2 +4-0,0 +6-1,0 +10-2,0 +12-0,1 +15-2,2 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +10-2,0 +12-0,0 +15-2,1 +17-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +10-2,0 +12-0,0 +15-2,1 +17-0,2 1,1 2,1 +} \ No newline at end of file diff --git a/test_result/test_cases/iat_sda_lost_update_committed.txt b/test_result/test_cases/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/test_result/test_cases/iat_sda_lost_update_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/test_result/test_cases/iat_sda_non_repeatable_read_committed.txt b/test_result/test_cases/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..ab3a4efa --- /dev/null +++ b/test_result/test_cases/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/test_result/test_cases/rat_dda_double_write_skew1.txt b/test_result/test_cases/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..83deae26 --- /dev/null +++ b/test_result/test_cases/rat_dda_double_write_skew1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} \ No newline at end of file diff --git a/test_result/test_cases/rat_dda_double_write_skew1_committed.txt b/test_result/test_cases/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..bbe68e15 --- /dev/null +++ b/test_result/test_cases/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/test_result/test_cases/rat_dda_double_write_skew2.txt b/test_result/test_cases/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..9e81e864 --- /dev/null +++ b/test_result/test_cases/rat_dda_double_write_skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-update t1 set v=2 where k=0; +6-1-select * from t1 where k=1; +7-1-commit; +8-2-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/test_result/test_cases/rat_dda_read_skew.txt b/test_result/test_cases/rat_dda_read_skew.txt new file mode 100644 index 00000000..648f49b3 --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/test_result/test_cases/rat_dda_read_skew2.txt b/test_result/test_cases/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a3a4691d --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=1; +5-2-SELECT * from t1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +5-0,1 +9-0,1 1,1 + +4-1,0 +5-0,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/rat_dda_read_skew2_committed.txt b/test_result/test_cases/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..4a43fdbc --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew2_committed.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=1; +5-2-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +5-0,1 +9-0,1 1,1 + +4-1,0 +5-0,0 +9-0,1 1,1 +} \ No newline at end of file diff --git a/test_result/test_cases/rat_dda_read_skew_predicate_based_delete.txt b/test_result/test_cases/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..efbe28e5 --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=1; +5-2-DELETE FROM t1 WHERE k=0; +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +7-null +9-null + + +2-0,0 1,0 +7-0,0 1,0 +9-null +} diff --git a/test_result/test_cases/rat_dda_read_skew_predicate_based_insert.txt b/test_result/test_cases/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..78b6e71a --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,0); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/test_result/test_cases/rat_dda_read_skew_predicate_based_insert_test.txt b/test_result/test_cases/rat_dda_read_skew_predicate_based_insert_test.txt new file mode 100644 index 00000000..a46aadab --- /dev/null +++ b/test_result/test_cases/rat_dda_read_skew_predicate_based_insert_test.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(v) FROM t1 WHERE k >= 1 ; +3-2-BEGIN; +4-2-insert into t1 values(0,1); +5-2-insert into t1 values(1,2); +6-2-COMMIT; +7-1-SELECT SUM(v) FROM t1 WHERE k <= 0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + + +serializable { +2-, +7-, +9-0,1 1,2 + + +2-1 +7-2 +9-0,1 1,2 +} diff --git a/test_result/test_cases/rat_dda_write_read_skew.txt b/test_result/test_cases/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..90b9ada2 --- /dev/null +++ b/test_result/test_cases/rat_dda_write_read_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +6-1,0 +9-0,1 1,1 + +5-0,0 +6-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/test_result/test_cases/rat_dda_write_read_skew_committed.txt b/test_result/test_cases/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..764cb1a2 --- /dev/null +++ b/test_result/test_cases/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +7-1,0 +9-0,1 1,1 + +5-0,0 +7-1,1 +9-0,1 1,1 +} + + + diff --git a/test_result/test_cases/rat_mda_step_rat.txt b/test_result/test_cases/rat_mda_step_rat.txt new file mode 100644 index 00000000..6a3e0eb3 --- /dev/null +++ b/test_result/test_cases/rat_mda_step_rat.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-3-BEGIN; +7-3-update t1 set v=1 where k=2; +8-3-select * from t1 where k=1; +9-1-select * from t1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +5-0,1 +8-1,1 +9-2,0 +13-0,1 1,1 2,1 + +5-0,1 +8-1,0 +9-2,0 +13-0,1 1,1 2,1 + +5-0,0 +8-1,1 +9-2,0 +13-0,1 1,1 2,1 + +5-0,0 +8-1,1 +9-2,1 +13-0,1 1,1 2,1 + +5-0,1 +8-1,0 +9-2,1 +13-0,1 1,1 2,1 + +5-0,0 +8-1,0 +9-2,1 +13-0,1 1,1 2,1 +} diff --git a/test_result/test_cases/rat_mda_step_rat_long_fork.txt b/test_result/test_cases/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..9f0b1baa --- /dev/null +++ b/test_result/test_cases/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-commit; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1 ORDER BY k; +16-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/test_result/test_cases/rat_mda_step_rat_predicate_based_delete.txt b/test_result/test_cases/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..877ed9de --- /dev/null +++ b/test_result/test_cases/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 1); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-INSERT INTO t1 VALUES (2, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=0; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=1; +5-2-SELECT SUM(v) FROM t1 WHERE k = 0; +6-3-BEGIN; +7-3-DELETE FROM t1 WHERE k=2; +8-3-SELECT SUM(v) FROM t1 WHERE k = 1; +9-1-SELECT SUM(v) FROM t1 WHERE k = 2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +5-, +8-, +9-1, +13-null + +5-, +8-1, +9-1, +13-null + +5-1, +8-, +9-1, +13-null + +5-1, +8-1, +9-, +13-null + +5-, +8-1, +9-, +13-null + +5-1, +8-1, +9-, +13-null +} diff --git a/test_result/test_cases/rat_mda_step_rat_predicate_based_insert.txt b/test_result/test_cases/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..06f68f2d --- /dev/null +++ b/test_result/test_cases/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 1); +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (1, 1); +5-2-SELECT SUM(v) FROM t1 WHERE k = 0; +6-3-BEGIN; +7-3-INSERT INTO t1 VALUES (2, 1); +8-3-SELECT SUM(v) FROM t1 WHERE k = 1; +9-1-SELECT SUM(v) FROM t1 WHERE k = 2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +5-, +8-1, +9-1, +13-0,1 1,1 2,1 + +5-, +8-1, +9-, +13-0,1 1,1 2,1 + +5-, +8-, +9-1, +13-0,1 1,1 2,1 + +5-1, +8-, +9-1, +13-0,1 1,1 2,1 + +5-1, +8-1, +9-, +13-0,1 1,1 2,1 + +5-1, +8-, +9-, +13-0,1 1,1 2,1 +} diff --git a/test_result/test_cases/rat_sda_dirty_read.txt b/test_result/test_cases/rat_sda_dirty_read.txt new file mode 100644 index 00000000..51a54867 --- /dev/null +++ b/test_result/test_cases/rat_sda_dirty_read.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +4-0,0 +7-0,0 +} diff --git a/test_result/test_cases/rat_sda_intermediate_read.txt b/test_result/test_cases/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..7054534f --- /dev/null +++ b/test_result/test_cases/rat_sda_intermediate_read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-1-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/test_result/test_cases/rat_sda_intermediate_read_committed.txt b/test_result/test_cases/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..cd9132fe --- /dev/null +++ b/test_result/test_cases/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/test_result/test_cases/rat_sda_lost_self_update.txt b/test_result/test_cases/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..31745804 --- /dev/null +++ b/test_result/test_cases/rat_sda_lost_self_update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/test_result/test_cases/rat_sda_non_repeatable_read.txt b/test_result/test_cases/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..18d8be0b --- /dev/null +++ b/test_result/test_cases/rat_sda_non_repeatable_read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} \ No newline at end of file diff --git a/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..0ae57913 --- /dev/null +++ b/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-null +} diff --git a/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/test_result/test_cases/wat_dda_double_write_skew2_committed.txt b/test_result/test_cases/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..c925c802 --- /dev/null +++ b/test_result/test_cases/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-update t1 set v=2 where k=0; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/test_result/test_cases/wat_dda_full_write_skew_c1.txt b/test_result/test_cases/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..2ad62d13 --- /dev/null +++ b/test_result/test_cases/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,1 1,1 + +9-0,2 1,2 +} diff --git a/test_result/test_cases/wat_dda_full_write_skew_c2.txt b/test_result/test_cases/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..e047cc73 --- /dev/null +++ b/test_result/test_cases/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,1 1,1 + +9-0,2 1,2 +} diff --git a/test_result/test_cases/wat_dda_full_write_skew_committed.txt b/test_result/test_cases/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..de5b71d0 --- /dev/null +++ b/test_result/test_cases/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,1 1,1 + +9-0,2 1,2 +} diff --git a/test_result/test_cases/wat_dda_read_write_skew1_c1.txt b/test_result/test_cases/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..e129c548 --- /dev/null +++ b/test_result/test_cases/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/test_result/test_cases/wat_dda_read_write_skew1_c2.txt b/test_result/test_cases/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ad1a73ee --- /dev/null +++ b/test_result/test_cases/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/test_result/test_cases/wat_dda_read_write_skew2_c1.txt b/test_result/test_cases/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..2b92f31a --- /dev/null +++ b/test_result/test_cases/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/wat_dda_read_write_skew2_c2.txt b/test_result/test_cases/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..8c9f9aa6 --- /dev/null +++ b/test_result/test_cases/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/wat_dda_read_write_skew2_committed.txt b/test_result/test_cases/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..ade01f80 --- /dev/null +++ b/test_result/test_cases/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/test_result/test_cases/wat_mda_step_wat_c1.txt b/test_result/test_cases/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1a57bfed --- /dev/null +++ b/test_result/test_cases/wat_mda_step_wat_c1.txt @@ -0,0 +1,35 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-update t1 set v=2 where k=0; +6-3-BEGIN; +7-3-update t1 set v=3 where k=2; +8-3-update t1 set v=3 where k=1; +9-1-update t1 set v=1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +13-0,2 1,3 2,3 + +13-0,2 1,2 2,3 + +13-0,1 1,3 2,3 + +13-0,1 1,3 2,1 + +13-0,2 1,2 2,1 + +13-0,1 1,2 2,1 +} diff --git a/test_result/test_cases/wat_mda_step_wat_c2.txt b/test_result/test_cases/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..df78d474 --- /dev/null +++ b/test_result/test_cases/wat_mda_step_wat_c2.txt @@ -0,0 +1,35 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-3-BEGIN; +6-2-update t1 set v=2 where k=0; +7-3-update t1 set v=3 where k=2; +8-3-update t1 set v=3 where k=1; +9-1-update t1 set v=1 where k=2; +10-2-COMMIT; +11-1-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +13-0,2 1,3 2,3 + +13-0,2 1,2 2,3 + +13-0,1 1,3 2,3 + +13-0,1 1,3 2,1 + +13-0,2 1,2 2,1 + +13-0,1 1,2 2,1 +} diff --git a/test_result/test_cases/wat_sda_dirty_write_1abort.txt b/test_result/test_cases/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..3a0a598e --- /dev/null +++ b/test_result/test_cases/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE IF EXISTS t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} \ No newline at end of file diff --git a/test_result/test_cases/wat_sda_dirty_write_2commit.txt b/test_result/test_cases/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..736f479f --- /dev/null +++ b/test_result/test_cases/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-COMMIT; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE IF EXISTS t1; +9-3-COMMIT; + + +serializable { +7-0,1 + +7-0,2 +} diff --git a/test_result/test_cases/wat_sda_full_write.txt b/test_result/test_cases/wat_sda_full_write.txt new file mode 100644 index 00000000..c4c9ceaf --- /dev/null +++ b/test_result/test_cases/wat_sda_full_write.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/test_result/test_cases/wat_sda_full_write_committed.txt b/test_result/test_cases/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..97b442de --- /dev/null +++ b/test_result/test_cases/wat_sda_full_write_committed.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} \ No newline at end of file diff --git a/test_result/test_cases/wat_sda_lost_self_update_committed.txt b/test_result/test_cases/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..7b8a0059 --- /dev/null +++ b/test_result/test_cases/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/test_result/test_cases/wat_sda_lost_update_c1.txt b/test_result/test_cases/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..5bc21686 --- /dev/null +++ b/test_result/test_cases/wat_sda_lost_update_c1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} \ No newline at end of file diff --git a/test_result/test_cases/wat_sda_lost_update_c2.txt b/test_result/test_cases/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..90c6cc76 --- /dev/null +++ b/test_result/test_cases/wat_sda_lost_update_c2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} \ No newline at end of file From 6054a010b1632f0768a502129a1c1b57ae13149f Mon Sep 17 00:00:00 2001 From: root Date: Sat, 30 Apr 2022 17:07:54 +0800 Subject: [PATCH 23/81] Update readme --- README.md | 5 ++++- test_result/readme.txt | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 89e38d64..1ba3f959 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ We generate the anomaly history, and simulate multi-users transcation reqeusting Check out some test cases (e.g., [dirty write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt)). - ## Usage To generate Makefile (all commands are executed under '3TS/src/dbtest'): ``` @@ -41,6 +40,10 @@ cp t/bk_do_test_list_all.txt do_test_list.txt cp t/bk_do_test_list_basic.txt do_test_list.txt ``` +// to test only predicate cases +cp t/bk_do_test_list_predicate.txt do_test_list.txt +``` + Edit "auto_test.sh" for database configurations (e.g., username, password). Edit "auto_test_all.sh" for databse (e.g., PostgreSQL, and MySQL) and isolation (e.g., SERIALIZABLE, REPEATABLE READ, READ COMMITTED, and READ UNCOMMITTED) configuration. diff --git a/test_result/readme.txt b/test_result/readme.txt index 5b1cdbcb..ef38964a 100644 --- a/test_result/readme.txt +++ b/test_result/readme.txt @@ -4,4 +4,16 @@ distributed_result: the result are from the distributed environment Each database result includes (1) a summary for all tested result in folder -(2) test results at different isolation levels \ No newline at end of file +(2) test results at different isolation levels + +Test case structure: +Preparation: delete and construct table and rows +Execution: expected execution sequence +Validation: all serializable result + +Test result structure: +Execution: request and real exeuction with timestamps +Result: consistent (rollback or serializable execution) and inconsistent (non-serializable execution) test result + +Test databases: +MySQL, MyRocks, TDSQL, SQL Server, TiDB, Oracle, Oceanbase, Greenplum, PostgreSQL, CockroachDB, MongoDB \ No newline at end of file From 587616c7a59167cf9d8b3d65f831bfb3013ecf96 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 30 Apr 2022 17:10:44 +0800 Subject: [PATCH 24/81] Update readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 1ba3f959..b730d80b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,6 @@ cp t/bk_do_test_list_all.txt do_test_list.txt // to test only basic cases cp t/bk_do_test_list_basic.txt do_test_list.txt -``` // to test only predicate cases cp t/bk_do_test_list_predicate.txt do_test_list.txt From c2e28a9217096ce03ac22a221312457413f04f1b Mon Sep 17 00:00:00 2001 From: root Date: Thu, 5 May 2022 19:35:09 +0800 Subject: [PATCH 25/81] Add mongo test result --- .../mongodb/mongodb_snapshot_total-result.txt | 96 +++++++++ .../snapshot/iat_dda_read_skew_committed.txt | 45 +++++ .../iat_dda_read_write_skew1_committed.txt | 28 +++ .../mongodb/snapshot/iat_dda_write_skew.txt | 43 ++++ .../snapshot/iat_dda_write_skew_committed.txt | 43 ++++ .../mongodb/snapshot/iat_mda_step_iat.txt | 87 ++++++++ ...a_step_iat_causality_violation_anomaly.txt | 87 ++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 185 ++++++++++++++++++ ...step_iat_read_only_transaction_anomaly.txt | 57 ++++++ .../iat_mda_step_iat_uname_anomaly.txt | 69 +++++++ .../iat_sda_lost_update_committed.txt | 26 +++ .../iat_sda_non_repeatable_read_committed.txt | 43 ++++ .../snapshot/rat_dda_double_write_skew1.txt | 27 +++ .../rat_dda_double_write_skew1_committed.txt | 28 +++ .../snapshot/rat_dda_double_write_skew2.txt | 19 ++ .../mongodb/snapshot/rat_dda_read_skew.txt | 43 ++++ .../mongodb/snapshot/rat_dda_read_skew2.txt | 45 +++++ .../snapshot/rat_dda_read_skew2_committed.txt | 45 +++++ ...t_dda_read_skew_predicate_based_delete.txt | 43 ++++ ...t_dda_read_skew_predicate_based_insert.txt | 43 ++++ .../snapshot/rat_dda_write_read_skew.txt | 43 ++++ .../rat_dda_write_read_skew_committed.txt | 43 ++++ .../mongodb/snapshot/rat_mda_step_rat.txt | 87 ++++++++ .../snapshot/rat_mda_step_rat_long_fork.txt | 115 +++++++++++ .../mongodb/snapshot/rat_sda_dirty_read.txt | 29 +++ .../snapshot/rat_sda_intermediate_read.txt | 36 ++++ .../rat_sda_intermediate_read_committed.txt | 36 ++++ .../snapshot/rat_sda_lost_self_update.txt | 17 ++ .../snapshot/rat_sda_non_repeatable_read.txt | 43 ++++ ...le_read_predicate_based-phantom_delete.txt | 25 +++ ...le_read_predicate_based-phantom_insert.txt | 25 +++ .../wat_dda_double_write_skew2_committed.txt | 19 ++ .../snapshot/wat_dda_full_write_skew_c1.txt | 18 ++ .../snapshot/wat_dda_full_write_skew_c2.txt | 18 ++ .../wat_dda_full_write_skew_committed.txt | 18 ++ .../snapshot/wat_dda_read_write_skew1_c1.txt | 27 +++ .../snapshot/wat_dda_read_write_skew1_c2.txt | 27 +++ .../snapshot/wat_dda_read_write_skew2_c1.txt | 26 +++ .../snapshot/wat_dda_read_write_skew2_c2.txt | 26 +++ .../wat_dda_read_write_skew2_committed.txt | 26 +++ .../mongodb/snapshot/wat_mda_step_wat_c1.txt | 20 ++ .../mongodb/snapshot/wat_mda_step_wat_c2.txt | 20 ++ .../snapshot/wat_sda_dirty_write_1abort.txt | 17 ++ .../snapshot/wat_sda_dirty_write_2commit.txt | 17 ++ .../mongodb/snapshot/wat_sda_full_write.txt | 17 ++ .../snapshot/wat_sda_full_write_committed.txt | 17 ++ .../wat_sda_lost_self_update_committed.txt | 17 ++ .../snapshot/wat_sda_lost_update_c1.txt | 17 ++ .../snapshot/wat_sda_lost_update_c2.txt | 17 ++ .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../gp_dist/serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../gp_dist/serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../mongodb_snapshot_total-result.txt | 96 +++++++++ .../snapshot/iat_dda_read_skew_committed.txt | 45 +++++ .../iat_dda_read_write_skew1_committed.txt | 28 +++ .../snapshot/iat_dda_write_skew.txt | 43 ++++ .../snapshot/iat_dda_write_skew_committed.txt | 43 ++++ .../snapshot/iat_mda_step_iat.txt | 87 ++++++++ ...a_step_iat_causality_violation_anomaly.txt | 87 ++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 185 ++++++++++++++++++ ...step_iat_read_only_transaction_anomaly.txt | 117 +++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 69 +++++++ .../iat_sda_lost_update_committed.txt | 26 +++ .../iat_sda_non_repeatable_read_committed.txt | 43 ++++ .../snapshot/rat_dda_double_write_skew1.txt | 27 +++ .../rat_dda_double_write_skew1_committed.txt | 28 +++ .../snapshot/rat_dda_double_write_skew2.txt | 19 ++ .../snapshot/rat_dda_read_skew.txt | 43 ++++ .../snapshot/rat_dda_read_skew2.txt | 45 +++++ .../snapshot/rat_dda_read_skew2_committed.txt | 45 +++++ ...t_dda_read_skew_predicate_based_delete.txt | 43 ++++ ...t_dda_read_skew_predicate_based_insert.txt | 43 ++++ .../snapshot/rat_dda_write_read_skew.txt | 43 ++++ .../rat_dda_write_read_skew_committed.txt | 43 ++++ .../snapshot/rat_mda_step_rat.txt | 87 ++++++++ .../snapshot/rat_mda_step_rat_long_fork.txt | 185 ++++++++++++++++++ .../snapshot/rat_sda_dirty_read.txt | 29 +++ .../snapshot/rat_sda_intermediate_read.txt | 36 ++++ .../rat_sda_intermediate_read_committed.txt | 36 ++++ .../snapshot/rat_sda_lost_self_update.txt | 17 ++ .../snapshot/rat_sda_non_repeatable_read.txt | 43 ++++ ...le_read_predicate_based-phantom_delete.txt | 25 +++ ...le_read_predicate_based-phantom_insert.txt | 25 +++ .../wat_dda_double_write_skew2_committed.txt | 19 ++ .../snapshot/wat_dda_full_write_skew_c1.txt | 18 ++ .../snapshot/wat_dda_full_write_skew_c2.txt | 18 ++ .../wat_dda_full_write_skew_committed.txt | 18 ++ .../snapshot/wat_dda_read_write_skew1_c1.txt | 27 +++ .../snapshot/wat_dda_read_write_skew1_c2.txt | 27 +++ .../snapshot/wat_dda_read_write_skew2_c1.txt | 26 +++ .../snapshot/wat_dda_read_write_skew2_c2.txt | 26 +++ .../wat_dda_read_write_skew2_committed.txt | 26 +++ .../snapshot/wat_mda_step_wat_c1.txt | 20 ++ .../snapshot/wat_mda_step_wat_c2.txt | 20 ++ .../snapshot/wat_sda_dirty_write_1abort.txt | 17 ++ .../snapshot/wat_sda_dirty_write_2commit.txt | 17 ++ .../snapshot/wat_sda_full_write.txt | 17 ++ .../snapshot/wat_sda_full_write_committed.txt | 17 ++ .../wat_sda_lost_self_update_committed.txt | 17 ++ .../snapshot/wat_sda_lost_update_c1.txt | 17 ++ .../snapshot/wat_sda_lost_update_c2.txt | 17 ++ .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../readme.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../serializable_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../serializable/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../serializable/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../serializable/rat_dda_read_skew.txt | 0 .../serializable/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../serializable/rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../serializable/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../serializable/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../serializable/rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../serializable/wat_mda_step_wat_c1.txt | 0 .../serializable/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../serializable/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../serializable/wat_sda_lost_update_c1.txt | 0 .../serializable/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../read-committed/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../read-committed/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../read-committed/rat_dda_read_skew.txt | 0 .../read-committed/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../read-committed/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../read-committed/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../read-committed/wat_mda_step_wat_c1.txt | 0 .../read-committed/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../read-committed/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../read-committed/wat_sda_lost_update_c1.txt | 0 .../read-committed/wat_sda_lost_update_c2.txt | 0 .../iat_dda_read_skew_committed.txt | 0 .../iat_dda_read_write_skew1_committed.txt | 0 .../repeatable-read/iat_dda_write_skew.txt | 0 .../iat_dda_write_skew_committed.txt | 0 ...skew_predicate_based-intersecting_data.txt | 0 ...w_predicate_based-overdraft_protection.txt | 0 .../repeatable-read/iat_mda_step_iat.txt | 0 ...a_step_iat_causality_violation_anomaly.txt | 0 .../iat_mda_step_iat_cross_phenomenon.txt | 0 ...at_mda_step_iat_predicate_based_delete.txt | 0 ...at_mda_step_iat_predicate_based_insert.txt | 0 ...step_iat_read_only_transaction_anomaly.txt | 0 .../iat_mda_step_iat_uname_anomaly.txt | 0 .../iat_sda_lost_update_committed.txt | 0 .../iat_sda_non_repeatable_read_committed.txt | 0 .../rat_dda_double_write_skew1.txt | 0 .../rat_dda_double_write_skew1_committed.txt | 0 .../rat_dda_double_write_skew2.txt | 0 .../repeatable-read/rat_dda_read_skew.txt | 0 .../repeatable-read/rat_dda_read_skew2.txt | 0 .../rat_dda_read_skew2_committed.txt | 0 ...t_dda_read_skew_predicate_based_delete.txt | 0 ...t_dda_read_skew_predicate_based_insert.txt | 0 .../rat_dda_write_read_skew.txt | 0 .../rat_dda_write_read_skew_committed.txt | 0 .../repeatable-read/rat_mda_step_rat.txt | 0 .../rat_mda_step_rat_long_fork.txt | 0 ...at_mda_step_rat_predicate_based_delete.txt | 0 ...at_mda_step_rat_predicate_based_insert.txt | 0 .../repeatable-read/rat_sda_dirty_read.txt | 0 .../rat_sda_intermediate_read.txt | 0 .../rat_sda_intermediate_read_committed.txt | 0 .../rat_sda_lost_self_update.txt | 0 .../rat_sda_non_repeatable_read.txt | 0 ...le_read_predicate_based-phantom_delete.txt | 0 ...le_read_predicate_based-phantom_insert.txt | 0 .../wat_dda_double_write_skew2_committed.txt | 0 .../wat_dda_full_write_skew_c1.txt | 0 .../wat_dda_full_write_skew_c2.txt | 0 .../wat_dda_full_write_skew_committed.txt | 0 .../wat_dda_read_write_skew1_c1.txt | 0 .../wat_dda_read_write_skew1_c2.txt | 0 .../wat_dda_read_write_skew2_c1.txt | 0 .../wat_dda_read_write_skew2_c2.txt | 0 .../wat_dda_read_write_skew2_committed.txt | 0 .../repeatable-read/wat_mda_step_wat_c1.txt | 0 .../repeatable-read/wat_mda_step_wat_c2.txt | 0 .../wat_sda_dirty_write_1abort.txt | 0 .../wat_sda_dirty_write_2commit.txt | 0 .../repeatable-read/wat_sda_full_write.txt | 0 .../wat_sda_full_write_committed.txt | 0 .../wat_sda_lost_self_update_committed.txt | 0 .../wat_sda_lost_update_c1.txt | 0 .../wat_sda_lost_update_c2.txt | 0 .../read-committed_total-result.txt | 0 .../repeatable-read_total-result.txt | 0 1748 files changed, 4060 insertions(+) create mode 100644 test_result/centralizend_result/mongodb/mongodb_snapshot_total-result.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c2.txt rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt (100%) create mode 100644 test_result/distributed_result/mongodb_dist/mongodb_snapshot_total-result.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_skew_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_sda_lost_update_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_dirty_read.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_lost_self_update.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c2.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c1.txt create mode 100644 test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c2.txt rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/readme.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt (100%) rename test_result/{disttibuted_result => distributed_result}/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt (100%) diff --git a/test_result/centralizend_result/mongodb/mongodb_snapshot_total-result.txt b/test_result/centralizend_result/mongodb/mongodb_snapshot_total-result.txt new file mode 100644 index 00000000..38119496 --- /dev/null +++ b/test_result/centralizend_result/mongodb/mongodb_snapshot_total-result.txt @@ -0,0 +1,96 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Rollback + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Rollback + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +wat_sda_dirty_write_1abort: Rollback + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..7992c237 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_skew_committed.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..ee21b19d --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,28 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 2)' + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.put(1, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew.txt b/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew.txt new file mode 100644 index 00000000..9db24d63 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(1, 1)' +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..08e84475 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_dda_write_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.put(0, 1)' +T1 COMMIT transaction success +T1 execute stmt: 't1.put(1, 1)' + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat.txt b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat.txt new file mode 100644 index 00000000..079793ec --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(2)' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + T3 start transaction success + T3 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + +T1 execute stmt: 't1.put(0, 1)' + T2 execute stmt: 't1.put(1, 1)' + T3 execute stmt: 't1.put(2, 1)' +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..1f2e5df0 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success + T3 start transaction success + T3 execute stmt: 't1.get(0)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + T3 execute stmt: 't1.put(1, 1)' + T3 COMMIT transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +T1 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..bd28717c --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,185 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + T3 start transaction success + T3 execute stmt: 't1.put(0, 1)' + T3 COMMIT transaction success + T4 start transaction success + T4 execute stmt: 't1.put(1, 1)' + T4 COMMIT transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + T2 COMMIT transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +T1 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..091e05a5 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,57 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,20) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + + T2 execute stmt: 't1.put(1, 20)' + T2 COMMIT transaction success + T3 start transaction success + T3 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + T3 execute stmt: 't1.get(1)' + current_result: + (1,20) + (1) expected_result: + (1,0) + + T3 COMMIT transaction success +T1 execute stmt: 't1.put(0, 11)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..fde424c5 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,69 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + T2 execute stmt: 't1.put(0, 1)' + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + T2 execute stmt: 't1.put(1,1)' + T3 start transaction success + T3 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mongodb/snapshot/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..9b004276 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_sda_lost_update_committed.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + T2 COMMIT transaction success +T1 execute stmt: 't1.put(0, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mongodb/snapshot/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..53530f5a --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..446bd5e5 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(1, 2)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..d94e02d1 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,28 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(1, 2)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..ff4cc00a --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_double_write_skew2.txt @@ -0,0 +1,19 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew.txt new file mode 100644 index 00000000..f678050c --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) (1,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(1)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) (1,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (1,1) (0,1) + *(1) expected_result: + (1,1) (0,1) + *(2) expected_result: + (1,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2.txt new file mode 100644 index 00000000..0949c602 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(1, 1)' + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..7a264ae2 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew2_committed.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(1, 1)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..8f1af041 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(1)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (1,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (1,1) (0,1) + *(1) expected_result: + (1,1) (0,1) + *(2) expected_result: + (1,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..91cd714b --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(1)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (1,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (1,1) (0,1) + *(1) expected_result: + (1,1) (0,1) + *(2) expected_result: + (1,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..1f75f989 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..ce414368 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat.txt b/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat.txt new file mode 100644 index 00000000..173a98be --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_rat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + T3 start transaction success + T3 execute stmt: 't1.put(2, 1)' + T3 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + +T1 execute stmt: 't1.get(2)' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..6812249a --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,115 @@ +#### db_type: mongodb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' + T4 start transaction success + T4 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T3 start transaction success + T3 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + + T3 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (1,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T4 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_dirty_read.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_dirty_read.txt new file mode 100644 index 00000000..9c0caa07 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_dirty_read.txt @@ -0,0 +1,29 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.put(0, 0)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + null + *(1) expected_result: + null + + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + null + *(1) expected_result: + null + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..ded07c96 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read.txt @@ -0,0 +1,36 @@ +#### db_type: mongodb #### +#### test_type: sda_intermediate_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(0, 2)' + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..74e1fee4 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,36 @@ +#### db_type: mongodb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(0, 2)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..943c62cc --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_lost_self_update.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_self_update #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..4d66d15f --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..dea6ed7f --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,25 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 0)' + T2 COMMIT transaction success +T1 execute stmt: 't1.getpred(0)' +[ERROR] in MongoConnector::ExecFindkV ->Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651677643, 7). Collection minimum is Timestamp(1651677643, 8): generic server error + +Test Result: Rollback +Reason: Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651677643, 7). Collection minimum is Timestamp(1651677643, 8): generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..58692d18 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,25 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 0)' + T2 COMMIT transaction success +T1 execute stmt: 't1.getpred(0)' +[ERROR] in MongoConnector::ExecFindkV ->Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651677643, 3). Collection minimum is Timestamp(1651677643, 4): generic server error + +Test Result: Rollback +Reason: Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651677643, 3). Collection minimum is Timestamp(1651677643, 4): generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..0f58314b --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,19 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..ba6cddb9 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..10f1b1a5 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..caa683c7 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..b5ca6d5a --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 2)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(1, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..2200a7ab --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 2)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(1, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..eb37768b --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..86a584ba --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..87dfd066 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..d97861cb --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c1.txt @@ -0,0 +1,20 @@ +#### db_type: mongodb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 2)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..a72dce7a --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_mda_step_wat_c2.txt @@ -0,0 +1,20 @@ +#### db_type: mongodb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(1, 2)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..1cc1018d --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..66d36468 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write.txt new file mode 100644 index 00000000..e057f4c9 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_full_write #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..65581c56 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_full_write_committed.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_full_write_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..cc27e358 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f67f3686 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c1.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..910560b5 --- /dev/null +++ b/test_result/centralizend_result/mongodb/snapshot/wat_sda_lost_update_c2.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt b/test_result/distributed_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt rename to test_result/distributed_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt b/test_result/distributed_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt rename to test_result/distributed_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt b/test_result/distributed_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt b/test_result/distributed_result/gp_test/gp_dist/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt rename to test_result/distributed_result/gp_test/gp_dist/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/gp_test/gp_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/gp_test/gp_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt b/test_result/distributed_result/gp_test/gp_single/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt rename to test_result/distributed_result/gp_test/gp_single/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/distributed_result/mongodb_dist/mongodb_snapshot_total-result.txt b/test_result/distributed_result/mongodb_dist/mongodb_snapshot_total-result.txt new file mode 100644 index 00000000..38119496 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/mongodb_snapshot_total-result.txt @@ -0,0 +1,96 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Rollback + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Rollback + +rat_sda_lost_self_update: Rollback + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +wat_sda_dirty_write_1abort: Rollback + +wat_sda_dirty_write_2commit: Rollback + +wat_sda_full_write: Rollback + +wat_sda_full_write_committed: Rollback + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Rollback + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_skew_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..8f0fcbb6 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_skew_committed.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.get(601)' + current_result: + (601,0) + *(1) expected_result: + (601,0) + (2) expected_result: + (601,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..a4681d19 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,28 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(601, 2)' + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.put(601, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew.txt new file mode 100644 index 00000000..ca5fd893 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(601, 1)' +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a26cd522 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_dda_write_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.put(0, 1)' +T1 COMMIT transaction success +T1 execute stmt: 't1.put(601, 1)' + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat.txt new file mode 100644 index 00000000..8d2a8754 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 execute stmt: 't1.put(602, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(602)' + current_result: + (602,0) + *(1) expected_result: + (602,0) + *(2) expected_result: + (602,0) + *(3) expected_result: + (602,0) + (4) expected_result: + (602,1) + (5) expected_result: + (602,1) + (6) expected_result: + (602,1) + + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + T3 start transaction success + T3 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + (3) expected_result: + (601,1) + (4) expected_result: + (601,1) + *(5) expected_result: + (601,0) + *(6) expected_result: + (601,0) + +T1 execute stmt: 't1.put(0, 1)' + T2 execute stmt: 't1.put(601, 1)' + T3 execute stmt: 't1.put(602, 1)' +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) (602,1) + *(1) expected_result: + (0,1) (601,1) (602,1) + *(2) expected_result: + (0,1) (601,1) (602,1) + *(3) expected_result: + (0,1) (601,1) (602,1) + *(4) expected_result: + (0,1) (601,1) (602,1) + *(5) expected_result: + (0,1) (601,1) (602,1) + *(6) expected_result: + (0,1) (601,1) (602,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..a40742fa --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success + T3 start transaction success + T3 execute stmt: 't1.get(0)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + T3 execute stmt: 't1.put(601, 1)' + T3 COMMIT transaction success +T1 execute stmt: 't1.get(601)' + current_result: + (601,0) + *(1) expected_result: + (601,0) + *(2) expected_result: + (601,0) + (3) expected_result: + (601,1) + *(4) expected_result: + (601,0) + (5) expected_result: + (601,1) + (6) expected_result: + (601,1) + +T1 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + *(3) expected_result: + (0,1) (601,1) + *(4) expected_result: + (0,1) (601,1) + *(5) expected_result: + (0,1) (601,1) + *(6) expected_result: + (0,1) (601,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..bd28717c --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,185 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + T3 start transaction success + T3 execute stmt: 't1.put(0, 1)' + T3 COMMIT transaction success + T4 start transaction success + T4 execute stmt: 't1.put(1, 1)' + T4 COMMIT transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + T2 COMMIT transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +T1 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..e748a068 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,117 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + + T2 start transaction success + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + T2 execute stmt: 't1.put(1, 20)' + T2 COMMIT transaction success + T3 start transaction success + T3 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + T3 execute stmt: 't1.get(1)' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + T3 COMMIT transaction success +T1 execute stmt: 't1.put(0, 11)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..4086ff34 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,69 @@ +#### db_type: mongodb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' +T1 execute stmt: 't1.put(2, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + T2 execute stmt: 't1.put(0, 1)' + T2 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + T2 execute stmt: 't1.put(1,1)' + T3 start transaction success + T3 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_lost_update_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..9b004276 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_lost_update_committed.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + T2 COMMIT transaction success +T1 execute stmt: 't1.put(0, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..53530f5a --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' + T2 COMMIT transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..a4984519 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(601, 2)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..8ab48d5f --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,28 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(601, 2)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew2.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..7533535c --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_double_write_skew2.txt @@ -0,0 +1,19 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew.txt new file mode 100644 index 00000000..b13d069a --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) (601,1) + + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(601)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) (601,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (601,1) (0,1) + *(1) expected_result: + (601,1) (0,1) + *(2) expected_result: + (601,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2.txt new file mode 100644 index 00000000..d9df65d5 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(601, 1)' + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..15d8f6d6 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew2_committed.txt @@ -0,0 +1,45 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(601, 1)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..077f583f --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(601)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (601,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (601,1) (0,1) + *(1) expected_result: + (601,1) (0,1) + *(2) expected_result: + (601,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..128e7d0e --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.getpred(601)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (601,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (601,1) (0,1) + *(1) expected_result: + (601,1) (0,1) + *(2) expected_result: + (601,1) (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..c30f83d5 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_read_skew #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.get(601)' + current_result: + (601,0) + *(1) expected_result: + (601,0) + (2) expected_result: + (601,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..c6f6fa79 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.get(601)' + current_result: + (601,0) + *(1) expected_result: + (601,0) + (2) expected_result: + (601,1) + +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) + *(1) expected_result: + (0,1) (601,1) + *(2) expected_result: + (0,1) (601,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat.txt new file mode 100644 index 00000000..3fbfe268 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat.txt @@ -0,0 +1,87 @@ +#### db_type: mongodb #### +#### test_type: mda_step_rat #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 execute stmt: 't1.put(602, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + T3 start transaction success + T3 execute stmt: 't1.put(602, 1)' + T3 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + (3) expected_result: + (601,1) + (4) expected_result: + (601,1) + *(5) expected_result: + (601,0) + *(6) expected_result: + (601,0) + +T1 execute stmt: 't1.get(602)' + current_result: + (602,0) + *(1) expected_result: + (602,0) + *(2) expected_result: + (602,0) + *(3) expected_result: + (602,0) + (4) expected_result: + (602,1) + (5) expected_result: + (602,1) + (6) expected_result: + (602,1) + +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (601,1) (602,1) + *(1) expected_result: + (0,1) (601,1) (602,1) + *(2) expected_result: + (0,1) (601,1) (602,1) + *(3) expected_result: + (0,1) (601,1) (602,1) + *(4) expected_result: + (0,1) (601,1) (602,1) + *(5) expected_result: + (0,1) (601,1) (602,1) + *(6) expected_result: + (0,1) (601,1) (602,1) + + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..6037504c --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,185 @@ +#### db_type: mongodb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(1, 0)' + T4 start transaction success + T4 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T3 start transaction success + T3 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + T3 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + T2 start transaction success + T2 execute stmt: 't1.put(1, 1)' + T4 execute stmt: 't1.get(1)' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + +T1 COMMIT transaction success + T2 COMMIT transaction success + T3 COMMIT transaction success + T4 COMMIT transaction success + T4 execute stmt: 't1.get(*)' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_dirty_read.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_dirty_read.txt new file mode 100644 index 00000000..9c0caa07 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_dirty_read.txt @@ -0,0 +1,29 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.put(0, 0)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + null + *(1) expected_result: + null + + T2 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + null + *(1) expected_result: + null + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..ded07c96 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read.txt @@ -0,0 +1,36 @@ +#### db_type: mongodb #### +#### test_type: sda_intermediate_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + +T1 execute stmt: 't1.put(0, 2)' + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..74e1fee4 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,36 @@ +#### db_type: mongodb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + T2 COMMIT transaction success +T1 execute stmt: 't1.put(0, 2)' +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_lost_self_update.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..943c62cc --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_lost_self_update.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_self_update #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..4d66d15f --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read.txt @@ -0,0 +1,43 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + + T2 COMMIT transaction success +T1 COMMIT transaction success + T3 execute stmt: 't1.get(*)' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..ce7c1634 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,25 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 0)' + T2 COMMIT transaction success +T1 execute stmt: 't1.getpred(0)' +[ERROR] in MongoConnector::ExecFindkV ->Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651682652, 4). Collection minimum is Timestamp(1651682652, 5): generic server error + +Test Result: Rollback +Reason: Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651682652, 4). Collection minimum is Timestamp(1651682652, 5): generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..22b954ea --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,25 @@ +#### db_type: mongodb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 start transaction success +T1 execute stmt: 't1.getpred(0)' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + + T2 start transaction success + T2 execute stmt: 't1.put(0, 0)' + T2 COMMIT transaction success +T1 execute stmt: 't1.getpred(0)' +[ERROR] in MongoConnector::ExecFindkV ->Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651682651, 15). Collection minimum is Timestamp(1651682652, 1): generic server error + +Test Result: Rollback +Reason: Unable to read from a snapshot due to pending collection catalog changes; please retry the operation. Snapshot timestamp is Timestamp(1651682651, 15). Collection minimum is Timestamp(1651682652, 1): generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..6a0533e9 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,19 @@ +#### db_type: mongodb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 1)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..831ae2e2 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..614a5c98 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..3b88637e --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,18 @@ +#### db_type: mongodb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..114d105e --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + + (2) expected_result: + + + T2 start transaction success + T2 execute stmt: 't1.put(601, 2)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(601, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ade253f4 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,27 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.get(0)' + current_result: + (0,0) + (1) expected_result: + + (2) expected_result: + + + T2 start transaction success + T2 execute stmt: 't1.put(601, 2)' + T2 execute stmt: 't1.put(0, 1)' +T1 execute stmt: 't1.put(601, 1)' +[ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..b5f52901 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..e8d20930 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..84673a0d --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,26 @@ +#### db_type: mongodb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.get(601)' + current_result: + (601,0) + (1) expected_result: + (601,1) + *(2) expected_result: + (601,0) + + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c1.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..990d2c1b --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c1.txt @@ -0,0 +1,20 @@ +#### db_type: mongodb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 execute stmt: 't1.put(602, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 2)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c2.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..a55c79bf --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_mda_step_wat_c2.txt @@ -0,0 +1,20 @@ +#### db_type: mongodb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 execute stmt: 't1.put(601, 0)' +T1 execute stmt: 't1.put(602, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(601, 2)' + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..1cc1018d --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..66d36468 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write.txt new file mode 100644 index 00000000..e057f4c9 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_full_write #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..65581c56 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_full_write_committed.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_full_write_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..cc27e358 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c1.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f67f3686 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c1.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c2.txt b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..910560b5 --- /dev/null +++ b/test_result/distributed_result/mongodb_dist/snapshot/wat_sda_lost_update_c2.txt @@ -0,0 +1,17 @@ +#### db_type: mongodb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +T1 execute stmt: 't1.put(0, 0)' +T1 start transaction success +T1 execute stmt: 't1.put(0, 1)' + T2 start transaction success + T2 execute stmt: 't1.put(0, 2)' + [ERROR] in MongoConnector::ExecUpdatekV ->WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + +Test Result: Rollback +Reason: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.: generic server error + diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/readme.txt b/test_result/distributed_result/readme.txt similarity index 100% rename from test_result/disttibuted_result/readme.txt rename to test_result/distributed_result/readme.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt b/test_result/distributed_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt diff --git a/test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt b/test_result/distributed_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt similarity index 100% rename from test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt rename to test_result/distributed_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt From bc20b6b5f37a64eb40e1ef97d952e87d245a92ea Mon Sep 17 00:00:00 2001 From: root Date: Fri, 13 May 2022 16:45:46 +0800 Subject: [PATCH 26/81] Update readme and test case by postgresql --- README.md | 29 ++++++++++- doc/en/setup_db_environment | 22 ++++++++ doc/en/setup_db_postgresql | 101 ++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 doc/en/setup_db_environment create mode 100644 doc/en/setup_db_postgresql diff --git a/README.md b/README.md index b730d80b..40e9ed2e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ If you want to better understand the aims of our project, please view [3TS opens To test the consistency of real databases. We generate the anomaly history, and simulate multi-users transcation reqeusting to databases. -Check out some test cases (e.g., [dirty write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt)). +Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt) at Serializable Level). ## Usage @@ -51,6 +51,33 @@ To run the test (under '3TS/src/dbtest'): ./auto_test_all.sh ``` +## Analyze an anomaly case run by PostgreSQL + +### Setup PostgreSQL +Please check out the general environment [setup](doc/en/setup_db_environment) and PostgreSQL [setup](doc/en/setup_db_postgresql). + +Check if it successfully connects to PostgreSQL server by isql, +``` +isql pg -v +``` +Once the connected information showed, we are able to run our code to test designed anomaly schedules. + +The anomaly test cases are Write-read Skew and Write-read Skew Committed, the schedules are as follows: +Write-read Skew : $W_1[x_1]W_2[y_1]R_2[x_1]R_1[y_1]$ +Write-read Skew Committed : $W_1[x_1]W_2[y_1]R_2[x_1]C_2R_1[y_1]$ + +The test result are in the following: +| Isolation level | Write-read Skew ([SQL](test_result/test_cases/rat_dda_write_read_skew.txt)) | Write-read Skew Committed ([SQL](test_result/test_cases/rat_dda_write_read_skew_committed.txt)) | +| ----------- | ----------- | ----------- | +| Serializable | Rollback ([result](test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt)) | Rollback ([result](test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt)) | +| Repeatable Read | Anomaly reported ([result](test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt)) | Anomaly reported ([result](test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt)) | +| Read (Un)Committed | Anomaly reported ([result](test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt)) | Pass the test ([result](test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt)) | + +At serializbale level, both tested cases detected consecutive RW conflicts. +At Repeatable Read level, both generated two consecutive RW confilcts and allowed. +At Read (Un)Committed level, Write-read Skew test case generated two consecutive RW ($R_2W_1,R_1W_2$) conflicts while Write-read Skew Committed test case read the newest committed version and executed into non-anomaly schedule ($R_2W_1,W_2C_2R_1$). + + ## License GPLv3 @ Tencent diff --git a/doc/en/setup_db_environment b/doc/en/setup_db_environment new file mode 100644 index 00000000..4e7960cb --- /dev/null +++ b/doc/en/setup_db_environment @@ -0,0 +1,22 @@ +# Database environment + +We are using Unix ODBC to connect databases. The following are the general steps to set up the environment for successfully connecting to databases. + + +0. Setup database service (e.g., by docker) +1. Install the UnixODBC +2. Install the ODBC driver for specific databases +3. Configure unixODBC by /etc/odbc.ini (e.g., ip, port, username, password, database name) and /etc/odbcinst.ini (e.g., drivers) +4. Test isql connection + + +The following are examples we set up databases (Oracle 12c, PostgreSQL, SQL Server, Oceanbase, CockroachDB, TiDB, MySQL) by dockers in Centos systems. + + +====== Copyright && Authorship ====== + +Original from farrisli at Tencent Inc. Check it out the Chinese version: by fishheader from JianShu, link: https://www.jianshu.com/u/e9202bc75c4e + +Author: axingguchen at Tencent Inc. + + diff --git a/doc/en/setup_db_postgresql b/doc/en/setup_db_postgresql new file mode 100644 index 00000000..3672d094 --- /dev/null +++ b/doc/en/setup_db_postgresql @@ -0,0 +1,101 @@ +# Setup PostgreSQL 12.4 + +0. Download and install PostgreSQL + + +We refer to a decent document for detailed setups as follows. +https://www.cnblogs.com/kcxg/p/10718211.html + + +Remember to setup the environment: +``` +// edit /etc/profile if root user, or edit ~/.bash_profile if other suers +export PGHOME=/usr/local/pgsql/ +export PGUSER=test123 +export PGPORT=5432 +export PGDATA=$PGHOME/data +export PATH=$PGHOME/bin:$PATH:$HOME/bin +export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH +// Source it +source /etc/profile +``` + + +1. install UnixODBC + +Once database is up, we also need to install client to connect databases. The typical clients are sqlplus and isql(odbc-oracle), we will deploy the latter one in our tests. + +``` +// install UnixODBC +yum install unixODBC +yum install unixODBC-devel + +// to check out the installed rpm package +rpm -qa | grep unixodbc + +// find the installed location +rpm -ql [rpm_package_name] + + +// add it to enviroments at /etc/profile if root user, otherwise edit ~/.bash_profile +export ODBCSYSINI=/etc +export ODBCINI=/etc/odbc.ini + +// make it work: +source /etc/profile +``` + + +2. install odbc-pg + +Download site: http://rpmfind.net/linux/rpm2html/search.php?query=postgresql-odbc(x86-64) +Here is the example package name: postgresql-odbc-10.03.0000-2.el8.x86_64.rpm + + +``` +// yum install for rpm package +yum install postgresql-odbc-10.03.0000-2.el8.x86_64 + +// set up environment +// edit /etc/profile if root user, ~/.bash_profile if other users +ORACLE_HOME=/usr/lib/oracle/21/client64 +export ORACLE_HOME +TNS_ADMIN=/usr/lib/oracle/21/client64/network/admin +export TNS_ADMIN +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/lib/oracle/21/client64/lib + +// source it: +source /etc/profile + +// // to check out the installed rpm package +rpm -qa | grep [rpm_name] + +// find the installed location +rpm -ql [rpm_package_name] +``` + +3. configure unixODBC + +``` +// /etc/odbc.ini +[pg] +Driver=PG +USER=test123 +Password=[your_password_here] +PORT=5432 +SERVER=[your_pg_service_ip_address] + +// /etc/odbcinst.ini +[PG] +Description=ODBC for PostgreSQL +Driver=/usr/lib64/psqlodbcw.so +Setup=/usr/lib64/psqlodbcw.so +FileUsage=1 +``` + +4. Test isql connection + +``` +isql pg -v +``` +You will connect to SQL command line once succeed. \ No newline at end of file From bd223f3b9f63c7c2d4b22dad60dddf48baf65331 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 May 2022 10:44:29 +0800 Subject: [PATCH 27/81] Update readme math --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 40e9ed2e..59db4447 100644 --- a/README.md +++ b/README.md @@ -63,10 +63,20 @@ isql pg -v Once the connected information showed, we are able to run our code to test designed anomaly schedules. The anomaly test cases are Write-read Skew and Write-read Skew Committed, the schedules are as follows: -Write-read Skew : $W_1[x_1]W_2[y_1]R_2[x_1]R_1[y_1]$ -Write-read Skew Committed : $W_1[x_1]W_2[y_1]R_2[x_1]C_2R_1[y_1]$ -The test result are in the following: +Write-read Skew : + +Write-read Skew Committed : + +Under "src/dbtest/" folder, add rat_dda_write_read_skew and rat_dda_write_read_skew_committed to "do_test_list.txt". +Add the following to "auto_test_all.sh" for runing PostgreSQL with four isolation levels: +``` +./auto_test.sh "pg" "read-uncommitted" +./auto_test.sh "pg" "read-committed" +./auto_test.sh "pg" "repeatable-read" +./auto_test.sh "pg" "serializable" +``` +Run test by "./auto_test_all.sh". The test result are in the following: | Isolation level | Write-read Skew ([SQL](test_result/test_cases/rat_dda_write_read_skew.txt)) | Write-read Skew Committed ([SQL](test_result/test_cases/rat_dda_write_read_skew_committed.txt)) | | ----------- | ----------- | ----------- | | Serializable | Rollback ([result](test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt)) | Rollback ([result](test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt)) | From 6954f4bf11dacec9bc0bc74599fc0c9f86f64bd1 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 May 2022 20:01:28 +0800 Subject: [PATCH 28/81] Add CMake list for generating makefiles --- src/dbtest/CMakeLists.txt | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt index 3031302c..303a388a 100644 --- a/src/dbtest/CMakeLists.txt +++ b/src/dbtest/CMakeLists.txt @@ -35,30 +35,3 @@ list(APPEND ODBC_LD odbc) target_link_libraries(3ts_dbtest ${THIRD_PARTIES}) target_link_libraries(3ts_dbtest ${ODBC_LD}) -########### kv test ############## -# all .cc files -#list(APPEND SOURCE_FILES_KV -# "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" -# "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" -# "${CMAKE_CURRENT_SOURCE_DIR}/src/kv_cntl.cc" -# "${CMAKE_CURRENT_SOURCE_DIR}/src/kvtest.cc" -#) -# bin -#add_executable(3ts_kvtest ${SOURCE_FILES_KV}) -# ld:bson mongo -#find_package(bsoncxx REQUIRED) -#find_package(mongocxx REQUIRED) -#include_directories(${LIBMONGOCXX_INCLUDE_DIR}) -#include_directories(${LIBBSONCXX_INCLUDE_DIR}) -# link ld -#target_link_libraries(3ts_kvtest PRIVATE mongo::bsoncxx_shared) -#target_link_libraries(3ts_kvtest PRIVATE mongo::mongocxx_shared) -#target_link_libraries(3ts_kvtest PRIVATE ${THIRD_PARTIES}) -# third parties .h -#target_include_directories(3ts_kvtest PUBLIC -# "/usr/local/include/mongocxx/v_noabi" -# "/usr/local/include/bsoncxx/v_noabi" -# "/usr/local/include/libmongoc-1.0" -# "/usr/local/include/libbson-1.0" -# "/usr/local/lib" -# ) From b5617923e0e58f28d852fe7480be10bee502d08c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 23 May 2022 22:24:55 +0800 Subject: [PATCH 29/81] Fix bug, release handle statement for Oracle --- src/dbtest/src/sql_cntl.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 4dbfd458..4dda650b 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -148,6 +148,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } // execute sql @@ -163,7 +165,9 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); - + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); @@ -207,6 +211,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } SQLLEN length; @@ -260,8 +266,12 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_time_info << std::endl; } + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); @@ -269,6 +279,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult if (test_result_set.ResultType() == ""){ test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); } + return true; } else { if (test_result_set.ResultType().empty()) { From 0e1b04749214d0a28d75b3f7a05fbefd709a4db3 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 31 May 2022 15:05:04 +0800 Subject: [PATCH 30/81] Clean up, and update supoort DB test one case one init --- README.md | 1 + src/3ts/backend/cca/algorithm.h | 43 -- .../cca/conflict_serializable_algorithm.h | 125 ------ .../backend/cca/occ_algorithm/env/rc_env.h | 91 ---- .../backend/cca/occ_algorithm/env/ru_env.h | 181 -------- .../backend/cca/occ_algorithm/env/si_env.h | 195 -------- .../backend/cca/occ_algorithm/occ_algorithm.h | 162 ------- .../cca/occ_algorithm/trans/bocc_trans.h | 47 -- .../cca/occ_algorithm/trans/focc_trans.h | 57 --- .../cca/occ_algorithm/trans/ssi_trans.h | 121 ----- .../cca/occ_algorithm/trans/wsi_trans.h | 43 -- src/3ts/backend/cca/serializable_algorithm.h | 418 ------------------ src/3ts/backend/history/generator.h | 299 ------------- src/3ts/backend/history/outputter.h | 350 --------------- src/3ts/backend/history/parse_config.h | 294 ------------ src/3ts/backend/history/run.h | 150 ------- src/3ts/backend/main.cc | 38 -- src/3ts/backend/util/generic.h | 356 --------------- src/3ts/backend/util/thread_pool.h | 130 ------ src/dbtest/src/sqltest.cc | 143 ++++-- src/test/history/special/all_same_not_serial | 200 --------- src/test/unittest/base_test.cc | 84 ---- .../unittest/ssi_test/ssi_checker_test.cc | 68 --- src/test/unittest/test.sh | 3 - 24 files changed, 101 insertions(+), 3498 deletions(-) delete mode 100644 src/3ts/backend/cca/algorithm.h delete mode 100644 src/3ts/backend/cca/conflict_serializable_algorithm.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/env/rc_env.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/env/ru_env.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/env/si_env.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/occ_algorithm.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/trans/bocc_trans.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/trans/focc_trans.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/trans/ssi_trans.h delete mode 100644 src/3ts/backend/cca/occ_algorithm/trans/wsi_trans.h delete mode 100644 src/3ts/backend/cca/serializable_algorithm.h delete mode 100644 src/3ts/backend/history/generator.h delete mode 100644 src/3ts/backend/history/outputter.h delete mode 100644 src/3ts/backend/history/parse_config.h delete mode 100644 src/3ts/backend/history/run.h delete mode 100644 src/3ts/backend/main.cc delete mode 100644 src/3ts/backend/util/generic.h delete mode 100644 src/3ts/backend/util/thread_pool.h delete mode 100644 src/test/history/special/all_same_not_serial delete mode 100644 src/test/unittest/base_test.cc delete mode 100644 src/test/unittest/ssi_test/ssi_checker_test.cc delete mode 100755 src/test/unittest/test.sh diff --git a/README.md b/README.md index 59db4447..364f91b7 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ We generate the anomaly history, and simulate multi-users transcation reqeusting Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt) at Serializable Level). +Check out the full [report](https://axingguchen.github.io/3TS/){:target="_blank"}. ## Usage To generate Makefile (all commands are executed under '3TS/src/dbtest'): diff --git a/src/3ts/backend/cca/algorithm.h b/src/3ts/backend/cca/algorithm.h deleted file mode 100644 index a5ccda60..00000000 --- a/src/3ts/backend/cca/algorithm.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include - -#include "../util/generic.h" - -namespace ttts { - -#define TRY_LOG(os) \ - if ((os) != nullptr) *(os) - -class HistoryAlgorithm { - public: - HistoryAlgorithm(const std::string& name) : name_(name) {} - virtual ~HistoryAlgorithm() {} - - virtual bool Check(const History& history, std::ostream* const os = nullptr) const = 0; - std::string name() const { return name_; } - - const std::string name_; -}; - -class RollbackRateAlgorithm : public HistoryAlgorithm { - public: - RollbackRateAlgorithm(const std::string& name) : HistoryAlgorithm(name) {} - virtual ~RollbackRateAlgorithm() {} - - virtual bool Check(const History& history, std::ostream* const os = nullptr) const { - return RollbackNum(history, os).size() == 0; - } - virtual std::vector RollbackNum(const History& history, - std::ostream* const os = nullptr) const = 0; -}; -} // namespace ttts diff --git a/src/3ts/backend/cca/conflict_serializable_algorithm.h b/src/3ts/backend/cca/conflict_serializable_algorithm.h deleted file mode 100644 index 276223b2..00000000 --- a/src/3ts/backend/cca/conflict_serializable_algorithm.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include "algorithm.h" - -namespace ttts { - -class ConflictGraphNode { - public: - ConflictGraphNode() : removed_(false) {} - ~ConflictGraphNode() {} - - bool HasNoPreTrans() const { return pre_trans_set_.empty(); } - void AddPreTrans(const uint64_t pre_trans_id) { pre_trans_set_.insert(pre_trans_id); } - void RemovePreTrans(const uint64_t pre_trans_id) { pre_trans_set_.erase(pre_trans_id); } - void Remove() { removed_ = true; } - bool IsRemoved() const { return removed_; } - - private: - std::set pre_trans_set_; - bool removed_; -}; - -class ConflictGraph { - public: - ConflictGraph(const uint64_t trans_num) : nodes_(trans_num) {} - - void Insert(const uint64_t pre_trans_id, const uint64_t trans_id) { - if (pre_trans_id == trans_id) { - return; - } - nodes_[trans_id].AddPreTrans(pre_trans_id); - } - - void Insert(const std::set& pre_trans_set, const uint64_t cur_trans_id) { - for (const uint64_t pre_trans : pre_trans_set) { - Insert(pre_trans, cur_trans_id); - } - } - - bool HasCycle() { - RemoveNodesNotInCycle(); - for (const ConflictGraphNode& node : nodes_) { - if (!node.HasNoPreTrans()) { - return true; - } - } - return false; - } - - private: - void RemoveNodesNotInCycle() { - bool found_no_pre_trans = false; - // A trans which did not have pretrans can not be a part of cycle. - do { - found_no_pre_trans = false; - for (uint64_t trans_id = 0; trans_id < nodes_.size(); ++trans_id) { - if (nodes_[trans_id].HasNoPreTrans() && !nodes_[trans_id].IsRemoved()) { - found_no_pre_trans = true; - nodes_[trans_id].Remove(); - for (ConflictGraphNode& node : nodes_) { - node.RemovePreTrans(trans_id); - } - } - } - } while (found_no_pre_trans); - } - - private: - std::vector nodes_; -}; - -class ConflictSerializableAlgorithm : public HistoryAlgorithm { - public: - ConflictSerializableAlgorithm() : HistoryAlgorithm("Conflict Serializable") {} - virtual ~ConflictSerializableAlgorithm() {} - - virtual bool Check(const History& history, std::ostream* const os) const override { - ConflictGraph graph(history.trans_num()); - std::vector> read_trans_set_for_items(history.item_num()); - std::vector> write_trans_set_for_items(history.item_num()); - std::vector> write_item_set_for_transs(history.trans_num()); - for (const Operation& operation : history.operations()) { - const uint64_t trans_id = operation.trans_id(); - if (operation.IsPointDML()) { - std::set& read_trans_set = read_trans_set_for_items[operation.item_id()]; - std::set& write_trans_set = write_trans_set_for_items[operation.item_id()]; - if (Operation::Type::READ == operation.type()) { - graph.Insert(write_trans_set, trans_id); - read_trans_set.insert(trans_id); - } else if (Operation::Type::WRITE == operation.type()) { - graph.Insert(read_trans_set, trans_id); - graph.Insert(write_trans_set, trans_id); - write_trans_set.insert(trans_id); - write_item_set_for_transs[trans_id].insert(operation.item_id()); // record for abort - } - } else if (Operation::Type::SCAN_ODD == operation.type()) { - // TODO: realize scan odd - } else if (Operation::Type::ABORT == operation.type()) { - for (const uint64_t write_item : write_item_set_for_transs[trans_id]) { - // restore all items has been written - graph.Insert(read_trans_set_for_items[write_item], trans_id); - graph.Insert(write_trans_set_for_items[write_item], trans_id); - } - } - } - return !graph.HasCycle(); - } - - private: - struct ReadWriteSet { - std::set reads_; - std::set writes_; - }; -}; - -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/env/rc_env.h b/src/3ts/backend/cca/occ_algorithm/env/rc_env.h deleted file mode 100644 index 8ac299fb..00000000 --- a/src/3ts/backend/cca/occ_algorithm/env/rc_env.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include "occ_algorithm.h" - -namespace ttts { -namespace occ_algorithm { - -template class EnvDesc, typename AnomalyType> -class TransactionDesc : public TransactionDescBase { - public: - using TransactionDescBase::TransactionDescBase; - virtual std::optional CheckConflict() = 0; - virtual std::optional Commit() { - THROW_ANOMALY(CheckConflict()); - TransactionDescBase::Commit(); - return {}; - } -}; - -template -class EnvironmentDesc : public EnvironmentBase { - static_assert( - std::is_base_of_v, TransDesc>, - "TransDesc with EnvironmentDesc should base of TransactionDesc"); - - private: - using EnvironmentBase::item_vers_; - using EnvironmentBase::history_; - using EnvironmentBase::os_; - - public: - using trans_desc_type = TransDesc; - EnvironmentDesc(const History& history, std::ostream* const os) - : EnvironmentBase(history, os), transs_(history.trans_num()) { - // initial first version - for (uint64_t item_id = 0; item_id < history_.item_num(); ++item_id) { - this->CommitVersion(item_id, nullptr); - } - for (uint64_t trans_id = 0; trans_id < history_.trans_num(); ++trans_id) { - transs_[trans_id] = std::make_unique(trans_id, *this); - } - } - - uint32_t DoCheck() { - uint32_t anomaly_count = 0; - for (const Operation& op : history_.operations()) { - auto& trans = *transs_[op.trans_id()]; - switch (op.type()) { - case Operation::Type::READ: - trans.Read(op.item_id()); - break; - case Operation::Type::WRITE: - trans.Write(op.item_id()); - break; - case Operation::Type::COMMIT: { - std::optional a = trans.Commit(); - if (a.has_value()) { - TRY_LOG(os_) << a.value() << " " << op.trans_id() << std::endl; - ++anomaly_count; - trans.Abort(); - } - break; - } - case Operation::Type::ABORT: - trans.Abort(); - break; - default: - assert(false); - } - } - return anomaly_count; - } - - std::vector> transs_; - - virtual uint64_t GetVisiableVersion(const uint64_t item_id, TransDesc* const r_trans) { - return item_vers_[item_id].size() - 1; - } -}; - -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/env/ru_env.h b/src/3ts/backend/cca/occ_algorithm/env/ru_env.h deleted file mode 100644 index 451df534..00000000 --- a/src/3ts/backend/cca/occ_algorithm/env/ru_env.h +++ /dev/null @@ -1,181 +0,0 @@ -#pragma once -#include "../occ_algorithm.h" - -namespace ttts { -namespace occ_algorithm { - -template class EnvDesc, typename AnomalyType> -class RUTransactionDesc : public TransactionDescBase { - public: - using TransactionDescBase::TransactionDescBase; - using env_desc_type = EnvDesc; - using TransactionDescBase::env_desc_; - using RU_set_type = std::unordered_map*>>; - RUTransactionDesc(const uint64_t trans_id, const uint64_t start_ts, env_desc_type& env_desc) - : TransactionDescBase(trans_id, env_desc), - start_ts_(start_ts), - commit_ts_(0), - last_op_ts_(0), - unrepeatable_read(false), - intermediate_read(false) {} - virtual std::optional CheckConflict(const uint64_t commit_ts) = 0; - - virtual void Write(const uint64_t item_id) { - RU_w_items_[item_id].push_back(&env_desc_.CommitVersion( - item_id, static_cast(this))); - } - - virtual void Read(const uint64_t item_id, std::function&& predicate = {}) { - const uint64_t version = env_desc_.GetVisiableVersion(item_id, static_cast(this)); - if (!predicate || predicate(version)) { // without predicate || predicate satisfied - RU_r_items_[item_id].push_back( - &env_desc_.ReadVersion(item_id, version, static_cast(this))); - } - } - void set_last_op_ts(const uint64_t last_op_ts) { last_op_ts_ = last_op_ts; } - virtual std::optional Commit(const uint64_t commit_ts) { - commit_ts_ = commit_ts; - THROW_ANOMALY(CheckConflict(commit_ts)); - TransactionDescBase::Commit(); - return {}; - } - - uint64_t get_start_ts() const { return start_ts_; } - - uint64_t get_last_op_ts() const { return last_op_ts_; } - - bool unrepeatable_read; - bool intermediate_read; - virtual const RU_set_type& RU_r_items() const { return RU_r_items_; } - virtual const RU_set_type& RU_w_items() const { return RU_w_items_; } - - protected: - const uint64_t start_ts_; - uint64_t commit_ts_; - uint64_t last_op_ts_; - RU_set_type RU_r_items_; - RU_set_type RU_w_items_; -}; - -template -class RUEnvironmentDesc : public EnvironmentBase { - static_assert( - std::is_base_of_v, TransDesc>, - "TransDesc with EnvironmentDesc should base of RUTransactionDesc"); - - private: - using EnvironmentBase::item_vers_; - using EnvironmentBase::history_; - using EnvironmentBase::os_; - - public: - using trans_desc_type = TransDesc; - RUEnvironmentDesc(const History& history, std::ostream* const os) - : EnvironmentBase(history, os) { - // initial first version - for (uint64_t item_id = 0; item_id < history_.item_num(); ++item_id) { - this->CommitVersion(item_id, nullptr); - } - } - - std::vector DoCheck() { - std::vector ret_anomally; - - for (const Operation& op : history_.operations()) { - // std::cout << op << " "; - if (abort_trans_.count(op.trans_id())) continue; - if (active_trans_.count(op.trans_id()) == 0) { - active_trans_[op.trans_id()] = std::make_unique(op.trans_id(), act_cnt_, *this); - } - auto& trans = *active_trans_[op.trans_id()]; - switch (op.type()) { - case Operation::Type::READ: - trans.Read(op.item_id()); - trans.set_last_op_ts(act_cnt_); - break; - case Operation::Type::WRITE: - trans.Write(op.item_id()); - trans.set_last_op_ts(act_cnt_); - break; - case Operation::Type::SCAN_ODD: { - for (uint64_t item_id = 0; item_id < item_vers_.size(); ++item_id) { - trans.Read(item_id); - } - break; - } - case Operation::Type::COMMIT: { - if (std::optional a = trans.Commit(act_cnt_); a.has_value()) { - TRY_LOG(os_) << a.value() << " " << op.trans_id() << std::endl; - ret_anomally.push_back( - a.value()); // add by ym : TODO we do not check what anomaly it is, yet. - trans.Abort(); - abort_trans_[op.trans_id()] = std::move(active_trans_[op.trans_id()]); - active_trans_.erase(op.trans_id()); - } else { - commit_order_.push_back(op.trans_id()); - commit_trans_[op.trans_id()] = std::move(active_trans_[op.trans_id()]); - active_trans_.erase(op.trans_id()); - } - break; - } - case Operation::Type::ABORT: { - if (std::optional a = trans.Abort(); a.has_value()) { - TRY_LOG(os_) << a.value() << " " << op.trans_id() << std::endl; - ret_anomally.push_back( - a.value()); // add by ym : TODO we do not check what anomaly it is, yet. - } - abort_trans_[op.trans_id()] = std::move(active_trans_[op.trans_id()]); - active_trans_.erase(op.trans_id()); - break; - } - default: - assert(false); - } - ++act_cnt_; - } - return ret_anomally; - ; - } - - virtual ItemVersionDesc& ReadVersion(const uint64_t item_id, const uint64_t version, - TransDesc* const r_trans) { - const auto& r_ver = item_vers_[item_id][version]; - uint64_t nc_version = version; - if (r_ver->w_trans_ != nullptr && abort_trans_.count(r_ver->w_trans_->trans_id()) > 0) { - bool find_version = true; - while (find_version) { - const auto& r_ver_loop = item_vers_[item_id][--nc_version]; - if (r_ver_loop->w_trans_ == nullptr) { - r_ver_loop->r_transs_.emplace(r_trans->trans_id(), r_trans); - return *r_ver_loop; - } else if (abort_trans_.count(r_ver_loop->w_trans_->trans_id()) == 0) { - find_version = false; - r_ver_loop->r_transs_.emplace(r_trans->trans_id(), r_trans); - return *r_ver_loop; - } - } - } else { - r_ver->r_transs_.emplace(r_trans->trans_id(), r_trans); - } - - return *r_ver; - } - - // actually we do not need to alter here. - virtual uint64_t GetVisiableVersion(const uint64_t item_id, TransDesc* const r_trans) { - return item_vers_[item_id].size() - 1; - } - - public: - std::map> active_trans_; - std::map> commit_trans_; - std::map> abort_trans_; - std::vector commit_order_; - - private: - uint64_t act_cnt_; - std::map latest_commit_time_; -}; - -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/env/si_env.h b/src/3ts/backend/cca/occ_algorithm/env/si_env.h deleted file mode 100644 index 3476d36a..00000000 --- a/src/3ts/backend/cca/occ_algorithm/env/si_env.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include - -#include "../occ_algorithm.h" - -namespace ttts { -namespace occ_algorithm { -struct Snapshot { - uint64_t t_min; - uint64_t t_max; - uint64_t t_id; - std::set t_active_id; -}; - -template class EnvDesc, typename AnomalyType> -class SITransactionDesc : public TransactionDescBase { - public: - using env_desc_type = EnvDesc; - SITransactionDesc(const uint64_t trans_id, const uint64_t start_ts, Snapshot&& snapshot, - env_desc_type& env_desc) - : TransactionDescBase(trans_id, env_desc), - start_ts_(start_ts), - commit_ts_(0), - back_check_(false), - snapshot_(snapshot) {} - virtual std::optional CheckConflict(const uint64_t commit_ts) = 0; - virtual std::optional Commit(const uint64_t commit_ts) { - commit_ts_ = commit_ts; - THROW_ANOMALY(CheckConflict(commit_ts)); - TransactionDescBase::Commit(); - return {}; - } - const Snapshot& snapshot() const { return snapshot_; } - uint64_t start_ts() const { return start_ts_; } - uint64_t commit_ts() const { return commit_ts_; } - void set_back_check() { back_check_ = true; }; - bool back_check() { return back_check_; } - - private: - const uint64_t start_ts_; - uint64_t commit_ts_; - bool back_check_; // used by focc, active trans r_set is not complete. so we re-check it later by - const Snapshot snapshot_; -}; - -template -class SIEnvironmentDesc : public EnvironmentBase { - static_assert( - std::is_base_of_v, TransDesc>, - "TransDesc with SIEnvironmentDesc should base of SITransactionDesc"); - - public: - using EnvironmentBase::item_vers_; - using EnvironmentBase::history_; - using EnvironmentBase::os_; - - public: - using trans_desc_type = TransDesc; - - SIEnvironmentDesc(const History& history, std::ostream* const os) - : EnvironmentBase(history, os), trans_id_cnt_(1), act_cnt_(1) {} - - Snapshot valueSnapShot(const uint64_t trans_id) const { - Snapshot res; - res.t_min = active_trans_.empty() ? 0 : active_trans_.begin()->first; - res.t_max = commit_trans_.empty() ? 0 : commit_trans_.rbegin()->first + 1; - res.t_id = trans_id; - for (const auto& i : active_trans_) { - res.t_active_id.insert(i.first); - } - return res; - } - uint64_t valueRealTransId(const uint64_t trans_id) { - if (!real_tran_id_.count(trans_id)) { - real_tran_id_[trans_id] = trans_id_cnt_; - ++trans_id_cnt_; - } - return real_tran_id_[trans_id]; - } - std::vector DoCheck() { - // initial first version. - // add by ym: In SI we init first version here. And in RC, we init it at construction. - const uint64_t id = valueRealTransId(history_.trans_num() + 1); - commit_trans_[id] = std::make_unique(id, act_cnt_, valueSnapShot(id), *this); - for (uint64_t item_id = 0; item_id < history_.item_num(); ++item_id) { - this->CommitVersion(item_id, commit_trans_[id].get()); - ++act_cnt_; - } - commit_trans_[id]->Commit(act_cnt_); - ++act_cnt_; - // uint32_t anomaly_count = 0; - std::vector ret_anomally; - for (const Operation& op : history_.operations()) { - const uint64_t real_id = valueRealTransId(op.trans_id()); - if (abort_trans_.count(real_id)) continue; - if (active_trans_.count(real_id) == 0) { - active_trans_[real_id] = - std::make_unique(real_id, act_cnt_, valueSnapShot(real_id), *this); - } - auto& trans = *active_trans_[real_id]; - switch (op.type()) { - case Operation::Type::READ: { - trans.Read(op.item_id()); - break; - } - case Operation::Type::WRITE: { - trans.Write(op.item_id()); - break; - } - case Operation::Type::SCAN_ODD: { - for (uint64_t item_id = 0; item_id < item_vers_.size(); ++item_id) { - trans.Read(item_id, [](const uint64_t version) { return version % 2 == 0; }); - } - break; - } - case Operation::Type::COMMIT: { - if (std::optional a = trans.Commit(act_cnt_); a.has_value()) { - ret_anomally.push_back(a.value()); - TRY_LOG(os_) << a.value() << " " << op.trans_id() << std::endl; - //++anomaly_count; - trans.Abort(); - abort_trans_[real_id] = std::move(active_trans_[real_id]); - active_trans_.erase(real_id); - } else { - commit_trans_[real_id] = std::move(active_trans_[real_id]); - active_trans_.erase(real_id); - } - break; - } - case Operation::Type::ABORT: { - trans.Abort(); - abort_trans_[real_id] = std::move(active_trans_[real_id]); - active_trans_.erase(real_id); - break; - } - default: - assert(false); - } - ++act_cnt_; - } - return ret_anomally; - } - - virtual uint64_t GetVisiableVersion(const uint64_t item_id, TransDesc* const r_trans) { - for (auto it = item_vers_[item_id].rbegin(); it != item_vers_[item_id].rend(); ++it) { - if (TupleSatisfiesMVCC(*it, r_trans->snapshot())) { - return (*it)->version_; - } - } - assert(false); - return 0; - } - - std::optional GetLatestCommitTime(const uint64_t item_id) const { - const auto it = latest_commit_time_.find(item_id); - return it == latest_commit_time_.end() ? std::optional() - : std::optional(it->second); - } - void UpdateCommitTime(const uint64_t item_id, uint64_t ts) { latest_commit_time_[item_id] = ts; } - static bool TupleSatisfiesMVCC(std::unique_ptr>& tuple, - const Snapshot& snapshot) { - if (tuple->w_trans_->is_aborted()) { - return false; - } - if (tuple->w_trans_->is_committed()) { - if (tuple->w_trans_->trans_id() < snapshot.t_min) return true; - if (tuple->w_trans_->trans_id() >= snapshot.t_max) return false; - return snapshot.t_active_id.count(tuple->w_trans_->trans_id()) == 0; - } - return tuple->w_trans_->trans_id() == snapshot.t_id; - } - - public: - std::map> active_trans_; - std::map> commit_trans_; - std::map> abort_trans_; - - private: - uint64_t trans_id_cnt_; - uint64_t act_cnt_; - std::map real_tran_id_; // not assume that trans ids are incremental - std::map latest_commit_time_; -}; -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/occ_algorithm.h b/src/3ts/backend/cca/occ_algorithm/occ_algorithm.h deleted file mode 100644 index 0bb75ff1..00000000 --- a/src/3ts/backend/cca/occ_algorithm/occ_algorithm.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include "../algorithm.h" - -namespace ttts { -namespace occ_algorithm { - -template -struct ItemVersionDesc { - ItemVersionDesc(const uint64_t item_id, const uint64_t version, TransDesc* const w_trans) - : item_id_(item_id), version_(version), w_trans_(w_trans) {} - ItemVersionDesc(const ItemVersionDesc&) = delete; - ItemVersionDesc(ItemVersionDesc&&) = delete; - const uint64_t item_id_; - const uint64_t version_; - TransDesc* w_trans_; - std::unordered_map r_transs_; -}; - -#define THROW_ANOMALY(expression) \ - do { \ - const auto a = (expression); \ - if (a.has_value()) { \ - return a; \ - } \ - } while (0) - -template -bool Has(const Container& container, const typename Container::key_type& key) { - return container.find(key) != container.end(); -} - -template -typename Container::mapped_type AssertGet(const Container& container, - const typename Container::key_type& key) { - assert(Has(container, key)); - return container.find(key)->second; -} -template -class EnvironmentBase { - public: - EnvironmentBase(const History& history, std::ostream* const os) - : item_vers_(history.item_num()), history_(history), os_(os) {} - virtual ~EnvironmentBase() = default; - virtual std::vector DoCheck() = 0; - bool HasVersion(const uint64_t item_id, const uint64_t version) { - return item_vers_[item_id].size() > version; - } - - ItemVersionDesc& GetVersion(const uint64_t item_id, const uint64_t version) { - assert(HasVersion(item_id, version)); - return *item_vers_[item_id][version]; - } - // put an version in the item_vers_ - virtual ItemVersionDesc& CommitVersion(const uint64_t item_id, - TransDesc* const w_trans) { - const uint64_t version = item_vers_[item_id].size(); - item_vers_[item_id].push_back( - std::make_unique>(item_id, version, w_trans)); - return *item_vers_[item_id].back(); - } - - virtual uint64_t GetVisiableVersion(const uint64_t item_id, TransDesc* const r_trans) = 0; - - virtual ItemVersionDesc& ReadVersion(const uint64_t item_id, const uint64_t version, - TransDesc* const r_trans) { - const auto& r_ver = item_vers_[item_id][version]; - r_ver->r_transs_.emplace(r_trans->trans_id(), r_trans); - assert(r_ver->version_ == version); - return *r_ver; - } - - protected: - std::vector>>> item_vers_; - const History& history_; - std::ostream* const os_; -}; - -template class EnvDesc, typename AnomalyType> -class TransactionDescBase { - public: - using item_type = ItemVersionDesc; - using env_desc_type = EnvDesc; - using set_type = std::unordered_map*>; - TransactionDescBase(const uint64_t trans_id, env_desc_type& env_desc) - : env_desc_(env_desc), trans_id_(trans_id), committed_() {} - virtual ~TransactionDescBase() {} - TransactionDescBase(const TransactionDescBase&) = default; - TransactionDescBase(TransactionDescBase&&) = delete; - - bool is_running() const { return !committed_.has_value(); } - bool is_committed() const { return committed_.has_value() && committed_.value(); } - bool is_aborted() const { return committed_.has_value() && !committed_.value(); } - uint64_t trans_id() const { return trans_id_; } - virtual const set_type& r_items() const { return r_items_; } - virtual const set_type& w_items() const { return w_items_; } - - virtual void Read(const uint64_t item_id, std::function&& predicate = {}) { - if (!Has(w_items_, item_id) && !Has(r_items_, item_id)) { - const uint64_t version = env_desc_.GetVisiableVersion(item_id, static_cast(this)); - if (!predicate /* without predicate */ || predicate(version) /* predicate satisfied */) { - r_items_[item_id] = &env_desc_.ReadVersion(item_id, version, static_cast(this)); - } - } - } - - virtual void Write(const uint64_t item_id) { - // std::cout<<"base write"; - w_items_[item_id] = nullptr; // occupy a location - } - - virtual std::optional Commit() { - for (auto& pair : - w_items_) { // add by ym : while using RU, w_items_ is empty. So jump this for-loop - pair.second = &env_desc_.CommitVersion( - pair.first, static_cast(this)); - } - committed_ = true; - return {}; - } - - virtual std::optional Abort() { - committed_ = false; - return {}; - } - - protected: - env_desc_type& env_desc_; - const uint64_t trans_id_; - std::optional committed_; - set_type r_items_; - set_type w_items_; -}; - -} // namespace occ_algorithm - -template -class OCCAlgorithm : public RollbackRateAlgorithm { - public: - OCCAlgorithm() : RollbackRateAlgorithm(TransDesc::name + " with OCC") {} - virtual ~OCCAlgorithm() {} - virtual bool Check(const History& history, std::ostream* const os) const override { - return RollbackNum(history, os).size() == 0; - } - std::vector RollbackNum(const History& history, std::ostream* const os = nullptr) const { - typename TransDesc::env_desc_type c(history, os); - std::vector ret_anomally = c.DoCheck(); - TRY_LOG(os) << "aborted: " << ret_anomally.size(); - return ret_anomally; - } -}; - -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/trans/bocc_trans.h b/src/3ts/backend/cca/occ_algorithm/trans/bocc_trans.h deleted file mode 100644 index f3cfa9f7..00000000 --- a/src/3ts/backend/cca/occ_algorithm/trans/bocc_trans.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: elioyan@tencent.com - * - */ -#pragma once -#include "../env/si_env.h" - -namespace ttts { -namespace occ_algorithm { -class BoccTransactionDesc - : public SITransactionDesc { - public: - static std::string name; - - BoccTransactionDesc(const uint64_t trans_id, const uint64_t start_ts, Snapshot&& snapshot, - env_desc_type& env_desc) - : SITransactionDesc(trans_id, start_ts, std::move(snapshot), env_desc) {} - virtual std::optional CheckConflict(const uint64_t commit_ts) override { - // History history_with_write_version = env_desc_.GetHistory(); - for (const auto& ptr : env_desc_.commit_trans_) { - if (ptr.second->commit_ts() > start_ts() && ptr.second->commit_ts() < this->commit_ts()) { - if (Intersect(r_items_, ptr.second->w_items_)) { - return Anomally::UNKNOWN; - } - } - } - return {}; - } - - private: - bool Intersect(set_type& left, set_type& right) { - for (auto& a : left) { - if (right.count(a.first) > 0) return true; - } - return false; - } -}; -std::string BoccTransactionDesc::name = "bocc algorithm"; - -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/trans/focc_trans.h b/src/3ts/backend/cca/occ_algorithm/trans/focc_trans.h deleted file mode 100644 index fe87de9b..00000000 --- a/src/3ts/backend/cca/occ_algorithm/trans/focc_trans.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: elioyan@tencent.com - * - */ -#pragma once -#include "../env/si_env.h" - -namespace ttts { -namespace occ_algorithm { -class FoccTransactionDesc - : public SITransactionDesc { - public: - static std::string name; - - FoccTransactionDesc(const uint64_t trans_id, const uint64_t start_ts, Snapshot&& snapshot, - env_desc_type& env_desc) - : SITransactionDesc(trans_id, start_ts, std::move(snapshot), env_desc) {} - virtual std::optional CheckConflict(const uint64_t commit_ts) override { - // History history_with_write_version = env_desc_.GetHistory(); - for (const auto& ptr : env_desc_.active_trans_) { - if (ptr.second->start_ts() < this->commit_ts() && ptr.second->commit_ts() == 0) { - ptr.second->set_back_check(); - if (Intersect(w_items_, ptr.second->r_items_)) { - return Anomally::UNKNOWN; - } - } - } - for (const auto& ptr : env_desc_.commit_trans_) { - // if (ptr.second->commit_ts() > start_ts() && ptr.second->commit_ts() < this->commit_ts()) { - // once it - if (back_check()) { - if (Intersect(r_items_, ptr.second->w_items_)) { - return Anomally::UNKNOWN; - } - } - } - return {}; - } - - private: - bool Intersect(set_type& left, set_type& right) { - for (auto& a : left) { - if (right.count(a.first) > 0) return true; - } - return false; - } -}; -std::string FoccTransactionDesc::name = "FoccTransactionDesc"; - -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/trans/ssi_trans.h b/src/3ts/backend/cca/occ_algorithm/trans/ssi_trans.h deleted file mode 100644 index 25d59394..00000000 --- a/src/3ts/backend/cca/occ_algorithm/trans/ssi_trans.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: moggma@tencent.com - * - */ -#pragma once - -#include "../env/si_env.h" - -namespace ttts { -namespace occ_algorithm { - -class SSITransactionDesc - : public SITransactionDesc { - public: - SSITransactionDesc(const uint64_t trans_id, const uint64_t start_ts, Snapshot&& snapshot, - env_desc_type& env_desc) - : SITransactionDesc( - trans_id, start_ts, std::move(snapshot), env_desc) {} - static std::string name; - std::optional CheckConflict(uint64_t commit_ts) { - std::optional a; - for (const auto& i : r_items_) { - a = ReadConflict(i.first, i.second->version_); - if (a.has_value()) return a; - } - for (const auto& i : w_items_) { - a = WriteConflict(i.first); - if (a.has_value()) return a; - } - if (!in_conflict().empty() && !out_conflict().empty()) { - return std::optional(Anomally::WRITE_SKEW); - } - for (const auto& i : w_items_) { - const auto tmp = env_desc_.GetLatestCommitTime(i.first); - if (tmp.has_value() && tmp.value() <= commit_ts && tmp.value() >= start_ts()) { - return std::optional(Anomally::WW_CONFLICT); - } - } - for (const auto& i : w_items_) { - env_desc_.UpdateCommitTime(i.first, commit_ts); - } - commit_ts_ = commit_ts; - return {}; - } - - std::optional ReadConflict(const uint64_t item_id, const uint64_t read_version) { - for (uint64_t version = 0; env_desc_.HasVersion(item_id, version); ++version) { - const auto& it = env_desc_.GetVersion(item_id, version); - if (it.w_trans_->trans_id() == trans_id()) continue; - if (it.w_trans_->is_running()) { - it.w_trans_->UpInConflict(this); - UpOutConflict(it.w_trans_); - } - if (version > read_version) { - if (it.w_trans_->is_committed() && !it.w_trans_->out_conflict().empty()) { - return std::optional(Anomally::WRITE_SKEW); - } - if (!it.w_trans_->is_aborted()) { - it.w_trans_->UpInConflict(this); - UpOutConflict(it.w_trans_); - } - } - } - return {}; - } - std::optional WriteConflict(const uint64_t item_id) { - for (uint64_t version = 0; env_desc_.HasVersion(item_id, version); ++version) { - const auto& it = env_desc_.GetVersion(item_id, version); - for (const auto& i : it.r_transs_) { - if (i.second->trans_id() == trans_id()) continue; - if (i.second->is_running() || - (i.second->is_committed() && i.second->commit_ts() > start_ts())) { - if (i.second->is_committed() && !i.second->in_conflict().empty()) { - return std::optional(Anomally::WRITE_SKEW); - } - i.second->UpOutConflict(this); - UpInConflict(i.second); - } - } - } - return {}; - } - - virtual std::optional Abort() override { - if (is_aborted()) return {}; - committed_ = false; - for (const auto& i : out_conflict()) { - i->DownInConflict(this); - } - for (const auto& i : in_conflict()) { - i->DownOutConflict(this); - } - return {}; - } - - void UpInConflict(SSITransactionDesc* trans_id) { in_conflict_.insert(trans_id); } - void UpOutConflict(SSITransactionDesc* trans_id) { out_conflict_.insert(trans_id); } - void DownInConflict(SSITransactionDesc* trans_id) { in_conflict_.erase(trans_id); } - void DownOutConflict(SSITransactionDesc* trans_id) { out_conflict_.erase(trans_id); } - const std::set& in_conflict() const { return in_conflict_; } - const std::set& out_conflict() const { return out_conflict_; } - uint64_t commit_ts() const { - assert(commit_ts_.has_value()); - return commit_ts_.value(); - } - - private: - std::optional commit_ts_; - std::set in_conflict_; - std::set out_conflict_; -}; - -std::string SSITransactionDesc::name = "SSI"; -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/occ_algorithm/trans/wsi_trans.h b/src/3ts/backend/cca/occ_algorithm/trans/wsi_trans.h deleted file mode 100644 index 7226e73e..00000000 --- a/src/3ts/backend/cca/occ_algorithm/trans/wsi_trans.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: moggma@tencent.com - * - */ -#pragma once - -#include "../env/si_env.h" - -namespace ttts { -namespace occ_algorithm { - -class WSITransactionDesc - : public SITransactionDesc { - public: - WSITransactionDesc(const uint64_t trans_id, const uint64_t start_ts, Snapshot&& snapshot, - env_desc_type& env_desc) - : SITransactionDesc( - trans_id, start_ts, std::move(snapshot), env_desc) {} - static std::string name; - std::optional CheckConflict(uint64_t commit_ts) override { - if (!w_items_.empty()) - for (const auto& i : r_items_) { - const auto tmp = env_desc_.GetLatestCommitTime(i.first); - if (tmp.has_value() && tmp.value() <= commit_ts && tmp.value() >= start_ts()) { - return std::optional(Anomally::RW_CONFLICT); - } - } - for (const auto& i : w_items_) { - env_desc_.UpdateCommitTime(i.first, commit_ts); - } - return {}; - } -}; - -std::string WSITransactionDesc::name = "WSI"; -} // namespace occ_algorithm -} // namespace ttts diff --git a/src/3ts/backend/cca/serializable_algorithm.h b/src/3ts/backend/cca/serializable_algorithm.h deleted file mode 100644 index 4f7c28d4..00000000 --- a/src/3ts/backend/cca/serializable_algorithm.h +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include "algorithm.h" - -namespace ttts { - -enum class SerializeLevel { - ALL_SAME, // committed transactions and aborted transactions must read same versions - COMMIT_SAME, // only committed transactions must read same versions - FINAL_SAME // reading same is not necessary -}; - -template -std::string ToString(); -template -std::string ToString(); - -template <> -std::string ToString() { - return "ALL_SAME"; -} -template <> -std::string ToString() { - return "COMMIT_SAME"; -} -template <> -std::string ToString() { - return "FINAL_SAME"; -} -template <> -std::string ToString() { - return "UNCOMMITTED_READ"; -} -template <> -std::string ToString() { - return "COMMITTED_READ"; -} -template <> -std::string ToString() { - return "REPEATABLE_READ"; -} -template <> -std::string ToString() { - return "SI_READ"; -} - -// The executing result of one history. The history is serializable if the two results of original -// history and serialized history are same. -// The history result contains each transaction's read result and each item's final version. -class HistoryResult { - public: - HistoryResult(const uint64_t trans_num) : trans_results_(trans_num) {} - HistoryResult(HistoryResult&&) = default; - ~HistoryResult() {} - HistoryResult& operator=(HistoryResult&&) = default; - - // Check if all transactions read the same versions - bool ReadEqual(const HistoryResult& result) const { - return trans_results_ == result.trans_results_; - } - - // Check if all committed transaction read the same versions, ignore aborted transactions - bool CommitReadEqual(const HistoryResult& result) const { - if (trans_results_.size() != result.trans_results_.size()) { - return false; - } - for (uint64_t trans_id = 0; trans_id < trans_results_.size(); ++trans_id) { - if ((trans_results_[trans_id].committed_ != - result.trans_results_[trans_id].committed_) || // different transaction status - (trans_results_[trans_id].committed_ && - trans_results_[trans_id].read_results_ != - result.trans_results_[trans_id].read_results_)) { - return false; - } // different read results - } - return true; - } - - // Check if the final versions of each item are same. - bool FinalEqual(const HistoryResult& result) const { - return item_final_versions_ == result.item_final_versions_; - } - - // Add version to read result to compare with other history results. - void PushTransReadResult(const uint64_t trans_id, const uint64_t item_id, - const uint64_t version) { - assert(trans_id < trans_results_.size()); - trans_results_[trans_id].read_results_.emplace_back( - std::vector>{{item_id, version}}); - } - - // Add versions to read result to compare with other history results. - void PushTransReadResult(const uint64_t trans_id, - std::vector>&& item_vers) { - assert(trans_id < trans_results_.size()); - trans_results_[trans_id].read_results_.emplace_back(std::move(item_vers)); - } - - // Mark transaction as committed transaction. - void SetTransCommitted(const uint64_t trans_id, const bool committed) { - assert(trans_id < trans_results_.size()); - trans_results_[trans_id].committed_ = committed; - } - - // Record the final version of each variables to compare with other history results. - void SetItemFinalVersions(std::vector&& versions) { - item_final_versions_ = std::move(versions); - } - - private: - // Record each version the transaction has been read and whether the transaction is committed or - // aborted. - struct TransResult { - bool operator==(const TransResult& result) const { - return read_results_ == result.read_results_ && committed_ == result.committed_; - } - std::vector>> read_results_; - bool committed_; - }; - - std::vector trans_results_; // size = trans_num - std::vector item_final_versions_; // size = item_num -}; - -// Traverse all serialized histories and pass each history to handle. Once handle returns true, then -// return true. -bool Serialize(const History& history, const std::function& handle) { - std::vector> trans_operations(history.trans_num()); - for (const Operation& operation : history.operations()) { - trans_operations[operation.trans_id()].push_back(operation); - } - std::vector trans_order; - for (uint64_t trans_id = 0; trans_id < history.trans_num(); ++trans_id) { - trans_order.push_back(trans_id); - } - do { - std::vector operations; - for (uint64_t trans_id : trans_order) - for (const Operation& operation : trans_operations[trans_id]) { - operations.push_back(operation); - } - if (handle(History(history.trans_num(), history.item_num(), std::move(operations)))) { - return true; - } - } while (std::next_permutation(trans_order.begin(), trans_order.end())); - return false; -} - -template -inline static bool ResultsEqual(const HistoryResult& _1, const HistoryResult& _2); - -template -inline static HistoryResult Result(const History& history); - -// Main entry of the algorithm. -template -class HistorySerializableAlgorithm : public HistoryAlgorithm { - public: - HistorySerializableAlgorithm() - : HistoryAlgorithm("Serialize " + ToString() + " " + ToString()) {} - virtual ~HistorySerializableAlgorithm() {} - - virtual bool Check(const History& history, std::ostream* const os) const override { - History history_with_write_version = history; - history_with_write_version.UpdateWriteVersions(); - const auto check_serial = [this, &history_with_write_version, &os](History&& serial_history) { - // Check if the result of original history is same as serialized history. - if (ResultsEqual(Result(history_with_write_version), Result(serial_history))) { - TRY_LOG(os) << serial_history; - return true; // break - } - return false; // continue - }; - return Serialize(history_with_write_version, check_serial); - } - - private: -}; - -template <> -bool ResultsEqual(const HistoryResult& _1, const HistoryResult& _2) { - return _1.ReadEqual(_2) && _1.FinalEqual(_2); -} - -template <> -bool ResultsEqual(const HistoryResult& _1, const HistoryResult& _2) { - return _1.CommitReadEqual(_2) && _1.FinalEqual(_2); -} - -template <> -bool ResultsEqual(const HistoryResult& _1, const HistoryResult& _2) { - return _1.FinalEqual(_2); -} - -// Call read_version for each item to determine which version to read and check whether is odd. -std::vector> ScanOdd( - const uint64_t item_num, const std::function& read_version) { - std::vector> scan_item_vers; - for (uint64_t item_id = 0; item_id < item_num; ++item_id) { - const uint64_t version = read_version(item_id); - if (version % 2 == 0) { - scan_item_vers.emplace_back(item_id, version); - } - } - return scan_item_vers; -} - -// Get result of the history with uncomitted read strategy. -// A write version wrote by an uncomitted write transaction, may be read by other read transactions. -// When a transaction writes a version, update the version to item_version_link directly and release -// the old version if the transaction has wrote twice to a same item. -// When a transaction aborts, release all versions the transaction has wrote. -template <> -HistoryResult Result(const History& history) { - HistoryResult result(history.trans_num()); - std::vector>> trans_write_item_versions( - history.trans_num(), std::vector>(history.item_num())); - std::vector>> item_version_link( - history.item_num(), {0}); /* 0 is always the first version */ - const auto latest_version = [&item_version_link](const uint64_t item_id) { - const std::vector>& version_link = item_version_link[item_id]; - uint64_t i = version_link.size() - 1; - for (; i >= 0 && !version_link[i].has_value(); --i) - ; - assert(i < version_link.size()); - return version_link[i].value(); - }; - const auto release_version = [&item_version_link](const uint64_t item_id, - const uint64_t version) { - for (std::optional& cur_version : item_version_link[item_id]) { - if (cur_version.has_value() && cur_version.value() == version) { - cur_version = {}; - return; - } - } - assert(false); // cannot found the version - }; - for (const Operation& operation : history.operations()) { - if (operation.type() == Operation::Type::READ) { - // we did not change version when resort operations, so we use latest version instead of - // operation.version() - result.PushTransReadResult(operation.trans_id(), operation.item_id(), - latest_version(operation.item_id())); - } else if (operation.type() == Operation::Type::SCAN_ODD) { - result.PushTransReadResult( - operation.trans_id(), - ScanOdd(history.item_num(), - [&latest_version](const uint64_t item_id) { return latest_version(item_id); })); - } else if (operation.type() == Operation::Type::WRITE) { - item_version_link[operation.item_id()].push_back(operation.version()); - std::optional& my_last_write_version = - trans_write_item_versions[operation.trans_id()][operation.item_id()]; - if (my_last_write_version.has_value()) { - release_version(operation.item_id(), my_last_write_version.value()); - } - my_last_write_version = operation.version(); - } else if (operation.type() == Operation::Type::ABORT) { - for (uint64_t item_id = 0; item_id < history.item_num(); ++item_id) { - const std::optional& my_last_write_version = - trans_write_item_versions[operation.trans_id()][item_id]; - if (my_last_write_version.has_value()) { - release_version(item_id, my_last_write_version.value()); - } - } - result.SetTransCommitted(operation.trans_id(), false); - } else if (operation.type() == Operation::Type::COMMIT) { - result.SetTransCommitted(operation.trans_id(), true); - } else { - throw "Unexpected operation type:" + std::to_string(static_cast(operation.type())); - } - } - - std::vector final_versions(history.item_num()); - for (uint64_t item_id = 0; item_id < history.item_num(); ++item_id) { - final_versions[item_id] = latest_version(item_id); - } - result.SetItemFinalVersions(std::move(final_versions)); - return result; -} - -// Get result of the history with at least committed read strategy. -// Which version to read depends on read_version callback. -// When a transaction writes a version, record the version to write set only. -// When a transaction commits, update all versions in write set to latest_versions then the versions -// can be seend by other read transactions. -template -HistoryResult ResultAtLeastCommittedRead(const History& history, ReadVersion&& read_version) { - HistoryResult result(history.trans_num()); - std::vector>> trans_write_item_versions( - history.trans_num(), std::vector>(history.item_num())); - std::vector latest_versions(history.item_num(), 0); - for (const Operation& operation : history.operations()) { - if (operation.type() == Operation::Type::READ) { - result.PushTransReadResult(operation.trans_id(), operation.item_id(), - read_version(operation.trans_id(), operation.item_id(), - trans_write_item_versions, latest_versions)); - } else if (operation.type() == Operation::Type::SCAN_ODD) { - result.PushTransReadResult( - operation.trans_id(), - ScanOdd(history.item_num(), - std::bind(read_version, operation.trans_id(), std::placeholders::_1, - trans_write_item_versions, latest_versions))); - } else if (operation.type() == Operation::Type::WRITE) { - trans_write_item_versions[operation.trans_id()][operation.item_id()] = operation.version(); - } else if (operation.type() == Operation::Type::ABORT) { - result.SetTransCommitted(operation.trans_id(), false); - } else if (operation.type() == Operation::Type::COMMIT) { - for (uint64_t item_id = 0; item_id < history.item_num(); item_id++) { - std::optional write_version = - trans_write_item_versions[operation.trans_id()][item_id]; - if (write_version.has_value()) { - latest_versions[item_id] = write_version.value(); - } - } - result.SetTransCommitted(operation.trans_id(), true); - } else { - throw "Unexpected operation type:" + std::to_string(static_cast(operation.type())); - } - } - result.SetItemFinalVersions(std::move(latest_versions)); - return result; -} - -// Get result of the history with committed read strategy. -// Always read the latest version. -template <> -HistoryResult Result(const History& history) { - return ResultAtLeastCommittedRead( - history, - [](const uint64_t trans_id, const uint64_t item_id, - const std::vector>>& trans_write_item_versions, - const std::vector& latest_versions) { - const std::optional& write_version = trans_write_item_versions[trans_id][item_id]; - if (write_version.has_value()) { // item has written - return write_version.value(); - } else { - return latest_versions[item_id]; - } - }); -} - -// Get result of the history with repeatable read strategy. -// Read the latest version only when the item has not been read or written. -template <> -HistoryResult Result(const History& history) { - std::vector>> trans_read_item_versions( - history.trans_num(), std::vector>(history.item_num())); - return ResultAtLeastCommittedRead( - history, - [&trans_read_item_versions]( - const uint64_t trans_id, const uint64_t item_id, - const std::vector>>& trans_write_item_versions, - const std::vector& latest_versions) { - const std::optional& write_version = trans_write_item_versions[trans_id][item_id]; - if (write_version.has_value()) { // item has written - return write_version.value(); - } else { - std::optional& read_version = trans_read_item_versions[trans_id][item_id]; - if (read_version.has_value()) { // item has read - read_version = latest_versions[item_id]; - } - return read_version.value(); - } - }); -} - -template <> -HistoryResult Result(const History& history) { - HistoryResult result(history.trans_num()); - std::vector latest_versions(history.item_num(), 0); - std::vector> trans_item_versions_backup(history.trans_num()); - std::vector> trans_item_versions_snapshot(history.trans_num()); - for (const Operation& operation : history.operations()) { - if (trans_item_versions_snapshot[operation.trans_id()].empty()) { - trans_item_versions_snapshot[operation.trans_id()] = latest_versions; - trans_item_versions_backup[operation.trans_id()] = latest_versions; - } - if (operation.type() == Operation::Type::READ) { - uint64_t read_version = - trans_item_versions_snapshot[operation.trans_id()][operation.item_id()]; - result.PushTransReadResult(operation.trans_id(), operation.item_id(), read_version); - } else if (operation.type() == Operation::Type::SCAN_ODD) { - result.PushTransReadResult( - operation.trans_id(), - ScanOdd(history.item_num(), [&trans_item_versions_snapshot, - trans_id = operation.trans_id()](const uint64_t item_id) { - return trans_item_versions_snapshot[trans_id][item_id]; - })); - } else if (operation.type() == Operation::Type::WRITE) { - trans_item_versions_snapshot[operation.trans_id()][operation.item_id()] = operation.version(); - } else if (operation.type() == Operation::Type::ABORT) { - result.SetTransCommitted(operation.trans_id(), false); - } else if (operation.type() == Operation::Type::COMMIT) { - for (uint64_t item_id = 0; item_id < history.item_num(); ++item_id) { - if (trans_item_versions_snapshot[operation.trans_id()][item_id] != - trans_item_versions_backup[operation.trans_id()][item_id]) { - latest_versions[item_id] = trans_item_versions_snapshot[operation.trans_id()][item_id]; - } - } - result.SetTransCommitted(operation.trans_id(), true); - } else { - throw "Unexpected operation type:" + std::to_string(static_cast(operation.type())); - } - } - - result.SetItemFinalVersions(std::move(latest_versions)); - return result; -} -} // namespace ttts diff --git a/src/3ts/backend/history/generator.h b/src/3ts/backend/history/generator.h deleted file mode 100644 index 0134d562..00000000 --- a/src/3ts/backend/history/generator.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include - -#include "../util/generic.h" - -namespace ttts { - -class HistoryGenerator { - public: - HistoryGenerator() {} - ~HistoryGenerator() {} - virtual void DeliverHistories(const std::function &handle) const = 0; -}; - -class InputHistoryGenerator : public HistoryGenerator { - public: - InputHistoryGenerator(const std::string &path) : path_(path) {} - ~InputHistoryGenerator() {} - virtual void DeliverHistories(const std::function &handle) const override { - std::ifstream fs(path_); - if (!fs) { - std::cerr << "Open Operation Sequences File Failed" << std::endl; - return; - } - for (History history; fs >> history;) { - handle(std::move(history)); - } - } - - private: - const std::string path_; -}; - -class RandomHistoryGenerator : public HistoryGenerator { - public: - RandomHistoryGenerator(const Options &opt, const uint64_t history_num) - : trans_num_(opt.trans_num), - item_num_(opt.item_num), - dml_operation_num_(opt.max_dml), - history_num_(history_num), - with_abort_(opt.with_abort), - tail_tcl_(opt.tail_tcl), - rd_(), - gen_(rd_()), - rand_trans_id_(0, trans_num_ - 1), - rand_item_id_(0, item_num_ - 1), - rand_bool_(0.5) {} - - ~RandomHistoryGenerator() {} - - virtual void DeliverHistories(const std::function &handle) const { - for (uint64_t history_no = 0; history_no < history_num_; ++history_no) { - if (tail_tcl_) { - handle(MakeDMLHistory() + MakeTCLHistory()); - } else { - handle(ShuffleHistory(MakeDMLHistory() + MakeTCLHistory())); - } - } - } - - History ShuffleHistory(History &&history) const { - std::vector last_pos(trans_num_, -1); - for (uint64_t i = 0; i < dml_operation_num_; ++i) last_pos[history[i].trans_id()] = i; - uint64_t left = -1; - std::uniform_int_distribution rand_pos; - for (uint64_t i = dml_operation_num_; i < history.size(); ++i) { - left = std::max(left, last_pos[history[i].trans_id()]) + 1; - if (left >= i) { - break; - } - rand_pos = std::uniform_int_distribution(left, i); - left = rand_pos(gen_); - - for (uint64_t j = i - 1; j >= left; --j) { - last_pos[history[j].trans_id()] = std::max(j + 1, last_pos[history[j].trans_id()]); - std::swap(history[j], history[j + 1]); - } - } - return history; - } - - History MakeDMLHistory() const { - std::vector dml_acts; - int64_t max_trans_id = -1; - int64_t max_item_id = -1; - const auto gen_rand_id = [&gen = gen_](std::uniform_int_distribution &rand_id_dis, - int64_t &cur_max_id) { - const uint64_t rand_id = rand_id_dis(gen); - return ((int64_t)rand_id <= cur_max_id) ? rand_id : (++cur_max_id); - }; - for (uint64_t dml_operation_no = 0; dml_operation_no < dml_operation_num_; ++dml_operation_no) { - const Operation::Type dml_type = - rand_bool_(gen_) ? Operation::Type::WRITE : Operation::Type::READ; - const uint64_t trans_id = gen_rand_id(rand_trans_id_, max_trans_id); - const uint64_t item_id = gen_rand_id(rand_item_id_, max_item_id); - dml_acts.emplace_back(dml_type, trans_id, item_id); - } - return History(trans_num_, item_num_, dml_acts); - } - - History MakeTCLHistory() const { - std::vector dtl_acts; - uint64_t abort_trans_num; - for (uint64_t trans_id = 0; trans_id < trans_num_; ++trans_id) { - dtl_acts.emplace_back( - (with_abort_ && rand_bool_(gen_)) ? Operation::Type::ABORT : Operation::Type::COMMIT, - trans_id); - if (dtl_acts.back().type() == Operation::Type::ABORT) { - abort_trans_num++; - } - } - - std::shuffle(dtl_acts.begin(), dtl_acts.end(), gen_); - return History(trans_num_, item_num_, dtl_acts, abort_trans_num); - } - - private: - const uint64_t trans_num_; - const uint64_t item_num_; - const uint64_t dml_operation_num_; - const uint64_t history_num_; - const bool with_abort_; - const bool tail_tcl_; - mutable std::random_device rd_; - mutable std::mt19937 gen_; - mutable std::uniform_int_distribution rand_trans_id_; - mutable std::uniform_int_distribution rand_item_id_; - mutable std::bernoulli_distribution rand_bool_; -}; - -class TraversalHistoryGenerator : public HistoryGenerator { - public: - TraversalHistoryGenerator(const Options &opt) - : trans_num_(opt.trans_num), - item_num_(opt.item_num), - dml_operation_num_(opt.max_dml), - subtask_num_(opt.subtask_num), - dfs_cnt_(opt.subtask_num - opt.subtask_id), - with_abort_(opt.with_abort), - tail_tcl_(opt.tail_tcl), - allow_empty_trans_(opt.allow_empty_trans), - dynamic_history_len_(opt.dynamic_history_len) {} - - void DeliverHistories(const std::function &handle) const { - std::vector tmp_operations; - RecursiveFillDMLHistory( - [this, &handle](const History &dml_history, const uint64_t max_trans_id) { - HandleDMLHistory(handle, dml_history, max_trans_id); - }, - tmp_operations, 0, 0); - } - - static uint64_t cut_down_; - - private: - void HandleHistory(const std::function &handle, const History &history) const { - History history_copy = history; // copy History - handle(std::move(history_copy)); - } - - void HandleTCLHistory(const std::function &handle, const History &dml_history, - const History &dtl_history) const { - // Firstly, append every dml_history with dtl_history. - History history_tot = dml_history + dtl_history; - // Then move dtl_history at a suitable location, forward. - RecursiveMoveForwardTCLOperation( - [this, &handle](const History &history) { HandleHistory(handle, history); }, history_tot, - dml_history.size()); - } - - void HandleDMLHistory(const std::function &handle, const History &dml_history, - const uint64_t max_trans_id) const { - std::vector dtl_operation_types; - RecursiveFillTCLHistory( - [this, &handle, &dml_history](const History &dtl_history) { - HandleTCLHistory(handle, dml_history, dtl_history); - }, - dtl_operation_types, max_trans_id, 0); - } - - bool OnlyOneTrans(const std::vector &operations) const { - for (uint64_t i = 1; i < operations.size(); ++i) { - if (operations[i].trans_id() != operations[i - 1].trans_id()) { - return false; - } - } - return true; - } - - void RecursiveFillDMLHistory(const std::function &handle, - std::vector &operations, uint64_t max_trans_id, - uint64_t max_item_id) const { - size_t cur = operations.size(); - if (dynamic_history_len_ || cur == dml_operation_num_) { - if (dfs_cnt_ == subtask_num_) { - if (max_trans_id == trans_num_ || allow_empty_trans_) { - handle(History(max_trans_id, item_num_, operations), max_trans_id); - } else { - cut_down_++; - } - dfs_cnt_ -= subtask_num_; - } - ++dfs_cnt_; - } - if (cur != dml_operation_num_) { - // Make sure trans id is increment - for (uint64_t trans_id = 0; trans_id < std::min(max_trans_id + 1, trans_num_); ++trans_id) { - for (uint64_t item_id = 0; item_id < std::min(max_item_id + 1, item_num_); ++item_id) { - for (Operation::Type dml_operation_type : - {Operation::Type::READ, Operation::Type::WRITE}) { - // Continuous read in same transaction is meaningless - if (cur > 0 && dml_operation_type == Operation::Type::READ && - dml_operation_type == operations[cur - 1].type() && - trans_id == operations[cur - 1].trans_id() && - item_id == operations[cur - 1].item_id()) { - continue; - } - operations.emplace_back(dml_operation_type, trans_id, item_id); - RecursiveFillDMLHistory(handle, operations, std::max(trans_id + 1, max_trans_id), - std::max(item_id + 1, max_item_id)); - operations.pop_back(); - } - } - } - } - } - - void RecursiveFillTCLHistory(const std::function &handle, - std::vector &dtl_operation_types, - const uint64_t max_trans_id, uint64_t abort_trans_num) const { - if (!with_abort_) { - dtl_operation_types.assign(max_trans_id, Operation::Type::COMMIT); - } - if (dtl_operation_types.size() == max_trans_id) { - std::vector trans_order; - for (uint64_t trans_id = 0; trans_id < max_trans_id; ++trans_id) { - trans_order.push_back(trans_id); - } - do { - std::vector dtl_operations; - for (uint64_t trans_id : trans_order) { - dtl_operations.emplace_back(dtl_operation_types[trans_id], trans_id); - } - handle(History(max_trans_id, item_num_, dtl_operations, abort_trans_num)); - } while (std::next_permutation(trans_order.begin(), trans_order.end())); - } else { - for (Operation::Type dtl_operation_type : {Operation::Type::COMMIT, Operation::Type::ABORT}) { - dtl_operation_types.emplace_back(dtl_operation_type); - if (dtl_operation_type == Operation::Type::ABORT) { - ++abort_trans_num; - } - RecursiveFillTCLHistory(handle, dtl_operation_types, max_trans_id, abort_trans_num); - dtl_operation_types.pop_back(); - } - } - } - - void RecursiveMoveForwardTCLOperation(const std::function &handle, - History &history, const size_t pos) const { - if (pos == history.size() || tail_tcl_) { - handle(history); - } else { - RecursiveMoveForwardTCLOperation(handle, history, pos + 1); - size_t i = pos; - while (i > 0 && history[i - 1].trans_id() != history[i].trans_id() && - (history[i - 1].IsPointDML() || history[i - 1].type() == Operation::Type::SCAN_ODD)) { - std::swap(history[i - 1], history[i]); - RecursiveMoveForwardTCLOperation(handle, history, pos + 1); - --i; - } - while (i < pos) { - std::swap(history[i], history[i + 1]); - ++i; - } - } - } - - const uint64_t trans_num_; - const uint64_t item_num_; - const uint64_t dml_operation_num_; - const uint64_t subtask_num_; - mutable uint64_t dfs_cnt_; - const bool with_abort_; - const bool tail_tcl_; - const bool allow_empty_trans_; - const bool dynamic_history_len_; -}; -uint64_t TraversalHistoryGenerator::cut_down_ = 0; -} // namespace ttts diff --git a/src/3ts/backend/history/outputter.h b/src/3ts/backend/history/outputter.h deleted file mode 100644 index 3f97c5f4..00000000 --- a/src/3ts/backend/history/outputter.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include "../util/generic.h" -#include "generator.h" -namespace ttts { - -struct CheckResult { - CheckResult() = default; - CheckResult(const CheckResult&) = delete; - CheckResult(CheckResult&&) = default; - ~CheckResult() {} - bool ok_; - std::string algorithm_name_; - std::ostringstream info_; - std::optional> rollback_type_vec_; - std::optional time_compt_; -}; - -class Outputter { - public: - Outputter(const std::string& output_filename) : os_(output_filename) {} - virtual ~Outputter() {} - virtual void Output(const std::vector>& results, - const History& history) = 0; - virtual void ResultToFile(const std::string&) = 0; - - protected: - std::ofstream os_; -}; - -// Output rollback result -class RollbackRateOutputter : public Outputter { - public: - RollbackRateOutputter(const std::string& output_filename) : Outputter(output_filename) {} - virtual ~RollbackRateOutputter() { ResultToFile("finish success"); } - virtual void ResultToFile(const std::string& s) override { - os_ << s << std::endl; - for (const auto& i : tot_) { - os_ << ">>>>>> " << i.first << std::endl; - os_ << rollback_num_[i.first] << "/" << i.second << std::endl; - os_ << rollback_num_[i.first] * 100.0 / i.second << "%" << std::endl; - } - } - void Output(const std::vector>& results, const History& history) { - std::lock_guard lock(mutex_); - for (const std::unique_ptr& result : results) { - if (result->rollback_type_vec_.has_value() && result->rollback_type_vec_->size()) { - tot_[result->algorithm_name_] += history.trans_num(); - rollback_num_[result->algorithm_name_] += result->rollback_type_vec_->size(); - } - } - } - - private: - std::mutex mutex_; - std::map tot_; - std::map rollback_num_; -}; - -// Compare result with the 0th algorithm and calculate true/false rollback rate. -class DatumOutputter : public Outputter { - private: - struct Info { - Info() - : has_rollback_rate_(false), - time_consume_(0.0), - ok_count_(0), - ng_count_(0), - missed_judgement_count_(0), - wrong_judgement_count_(0), - commit_trans_num_(0), - rollback_trans_num_(0), // active_rollback_trans_num_ + passive_rollback_trans_num_ - passive_rollback_trans_num_(0), // true_rollback_trans_num_ + false_rollback_trans_num_ - true_rollback_trans_num_(0), - false_rollback_trans_num_(0) {} - - bool has_rollback_rate_; // the algorithm support collecting rollback rate statistic or not - double time_consume_; - - uint64_t ok_count_; - uint64_t ng_count_; - uint64_t missed_judgement_count_; - uint64_t wrong_judgement_count_; - - uint64_t commit_trans_num_; // number of transactions committing successful - uint64_t rollback_trans_num_; // number of transactions finally rollback - uint64_t passive_rollback_trans_num_; // number of transactions committing failed - uint64_t true_rollback_trans_num_; - uint64_t false_rollback_trans_num_; - - std::unordered_map anomally_type_num_; - }; - - public: - DatumOutputter(const std::string& output_filename) - : Outputter(output_filename), - history_count_(0), - trans_num_(0), - active_rollback_trans_num_(0), - try_commit_trans_num_(0) {} - virtual ~DatumOutputter() { ResultToFile("finish success"); } - virtual void ResultToFile(const std::string& s) override { - os_ << s << std::endl; - os_ << "Datum Algorithm: " << datum_algorithm_name_ << std::endl; - os_ << "Total Histories: " << history_count_ << std::endl; - os_ << "Total Transactions: " << trans_num_ << " (try commit: " << try_commit_trans_num_ << ")" - << std::endl; - os_ << std::endl; - - for (auto& [algorithm_name, info] : infos_) { - if (info.time_consume_ > 0) { - os_ << ">>>>>> " << algorithm_name << " (" << info.time_consume_ << "s)" << std::endl; - } else { - os_ << ">>>>>> " << algorithm_name << std::endl; - } - os_ << std::setiosflags(std::ios::fixed) << std::setprecision(3); - - os_ << "[ HISTORY LEVEL INFO ]" << std::endl; - os_ << "Total Histories: " << history_count_ << std::endl; - os_ << " ├ OK Histories: " << info.ok_count_ << " (" - << 100.0 * info.ok_count_ / history_count_ << "%)" << std::endl; - os_ << " | └ Missed Judgement Histories: " << info.missed_judgement_count_ << " (" - << 100.0 * info.missed_judgement_count_ / history_count_ << "%)" << std::endl; - os_ << " └ NG Histories: " << info.ng_count_ << " (" - << 100.0 * info.ng_count_ / history_count_ << "%)" << std::endl; - os_ << " └ Wrong Judgement Histories: " << info.wrong_judgement_count_ << " (" - << 100.0 * info.wrong_judgement_count_ / history_count_ << "%)" << std::endl; - - if (info.has_rollback_rate_) { - os_ << "[ TRANSACTION LEVEL INFO ]" << std::endl; - os_ << "Total Transactions: " << trans_num_ << " (try commit: " << try_commit_trans_num_ - << ")" << std::endl; - os_ << " ├ Commit Successfull Transactions: " << info.commit_trans_num_ << " (" - << 100.0 * info.commit_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << " └ Rollback Transactions: " << info.rollback_trans_num_ << " (" - << 100.0 * info.rollback_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << " ├ Active Rollback Transactions: " << active_rollback_trans_num_ << " (" - << 100.0 * active_rollback_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << " └ Passive Rollback Transactions: " << info.passive_rollback_trans_num_ << " (" - << 100.0 * info.passive_rollback_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << " ├ True Rollback Transactions: " << info.true_rollback_trans_num_ << " (" - << 100.0 * info.true_rollback_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << " └ False Rollback Transactions: " << info.false_rollback_trans_num_ << " (" - << 100.0 * info.false_rollback_trans_num_ / trans_num_ << "%)" << std::endl; - os_ << "[ ANOMALY TYPE INFO ]" << std::endl; - for (auto ano_loop : Anomally2Name) { - os_ << ano_loop.second << ": " << info.anomally_type_num_[ano_loop.first] << std::endl; - } - } - - os_ << std::endl; - } - } - - void Output(const std::vector>& results, - const History& history) override { - std::lock_guard lock(mutex_); - - ++history_count_; - trans_num_ += history.trans_num(); - active_rollback_trans_num_ += history.abort_trans_num(); - try_commit_trans_num_ = trans_num_ - active_rollback_trans_num_; - - auto datum_ok = results[0]->ok_; // datum algorithm consider history has no anomalies - datum_algorithm_name_ = results[0]->algorithm_name_; - for (const auto& result : results) { - Info& info = infos_[result->algorithm_name_]; - if (result->time_compt_.has_value()) { - info.time_consume_ += result->time_compt_.value(); - } - - // history level info - info.missed_judgement_count_ += (!datum_ok && result->ok_); - info.wrong_judgement_count_ += (datum_ok && !result->ok_); - info.ok_count_ += result->ok_; - info.ng_count_ += !result->ok_; - - // transaction level info - if (info.has_rollback_rate_ = result->rollback_type_vec_.has_value()) { // do assignment - // TODO: A transaction plan to active rollback may be rollbacked by algorithm. In this case, - // the transactions is both count in abort_trans_num and rollback_type_vec_ - info.passive_rollback_trans_num_ += result->rollback_type_vec_->size(); - // TODO: All passive rollback in anomaly history will be considered as true rollback. - (datum_ok ? info.false_rollback_trans_num_ : info.true_rollback_trans_num_) += - result->rollback_type_vec_->size(); - info.commit_trans_num_ = try_commit_trans_num_ - info.passive_rollback_trans_num_; - info.rollback_trans_num_ = active_rollback_trans_num_ + info.passive_rollback_trans_num_; - for (const auto ano_type : result->rollback_type_vec_.value()) { - ++info.anomally_type_num_[ano_type]; - } - } - } - } - - private: - std::string datum_algorithm_name_; - uint64_t history_count_; - uint64_t trans_num_; - uint64_t active_rollback_trans_num_; - uint64_t try_commit_trans_num_; - std::mutex mutex_; - std::map infos_; -}; - -// Output detail infomation for each algorithm -class DetailOutputter : public Outputter { - public: - DetailOutputter(const std::string& output_filename) : Outputter(output_filename), no_(0) {} - virtual ~DetailOutputter() {} - virtual void ResultToFile(const std::string&) override {} - virtual void Output(const std::vector>& results, - const History& history) override { - std::stringstream ss; - ss << ">>>>>> {" << (++no_) << "} " << history << std::endl; - for (const std::unique_ptr& result : results) { - ss << "[ " << result->algorithm_name_ << " ] " << (result->ok_ ? "true" : "false") - << std::endl; - ss << result->info_.str() << std::endl; - } - std::lock_guard lock(mutex_); - os_ << ss.rdbuf() << std::endl; - } - - private: - std::mutex mutex_; - std::atomic no_; -}; - -// Compare each algorithm's result and do category -class CompareOutputter : public Outputter { - public: - CompareOutputter(const std::string& output_filename) - : Outputter(output_filename), inited_(false) {} - virtual ~CompareOutputter() { ResultToFile("finish success"); } - virtual void ResultToFile(const std::string& s) override { - os_ << s << std::endl; - for (std::unique_ptr& category : categories_) { - os_ << "[Counts:" << category->count_ << "] " << category->cate_name_ << std::endl; - category->temp_output_file_.close(); - if (std::ifstream temp_if(category->temp_output_filename_); - temp_if.peek() != std::ifstream::traits_type::eof()) { - os_ << temp_if.rdbuf(); - } - os_ << std::endl; - category.reset(); - } - } - virtual void Output(const std::vector>& results, - const History& history) override { - if (!inited_.load()) { - InitCategories(results); - } - OutputHistoryToTempFile(results, history); - } - - private: - struct CompareCategory { - CompareCategory(const std::string& cate_name, const std::string& temp_output_filename) - : cate_name_(cate_name), - temp_output_filename_(temp_output_filename), - temp_output_file_(temp_output_filename_), - count_(0) {} - ~CompareCategory() { std::remove(temp_output_filename_.c_str()); } - - const std::string cate_name_; - const std::string temp_output_filename_; - std::ofstream temp_output_file_; - uint64_t count_; - }; - - void InitCategories(const std::vector>& results) { - std::lock_guard lock(mutex_); - if (!categories_.empty()) { - return; /* inited */ - } - for (uint64_t i = 0; i < (static_cast(1) << results.size()); ++i) { - const std::string cate_name = CategoryName(results, Int2Bits(results.size(), i)); - const std::string temp_filename = - "__COMPARE_RESULT_OUTPUTTER_TEMP_FILE_" + std::to_string(i) + "__"; - categories_.emplace_back(new CompareCategory(cate_name, temp_filename)); - } - inited_ = true; - } - - void OutputHistoryToTempFile(const std::vector>& results, - const History& history) { - CompareCategory& category = *categories_[Bits2Int(ExtractOKs(results))]; - std::lock_guard lock(mutex_); - category.temp_output_file_ << history << std::endl; - ++category.count_; - } - - static std::string CategoryName(const std::vector>& results, - const std::vector& oks) { - std::ostringstream ss; - assert(results.size() == oks.size() && results.size() > 0); - const auto cat_name_f = [&ss, &results, &oks](const uint64_t index) { - if (!oks[index]) { - ss << "NOT "; - } - ss << results[index]->algorithm_name_; - }; - cat_name_f(0); - for (uint64_t i = 1; i < oks.size(); ++i) { - ss << " && "; - cat_name_f(i); - } - return ss.str(); - } - - static std::vector Int2Bits(const uint64_t len, uint64_t n) { - std::vector ret(len, false); - for (uint64_t i = len - 1; n > 0; --i) { - ret[i] = n - n / 2 * 2; - n /= 2; - } - return ret; - } - - static uint64_t Bits2Int(const std::vector& bits) { - uint64_t ret = 0; - for (const bool bit : bits) { - ret = ret * 2 + bit; - } - return ret; - } - - static std::vector ExtractOKs(const std::vector>& results) { - std::vector ret; - for (const std::unique_ptr& result : results) { - ret.push_back(result->ok_); - } - return ret; - } - - std::mutex mutex_; - std::atomic inited_; - std::vector> categories_; -}; - -} // namespace ttts diff --git a/src/3ts/backend/history/parse_config.h b/src/3ts/backend/history/parse_config.h deleted file mode 100644 index f0ecd4bd..00000000 --- a/src/3ts/backend/history/parse_config.h +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: elioyan@tencent.com - * williamcliu@tencent.com - * - */ -#pragma once -#include -#include "../cca/conflict_serializable_algorithm.h" -#include "../cca/occ_algorithm/occ_algorithm.h" -#include "../cca/occ_algorithm/trans/bocc_trans.h" -#include "../cca/occ_algorithm/trans/focc_trans.h" -#include "../cca/occ_algorithm/trans/ssi_trans.h" -#include "../cca/occ_algorithm/trans/wsi_trans.h" -#include "../cca/serializable_algorithm.h" -#include "../util/generic.h" -#include "generator.h" -#include "outputter.h" -#include "run.h" - -std::shared_ptr GeneratorParse(const libconfig::Config &cfg, - const std::string &name) { - try { - const libconfig::Setting &s = cfg.lookup(name); - std::shared_ptr res; - if (name == "InputGenerator") { - const std::string &file = s.lookup("file"); - res = std::make_shared(file); - } else { - ttts::Options opt; - opt.trans_num = s.lookup("trans_num"); - opt.item_num = s.lookup("item_num"); - opt.max_dml = s.lookup("max_dml"); - opt.with_abort = s.lookup("with_abort"); - opt.tail_tcl = s.lookup("tail_tcl"); - opt.dynamic_history_len = s.lookup("dynamic_history_len"); - opt.allow_empty_trans = s.lookup("allow_empty_trans"); - if (name == "TraversalGenerator") { - opt.subtask_num = s.lookup("subtask_num"); - opt.subtask_id = s.lookup("subtask_id"); - res = std::make_shared(opt); - } else { - uint64_t history_num = s.lookup("history_num"); - res = std::make_shared(opt, history_num); - } - } - - return res; - } catch (const libconfig::SettingNotFoundException &nfex) { - throw name + "setting " + std::string(nfex.getPath()) + " no found"; - } -} - -template -void AlgorithmParseInternal_(const libconfig::Config &cfg, const std::string &algorithm_name, - AddAlgorithm &&add_algorithm) { - if (algorithm_name == "SSI") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "WSI") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "BOCC") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "FOCC") { - add_algorithm(std::make_shared>()); - } else if constexpr (only_rollback_rate) { - throw "Unknown algorithm name " + algorithm_name + - " in algorithms supporting rollback rate statistics"; - } else if (algorithm_name == "SerializableAlgorithm_ALL_SAME_RR") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_ALL_SAME_RC") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_ALL_SAME_RU") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_ALL_SAME_SI") { - add_algorithm( - std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_COMMIT_SAME_RR") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_COMMIT_SAME_RC") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_COMMIT_SAME_RU") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_COMMIT_SAME_SI") { - add_algorithm( - std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_FINAL_SAME_RR") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_FINAL_SAME_RC") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_FINAL_SAME_RU") { - add_algorithm(std::make_shared>()); - } else if (algorithm_name == "SerializableAlgorithm_FINAL_SAME_SI") { - add_algorithm( - std::make_shared>()); - } else if (algorithm_name == "ConflictSerializableAlgorithm") { - add_algorithm(std::make_shared()); - } else { - throw "Unknown algorithm name " + algorithm_name; - } -} - -#define CONSTEXPR_CONDITIONAL(cond, v1, v2) \ - [&]() -> decltype(auto) { \ - if constexpr ((cond)) { \ - return (v1); \ - } else { \ - return (v2); \ - } \ - }() -enum ParseAlgorithmType { ONLY_NORMAL_ALGS, ONLY_ROLLBACK_RATE_ALGS, MIXED_ALGS }; -template -using AutoAlgorithm = std::conditional_t< - parse_algorithm_type == MIXED_ALGS, - std::variant, std::shared_ptr>, - std::conditional_t, std::shared_ptr>>; -template -using AlgorithmList = std::vector, std::optional>, - AutoAlgorithm>>; - -// If parse_algorithm_type is set, algorithms will convert to RollbackRateAlgorithm if is base of. -// If enable_filter is set, a optional for each algorithm will be returned to show filter. -template -auto MultiAlgorithmParse(const libconfig::Config &cfg, const libconfig::Setting &s) { - AlgorithmList algorithms; - const int len = s.getLength(); - if (len == 0) { - throw "algorithm list is empty"; - } - for (int i = 0; i < len; i++) { - const std::string &algorithm_name = - CONSTEXPR_CONDITIONAL(enable_filter, s[i].lookup("name"), s[i]); - AlgorithmParseInternal_( - cfg, algorithm_name, [&s, i, &algorithms, &algorithm_name](auto &&algorithm) { - constexpr bool is_rollback_rate_algorithm = - std::is_base_of_v>; - using AlgorithmType = - std::shared_ptr>; - if (!is_rollback_rate_algorithm && parse_algorithm_type == ONLY_ROLLBACK_RATE_ALGS) { - throw algorithm_name + " does not support rollback rate statistic"; - } - if constexpr (enable_filter) { - std::optional filter; - try { - filter = s[i].lookup("filter"); - } catch (const libconfig::SettingNotFoundException &nfex) { - // If cannot find, it means we need not do filter, do nothing there - } - algorithms.emplace_back( - AutoAlgorithm(std::forward(algorithm)), - filter); - } else { - algorithms.emplace_back(std::forward(algorithm)); - } - }); - } - return algorithms; -} -#undef CONSTEXPR_CONDITIONAL - -auto OneAlgorithmParse(const libconfig::Config &cfg, const std::string &algorithm_name) { - std::shared_ptr algorithm_res; - AlgorithmParseInternal_( - cfg, algorithm_name, [&algorithm_res](auto &&algorithm) { - algorithm_res = std::forward>(algorithm); - }); - return algorithm_res; -} - -// if you want add outtputer, add here -std::vector> OutputterParse(const libconfig::Config &cfg, - const libconfig::Setting &s) { - std::vector> res; - try { - int len = s.getLength(); - for (int i = 0; i < len; i++) { - const std::string &outputter = s[i]; - const std::string &file = cfg.lookup(outputter).lookup("file"); - if (outputter == "RollbackRateOutputter") { - res.emplace_back(std::make_shared(file)); - } else if (outputter == "DetailOutputter") { - res.emplace_back(std::make_shared(file)); - } else if (outputter == "CompareOutputter") { - res.emplace_back(std::make_shared(file)); - } else if (outputter == "DatumOutputter") { - res.emplace_back(std::make_shared(file)); - } else { - throw "outputter name err"; - } - } - } catch (const libconfig::SettingNotFoundException &nfex) { - throw "Outputter setting " + std::string(nfex.getPath()) + " no found"; - } - return res; -} - -void FilterRunParse(const libconfig::Config &cfg) { - try { - const libconfig::Setting &s = cfg.lookup("FilterRun"); - auto generator = GeneratorParse(cfg, s.lookup("generator")); - auto algorithms = - MultiAlgorithmParse(cfg, s.lookup("algorithms")); - auto outputters = OutputterParse(cfg, s.lookup("outputters")); - const uint64_t thread_num = s.lookup("thread_num"); - FilterRun(generator, algorithms, outputters, thread_num); - } catch (const libconfig::SettingNotFoundException &nfex) { - throw "Func FilterRun setting " + std::string(nfex.getPath()) + " no found"; - } -} - -void BenchmarkRunParse(const libconfig::Config &cfg) { - try { - const libconfig::Setting &s = cfg.lookup("BenchmarkRun"); - auto algorithms = MultiAlgorithmParse( - cfg, s.lookup("algorithms")); - - std::vector trans_nums, item_nums; - const libconfig::Setting &trans_nums_ = s.lookup("trans_nums"); - const libconfig::Setting &item_nums_ = s.lookup("item_nums"); - int len = trans_nums_.getLength(); - if (len != item_nums_.getLength()) { - throw "BenchmarkRun trans num != item num"; - } - for (size_t i = 0; i < len; i++) { - trans_nums.emplace_back(trans_nums_[i]); - item_nums.emplace_back(item_nums_[i]); - } - - const uint64_t history_num = s.lookup("history_num"); - const std::string os = s.lookup("os"); - const bool with_abort = s.lookup("with_abort"); - const bool tail_tcl = s.lookup("tail_tcl"); - if (os == "cout") - BenchmarkRun(trans_nums, item_nums, history_num, algorithms, std::cout, with_abort, tail_tcl); - else - BenchmarkRun(trans_nums, item_nums, history_num, algorithms, std::ofstream(os), with_abort, - tail_tcl); - } catch (const libconfig::SettingNotFoundException &nfex) { - throw "Func BenchmarkRun setting " + std::string(nfex.getPath()) + " no found"; - } -} - -// if you want add func, add here and corresponding parser -void TargetParse(const libconfig::Config &cfg) { - try { - const libconfig::Setting &target = cfg.lookup("Target"); - int len = target.getLength(); - for (int i = 0; i < len; i++) { - const std::string &str = target[i]; - if (str == "FilterRun") { - FilterRunParse(cfg); - } else if (str == "BenchmarkRun") { - BenchmarkRunParse(cfg); - } else { - throw "func name err"; - } - } - } catch (const libconfig::SettingNotFoundException &nfex) { - throw "Target setting " + std::string(nfex.getPath()) + " no found"; - } -} - -void ReadAndRun(const std::string &conf_path) { - libconfig::Config cfg; - try { - cfg.readFile(conf_path.c_str()); - } catch (const libconfig::FileIOException &fioex) { - throw "I/O error while reading file."; - } catch (const libconfig::ParseException &pex) { - throw "Parse error"; - } - TargetParse(cfg); -} diff --git a/src/3ts/backend/history/run.h b/src/3ts/backend/history/run.h deleted file mode 100644 index f4ab037d..00000000 --- a/src/3ts/backend/history/run.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include -#include - -#include "../cca/algorithm.h" -#include "../util/generic.h" -#include "../util/thread_pool.h" -#include "generator.h" -#include "outputter.h" -#define VEC_NUM 100 - -using namespace ttts; - -std::vector> outs; -void handler(int signum) { - for (auto &i : outs) { - i->ResultToFile("[WARNING] The test is uncompleted!"); - } - exit(0); -} - -// Pass each history created by generator to task and run task in a new thread. -// The function will not exit until all histories are checked. -void ThreadRunBase(const std::shared_ptr &generator, - const std::function &task, const uint32_t thread_num) { - ThreadPool thread_pool(thread_num); - generator->DeliverHistories([&thread_pool, &task](History &&history) { - thread_pool.PushTask([history_tmp = std::move(history), &task]() { task(history_tmp); }); - }); -} - -template -void SetCheckResult(Algorithm &&algorithm, const History &history, CheckResult &check_result) { - if constexpr (std::is_same_v> || - std::is_base_of_v>) { - check_result.rollback_type_vec_ = algorithm.RollbackNum(history, &check_result.info_); - check_result.ok_ = check_result.rollback_type_vec_->size() == 0; - } else { - check_result.ok_ = algorithm.Check(history, &check_result.info_); - } -} - -// Each algorithm check the history and determine whether output the result by each algorithm's -// filter. -void FilterRun( - const std::shared_ptr &generator, - const std::vector, std::shared_ptr>, - std::optional>> &algorithms, - const std::vector> &outputters, const uint64_t thread_num) { - // For each history, call task(history) - const auto task = [&algorithms, &outputters](const History &history) { - std::vector> check_results; // results of each algorithm - // For each algorithm, check the history - for (const auto &algorithm_and_filter : algorithms) { - const std::optional &filter = algorithm_and_filter.second; - if (!std::visit( - [&filter, &history, &check_results](auto &&algorithm) -> bool { - auto check_result = std::make_unique(); - const auto start_time = std::chrono::system_clock::now(); - SetCheckResult(*algorithm, history, *check_result); - check_result->time_compt_ = (std::chrono::system_clock::now() - start_time).count(); - check_result->algorithm_name_ = algorithm->name(); - // If filter == true, output only if check passes; - // If filter == false, output only if check not passes; - // If filter not has a value, output whether check passes or not - if (!filter.has_value() || check_result->ok_ == filter.value()) { - check_results.emplace_back(std::move(check_result)); - return true; // result satisfies filter, go to next algorithm - } else { - return false; // result not satisfies filter, cannot output result - } - }, - algorithm_and_filter.first)) { - return; // result not satisfies filter, cannot output result - } - } - // Each algorithm's result satisfies its filter, can output result - for (const std::shared_ptr &outputter : outputters) { - outputter->Output(check_results, history); - } - }; - - signal(SIGINT, handler); - signal(SIGTERM, handler); - outs = outputters; - ThreadRunBase(generator, task, thread_num); -} - -// Each algorithm check the histories and record the time cost. -template -void BenchmarkRun(const std::vector &histories, - const std::vector> &algorithms, OS &&os) { - for (const std::shared_ptr &algorithm : algorithms) { - auto start = std::chrono::system_clock::now(); - uint64_t ok_count = 0; - for (const History &history : histories) { - if (algorithm->Check(history)) { - ++ok_count; - } - } - std::chrono::duration diff = std::chrono::system_clock::now() - start; - os << "\'" << algorithm->name() << "\'" - << " ok histories: " << ok_count << " duration: " << diff.count() << "s" << std::endl; - } -} - -// Each algorithm check the histories and record the time cost. -template -void BenchmarkRun(const std::shared_ptr &generator, - const std::vector> &algorithms, OS &&os) { - std::vector histories; - generator->DeliverHistories( - [&histories](History &&history) { histories.emplace_back(std::move(history)); }); - BenchmarkRun(histories, algorithms, std::forward(os)); -} - -// Each algorithm check the histories and record the time cost. -template -void BenchmarkRun(const std::vector &trans_nums, const std::vector &item_nums, - const uint64_t num, - const std::vector> &algorithms, OS &&os, - const bool with_abort, const bool tail_tcl) { - Options opts; - opts.with_abort = with_abort; - opts.tail_tcl = tail_tcl; - for (const uint64_t trans_num : trans_nums) { - for (const uint64_t item_num : item_nums) { - const uint64_t dml_operation_num = trans_num * item_num / 4; - os << "====== trans_num: " << trans_num << " item_num: " << item_num - << " dml_operation_num: " << dml_operation_num << " ======" << std::endl; - opts.trans_num = trans_num; - opts.item_num = item_num; - opts.max_dml = dml_operation_num; - BenchmarkRun(std::make_shared(opts, num), algorithms, - std::forward(os)); - } - os << std::endl; - } -} diff --git a/src/3ts/backend/main.cc b/src/3ts/backend/main.cc deleted file mode 100644 index e46eaa6b..00000000 --- a/src/3ts/backend/main.cc +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#include - -#include - -#include "history/parse_config.h" - -DEFINE_string(conf_path, "config/config.cfg", "program configure file."); - -using namespace ttts; - -int main(int argc, char **argv) { - gflags::ParseCommandLineFlags(&argc, &argv, true); - std::cout << "FLAGS_conf_path:" << FLAGS_conf_path << std::endl; - - try { - ReadAndRun(FLAGS_conf_path); - } catch (const libconfig::SettingNotFoundException &nfex) { - std::cerr << "setting no found" << std::endl; - } catch (char const *str) { - std::cerr << str << std::endl; - } catch (std::string str) { - std::cerr << str << std::endl; - } catch (const std::exception& e) { - std::cerr << e.what() << std::endl; - } - - return 0; -} diff --git a/src/3ts/backend/util/generic.h b/src/3ts/backend/util/generic.h deleted file mode 100644 index 75f2961a..00000000 --- a/src/3ts/backend/util/generic.h +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ttts { - -enum Anomally { - // I, II - DIRTY_WRITE, - EDGE_CROESS, - LOST_UPDATE, - READ_SKEW, - READ_WRITE_SKEW, - THREE_TRANS_WRITE_SKEW, - MULTI_TRANS_ANOMALY, - // WSI - WRITE_SKEW, - WW_CONFLICT, - // SSI - RW_CONFLICT, - // BOCC FOCC UNKNOWN - UNKNOWN -}; - -std::unordered_map Anomally2Name = { - // I, II - {DIRTY_WRITE, "DIRTY_WRITE"}, - {EDGE_CROESS, "EDGE_CROESS"}, - {LOST_UPDATE, "LOST_UPDATE"}, - {READ_SKEW, "READ_SKEW"}, - {READ_WRITE_SKEW, "READ_WRITE_SKEW"}, - {THREE_TRANS_WRITE_SKEW, "THREE_TRANS_WRITE_SKEW"}, - {MULTI_TRANS_ANOMALY, "MULTI_TRANS_ANOMALY"}, - // WSI - {WRITE_SKEW, "WRITE_SKEW"}, - {WW_CONFLICT, "WW_CONFLICT"}, - // SSI - {RW_CONFLICT, "RW_CONFLICT"}, - // BOCC FOCC UNKNOWN - {UNKNOWN, "UNKNOWN"}}; - -std::ostream& operator<<(std::ostream& os, const Anomally e) { - switch (e) { - case DIRTY_WRITE: - return os << "DIRTY_WRITE"; - case EDGE_CROESS: - return os << "EDGE_CROESS"; - case LOST_UPDATE: - return os << "LOST_UPDATE"; - case READ_SKEW: - return os << "READ_SKEW"; - case READ_WRITE_SKEW: - return os << "READ_WRITE_SKEW"; - case THREE_TRANS_WRITE_SKEW: - return os << "THREE_TRANS_WRITE_SKEW"; - case MULTI_TRANS_ANOMALY: - return os << "MULTI_TRANS_ANOMALY"; - case WRITE_SKEW: - return os << "WRITE_SKEW"; - case WW_CONFLICT: - return os << "WW_CONFLICT"; - case RW_CONFLICT: - return os << "RW_CONFLICT"; - default: - return os << "UNKNOWN"; - } -} - -enum class SerializeReadPolicy { UNCOMMITTED_READ, COMMITTED_READ, REPEATABLE_READ, SI_READ }; - -class Operation { - public: - enum class Type : char { - UNKNOWN = '?', - READ = 'R', - WRITE = 'W', - COMMIT = 'C', - ABORT = 'A', - SCAN_ODD = 'S' - }; - Operation() : type_(Type::UNKNOWN), trans_id_(0) {} - Operation(const Type dtl_type, const uint64_t trans_id) : type_(dtl_type), trans_id_(trans_id) { - if (!IsTCL()) { - throw std::to_string(static_cast(dtl_type)) + " is not a TCL Operation"; - } - } - Operation(const Type dml_type, const uint64_t trans_id, const uint64_t item_id, - const std::optional version = {}) - : type_(dml_type), trans_id_(trans_id), item_id_(item_id), version_(version) { - if (!IsPointDML()) { - throw std::to_string(static_cast(dml_type)) + " is not a Point DML Operation"; - } - } - Operation& operator=(const Operation& operation) = default; - virtual ~Operation() {} - - Type type() const { return type_; } - uint64_t trans_id() const { return trans_id_; } - uint64_t item_id() const { return item_id_.value(); } - uint64_t version() const { return version_.value(); } - void SetTransId(uint64_t trans_id) { trans_id_ = trans_id; } - void SetItemId(const uint64_t item_id) { - if (IsTCL()) { - throw "TCL operations update item id is meaningless"; - } - item_id_ = item_id; - } - void UpdateVersion(const uint64_t version) { - if (IsTCL()) { - throw "DML operations update version is meaningless"; - } - version_ = version; - } - - friend std::ostream& operator<<(std::ostream& os, const Operation& operation) { - os << static_cast(operation.type_) << operation.trans_id_; - if (operation.IsPointDML()) { - if (operation.item_id_.value() >= 26) { - throw "Not support item_id equal or larger than 26 yet"; - } - os << static_cast('a' + operation.item_id_.value()); - } - - return os; - } - - friend std::istream& operator>>(std::istream& is, Type& type) { - char c; - is >> c; - switch (c) { - case 'W': - type = Operation::Type::WRITE; - break; - case 'R': - type = Operation::Type::READ; - break; - case 'C': - type = Operation::Type::COMMIT; - break; - case 'A': - type = Operation::Type::ABORT; - break; - case 'S': - type = Operation::Type::SCAN_ODD; - break; - default: - type = Operation::Type::UNKNOWN; - is.setstate(std::ios::failbit); - } - return is; - } - - friend std::istream& operator>>(std::istream& is, Operation& operation) { - if (!(is >> operation.type_) || !(is >> operation.trans_id_)) { - return is; - } - if (char item_c; operation.type_ == Type::WRITE || operation.type_ == Type::READ) { - if (!(is >> item_c) || !std::islower(item_c)) { - is.setstate(std::ios::failbit); - return is; - } - operation.item_id_ = item_c - 'a'; - } - return is; - } - - bool IsPointDML() const { return IsPointDML(type_); } - bool IsTCL() const { return IsTCL(type_); } - static bool IsPointDML(const Type& type) { return type == Type::READ || type == Type::WRITE; } - static bool IsTCL(const Type& type) { return type == Type::COMMIT || type == Type::ABORT; } - // surport std::map - bool operator<(const Operation& r) const { - if (trans_id() == r.trans_id()) { - uint64_t l_item_id = item_id_.has_value() ? item_id() : -1; - uint64_t r_item_id = r.item_id_.has_value() ? r.item_id() : -1; - if (l_item_id == r_item_id) { - uint64_t l_version = version_.has_value() ? version() : -1; - uint64_t r_version = r.version_.has_value() ? r.version() : -1; - if (l_version == r_version) return type() < r.type(); - return l_version < r.version(); - } - return l_item_id < r_item_id; - } - return trans_id() < r.trans_id(); - } - - private: - Type type_; - uint64_t trans_id_; - std::optional item_id_; - std::optional version_; // version_ identify a unique version, but it CANNOT be - // compared to judge new or old -}; - -class History { - public: - History() : History(0, 0, {}) {} - History(const uint64_t trans_num, const uint64_t item_num, - const std::vector& operations) - : trans_num_(trans_num), - item_num_(item_num), - operations_(operations), - abort_trans_num_(0), - anomaly_name_("") {} - History(const uint64_t trans_num, const uint64_t item_num, std::vector&& operations) - : trans_num_(trans_num), - item_num_(item_num), - operations_(operations), - abort_trans_num_(0), - anomaly_name_("") {} - History(const uint64_t trans_num, const uint64_t item_num, - const std::vector& operations, const uint64_t abort_trans_num) - : trans_num_(trans_num), - item_num_(item_num), - operations_(operations), - abort_trans_num_(abort_trans_num), - anomaly_name_("") {} - History(History&& history) = default; - History(const History& history) = default; - ~History() {} - - History& operator=(History&& history) = default; - History operator+(const History& history) const { - if (trans_num_ != history.trans_num_ || item_num_ != history.item_num_) { - throw "History mismatch"; - } - std::vector new_operations = operations_; - for (const auto& operation : history.operations_) { - new_operations.push_back(operation); - } - return History(trans_num_, item_num_, std::move(new_operations), - abort_trans_num_ + history.abort_trans_num_); - } - std::vector& operations() { return operations_; } - const std::vector& operations() const { return operations_; } - uint64_t trans_num() const { return trans_num_; } - uint64_t abort_trans_num() const { return abort_trans_num_; } - uint64_t item_num() const { return item_num_; } - size_t size() const { return operations_.size(); } - void set_anomaly_name(const std::string& anomaly_name) { anomaly_name_ = anomaly_name; } - std::string anomaly_name() const { return anomaly_name_; } - friend std::ostream& operator<<(std::ostream& os, const History& history) { - for (const Operation& operation : history.operations_) { - os << operation << ' '; - } - return os; - } - - friend std::istream& operator>>(std::istream& is, History& history) { - std::string s; - if (std::getline(is, s)) { - std::stringstream ss(s); - std::vector operations; - std::set trans_num_set; - std::set item_num_set; - uint64_t trans_num = 0; - uint64_t item_num = 0; - for (std::stringstream ss(s); !ss.eof() && !ss.fail();) { - Operation operation; - if (Operation operation; ss >> operation) { - operations.emplace_back(operation); - trans_num_set.insert(operation.trans_id()); - if (operation.IsPointDML()) { - item_num_set.insert(operation.item_id()); - } - } - } - trans_num = trans_num_set.size(); - item_num = item_num_set.size(); - if (ss.fail()) { - std::cout << "Invalid history: \'" << s << "\'" << std::endl; - } else { - history = History(trans_num, item_num, operations); - } - } - return is; - } - - Operation& operator[](const size_t index) { return operations_[index]; } - - void UpdateWriteVersions() { - std::vector item_version(item_num_, 0); - for (Operation& operation : operations_) { - if (operation.type() == Operation::Type::WRITE) { - operation.UpdateVersion(++item_version[operation.item_id()]); - } - } - } - - // update write version, clean up read version - void FillWriteVersions() { - std::vector item_version(item_num_, 0); - for (Operation& operation : operations_) { - if (operation.type() == Operation::Type::WRITE) { - operation.UpdateVersion(++item_version[operation.item_id()]); - } else if (operation.type() == Operation::Type::READ) { - operation.UpdateVersion(-1); // clear read version as -1 - } - } - } - - private: - uint64_t trans_num_; - uint64_t abort_trans_num_; - uint64_t item_num_; - std::vector operations_; - std::string anomaly_name_; -}; - -struct Options { - uint64_t trans_num; - uint64_t item_num; - - uint64_t subtask_num; - uint64_t subtask_id; - uint64_t max_dml; - - bool with_abort; - bool tail_tcl; - bool allow_empty_trans; - bool dynamic_history_len; -}; - -} // namespace ttts diff --git a/src/3ts/backend/util/thread_pool.h b/src/3ts/backend/util/thread_pool.h deleted file mode 100644 index e232e910..00000000 --- a/src/3ts/backend/util/thread_pool.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: williamcliu@tencent.com - * - */ -#pragma once -#include -#include -#include -#include -#include - -#include "generic.h" - -// std::atomic> is not supported until C++20, so we use std::atomic instead -// here - -namespace ttts { - -template -class SpinLockQueue { - public: - void Push(T &&value) { - while (std::atomic_flag_test_and_set_explicit(&spin_lock_, std::memory_order_acquire)) - ; - queue_.emplace(std::move(value)); - std::atomic_flag_clear_explicit(&spin_lock_, std::memory_order_release); - } - - std::optional Pop() { - while (std::atomic_flag_test_and_set_explicit(&spin_lock_, std::memory_order_acquire)) - ; - std::optional value; - if (!queue_.empty()) { - value = queue_.front(); - queue_.pop(); - } - std::atomic_flag_clear_explicit(&spin_lock_, std::memory_order_release); - return value; - } - - bool IsEmpty() { - while (std::atomic_flag_test_and_set_explicit(&spin_lock_, std::memory_order_acquire)) - ; - const bool is_empty = queue_.empty(); - std::atomic_flag_clear_explicit(&spin_lock_, std::memory_order_release); - return is_empty; - } - - private: - std::atomic_flag spin_lock_ = ATOMIC_FLAG_INIT; - std::queue queue_; -}; - -class Semaphore { - private: - int cnt_; - std::mutex m_; - std::condition_variable c_; - - public: - Semaphore(int n) : cnt_(n) {} - - void Down() { - std::unique_lock lock(m_); - c_.wait(lock, [&] { return cnt_ > 0; }); - --cnt_; - } - - void Up() { - std::lock_guard lock(m_); - ++cnt_; - c_.notify_one(); - } -}; - -class ThreadPool { - public: - ThreadPool(const uint64_t size) - : is_over_(false), workers_(size), produce_conf_(buffer_size_), consumer_conf_(0) { - for (std::thread &worker : workers_) { - worker = std::thread(std::bind(&ThreadPool::WorkerThread, this)); - } - } - - ~ThreadPool() { - is_over_ = true; - for (std::thread &worker : workers_) { - if (worker.joinable()) { - consumer_conf_.Up(); - worker.join(); - } - } - } - - void PushTask(std::function &&f) { - produce_conf_.Down(); - task_queue_.Push(std::move(f)); - consumer_conf_.Up(); - } - - private: - void WorkerThread() { - while (!is_over_.load() || !task_queue_.IsEmpty()) { - consumer_conf_.Down(); - const std::optional> task = task_queue_.Pop(); - if (task.has_value()) { - task.value()(); - produce_conf_.Up(); - } else { - consumer_conf_.Up(); - } - } - } - - std::atomic is_over_; - SpinLockQueue> task_queue_; - std::vector workers_; - - static const uint64_t buffer_size_ = 1024; - Semaphore produce_conf_; - Semaphore consumer_conf_; -}; - -} // namespace ttts diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index b0bbfaa3..aa196ee7 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -361,15 +361,16 @@ int main(int argc, char* argv[]) { std::cout << " user: " + FLAGS_user << std::endl; std::cout << " passwd: " + FLAGS_passwd << std::endl; std::cout << " isolation: " + FLAGS_isolation << std::endl; - // // mutex for txn - // //for(int i=0;i test_sequence_list = case_reader.TestSequenceList(); std::vector test_result_set_list = case_reader.TestResultSetList(); - // init db_connector - std::cout << dash + "init db_connector start" + dash << std::endl; - DBConnector db_connector; - if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { - std::cout << "init db_connector failed" << std::endl; - } - // init database if not exists - /* - if (FLAGS_db_type != "crdb") { - if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { - std::cout << dash + "init database start" + dash << std::endl; - TestResultSet test_rs__; - db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); - db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); - } - } - */ - - // set TXN_ISOLATION - // crdb has only one isolation level, which is serializable by default - if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { - std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; - //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; - int idx = 1; - for (auto hdbc : db_connector.DBConnPool()) { - // set timeout - if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { - return false; - } - if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { - return false; - } - idx++; - } - std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; - } + // // one session for all + // // init db_connector + // std::cout << dash + "init db_connector start" + dash << std::endl; + // DBConnector db_connector; + // if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + // std::cout << "init db_connector failed" << std::endl; + // } + // // set TXN_ISOLATION + // // crdb has only one isolation level, which is serializable by default + // if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + // std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + // //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + // int idx = 1; + // for (auto hdbc : db_connector.DBConnPool()) { + // // set timeout + // if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { + // return false; + // } + // if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { + // return false; + // } + // idx++; + // } + // std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + // } + + // // create test_process_output_file's dir + // if (access(FLAGS_db_type.c_str(), 0) == -1) { + // mkdir(FLAGS_db_type.c_str(), S_IRWXU); + // } + // // create isolation dir + // // std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; + // std::vector iso_list = {"read-committed", "serializable", "result_summary"}; + // for (auto iso : iso_list) { + // std::string iso_dir = FLAGS_db_type + "/" + iso; + // if (access(iso_dir.c_str(), 0) == -1) { + // mkdir(iso_dir.c_str(), S_IRWXU); + // } + // } + + // // send sql + // JobExecutor job_executor; + // int len = test_sequence_list.size(); + // for (int i = 0; i < len; i++) { + + // if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { + // std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + // } else { + // std::string result_type = test_result_set_list[i].ResultType(); + // std::cout << "Test Result: " << result_type + "\n" << std::endl; + // } + // } + // // output result and release connection + // std::string ret_file = "./" + FLAGS_db_type + "/result_summary" + "/" + FLAGS_isolation + "_total-result.txt"; + // outputter.WriteResultTotal(test_result_set_list, ret_file); + // db_connector.ReleaseConn(); + + + // one case one intialization // create test_process_output_file's dir if (access(FLAGS_db_type.c_str(), 0) == -1) { mkdir(FLAGS_db_type.c_str(), S_IRWXU); } // create isolation dir - std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; + std::vector iso_list = {"read-committed", "repeatable-read", "serializable", "result_summary"}; + //std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; for (auto iso : iso_list) { std::string iso_dir = FLAGS_db_type + "/" + iso; if (access(iso_dir.c_str(), 0) == -1) { @@ -433,17 +458,49 @@ int main(int argc, char* argv[]) { int len = test_sequence_list.size(); for (int i = 0; i < len; i++) { + // init db_connector + std::cout << dash + "init db_connector start" + dash << std::endl; + DBConnector db_connector; + if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + std::cout << "init db_connector failed" << std::endl; + } + // set TXN_ISOLATION + // crdb has only one isolation level, which is serializable by default + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + int idx = 1; + for (auto hdbc : db_connector.DBConnPool()) { + // set timeout + if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { + return false; + } + if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { + return false; + } + idx++; + } + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + } + + // exec if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; } else { std::string result_type = test_result_set_list[i].ResultType(); std::cout << "Test Result: " << result_type + "\n" << std::endl; - } + } + + // db release + db_connector.ReleaseConn(); } - // std::string ret_file = "./" + FLAGS_db_type + "/" + FLAGS_db_type + "_" + FLAGS_isolation + "_total-result.txt"; std::string ret_file = "./" + FLAGS_db_type + "/result_summary" + "/" + FLAGS_isolation + "_total-result.txt"; outputter.WriteResultTotal(test_result_set_list, ret_file); - db_connector.ReleaseConn(); + + // remove mutex for txn + for(int i=0;i checker = pre_checkers["SSI"]; -vector inputs = { - // Dirty Write - "W1a1 W2a2 C1 R3a2 C2 C3", "W1a1 W2a2 C1 R3a2 A2 C3", "W1a1 W2a2 A1 C2 R3a0 C3", - "W1a1 W2a2 A1 A2 R3a1 C3", "W1a1 W2a2 C2 C1 R3a2 C3", "W1a1 W2a2 C2 A1 R3a0 C3", - - // Dirty Read - "W1a1 R2a1 A1 C2" - "W1a1 R2a1 C2 A1" - - // Intermediate Reads - "W1a1 R2a1 W1a2 C1 C2", - "W1a1 R2a1 W1a2 C2 C1", - - // Fuzzy or Non-Repeatable Read - "R1a0 W2a1 C2 R1a1 C1", "R1a0 W2a1 R1a1 C2 C1", - - // Lost Update - "R1a0 W2a1 C2 W1a2 C1", - - // Read Skew - "R1a0 W2a1 W2b1 R1b1 C1 C2", "R1a0 W2a1 W2b1 R1b1 C2 C1", "R1a0 W2b1 W2a1 R1b1 C1 C2", - "R1a0 W2b1 W2a1 R1b1 C2 C1", "R1a0 W2b1 R1b1 W2a1 C1 C2", "R1a0 W2b1 R1b1 W2a1 C2 C1", - "R1a0 W2a1 W2b1 C2 R1b1 C1", "R1a0 W2a1 W2b1 C2 R1b1 C1", "R1a0 W2b1 W2a1 C2 R1b1 C1", - "R1a0 W2b1 W2a1 C2 R1b1 C1", - - // Read and Write Skew - "R1a0 W2a1 W2b1 C2 W1b1 C1", "R1a0 W2a1 W2b1 W1b1 C2 C1", "R1a0 W2a1 W2b1 W1b1 C1 C2", - - // Step Read Skew - "R1a0 W2a1 W2b1 C2 W3b2 W3c1 C3 R1c1 C1", - - // Phantom - //"S1a0 W2a1 W2b1 C2 S1a0 C1", - - // Write Skew - "R1a0 R2b0 W1b1 W2a1 C1 C2", - - // Sawtooth Write Skew - "R1a0 R2b0 R3c0 W1b1 W2c1 W3a1 C1 C2 C3", - - // Predicate Write Skew - //"S1a0 W2a1 W2b1 C2 C1", -}; - -class BaseTest : public ::testing::TestWithParam {}; - -TEST_P(BaseTest, AllErr) { - ActionSequence seq = GetParam(); - ASSERT_FALSE(checker->Check(seq)); -} - -vector Init() { - vector seqs; - for (const string &s : inputs) { - ActionSequence seq; - stringstream ss(s); - ss >> seq; - seqs.emplace_back(std::move(seq)); - } - return seqs; -} - -INSTANTIATE_TEST_CASE_P(AllErr, BaseTest, testing::ValuesIn(Init())); - -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/test/unittest/ssi_test/ssi_checker_test.cc b/src/test/unittest/ssi_test/ssi_checker_test.cc deleted file mode 100644 index 87c01352..00000000 --- a/src/test/unittest/ssi_test/ssi_checker_test.cc +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making 3TS available. - * - * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software - * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All - * Tencent Modifications are Copyright (C) THL A29 Limited. - * - * Author: moggma@tencent.com - * - */ -#include "../../backend/cca/ssi_checker.h" - -#include "gtest/gtest.h" - -TEST(SSICheckerTest, SingleTransaction) { - std::vector acts{ - {t3s::Action::Type::READ, 0, 0}, - {t3s::Action::Type::WRITE, 0, 0}, - {t3s::Action::Type::COMMIT, 0}, - }; - - t3s::ActionSequence seq(1, 1, acts); - - t3s::SSIChecker checker; - ASSERT_TRUE(checker.Check(seq, nullptr)); -} - -TEST(SSICheckerTest, WWConfilct) { - std::vector acts{{t3s::Action::Type::WRITE, 0, 0}, - {t3s::Action::Type::WRITE, 1, 0}, - {t3s::Action::Type::COMMIT, 0}, - {t3s::Action::Type::COMMIT, 1}}; - - t3s::ActionSequence seq(2, 1, acts); - - t3s::SSIChecker checker; - ASSERT_FALSE(checker.Check(seq, nullptr)); -} - -TEST(SSICheckerTest, WriteScrew) { - std::vector acts{ - {t3s::Action::Type::READ, 0, 0}, {t3s::Action::Type::READ, 0, 1}, - {t3s::Action::Type::READ, 1, 0}, {t3s::Action::Type::READ, 1, 1}, - {t3s::Action::Type::WRITE, 0, 0}, {t3s::Action::Type::WRITE, 1, 1}, - {t3s::Action::Type::COMMIT, 0}, {t3s::Action::Type::COMMIT, 1}}; - - t3s::ActionSequence seq(2, 2, acts); - - t3s::SSIChecker checker; - ASSERT_EQ(checker.RollbackNum(seq), 1); -} - -TEST(SSICheckerTest, Success) { - std::vector acts{ - {t3s::Action::Type::READ, 0, 1}, {t3s::Action::Type::READ, 1, 0}, - {t3s::Action::Type::WRITE, 0, 1}, {t3s::Action::Type::WRITE, 1, 0}, - {t3s::Action::Type::COMMIT, 0}, {t3s::Action::Type::COMMIT, 1}}; - - t3s::ActionSequence seq(2, 2, acts); - - t3s::SSIChecker checker; - ASSERT_TRUE(checker.Check(seq, nullptr)); -} - -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/test/unittest/test.sh b/src/test/unittest/test.sh deleted file mode 100755 index da5031a7..00000000 --- a/src/test/unittest/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -g++ $1 -lpthread -lgtest -std=c++11 -lconfig++ -./a.out -rm ./a.out From 9096b5c8586ef7eae83cefb5ec241430bd411e00 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 1 Jun 2022 10:57:26 +0800 Subject: [PATCH 31/81] Update typos and crop logo --- README.md | 14 +++++++------- assets/logo.png | Bin 18453 -> 14293 bytes 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 364f91b7..4b5f3a0d 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,18 @@ ![](https://img.shields.io/badge/license-GPLv3-brightgreen) -**Tencent Transaction Processing Testbed System (3TS)** that is jointly developed by Tencent's CynosDB (TDSQL) team and the Key Laboratory of Data Engineering and Knowledge Engineering of the Ministry of Education of Renmin University of China. The system aims to design and construct a unified framework for transaction processing (including distributed transactions). It enables users to quickly build new concurrency control approaches via the access interface provided by the framework. Based on an comprehensive experiment study over the benchmarks, and the applications abstracted, users can select an optimal concurrency control approach. At present, 3TS has been integrated 13 mainstream concurrency control approaches, and provides common benchmarks such as TPC-C、PPS and YCSB. 3TS further provides a consistency level test benchmark, to address the issue of system selection difficulty caused by the blowout development of distributed database systems, and provides consistency level discrimination and performance test comparison. +**Tencent Transaction Processing Testbed System (3TS)** that is jointly developed by Tencent's CynosDB (TDSQL) team and the Key Laboratory of Data Engineering and Knowledge Engineering of the Ministry of Education of Renmin University of China. The system aims to design and construct a unified framework for transaction processing (including distributed transactions). It enables users to quickly build new concurrency control approaches via the access interface provided by the framework. Based on an comprehensive experiment study over the benchmarks, and the applications abstracted, users can select an optimal concurrency control approach. At present, 3TS has been integrated 13 mainstream concurrency control approaches, and provides common benchmarks such as TPC-C, PPS, and YCSB. 3TS further provides a consistency level test benchmark, to address the issue of system selection difficulty caused by the blowout development of distributed database systems, and provides consistency level discrimination and performance test comparison. If you want to better understand the aims of our project, please view [3TS opensource announcement](doc/en/announcement.md). ## Coo: Consistency Check To test the consistency of real databases. -We generate the anomaly history, and simulate multi-users transcation reqeusting to databases. +We generate the anomaly histories, and simulate multi-users transaction requesting to databases. Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt) at Serializable Level). -Check out the full [report](https://axingguchen.github.io/3TS/){:target="_blank"}. +You can explore all results on [report webpage](https://axingguchen.github.io/3TS/). ## Usage To generate Makefile (all commands are executed under '3TS/src/dbtest'): @@ -44,7 +44,7 @@ cp t/bk_do_test_list_basic.txt do_test_list.txt cp t/bk_do_test_list_predicate.txt do_test_list.txt ``` -Edit "auto_test.sh" for database configurations (e.g., username, password). Edit "auto_test_all.sh" for databse (e.g., PostgreSQL, and MySQL) and isolation (e.g., SERIALIZABLE, REPEATABLE READ, READ COMMITTED, and READ UNCOMMITTED) configuration. +Edit "auto_test.sh" for database configurations (e.g., username, password). Edit "auto_test_all.sh" for database (e.g., PostgreSQL, and MySQL) and isolation (e.g., SERIALIZABLE, REPEATABLE READ, READ COMMITTED, and READ UNCOMMITTED) configuration. To run the test (under '3TS/src/dbtest'): @@ -70,7 +70,7 @@ Write-read Skew : Under "src/dbtest/" folder, add rat_dda_write_read_skew and rat_dda_write_read_skew_committed to "do_test_list.txt". -Add the following to "auto_test_all.sh" for runing PostgreSQL with four isolation levels: +Add the following to "auto_test_all.sh" for running PostgreSQL with four isolation levels: ``` ./auto_test.sh "pg" "read-uncommitted" ./auto_test.sh "pg" "read-committed" @@ -84,8 +84,8 @@ Run test by "./auto_test_all.sh". The test result are in the following: | Repeatable Read | Anomaly reported ([result](test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt)) | Anomaly reported ([result](test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt)) | | Read (Un)Committed | Anomaly reported ([result](test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt)) | Pass the test ([result](test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt)) | -At serializbale level, both tested cases detected consecutive RW conflicts. -At Repeatable Read level, both generated two consecutive RW confilcts and allowed. +At serializable level, both tested cases detected consecutive RW conflicts. +At Repeatable Read level, both generated two consecutive RW conflicts and allowed. At Read (Un)Committed level, Write-read Skew test case generated two consecutive RW ($R_2W_1,R_1W_2$) conflicts while Write-read Skew Committed test case read the newest committed version and executed into non-anomaly schedule ($R_2W_1,W_2C_2R_1$). diff --git a/assets/logo.png b/assets/logo.png index decfd5b131b3edccb6cc561f4909ecd9f69a3e53..48b4bfe4296fc4278a282da86a18f43d4b047665 100644 GIT binary patch literal 14293 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 From 41e5372219f468baf8731d4604790f079ec9f851 Mon Sep 17 00:00:00 2001 From: Xeonacid Date: Mon, 20 Jun 2022 17:11:06 +0800 Subject: [PATCH 32/81] Fix compilation, add CMakeFiles directory itself to .gitignore, cleanup cmake has FindODBC.cmake only, which leads to odbc not found in case-sensitive filesystem. --- .gitignore | 2 +- .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 20784 -> 0 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 20800 -> 0 bytes .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 ----- src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 20880 -> 0 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 ----- .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 20888 -> 0 bytes .../3ts_dbtest.dir/CXX.includecache | 94 - .../CMakeFiles/3ts_dbtest.dir/build.make | 195 -- .../CMakeFiles/3ts_dbtest.dir/depend.internal | 24 - .../CMakeFiles/3ts_dbtest.dir/depend.make | 24 - .../CMakeFiles/3ts_dbtest.dir/flags.make | 8 - src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt | 1 - .../CMakeFiles/3ts_dbtest.dir/progress.make | 6 - .../3ts_dbtest.dir/src/case_cntl.cc.gcda | Bin 56460 -> 0 bytes .../3ts_dbtest.dir/src/case_cntl.cc.gcno | Bin 628520 -> 0 bytes .../3ts_dbtest.dir/src/common.cc.gcda | Bin 12592 -> 0 bytes .../3ts_dbtest.dir/src/common.cc.gcno | Bin 99800 -> 0 bytes .../3ts_dbtest.dir/src/db_test.cc.gcda | Bin 88584 -> 0 bytes .../3ts_dbtest.dir/src/db_test.cc.gcno | Bin 984144 -> 0 bytes .../3ts_dbtest.dir/src/sql_cntl.cc.gcda | Bin 35700 -> 0 bytes .../3ts_dbtest.dir/src/sql_cntl.cc.gcno | Bin 369668 -> 0 bytes .../3ts_dbtest.dir/src/sql_connector.cc.gcno | Bin 374312 -> 0 bytes .../3ts_dbtest.dir/src/sqltest.cc.gcda | Bin 47856 -> 0 bytes .../3ts_dbtest.dir/src/sqltest.cc.gcno | Bin 492420 -> 0 bytes .../3ts_kvtest.dir/CXX.includecache | 1974 ----------------- .../CMakeFiles/3ts_kvtest.dir/build.make | 197 -- .../CMakeFiles/3ts_kvtest.dir/depend.internal | 286 --- .../CMakeFiles/3ts_kvtest.dir/depend.make | 286 --- .../CMakeFiles/3ts_kvtest.dir/flags.make | 8 - src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt | 1 - .../CMakeFiles/3ts_kvtest.dir/progress.make | 6 - .../3ts_kvtest.dir/src/case_cntl.cc.gcda | Bin 91936 -> 0 bytes .../3ts_kvtest.dir/src/case_cntl.cc.gcno | Bin 628520 -> 0 bytes .../3ts_kvtest.dir/src/common.cc.gcda | Bin 121172 -> 0 bytes .../3ts_kvtest.dir/src/common.cc.gcno | Bin 99800 -> 0 bytes .../3ts_kvtest.dir/src/db_test.cc.gcno | Bin 984144 -> 0 bytes .../3ts_kvtest.dir/src/kv_cntl.cc.gcda | Bin 70320 -> 0 bytes .../3ts_kvtest.dir/src/kv_cntl.cc.gcno | Bin 642356 -> 0 bytes .../3ts_kvtest.dir/src/kv_connector.cc.gcno | Bin 376760 -> 0 bytes .../3ts_kvtest.dir/src/kvtest.cc.gcda | Bin 69908 -> 0 bytes .../3ts_kvtest.dir/src/kvtest.cc.gcno | Bin 517908 -> 0 bytes .../3ts_kvtest.dir/src/mongo_test.cc.gcda | Bin 25256 -> 0 bytes .../3ts_kvtest.dir/src/mongo_test.cc.gcno | Bin 397004 -> 0 bytes src/dbtest/CMakeFiles/CMakeOutput.log | 570 ----- src/dbtest/CMakeFiles/Makefile2 | 145 -- src/dbtest/CMakeFiles/TargetDirectories.txt | 2 - src/dbtest/CMakeFiles/cmake.check_cache | 1 - src/dbtest/CMakeFiles/feature_tests.bin | Bin 20744 -> 0 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 - src/dbtest/CMakeFiles/feature_tests.cxx | 405 ---- src/dbtest/CMakeFiles/progress.marks | 1 - src/dbtest/CMakeLists.txt | 2 +- 53 files changed, 2 insertions(+), 5276 deletions(-) delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/common.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/common.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_connector.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcda delete mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log delete mode 100644 src/dbtest/CMakeFiles/Makefile2 delete mode 100644 src/dbtest/CMakeFiles/TargetDirectories.txt delete mode 100644 src/dbtest/CMakeFiles/cmake.check_cache delete mode 100755 src/dbtest/CMakeFiles/feature_tests.bin delete mode 100644 src/dbtest/CMakeFiles/feature_tests.c delete mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx delete mode 100644 src/dbtest/CMakeFiles/progress.marks diff --git a/.gitignore b/.gitignore index 9771d798..40319197 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ runcl 3ts_dbtest *.swp CMakeCache.txt -CMakeFiles/* +CMakeFiles/ *.cmake Makefile cmake/* diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin b/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index b01e72d7cefa69326618a19c0a3f1407599ccd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20784 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 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c deleted file mode 100644 index 444e4093..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c +++ /dev/null @@ -1,508 +0,0 @@ -#ifdef __cplusplus -# error "A C++ compiler has been selected for C." -#endif - -#if defined(__18CXX) -# define ID_VOID_MAIN -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(SDCC) -# define COMPILER_ID "SDCC" - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} -#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out deleted file mode 100755 index df37a0ba458edea0f27a40f4181672bcb68fb975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20880 zcmeHPeQX@X6`#9{6Q>DhCtzv_ZI%`!$Kdq`iE(HHd$!MBgA=>4!$*VJtnb$LDd#)) zZm)HaTB0Vc2#)R8>ix652niAQkZksT5kGMkRCX+#@}&i?|4*$6s9#Kte;=26lF1tp0U#ye?q|&Qq4s-@)To4 zN$)G5hvmH7KyKeI^9%CJQCUBt;7aT5-Cun?dFO2dPv0~-_hLs)Js1KL9w3@A_TN1T4hyWFq=1Qj3Q zRe-Ja!IOX~KKOV5&Y<2YtY$Ye42&B^+br0|teMHN!Qr9aKBG(RQa3SUXnd=YwhGpC zrf6G*@vVK?e9js-C$ko4PS56ZQqvHkzJgdV;gJY<1N}kmR=PH`5_z9P5eTR6&^X0D zfN~VhI&ktW^3FSO^gD%%4xIWH@j@DUAoM`!fzSh?2SN{o9tb@UdLZ<`f7SzUHGKX( zec!oy{XpF-?TqOUAGM?9lls2n^-DY>bV2AmyeXg8JKwD8DqNHmu*z)fe?cTV6oBhwA=-Wb;M439_1!S*gOLytVCzi`RE3Jh$K2I|YFryADxSM@Rfy;~-L%}Q79 z&=<~}eXv|EKUa4bAd!isMaT!Fs|7^)*B(W|g>RnI7fPp3B;UvK=m(l2pmHF2PJdF5 zoNPG48h&#$l6)WVH{sLV4}ZlE=YkDK_G<85Ei4>JzCW=9g%%FN{1f*KExeStduZW8 zVn<@(gT(mop&OsRnXw)Ep*Eyr!yC?E8=W1wR4(hsK8V@tJ71Rm8eVvBc;Q0-!W)V5 zRj2fQOA&qZpG$wo_S-p;xIZzGcpzacExPNAEsOc`cCWNF);bKK2SN{o9tb@UdLZ;b z=z-7!p$9?_gdPYz@c-(8NM!}ozlKBG21ag6LKz9Kx zoG+Jcpyz--0rdVi%jHu*as3xV`G#PLHUMv|`4lPT@ zTMpLg@s3B9>+zm_D+c3QF5Z)fcO>F1y>X>C-rO5+?2Xs+^86Ci=fMu;jpo7-dLZ;b z=z-7!p$9?_gdPYz5PBf=Kx?vglcisgayVTG2Lr&-Fw;xkW^Kj5>Er{j_@)ju&p`^tj~puoB{hJvKu zk#w-H?>40c<^wh;J?brLr_$BYxw*5mt5a#&Zlx97v<2R_X#+!_<2N^M6dp|65V>Wh zXET0(E3!`zt&vMzrd;td<*dt;`;?Ur`<%;vW@p8BBhrU{GQ=ZVq58@MDk8OoP zv{zlBl*?su)5>%z{P8&d^y)-vYunH+4w2bs$F z$Mss5uLW!kpli?o24PRsuV9(k%rqaGg4$|Sw)YN6z5Wl|>f>)K>TmdORD+3D-~J|e z{{7AG-lg^>>L)|b)T?D*@ROnEEL*Gb?&c@6OX}l3E(}3^54U?^ct_Gty6@qA`Ck|( z`1tehj1#E%agP%Lea}^g59@m$RllaM{0}@kss9r7yC;Z8)K7-)yLBIO|IvL{C+|PJ ze}X~`9tMY_S`9k}Yc$7w@fbVni!WpKF+V$XjNXHtnZ)3U_mr>v3g-8o8iR){z2Ca+ ztYq|_?8c#&NFTZJRh9P`H@=!x#w`aUhEH}yb08ubWAV!WEjpPo7#*JXm2YJ9z2TN$ z!{|H1jjv^X@5wQE6QTcubIZeOl%_c$9*@D-MYAt{HS6)kKU-r1ff#(PXuC8Q4<0@6 ze~@qTcN`~U3nrqg7`@vOZ)*TlnohTl+34IUk<=0B<`*6eu;bQ z`wZZI{p49GPtSPr&+jEp;~?R$NZi|w?*`ya_^|e=S62W&7J%mi@W%r1!vXm3B<`*6 zs}esW-*KqEk!7O%UR;s5*FReT_w%z3cohD7ewSxFyi?+f9(+RLCp~x(@CbZ?(71u! z3B$KJUOSFGBkeFxy`JUrwd3KR0QW0@P`&=f?KH6c*K52S&WoR&cR(J$YQ5v_a(ID? zu-fsqfxlSQmh%f7uO0t4aXYo+@Lhnf1^?rJFks;7KzBk!LBJD!!tvU1`x}5a!gx;p zC$$}buZ`9|zrKYy2|4JGq#f^b;TM1_4mpbc3h*`2D_Fgv5ya_ph&!H-+`Yhgk>gFQ zMHBM)9)sbpfTJI%|62lP;;Y~zdJXtT z@#K3A;Ar3Lw;KV+^3XR3--7|RTG39l*3aF5D>5%9d7YQD_I+a%?SOwY>9;PaG{NyE z*5N59YcCZGc<4Yo%zCuLX#+<0#cfH*_cRk&_T0gk?KK^hEa09h|aSPS@$Ia(P04mr{AG&2c{&F+90k_|b zbXGXcv@JZI0i8IPu|!d-4HYDY{m9BrwefD2AFC<=Skw2a7#74&*4+kf`5>N;?>&mO zey>2~0SXqX_45r1QpfHa}@*jkKLF6b-X9&v2Jr*0Qa%dTZC_js8Lg z=3$tHg1HB(X&3e|G2xgl&Cc!t6-SEK)Fs-t)!c3M^~ueALun|UVGL|fY)u-;ZT$uu z4C2;FGo$~$ZHcWzeQu8Mo?*c3zme3X1-*YeGX{r8dK1IO$iTo@a@-hC^bRM{DnGXb zy^E#)@RLfcv}v29!ZYGWooJfttP=yJ#Cawl>ptAXNEh?QjG0U0!6!o_AeGMKj8f4` zvrKL(Z_w65%7j{-1>9vqi?%?5)?~3Lv*w4e7zUiRLJq`3SbR@b;aSV=k-{SGc4SN~ z?wPgCNuYK?&>4#HDP$O~b1=89PUlMMWGMsZ-(=w4%=5BLRGBc%Lk z9;Y6^OCV7B>HUk|=LDCrZ4kjVP12|No))P;F9qSXhu59-Y5nqUz)_U+pNeUa!u3>6 zD(j{qC2UX}=>zb?HBZu~`J=e3D9#sRpz@O((cQqqHB?H|JX5pOS5O&(xBLQS>_Ld2 zDCyIDRFBl(B?T#eZ~gZJANvp5=YhVv_yQb*6VKd1nyrA3Ld>a8@5PGLe-W9EAmIwK z2r;KV&4XQ(3q~|wOA6lne<1a#{+0PMMQA)uijqpWg8mp{m_O-P&jS-88!M6`;>{oT zHaqoc{_S~1$R8D?awY#0a0DW8_{r{8nWv-k!o2d7Ci+{@#Wexar|(N$1rP$siBvUB z_#c6RZBP0%??>mc(Yb5XKS+<-@g>m3`jbA*51y7EMhftpf%J)<0;W?RKE#B0hahyH zid1d+&j7=zPv4czQePoONhx1~UxNr@RDSwS>yi3idCbch&O-t*DPCcb{>>FcL`a|L zy8zRk3zVRF&a^bRnl@Yrb$+kQC?{x#`mPh7+bmLtr9SQ}8HFF!hy03cs=Lq-*XBM! ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 721698c5..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__COMO__) -# define COMPILER_ID "Comeau" - /* __COMO_VERSION__ = VRR */ -# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) -# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) - -#elif defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out deleted file mode 100755 index aaa835926005b38fe76e6a9c5f496cc4477ea6ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20888 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 Dtgk7t diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache deleted file mode 100644 index e6cc50cc..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/CXX.includecache +++ /dev/null @@ -1,94 +0,0 @@ -#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -case_cntl.h -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h -common.h -/data1/farrisli/3TS/src/dbtest/src/common.h - -/data1/farrisli/3TS/src/dbtest/src/common.cc -common.h -/data1/farrisli/3TS/src/dbtest/src/common.h - -/data1/farrisli/3TS/src/dbtest/src/common.h -iostream -- -fstream -- -iomanip -- -algorithm -- -cstdlib -- -cassert -- -unistd.h -- -sys/types.h -- -sys/stat.h -- -string -- -vector -- -unordered_map -- -iterator -- - -/data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc -sql_cntl.h -/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h -sql.h -- -sqlext.h -- -sqltypes.h -- -case_cntl.h -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/sqltest.cc -gflags/gflags.h -/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h -sqltest.h -/data1/farrisli/3TS/src/dbtest/src/sqltest.h - -/data1/farrisli/3TS/src/dbtest/src/sqltest.h -sql_cntl.h -/data1/farrisli/3TS/src/dbtest/src/sql_cntl.h - -/usr/local/include/gflags/gflags.h -string -- -vector -- -gflags/gflags_declare.h -/usr/local/include/gflags/gflags/gflags_declare.h -gflags_gflags.h -/usr/local/include/gflags/gflags_gflags.h - -/usr/local/include/gflags/gflags_declare.h -string -- -stdint.h -- -sys/types.h -- -inttypes.h -- - -/usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make deleted file mode 100644 index 0d8fd949..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make +++ /dev/null @@ -1,195 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -# Include any dependencies generated for this target. -include CMakeFiles/3ts_dbtest.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/3ts_dbtest.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/3ts_dbtest.dir/flags.make - -CMakeFiles/3ts_dbtest.dir/src/common.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make -CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/common.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/common.cc.o -c /data1/farrisli/3TS/src/dbtest/src/common.cc - -CMakeFiles/3ts_dbtest.dir/src/common.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/common.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/common.cc > CMakeFiles/3ts_dbtest.dir/src/common.cc.i - -CMakeFiles/3ts_dbtest.dir/src/common.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/common.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/common.cc -o CMakeFiles/3ts_dbtest.dir/src/common.cc.s - -CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires: - -.PHONY : CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires - -CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides.build -.PHONY : CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides - -CMakeFiles/3ts_dbtest.dir/src/common.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/common.cc.o - - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc > CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.i - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.s - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires: - -.PHONY : CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides.build -.PHONY : CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o - - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc > CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.i - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc -o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.s - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires: - -.PHONY : CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides.build -.PHONY : CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o - - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: CMakeFiles/3ts_dbtest.dir/flags.make -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o -c /data1/farrisli/3TS/src/dbtest/src/sqltest.cc - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/sqltest.cc > CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.i - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/sqltest.cc -o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.s - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires: - -.PHONY : CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides.build -.PHONY : CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o - - -# Object files for target 3ts_dbtest -3ts_dbtest_OBJECTS = \ -"CMakeFiles/3ts_dbtest.dir/src/common.cc.o" \ -"CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o" \ -"CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o" \ -"CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o" - -# External object files for target 3ts_dbtest -3ts_dbtest_EXTERNAL_OBJECTS = - -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/common.cc.o -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/build.make -3ts_dbtest: /usr/local/lib/libgflags.so.2.2.2 -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable 3ts_dbtest" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_dbtest.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/3ts_dbtest.dir/build: 3ts_dbtest - -.PHONY : CMakeFiles/3ts_dbtest.dir/build - -CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/common.cc.o.requires -CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o.requires -CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o.requires -CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o.requires - -.PHONY : CMakeFiles/3ts_dbtest.dir/requires - -CMakeFiles/3ts_dbtest.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/3ts_dbtest.dir/cmake_clean.cmake -.PHONY : CMakeFiles/3ts_dbtest.dir/clean - -CMakeFiles/3ts_dbtest.dir/depend: - cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/3ts_dbtest.dir/depend - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal deleted file mode 100644 index 69bbbd6a..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.internal +++ /dev/null @@ -1,24 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h -CMakeFiles/3ts_dbtest.dir/src/common.cc.o - /data1/farrisli/3TS/src/dbtest/src/common.cc - /data1/farrisli/3TS/src/dbtest/src/common.h -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h - /data1/farrisli/3TS/src/dbtest/src/sql_cntl.cc - /data1/farrisli/3TS/src/dbtest/src/sql_cntl.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h - /data1/farrisli/3TS/src/dbtest/src/sql_cntl.h - /data1/farrisli/3TS/src/dbtest/src/sqltest.cc - /data1/farrisli/3TS/src/dbtest/src/sqltest.h - /usr/local/include/gflags/gflags.h - /usr/local/include/gflags/gflags_declare.h - /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make deleted file mode 100644 index 6f51b0f2..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make +++ /dev/null @@ -1,24 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.cc -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/case_cntl.h -CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o: src/common.h - -CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.cc -CMakeFiles/3ts_dbtest.dir/src/common.cc.o: src/common.h - -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/case_cntl.h -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/common.h -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.cc -CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o: src/sql_cntl.h - -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/case_cntl.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/common.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sql_cntl.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.cc -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: src/sqltest.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags_declare.h -CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o: /usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make deleted file mode 100644 index a72c49ae..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt b/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt deleted file mode 100644 index 12a90341..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/c++ -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb CMakeFiles/3ts_dbtest.dir/src/common.cc.o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o -o 3ts_dbtest -rdynamic -lpthread /usr/local/lib/libgflags.so.2.2.2 -lodbc -lpthread -Wl,-rpath,/usr/local/lib diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make deleted file mode 100644 index 33e6bffb..00000000 --- a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make +++ /dev/null @@ -1,6 +0,0 @@ -CMAKE_PROGRESS_1 = 1 -CMAKE_PROGRESS_2 = 2 -CMAKE_PROGRESS_3 = 3 -CMAKE_PROGRESS_4 = 4 -CMAKE_PROGRESS_5 = 5 - diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.gcda deleted file mode 100644 index ffb3d27ae7cdfde81fe7e9c973da88ee82320be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56460 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℞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 DpD@dJ diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcda deleted file mode 100644 index 918db01e46c4abeac6b82772030653acba029849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88584 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 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/db_test.cc.gcno deleted file mode 100644 index a16c10f14e940a6b01c34c20ff9d028ef3273143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984144 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

    7};WA8UJb*ulr%$sTNp-t%$0!^x|&L^>S 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 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.gcno deleted file mode 100644 index 66a8feb8fdd1eafae2a5d9e89419348a85dfff43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369668 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 z zb&*Fn42o^)2mQ7(ii?eH$Oxa5c7i|U$FGcOdG3!FY7gb!*ai>RxKG9!?m-(ert=vn zN6gCm!I0M!Gm#L+G?Unb&W4G6vB>?&JTCKj_^cBBMbfb^c*C9A@?ajDDjxKUq$?xU zc8;M*;`H9G@e6jvzj4=fJ9j?^U1M&nYE9(qmPD>MWk(ZsWjM0BI}x`N?R`ZHlR4WB ziirEAnIh$h$8rfPp0QKYMKB>2=Zic+WHC#J;72qz29F8&8!{N=kC6~;8qoI!$Twav z`jeL5`IvrQNeF%4Hsr~ngWEnB3>#of7-)m=4AOn;n(l;O@j80Pn1^u)=MO{gBL&q& z?yg3d8VD|B8ZoWEb~k(NfCRiW&Kj-4PE{DIaG z{PAIGC)L`9#{HtlCtqy%c_kst{bQ?_j86UM_}&d0)*Q$DG|*1Un(Ar<9dFe;z2)1I&q}pL8nOO zypqsZ!CAkpw(j%?*?)~Yy7qbU)2LmQj;(G;i-DunidN#E(;~%mMQ^UBBAJP&dfO8f z@u^cQYAaTV$H|JEow8!7&a8OoOkj>YDC(f^uRC>V3?SKy^H1qdcz%N~AxnRgWw@2J zam2KkC!%((Wwj^lSTa>P!)oqHrW00AqAQl`vbwXWWPDAnwMZ1?5_TjlYS6yI+58&S z?AVG_!mW$gd_x2XZ2P9O;3V6UU#nvi?;(b~apj$Zv9A%deQH}&q!gMc&Ufrv+jz8o z>u--8zxANIrf)1t896&9{`WU`MIT%rhg^Le_UMD+v#>s(7wA!rN4VzF5o98HoCd@p z62e$Ub_(7{Ka1Ay!|H}i+;+IU1^R{!h3|Rw9Tt9;ZMS-2na+d-KN9 z*|#tZs$V(h;w;yM6B(7U0HajZrxV9>u=Sjc<`&*8;+iHYpLoy;l)Kz97`*rkY;&w8diKU#-hB}@9^8osM$PxR0Keypt z_zKR2#zC(hb!2kHaSp}D=Gpq!&!Rolzvea#zOr%Sud#mWi_QE`N@m7#xnyT1(i~66 zT|gl}^?c0Y=(Sx07koeI1ldP_Ev1sbg9Zq<_r?2jKC4r~DP}F4&*}1U$d*g)dpR_G zghTgIIB&plg0{@Z-I)3>Fi;ON-$b{~gq+4jUW zx$UJ}4i&a#I=eEVZ_8HEE^N8fY5&}_CFH-!r#pRHwkbF|w!GQLAzMx!8eMd1>&}h) z*1a5kMK~%Ox!?fcNBrdNP?ZTEzoc76gr`?5UavBZT?zN&_^t;|^pJIvRFZ>(a~9GyeLxG3W2#73QhqZ1n{j!taM z^T|WcwR;{M(=lbDy%gg*{95UYv*OuwcdSQD(~WVlm8`Sonl9Rgt!Fzj{C{lEUkgJ& z{YigpuM(Va9!qy@uU2q${8z=%@!y#WdEiq>LB`}+3Xaa$UhCt~*lr&X6WGT z$3DIOwe#lgZgcixz_6BOR;8P1E4mPCtGE~658CFiNN$=Zil1YlD`c;2po?Pqg7&Fx U@xn=w5cEL4K=bX{^x&=cUlOnItpET3 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sql_connector.cc.gcno deleted file mode 100644 index 99827ce4255ff113948e71ac8f307142d6e12f33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374312 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 diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno b/src/dbtest/CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.gcno deleted file mode 100644 index 28d68f559d4e475c4c8ea159f6bba27273f275d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492420 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]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -case_cntl.h -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h -common.h -/data1/farrisli/3TS/src/dbtest/src/common.h - -/data1/farrisli/3TS/src/dbtest/src/common.cc -common.h -/data1/farrisli/3TS/src/dbtest/src/common.h - -/data1/farrisli/3TS/src/dbtest/src/common.h -iostream -- -fstream -- -iomanip -- -algorithm -- -cstdlib -- -cassert -- -unistd.h -- -sys/types.h -- -sys/stat.h -- -string -- -vector -- -unordered_map -- -iterator -- - -/data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc -kv_cntl.h -/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h -bsoncxx/builder/stream/document.hpp -- -bsoncxx/builder/basic/kvp.hpp -- -bsoncxx/json.hpp -- -mongocxx/client.hpp -- -mongocxx/stdx.hpp -- -mongocxx/instance.hpp -- -mongocxx/uri.hpp -- -mongocxx/exception/exception.hpp -- -case_cntl.h -/data1/farrisli/3TS/src/dbtest/src/case_cntl.h - -/data1/farrisli/3TS/src/dbtest/src/kvtest.cc -kvtest.h -/data1/farrisli/3TS/src/dbtest/src/kvtest.h -gflags/gflags.h -/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h - -/data1/farrisli/3TS/src/dbtest/src/kvtest.h -kv_cntl.h -/data1/farrisli/3TS/src/dbtest/src/kv_cntl.h - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp -cstddef -- -cstdint -- -bsoncxx/document/element.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp -cstdlib -- -memory -- -bsoncxx/array/view.hpp -- -bsoncxx/document/value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp -cstddef -- -cstdint -- -iterator -- -bsoncxx/array/element.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp -bsoncxx/array/value.hpp -- -bsoncxx/array/view.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/view_or_value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp -bsoncxx/array/value.hpp -- -bsoncxx/array/view.hpp -- -bsoncxx/builder/basic/impl.hpp -- -bsoncxx/builder/basic/kvp.hpp -- -bsoncxx/builder/basic/sub_array.hpp -- -bsoncxx/builder/core.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp -bsoncxx/builder/basic/impl.hpp -- -bsoncxx/builder/basic/kvp.hpp -- -bsoncxx/builder/basic/sub_document.hpp -- -bsoncxx/builder/core.hpp -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp -bsoncxx/builder/concatenate.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp -bsoncxx/builder/basic/sub_array.hpp -- -bsoncxx/builder/basic/sub_document.hpp -- -bsoncxx/util/functor.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp -tuple -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp -bsoncxx/builder/basic/helpers.hpp -- -bsoncxx/builder/concatenate.hpp -- -bsoncxx/builder/core.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp -bsoncxx/builder/basic/helpers.hpp -- -bsoncxx/builder/concatenate.hpp -- -bsoncxx/builder/core.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp -memory -- -stdexcept -- -type_traits -- -bsoncxx/array/value.hpp -- -bsoncxx/array/view.hpp -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/types.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp -bsoncxx/array/value.hpp -- -bsoncxx/builder/concatenate.hpp -- -bsoncxx/builder/core.hpp -- -bsoncxx/builder/stream/closed_context.hpp -- -bsoncxx/builder/stream/helpers.hpp -- -bsoncxx/util/functor.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp -bsoncxx/builder/core.hpp -- -bsoncxx/builder/stream/key_context.hpp -- -bsoncxx/builder/stream/single_context.hpp -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp -bsoncxx/builder/concatenate.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp -bsoncxx/builder/core.hpp -- -bsoncxx/builder/stream/closed_context.hpp -- -bsoncxx/builder/stream/value_context.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/util/functor.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp -bsoncxx/builder/core.hpp -- -bsoncxx/builder/stream/array_context.hpp -- -bsoncxx/builder/stream/key_context.hpp -- -bsoncxx/builder/stream/value_context.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp -bsoncxx/builder/core.hpp -- -bsoncxx/builder/stream/array_context.hpp -- -bsoncxx/builder/stream/closed_context.hpp -- -bsoncxx/builder/stream/helpers.hpp -- -bsoncxx/util/functor.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp -bsoncxx/config/compiler.hpp -- -bsoncxx/config/config.hpp -- -bsoncxx/config/export.hpp -- -bsoncxx/config/version.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp -cstdint -- -string -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp -cstddef -- -cstdint -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp -cstdlib -- -memory -- -bsoncxx/document/view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp -cstddef -- -cstdint -- -iterator -- -bsoncxx/document/element.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/view_or_value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp -string -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp -array -- -ctime -- -string -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp -bsoncxx/config/prelude.hpp -- -core/optional.hpp -- -bsoncxx/third_party/mnmlstc/core/optional.hpp -- -boost/none.hpp -- -boost/optional/optional.hpp -- -experimental/optional -- -optional -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp -bsoncxx/config/prelude.hpp -- -core/string.hpp -- -bsoncxx/third_party/mnmlstc/core/string.hpp -- -boost/version.hpp -- -boost/utility/string_view.hpp -- -boost/utility/string_ref.hpp -- -experimental/string_view -- -string_view -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp -string -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/view_or_value.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp -bsoncxx/third_party/mnmlstc/core/type_traits.hpp -- -bsoncxx/third_party/mnmlstc/core/utility.hpp -- -functional -- -tuple -- -array -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp -initializer_list -- -system_error -- -functional -- -exception -- -stdexcept -- -memory -- -cstdint -- -bsoncxx/third_party/mnmlstc/core/type_traits.hpp -- -bsoncxx/third_party/mnmlstc/core/functional.hpp -- -bsoncxx/third_party/mnmlstc/core/utility.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp -initializer_list -- -functional -- -stdexcept -- -algorithm -- -iterator -- -string -- -limits -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp -type_traits -- -utility -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp -functional -- -cstddef -- -bsoncxx/third_party/mnmlstc/core/type_traits.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp -chrono -- -cstring -- -bsoncxx/array/view.hpp -- -bsoncxx/decimal128.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/oid.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/enums/type.hpp -- -bsoncxx/enums/binary_sub_type.hpp -- -bsoncxx/enums/type.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp -cstddef -- -cstdint -- -type_traits -- -bsoncxx/types.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/enums/type.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp -functional -- -type_traits -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp -type_traits -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/config/prelude.hpp -- -bsoncxx/config/postlude.hpp -- - -/usr/local/include/gflags/gflags.h -string -- -vector -- -gflags/gflags_declare.h -/usr/local/include/gflags/gflags/gflags_declare.h -gflags_gflags.h -/usr/local/include/gflags/gflags_gflags.h - -/usr/local/include/gflags/gflags_declare.h -string -- -stdint.h -- -sys/types.h -- -inttypes.h -- - -/usr/local/include/gflags/gflags_gflags.h - -/usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp -mongocxx/client_session.hpp -- -mongocxx/model/write.hpp -- -mongocxx/options/bulk_write.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp -memory -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp -memory -- -mongocxx/client_session.hpp -- -mongocxx/database.hpp -- -mongocxx/options/client.hpp -- -mongocxx/options/client_encryption.hpp -- -mongocxx/options/client_session.hpp -- -mongocxx/read_concern.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/stdx.hpp -- -mongocxx/uri.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp -functional -- -memory -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/options/client_session.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp -algorithm -- -bsoncxx/builder/basic/array.hpp -- -bsoncxx/builder/basic/document.hpp -- -bsoncxx/builder/basic/kvp.hpp -- -bsoncxx/builder/concatenate.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/oid.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/bulk_write.hpp -- -mongocxx/change_stream.hpp -- -mongocxx/client_session.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/cursor.hpp -- -mongocxx/index_view.hpp -- -mongocxx/model/insert_one.hpp -- -mongocxx/options/aggregate.hpp -- -mongocxx/options/bulk_write.hpp -- -mongocxx/options/change_stream.hpp -- -mongocxx/options/count.hpp -- -mongocxx/options/delete.hpp -- -mongocxx/options/distinct.hpp -- -mongocxx/options/estimated_document_count.hpp -- -mongocxx/options/find.hpp -- -mongocxx/options/find_one_and_delete.hpp -- -mongocxx/options/find_one_and_replace.hpp -- -mongocxx/options/find_one_and_update.hpp -- -mongocxx/options/index.hpp -- -mongocxx/options/index_view.hpp -- -mongocxx/options/insert.hpp -- -mongocxx/options/replace.hpp -- -mongocxx/options/update.hpp -- -mongocxx/pipeline.hpp -- -mongocxx/read_concern.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/result/delete.hpp -- -mongocxx/result/insert_many.hpp -- -mongocxx/result/insert_one.hpp -- -mongocxx/result/replace_one.hpp -- -mongocxx/result/update.hpp -- -mongocxx/write_concern.hpp -- -string -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp -mongocxx/config/compiler.hpp -- -mongocxx/config/config.hpp -- -mongocxx/config/export.hpp -- -mongocxx/config/version.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp - -/usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp -memory -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp -memory -- -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/client_session.hpp -- -mongocxx/collection.hpp -- -mongocxx/gridfs/bucket.hpp -- -mongocxx/options/create_collection.hpp -- -mongocxx/options/gridfs/bucket.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp -memory -- -bsoncxx/document/view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp -memory -- -bsoncxx/document/view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp -memory -- -bsoncxx/document/view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp -bsoncxx/stdx/string_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp -bsoncxx/stdx/string_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp -bsoncxx/document/view.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp -bsoncxx/oid.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/events/server_description.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp -bsoncxx/oid.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp -bsoncxx/document/view.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp -bsoncxx/oid.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp -bsoncxx/oid.hpp -- -mongocxx/events/topology_description.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp -bsoncxx/oid.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp -vector -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/events/server_description.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp -bsoncxx/oid.hpp -- -mongocxx/events/topology_description.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp -string -- -system_error -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp -istream -- -memory -- -ostream -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/types/bson_value/view.hpp -- -mongocxx/cursor.hpp -- -mongocxx/gridfs/downloader.hpp -- -mongocxx/gridfs/uploader.hpp -- -mongocxx/options/find.hpp -- -mongocxx/options/gridfs/bucket.hpp -- -mongocxx/options/gridfs/upload.hpp -- -mongocxx/result/gridfs/upload.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp -cstddef -- -cstdint -- -memory -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/types/bson_value/view.hpp -- -mongocxx/cursor.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp -cstddef -- -cstdint -- -memory -- -bsoncxx/document/value.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/stdx/string_view.hpp -- -bsoncxx/types/bson_value/view.hpp -- -bsoncxx/view_or_value.hpp -- -mongocxx/client_session.hpp -- -mongocxx/collection.hpp -- -mongocxx/result/gridfs/upload.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp -bsoncxx/document/value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/string/view_or_value.hpp -- -bsoncxx/types/bson_value/view.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp -bsoncxx/document/value.hpp -- -bsoncxx/document/view_or_value.hpp -- -mongocxx/options/index.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp -string -- -vector -- -bsoncxx/document/value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/client_session.hpp -- -mongocxx/cursor.hpp -- -mongocxx/index_model.hpp -- -mongocxx/options/index_view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp -memory -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp -bsoncxx/document/view_or_value.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/pipeline.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/pipeline.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp -cstdint -- -bsoncxx/stdx/optional.hpp -- -mongocxx/model/delete_many.hpp -- -mongocxx/model/delete_one.hpp -- -mongocxx/model/insert_one.hpp -- -mongocxx/model/replace_one.hpp -- -mongocxx/model/update_many.hpp -- -mongocxx/model/update_one.hpp -- -mongocxx/write_type.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp -chrono -- -cstdint -- -bsoncxx/builder/basic/document.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/read_concern.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp -functional -- -mongocxx/events/command_failed_event.hpp -- -mongocxx/events/command_started_event.hpp -- -mongocxx/events/command_succeeded_event.hpp -- -mongocxx/events/heartbeat_failed_event.hpp -- -mongocxx/events/heartbeat_started_event.hpp -- -mongocxx/events/heartbeat_succeeded_event.hpp -- -mongocxx/events/server_changed_event.hpp -- -mongocxx/events/server_closed_event.hpp -- -mongocxx/events/server_opening_event.hpp -- -mongocxx/events/topology_changed_event.hpp -- -mongocxx/events/topology_closed_event.hpp -- -mongocxx/events/topology_opening_event.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp -bsoncxx/stdx/optional.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp -chrono -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/string/view_or_value.hpp -- -bsoncxx/types.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp -string -- -bsoncxx/stdx/optional.hpp -- -mongocxx/options/apm.hpp -- -mongocxx/options/auto_encryption.hpp -- -mongocxx/options/tls.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp -bsoncxx/stdx/optional.hpp -- -mongocxx/options/transaction.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp -chrono -- -cstdint -- -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/validation_criteria.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp -chrono -- -cstdint -- -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp -chrono -- -bsoncxx/stdx/optional.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp -chrono -- -cstdint -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/cursor.hpp -- -mongocxx/hint.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp -chrono -- -cstdint -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp -chrono -- -cstdint -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/options/find_one_common_options.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp -chrono -- -cstdint -- -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/options/find_one_common_options.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp -string -- -bsoncxx/stdx/optional.hpp -- -mongocxx/read_concern.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp -chrono -- -memory -- -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/stdx.hpp -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view_or_value.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp -chrono -- -bsoncxx/stdx/optional.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp -bsoncxx/document/view.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp -string -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp -chrono -- -memory -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/hint.hpp -- -mongocxx/stdx.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp -cstdint -- -memory -- -string -- -bsoncxx/array/view.hpp -- -bsoncxx/array/view_or_value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/document/view_or_value.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp -memory -- -bsoncxx/document/value.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/options/transaction.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp -chrono -- -cstdint -- -memory -- -string -- -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/options/transaction.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp -cstdint -- -map -- -vector -- -bsoncxx/document/value.hpp -- -bsoncxx/document/view.hpp -- -bsoncxx/types.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp -cstdint -- -mongocxx/result/bulk_write.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp -bsoncxx/array/value.hpp -- -bsoncxx/types/bson_value/view.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp -cstdint -- -map -- -bsoncxx/array/value.hpp -- -bsoncxx/types.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp -bsoncxx/array/value.hpp -- -bsoncxx/types.hpp -- -bsoncxx/types/bson_value/view.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp -cstdint -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/types.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp -cstdint -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/types.hpp -- -mongocxx/result/bulk_write.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp -memory -- -string -- -vector -- -bsoncxx/document/view.hpp -- -bsoncxx/string/view_or_value.hpp -- -mongocxx/read_concern.hpp -- -mongocxx/read_preference.hpp -- -mongocxx/write_concern.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp -bsoncxx/document/view_or_value.hpp -- -bsoncxx/stdx/optional.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp -chrono -- -cstdint -- -memory -- -stdexcept -- -bsoncxx/document/value.hpp -- -bsoncxx/stdx/optional.hpp -- -bsoncxx/stdx/string_view.hpp -- -mongocxx/options/transaction.hpp -- -mongocxx/stdx.hpp -- -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - -/usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp -mongocxx/config/prelude.hpp -- -mongocxx/config/postlude.hpp -- - diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make deleted file mode 100644 index b1588967..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/build.make +++ /dev/null @@ -1,197 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -# Include any dependencies generated for this target. -include CMakeFiles/3ts_kvtest.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/3ts_kvtest.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/3ts_kvtest.dir/flags.make - -CMakeFiles/3ts_kvtest.dir/src/common.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make -CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/common.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/common.cc.o -c /data1/farrisli/3TS/src/dbtest/src/common.cc - -CMakeFiles/3ts_kvtest.dir/src/common.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/common.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/common.cc > CMakeFiles/3ts_kvtest.dir/src/common.cc.i - -CMakeFiles/3ts_kvtest.dir/src/common.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/common.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/common.cc -o CMakeFiles/3ts_kvtest.dir/src/common.cc.s - -CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires: - -.PHONY : CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires - -CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides.build -.PHONY : CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides - -CMakeFiles/3ts_kvtest.dir/src/common.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/common.cc.o - - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc > CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.i - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc -o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.s - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires: - -.PHONY : CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides.build -.PHONY : CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o - - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o -c /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc > CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.i - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc -o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.s - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires: - -.PHONY : CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides.build -.PHONY : CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o - - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: CMakeFiles/3ts_kvtest.dir/flags.make -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o -c /data1/farrisli/3TS/src/dbtest/src/kvtest.cc - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/kvtest.cc > CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.i - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/kvtest.cc -o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.s - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires: - -.PHONY : CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides.build -.PHONY : CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.provides.build: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o - - -# Object files for target 3ts_kvtest -3ts_kvtest_OBJECTS = \ -"CMakeFiles/3ts_kvtest.dir/src/common.cc.o" \ -"CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o" \ -"CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o" \ -"CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o" - -# External object files for target 3ts_kvtest -3ts_kvtest_EXTERNAL_OBJECTS = - -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/common.cc.o -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/build.make -3ts_kvtest: /usr/local/lib64/libmongocxx.so.3.6.2 -3ts_kvtest: /usr/local/lib/libgflags.so.2.2.2 -3ts_kvtest: /usr/local/lib64/libbsoncxx.so.3.6.2 -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable 3ts_kvtest" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_kvtest.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/3ts_kvtest.dir/build: 3ts_kvtest - -.PHONY : CMakeFiles/3ts_kvtest.dir/build - -CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/common.cc.o.requires -CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o.requires -CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o.requires -CMakeFiles/3ts_kvtest.dir/requires: CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o.requires - -.PHONY : CMakeFiles/3ts_kvtest.dir/requires - -CMakeFiles/3ts_kvtest.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/3ts_kvtest.dir/cmake_clean.cmake -.PHONY : CMakeFiles/3ts_kvtest.dir/clean - -CMakeFiles/3ts_kvtest.dir/depend: - cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_kvtest.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/3ts_kvtest.dir/depend - diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal deleted file mode 100644 index df5f5b84..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.internal +++ /dev/null @@ -1,286 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.cc - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h -CMakeFiles/3ts_kvtest.dir/src/common.cc.o - /data1/farrisli/3TS/src/dbtest/src/common.cc - /data1/farrisli/3TS/src/dbtest/src/common.h -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h - /data1/farrisli/3TS/src/dbtest/src/kv_cntl.cc - /data1/farrisli/3TS/src/dbtest/src/kv_cntl.h - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o - /data1/farrisli/3TS/src/dbtest/src/case_cntl.h - /data1/farrisli/3TS/src/dbtest/src/common.h - /data1/farrisli/3TS/src/dbtest/src/kv_cntl.h - /data1/farrisli/3TS/src/dbtest/src/kvtest.cc - /data1/farrisli/3TS/src/dbtest/src/kvtest.h - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp - /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp - /usr/local/include/gflags/gflags.h - /usr/local/include/gflags/gflags_declare.h - /usr/local/include/gflags/gflags_gflags.h - /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp - /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make deleted file mode 100644 index 176e579a..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/depend.make +++ /dev/null @@ -1,286 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.cc -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/case_cntl.h -CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o: src/common.h - -CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.cc -CMakeFiles/3ts_kvtest.dir/src/common.cc.o: src/common.h - -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/case_cntl.h -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/common.h -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.cc -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: src/kv_cntl.h -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp -CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp - -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/case_cntl.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/common.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kv_cntl.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.cc -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: src/kvtest.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/element.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/array/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/array.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/document.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/helpers.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/impl.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/kvp.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_array.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/basic/sub_document.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/concatenate.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/array_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/closed_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/helpers.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/key_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/single_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/builder/stream/value_context.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/compiler.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/config.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/export.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/postlude.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/prelude.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/config/version.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/decimal128.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/document/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/binary_sub_type.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/enums/type.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/json.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/oid.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/string/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/functional.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/optional.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/string.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/type_traits.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/third_party/mnmlstc/core/utility.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/types/bson_value/view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/util/functor.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/bsoncxx/v_noabi/bsoncxx/view_or_value.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags_declare.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/gflags/gflags_gflags.h -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/change_stream.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/client_session.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/collection.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/compiler.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/config.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/export.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/postlude.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/prelude.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/config/version.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/cursor.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/database.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_failed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_started_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/command_succeeded_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_failed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_started_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/heartbeat_succeeded_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_changed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_closed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_description.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/server_opening_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_changed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_closed_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_description.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/events/topology_opening_event.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/exception/exception.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/bucket.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/downloader.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/gridfs/uploader.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/hint.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_model.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/index_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/instance.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/delete_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/insert_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/replace_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/update_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/model/write.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/aggregate.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/apm.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/auto_encryption.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/change_stream.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_encryption.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/client_session.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/count.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/create_collection.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/distinct.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/estimated_document_count.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_replace.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_and_update.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/find_one_common_options.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/bucket.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/gridfs/upload.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/index_view.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/insert.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/replace.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/tls.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/transaction.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/options/update.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/pipeline.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_concern.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/read_preference.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/bulk_write.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/delete.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/gridfs/upload.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_many.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/insert_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/replace_one.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/result/update.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/stdx.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/uri.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/validation_criteria.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_concern.hpp -CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o: /usr/local/include/mongocxx/v_noabi/mongocxx/write_type.hpp - diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make deleted file mode 100644 index 6806b272..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include/mongocxx/v_noabi -isystem /usr/local/include/bsoncxx/v_noabi -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -I/usr/local/lib -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt b/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt deleted file mode 100644 index 2ed189b0..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/c++ -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb CMakeFiles/3ts_kvtest.dir/src/common.cc.o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o -o 3ts_kvtest -rdynamic /usr/local/lib64/libmongocxx.so.3.6.2 -lpthread /usr/local/lib/libgflags.so.2.2.2 /usr/local/lib64/libbsoncxx.so.3.6.2 -lpthread -Wl,-rpath,/usr/local/lib64:/usr/local/lib diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make deleted file mode 100644 index a7bea209..00000000 --- a/src/dbtest/CMakeFiles/3ts_kvtest.dir/progress.make +++ /dev/null @@ -1,6 +0,0 @@ -CMAKE_PROGRESS_1 = 6 -CMAKE_PROGRESS_2 = 7 -CMAKE_PROGRESS_3 = 8 -CMAKE_PROGRESS_4 = 9 -CMAKE_PROGRESS_5 = 10 - diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcda deleted file mode 100644 index 688565985187a9fe753609cb16431bcd2d83f78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91936 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 OKe%E5)BRn0qyHaeky)Vt diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.gcno deleted file mode 100644 index 06fcd9eb09b48ae9ca46ecce991e3012ce8c5d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628520 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 B(U?+-fPwxJE3n{vY;hxcIy66P&aD4-cQm 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 SP-h-JsP1&UZKj8Cx&H@A6P|Ja diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/common.cc.gcda deleted file mode 100644 index 5ac3ea8b12a93c6b55a31579db764fa56e652c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121172 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 ^rg+stJjgF2 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

    qPDTRg zLUuct_M6i<&_r1YA-V%jr-vqZLkPk0;n>(ut2jnt2u_z}awSn-o9>0+%=F-(dxTbT z$WI8tndPC!bwk^LlV_cYkDfg1Op-W-;t^7wXXmY&ecqq8U4)-?h+HS^1{kb=3TG+Knz6$SN^p+Q6R+dlbE_ceyGu6SKRsGen>}h$@=!lGtO)r;wMyln} zo&gyblUmOplx)5l4fFxQJ+*|bip`QC8889a;obUd0k zbW>%b&*r)vehp>R@(G{|+3iD`Up^euqmVYzhhw_bDo!4sCP`1BxS#OpQ=hy1?6oU4 zKNh=3A1s$%&RSJnT^r2x4#KNNZs_9QpdfARhx+u->{nd>EFC(?cu`)znsR6v9FW6; zpRQQ)8zOHXP9FX9;pEZ3Bu=3?MauJ^J9QWS?H|AN&r25WaZB#CbmH&G3dWMW7#Cm4 z7{sd`W$+07*_lD4NPpD7Zm(_Q8OXru9em{4XXEPj?798Ubb4^>aryNRKJ4UpAb>99 zw|_pIJo=|HNz#)?|9m(mhmd-eESK89J@-GZJa5N;-J!L2ux3Xa(KTJW=UvxzV`Tqs zirGKqwO@ZphM4(PUTQk7>w1@8kDy0s5kMF6>roO%`ThC}_vk#bXVT5|rK0vG$2`c) z-k!0ZTYy?xE|%r|(&OJL&;6E4}g{7xLEwAC8ta zjE_kiZHG5|;AJQM@rz&naBFMYyUMY53!IeUVTf(LT+%b%%dfS=T1LMeYbIml$Pt%g ze10I5E-2EFUxr#P!zmQ`R`qp{oOIxOzwnhuZ+riB-`ZNPljB02l{Gyh_W9~cX(nIG zavv{T(cPs3?9Iv%%gnG$;TAdI8Ef>7zvQ>^Vg8HPA^2x?ha|zf70~)i-#WML|Vj9>{U6eKB7##8Wc`Qq zG#kTzar;I+GI=1kw7o(u#QW|MM}CfUKH{K*G*&mv1`@AxntG44c8|2w0pIh??xpXM z2m6OVMnHelX?Or=IN#BDv#Di^RAda%tby@qa&_>(q!yq1eO&*hz zU4w_s+gZ-YiI7(>Sle0;$-V0HV6s-Z9u$xA5%S>iu0%a3p7J#x9`DN4gW{RJ&qJRN z&vZKv9(KAOls>cn?ZTs85ZZ-D9U`;?51ppo5%S{UKh}ft5G+C-%zZR#bXGi@|ICBu z(;2gUdGIEC=rg;Q2hXR2*d9Xbc!lB=!8x_I^*t+s5b5@Sj29~cK z;w6RPMibI<(Z>2?>ObwawT;R7IZ4$=g5t0BukClzFrd-NW*xYyK7@ zAOC0%sAJk^(lJ&oZ+qJav+X7u>_pmDH)|`b4KbW}JHkC{3(}Yt|9rF&@pgl9)@f|L zKV$tVfsI1z?E$_?Jt$r)?ST&u*%0#7Mf1xPLFsFyJ@Db7AB1+%*GhYkrmxlZ06eYN zu84AKy*)_N*lK&=!$TH?)@4#CG6rzTO>>WW>VJlwedXil-i`k7j>U|Dp7o0cWE4=A z&~@?010`T5CR*<$b8uA#*B_O%==YE1F#lThGn?%+TV*~Zz8!d4XB2}p={T;jEoyJF z&)M2~wK)Ah5}bO-K6aSKdaMp2|0#~yk`SIgp1{%le||Q4!^@{Ee%F1-5C6!mHR?>w zlg#cJ9j&b%EG?_pcF9d;nI7Zr6=q@!YL2Pe4!)RW>7&0-6(Ztbc3GyeR(o)=$TE$y zCV``}Tz=6##U0-D$e)_Za%N>{_$-m6e28rzDoryTNxe+Wy&il(mWc!aLG%V57A-I`2RnY4{~x`K(yPQ?@u3`Oz=Z!EDfd3^`C6A$ zSNy&w_s~g_E6LgY#S!i{o|F^8MvFh8357-APFA4j}=^uetjPV{_zwq$UjRHW~r{8Ss$i1v8C{{w1T B$!-7u diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/db_test.cc.gcno deleted file mode 100644 index 35bd50a4fb22f00ff18cc88acfaf52ef2f0729e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984144 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

    JKA8|dgtN4qRADyYj>bYm+6({3>0_Q-7>? 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

  • h2e+P~1epRaP=qj$iS^ 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 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcda deleted file mode 100644 index cdf7a872112e23fe4fb6d6e8602574f77c3c6fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70320 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 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.gcno deleted file mode 100644 index 4aa1feaa82b05b9ca97df0e4a8613fdafb42cd7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642356 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%0A)1m|i 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 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcda deleted file mode 100644 index 70c8b7cd89bef0b19b0b63eea2b47504d1141c93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69908 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 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.gcno deleted file mode 100644 index a172dd07074c68caa2107cb7f82e492d5631c69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517908 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 Cfti5- diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno deleted file mode 100644 index ee16ddfd558350e806bb545477a5505e95a1fac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397004 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 Sf1J>jrXEb))vj~zbN?SEV^S6X diff --git a/src/dbtest/CMakeFiles/CMakeOutput.log b/src/dbtest/CMakeFiles/CMakeOutput.log deleted file mode 100644 index 6407c540..00000000 --- a/src/dbtest/CMakeFiles/CMakeOutput.log +++ /dev/null @@ -1,570 +0,0 @@ -The system is: Linux - 5.4.32-1-tlinux4-0001 - x86_64 -Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. -Compiler: /usr/bin/cc -Build flags: -Id flags: - -The output was: -0 - - -Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - -The C compiler identification is GNU, found in "/data1/farrisli/3TS/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out" - -Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. -Compiler: /usr/bin/c++ -Build flags: -Id flags: - -The output was: -0 - - -Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - -The CXX compiler identification is GNU, found in "/data1/farrisli/3TS/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out" - -Determining if the C compiler works passed with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_83bcb/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_83bcb.dir/build.make CMakeFiles/cmTC_83bcb.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o -/usr/bin/cc -o CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp/testCCompiler.c -Linking C executable cmTC_83bcb -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_83bcb.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o -o cmTC_83bcb -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - -Detecting C compiler ABI info compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_31c81/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_31c81.dir/build.make CMakeFiles/cmTC_31c81.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -/usr/bin/cc -o CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c -Linking C executable cmTC_31c81 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31c81.dir/link.txt --verbose=1 -/usr/bin/cc -v CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -o cmTC_31c81 -rdynamic -Using built-in specs. -COLLECT_GCC=/usr/bin/cc -COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-redhat-linux -Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux -Thread model: posix -gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) -COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64' - /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccSKy7jS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_31c81 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64' -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - -Parsed C implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp] - ignore line: [] - ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_31c81/fast"] - ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_31c81.dir/build.make CMakeFiles/cmTC_31c81.dir/build] - ignore line: [gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] - ignore line: [Building C object CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o] - ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c] - ignore line: [Linking C executable cmTC_31c81] - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31c81.dir/link.txt --verbose=1] - ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -o cmTC_31c81 -rdynamic ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/cc] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] - ignore line: [Thread model: posix] - ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccSKy7jS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_31c81 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccSKy7jS.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_31c81] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting C [-std=c11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_12ee6/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_12ee6.dir/build.make CMakeFiles/cmTC_12ee6.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o -/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c -Linking C executable cmTC_12ee6 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_12ee6.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o -o cmTC_12ee6 -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:1c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c99] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_e54c5/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_e54c5.dir/build.make CMakeFiles/cmTC_e54c5.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o -/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c -Linking C executable cmTC_e54c5 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e54c5.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o -o cmTC_e54c5 -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c90] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_3fbce/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_3fbce.dir/build.make CMakeFiles/cmTC_3fbce.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o -/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c -Linking C executable cmTC_3fbce -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3fbce.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o -o cmTC_3fbce -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:0c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:0c_variadic_macros -Determining if the CXX compiler works passed with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_4374d/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_4374d.dir/build.make CMakeFiles/cmTC_4374d.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o -/usr/bin/c++ -o CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx -Linking CXX executable cmTC_4374d -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4374d.dir/link.txt --verbose=1 -/usr/bin/c++ CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o -o cmTC_4374d -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - -Detecting CXX compiler ABI info compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_6a715/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_6a715.dir/build.make CMakeFiles/cmTC_6a715.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -/usr/bin/c++ -o CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp -Linking CXX executable cmTC_6a715 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a715.dir/link.txt --verbose=1 -/usr/bin/c++ -v CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6a715 -rdynamic -Using built-in specs. -COLLECT_GCC=/usr/bin/c++ -COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-redhat-linux -Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux -Thread model: posix -gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) -COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' - /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRTUiYm.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6a715 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - -Parsed CXX implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp] - ignore line: [] - ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_6a715/fast"] - ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_6a715.dir/build.make CMakeFiles/cmTC_6a715.dir/build] - ignore line: [gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] - ignore line: [Building CXX object CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o] - ignore line: [/usr/bin/c++ -o CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Linking CXX executable cmTC_6a715] - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a715.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6a715 -rdynamic ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] - ignore line: [Thread model: posix] - ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRTUiYm.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6a715 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccRTUiYm.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_6a715] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting CXX [-std=c++14] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_25c7b/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_25c7b.dir/build.make CMakeFiles/cmTC_25c7b.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o -/usr/bin/c++ -std=c++14 -o CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_25c7b -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_25c7b.dir/link.txt --verbose=1 -/usr/bin/c++ CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o -o cmTC_25c7b -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:1cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:1cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:1cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:1cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:1cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:1cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:1cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:1cxx_relaxed_constexpr - Feature record: CXX_FEATURE:1cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:1cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_58341/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_58341.dir/build.make CMakeFiles/cmTC_58341.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o -/usr/bin/c++ -std=c++11 -o CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_58341 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58341.dir/link.txt --verbose=1 -/usr/bin/c++ CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o -o cmTC_58341 -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++98] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_7ff84/fast" -gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -/usr/bin/gmake -f CMakeFiles/cmTC_7ff84.dir/build.make CMakeFiles/cmTC_7ff84.dir/build -gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o -/usr/bin/c++ -std=c++98 -o CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_7ff84 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7ff84.dir/link.txt --verbose=1 -/usr/bin/c++ CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o -o cmTC_7ff84 -rdynamic -gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' -gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:0cxx_alias_templates - Feature record: CXX_FEATURE:0cxx_alignas - Feature record: CXX_FEATURE:0cxx_alignof - Feature record: CXX_FEATURE:0cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:0cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:0cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:0cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:0cxx_default_function_template_args - Feature record: CXX_FEATURE:0cxx_defaulted_functions - Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:0cxx_delegating_constructors - Feature record: CXX_FEATURE:0cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:0cxx_enum_forward_declarations - Feature record: CXX_FEATURE:0cxx_explicit_conversions - Feature record: CXX_FEATURE:0cxx_extended_friend_declarations - Feature record: CXX_FEATURE:0cxx_extern_templates - Feature record: CXX_FEATURE:0cxx_final - Feature record: CXX_FEATURE:0cxx_func_identifier - Feature record: CXX_FEATURE:0cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:0cxx_inheriting_constructors - Feature record: CXX_FEATURE:0cxx_inline_namespaces - Feature record: CXX_FEATURE:0cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:0cxx_local_type_template_args - Feature record: CXX_FEATURE:0cxx_long_long_type - Feature record: CXX_FEATURE:0cxx_noexcept - Feature record: CXX_FEATURE:0cxx_nonstatic_member_init - Feature record: CXX_FEATURE:0cxx_nullptr - Feature record: CXX_FEATURE:0cxx_override - Feature record: CXX_FEATURE:0cxx_range_for - Feature record: CXX_FEATURE:0cxx_raw_string_literals - Feature record: CXX_FEATURE:0cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:0cxx_right_angle_brackets - Feature record: CXX_FEATURE:0cxx_rvalue_references - Feature record: CXX_FEATURE:0cxx_sizeof_member - Feature record: CXX_FEATURE:0cxx_static_assert - Feature record: CXX_FEATURE:0cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:0cxx_thread_local - Feature record: CXX_FEATURE:0cxx_trailing_return_types - Feature record: CXX_FEATURE:0cxx_unicode_literals - Feature record: CXX_FEATURE:0cxx_uniform_initialization - Feature record: CXX_FEATURE:0cxx_unrestricted_unions - Feature record: CXX_FEATURE:0cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:0cxx_variadic_macros - Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 deleted file mode 100644 index 556469df..00000000 --- a/src/dbtest/CMakeFiles/Makefile2 +++ /dev/null @@ -1,145 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# The main recursive all target -all: - -.PHONY : all - -# The main recursive preinstall target -preinstall: - -.PHONY : preinstall - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -#============================================================================= -# Target rules for target CMakeFiles/3ts_dbtest.dir - -# All Build rule for target. -CMakeFiles/3ts_dbtest.dir/all: - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/depend - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2,3,4,5 "Built target 3ts_dbtest" -.PHONY : CMakeFiles/3ts_dbtest.dir/all - -# Include target in all. -all: CMakeFiles/3ts_dbtest.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/3ts_dbtest.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 5 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_dbtest.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 -.PHONY : CMakeFiles/3ts_dbtest.dir/rule - -# Convenience name for target. -3ts_dbtest: CMakeFiles/3ts_dbtest.dir/rule - -.PHONY : 3ts_dbtest - -# clean rule for target. -CMakeFiles/3ts_dbtest.dir/clean: - $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/clean -.PHONY : CMakeFiles/3ts_dbtest.dir/clean - -# clean rule for target. -clean: CMakeFiles/3ts_dbtest.dir/clean - -.PHONY : clean - -#============================================================================= -# Target rules for target CMakeFiles/3ts_kvtest.dir - -# All Build rule for target. -CMakeFiles/3ts_kvtest.dir/all: - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/depend - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=6,7,8,9,10 "Built target 3ts_kvtest" -.PHONY : CMakeFiles/3ts_kvtest.dir/all - -# Include target in all. -all: CMakeFiles/3ts_kvtest.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/3ts_kvtest.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 5 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_kvtest.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 -.PHONY : CMakeFiles/3ts_kvtest.dir/rule - -# Convenience name for target. -3ts_kvtest: CMakeFiles/3ts_kvtest.dir/rule - -.PHONY : 3ts_kvtest - -# clean rule for target. -CMakeFiles/3ts_kvtest.dir/clean: - $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/clean -.PHONY : CMakeFiles/3ts_kvtest.dir/clean - -# clean rule for target. -clean: CMakeFiles/3ts_kvtest.dir/clean - -.PHONY : clean - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/src/dbtest/CMakeFiles/TargetDirectories.txt b/src/dbtest/CMakeFiles/TargetDirectories.txt deleted file mode 100644 index fb8187a6..00000000 --- a/src/dbtest/CMakeFiles/TargetDirectories.txt +++ /dev/null @@ -1,2 +0,0 @@ -/data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_kvtest.dir -/data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd731..00000000 --- a/src/dbtest/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin deleted file mode 100755 index c2ef8969f8f0eeb2b4f4bf65835862b8dd019a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20744 zcmeHPeT*DOm9N?L#~M4c>tH7aM|dLOa2(vbYaFu<=PHbgC|PUv@5rFXU~jSz*?M8qEXw@HbY-0d&> zdGcR+hYW(IrHASE02WMH?gNlhs#Y9J6IS~{m0z4*E~@%5RYB2Tawd0d?=R)ImK?V> zvvp=@$JQO&jcUc%ChNTp*^^C;?msN%PcP11|KCr(_3RzzR^5Gcbo9hyKX{VLO=Y0; zh=&~Uv--(T_CfJfuTOs9#^ovd#Ad=s$4UH#N1lJ>gR6G``?p^D+Yhg~_4BL0`u>*| zKKRiue0baB`B(qrLq~2n|IAAdU$gGThrt@_HX$aZiMygXG{V=5l70LW2UK9A`s*l}*`l zTw&UI%eRo|0ib!uHEUHnkKzy-@PWl8WU^Xiz?7-vsx{Mb9UpOxZ~=fA9UmLsZEiER z8Mg$L?UE!R^#96;<$hLsv$Kk<`}={QxbWVz^pR~R6h>sR1rJgWA}_Y!)Hm2&YQeef zIj%!H8t7=Cqk)bFIvVI`pre6~2LALl@blic{3d(+m7eUUm%o6ydG_NAepmh3?D4Zb zXJp|ie(=??x##ZA&b^pD{=x*^|4zN$H+k{tY5KFZt_{RY7I7s(zt&(*wkKMp5w3N&Z_tM&zc;+0&Q1vvU`- zrx)LwO+1x-?y|oQ3G7k{^wcjDdN=K9%2WOi?8+co)ZTbFJNNS9{q=hNspb7Z5=YO> zBOh=#3rPGw`4lnEedKr9x!T1~kNhtCQ125Dr0{~%`wt68TPoALDJ_UUbLZIHcQbd4 z&Apa6oSFN5W@7y0+t0pJh{M^FTZtYTzv*St>EahJ*X!BSzwh=p4W3u^8=w2l_}puI z=Kd#BU-!N2@iU3+&hOX$i}d~1M>BtuIhwgUW1g80mycS4@|Eq>Xc^L4$8|K&(LhH7 z9Sw9e(9u9g104-?G|e%q_Qp`E|vSXI-v%hM$Y=^2Wy6&Fz{Xp;1O&zY?0Q{y-k zZ`!kS$TP1=q2^aie|Fk#kD7E`%bUeU9JULslBQU>ii@qpnQ50B2IlPpbbk-4(Tn~R%lOb+fuPS2c9dY3A1S`S))5_>{_MvmL+YQPTqEXr{LHc z+bY^F86?&Ru46gwlmH#UOO4pdt~+TLy2b>a5TZq+2)5ZW>CW~Y5ksEvSz>{yODkb zY8eb*sd;oY*uJK8PI1aNQTmc?PI^}E9^2QLs&}tds?h+WN~vL~!X7IHrP%g-l-{js z)%G+k0|im5QlAZ{JxEU)er7a1)a}a{BXpyOKjqn09u@+FYA=ZISq^Nuc!klj<~q4b z-d>`~z=8HIH@l!5UD`9Oxv+P%e~v~p2x*@KI3nULk=MPJ=g>)&h62J$l8Z0vpyo#~=;G@BRe_1i&@faXDyKd#qjK!-pd0zCzK0hAn_vm%$c z|DZ_B^d&Z~S=lp>10{6sgwFgt`=9kXExwCAEBgo=!0#1cd|romumCSUi@f9+p-i&x z6J5KnS#c*4QgKvv~#4fg^2Q6 zu3Nz}NrZRcmVtK*X$Q@8w~QXRQ*0Rl(D+tB=C?&2HSP^cpls%5ye#DIG4aM;of6`W zp|~x%f;sI~d|STHQ0M1yB(S$Fdk-9(7~6Z7sFT=rA=#VdDQYZZWey!00oQ^3hY%kr z&q_Z3FGXb;ZzOd`)2fuQUQnR75OccXV712sPh*S=>bBxqU~7S{r3A_$}TT00( zx&+6y)$OXi4=Wngf2XaQ)uvuZ}h3uXhv^uL7d*+sDRP_&F#xn$HULf>y$0% zc=%cRHT6u@@f=g~{C!58?eTXPkEpc%*tSRg@^u&|-#8hot-?c`1v`{`uS&t^H|9E3kr|6 z=OSZvVp&lBD4tSyR6o0b>-3xj z-i6hLW0CRjeF~qC;71kyYy__YPqd61WKQHhCh_)h>`|4Dh}7$G$=^O6{u^*z`F|w& zuMu<%p4{_lAtbK8KbQQy;uXy}tV=&3CsFO=`8wbUyxsMvd}ZeN^E2RGc&Ca!FK(3h zYQg%Pl= z1i0=y>j#1BzO#N9xb8daM-|Tfv|rWY?}1ak(eJn?U`X`+b+o=;ll<-9Wq(_x&;7_& z>HiDxl=8QdMa55FijYH4x=RvQffjN-UdU4|VfOw-3@-X>RgW$O=*NmhKW+mscWmG4 z+4(8U4{iwPAL=)Z=6`VF`hcA04;mF=s1*#ki)ZAbVfmeQgvXew_&PovZq%@Eeve(6 z)e6K#8dx9j{MxiuC??LZXYkp0q^MN{I6B{l8XK~b7|k7J|n{q0g= zD}CH=R1P%-0Jhm)6QhFYc*AWF=8uch=sqIYuJip_gDR@ zfg=#Y{HyVyLV!}K_8!da8!<=r@1dJ5Of1ZsBUuGz_Z*}WRV(I{<>u*j3%%(IbI)D- zGyBGNgB!PDG!i2dZ4`!Xsb~RYrxNDq_<`ZfxOrgj-a{i3=0s+Ad<4bNUV9PTh!MK` zVySB{mb#>)+4S;C4At7QNI3K0xaoB3Eg8D&KeShT2%|b%_N_@!-wWsz`{cSV#$gu= z&PLI#8Iv^!7tc88loHAek8Sm>qL6V@v|MfEXI-QhP~Qt;)cLBd5ef)PbpKG%0q%ffke|8PqCc9>FNjutpx-{AY5c;8M%OJ4R9eJg%6#bo)jU1@}x_ZhuS zhMIpc-3+-M2(`-dddZ?nFcspaId9nQLGU%~&2j#`pV&k132@^9Y0P7KRG7(rcxW$? z<$3+(h?1Wo<-pOt19@4V_YLm=CSOTF$t^5PD=JB2zcL5~X|SK@-T2X7Bj?ZSIghD{ z*IN`b&%>CH={<<2y-N=By3f-}Af@D^&6DlYg7@z-awXAfEI> z=}X7&L2}Vt;HI&#i?-jV5Zx-z^Wc<{|G3gWr=nmEius5f6N$^y~+|4zws z{V}l)SW^M{rFwq~LP98*gMu!Nq9U?9uXFLeTy$2e)kX8Cvret@ydE~NIgnat6^5Vn z&+rrQ&>dIGTpR0Vd{0-DpTkW55wf&S&+@#!w!r`h$9zGk8D{)n5kYOw^1Kem_n~fV4N5-R zUaC5rocIZRlopqt@9(y7nF(OmaHBKZ5{a6r@C@G6qa&Ail2b@G?80Y`5{AQBY+ E3+j&d761SM diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c deleted file mode 100644 index 5a17cdba..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.c +++ /dev/null @@ -1,34 +0,0 @@ - - const char features[] = {"" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 -"1" -#else -"0" -#endif -"c_function_prototypes\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_restrict\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L -"1" -#else -"0" -#endif -"c_static_assert\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_variadic_macros\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx deleted file mode 100644 index 54f83f04..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.cxx +++ /dev/null @@ -1,405 +0,0 @@ - - const char features[] = {"" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_aggregate_default_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alias_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignof\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_attributes\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_attribute_deprecated\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_auto_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_binary_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_contextual_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_decltype\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_decltype_auto\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_decltype_incomplete_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_default_function_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_move_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_delegating_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_deleted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_digit_separators\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_enum_forward_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_explicit_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_extended_friend_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_extern_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_final\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_func_identifier\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_generalized_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_generic_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_inheriting_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_inline_namespaces\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_lambda_init_captures\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_local_type_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_long_long_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_noexcept\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_nonstatic_member_init\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_nullptr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_override\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_range_for\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_raw_string_literals\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_reference_qualified_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_relaxed_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_return_type_deduction\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_right_angle_brackets\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_rvalue_references\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_sizeof_member\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_static_assert\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_strong_enums\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus -"1" -#else -"0" -#endif -"cxx_template_template_parameters\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_thread_local\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_trailing_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unicode_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_uniform_initialization\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unrestricted_unions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_user_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_variable_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_macros\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_templates\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks deleted file mode 100644 index f599e28b..00000000 --- a/src/dbtest/CMakeFiles/progress.marks +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt index 303a388a..2f7e70bf 100644 --- a/src/dbtest/CMakeLists.txt +++ b/src/dbtest/CMakeLists.txt @@ -29,7 +29,7 @@ list(APPEND SOURCE_FILES_SQL add_executable(3ts_dbtest ${SOURCE_FILES_SQL}) # ld:odbc list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") -find_package(odbc REQUIRED) +find_package(ODBC REQUIRED) list(APPEND ODBC_LD odbc) # link ld target_link_libraries(3ts_dbtest ${THIRD_PARTIES}) From cb95ebd88fadb15e03cf6e8e46164144fbdb6216 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 7 Jul 2022 19:26:30 +0800 Subject: [PATCH 33/81] add release connect handle, remove some configs --- src/dbtest/auto_test.sh | 23 +++++++++++++++-------- src/dbtest/src/sql_cntl.h | 6 +++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/dbtest/auto_test.sh b/src/dbtest/auto_test.sh index 83610809..5b38af31 100755 --- a/src/dbtest/auto_test.sh +++ b/src/dbtest/auto_test.sh @@ -4,27 +4,34 @@ db=$1 isolation=$2 if [ $db == "sqlserver" ] then - ./3ts_dbtest -isolation=$2 -db_type="sqlserver" -user="SA" -passwd="Ly.123456" -case_dir="sqlserver" + ./3ts_dbtest -isolation=$2 -db_type="sqlserver" -user="username" -passwd="password" -case_dir="sqlserver" elif [ $db == "mysql" ] then - ./3ts_dbtest -isolation=$2 -db_type="mysql" -user="test123" -passwd="Ly.123456" -case_dir="mysql" + ./3ts_dbtest -isolation=$2 -db_type="mysql" -user="username" -passwd="password" -case_dir="mysql" +elif [ $db == "myrocks" ] +then + ./3ts_dbtest -isolation=$2 -db_type="myrocks" -user="username" -passwd="password" -case_dir="myrocks" elif [ $db == "tidb" ] then - ./3ts_dbtest -isolation=$2 -db_type="tidb" -user="test123" -passwd="Ly.123456" -case_dir="tidb" + ./3ts_dbtest -isolation=$2 -db_type="tidb" -user="username" -passwd="password" -case_dir="tidb" elif [ $db == "oracle" ] then - ./3ts_dbtest -isolation=$2 -db_type="oracle" -user="system" -passwd="oracle" -case_dir="oracle" + ./3ts_dbtest -isolation=$2 -db_type="oracle" -user="username" -passwd="password" -case_dir="oracle" elif [ $db == "pg" ] then - ./3ts_dbtest -isolation=$2 -db_type="pg" -user="test123" -passwd="Ly.123456" -case_dir="pg" + #./3ts_dbtest -isolation=$2 -db_type="pg" -user="username" -passwd="password" -case_dir="pg" + ./3ts_dbtest -isolation=$2 -db_type="pg" -user="username" -passwd="password" -case_dir="pg" elif [ $db == "ob" ] then - ./3ts_dbtest -isolation=$2 -db_type="ob" -user="sys@oracle" -passwd="" -case_dir="ob" + #./3ts_dbtest -isolation=$2 -db_type="ob" -user="username" -passwd="" -case_dir="ob" + #./3ts_dbtest -isolation=$2 -db_type="ob" -user="username" -passwd="" -case_dir="ob" + #./3ts_dbtest -isolation=$2 -db_type="ob" -user="username" -passwd="" -case_dir="ob" + ./3ts_dbtest -isolation=$2 -db_type="ob" -user="username" -passwd="password" -case_dir="ob" elif [ $db == "crdb" ] then - ./3ts_dbtest -isolation=$2 -db_type="crdb" -user="test123" -passwd="Ly.123456" -case_dir="crdb" + ./3ts_dbtest -isolation=$2 -db_type="crdb" -user="username" -passwd="password" -case_dir="crdb" else [ $db == "mongodb" ] - ./3ts_dbtest -isolation=$2 -db_type="mongodb" -user="test123" -passwd="Ly.123456" -case_dir="mysql" + ./3ts_dbtest -isolation=$2 -db_type="mongodb" -user="username" -passwd="password" -case_dir="mysql" fi diff --git a/src/dbtest/src/sql_cntl.h b/src/dbtest/src/sql_cntl.h index afa3b1a8..5e58ed4a 100644 --- a/src/dbtest/src/sql_cntl.h +++ b/src/dbtest/src/sql_cntl.h @@ -52,6 +52,7 @@ class DBConnector { std::cerr << "connected failed" << std::endl; return false; }*/ + SQLFreeHandle( SQL_HANDLE_ENV, m_hEnviroment); conn_pool_.push_back(m_hDatabaseConnection); } std::cout << "init db_connector success" << std::endl; @@ -74,7 +75,10 @@ class DBConnector { void ReleaseConn() { for (int i = 0; i < (int)conn_pool_.size(); i++) { - SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); + if (conn_pool_[i]){ + SQLDisconnect( conn_pool_[i] ); + SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); + } } }; void ReleaseEnv(); From e817b6f81df6cdeb86dce3c3d03d08356ee0544a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 15 Jul 2022 10:17:01 +0800 Subject: [PATCH 34/81] Version 2, execute auto-gen test case, detect cycle by POPs --- src/dbtest/CMakeLists.txt | 52 +++- src/dbtest/src/case_cntl_v2.cc | 287 ++++++++++++++++++ src/dbtest/src/sql_cntl_v2.cc | 532 +++++++++++++++++++++++++++++++++ src/dbtest/src/sqltest_v2.cc | 490 ++++++++++++++++++++++++++++++ 4 files changed, 1359 insertions(+), 2 deletions(-) create mode 100644 src/dbtest/src/case_cntl_v2.cc create mode 100644 src/dbtest/src/sql_cntl_v2.cc create mode 100644 src/dbtest/src/sqltest_v2.cc diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt index 303a388a..d90399f0 100644 --- a/src/dbtest/CMakeLists.txt +++ b/src/dbtest/CMakeLists.txt @@ -6,7 +6,7 @@ set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") message("cmake moudle ${CMAKE_MODULE_PATH}") -set(CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -Wno-deprecated") +set(CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -Wno-deprecated -fopenmp -pthread -lpthread") # all .h file include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) @@ -17,7 +17,8 @@ list(APPEND THIRD_PARTIES pthread) find_package(gflags REQUIRED) list(APPEND THIRD_PARTIES gflags) -########### sql test ############# +########### sql test V1 ############# +# static test with 33 test case # all .cc files list(APPEND SOURCE_FILES_SQL "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" @@ -35,3 +36,50 @@ list(APPEND ODBC_LD odbc) target_link_libraries(3ts_dbtest ${THIRD_PARTIES}) target_link_libraries(3ts_dbtest ${ODBC_LD}) +########### sql test V2 ############# +# dynamic test with auto-gen test case +# all .cc files +list(APPEND SOURCE_FILES_SQL_v2 + "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl_v2.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/sql_cntl_v2.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/sqltest_v2.cc" +) +# bin +add_executable(3ts_dbtest_v2 ${SOURCE_FILES_SQL_v2}) +# ld:odbc +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") +find_package(odbc REQUIRED) +list(APPEND ODBC_LD odbc) +# link ld +target_link_libraries(3ts_dbtest_v2 ${THIRD_PARTIES}) +target_link_libraries(3ts_dbtest_v2 ${ODBC_LD}) + + +########### kv test ############## +# all .cc files +#list(APPEND SOURCE_FILES_KV +# "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/kv_cntl.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/kvtest.cc" +#) +# bin +#add_executable(3ts_kvtest ${SOURCE_FILES_KV}) +# ld:bson mongo +#find_package(bsoncxx REQUIRED) +#find_package(mongocxx REQUIRED) +#include_directories(${LIBMONGOCXX_INCLUDE_DIR}) +#include_directories(${LIBBSONCXX_INCLUDE_DIR}) +# link ld +#target_link_libraries(3ts_kvtest PRIVATE mongo::bsoncxx_shared) +#target_link_libraries(3ts_kvtest PRIVATE mongo::mongocxx_shared) +#target_link_libraries(3ts_kvtest PRIVATE ${THIRD_PARTIES}) +# third parties .h +#target_include_directories(3ts_kvtest PUBLIC +# "/usr/local/include/mongocxx/v_noabi" +# "/usr/local/include/bsoncxx/v_noabi" +# "/usr/local/include/libmongoc-1.0" +# "/usr/local/include/libbson-1.0" +# "/usr/local/lib" +# ) diff --git a/src/dbtest/src/case_cntl_v2.cc b/src/dbtest/src/case_cntl_v2.cc new file mode 100644 index 00000000..09f7bc66 --- /dev/null +++ b/src/dbtest/src/case_cntl_v2.cc @@ -0,0 +1,287 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "case_cntl.h" +#include +Outputter outputter; +ResultHandler result_handler; + +std::vector CaseReader::TxnIdAndSql(const std::string& line) { + std::vector txn_id_and_sql; + const auto index_first = line.find("-"); + const auto index_second = line.rfind("-"); + if (!line.empty()) { + if (index_first != line.npos && index_second != line.npos) { + txn_id_and_sql.push_back(line.substr(0, index_first)); + txn_id_and_sql.push_back(line.substr(index_first + 1, index_second - index_first - 1)); + txn_id_and_sql.push_back(line.substr(index_second + 1)); + } else { + std::cerr << "read txn_sql failed, please check format of test file. line:" + line << std::endl; + } + } + return txn_id_and_sql; +} + +std::pair CaseReader::SqlIdAndResult(const std::string& line) { + std::pair sql_id_and_result; + const auto index = line.find("-"); + if (index != line.npos) { + std::string sql_id = line.substr(0, index); + std::string result = line.substr(index + 1); + std::vector ret_list; + std::string result_enhance = ""; + split(result, ret_list, " "); + int i = 0; + for (auto row : ret_list) { + if (row == "null") { + result_enhance = row; + } else { + std::string r = "(" + row + ")"; + if (i != int(ret_list.size()) - 1) { + result_enhance += r + " "; + } else { + result_enhance += r; + } + } + i++; + } + if (!sql_id.empty()) { + sql_id_and_result.first = std::stoi(sql_id); + } else { + std::cout << "line: " << line << " please check case file, there is no sql_id" << std::endl; + } + sql_id_and_result.second = result_enhance; + } + return sql_id_and_result; +} + +std::string CaseReader::Isolation(const std::string& line) { + const auto index = line.find("{"); + return line.substr(0, index - 1); +} + +std::pair CaseReader::TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type) { + std::pair test_sequence_and_result_set; + std::ifstream test_stream(test_file); + const auto index_second = test_file.rfind("/"); + const auto end = test_file.find("."); + std::string test_case = test_file.substr(index_second + 1, end - index_second - 1); + // std::string test_case_type = db_type + "_" + test_case; + std::string test_case_type = test_case; + std::string line; + TestSequence test_sequence(test_case_type); + TestResultSet test_result_set(test_case_type); + std::unordered_map> sql_result_set; + if (test_stream) { + while (getline(test_stream, line)) { + if (!line.empty()) { + auto index_table_type = line.find("Parameters"); + auto index_anno = line.find("#"); + if (index_table_type != line.npos) { + // extract first number + std::string output = std::regex_replace( + line, + std::regex("[^0-9]*([0-9]+).*"), + std::string("$1") + ); + int param_num = 0; + if (!output.empty()) { + param_num = std::stoi(output); + } + test_sequence.SetParamNum(param_num); + } + else if (index_anno != line.npos) { + continue; + } + else { + std::vector txn_id_and_sql = CaseReader::TxnIdAndSql(line); + int sql_id = 0; + int txn_id = 0; + std::string sql = ""; + if (!txn_id_and_sql[0].empty()) { + sql_id = std::stoi(txn_id_and_sql[0]); + } + if (!txn_id_and_sql[1].empty()) { + txn_id = std::stoi(txn_id_and_sql[1]); + } + if (!txn_id_and_sql[2].empty()) { + sql = txn_id_and_sql[2]; + } + TxnSql txn_sql(sql_id, txn_id, sql, test_case_type); + test_sequence.AddTxnSql(txn_sql); + } + } + } + test_sequence_and_result_set.first = test_sequence; + test_sequence_and_result_set.second = test_result_set; + } else { + //throw "test file not found"; + std::cerr << "test file: " + test_file + " not found" << std::endl; + } + return test_sequence_and_result_set; +} + +bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type) { + std::cout << dash + "read test sequence and test result set start" + dash << std::endl; + std::ifstream do_test_stream("./do_test_list.txt"); + std::string test_case; + if (do_test_stream) { + while (getline(do_test_stream, test_case)) { + auto index = test_case.find("#"); + if (index != test_case.npos) { + continue; + } + if (!do_test_stream) { + continue; + } + std::string test_file_name = test_case + ".txt"; + std::string test_file = test_path + "/" + test_file_name; + std::pair test_sequence_and_result_set = CaseReader::TestSequenceAndTestResultSetFromFile(test_file, db_type); + TestSequence test_sequence = test_sequence_and_result_set.first; + TestResultSet test_result_set = test_sequence_and_result_set.second; + CaseReader::AddTestResultSet(test_result_set); + CaseReader::AddTestSequence(test_sequence); + std::cout << test_file + " read success" << std::endl; + } + return true; + } else { + //throw "do_test_list.txt not found"; + std::cerr << "do_test_list.txt not found" << std::endl; + return false; + } +} + +bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql) { + if (cur_result.size() != expected_result.size()) { + //std::cout << "stmt_id:" << sql_id << " The number of data is different, cur_result:" << cur_result.size() << " expected_result: " << expected_result.size() << std::endl; + return false; + } + int len = cur_result.size(); + for (int i = 0; i < len; i++) { + std::string cur = cur_result[i]; + std::string expected = expected_result[i]; + if (cur != expected) { + return false; + } + } + return true; +} + +bool ResultHandler::IsTestExpectedResult(std::unordered_map>& cur_result, + std::vector>> expected_result_set_list, + std::unordered_map sql_map, const std::string& test_process_file) { + int index = 1; + for (auto expected_result_set : expected_result_set_list) { + bool is_all_expected = true; + for (auto& result_map : expected_result_set) { + int sql_id = result_map.first; + std::vector sql_expected_result = result_map.second; + std::vector sql_cur_result = cur_result[sql_id]; + if (!IsSqlExpectedResult(sql_cur_result, sql_expected_result, sql_id, sql_map[sql_id])) { + is_all_expected = false; + break; + } + } + if (is_all_expected) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + std::string info = "\nThe current result is consistent with the [(" + std::to_string(index) + ") expected_result] of serial scheduling"; + std::cout << info << std::endl; + test_process << info << std::endl; + } + return true; + } + index += 1; + } + return false; +} + +void Outputter::WriteResultTotal(std::vector test_result_set_list, const std::string& ret_file) { + std::ofstream out(ret_file); + for (auto& test_result_set : test_result_set_list) { + // return result without reason + auto result = test_result_set.ResultType(); + result = result.substr(0, result.find("\n")); + out << test_result_set.TestCaseType() + ": " << result << std::endl << std::endl; + } + out.close(); +} + +bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, + std::vector>> expected_result_set_list, + const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file) { + std::string blank(blank_base*(session_id - 1), ' '); + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + std::cout << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " return result: "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + //test_process << blank + "T" + std::to_string(session_id) + " sql_id: " + std::to_string(sql_id) + " sql: " + sql << std::endl; + test_process << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " return result: "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (test_process, " ")); + test_process << "" << std::endl; + // int idx = 1; + // for (auto& expected_result_set : expected_result_set_list) { + // std::vector sql_expected_result = expected_result_set[sql_id]; + // int len = sql_expected_result.size(); + // if (len == 0) { + // std::cout << "[ERROR]" << "stmt_expected_result is empty, please check expected result. stmt_id: " << sql_id << " stmt: " << sql << std::endl; + // } + // if (result_handler.IsSqlExpectedResult(cur_result, sql_expected_result, sql_id, sql)) { + // std::cout << blank + " *(" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + // std::cout << blank + " "; + // std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); + // std::cout << "" << std::endl; + // test_process << blank + " *(" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + // test_process << blank + " "; + // std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (test_process, " ")); + // test_process << "" << std::endl; + // } else { + // std::cout << blank + " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + // std::cout << blank + " "; + // std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); + // std::cout << "" << std::endl; + // test_process << blank + " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + // test_process << blank + " "; + // std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (test_process, " ")); + // test_process << "" << std::endl; + // } + // idx++; + // } + test_process << "" << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} + +bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + test_process << dash + test_case_type + dash << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} + +bool Outputter::WriteResultType(const std::string& result_type, const std::string& test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + test_process << "\nTest Result: " + result_type << std::endl; + test_process << "" << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc new file mode 100644 index 00000000..7b998115 --- /dev/null +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -0,0 +1,532 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: axingguchen farrisli (axingguchen,farrisli@tencent.com) + * + */ +#include "sql_cntl.h" +#include +#include +#include +#include + +std::string get_current_time(){ + + // date + time_t d = time(0); + tm* d_now = std::localtime(&d); + // std::cout << (d_now->tm_year + 1900) << '-' + // << (d_now->tm_mon + 1) << '-' + // << d_now->tm_mday + // << "\n"; + + // time + std::chrono::time_point now = std::chrono::system_clock::now(); + auto duration = now.time_since_epoch(); + + typedef std::chrono::duration + >::type> Days; /* UTC: +8:00 */ + + Days days = std::chrono::duration_cast(duration); + duration -= days; + auto hours = std::chrono::duration_cast(duration); + duration -= hours; + auto minutes = std::chrono::duration_cast(duration); + duration -= minutes; + auto seconds = std::chrono::duration_cast(duration); + duration -= seconds; + auto milliseconds = std::chrono::duration_cast(duration); + duration -= milliseconds; + auto microseconds = std::chrono::duration_cast(duration); + duration -= microseconds; + auto nanoseconds = std::chrono::duration_cast(duration); + + + // return std::to_string(hours.count()) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" + // + std::to_string(milliseconds.count()) +":"+ std::to_string(microseconds.count()) +":"+ std::to_string(nanoseconds.count()); + return std::to_string(d_now->tm_year + 1900) + "-" + std::to_string(d_now->tm_mon + 1) + "-" + std::to_string(d_now->tm_mday) + + " " + + std::to_string(d_now->tm_hour) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" + + std::to_string(milliseconds.count()) +':'+ std::to_string(microseconds.count()); + +} + +bool replace(std::string& str, const std::string& from, const std::string& to) { + size_t start_pos = str.find(from); + if(start_pos == std::string::npos) + return false; + str.replace(start_pos, from.length(), to); + return true; +} + +std::string SQLCHARToStr(SQLCHAR* ch) { + char* ch_char = (char*)ch; + std::string ch_str = ch_char; + return ch_str; +} + +// handle_type: stmt and dbc +void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { + SQLINTEGER NativeErrorPtr = 0; + SQLSMALLINT TextLengthPtr = 0; + if ("stmt" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_STMT, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } + if ("dbc" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_DBC, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } +} + +std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { + + std::ofstream test_process(test_process_file, std::ios::app); + std::string blank(blank_base*(session_id - 1), ' '); + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { + return ""; + } else if (ret == SQL_ERROR) { + SQLCHAR ErrInfo[256]; + SQLCHAR SQLState[256]; + DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); + std::string err_info = SQLCHARToStr(ErrInfo); + + // replace "\n" to " " + // replace(err_info, "\n", " "); + // std::string s = "one two three"; + // get error information of first line + err_info = err_info.substr(0, err_info.find("\n")); + + auto index_not_exist = err_info.find("not exist"); + auto index_crdb_rollback = sql.find("ROLLBACK TRANSACTION"); + if (sql_id != 1024 && index_not_exist == err_info.npos && index_crdb_rollback == sql.npos) { + usleep(100000*sql_id^3); + std::cout << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; + test_process << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; + // if (!test_process) { + // test_process << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + // } + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + // if (!test_process) { + // test_process << output_time_info << std::endl; + // } + return err_info; + } else { + return ""; + } + + return err_info; + } else if (ret == SQL_NEED_DATA) { + std::cout << blank + "SQL_NEED_DATA" << std::endl; + test_process << blank + "SQL_NEED_DATA" << std::endl; + return "SQL_NEED_DATA"; + } else if (ret == SQL_STILL_EXECUTING) { + std::cout << blank + "SQL_STILL_EXECUTING" << std::endl; + test_process << blank + "SQL_STILL_EXECUTING" << std::endl; + return "SQL_STILL_EXECUTING"; + } else if (ret == SQL_NO_DATA) { + std::cout << blank + "SQL_NO_DATA" << std::endl; + test_process << blank + "SQL_NO_DATA" << std::endl; + return "SQL_NO_DATA"; + } else if (ret == SQL_INVALID_HANDLE) { + std::cout << blank + "SQL_INVALID_HANDLE" << std::endl; + test_process << blank + "SQL_INVALID_HANDLE" << std::endl; + return "SQL_INVALID_HANDLE"; + } else if (ret == SQL_PARAM_DIAG_UNAVAILABLE) { + std::cout << blank + "SQL_PARAM_DIAG_UNAVAILABLE" << std::endl; + test_process << blank + "SQL_PARAM_DIAG_UNAVAILABLE" << std::endl; + return "SQL_PARAM_DIAG_UNAVAILABLE"; + } else { + std::cout << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; + test_process << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; + return "unknow error"; + } +} + +bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int session_id, std::string test_process_file) { + SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + if (!err_info_stmt.empty()) { + std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; + std::cout << __TIMESTAMP__ << std::endl; + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + return false; + } + // execute sql + if (sql_id != 1024) { + std::string sql1 = std::regex_replace(sql, std::regex("rollback"), "ROLLBACK"); + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql1 + "'"; + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + } + SQLLEN row_count=-1; + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + SQLRowCount(m_hStatement,&row_count); + // std::cout << "row_count" << row_count << std::endl; + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + if (row_count==0 && sql_id !=0){ + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + + else if (!err_info_sql.empty()) { + auto index_timeout1 = err_info_sql.find("timeout"); + auto index_timeout2 = err_info_sql.find("Timeout"); + auto index_timeout3 = err_info_sql.find("time out"); + if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { + if (test_result_set.ResultType() == ""){ + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + } + return true; + } else { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\nReason: " + err_info_sql; + test_result_set.SetResultType(info); + } + } + //return false; + } + // get error info + else{ + if (sql_id != 1024 && sql_id !=0) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + } + + return true; +} + + +bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, + int session_id, int param_num, std::string test_process_file) { + SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + if (!err_info_stmt.empty()) { + std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + return false; + } + SQLLEN length; + SQLCHAR value[param_num][20] = {{0}}; + // execute sql + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + // parse result + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + if(err_info_sql.empty()) { + + // bind column data + for (int i = 0; i < param_num; i++) { + SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); + } + // get next row, and fill cur_sql_result_set + bool is_no_data = true; + while(SQL_NO_DATA != SQLFetch(m_hStatement)) { + std::string row = ""; + for (int i = 0; i < param_num; i++) { + std::string v_str = SQLCHARToStr(value[i]); + if (i == (param_num - 1)) { + row += v_str; + } else { + row += v_str + ","; + } + } + row = "(" + row + ")"; + if (cur_result_set.find(sql_id) != cur_result_set.end()) { + cur_result_set[sql_id].push_back(row); + } else { + std::vector sql_result; + sql_result.push_back(row); + cur_result_set[sql_id] = sql_result; + } + is_no_data = false; + } + if (is_no_data) { + cur_result_set[sql_id].push_back("null"); + } + outputter.PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, session_id, test_process_file); + if (sql_id != 1024 && sql_id !=0) { + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + return true; + } else { + SQLFreeStmt( m_hStatement, SQL_DROP); + SQLFreeStmt( m_hStatement, SQL_UNBIND); + auto index_timeout1 = err_info_sql.find("timeout"); + auto index_timeout2 = err_info_sql.find("Timeout"); + auto index_timeout3 = err_info_sql.find("time out"); + if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { + if (test_result_set.ResultType() == ""){ + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + } + return true; + } else { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\nReason: " + err_info_sql; + test_result_set.SetResultType(info); + } + } + //return false; + return true; + } +} + +bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { + if (sql_id != 1024) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info; + if ("commit" == opt) { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ "COMMIT" +";'"; + } + else if ("rollback" == opt) { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ "ROLLBACK" +";'"; + } + else { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ opt +";'"; + } + + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + } + if (db_type != "oracle") { + SQLRETURN ret; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + if ("commit" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); + } else if ("rollback" == opt) { + if (db_type != "crdb"){ + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + } else { + std::string sql = "ROLLBACK TRANSCATION;"; + // std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } + + } else { + std::cout << "unknow txn opt" << std::endl; + } + + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, opt, "dbc", m_hDatabaseConnection, ret, test_process_file); + if (!err_info_sql.empty()) { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\n" + err_info_sql; + test_result_set.SetResultType(info); + } + } + else{ + if (sql_id != 1024 && sql_id !=0) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + } + } else { + TestResultSet test_result_set; + if (!DBConnector::ExecWriteSql(1024, opt, test_result_set, session_id, test_process_file)) { + return false; + } + else{ + if (sql_id != 1024 && sql_id !=0) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + } + } + return true; +} + +bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_process_file) { + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + std::ofstream test_process(test_process_file, std::ios::app); + if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " begin failed"; + std::cout << output_info << std::endl; + if (!test_process) { + test_process << output_info << std::endl; + } + return false; + } else { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+"BEGIN;'"; + std::cout << output_info << std::endl; + test_process << output_info << std::endl; + // if (!test_process) { + // test_process << output_info << std::endl; + // } + if (sql_id != 1024 && sql_id !=0) { + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + test_process << output_time_info << std::endl; + } + return true; + } +} + +bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { + SQLRETURN ret; + SQLUINTEGER autoCommit; + if (opt == 0) { + autoCommit = 0; + } else { + autoCommit = 1; + } + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)(long)autoCommit, 0); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "set AutoCommit = 0 failed" << std::endl; + return false; + } + return true; +} + +bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string& db_type) { + std::string sql = "" ; + if (db_type == "sqlserver") { + sql = "SET LOCK_TIMEOUT " + timeout + "000" + ";"; + } else if (db_type == "ob") { + sql = "set session ob_trx_timeout=" + timeout + "000000;"; + } + if (!sql.empty()) { + TestResultSet test_result_set; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, conn_id)) { + return false; + } + } + + return true; +} + +bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { + // oracle mode + if (db_type != "oracle" && db_type != "ob") { + // mysql mode + // if (db_type != "oracle") { + SQLRETURN ret; + if (opt == "read-uncommitted") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); + } else if (opt == "read-committed") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + } else if (opt == "repeatable-read") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); + } else if (opt == "serializable") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); + } else if (opt == "snapshot") { + TestResultSet test_result_set; + std::string sql; + sql = "ALTER DATABASE CURRENT SET ALLOW_SNAPSHOT_ISOLATION ON;"; // SI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + sql = "SET TRANSACTION ISOLATION LEVEL SNAPSHOT;"; // SI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } else if (opt == "rcsnapshot") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + TestResultSet test_result_set; + std::string sql; + sql = "ALTER DATABASE CURRENT SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT;"; // RCSI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } else { + std::cout << "unknow isolation level" << std::endl; + return false; + } + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, 1024, "set isolation", "dbc", m_hDatabaseConnection, ret, test_process_file); + if (!err_info_stmt.empty()) { + return false; + } + } + else { + std::string iso; + if (opt == "read-committed") { + iso = "read committed"; + } else if (opt == "repeatable-read") { + iso = "repeatable read"; + } else if (opt == "serializable") { + iso = "serializable"; + } else { + std::cout << "unknow isolation level" << std::endl; + return false; + } + TestResultSet test_result_set; + std::string sql; + if (db_type == "oracle") { + sql = "alter session set isolation_level =" + iso; + } else if (db_type == "ob") { + sql = "set session transaction isolation level " + iso + ";"; + } + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } + + // // snapshot mode for myrocks + // if (db_type == "myrocks") { + // TestResultSet test_result_set; + // std::string sql; + // // sql = "START TRANSACTION WITH CONSISTENT ROCKSDB SNAPSHOT"; + // sql = "START TRANSACTION WITH CONSISTENT SNAPSHOT"; + // if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + // return false; + // } + // std::cout << sql << std::endl; + // } + + return true; +} diff --git a/src/dbtest/src/sqltest_v2.cc b/src/dbtest/src/sqltest_v2.cc new file mode 100644 index 00000000..27ee38fb --- /dev/null +++ b/src/dbtest/src/sqltest_v2.cc @@ -0,0 +1,490 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: axingguchen farrisli (axingguchen,farrisli@tencent.com) + * + */ +#include "gflags/gflags.h" +#include "sqltest.h" +#include +#include +#include +#include + +DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); +DEFINE_string(user, "test123", "username"); +DEFINE_string(passwd, "Ly.123456", "password"); +DEFINE_string(db_name, "test", "create database name"); +DEFINE_int32(conn_pool_size, 30, "db_conn pool size"); +DEFINE_string(isolation, "serializable", "transation isolation level: read-uncommitted read-committed repeatable-read serializable"); +DEFINE_string(case_dir, "mysql", "test case dir name"); +DEFINE_string(timeout, "3", "timeout"); + + +std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size + +bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) +{ + struct timespec timeoutTime; + timeoutTime.tv_nsec = wait_nanosecond; + timeoutTime.tv_sec = wait_second; + return pthread_mutex_timedlock( mutex_txn[txn_id], &timeoutTime ) == 0; // == 0 locked else no lock +} + +bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, + DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ + + // usleep(2000000*sleeptime); // 2 second + usleep(100000*sleeptime); // 0.1 second + + std::ofstream test_process(test_process_file, std::ios::app); + int txn_id; + if (txn_sql_list.size() && txn_sql_list[0].TxnId()){ + txn_id = txn_sql_list[0].TxnId(); + pthread_mutex_lock(mutex_txn[txn_id]); + } + else{ + return false; + } + + for (auto& txn_sql : txn_sql_list) { + + int sql_id = txn_sql.SqlId(); + txn_id = txn_sql.TxnId(); + std::string sql = txn_sql.Sql(); + + // oracle mode + if (FLAGS_db_type == "oracle" || FLAGS_db_type == "ob") { + // mysql mode + // if (FLAGS_db_type == "oracle") { + std::string sub_str ("IF EXISTS"); // some SQL queries are different in Oracle DB + if (sql.find(sub_str) != std::string::npos) { + sql = std::regex_replace(sql, std::regex("IF EXISTS "), ""); + sql = std::regex_replace(sql, std::regex("IF EXISTS "), ""); + } + // std::string sub_str1 ("PRIMARY KEY"); // remove primary key in Oracle DB + // if (sql.find(sub_str1) != std::string::npos) { + // sql = std::regex_replace(sql, std::regex("k INT PRIMARY KEY"), "k INT"); + // } + std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + + // replace sql keywords to capital + sql = std::regex_replace(sql, std::regex("set"), "SET"); // replace 'set' -> 'SET' + sql = std::regex_replace(sql, std::regex("from"), "FROM"); // replace 'from' -> 'FROM' + sql = std::regex_replace(sql, std::regex("values"), "VALUES"); + sql = std::regex_replace(sql, std::regex("where"), "WHERE"); + sql = std::regex_replace(sql, std::regex("insert"), "INSERT"); + sql = std::regex_replace(sql, std::regex("select"), "SELECT"); + sql = std::regex_replace(sql, std::regex("update"), "UPDATE"); + + + std::string ret_type = test_result_set.ResultType(); + auto index_T = ret_type.find("Timeout"); + auto index_R = ret_type.find("Rollback"); + if (index_T != ret_type.npos || index_R != ret_type.npos) { + for (int i = 0; i < FLAGS_conn_pool_size; i++) { + if (FLAGS_db_type != "ob") { + if (FLAGS_db_type == "crdb") { + db_connector.ExecWriteSql(1024, "ROLLBACK TRANSACTION", test_result_set, i + 1, test_process_file); + } else { + db_connector.SQLEndTnx("rollback", i + 1, 1024, test_result_set, FLAGS_db_type,test_process_file); + } + } + } + break; + } + + auto index_read = sql.find("SELECT"); + auto index_read_1 = sql.find("select"); + auto index_begin = sql.find("BEGIN"); + auto index_begin_1 = sql.find("begin"); + auto index_commit = sql.find("COMMIT"); + auto index_commit_1 = sql.find("commit"); + auto index_rollback = sql.find("ROLLBACK"); + auto index_rollback_1 = sql.find("rollback"); + + if (sql_id == 1) { + std::cout << "" << std::endl; + test_process << "" << std::endl; + std::cout << dash + test_sequence.TestCaseType() + " test execution" + dash << std::endl; + test_process << dash + test_sequence.TestCaseType() + " test execution" + dash << std::endl; + } + if (index_read != sql.npos || index_read_1 != sql.npos) { + if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, cur_result_set, txn_id, test_sequence.ParamNum(), test_process_file)) { + goto jump; + } + } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { + if (FLAGS_db_type == "tidb") { + // if (!db_connector.ExecWriteSql(sql_id, "BEGIN PESSIMISTIC;", test_result_set, txn_id, test_process_file)) { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { + goto jump; + } + // } else if (FLAGS_db_type == "myrocks") { // MyRocks SI mode + // if (!db_connector.ExecWriteSql(sql_id, "START TRANSACTION WITH CONSISTENT SNAPSHOT;", test_result_set, txn_id, test_process_file)) { + // // if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { + // goto jump; + // } + } else { + if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { + goto jump; + } + // set pg lock timeout + if (FLAGS_db_type == "pg") { + std::string sql_timeout = "SET LOCAL lock_timeout = '" + FLAGS_timeout + "s';"; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + // set mysql lock timeout + if (FLAGS_db_type == "mysql") { + std::string sql_timeout = "SET GLOBAL innodb_lock_wait_timetout = " + FLAGS_timeout + ";"; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + + + // // note: oracle timeout will kill the session + // if (FLAGS_db_type == "oracle") { + // std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; + // std::cout << " sql: " << sql_timeout << std::endl; + // if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + // goto jump; + // } + // } + // // alter session set ddl_lock_timeout = 5 + + } + } else { + if (FLAGS_db_type == "crdb") { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN TRANSACTION;", test_result_set, txn_id, test_process_file)) { + goto jump; + } + } else { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN;", test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + } + } else if (index_commit != sql.npos || index_commit_1 != sql.npos) { + if (FLAGS_db_type != "crdb") { + if (!db_connector.SQLEndTnx("commit", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; + } + } else { + if (!db_connector.ExecWriteSql(sql_id, "COMMIT TRANSACTION;", test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { + if (FLAGS_db_type != "crdb") { + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; + } + } else { + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; + } + } + } else { + if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + } + pthread_mutex_unlock(mutex_txn[txn_id]); + return true; +jump: + pthread_mutex_unlock(mutex_txn[txn_id]); + return false; + + +}; + +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + ".txt"; + // std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + std::cout << test_process_file << std::endl; + std::ifstream test_process_tmp(test_process_file); + if (test_process_tmp) { + std::remove(test_process_file.c_str()); + } + std::ofstream test_process(test_process_file, std::ios::app); + + if (!test_process) { + std::cout << "create test_process_file failed" << std::endl; + } + + test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + + std::string test_case_type = test_sequence.TestCaseType(); + auto index_t = test_case_type.find_first_of("_"); + if (index_t != test_case_type.npos) { + test_case_type = test_case_type.substr(int(index_t) + 1); + } + + test_process << "#### test_name: " + test_case_type + " ####" << std::endl; + test_process << "#### isolation_level: " + FLAGS_isolation + " ####\n" << std::endl; + + std::cout << "#### test_name: " + test_case_type + " ####" << std::endl; + std::cout << "#### isolation_level: " + FLAGS_isolation + " ####\n" << std::endl; + + std::string preparation_info = "Preparation: create new tables and insert necessory rows"; + std::string execution_info = "Execution: execute transactions in parallel"; + std::cout << preparation_info << std::endl; + std::cout << execution_info << std::endl; + test_process << preparation_info << std::endl; + test_process << execution_info << std::endl; + + std::cout << " " << std::endl; + test_process << " " << std::endl; + + if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl<< std::endl; + test_process << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl<< std::endl; + } + + std::vector txn_sql_list = test_sequence.TxnSqlList(); + std::cout << dash + test_sequence.TestCaseType() + " test preparation" + dash << std::endl; + test_process << dash + test_sequence.TestCaseType() + " test preparation" + dash << std::endl; + std::unordered_map> cur_result_set; + std::unordered_map sql_map; + std::string table_name; + + std::vector> init_group; // preparation part + std::vector> split_groups; // execution and verification part + std::vector group; + + int txn_id_old; + int thread_cnt = 0; + for (auto& txn_sql : txn_sql_list) { + // split into anther group + if (txn_sql.SqlId() == 1 || txn_sql.TxnId() != txn_id_old){ + // put into init group + if (txn_sql.SqlId() == 1) { + init_group.push_back(group); + group.clear(); + } + // put into parallel groups + else{ + split_groups.push_back(group); + group.clear(); + thread_cnt = thread_cnt + 1; + } + } + sql_map[txn_sql.SqlId()] = txn_sql.Sql();; + // add into the same group + TxnSql txn_sql1(txn_sql.SqlId(), txn_sql.TxnId(), txn_sql.Sql(), txn_sql.TestCaseType()); + group.push_back(txn_sql1); + txn_id_old = txn_sql.TxnId(); + } + split_groups.push_back(group); + thread_cnt = thread_cnt + 1; + + if (FLAGS_db_type == "crdb"){ + // remove non transaction commit + // remove the first commit at the prepraration + init_group[0].pop_back(); + // remove the last commit at verification selct + split_groups[thread_cnt-1].pop_back(); + } + // std::cout << init_group.size() < threads; + + // exlcude last group + for (int i = 0; i < thread_cnt-1; i++) { + threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), test_process_file, std::ref(cur_result_set), i+1)); + } + + for (auto &th : threads) { + th.join(); + + } + // execute last group if correct + if (test_result_set.ResultType() == "") { + if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} + } + if (test_result_set.ResultType() == "") { + test_result_set.SetResultType("Finish\nReason: The test case was finished without rollback, to be checked if consistent"); + // if (result_handler.IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), sql_map, test_process_file)) { + // test_result_set.SetResultType("Avoid\nReason: Data anomaly did not occur and the data is consistent"); + // } else { + // test_result_set.SetResultType("Anomaly\nReason: Data anomaly is not recognized by the database, resulting in data inconsistencies"); + // } + } + if(!outputter.WriteResultType(test_result_set.ResultType(), test_process_file)) { + return false; + } + return true; +} + +int main(int argc, char* argv[]) { + // parse gflags args + gflags::ParseCommandLineFlags(&argc, &argv, true); + std::cout << "input param-> " << std::endl; + std::cout << " db_type: " + FLAGS_db_type << std::endl; + std::cout << " user: " + FLAGS_user << std::endl; + std::cout << " passwd: " + FLAGS_passwd << std::endl; + std::cout << " isolation: " + FLAGS_isolation << std::endl; + + // mutex for txn + for(int i=0;i test_sequence_list = case_reader.TestSequenceList(); + std::vector test_result_set_list = case_reader.TestResultSetList(); + + + // // one session for all + // // init db_connector + // std::cout << dash + "init db_connector start" + dash << std::endl; + // DBConnector db_connector; + // if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + // std::cout << "init db_connector failed" << std::endl; + // } + // // set TXN_ISOLATION + // // crdb has only one isolation level, which is serializable by default + // if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + // std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + // //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + // int idx = 1; + // for (auto hdbc : db_connector.DBConnPool()) { + // // set timeout + // if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { + // return false; + // } + // if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { + // return false; + // } + // idx++; + // } + // std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + // } + + // // create test_process_output_file's dir + // if (access(FLAGS_db_type.c_str(), 0) == -1) { + // mkdir(FLAGS_db_type.c_str(), S_IRWXU); + // } + // // create isolation dir + // // std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; + // std::vector iso_list = {"read-committed", "serializable", "result_summary"}; + // for (auto iso : iso_list) { + // std::string iso_dir = FLAGS_db_type + "/" + iso; + // if (access(iso_dir.c_str(), 0) == -1) { + // mkdir(iso_dir.c_str(), S_IRWXU); + // } + // } + + // // send sql + // JobExecutor job_executor; + // int len = test_sequence_list.size(); + // for (int i = 0; i < len; i++) { + + // if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { + // std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + // } else { + // std::string result_type = test_result_set_list[i].ResultType(); + // std::cout << "Test Result: " << result_type + "\n" << std::endl; + // } + // } + // // output result and release connection + // std::string ret_file = "./" + FLAGS_db_type + "/result_summary" + "/" + FLAGS_isolation + "_total-result.txt"; + // outputter.WriteResultTotal(test_result_set_list, ret_file); + // db_connector.ReleaseConn(); + + + // one case one intialization + // create test_process_output_file's dir + if (access(FLAGS_db_type.c_str(), 0) == -1) { + mkdir(FLAGS_db_type.c_str(), S_IRWXU); + } + // create isolation dir + // std::vector iso_list = {"read-committed", "repeatable-read", "serializable", "result_summary"}; + std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; + for (auto iso : iso_list) { + std::string iso_dir = FLAGS_db_type + "/" + iso; + if (access(iso_dir.c_str(), 0) == -1) { + mkdir(iso_dir.c_str(), S_IRWXU); + } + } + // send sql + JobExecutor job_executor; + int len = test_sequence_list.size(); + for (int i = 0; i < len; i++) { + + // init db_connector + std::cout << dash + "init db_connector start" + dash << std::endl; + DBConnector db_connector; + if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + std::cout << "init db_connector failed" << std::endl; + } + // set TXN_ISOLATION + // crdb has only one isolation level, which is serializable by default + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + int idx = 1; + for (auto hdbc : db_connector.DBConnPool()) { + // set timeout + if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { + return false; + } + if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { + return false; + } + idx++; + } + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + } + + // exec + if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { + std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + } else { + std::string result_type = test_result_set_list[i].ResultType(); + std::cout << "Test Result: " << result_type + "\n" << std::endl; + } + // db release + db_connector.ReleaseConn(); + + } + std::string ret_file = "./" + FLAGS_db_type + "/result_summary" + "/" + FLAGS_isolation + "_total-result.txt"; + outputter.WriteResultTotal(test_result_set_list, ret_file); + + + // remove mutex for txn + for(int i=0;i Date: Fri, 15 Jul 2022 10:23:34 +0800 Subject: [PATCH 35/81] Add predicate test case by delete and insert --- ...at_dda_read_skew_committed_pred_delete.txt | 29 ++++++++++ ...at_dda_read_skew_committed_pred_insert.txt | 27 +++++++++ ...read_write_skew1_committed_pred_delete.txt | 26 +++++++++ ...read_write_skew1_committed_pred_insert.txt | 26 +++++++++ ...t_dda_write_skew_committed_pred_delete.txt | 28 +++++++++ ...t_dda_write_skew_committed_pred_insert.txt | 26 +++++++++ .../iat_dda_write_skew_pred_delete.txt | 30 ++++++++++ .../iat_dda_write_skew_pred_insert.txt | 28 +++++++++ .../iat_mda_step_iat_pred_delete.txt | 57 +++++++++++++++++++ .../iat_mda_step_iat_pred_insert.txt | 54 ++++++++++++++++++ ..._repeatable_read_committed_pred_delete.txt | 26 +++++++++ ..._repeatable_read_committed_pred_insert.txt | 25 ++++++++ ...uble_write_skew1_committed_pred_delete.txt | 26 +++++++++ ...uble_write_skew1_committed_pred_insert.txt | 25 ++++++++ ...rat_dda_double_write_skew1_pred_delete.txt | 26 +++++++++ ...rat_dda_double_write_skew1_pred_insert.txt | 25 ++++++++ ...rat_dda_double_write_skew2_pred_delete.txt | 26 +++++++++ ...rat_dda_double_write_skew2_pred_insert.txt | 25 ++++++++ ...t_dda_read_skew2_committed_pred_delete.txt | 29 ++++++++++ ...t_dda_read_skew2_committed_pred_insert.txt | 27 +++++++++ .../rat_dda_read_skew2_pred_delete.txt | 29 ++++++++++ .../rat_dda_read_skew2_pred_insert.txt | 27 +++++++++ .../rat_dda_read_skew_pred_delete.txt | 29 ++++++++++ .../rat_dda_read_skew_pred_insert.txt | 27 +++++++++ ..._write_read_skew_committed_pred_delete.txt | 32 +++++++++++ ..._write_read_skew_committed_pred_insert.txt | 30 ++++++++++ .../rat_dda_write_read_skew_pred_delete.txt | 29 ++++++++++ .../rat_dda_write_read_skew_pred_insert.txt | 28 +++++++++ .../rat_mda_step_rat_pred_delete.txt | 57 +++++++++++++++++++ .../rat_mda_step_rat_pred_insert.txt | 54 ++++++++++++++++++ .../rat_sda_dirty_read_pred_delete.txt | 20 +++++++ .../rat_sda_dirty_read_pred_insert.txt | 19 +++++++ ...ntermediate_read_committed_pred_delete.txt | 25 ++++++++ ...ntermediate_read_committed_pred_insert.txt | 21 +++++++ .../rat_sda_intermediate_read_pred_delete.txt | 24 ++++++++ .../rat_sda_intermediate_read_pred_insert.txt | 21 +++++++ ...at_sda_non_repeatable_read_pred_delete.txt | 26 +++++++++ ...at_sda_non_repeatable_read_pred_insert.txt | 25 ++++++++ ...uble_write_skew2_committed_pred_delete.txt | 26 +++++++++ ...uble_write_skew2_committed_pred_insert.txt | 25 ++++++++ ...at_dda_read_write_skew1_c1_pred_delete.txt | 26 +++++++++ ...at_dda_read_write_skew1_c1_pred_insert.txt | 25 ++++++++ ...at_dda_read_write_skew2_c1_pred_delete.txt | 26 +++++++++ ...at_dda_read_write_skew2_c1_pred_insert.txt | 25 ++++++++ ...read_write_skew2_committed_pred_delete.txt | 26 +++++++++ ...read_write_skew2_committed_pred_insert.txt | 25 ++++++++ ...lost_self_update_committed_pred_delete.txt | 23 ++++++++ ...lost_self_update_committed_pred_insert.txt | 22 +++++++ 48 files changed, 1363 insertions(+) create mode 100644 test_result/test_cases_pred/iat_dda_read_skew_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_dda_read_skew_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/iat_dda_write_skew_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_dda_write_skew_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/iat_dda_write_skew_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_dda_write_skew_pred_insert.txt create mode 100644 test_result/test_cases_pred/iat_mda_step_iat_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_mda_step_iat_pred_insert.txt create mode 100644 test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew1_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew1_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew2_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_double_write_skew2_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew2_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew2_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_read_skew_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_dda_write_read_skew_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_dda_write_read_skew_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_mda_step_rat_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_mda_step_rat_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_sda_dirty_read_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_sda_dirty_read_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_sda_intermediate_read_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_sda_intermediate_read_pred_insert.txt create mode 100644 test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_delete.txt create mode 100644 test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_insert.txt create mode 100644 test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_delete.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_insert.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_delete.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_insert.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_insert.txt create mode 100644 test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_delete.txt create mode 100644 test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_insert.txt diff --git a/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_delete.txt b/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_delete.txt new file mode 100644 index 00000000..c0455a91 --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_delete.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=3; +5-2-DELETE FROM t1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k>2 and k<4; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 2,0 4,0 + +2-1,0 +7-3,0 +9-0,0 2,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_insert.txt b/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_insert.txt new file mode 100644 index 00000000..075fc22f --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_read_skew_committed_pred_insert.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k>2 and k<4; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 2,0 3,0 4,0 + +2-1,0 +7-3,0 +9-0,0 1,0 2,0 3,0 4,0 +} diff --git a/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_delete.txt b/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_delete.txt new file mode 100644 index 00000000..c71cf792 --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=3; +5-2-DELETE FROM t1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=3; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-1,0 +9-0,0 2,0 3,2 + +2-null +9-0,0 2,0 3,1 +} diff --git a/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_insert.txt b/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_insert.txt new file mode 100644 index 00000000..5f70a267 --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_read_write_skew1_committed_pred_insert.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=3; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=3; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +9-0,0 1,0 2,0 3,2 + +2-1,0 +9-0,0 1,0 2,0 3,1 +} + diff --git a/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_delete.txt b/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_delete.txt new file mode 100644 index 00000000..b52d79ab --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_delete.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-2-DELETE FROM t1 WHERE k=1; +6-2-COMMIT; +7-1-DELETE FROM t1 WHERE k=3; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-1,0 +4-null +9-0,0 2,0 + +2-null +4-3,0 +9-0,0 2,0 +} diff --git a/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_insert.txt b/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_insert.txt new file mode 100644 index 00000000..1baa9499 --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_write_skew_committed_pred_insert.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-COMMIT; +7-1-INSERT INTO t1 VALUES (3, 0); +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +4-3,0 +9-0,0 1,0 2,0 3,0 + +2-1,0 +4-null +9-0,0 1,0 2,0 3,0 +} diff --git a/test_result/test_cases_pred/iat_dda_write_skew_pred_delete.txt b/test_result/test_cases_pred/iat_dda_write_skew_pred_delete.txt new file mode 100644 index 00000000..d1a09e58 --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_write_skew_pred_delete.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-2-DELETE FROM t1 WHERE k=1; +6-1-DELETE FROM t1 WHERE k=3; +7-1-COMMIT; +8-2-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-1,0 +4-null +9-0,0 2,0 4,0 + +2-null +4-3,0 +9-0,0 2,0 4,0 +} + diff --git a/test_result/test_cases_pred/iat_dda_write_skew_pred_insert.txt b/test_result/test_cases_pred/iat_dda_write_skew_pred_insert.txt new file mode 100644 index 00000000..11c8e15d --- /dev/null +++ b/test_result/test_cases_pred/iat_dda_write_skew_pred_insert.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-2-INSERT INTO t1 VALUES (1, 0); +6-1-INSERT INTO t1 VALUES (3, 0); +7-1-COMMIT; +8-2-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +4-3,0 +9-0,0 1,0 2,0 3,0 4,0 + +2-1,0 +4-null +9-0,0 1,0 2,0 3,0 4,0 +} + diff --git a/test_result/test_cases_pred/iat_mda_step_iat_pred_delete.txt b/test_result/test_cases_pred/iat_mda_step_iat_pred_delete.txt new file mode 100644 index 00000000..ea822ec7 --- /dev/null +++ b/test_result/test_cases_pred/iat_mda_step_iat_pred_delete.txt @@ -0,0 +1,57 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-INSERT INTO t1 VALUES (5, 0); +0-1-INSERT INTO t1 VALUES (6, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-3-BEGIN; +6-3-select * from t1 where k>4 and k<6; +7-2-DELETE FROM t1 WHERE k=1; +8-3-DELETE FROM t1 WHERE k=3; +9-1-DELETE FROM t1 WHERE k=5; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +2-1,0 +4-3,0 +6-null +13-0,0 2,0 4,0 6,0 + +2-1,0 +4-null +6-null +13-0,0 2,0 4,0 6,0 + +2-null +4-3,0 +6-null +13-0,0 2,0 4,0 6,0 + +2-null +4-3,0 +6-5,0 +13-0,0 2,0 4,0 6,0 + +2-null +4-null +6-5,0 +13-0,0 2,0 4,0 6,0 + +2-1,0 +4-null +6-5,0 +13-0,0 2,0 4,0 6,0 +} diff --git a/test_result/test_cases_pred/iat_mda_step_iat_pred_insert.txt b/test_result/test_cases_pred/iat_mda_step_iat_pred_insert.txt new file mode 100644 index 00000000..5a2a7cc6 --- /dev/null +++ b/test_result/test_cases_pred/iat_mda_step_iat_pred_insert.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-INSERT INTO t1 VALUES (6, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k>0 and k<2; +3-2-BEGIN; +4-2-select * from t1 where k>2 and k<4; +5-3-BEGIN; +6-3-select * from t1 where k>4 and k<6; +7-2-INSERT INTO t1 VALUES (1, 0); +8-3-INSERT INTO t1 VALUES (3, 0); +9-1-INSERT INTO t1 VALUES (5, 0); +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +2-null +4-null +6-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +2-null +4-3,0 +6-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +2-1,0 +4-null +6-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +2-1,0 +4-null +6-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +2-null +4-3,0 +6-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +2-1,0 +4-3,0 +6-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 +} diff --git a/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_delete.txt b/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_delete.txt new file mode 100644 index 00000000..3996f9eb --- /dev/null +++ b/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=1; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k>0 and k<2; +7-1-COMMIT; +8-3-SELECT * FROM t1 ORDER BY k; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 2,0 + +2-1,0 +6-1,0 +8-0,0 2,0 +} diff --git a/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_insert.txt b/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_insert.txt new file mode 100644 index 00000000..d093e123 --- /dev/null +++ b/test_result/test_cases_pred/iat_sda_non_repeatable_read_committed_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (1, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k>0 and k<2; +7-1-COMMIT; +8-3-SELECT * FROM t1 ORDER BY k; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 1,0 2,0 + +2-1,0 +6-1,0 +8-0,0 1,0 2,0 +} diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_delete.txt b/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_delete.txt new file mode 100644 index 00000000..2e39bbcd --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-begin; +2-1-DELETE FROM t1 WHERE k=1; +3-2-begin; +4-2-update t1 set v=1 where k=3; +5-2-select * from t1 where k>0 and k<2; +6-2-commit; +7-1-update t1 set v=2 where k=3; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +9-0,0 2,0 3,2 + +5-null +9-0,0 2,0 3,1 +} diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_insert.txt b/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_insert.txt new file mode 100644 index 00000000..89cf24f4 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew1_committed_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-begin; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-begin; +4-2-update t1 set v=1 where k=3; +5-2-select * from t1 where k>0 and k<2; +6-2-commit; +7-1-update t1 set v=2 where k=3; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +9-0,0 1,0 2,0 3,1 + +5-null +9-0,0 1,0 2,0 3,2 +} diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_delete.txt b/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_delete.txt new file mode 100644 index 00000000..14934abb --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-begin; +2-1-DELETE FROM t1 WHERE k=1; +3-2-begin; +4-2-update t1 set v=1 where k=3; +5-2-select * from t1 where k>0 and k<2; +6-1-update t1 set v=2 where k=3; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +9-0,0 2,0 3,2 + +5-null +9-0,0 2,0 3,1 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_insert.txt b/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_insert.txt new file mode 100644 index 00000000..b6f8be28 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew1_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-begin; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-begin; +4-2-update t1 set v=1 where k=3; +5-2-select * from t1 where k>0 and k<2; +6-1-update t1 set v=2 where k=3; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +9-0,0 1,0 2,0 3,1 + +5-null +9-0,0 1,0 2,0 3,2 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_delete.txt b/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_delete.txt new file mode 100644 index 00000000..df1bd0c1 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=1; +3-2-begin; +4-2-DELETE FROM t1 WHERE k=3; +5-2-update t1 set v=2 where k=1; +6-1-select * from t1 where k>2 and k<4; +7-1-commit; +8-2-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +6-3,0 +9-1,2 2,0 4,0 + +6-null +9-1,1 2,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_insert.txt b/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_insert.txt new file mode 100644 index 00000000..d957b3b8 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_double_write_skew2_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=1; +3-2-begin; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-update t1 set v=2 where k=1; +6-1-select * from t1 where k>2 and k<4; +7-1-commit; +8-2-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +6-null +9-1,2 2,0 3,0 4,0 + +6-3,0 +9-1,1 2,0 3,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_delete.txt b/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_delete.txt new file mode 100644 index 00000000..2f9f5ff2 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_delete.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-SELECT * from t1 WHERE k>0 and k<2; +6-2-COMMIT; +7-1-DELETE FROM t1 WHERE k=3; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +5-null +9-0,0 2,0 4,0 + +4-3,0 +5-1,0 +9-0,0 2,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_insert.txt b/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_insert.txt new file mode 100644 index 00000000..a46b66ab --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew2_committed_pred_insert.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-SELECT * from t1 WHERE k>0 and k<2; +6-2-COMMIT; +7-1-INSERT INTO t1 VALUES (3, 0); +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +5-null +9-0,0 1,0 2,0 3,0 4,0 + +4-3,0 +5-1,0 +9-0,0 1,0 2,0 3,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_read_skew2_pred_delete.txt b/test_result/test_cases_pred/rat_dda_read_skew2_pred_delete.txt new file mode 100644 index 00000000..4bb25619 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew2_pred_delete.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-SELECT * from t1 WHERE k>0 and k<2; +6-1-DELETE FROM t1 WHERE k=3; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +5-null +9-0,0 2,0 4,0 + +4-3,0 +5-1,0 +9-0,0 2,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_read_skew2_pred_insert.txt b/test_result/test_cases_pred/rat_dda_read_skew2_pred_insert.txt new file mode 100644 index 00000000..c7d1e308 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew2_pred_insert.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-SELECT * from t1 WHERE k>0 and k<2; +6-1-INSERT INTO t1 VALUES (3, 0); +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +5-null +9-0,0 1,0 2,0 3,0 4,0 + +4-3,0 +5-1,0 +9-0,0 1,0 2,0 3,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_dda_read_skew_pred_delete.txt b/test_result/test_cases_pred/rat_dda_read_skew_pred_delete.txt new file mode 100644 index 00000000..623afee5 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew_pred_delete.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=3; +5-2-DELETE FROM t1 WHERE k=1; +6-1-SELECT * from t1 WHERE k>2 and k<4; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +6-null +9-0,0 2,0 4,0 + +2-1,0 +6-3,0 +9-0,0 2,0 4,0 +} diff --git a/test_result/test_cases_pred/rat_dda_read_skew_pred_insert.txt b/test_result/test_cases_pred/rat_dda_read_skew_pred_insert.txt new file mode 100644 index 00000000..2f874bd1 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_read_skew_pred_insert.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-INSERT INTO t1 VALUES (1, 0); +6-1-SELECT * from t1 WHERE k>2 and k<4; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +6-null +9-0,0 1,0 2,0 3,0 4,0 + +2-1,0 +6-3,0 +9-0,0 1,0 2,0 3,0 4,0 +} diff --git a/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_delete.txt b/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_delete.txt new file mode 100644 index 00000000..4249f743 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_delete.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=3; +5-2-select * from t1 where k>0 and k<2; +6-2-COMMIT; +7-1-select * from t1 where k>2 and k<4; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +7-null +9-0,0 2,0 4,0 + +5-null +7-3,0 +9-0,0 2,0 4,0 +} + + + diff --git a/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_insert.txt b/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_insert.txt new file mode 100644 index 00000000..79f44430 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_write_read_skew_committed_pred_insert.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-select * from t1 where k>0 and k<2; +6-2-COMMIT; +7-1-select * from t1 where k>2 and k<4; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +7-null +9-0,0 1,0 2,0 3,0 4,0 + +5-null +7-3,0 +9-0,0 1,0 2,0 3,0 4,0 +} + + + diff --git a/test_result/test_cases_pred/rat_dda_write_read_skew_pred_delete.txt b/test_result/test_cases_pred/rat_dda_write_read_skew_pred_delete.txt new file mode 100644 index 00000000..a6d31aee --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_write_read_skew_pred_delete.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=3; +5-2-select * from t1 where k>0 and k<2; +6-1-select * from t1 where k>2 and k<4; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +6-null +9-0,0 2,0 4,0 + +5-null +6-3,0 +9-0,0 2,0 4,0 +} diff --git a/test_result/test_cases_pred/rat_dda_write_read_skew_pred_insert.txt b/test_result/test_cases_pred/rat_dda_write_read_skew_pred_insert.txt new file mode 100644 index 00000000..55f79d69 --- /dev/null +++ b/test_result/test_cases_pred/rat_dda_write_read_skew_pred_insert.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-select * from t1 where k>0 and k<2; +6-1-select * from t1 where k>2 and k<4; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-1,0 +6-null +9-0,0 1,0 2,0 3,0 4,0 + +5-null +6-3,0 +9-0,0 1,0 2,0 3,0 4,0 +} + diff --git a/test_result/test_cases_pred/rat_mda_step_rat_pred_delete.txt b/test_result/test_cases_pred/rat_mda_step_rat_pred_delete.txt new file mode 100644 index 00000000..5c009cdd --- /dev/null +++ b/test_result/test_cases_pred/rat_mda_step_rat_pred_delete.txt @@ -0,0 +1,57 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-INSERT INTO t1 VALUES (5, 0); +0-1-INSERT INTO t1 VALUES (6, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=3; +5-2-select * from t1 where k>0 and k<2; +6-3-BEGIN; +7-3-DELETE FROM t1 WHERE k=5; +8-3-select * from t1 where k>2 and k<4; +9-1-select * from t1 where k>4 and k<6; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +5-null +8-null +9-5,0 +13-0,0 2,0 4,0 6,0 + +5-null +8-3,0 +9-5,0 +13-0,0 2,0 4,0 6,0 + +5-1,0 +8-null +9-null +13-0,0 2,0 4,0 6,0 + +5-1,0 +8-null +9-5,0 +13-0,0 2,0 4,0 6,0 + +5-1,0 +8-3,0 +9-null +13-0,0 2,0 4,0 6,0 + +5-null +8-3,0 +9-null +13-0,0 2,0 4,0 6,0 +} diff --git a/test_result/test_cases_pred/rat_mda_step_rat_pred_insert.txt b/test_result/test_cases_pred/rat_mda_step_rat_pred_insert.txt new file mode 100644 index 00000000..b405fedd --- /dev/null +++ b/test_result/test_cases_pred/rat_mda_step_rat_pred_insert.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-INSERT INTO t1 VALUES (6, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-select * from t1 where k>0 and k<2; +6-3-BEGIN; +7-3-INSERT INTO t1 VALUES (5, 0); +8-3-select * from t1 where k>2 and k<4; +9-1-select * from t1 where k>4 and k<6; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +5-1,0 +8-3,0 +9-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +5-1,0 +8-null +9-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +5-null +8-3,0 +9-null +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +5-null +8-3,0 +9-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +5-null +8-null +9-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 + +5-1,0 +8-null +9-5,0 +13-0,0 1,0 2,0 3,0 4,0 5,0 6,0 +} diff --git a/test_result/test_cases_pred/rat_sda_dirty_read_pred_delete.txt b/test_result/test_cases_pred/rat_sda_dirty_read_pred_delete.txt new file mode 100644 index 00000000..8d57fc06 --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_dirty_read_pred_delete.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1 ORDER BY k; +8-3-COMMIT; + +serializable { +4-1,0 +7-0,0 1,0 2,0 +} diff --git a/test_result/test_cases_pred/rat_sda_dirty_read_pred_insert.txt b/test_result/test_cases_pred/rat_sda_dirty_read_pred_insert.txt new file mode 100644 index 00000000..c0c81e63 --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_dirty_read_pred_insert.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1 ORDER BY k; +8-3-COMMIT; + +serializable { +4-null +7-0,0 2,0 +} diff --git a/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_delete.txt b/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_delete.txt new file mode 100644 index 00000000..d133774d --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_delete.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-2-COMMIT; +6-1-INSERT INTO t1 VALUES (1, 1); +7-1-COMMIT; +8-3-SELECT * from t1 ORDER BY k; +9-3-COMMIT; + +serializable { +4-1,0 +8-0,0 1,1 2,0 + +4-1,1 +8-0,0 1,1 2,0 +} + diff --git a/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_insert.txt b/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_insert.txt new file mode 100644 index 00000000..5ecc1cd4 --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_intermediate_read_committed_pred_insert.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-2-COMMIT; +6-1-DELETE FROM t1 WHERE k=1; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-null +8-0,0 2,0 +} + diff --git a/test_result/test_cases_pred/rat_sda_intermediate_read_pred_delete.txt b/test_result/test_cases_pred/rat_sda_intermediate_read_pred_delete.txt new file mode 100644 index 00000000..af4e80c6 --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_intermediate_read_pred_delete.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-DELETE FROM t1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-1-INSERT INTO t1 VALUES (1, 1); +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * from t1 ORDER BY k; +9-3-COMMIT; + +serializable { +4-1,0 +8-0,0 1,1 2,0 + +4-1,1 +8-0,0 1,1 2,0 +} diff --git a/test_result/test_cases_pred/rat_sda_intermediate_read_pred_insert.txt b/test_result/test_cases_pred/rat_sda_intermediate_read_pred_insert.txt new file mode 100644 index 00000000..cfb9d64f --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_intermediate_read_pred_insert.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (1, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>0 and k<2; +5-1-DELETE FROM t1 WHERE k=1; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * from t1 ORDER BY k; +9-3-COMMIT; + +serializable { +4-null +8-0,0 2,0 +} + diff --git a/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_delete.txt b/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_delete.txt new file mode 100644 index 00000000..110ef8fa --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN;; +4-2-DELETE FROM t1 WHERE k=1; +5-1-SELECT * from t1 WHERE k>0 and k<2; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1 ORDER BY k; +9-3-COMMIT; + +serializable { +2-null +5-null +8-0,0 2,0 + +2-1,0 +5-1,0 +8-0,0 2,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_insert.txt b/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_insert.txt new file mode 100644 index 00000000..74a9a5fd --- /dev/null +++ b/test_result/test_cases_pred/rat_sda_non_repeatable_read_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN;; +4-2-INSERT INTO t1 VALUES (1, 0); +5-1-SELECT * from t1 WHERE k>0 and k<2; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1 ORDER BY k; +9-3-COMMIT; + +serializable { +2-null +5-null +8-0,0 1,0 2,0 + +2-1,0 +5-1,0 +8-0,0 1,0 2,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_delete.txt b/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_delete.txt new file mode 100644 index 00000000..59726af8 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=01; +3-2-begin; +4-2-DELETE FROM t1 WHERE k=3; +5-2-update t1 set v=2 where k=1; +6-2-commit; +7-1-select * from t1 where k>2 and k<4; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +7-3,0 +9-1,2 2,0 4,0 + +7-null +9-1,1 2,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_insert.txt b/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_insert.txt new file mode 100644 index 00000000..ced4fb61 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_double_write_skew2_committed_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=1; +3-2-begin; +4-2-INSERT INTO t1 VALUES (3, 0); +5-2-update t1 set v=2 where k=1; +6-2-commit; +7-1-select * from t1 where k>2 and k<4; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +7-null +9-1,2 2,0 3,0 4,0 + +7-3,0 +9-1,1 2,0 3,0 4,0 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_delete.txt b/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_delete.txt new file mode 100644 index 00000000..50802dd2 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=3; +5-2-DELETE FROM t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=3; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-1,0 +9-0,0 2,0 3,2 + +2-null +9-0,0 2,0 3,1 +} diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_insert.txt b/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_insert.txt new file mode 100644 index 00000000..1c1cbb3f --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew1_c1_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k>0 and k<2; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=3; +5-2-INSERT INTO t1 VALUES (1, 0); +6-1-UPDATE t1 SET v=1 WHERE k=3; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +2-null +9-0,0 1,0 2,0 3,2 + +2-1,0 +9-0,0 1,0 2,0 3,1 +} diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_delete.txt b/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_delete.txt new file mode 100644 index 00000000..7402019b --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-DELETE FROM t1 WHERE k=3; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +9-1,2 2,0 4,0 + +4-3,0 +9-1,1 2,0 4,0 +} diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_insert.txt b/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_insert.txt new file mode 100644 index 00000000..76891b99 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew2_c1_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-INSERT INTO t1 VALUES (3, 0); +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-3,0 +9-1,2 2,0 3,0 4,0 + +4-null +9-1,1 2,0 3,0 4,0 +} diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_delete.txt b/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_delete.txt new file mode 100644 index 00000000..73bea307 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_delete.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (3, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-2-COMMIT; +7-1-DELETE FROM t1 WHERE k=3; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-null +9-1,2 2,0 4,0 + +4-3,0 +9-1,1 2,0 4,0 +} diff --git a/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_insert.txt b/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_insert.txt new file mode 100644 index 00000000..a70dfd51 --- /dev/null +++ b/test_result/test_cases_pred/wat_dda_read_write_skew2_committed_pred_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-INSERT INTO t1 VALUES (4, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=1; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k>2 and k<4; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-2-COMMIT; +7-1-INSERT INTO t1 VALUES (3, 0); +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-3,0 +9-1,2 2,0 3,0 4,0 + +4-null +9-1,1 2,0 3,0 4,0 +} diff --git a/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_delete.txt b/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_delete.txt new file mode 100644 index 00000000..98f36e9e --- /dev/null +++ b/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_delete.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=1; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v>0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,1 + +6-0,1 1,1 +8-0,1 +} \ No newline at end of file diff --git a/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_insert.txt b/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_insert.txt new file mode 100644 index 00000000..d5cdb8f2 --- /dev/null +++ b/test_result/test_cases_pred/wat_sda_lost_self_update_committed_pred_insert.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (1, 1); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v>0; +7-1-COMMIT; +8-3-SELECT * FROM t1 ORDER BY k; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,1 1,1 + +6-0,1 1,1 +8-0,1 1,1 +} From 0e3f1f0e9f0d59f7b4bd0dd6ff0c012fed6db25f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 21 Jul 2022 15:00:16 +0800 Subject: [PATCH 36/81] Add generator and checker --- src/dbtest/src/mda_detect.py | 437 ++++++++++++++++++++++++ src/dbtest/src/mda_generate.py | 556 +++++++++++++++++++++++++++++++ src/dbtest/src/random_do_list.py | 122 +++++++ 3 files changed, 1115 insertions(+) create mode 100644 src/dbtest/src/mda_detect.py create mode 100644 src/dbtest/src/mda_generate.py create mode 100644 src/dbtest/src/random_do_list.py diff --git a/src/dbtest/src/mda_detect.py b/src/dbtest/src/mda_detect.py new file mode 100644 index 00000000..74abdc99 --- /dev/null +++ b/src/dbtest/src/mda_detect.py @@ -0,0 +1,437 @@ +# /* +# * Tencent is pleased to support the open source community by making 3TS available. +# * +# * Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved. The below software +# * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All +# * Tencent Modifications are Copyright (C) THL A29 Limited. +# * +# * Author: xenitchen axingguchen tsunaouyang (xenitchen,axingguchen,tsunaouyang@tencent.com) +# * +# */ + + +import Queue +import os +import time + + +class Edge: + def __init__(self, type, out): + self.type = type + self.out = out + + +class Operation: + def __init__(self, op_type, txn_num, op_time, value): + self.op_type = op_type + self.txn_num = txn_num + self.op_time = op_time + self.value = value + + +class Txn: + def __init__(self): + self.begin_ts = -1 + self.end_ts = 99999999999999999999 + + +# find total variable number +def get_total(lines): + num = 0 + for query in lines: + query = query.replace("\n", "") + query = query.replace(" ", "") + if query[0:2] == "Q0" and query.find("INSERT") != -1: + tmp = find_data(query, "(") + num = max(num, tmp) + elif query[0:2] == "Q1": + break + return num + + +# extract the data we need in query +def find_data(query, target): + pos = query.find(target) + if pos == -1: + return pos + pos += len(target) + data_value = "" + for i in range(pos, len(query)): + if query[i].isdigit(): + data_value += query[i] + else: + break + if data_value == "": + return -1 + data_value = int(data_value) + return data_value + + +# when a statement is executed, set the end time and modify the version list +def set_finish_time(op_time, data_op_list, query, txn, version_list): + pos = query.find("finishedat:") + pos += len("finishedat:") + data_value = "" + tmp, tmp1 = "", "" + for i in range(pos, len(query)): + if query[i].isdigit(): + tmp += query[i] + else: + for j in range(3 - len(tmp)): + tmp1 += "0" + tmp = tmp1 + tmp + data_value += tmp + tmp, tmp1 = "", "" + data_value = int(data_value) + for t in txn: + if t.begin_ts == op_time: + t.begin_ts = data_value + if t.end_ts == op_time: + t.end_ts = data_value + for i, list1 in enumerate(data_op_list): + for op in list1: + if op.op_time == op_time: + op.op_time = data_value + if op.op_type == "W": + version_list[i].append(op.value) + op.value = len(version_list[i]) - 1 + elif op.op_type == "D": + version_list[i].append(-1) + op.value = len(version_list[i]) - 1 + elif op.op_type == "I": + version_list[i].append(op.value) + op.value = len(version_list[i]) - 1 + + +# if both transactions are running +# or the start time of the second transaction is less than the end time of the first transaction +# we think they are concurrent +def check_concurrency(data1, data2, txn): + if txn[data2.txn_num].begin_ts < txn[data1.txn_num].end_ts: + return True + elif txn[data1.txn_num].begin_ts < txn[data2.txn_num].end_ts: + return True + else: + return False + + +# decide which operation comes first depending on the read or write version +# if later operation happened after the first txn commit time, edge type will add "C" +def get_edge_type(data1, data2, txn): + if data1.value <= data2.value: + before, after = data1, data2 + else: + before, after = data2, data1 + # if data1.op_type == "D" or data2.op_type == "D": + # if data1.value < data2.value: + # before, after = data2, data1 + # else: + # before, after = data1, data2 + if data2.op_time > txn[data1.txn_num].end_ts: + state = "C" + else: + state = "" + return before.op_type + state + after.op_type, before, after + + +def build_graph(data_op_list, indegree, edge, txn): + for list1 in data_op_list: + for i, data in enumerate(list1): + for j in range(0, i): + insert_edge(list1[j], data, indegree, edge, txn) + + +def insert_edge(data1, data2, indegree, edge, txn): + if check_concurrency(data1, data2, txn): + edge_type, data1, data2 = get_edge_type(data1, data2, txn) + if edge_type != "RR" and edge_type != "RCR" and data1.txn_num != data2.txn_num: + indegree[data2.txn_num] += 1 + edge[data1.txn_num].append(Edge(edge_type, data2.txn_num)) + + +def init_record(query, version_list): + key = find_data(query, "(") + value = find_data(query, ",") + version_list[key].append(value) + + +def readVersion_record(query, op_time, data_op_list, version_list): + error_message = "" + data = query.split(")") + if len(data) == 1: + for list1 in data_op_list: + for op in list1: + if op.op_time == op_time: + value = op.value + if len(version_list[value]) == 0: + op.value = -1 + else: + if -1 not in version_list[value]: + error_message = "Value exists, but did not successully read" + return error_message + pos = version_list[value].index(-1) + op.value = pos + else: + for s in data: + key = find_data(s, "(") + value = find_data(s, ",") + for i, list1 in enumerate(data_op_list): + for op in list1: + if key == i and op.op_time == op_time: + value1 = op.value + if len(version_list[value1]) == 0: + op.value = -1 + else: + if version_list[value1].count(value) == 0: + error_message = "Read version that does not exist" + return error_message + pos = version_list[value1].index(value) + op.value = pos + + return error_message + # for i, list1 in enumerate(data_op_list): + # print(i) + # if list1: + # print("") + # print(list1[0].txn_num) + # print(list1[0].op_type) + # print(list1[0].op_time) + # print(list1[0].op_value) + + + + +def read_record(op_time, txn_num, total_num, txn, data_op_list): + if txn[txn_num].begin_ts == -1: + txn[txn_num].begin_ts = op_time + # for some distributed cases which have 4 param, write part is same + if query.find("value1=") != -1: + op_data = find_data(query, "value1=") + data_op_list[op_data].append(Operation("R", txn_num, op_time, op_data)) + # for normal cases + elif query.find("k=") != -1: + op_data = find_data(query, "k=") + data_op_list[op_data].append(Operation("R", txn_num, op_time, op_data)) + # for predicate cases + elif query.find("k>") != -1: + left = find_data(query, "k>") + 1 + right = find_data(query, "k<") + for i in range(left, right): + data_op_list[i].append(Operation("P", txn_num, op_time, i)) + elif query.find("value1>") != -1: + left = find_data(query, "value1>") + 1 + right = find_data(query, "value1<") + for i in range(left, right): + data_op_list[i].append(Operation("P", txn_num, op_time, i)) + else: + # it means select all rows in table + for i in range(total_num): + data_op_list[i].append(Operation("R", txn_num, op_time, i)) + + +def write_record(op_time, txn_num, txn, data_op_list): + if txn[txn_num].begin_ts == -1: + txn[txn_num].begin_ts = op_time + if query.find("value1=") != -1: + op_data = find_data(query, "value1=") + op_value = find_data(query, "value2=") + data_op_list[op_data].append(Operation("W", txn_num, op_time, op_value)) + elif query.find("k=") != -1: + op_data = find_data(query, "k=") + op_value = find_data(query, "v=") + data_op_list[op_data].append(Operation("W", txn_num, op_time, op_value)) + + +def delete_record(op_time, txn_num, txn, data_op_list): + if txn[txn_num].begin_ts == -1: + txn[txn_num].begin_ts = op_time + if query.find("value1=") != -1: + op_data = find_data(query, "value1=") + data_op_list[op_data].append(Operation("D", txn_num, op_time, op_data)) + elif query.find("k=") != -1: + op_data = find_data(query, "k=") + data_op_list[op_data].append(Operation("D", txn_num, op_time, op_data)) + + +def insert_record(op_time, txn_num, txn, data_op_list): + if txn[txn_num].begin_ts == -1 and op_time != 0: + txn[txn_num].begin_ts = op_time + key = find_data(query, "(") + value = find_data(query, ",") + data_op_list[key].append(Operation("I", txn_num, op_time, value)) + + +def end_record(op_time, txn_num, txn): + txn[txn_num].end_ts = op_time + + +def operation_record(total_num, query, txn, data_op_list, version_list): + error_message = "" + op_time = find_data(query, "Q") + txn_num = find_data(query, "T") + if op_time == 0 and query.find("INSERT") != -1: + init_record(query, version_list) + return error_message + if query.find("returnresult") != -1: + error_message = readVersion_record(query, op_time, data_op_list, version_list) + return error_message + if query.find("finished") != -1: + set_finish_time(op_time, data_op_list, query, txn, version_list) + return error_message + if op_time == -1 or txn_num == -1: + return error_message + if query.find("SELECT") != -1: + read_record(op_time, txn_num, total_num, txn, data_op_list) + return error_message + elif query.find("UPDATE") != -1: + write_record(op_time, txn_num, txn, data_op_list) + return error_message + elif query.find("DELETE") != -1: + delete_record(op_time, txn_num, txn, data_op_list) + return error_message + elif query.find("INSERT") != -1: + insert_record(op_time, txn_num, txn, data_op_list) + return error_message + elif query.find("COMMIT") != -1: + if op_time != 0: + end_record(op_time, txn_num, txn) + return error_message + return error_message + + + +# remove failed statements to prevent redundant edges from being built +def remove_unfinished_operation(data_op_list): + for list1 in data_op_list: + for i, op in enumerate(list1): + if op.op_time < 10000000: + list1.pop(i) + +# toposort to determine whether there is a cycle +def check_cycle(edge, indegree, total): + q = Queue.Queue() + for i, degree in enumerate(indegree): + if degree == 0: q.put(i) + ans = [] + while not q.empty(): + now = q.get() + ans.append(now) + for val in edge[now]: + next_node = val.out + indegree[next_node] -= 1 + if indegree[next_node] == 0: + q.put(next_node) + if len(ans) == total: + return False + return True + + +# for loop graphs, print the loop +def dfs(result_folder, ts_now, now, type): + visit1[now] = 1 + if visit[now] == 1: return + visit[now] = 1 + path.append(now) + edge_type.append(type) + for v in edge[now]: + if visit[v.out] == 0: + dfs(result_folder, ts_now, v.out, v.type) + else: + path.append(v.out) + edge_type.append(v.type) + with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: + for i in range(0, len(path)): + f.write(str(path[i])) + if i != len(path) - 1: f.write("->" + edge_type[i+1] + "->") + f.write("\n\n") + path.pop() + edge_type.pop() + path.pop() + edge_type.pop() + visit[now] = 0 + + +def print_path(result_folder, ts_now, edge): + with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: + flag = 0 + for i in range(len(edge)): + for v in edge[i]: + if flag == 0: + flag = 1 + else: + f.write(", ") + f.write(str(i) + "->" + v.type + "->" + str(v.out)) + f.write("\n\n") + + +def output_result(file, result_folder, ts_now, IsCyclic): + with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: + f.write(file + ": " + IsCyclic + "\n") + + +def print_error(result_folder, ts_now, error_message): + with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: + f.write(error_message + "\n") + f.write("\n\n") + + +run_result_folder = "pg/serializable" +result_folder = "check_result/" + run_result_folder +do_test_list = "do_test_list.txt" +#ts_now = "_2param_3txn_insert" +ts_now = time.strftime("%Y%m%d_%H%M%S", time.localtime()) +if not os.path.exists(result_folder): + os.makedirs(result_folder) + +with open(do_test_list, "r") as f: + files = f.readlines() +for file in files: + file = file.replace("\n", "") + file = file.replace(" ", "") + if file == "": + continue + if file[0] == "#": + continue + with open(run_result_folder + "/" + file + ".txt", "r") as f: + lines = f.readlines() + + total_num = get_total(lines) # total number of variables + txn = [Txn() for i in range(total_num + 2)] # total num of transaction + data_op_list = [[] for i in range(total_num + 2)] # record every operation that occurs on the variable + edge = [[] for i in range(total_num + 2)] # all edges from the current point + indegree = [0] * (total_num + 2) # in-degree of each point + visit = [0] * (total_num + 2) # in dfs, whether the current point has been visited + visit1 = [0] * (total_num + 2) # we will only use unvisited points as the starting point of the dfs + path = [] # points in cycle + edge_type = [] # edge type of the cycle + version_list = [[] for i in range(total_num + 2)] + go_end = False # if test result is "Rollback" or "Timeout", we will don't check + + error_message = "" + for query in lines: + query = query.replace("\n", "") + query = query.replace(" ", "") + if query.find("Rollback") != -1 or query.find("Timeout") != -1: + go_end = True + error_message = operation_record(total_num, query, txn, data_op_list, version_list) + if error_message != "": + break + + if error_message != "": + output_result(file, result_folder, ts_now, "Error") + print_error(result_folder, ts_now, error_message) + continue + + cycle = False + remove_unfinished_operation(data_op_list) + build_graph(data_op_list, indegree, edge, txn) + if not go_end: + cycle = check_cycle(edge, indegree, total_num + 2) + if cycle: + output_result(file, result_folder, ts_now, "Cyclic") + for i in range(total_num + 2): + if visit1[i] == 0: + dfs(result_folder, ts_now, i, "null") + else: + output_result(file, result_folder, ts_now, "Avoid") + print_path(result_folder, ts_now, edge) diff --git a/src/dbtest/src/mda_generate.py b/src/dbtest/src/mda_generate.py new file mode 100644 index 00000000..eac645ea --- /dev/null +++ b/src/dbtest/src/mda_generate.py @@ -0,0 +1,556 @@ +# /* +# * Tencent is pleased to support the open source community by making 3TS available. +# * +# * Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved. The below software +# * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All +# * Tencent Modifications are Copyright (C) THL A29 Limited. +# * +# * Author: xenitchen axingguchen tsunaouyang (xenitchen,axingguchen,tsunaouyang@tencent.com) +# * +# */ + +from operator import truediv +import os +import sys + + +class OptionException(Exception): + pass + + +class Txn: + def __init__(self): + self.begin_ts = -1 + self.end_ts = max_time + + +class Operation: + def __init__(self, op_type, txn_num): + self.op_type = op_type + self.txn_num = txn_num + + +class Wait_Operation: + def __init__(self, op_type, txn_num, op_num): + self.op_type = op_type + self.txn_num = txn_num + self.op_num = op_num + + +def init_table(file_name, sql_count, txn_count, table_num, db_type, test_type): + data_num = 2 + with open(file_name, "a+") as file_test: + for i in range(1, table_num + 1): + drop_sql = str(sql_count) + "-" + str(txn_count) + "-" + "DROP TABLE IF EXISTS t" + str(i) + ";\n" + file_test.write(drop_sql) + if test_type == "single": + for i in range(1, table_num + 1): + # MySQL 5.1 add InnoDB for table + # create_sql = str(sql_count) + "-" + str(txn_count) + "-" + "CREATE TABLE t" + str(i) + \ + # " (k INT PRIMARY KEY, v INT) ENGINE=InnoDB;\n" + create_sql = str(sql_count) + "-" + str(txn_count) + "-" + "CREATE TABLE t" + str(i) + \ + " (k INT PRIMARY KEY, v INT);\n" + file_test.write(create_sql) + elif db_type == "tdsql" or db_type == "ob_oracle": + data_num = 4 + for i in range(1, table_num + 1): + create_sql = str(sql_count) + "-" + str(txn_count) + "-" + "CREATE TABLE t" + str(i) + \ + " (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) " \ + "(PARTITION p0 VALUES LESS THAN(2), PARTITION p1 VALUES LESS THAN(4));\n" + file_test.write(create_sql) + elif db_type == "crdb": + data_num = 4 + for i in range(1, table_num + 1): + create_sql = str(sql_count) + "-" + str(txn_count) + "-" + "CREATE TABLE t" + str(i) + \ + " (k INT, v INT, value1 INT, value2 INT, PRIMARY KEY (v,k)) PARTITION BY RANGE(v) " \ + "(PARTITION p0 VALUES FROM (MINVALUE) TO (2), " \ + "PARTITION p1 VALUES FROM (2) TO (MAXVALUE));\n" + file_test.write(create_sql) + else: + for i in range(1, table_num + 1): + create_sql = str(sql_count) + "-" + str(txn_count) + "-" + "CREATE TABLE t" + str(i) + \ + " (k INT, v INT) PARTITION BY RANGE(v) (PARTITION p0 VALUES LESS THAN(2), " \ + "PARTITION p1 VALUES LESS THAN(4));\n" + file_test.write(create_sql) + return data_num + + +# if both transactions are running +# or the start time of the second transaction is less than the end time of the first transaction +# we think they are concurrent +def check_concurrency(txn_num1, txn_num2, txn): + if txn[txn_num2].begin_ts < txn[txn_num1].end_ts: + return True + elif txn[txn_num1].begin_ts < txn[txn_num2].end_ts: + return True + else: + return False + + +def check_exist_op(txn, data_op_list, op, op_num, txn_count): + flag, txn_num = False, 0 + for data in data_op_list[op_num]: + if data.op_type == op: + flag = True + txn_num = data.txn_num + if flag: + if check_concurrency(txn_num, txn_count, txn): + return True + return False + return False + + +def execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op, data_num, txn, data_value, data_op_list): + # if check_exist_op(txn, data_op_list, op, op_num, txn_count): + # return sql_count + if op == "W": + if IsPredicate: + sql_count = write_data(file_name, sql_count, txn_count, op_num*2+1, data_num, txn, data_value, data_op_list) + else: + sql_count = write_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_value, data_op_list) + elif op == "R": + if IsPredicate: + sql_count = read_data(file_name, sql_count, txn_count, op_num*2+1, data_num, txn, data_op_list) + else: + sql_count = read_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list) + elif op == "P": + sql_count = read_data_predicate(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list) + # I and D only works for single test_type now + elif op == "I": + sql_count = insert_data(file_name, sql_count, txn_count, op_num*2+1, 1, 1, data_num, exist, data_value) + elif op == "D": + sql_count = delete_data(file_name, sql_count, txn_count, op_num*2+1, 1, data_num, exist, txn, data_op_list) + elif op == "A": + sql_count = abort_txn(file_name, sql_count, txn_count, txn) + elif op == "C": + sql_count = commit_txn(file_name, sql_count, txn_count, txn) + return sql_count + + +def insert_data(file_name, sql_count, txn_count, cur_count, partition_num, insert_table, data_num, exist, + data_value): + with open(file_name, "a+") as file_test: + try: + #if exist[cur_count]: + if False: + raise OptionException + else: + # if it is not initialization, we need to pay attention to whether the transaction should be started + if sql_count != 0 and txn[txn_count].begin_ts == -1: + txn[txn_count].begin_ts = sql_count + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + exist[cur_count] = True + if data_num == 2: + insert_sql = str(sql_count) + "-" + str(txn_count) + "-" + "INSERT INTO t" + \ + str(insert_table) + " VALUES (" + str(cur_count) + "," + str(cur_count) + ");\n" + else: + insert_sql = str(sql_count) + "-" + str(txn_count) + "-" + "INSERT INTO t" + \ + str(insert_table) + " VALUES (" + str(cur_count) + "," + str(partition_num) + \ + "," + str(cur_count) + "," + str(cur_count) + ");\n" + file_test.write(insert_sql) + data_value[cur_count] = cur_count + except OptionException: + if data_num == 2: + file_test.write("data" + " k=" + str(cur_count) + " already exists, can't insert") + print("data" + " k=" + str(cur_count) + " already exists, can't insert") + else: + file_test.write("data" + " value1=" + str(cur_count) + " already exists, can't insert") + print("data" + " value1=" + str(cur_count) + " already exists, can't insert") + return sql_count + + +def delete_data(file_name, sql_count, txn_count, cur_count, delete_table, data_num, exist, txn, data_op_list): + with open(file_name, "a+") as file_test: + try: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + if txn[txn_count].begin_ts == -1: + txn[txn_count].begin_ts = sql_count + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + exist[cur_count] = False + if data_num == 2: + delete_sql = str(sql_count) + "-" + str(txn_count) + "-" + "DELETE FROM t" + \ + str(delete_table) + " WHERE k=" + str(cur_count) + ";\n" + else: + delete_sql = str(sql_count) + "-" + str(txn_count) + "-" + "DELETE FROM t" + \ + str(delete_table) + " WHERE value1=" + str(cur_count) + ";\n" + file_test.write(delete_sql) + data_op_list[cur_count].append(Operation("D", txn_count)) + except OptionException: + file_test.write("the transaction has ended and cannot be read") + print("the transaction has ended and cannot be read") + return sql_count + + +# when updating data, increment its value by 1 +def write_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_value, data_op_list): + with open(file_name, "a+") as file_test: + try: + #if not exist[op_num] or txn[txn_count].end_ts != max_time: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + if txn[txn_count].begin_ts == -1: + txn[txn_count].begin_ts = sql_count + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + if data_num == 2: + write_sql = str(sql_count) + "-" + str(txn_count) + "-" + "UPDATE t1 SET v=" + \ + str(data_value[op_num] + 1) + " WHERE k=" + str(op_num) + ";\n" + else: + write_sql = str(sql_count) + "-" + str(txn_count) + "-" + "UPDATE t" + str(txn_count) + \ + " SET value2=" + str(data_value[op_num] + 1) + " WHERE value1=" + \ + str(op_num) + ";\n" + file_test.write(write_sql) + data_op_list[op_num].append(Operation("W", txn_count)) + data_value[op_num] += 1 + except OptionException: + file_test.write("data doesn't exist or the transaction has ended and cannot be updated") + print("data doesn't exist or the transaction has ended and cannot be updated") + return sql_count + + +def read_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list): + with open(file_name, "a+") as file_test: + try: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + if txn[txn_count].begin_ts == -1: + txn[txn_count].begin_ts = sql_count + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + if data_num == 2: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t1 WHERE k=" + \ + str(op_num) + ";\n" + else: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t" + str(txn_count) + \ + " WHERE value1=" + str(op_num) + ";\n" + file_test.write(read_sql) + data_op_list[op_num].append(Operation("R", txn_count)) + except OptionException: + file_test.write("the transaction has ended and cannot be read") + print("the transaction has ended and cannot be read") + return sql_count + + +def read_data_predicate(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list): + with open(file_name, "a+") as file_test: + try: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + if txn[txn_count].begin_ts == -1: + txn[txn_count].begin_ts = sql_count + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + if data_num == 2: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t1 WHERE k>" + \ + str(op_num*2) + " and k<" + str(op_num*2+2) + ";\n" + else: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t" + str(txn_count) + \ + " WHERE value1>" + str(op_num*2) + " and value1<" + str(op_num*2+2) + ";\n" + file_test.write(read_sql) + data_op_list[op_num].append(Operation("P", txn_count)) + except OptionException: + file_test.write("the transaction has ended and cannot be read") + print("the transaction has ended and cannot be read") + return sql_count + + +def abort_txn(file_name, sql_count, txn_count, txn): + with open(file_name, "a+") as file_test: + try: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + txn[txn_count].end_ts = sql_count + abort_sql = str(sql_count) + "-" + str(txn_count) + "-" + "ROLLBACK;\n" + file_test.write(abort_sql) + except OptionException: + file_test.write("transaction" + str(txn_count) + " ended and can't be rolled back again") + print("transaction" + str(txn_count) + " ended and can't be rolled back again") + return sql_count + + +def commit_txn(file_name, sql_count, txn_count, txn): + with open(file_name, "a+") as file_test: + try: + if txn[txn_count].end_ts != max_time: + raise OptionException + else: + txn[txn_count].end_ts = sql_count + commit_sql = str(sql_count) + "-" + str(txn_count) + "-" + "COMMIT;\n" + file_test.write(commit_sql) + except OptionException: + file_test.write("transaction" + str(txn_count) + " ended and can't be committed again") + print("transaction" + str(txn_count) + " ended and can't be committed again") + return sql_count + + +def execute_check(file_name, sql_count, txn_count, data_num, table_num): + with open(file_name, "a+") as file_test: + begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" + file_test.write(begin_sql) + sql_count += 1 + for i in range(1, table_num + 1): + if data_num == 2: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t1 ORDER BY k;\n" + else: + read_sql = str(sql_count) + "-" + str(txn_count) + "-" + "SELECT * FROM t" + str(i) + \ + " ORDER BY k;\n" + file_test.write(read_sql) + sql_count += 1 + commit_sql = str(sql_count) + "-" + str(txn_count) + "-" + "COMMIT;\n" + file_test.write(commit_sql) + sql_count += 1 + +# check if the txn commit/abort before or not +def get_last_op(ops, pos): + if pos == 0: + return -1, -1 + if ops[pos-1][1] == "C" or ops[pos-1][1] == "A": + return ops[pos-1][2], int(ops[pos-1][3]) + else: + return ops[pos-1][1], int(ops[pos-1][2]) + +# process first operation of a POP +def execute_first(IsPredicate, num, ops, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list): + for i in range(num): + op1 = ops[i][0] + if ops[i][1] == "C" or ops[i][1] == "A": + need_ac[txn_count] = ops[i][1] + op_num = int(ops[i][3:]) + else: + op_num = int(ops[i][2:]) + last_op_type, last_op_num = get_last_op(ops, i) + if last_op_num == op_num and last_op_type == op1: + return sql_count + sql_count = execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op1, data_num, txn, data_value, data_op_list) + sql_count += 1 + txn_count += 1 + if txn_count == num + 1: txn_count = 1 + return sql_count + +# process second operation of a POP +def execute_second(IsPredicate, num, ops, need_ac, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list): + for i in range(num): + if ops[i][1] == "C" or ops[i][1] == "A": + op2 = ops[i][2] + op_num = int(ops[i][3:]) + else: + op2 = ops[i][1] + op_num = int(ops[i][2:]) + sql_count = execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op2, data_num, txn, data_value, data_op_list) + sql_count += 1 + if need_ac[txn_count] != "NO": + sql_count = execute_sql(IsPredicate, file_name, sql_count, txn_count, i, need_ac[txn_count], data_num, + txn, data_value, data_op_list) + sql_count += 1 + txn_count += 1 + if txn_count == num + 1: txn_count = 1 + return sql_count + + +# if the data of adjacent pattern operations are not the same, +# reorder statements so that conflict-free statements execute first +# otherwise, execute in the original order +# such as RW0-RW1, we will execute as order R1[x]-R2[y]-W2[x]-W1[y] +# IR0-ICW1-RW1, we will execute as order I1[x]-I2[y]-R2[x]-C2-W3[y]-R3[y]-W1[y] +def execute_txn(IsPredicate, num, ops, need_ac, file_name, sql_count, data_num, txn, data_value, wait_op_list,data_op_list): + for i in range(num): + op1 = ops[i][0] + if ops[i][1] == "C" or ops[i][1] == "A": + op2 = ops[i][2] + need_ac[i+1] = ops[i][1] + op_num = int(ops[i][3:]) + else: + op2 = ops[i][1] + op_num = int(ops[i][2:]) + next_txn_count = i + 2 + if next_txn_count == num+1: next_txn_count = 1 + + if i == 0: + sql_count = execute_sql(IsPredicate, file_name, sql_count, i+1, op_num, op1, data_num, txn, data_value, data_op_list) + sql_count += 1 + wait_op_list.append(Wait_Operation(op2, next_txn_count, op_num)) + else: + last_op_type, last_op_num = get_last_op(ops, i) + if last_op_num == op_num: + #if last_op_num and last_op_type both are same as now operation, we will only execute later operation + if op1 == last_op_type: + wait_op_list.pop() + for data in wait_op_list: + sql_count = execute_sql(IsPredicate, file_name, sql_count, data.txn_num, data.op_num, data.op_type, data_num, txn, data_value, data_op_list) + sql_count += 1 + if need_ac[data.txn_num] != "NO" and data.op_num != op_num: + sql_count = execute_sql(IsPredicate, file_name, sql_count, data.txn_num, data.op_num, need_ac[data.txn_num], data_num, txn, data_value, data_op_list) + sql_count += 1 + wait_op_list = [] + + sql_count = execute_sql(IsPredicate, file_name, sql_count, i+1, op_num, op1, data_num, txn, data_value, data_op_list) + sql_count += 1 + + if need_ac[i+1] != "NO": + sql_count = execute_sql(IsPredicate, file_name, sql_count, i+1, op_num, need_ac[i+1], data_num, txn, data_value, data_op_list) + sql_count += 1 + + sql_count = execute_sql(IsPredicate, file_name, sql_count, next_txn_count, op_num, op2, data_num, txn, data_value, data_op_list) + sql_count += 1 + else: + sql_count = execute_sql(IsPredicate, file_name, sql_count, i+1, op_num, op1, data_num, txn, data_value, data_op_list) + sql_count += 1 + + if len(wait_op_list) == 0: + if need_ac[i+1] != "NO": + sql_count = execute_sql(IsPredicate, file_name, sql_count, i+1, op_num, need_ac[i+1], data_num, txn, data_value, data_op_list) + sql_count += 1 + wait_op_list.append(Wait_Operation(op2, next_txn_count, op_num)) + + for data in wait_op_list: + sql_count = execute_sql(IsPredicate, file_name, sql_count, data.txn_num, data.op_num, data.op_type, data_num, txn, data_value, data_op_list) + sql_count += 1 + + if need_ac[data.txn_num] != "NO": + sql_count = execute_sql(IsPredicate, file_name, sql_count, data.txn_num, data.op_num, need_ac[data.txn_num], data_num, txn, data_value, data_op_list) + sql_count += 1 + wait_op_list = [] + + return sql_count + + +def write_description(file_name, txn_num, op_num, data_num): + with open(file_name, "w+") as file_test: + description = "#\n" + description += "# Test case description\n" + description += "# POPG Pattern: " + patterns = file_name.split("/")[-1].split(".")[0].split("-") + for i in range(len(patterns)): + description += "T" + str(i+1) + " ==" + patterns[i] + "==> " + description += "T1\n" + description += "# Parameters: #column=2 #txn=" + str(txn_num) + " #operations=" + str(op_num) + " #variable=" + str(data_num) + "\n" + description += "# Structure: Sequence-Session-Query" + "\n" + description += "# When sequence=0, it is a preparation phase, otherwise an execution phase" + "\n" + description += "#\n" + file_test.write(description) + +# target folder +case_folder = "t/test_case_v2" +# pattern files +do_test_list = "do_test_list.txt" +# [single,distributed] => for local test or distributed test +db_type = sys.argv[1] +# [tdsql] => for pg/sql standard queries +test_type = sys.argv[2] +max_time = 99999999999999999999 +with open(do_test_list, "r") as f: + lines = f.readlines() +if not os.path.exists(case_folder): + os.mkdir(case_folder) + + +# for each popg, generate popg test case and write into file. +for popg in lines: + popg = popg.replace("\n", "") + popg = popg.replace(" ", "") + if popg == "": + continue + # check whether popg is predicate operation + if popg.find("I") != -1 or popg.find("D") != -1 or popg.find("P") != -1: + IsPredicate = True + else: + IsPredicate = False + if popg[0] == "#": + continue + ops = popg.split('-') + + path_store = case_folder + if not os.path.exists(path_store): + os.mkdir(path_store) + file_name = path_store + "/" + popg + ".txt" + + num = len(ops) + if (db_type == "tdsql" or db_type == "crdb") and test_type == "dist": + table_num = num + else: + table_num = 1 + sql_count, txn_count = 0, 1 + + # description + write_description(file_name, num, num, num) + + # preparation + data_num = init_table(file_name, sql_count, txn_count, table_num, db_type, test_type) + + # exist means whether data can be inserted, only data that doesn't exist can be inserted + # when the first write of one object is insert, then we will not insert the data in firsthand + exist = [False] * (2*num+2) + visit = [False] * (2*num+2) + data_value = {} + for i in range(2*num+2): + data_value[i] = 0 + cur_count, partition_num, insert_table = 0, 1, 1 + if IsPredicate: + insert_num = num + 1 + else: + insert_num = num + + # barrier data insertion + for i in range(1, insert_num + 1): + insert_data(file_name, sql_count, txn_count, cur_count, partition_num, insert_table, data_num, exist, + data_value) + if IsPredicate: + cur_count += 2 + else: + cur_count += 1 + partition_num ^= 2 + insert_table += 1 + if table_num == 1: insert_table = 1 + + # for a data, if W and D operation at an earlier time, we will insert this data when initialized + for i in range(len(ops)): + if ops[i][1] == "C" or ops[i][1] == "A": + op_num = int(ops[i][3:]) + else: + op_num = int(ops[i][2:]) + if IsPredicate and not visit[op_num]: + visit[op_num] = True + if ops[i][0] == "R": + if ops[i].find("I") == -1: + insert_data(file_name, sql_count, txn_count, 2*op_num+1, partition_num, insert_table, data_num, exist, data_value) + elif ops[i][0] == "D" or ops[i][0] == "W": + insert_data(file_name, sql_count, txn_count, 2*op_num+1, partition_num, insert_table, data_num, exist, + data_value) + partition_num ^= 2 + insert_table += 1 + if table_num == 1: insert_table = 1 + + # execution + txn = [Txn() for i in range(num + 2)] + wait_op_list = [] + data_op_list = [[] for i in range(2*num + 2)] + + # need_ac means whether need abort/commit immediately and if necessary which operation need to be done + need_ac = ["NO"] * (num + 1) + sql_count += 1 + sql_count = execute_txn(IsPredicate, num, ops, need_ac, file_name, sql_count, data_num, txn, data_value, wait_op_list,data_op_list) + + # reorder statements so that conflict-free statements execute first + # sql_count = execute_first(IsPredicate, num, ops, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list) + # txn_count = 2 + # sql_count = execute_second(IsPredicate, num, ops, need_ac, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list) + for i in range(1, num + 1): + if txn[i].end_ts == max_time: + commit_txn(file_name, sql_count, i, txn) + sql_count += 1 + + # verification + # execute_check(file_name, sql_count, num + 1, data_num, table_num) diff --git a/src/dbtest/src/random_do_list.py b/src/dbtest/src/random_do_list.py new file mode 100644 index 00000000..473d5283 --- /dev/null +++ b/src/dbtest/src/random_do_list.py @@ -0,0 +1,122 @@ +# /* +# * Tencent is pleased to support the open source community by making 3TS available. +# * +# * Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved. The below software +# * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All +# * Tencent Modifications are Copyright (C) THL A29 Limited. +# * +# * Author: xenitchen axingguchen tsunaouyang (xenitchen,axingguchen,tsunaouyang@tencent.com) +# * +# */ + +from operator import index +from pprint import pprint +import random +import sys +import os + +#op_set = ["RW", "WR", "WW", "IP", "PI", "DP", "PD", "IR", "RI", "DR", "RD", "RCW", "WCR", "WCW", "ICP", "PCI", "DCP", "PCD", "ICR", "RCI", "DCR", "RCD"] +#op_set = ["RW", "WR", "IP", "PI", "DP", "PD"] +op_set = ["P", "R", "W", "I"] # operations involved in the case +illegal_op_set = ["RR", "RP", "PR", "PP"] # patterns can't occur in the case +do_test_list = "do_test_list.txt" + +total_test_num = 1 +min_txn = 2 +max_txn = 20 + +# decide which variable to operate twice +# if data_num = 3, target_num = 5, data_count = [2, 1, 2], means the first and third variables are operated twice +def dfs(data_count, total_num, target_num): + s = "" + for v in data_count: + s += str(v) + if v > 2: + return + if total_num == target_num and visit.count(s) == 0: + visit.append(s) + res = [] + data_count1 = [] + for v in data_count: + data_count1.append(v) + dfs1(data_count1, res, total_num) + for i in range(data_num): + data_count[i] += 1 + if total_num <= target_num: + dfs(data_count, total_num+1, target_num) + data_count[i] -= 1 + + +# According to now data_count to generate test case +def dfs1(data_count, res, total_num): + if len(res) == total_num: + popg = "" + for i in range(total_num): + popg += res[i] + if i != total_num-1: + popg += "-" + else: + popg += "\n" + with open(do_test_list, "a+") as f: + f.write(popg) + return + for i in range(len(data_count)): + if data_count[i] != 0: + data_count[i] -= 1 + for j in range(len(op_set)): + for k in range(len(op_set)): + op = op_set[j] + op_set[k] + if illegal_op_set.count(op) == 0: + op += str(i) + res.append(op) + data_count1, data_count2 = [], [] + for v in data_count: + data_count1.append(v) + data_count2.append(v) + dfs1(data_count1, res, total_num) + res.pop() + if len(res) != 0: + res1 = [] + for v in res: + res1.append(v) + op1 = op_set[j] + "C" + op_set[k] + str(i) + res1.append(op1) + dfs1(data_count2, res1, total_num) + res1.pop() + + + +data_num = int(sys.argv[1]) +target_num = int(sys.argv[2]) +data_count = [1] * data_num +visit = [] +if os.path.exists(do_test_list): + os.remove(do_test_list) +dfs(data_count, data_num, target_num) +# for i in range(total_test_num): +# txn_num = random.randint(min_txn, max_txn) +# popg = "" +# commit_num = txn_num / 2 +# for j in range(txn_num): +# while True: +# op_num = random.randint(0, len(op_set)-1) +# if op_num == 2 or op_num == 9: +# continue +# if op_num <= 10: +# break +# else: +# if commit_num != 0: +# commit_num -= 1 +# break +# popg += op_set[op_num] +# popg += str(j) +# if j != txn_num-1: +# popg += "-" +# else: +# popg += "\n" +# if i == 0: +# with open(do_test_list, "w+") as f: +# f.write(popg) +# else: +# with open(do_test_list, "a+") as f: +# f.write(popg) From 58052c9e96b44cf7a697be1840fb4a8f816b5a81 Mon Sep 17 00:00:00 2001 From: Young <895254752@qq.com> Date: Fri, 22 Jul 2022 15:40:41 +0800 Subject: [PATCH 37/81] Fix the output stream conflict for SELECT --- src/dbtest/src/case_cntl_v2.cc | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/dbtest/src/case_cntl_v2.cc b/src/dbtest/src/case_cntl_v2.cc index 09f7bc66..0a95e567 100644 --- a/src/dbtest/src/case_cntl_v2.cc +++ b/src/dbtest/src/case_cntl_v2.cc @@ -220,13 +220,13 @@ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, std::string blank(blank_base*(session_id - 1), ' '); std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { - std::cout << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " return result: "; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "" << std::endl; - //test_process << blank + "T" + std::to_string(session_id) + " sql_id: " + std::to_string(sql_id) + " sql: " + sql << std::endl; - test_process << blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " return result: "; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (test_process, " ")); - test_process << "" << std::endl; + std::string read_output = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " return result: "; + for(const auto& result: cur_result) { + read_output = read_output + result + " "; + } + read_output += "\n"; + std::cout << read_output; + test_process << read_output; // int idx = 1; // for (auto& expected_result_set : expected_result_set_list) { // std::vector sql_expected_result = expected_result_set[sql_id]; @@ -255,7 +255,6 @@ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, // } // idx++; // } - test_process << "" << std::endl; return true; } else { std::cerr << test_process_file + "has not found" << std::endl; From 7d08c7e0fec12266229d396d0b4ed2e512944138 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 22 Jul 2022 16:08:59 +0800 Subject: [PATCH 38/81] Fix minor bugs --- src/dbtest/src/mda_generate.py | 2 +- src/dbtest/src/sql_cntl.cc | 10 ++++++---- src/dbtest/src/sql_cntl_v2.cc | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/dbtest/src/mda_generate.py b/src/dbtest/src/mda_generate.py index eac645ea..5f1b558d 100644 --- a/src/dbtest/src/mda_generate.py +++ b/src/dbtest/src/mda_generate.py @@ -523,7 +523,7 @@ def write_description(file_name, txn_num, op_num, data_num): op_num = int(ops[i][2:]) if IsPredicate and not visit[op_num]: visit[op_num] = True - if ops[i][0] == "R": + if ops[i][0] == "R" or ops[i][0] == "P": if ops[i].find("I") == -1: insert_data(file_name, sql_count, txn_count, 2*op_num+1, partition_num, insert_table, data_num, exist, data_value) elif ops[i][0] == "D" or ops[i][0] == "W": diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 4dda650b..124245fe 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -81,7 +81,8 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st std::string blank(blank_base*(session_id - 1), ' '); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { return ""; - } else if (ret == SQL_ERROR) { + } + else if (ret == SQL_ERROR) { SQLCHAR ErrInfo[256]; SQLCHAR SQLState[256]; DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); @@ -105,9 +106,10 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st // if (!test_process) { // test_process << output_time_info << std::endl; // } - return err_info; + std::cout << err_info << std::endl; + return "Err:"+err_info; } else { - return ""; + return "Failed with no reason"; } return err_info; @@ -167,7 +169,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); - + if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 7b998115..4940c7c7 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -406,7 +406,7 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce // test_process << output_info << std::endl; // } if (sql_id != 1024 && sql_id !=0) { - std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; std::cout << output_time_info << std::endl; test_process << output_time_info << std::endl; } From ee8cc5a5bd8266008711f36e8d9737d992501654 Mon Sep 17 00:00:00 2001 From: binbincome <811404668@qq.com> Date: Mon, 11 Sep 2023 20:05:12 +0800 Subject: [PATCH 39/81] Added dockers installation method Fix the issue of missing FindODBC.cmake when generating makefile files --- README.md | 42 ++++++++++++++++++++++++++++++++++++++- src/dbtest/CMakeLists.txt | 3 ++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b5f3a0d..1be47d76 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,58 @@ Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_di You can explore all results on [report webpage](https://axingguchen.github.io/3TS/). ## Usage -To generate Makefile (all commands are executed under '3TS/src/dbtest'): +Provide two installation methods for the project environment: **Docker** and **Compilation**, and you can freely choose the installation method. + +### Docker installation + +If you have not installed Docker, you can use the following command to install it with one click. + +```shell +curl -s https://get.docker.com/ | sh +``` + +Obtain Mirror + +```shell +docker pull registry.cn-hangzhou.aliyuncs.com/open_projects/3ts_coo:1.0 +``` + +Obtain Mirror to view the image ID and generate a container based on the image ID + +```shell +docker images +docker run -it [image_id] /bin/bash +``` + +View all containers and enter the generated container + +```shell +docker ps -a +docker exec -it [container_id] /bin/bash +``` + +### Compile Installation + + To generate Makefile (all commands are executed under '3TS/src/dbtest'): + ``` cmake -S ./ ``` To complie the code: + ``` make ``` ## Example +If using Docker installation, the container defaults to installing and configuring the database PostgreSQL,Start it using the following command (if you choose to compile the installation method, you need to install the database and configure it): + +```shell +/etc/init.d/postgresql start +``` + For test cases, it specify in "do_test_list.txt". Use "#" to exclude (comment) the test case. We provide three levels of test cases, i.e., the basic cases (33 anomalies in the paper), the predicate cases, and the MDA cases (with multiple transactions and objects). For specific test cases to evaluate, we specify it in do_test_list.txt. diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt index 6a50c26f..81c8ee02 100644 --- a/src/dbtest/CMakeLists.txt +++ b/src/dbtest/CMakeLists.txt @@ -4,6 +4,7 @@ PROJECT(dbtest) set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) message("cmake moudle ${CMAKE_MODULE_PATH}") set(CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -Wno-deprecated -fopenmp -pthread -lpthread") @@ -49,7 +50,7 @@ list(APPEND SOURCE_FILES_SQL_v2 add_executable(3ts_dbtest_v2 ${SOURCE_FILES_SQL_v2}) # ld:odbc list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") -find_package(odbc REQUIRED) +find_package(ODBC REQUIRED) list(APPEND ODBC_LD odbc) # link ld target_link_libraries(3ts_dbtest_v2 ${THIRD_PARTIES}) From 60a459ee1a1b9f7bd4a6c45531e35bb429e11d72 Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Wed, 20 Sep 2023 21:06:50 +0800 Subject: [PATCH 40/81] fix SQLFreeStmt bug --- src/dbtest/src/sql_cntl.cc | 10 +++++----- src/dbtest/src/sql_cntl_v2.cc | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 124245fe..7f2e483f 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -151,7 +151,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } // execute sql @@ -168,7 +168,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); @@ -214,7 +214,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } SQLLEN length; @@ -269,11 +269,11 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult test_process << output_time_info << std::endl; } SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 4940c7c7..4daa23c0 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -159,7 +159,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } // execute sql @@ -179,7 +179,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet // std::cout << "row_count" << row_count << std::endl; std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); if (row_count==0 && sql_id !=0){ std::string blank(blank_base*(session_id - 1), ' '); std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed at: " + get_current_time() ; @@ -233,7 +233,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } SQLLEN length; @@ -288,11 +288,11 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult test_process << output_time_info << std::endl; } SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { SQLFreeStmt( m_hStatement, SQL_DROP); - SQLFreeStmt( m_hStatement, SQL_UNBIND); + // SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); From 3ae6248c32ef2d1dc6fe80c6b1072d79681e1336 Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Wed, 20 Sep 2023 21:41:25 +0800 Subject: [PATCH 41/81] Add MariaDB results --- src/dbtest/auto_test.sh | 9 +- src/dbtest/auto_test_all.sh | 5 + .../iat_dda_read_skew_committed.txt | 61 +++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../read-committed/iat_dda_write_skew.txt | 61 +++++ .../iat_dda_write_skew_committed.txt | 61 +++++ ...skew_predicate_based-intersecting_data.txt | 72 ++++++ ...w_predicate_based-overdraft_protection.txt | 61 +++++ .../read-committed/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 +++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../rat_dda_double_write_skew1.txt | 56 +++++ .../rat_dda_double_write_skew1_committed.txt | 56 +++++ .../rat_dda_double_write_skew2.txt | 56 +++++ .../read-committed/rat_dda_read_skew.txt | 63 ++++++ .../read-committed/rat_dda_read_skew2.txt | 63 ++++++ .../rat_dda_read_skew2_committed.txt | 63 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 +++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../rat_dda_write_read_skew.txt | 61 +++++ .../rat_dda_write_read_skew_committed.txt | 63 ++++++ .../read-committed/rat_mda_step_rat.txt | 109 +++++++++ .../rat_mda_step_rat_long_fork.txt | 209 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../read-committed/rat_sda_dirty_read.txt | 47 ++++ .../rat_sda_intermediate_read.txt | 53 +++++ .../rat_sda_intermediate_read_committed.txt | 53 +++++ .../rat_sda_lost_self_update.txt | 53 +++++ .../rat_sda_non_repeatable_read.txt | 60 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 56 +++++ .../wat_dda_full_write_skew_c1.txt | 35 +++ .../wat_dda_full_write_skew_c2.txt | 35 +++ .../wat_dda_full_write_skew_committed.txt | 35 +++ .../wat_dda_read_write_skew1_c1.txt | 54 +++++ .../wat_dda_read_write_skew1_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_c1.txt | 54 +++++ .../wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../read-committed/wat_mda_step_wat_c1.txt | 44 ++++ .../read-committed/wat_mda_step_wat_c2.txt | 44 ++++ .../wat_sda_dirty_write_1abort.txt | 46 ++++ .../wat_sda_dirty_write_2commit.txt | 46 ++++ .../read-committed/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 53 +++++ .../read-committed/wat_sda_lost_update_c1.txt | 51 +++++ .../read-committed/wat_sda_lost_update_c2.txt | 51 +++++ .../iat_dda_read_skew_committed.txt | 61 +++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../read-uncommitted/iat_dda_write_skew.txt | 61 +++++ .../iat_dda_write_skew_committed.txt | 61 +++++ ...skew_predicate_based-intersecting_data.txt | 74 +++++++ ...w_predicate_based-overdraft_protection.txt | 61 +++++ .../read-uncommitted/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 +++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../rat_dda_double_write_skew2.txt | 54 +++++ .../read-uncommitted/rat_dda_read_skew.txt | 61 +++++ .../read-uncommitted/rat_dda_read_skew2.txt | 61 +++++ .../rat_dda_read_skew2_committed.txt | 61 +++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 +++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../rat_dda_write_read_skew.txt | 61 +++++ .../rat_dda_write_read_skew_committed.txt | 61 +++++ .../read-uncommitted/rat_mda_step_rat.txt | 109 +++++++++ .../rat_mda_step_rat_long_fork.txt | 207 +++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../read-uncommitted/rat_sda_dirty_read.txt | 45 ++++ .../rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../rat_sda_lost_self_update.txt | 53 +++++ .../rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../wat_dda_full_write_skew_c1.txt | 35 +++ .../wat_dda_full_write_skew_c2.txt | 35 +++ .../wat_dda_full_write_skew_committed.txt | 35 +++ .../wat_dda_read_write_skew1_c1.txt | 54 +++++ .../wat_dda_read_write_skew1_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_c1.txt | 54 +++++ .../wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../read-uncommitted/wat_mda_step_wat_c1.txt | 44 ++++ .../read-uncommitted/wat_mda_step_wat_c2.txt | 44 ++++ .../wat_sda_dirty_write_1abort.txt | 46 ++++ .../wat_sda_dirty_write_2commit.txt | 46 ++++ .../read-uncommitted/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 53 +++++ .../wat_sda_lost_update_c1.txt | 51 +++++ .../wat_sda_lost_update_c2.txt | 51 +++++ .../iat_dda_read_skew_committed.txt | 63 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../repeatable-read/iat_dda_write_skew.txt | 61 +++++ .../iat_dda_write_skew_committed.txt | 61 +++++ ...skew_predicate_based-intersecting_data.txt | 72 ++++++ ...w_predicate_based-overdraft_protection.txt | 61 +++++ .../repeatable-read/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 108 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 209 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 164 ++++++++++++++ .../iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 60 +++++ .../rat_dda_double_write_skew1.txt | 56 +++++ .../rat_dda_double_write_skew1_committed.txt | 56 +++++ .../rat_dda_double_write_skew2.txt | 56 +++++ .../repeatable-read/rat_dda_read_skew.txt | 63 ++++++ .../repeatable-read/rat_dda_read_skew2.txt | 63 ++++++ .../rat_dda_read_skew2_committed.txt | 63 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 63 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 61 +++++ .../rat_dda_write_read_skew.txt | 61 +++++ .../rat_dda_write_read_skew_committed.txt | 63 ++++++ .../repeatable-read/rat_mda_step_rat.txt | 109 +++++++++ .../rat_mda_step_rat_long_fork.txt | 209 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../repeatable-read/rat_sda_dirty_read.txt | 47 ++++ .../rat_sda_intermediate_read.txt | 53 +++++ .../rat_sda_intermediate_read_committed.txt | 53 +++++ .../rat_sda_lost_self_update.txt | 53 +++++ .../rat_sda_non_repeatable_read.txt | 60 +++++ ...le_read_predicate_based-phantom_delete.txt | 60 +++++ ...le_read_predicate_based-phantom_insert.txt | 59 +++++ .../wat_dda_double_write_skew2_committed.txt | 56 +++++ .../wat_dda_full_write_skew_c1.txt | 35 +++ .../wat_dda_full_write_skew_c2.txt | 35 +++ .../wat_dda_full_write_skew_committed.txt | 35 +++ .../wat_dda_read_write_skew1_c1.txt | 54 +++++ .../wat_dda_read_write_skew1_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_c1.txt | 54 +++++ .../wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../repeatable-read/wat_mda_step_wat_c1.txt | 44 ++++ .../repeatable-read/wat_mda_step_wat_c2.txt | 44 ++++ .../wat_sda_dirty_write_1abort.txt | 46 ++++ .../wat_sda_dirty_write_2commit.txt | 46 ++++ .../repeatable-read/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 53 +++++ .../wat_sda_lost_update_c1.txt | 51 +++++ .../wat_sda_lost_update_c2.txt | 51 +++++ .../read-committed_total-result.txt | 108 +++++++++ .../read-uncommitted_total-result.txt | 108 +++++++++ .../repeatable-read_total-result.txt | 108 +++++++++ .../serializable_total-result.txt | 108 +++++++++ .../iat_dda_read_skew_committed.txt | 42 ++++ .../iat_dda_read_write_skew1_committed.txt | 42 ++++ .../serializable/iat_dda_write_skew.txt | 49 ++++ .../iat_dda_write_skew_committed.txt | 49 ++++ ...skew_predicate_based-intersecting_data.txt | 74 +++++++ ...w_predicate_based-overdraft_protection.txt | 49 ++++ .../mariadb/serializable/iat_mda_step_iat.txt | 89 ++++++++ ...a_step_iat_causality_violation_anomaly.txt | 108 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 171 ++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 89 ++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 85 +++++++ ...step_iat_read_only_transaction_anomaly.txt | 120 ++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 127 +++++++++++ .../iat_sda_lost_update_committed.txt | 39 ++++ .../iat_sda_non_repeatable_read_committed.txt | 60 +++++ .../rat_dda_double_write_skew1.txt | 42 ++++ .../rat_dda_double_write_skew1_committed.txt | 42 ++++ .../rat_dda_double_write_skew2.txt | 35 +++ .../serializable/rat_dda_read_skew.txt | 42 ++++ .../serializable/rat_dda_read_skew2.txt | 42 ++++ .../rat_dda_read_skew2_committed.txt | 42 ++++ ...t_dda_read_skew_predicate_based_delete.txt | 63 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 61 +++++ .../serializable/rat_dda_write_read_skew.txt | 42 ++++ .../rat_dda_write_read_skew_committed.txt | 42 ++++ .../mariadb/serializable/rat_mda_step_rat.txt | 74 +++++++ .../rat_mda_step_rat_long_fork.txt | 169 ++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 74 +++++++ ...at_mda_step_rat_predicate_based_insert.txt | 71 ++++++ .../serializable/rat_sda_dirty_read.txt | 47 ++++ .../rat_sda_intermediate_read.txt | 53 +++++ .../rat_sda_intermediate_read_committed.txt | 53 +++++ .../serializable/rat_sda_lost_self_update.txt | 53 +++++ .../rat_sda_non_repeatable_read.txt | 60 +++++ ...le_read_predicate_based-phantom_delete.txt | 60 +++++ ...le_read_predicate_based-phantom_insert.txt | 59 +++++ .../wat_dda_double_write_skew2_committed.txt | 35 +++ .../wat_dda_full_write_skew_c1.txt | 35 +++ .../wat_dda_full_write_skew_c2.txt | 35 +++ .../wat_dda_full_write_skew_committed.txt | 35 +++ .../wat_dda_read_write_skew1_c1.txt | 42 ++++ .../wat_dda_read_write_skew1_c2.txt | 42 ++++ .../wat_dda_read_write_skew2_c1.txt | 42 ++++ .../wat_dda_read_write_skew2_c2.txt | 42 ++++ .../wat_dda_read_write_skew2_committed.txt | 42 ++++ .../serializable/wat_mda_step_wat_c1.txt | 44 ++++ .../serializable/wat_mda_step_wat_c2.txt | 44 ++++ .../wat_sda_dirty_write_1abort.txt | 46 ++++ .../wat_sda_dirty_write_2commit.txt | 46 ++++ .../serializable/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 53 +++++ .../serializable/wat_sda_lost_update_c1.txt | 39 ++++ .../serializable/wat_sda_lost_update_c2.txt | 39 ++++ 222 files changed, 14982 insertions(+), 3 deletions(-) create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mariadb/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/mariadb/result_summary/read-uncommitted_total-result.txt create mode 100644 test_result/centralizend_result/mariadb/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/mariadb/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c2.txt diff --git a/src/dbtest/auto_test.sh b/src/dbtest/auto_test.sh index 5b38af31..d54f0dcf 100755 --- a/src/dbtest/auto_test.sh +++ b/src/dbtest/auto_test.sh @@ -30,8 +30,11 @@ then elif [ $db == "crdb" ] then ./3ts_dbtest -isolation=$2 -db_type="crdb" -user="username" -passwd="password" -case_dir="crdb" -else [ $db == "mongodb" ] - ./3ts_dbtest -isolation=$2 -db_type="mongodb" -user="username" -passwd="password" -case_dir="mysql" +elif [ $db == "mongodb" ] +then + ./3ts_dbtest -isolation=$2 -db_type="mongodb" -user="username" -passwd="password" -case_dir="mongodb" +elif [ $db == "mariadb" ] +then + ./3ts_dbtest -isolation=$2 -db_type="mariadb" -user="username" -passwd="password" -case_dir="mariadb" fi - diff --git a/src/dbtest/auto_test_all.sh b/src/dbtest/auto_test_all.sh index c51a9b4c..867945e4 100755 --- a/src/dbtest/auto_test_all.sh +++ b/src/dbtest/auto_test_all.sh @@ -27,3 +27,8 @@ set -x ./auto_test.sh "ob" "read-committed" ./auto_test.sh "ob" "repeatable-read" ./auto_test.sh "ob" "serializable" + +./auto_test.sh "mariadb" "read-uncommitted" +./auto_test.sh "mariadb" "read-committed" +./auto_test.sh "mariadb" "repeatable-read" +./auto_test.sh "mariadb" "serializable" \ No newline at end of file diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..795c4aeb --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:53:27:273 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:53:29:477 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:53:127:649 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:53:129:888 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:53:131:789 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:53:133:493 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:34:53:227:933 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:53:228:576 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:53:230:686 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:53:231:380 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..f82b728d --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:53:453:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:53:455:379 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:53:554:750 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:53:556:200 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:53:557:364 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:53:558:470 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:53:654:674 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:53:655:676 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:53:657:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:53:658:363 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew.txt new file mode 100644 index 00000000..3c52f6f7 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:53:876:329 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:53:877:689 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:53:976:2 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:53:977:496 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:53:978:929 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:34:54:77:420 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:54:78:689 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:54:177:396 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:54:179:808 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:54:180:381 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a3e26fce --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:55:269:594 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:55:274:73 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:55:368:814 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:55:371:381 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:55:373:958 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:55:375:820 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:55:469:542 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:55:472:7 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:55:475:638 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:55:477:463 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..a6374849 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:54:407:861 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-20 21:34:54:410:103 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2023-9-20 21:34:54:411:807 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:34:54:507:937 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2023-9-20 21:34:54:509:616 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2023-9-20 21:34:54:510:643 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:54:512:122 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:54:608:461 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-20 21:34:54:611:234 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-20 21:34:54:613:104 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:54:613:789 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..236eebe6 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:54:836:242 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-20 21:34:54:838:464 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:54:937:279 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-20 21:34:54:942:78 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-20 21:34:54:946:481 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:54:948:485 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-20 21:34:55:38:610 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:55:40:183 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-20 21:34:55:42:803 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:55:43:745 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat.txt new file mode 100644 index 00000000..c1b2e05d --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:55:702:675 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:34:55:704:279 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:55:802:618 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:55:804:121 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:55:902:995 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:55:905:12 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:34:56:4:128 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:34:56:103:813 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:34:56:203:707 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:56:303:453 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:56:404:458 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:56:504:668 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:56:507:559 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:56:508:639 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..7d12609b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:0:65:600 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:0:69:573 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:0:166:388 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:0:169:513 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:0:171:488 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:0:265:224 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:35:0:267:1 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:35:0:268:371 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:0:269:407 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-20 21:35:0:368:298 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:35:0:368:973 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-20 21:35:0:370:796 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:35:0:371:501 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..77c5c104 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:59:339:213 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:59:342:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:59:439:87 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:59:443:49 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:59:539:727 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-20 21:34:59:542:662 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:59:544:874 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:34:59:639:386 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:34:59:641:365 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:59:642:756 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-20 21:34:59:740:787 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:59:741:825 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-20 21:34:59:841:113 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-20 21:34:59:842:102 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:34:59:845:47 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:34:59:845:791 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..e4619fa1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:56:739:831 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-20 21:34:56:741:814 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:56:840:256 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:56:841:846 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:56:940:359 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:56:943:164 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:34:57:42:218 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:34:57:140:866 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:34:57:240:899 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:57:341:414 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:57:441:834 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:57:541:393 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:34:57:544:141 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:57:545:206 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..64208e9a --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:57:762:998 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:34:57:767:78 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:57:864:564 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-20 21:34:57:868:77 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:57:963:230 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-20 21:34:57:964:506 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2023-9-20 21:34:58:68:92 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2023-9-20 21:34:58:167:88 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2023-9-20 21:34:58:264:151 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:58:364:231 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:58:467:811 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:58:564:107 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:58:567:396 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:58:568:664 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..8c393fd2 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:0:589:341 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:35:0:591:313 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-20 21:35:0:592:804 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:35:0:689:97 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-20 21:35:0:691:5 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-20 21:35:0:692:336 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:0:693:424 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:35:0:788:959 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-20 21:35:0:790:755 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:35:0:792:589 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:0:793:239 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-20 21:35:0:890:317 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-20 21:35:0:891:833 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-20 21:35:0:894:683 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-20 21:35:0:895:516 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..15955c1e --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:58:796:674 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-20 21:34:58:799:162 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:58:895:972 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-20 21:34:58:898:520 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:58:900:313 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:58:902:312 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-20 21:34:58:903:810 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:58:905:116 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-20 21:34:58:995:847 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-20 21:34:58:997:783 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-20 21:34:58:999:43 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-20 21:34:59:0:513 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-20 21:34:59:1:642 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:59:2:998 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-20 21:34:59:99:777 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-20 21:34:59:101:400 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-20 21:34:59:105:968 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-20 21:34:59:107:728 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mariadb/read-committed/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0c4146bd --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:52:590:547 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:34:52:592:236 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:52:691:206 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:52:693:967 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:52:696:27 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-20 21:34:52:792:186 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:52:793:357 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:52:797:301 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:52:799:493 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mariadb/read-committed/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..3cea5c5b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:52:161:374 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:52:163:21 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:52:261:906 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:52:264:74 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:52:266:73 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:34:52:362:717 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:52:363:453 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:52:365:454 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:52:367:289 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..3b34f4e9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:32:27:787 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:32:29:390 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:32:127:772 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:32:129:74 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:32:130:384 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:34:32:328:654 + Q7 finished at: 2023-9-20 21:34:32:328:768 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:32:428:250 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:34:32:431:680 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:32:432:790 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..425deff7 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:32:655:463 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:32:657:219 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:32:755:722 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:32:757:877 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:32:759:718 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:32:761:198 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:32:856:221 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:32:857:477 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:34:32:859:958 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:32:861:858 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..aa91550a --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:33:83:204 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:33:84:313 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:33:184:490 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:33:188:237 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:34:33:284:185 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:33:285:341 + Q5 finished at: 2023-9-20 21:34:33:285:365 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:33:383:249 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:33:385:17 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:33:385:629 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew.txt new file mode 100644 index 00000000..7022d5bc --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:33:603:740 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:33:605:551 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:33:704:49 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:33:705:708 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:33:707:200 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:34:33:804:727 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:33:907:280 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:34:7:897 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:34:10:457 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:34:11:753 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2.txt new file mode 100644 index 00000000..a08942e9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:35:80:675 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:35:83:709 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:35:180:411 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:35:181:990 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:35:183:372 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:34:35:281:911 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:35:283:282 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:35:380:909 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:35:384:963 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:35:386:292 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..ed4f4ec8 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:35:612:803 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:35:614:286 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:35:713:8 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:35:714:967 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:35:717:680 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:35:719:319 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:35:814:848 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:35:816:534 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:35:820:918 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:35:822:544 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..8c888f37 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:34:234:655 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:34:34:235:868 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:34:334:714 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:34:335:910 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:34:336:850 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:34:337:951 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:34:34:435:784 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:34:436:347 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-20 21:34:34:438:191 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:34:438:754 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..8335e394 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:34:653:648 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:34:34:655:950 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:34:752:971 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2023-9-20 21:34:34:754:413 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2023-9-20 21:34:34:755:595 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:34:756:760 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:34:34:854:683 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:34:855:965 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-20 21:34:34:859:265 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:34:860:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..a26a91ae --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:30:969:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:30:970:860 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:31:68:811 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:31:70:161 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:31:71:486 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:34:31:169:699 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:31:270:171 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:31:372:283 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:31:375:85 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:31:375:808 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..1f885061 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:31:599:708 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:31:601:292 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:31:699:888 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:31:702:953 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:31:705:870 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:31:707:964 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:34:31:802:582 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:31:804:516 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:31:806:601 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:31:807:232 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat.txt b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat.txt new file mode 100644 index 00000000..da1800da --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:36:46:866 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:36:48:251 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:36:146:568 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:36:147:617 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:34:36:150:14 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:36:247:278 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:36:248:682 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2023-9-20 21:34:36:250:612 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2023-9-20 21:34:36:349:331 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:36:351:930 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:36:447:920 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:36:547:842 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:36:549:927 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:36:550:786 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..898d91cd --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-20 21:34:36:772:242 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-20 21:34:36:777:605 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-20 21:34:36:871:489 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-20 21:34:36:872:785 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:36:971:329 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-20 21:34:36:973:309 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:34:36:975:450 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:34:37:71:63 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:34:37:72:459 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:34:37:172:832 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:34:37:272:552 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:37:371:726 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:34:37:471:553 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:37:472:819 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:34:37:475:766 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:34:37:477:414 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..cd50592b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:37:700:970 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:37:704:7 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:37:799:698 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:37:801:345 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:34:37:803:280 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:37:900:19 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:37:901:730 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2023-9-20 21:34:37:903:915 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:34:38:1:415 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:38:2:605 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:38:101:296 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:38:200:851 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:34:38:204:837 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:38:206:547 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..3e207aa0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:38:429:492 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2023-9-20 21:34:38:431:576 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:38:529:332 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2023-9-20 21:34:38:532:659 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:34:38:536:896 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:38:629:15 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2023-9-20 21:34:38:630:522 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2023-9-20 21:34:38:632:413 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:34:38:730:458 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:38:731:649 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:38:831:966 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:38:930:505 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:38:933:216 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:38:934:11 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_dirty_read.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_dirty_read.txt new file mode 100644 index 00000000..b07e3b91 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:27:408:62 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:27:411:174 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:27:507:186 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:27:508:575 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-20 21:34:27:607:956 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:27:708:305 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:34:27:711:371 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:27:712:866 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..b5fe57b7 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:28:554:360 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:28:556:23 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:28:654:645 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:28:657:29 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-20 21:34:28:755:579 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:28:854:390 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:28:954:919 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:34:28:956:664 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:28:957:362 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..41603095 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:29:175:27 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:29:176:331 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:29:275:665 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:29:277:318 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:29:277:957 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-20 21:34:29:376:17 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:29:377:320 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:34:29:379:24 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:29:379:723 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..724d8c84 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:30:446:154 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:30:447:731 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:30:546:489 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:34:30:647:49 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:34:30:647:922 +Q6 finished at: 2023-9-20 21:34:30:648:137 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:30:746:462 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:30:748:121 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:30:748:845 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..81c5ec0b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:27:932:313 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:27:935:484 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:28:32:317 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:28:34:424 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:34:28:133:310 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:28:233:14 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:28:332:428 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:28:334:622 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:28:335:332 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..a0b0c39b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:29:596:69 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:34:29:598:52 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:29:699:372 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:29:700:864 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:29:702:80 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:34:29:800:322 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:29:801:159 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-20 21:34:29:802:976 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:29:803:723 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..2d94f61e --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:30:19:617 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:34:30:22:81 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:30:119:482 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2023-9-20 21:34:30:120:941 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:30:122:206 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:34:30:220:121 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:30:220:798 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-20 21:34:30:223:790 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:30:225:346 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..23760c9f --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:42:748:9 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:42:749:303 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:42:848:874 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:42:851:194 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:34:42:950:159 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:42:951:329 + Q5 finished at: 2023-9-20 21:34:42:951:510 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:42:952:641 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:42:956:268 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:42:957:964 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..d5e51f43 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:43:178:982 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:43:180:428 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:43:279:100 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:43:280:635 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:34:43:380:916 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:43:480:136 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:34:43:981:835 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..4673e3e5 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:44:205:620 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:44:207:326 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:44:305:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:44:307:160 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:34:44:406:946 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:44:505:783 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:34:45:7:362 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..022dd5e1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:45:230:306 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:45:233:505 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:45:331:615 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:45:333:460 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:34:45:432:417 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:45:433:647 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:34:46:133:139 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..fad7595b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:46:357:888 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:46:359:519 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:46:458:5 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:46:459:428 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:46:460:484 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:34:46:658:631 + Q8 finished at: 2023-9-20 21:34:46:658:826 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:46:659:844 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:46:662:146 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:46:662:863 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..7b2d5ebd --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:46:885:831 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:46:887:144 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:46:986:227 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:46:988:64 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:46:989:268 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:34:47:186:593 + Q7 finished at: 2023-9-20 21:34:47:186:800 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:47:286:587 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:47:289:193 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:47:290:390 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..24f18aa4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:47:515:375 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:47:516:960 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:47:616:147 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:47:619:38 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:34:47:716:384 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:47:717:366 +Q7 finished at: 2023-9-20 21:34:47:717:560 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:47:816:386 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:47:819:707 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:47:821:224 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..4df39c35 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:48:46:485 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:48:48:289 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:48:146:496 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:48:148:51 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:34:48:247:308 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:48:447:736 +Q8 finished at: 2023-9-20 21:34:48:447:991 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:48:449:176 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:48:453:230 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:48:454:994 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..53146e9c --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:48:679:561 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:48:681:354 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:48:779:399 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:48:781:267 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:48:880:807 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:48:881:905 +Q8 finished at: 2023-9-20 21:34:48:882:199 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:48:883:60 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:48:886:913 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:48:888:97 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..28821a3b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:49:113:927 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:49:116:766 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:49:213:176 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:49:214:729 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:49:313:204 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:49:315:271 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2023-9-20 21:34:49:414:439 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:49:513:329 + Q11 finished at: 2023-9-20 21:34:49:513:665 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:49:614:104 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:34:50:315:180 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..4ed86311 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:50:538:755 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:50:540:588 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:50:640:642 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:50:643:965 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:50:739:381 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:50:940:438 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2023-9-20 21:34:51:40:250 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:51:140:4 + Q10 finished at: 2023-9-20 21:34:51:140:368 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:51:340:180 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:34:51:941:85 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..707001f0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:39:154:793 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:39:156:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:39:254:732 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-20 21:34:39:356:241 + Q4 finished at: 2023-9-20 21:34:39:356:267 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:39:456:160 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:34:39:459:298 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:34:39:465:317 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:39:467:12 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..9293ac79 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:39:686:569 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:39:689:99 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:39:786:371 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-20 21:34:39:886:780 + Q4 finished at: 2023-9-20 21:34:39:886:764 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:39:986:474 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:34:39:989:319 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:34:39:994:893 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:39:995:434 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write.txt new file mode 100644 index 00000000..96c6d7c4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:40:209:971 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:40:212:487 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:40:310:207 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-20 21:34:40:410:99 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:34:40:411:256 +Q6 finished at: 2023-9-20 21:34:40:411:476 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:40:510:218 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:34:40:512:319 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:40:513:152 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..917c228e --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:40:731:2 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:40:734:137 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:40:832:187 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-20 21:34:40:931:765 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:34:40:932:895 +Q7 finished at: 2023-9-20 21:34:40:933:106 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:40:934:47 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:34:40:938:3 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:40:940:66 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..c209eae9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:42:315:456 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:42:316:787 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:42:415:463 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:34:42:517:329 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:34:42:518:890 +Q7 finished at: 2023-9-20 21:34:42:519:5 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:42:520:91 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:42:523:423 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:42:525:158 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..0abfd450 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:41:161:433 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:34:41:164:690 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:41:263:618 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:41:266:873 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-20 21:34:41:463:875 + Q7 finished at: 2023-9-20 21:34:41:464:190 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:34:41:465:67 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:41:467:142 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:41:468:181 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..f9c4e4b0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-committed/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-committed #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-committed for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:41:689:39 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:34:41:690:934 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:41:788:582 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:41:790:130 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:41:989:11 +Q5 finished at: 2023-9-20 21:34:41:989:29 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:42:92:248 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:42:94:706 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:42:95:459 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..d672b7a9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:4:612:15 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:4:614:203 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:4:715:573 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:4:717:306 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:4:718:839 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:4:720:134 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:34:4:816:569 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:4:817:424 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:4:819:549 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:4:820:257 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..158957f4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:5:42:562 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:5:44:544 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:5:143:493 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:5:145:410 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:5:147:137 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:5:148:380 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:5:244:36 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:5:245:298 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:5:247:377 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:5:247:901 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew.txt new file mode 100644 index 00000000..63ef785e --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:5:469:397 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:5:471:402 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:5:571:415 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:5:572:819 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:5:573:850 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:34:5:672:403 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:5:673:659 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:5:775:951 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:5:778:735 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:5:780:124 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..e0582096 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:6:865:875 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:6:867:739 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:6:967:814 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:6:969:245 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:6:970:308 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:6:971:314 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:7:68:176 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:7:69:353 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:7:71:450 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:7:72:183 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..fb5e35e4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:6:14:236 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-20 21:34:6:16:578 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2023-9-20 21:34:6:17:976 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:34:6:113:477 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2023-9-20 21:34:6:115:234 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2023-9-20 21:34:6:116:602 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:6:117:790 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:6:214:510 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-20 21:34:6:217:285 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-20 21:34:6:219:131 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:6:219:749 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1101cbc0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:6:441:759 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-20 21:34:6:445:376 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:6:540:783 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-20 21:34:6:542:634 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-20 21:34:6:544:506 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:6:545:405 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-20 21:34:6:642:364 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:6:643:697 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-20 21:34:6:645:895 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:6:646:763 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat.txt new file mode 100644 index 00000000..d5767931 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:7:293:148 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:34:7:296:745 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:7:395:869 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:7:398:152 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:7:499:592 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:7:501:946 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:34:7:596:348 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:34:7:696:495 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:34:7:800:974 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:7:896:690 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:7:995:686 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:8:101:180 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:8:105:288 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:8:106:815 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..1c1057da --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:11:647:62 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:11:648:616 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:11:747:424 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:11:749:147 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:11:750:508 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:11:847:261 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:34:11:849:926 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:34:11:851:709 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:11:852:945 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-20 21:34:11:948:954 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:34:11:949:752 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-20 21:34:11:952:63 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:34:11:952:821 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..0a09f1dc --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:10:916:634 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:10:918:513 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:11:16:854 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:11:21:685 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:11:116:781 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-20 21:34:11:118:443 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:11:119:800 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:34:11:216:731 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:34:11:217:810 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:11:219:77 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-20 21:34:11:319:279 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:11:320:86 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-20 21:34:11:418:923 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-20 21:34:11:419:789 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:34:11:425:690 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:34:11:427:650 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..32732fff --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:8:332:609 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-20 21:34:8:334:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:8:432:463 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:34:8:434:260 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:8:532:700 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:8:534:26 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:34:8:634:277 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:34:8:733:919 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:34:8:833:752 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:8:933:587 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:9:34:19 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:9:133:936 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:34:9:138:388 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:9:140:226 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..a11611cd --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:9:359:880 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:34:9:362:123 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:9:460:282 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-20 21:34:9:461:858 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:9:560:421 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-20 21:34:9:564:393 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2023-9-20 21:34:9:660:551 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2023-9-20 21:34:9:760:854 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2023-9-20 21:34:9:862:709 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:34:9:960:981 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:10:62:273 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:10:160:947 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:34:10:163:565 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:10:164:386 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..8ceb66e8 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:12:173:427 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:34:12:175:591 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-20 21:34:12:177:266 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:34:12:274:648 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-20 21:34:12:277:707 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-20 21:34:12:279:467 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:12:281:173 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:34:12:374:702 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-20 21:34:12:377:117 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:34:12:379:205 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:34:12:380:45 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-20 21:34:12:476:343 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-20 21:34:12:477:658 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-20 21:34:12:480:611 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-20 21:34:12:482:426 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..5295a3eb --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:10:383:858 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-20 21:34:10:385:952 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:10:487:918 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-20 21:34:10:489:577 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:34:10:490:893 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:34:10:492:188 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-20 21:34:10:493:181 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:10:494:277 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-20 21:34:10:583:753 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-20 21:34:10:586:377 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-20 21:34:10:588:138 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-20 21:34:10:590:417 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-20 21:34:10:592:264 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:34:10:593:717 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-20 21:34:10:688:766 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-20 21:34:10:689:596 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-20 21:34:10:694:167 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-20 21:34:10:695:973 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..780f7342 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:4:186:623 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:34:4:188:243 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:4:286:983 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:4:288:351 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:4:289:396 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-20 21:34:4:387:409 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:4:388:917 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:4:391:196 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:4:392:518 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..be5d56e2 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:3:765:306 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:34:3:767:408 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:3:864:519 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:34:3:866:18 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:3:867:167 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:34:3:965:572 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:34:3:966:400 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:34:3:967:986 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:34:3:968:708 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..362449ec --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:43:659:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:43:660:989 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:43:759:349 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:43:760:329 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:43:761:212 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:33:43:959:449 + Q7 finished at: 2023-9-20 21:33:43:960:136 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:44:59:929 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:33:44:62:263 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:44:63:72 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..9f1ceacd --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:44:288:567 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:44:290:40 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:44:388:623 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:44:389:955 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:44:391:377 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:44:392:397 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-20 21:33:44:491:329 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:44:493:505 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:33:44:496:150 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:44:497:722 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..e6114230 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:44:724:204 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:44:725:743 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:44:824:438 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:44:825:573 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:33:44:925:773 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:44:926:863 +Q7 finished at: 2023-9-20 21:33:44:927:94 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:33:45:25:68 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:45:29:158 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:45:30:901 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew.txt new file mode 100644 index 00000000..7e0ecba5 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:45:256:919 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:33:45:258:499 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:45:356:623 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:45:358:7 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:33:45:359:299 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:33:45:458:151 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:45:558:337 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:45:656:940 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:45:659:105 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:45:659:866 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2.txt new file mode 100644 index 00000000..37ac885c --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:46:721:874 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:46:723:474 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:46:823:954 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:33:46:825:605 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:46:827:270 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:33:46:928:248 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:46:929:519 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:33:47:24:339 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:47:26:572 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:47:28:84 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..a2ff5f95 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:47:251:781 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:47:253:439 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:47:351:305 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:33:47:352:637 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:47:353:913 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:47:354:566 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:33:47:452:93 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:47:453:231 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:47:455:850 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:47:457:601 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..b1901db0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:45:879:207 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:33:45:881:294 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:45:978:996 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:45:980:237 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:33:45:981:400 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:45:982:469 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:33:46:79:963 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:46:80:692 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-20 21:33:46:82:467 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:46:83:177 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..b5dae9cf --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:46:298:355 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:33:46:300:892 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:46:400:155 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2023-9-20 21:33:46:403:188 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2023-9-20 21:33:46:405:955 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:46:407:261 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:33:46:500:329 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:46:501:67 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-20 21:33:46:502:942 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:46:503:599 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..8ef3fe75 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:42:610:941 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:42:614:116 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:42:709:835 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:42:711:569 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:42:713:207 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:33:42:812:621 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:42:910:867 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:43:10:231 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:43:12:207 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:43:12:725 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2a06af1c --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:43:231:659 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:43:233:370 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:43:330:837 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:43:332:516 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:43:334:291 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:43:335:284 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:33:43:432:29 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:43:433:196 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:43:435:519 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:43:436:229 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat.txt new file mode 100644 index 00000000..491db59a --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:47:681:877 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:47:683:579 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:47:781:542 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:47:782:656 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:33:47:783:796 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:33:47:881:517 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:33:47:882:888 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-20 21:33:47:884:581 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-20 21:33:47:984:363 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:33:47:985:341 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:33:48:82:751 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:33:48:184:88 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:33:48:188:906 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:33:48:190:549 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..f94ab72b --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-20 21:33:48:415:65 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-20 21:33:48:417:247 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-20 21:33:48:515:86 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-20 21:33:48:516:958 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:33:48:615:105 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-20 21:33:48:617:417 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:33:48:619:371 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:33:48:714:949 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:33:48:716:596 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:33:48:817:12 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:33:48:915:883 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:33:49:15:942 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:33:49:115:88 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:33:49:116:9 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:33:49:118:415 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:33:49:119:270 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..8f953586 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:49:339:868 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:49:341:373 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:49:439:288 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:49:441:100 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:33:49:443:489 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:33:49:539:124 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:33:49:540:389 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + *(1) expected_result: + (,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-20 21:33:49:541:923 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + *(4) expected_result: + (,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:33:49:640:301 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:33:49:641:503 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:33:49:740:530 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:33:49:840:420 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:33:49:843:73 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:33:49:844:861 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..4897bc90 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:50:66:570 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2023-9-20 21:33:50:68:170 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:50:166:658 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2023-9-20 21:33:50:168:281 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:33:50:170:27 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:33:50:267:95 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2023-9-20 21:33:50:269:640 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-20 21:33:50:273:710 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:33:50:367:998 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:33:50:369:278 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:33:50:467:474 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:33:50:567:442 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:33:50:569:895 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:33:50:570:951 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_dirty_read.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_dirty_read.txt new file mode 100644 index 00000000..ad76ea4c --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:39:40:184 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:39:41:874 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:39:139:718 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:33:39:141:635 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-20 21:33:39:240:400 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:39:339:641 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:33:39:341:499 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:33:39:341:962 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..6ade2418 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:40:177:262 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:40:178:981 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:40:276:599 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:33:40:278:147 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-20 21:33:40:377:633 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:40:477:11 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:40:578:234 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:33:40:580:503 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:40:581:462 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..e477aee6 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:40:800:265 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:40:801:556 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:40:901:163 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:33:40:904:441 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:40:906:78 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-20 21:33:41:1:450 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:41:2:744 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:33:41:6:433 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:41:8:198 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..aa6bb368 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:42:80:682 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:42:81:988 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:42:181:304 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:33:42:282:418 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:33:42:283:519 +Q6 finished at: 2023-9-20 21:33:42:284:32 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:42:381:546 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:33:42:384:990 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:42:386:504 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..9ef75c63 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:39:556:631 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:33:39:558:452 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:39:656:436 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:33:39:657:785 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:33:39:758:745 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:39:857:171 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:39:956:395 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:33:39:958:474 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:39:959:173 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..3369619a --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:41:228:424 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:33:41:229:907 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:41:329:638 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:33:41:332:484 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:41:333:784 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:33:41:429:892 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:41:431:80 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-20 21:33:41:434:582 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:41:436:268 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..81cdd4f2 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:41:654:752 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:33:41:656:795 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:41:755:887 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2023-9-20 21:33:41:758:549 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:41:760:325 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:33:41:857:315 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:41:858:846 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-20 21:33:41:861:10 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:41:861:543 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..2b04a8e0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:54:380:558 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:54:383:860 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:54:480:452 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:54:482:341 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:33:54:581:54 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:54:582:14 +Q8 finished at: 2023-9-20 21:33:54:582:158 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:54:583:59 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:54:584:950 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:54:585:750 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e59b1d43 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:54:804:793 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:54:806:568 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:54:906:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:54:910:39 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:33:55:7:219 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:33:55:108:373 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:33:55:607:986 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..ae892bb1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:55:835:378 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:55:838:534 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:55:934:209 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:55:935:625 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:33:56:37:388 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:56:136:342 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:33:56:638:48 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..f1369bc1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:56:862:80 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:56:863:838 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:56:962:373 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:56:963:908 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:33:57:63:982 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:57:66:496 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:33:57:764:463 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..3f3b4422 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:57:990:153 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:33:57:993:264 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:58:89:5 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:58:90:137 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:33:58:90:993 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:33:58:289:621 + Q8 finished at: 2023-9-20 21:33:58:289:697 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:58:291:404 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:58:293:381 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:58:294:61 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..91d5b3ea --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:58:513:156 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:33:58:516:350 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:58:613:950 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:33:58:618:298 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:33:58:622:329 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:33:58:813:660 + Q7 finished at: 2023-9-20 21:33:58:813:717 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:33:58:913:984 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:58:917:994 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:58:919:225 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..4b9db6c6 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:59:141:862 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:59:143:87 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:59:241:633 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:33:59:243:787 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:33:59:343:507 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:59:344:907 +Q7 finished at: 2023-9-20 21:33:59:344:988 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:33:59:442:601 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:33:59:446:146 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:33:59:447:868 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..24fc7687 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:59:669:924 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:59:672:207 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:59:769:860 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:33:59:771:895 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:33:59:870:440 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:34:0:70:27 + Q5 finished at: 2023-9-20 21:34:0:70:246 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:34:0:71:568 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:0:73:170 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:0:73:658 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..2f4baaad --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:0:292:509 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:0:296:155 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:0:391:371 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:34:0:393:251 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:34:0:492:59 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:34:0:492:955 +Q8 finished at: 2023-9-20 21:34:0:493:211 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:34:0:494:28 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:34:0:496:132 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:34:0:496:808 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..34be6147 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:0:716:834 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:0:718:641 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:0:817:436 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:0:820:692 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:34:0:916:683 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:0:918:704 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2023-9-20 21:34:1:17:751 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:1:117:586 + Q11 finished at: 2023-9-20 21:34:1:117:879 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:1:218:366 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:34:1:918:234 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..3c7f8f64 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:34:2:142:525 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:34:2:143:797 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:34:2:242:480 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:34:2:243:829 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:34:2:342:706 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:34:2:545:181 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2023-9-20 21:34:2:643:692 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:34:2:743:302 + Q10 finished at: 2023-9-20 21:34:2:743:790 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:34:2:943:690 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:34:3:544:143 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..83c88466 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:50:794:756 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:50:797:897 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:50:895:467 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2023-9-20 21:33:50:995:519 +Q5 finished at: 2023-9-20 21:33:50:995:678 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:51:94:379 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:33:51:96:329 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:33:51:101:670 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:51:102:145 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..638488c3 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:51:319:756 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:51:321:833 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:51:419:451 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:33:51:519:927 +Q5 finished at: 2023-9-20 21:33:51:520:460 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:51:620:804 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:33:51:623:609 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:33:51:628:26 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:51:629:237 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write.txt new file mode 100644 index 00000000..eeab26b8 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:51:850:720 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:51:852:59 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:51:950:833 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-20 21:33:52:52:54 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:33:52:53:70 +Q6 finished at: 2023-9-20 21:33:52:53:276 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:52:152:470 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:33:52:154:591 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:52:155:187 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..26da2010 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:52:369:936 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:52:372:245 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:52:470:22 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-20 21:33:52:571:525 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:33:52:572:664 +Q7 finished at: 2023-9-20 21:33:52:572:884 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:52:573:847 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:33:52:577:17 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:52:578:589 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..bcb6d05d --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:53:951:84 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:33:53:952:539 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:54:51:688 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:33:54:152:268 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:33:54:153:285 +Q7 finished at: 2023-9-20 21:33:54:153:460 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:33:54:154:707 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:33:54:156:667 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:54:157:494 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..ce5c0988 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:52:798:444 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:33:52:800:96 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:52:898:452 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:33:52:899:757 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:33:53:99:656 +Q5 finished at: 2023-9-20 21:33:53:99:819 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:33:53:102:230 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:33:53:105:912 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:53:107:718 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..c73353d7 --- /dev/null +++ b/test_result/centralizend_result/mariadb/read-uncommitted/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: read-uncommitted #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = read-uncommitted for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:33:53:326:980 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:33:53:329:397 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:33:53:426:876 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:33:53:428:566 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:33:53:627:344 +Q5 finished at: 2023-9-20 21:33:53:627:363 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:33:53:727:72 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:33:53:728:664 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:33:53:729:302 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..12097b9e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:35:853:969 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:35:856:818 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:35:953:558 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:35:956:492 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:35:959:172 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:35:961:233 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:35:36:55:365 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:36:56:789 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:36:60:14 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:36:61:588 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..8110a3d5 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:36:286:250 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:36:288:456 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:36:386:212 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:36:388:758 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:36:391:121 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:36:392:940 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:35:36:487:854 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:36:489:934 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:36:493:86 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:36:494:136 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew.txt new file mode 100644 index 00000000..be37b13d --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:36:715:315 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:36:718:205 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:36:815:439 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:36:818:317 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:36:821:89 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:35:36:916:857 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:36:918:887 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:37:15:890 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:37:19:365 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:37:20:912 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..4848fb9b --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:38:107:85 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:38:108:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:38:207:3 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:38:208:276 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:38:209:392 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:38:210:257 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:35:38:307:795 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:38:308:797 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:38:310:409 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:38:311:182 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..e26674be --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,72 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:37:248:466 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-20 21:35:37:251:971 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2023-9-20 21:35:37:254:895 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:35:37:348:554 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (300,) + (1) expected_result: + (330,) + *(2) expected_result: + (300,) + + Q5 finished at: 2023-9-20 21:35:37:351:957 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2023-9-20 21:35:37:354:880 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:37:356:784 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:37:449:36 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-20 21:35:37:452:891 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-20 21:35:37:456:308 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:37:457:870 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..0721e7ab --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:37:677:988 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-20 21:35:37:681:945 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:37:777:922 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-20 21:35:37:781:838 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-20 21:35:37:786:797 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:37:788:890 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-20 21:35:37:881:516 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:37:883:523 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-20 21:35:37:886:551 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:37:887:953 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat.txt new file mode 100644 index 00000000..3db93468 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:38:527:24 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:35:38:528:411 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:38:629:376 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:35:38:630:846 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:38:727:77 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:35:38:728:569 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:35:38:827:714 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:35:38:928:61 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:35:39:27:877 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:39:127:844 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:39:227:710 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:39:328:14 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:35:39:329:950 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:39:330:487 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..297840de --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:42:846:908 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:42:848:566 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:42:946:843 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:42:948:79 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:42:949:542 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:43:46:835 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:35:43:48:238 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:35:43:49:893 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:43:52:90 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2023-9-20 21:35:43:147:895 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:35:43:148:533 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-20 21:35:43:150:573 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:35:43:151:224 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..264a5d36 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,209 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:42:114:307 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:42:118:812 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:42:213:996 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:42:218:765 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:42:313:944 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-20 21:35:42:316:810 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:42:318:749 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:35:42:413:551 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:35:42:414:960 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:42:416:114 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2023-9-20 21:35:42:517:503 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:42:519:226 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2023-9-20 21:35:42:617:867 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-20 21:35:42:619:982 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:35:42:625:243 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:35:42:627:122 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..77d9e960 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:39:546:246 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-20 21:35:39:547:961 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:39:645:983 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:35:39:647:565 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:39:746:151 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:35:39:747:723 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-20 21:35:39:846:672 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:35:39:947:227 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-20 21:35:40:47:356 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:40:146:621 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:40:246:992 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:40:346:892 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:35:40:348:656 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:40:349:286 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..046c4d5f --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:40:560:662 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:35:40:562:544 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:40:660:647 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-20 21:35:40:661:950 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:40:760:573 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-20 21:35:40:761:948 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q7 finished at: 2023-9-20 21:35:40:861:325 + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q8 finished at: 2023-9-20 21:35:40:961:390 + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' + Q9 finished at: 2023-9-20 21:35:41:61:282 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:41:161:809 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:41:261:791 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:41:361:873 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:35:41:365:568 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:41:366:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..9315acf0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:43:367:817 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:35:43:369:362 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-20 21:35:43:370:891 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:35:43:467:741 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-20 21:35:43:469:273 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-20 21:35:43:470:554 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:43:471:450 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:35:43:567:751 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-20 21:35:43:569:396 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:35:43:570:845 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:43:571:538 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-20 21:35:43:668:676 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-20 21:35:43:669:699 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-20 21:35:43:671:731 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-20 21:35:43:672:443 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..2de22fdb --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,164 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:41:586:165 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-20 21:35:41:589:683 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:41:686:278 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-20 21:35:41:689:589 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:41:692:154 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:35:41:695:94 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-20 21:35:41:697:537 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:41:698:881 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-20 21:35:41:786:403 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-20 21:35:41:789:629 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-20 21:35:41:792:175 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-20 21:35:41:795:124 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-20 21:35:41:797:563 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:41:798:962 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2023-9-20 21:35:41:888:576 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-20 21:35:41:890:52 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-20 21:35:41:894:151 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-20 21:35:41:895:798 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..3e4ec7b5 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:35:429:286 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:35:35:432:124 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:35:529:223 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:35:532:84 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:35:534:250 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-20 21:35:35:628:885 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:35:629:914 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:35:632:444 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:35:634:5 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..cd7960ab --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:35:3:176 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:35:6:95 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:35:102:26 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:35:103:14 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:35:104:144 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:35:35:204:799 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:35:206:404 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:35:208:292 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:35:209:831 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..442095e2 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:15:78:785 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:15:79:558 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:15:178:737 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:15:179:489 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:15:180:244 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:35:15:379:273 + Q7 finished at: 2023-9-20 21:35:15:379:304 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:15:480:135 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:35:15:482:963 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:15:484:377 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..9bf40db3 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:15:700:942 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:15:702:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:15:800:736 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:15:801:639 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:15:802:530 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:15:803:449 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-20 21:35:15:903:315 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:15:904:184 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-20 21:35:15:906:871 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:15:908:231 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..2eaf92f4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_double_write_skew2.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:16:125:894 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:16:126:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:16:225:826 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:16:226:902 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:35:16:326:363 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:16:327:128 +Q7 finished at: 2023-9-20 21:35:16:327:460 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:16:426:386 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:16:427:832 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:16:428:420 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew.txt new file mode 100644 index 00000000..1fec579e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:16:641:971 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:16:644:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:16:742:421 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:16:745:178 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:16:747:808 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:35:16:841:853 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:16:941:755 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:17:41:350 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:17:44:435 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:17:45:830 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2.txt new file mode 100644 index 00000000..7566d163 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:18:99:574 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:18:100:446 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:18:199:836 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:18:201:573 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:18:204:120 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:35:18:299:999 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:18:300:723 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:18:399:882 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:18:401:192 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:18:401:610 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..8aa4d6ff --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew2_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:18:616:98 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:18:617:303 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:18:716:380 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:18:717:248 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:18:717:955 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:18:718:364 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:35:18:816:433 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:18:817:311 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:18:819:532 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:18:819:958 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..59eb74f5 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:17:264:67 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:35:17:264:896 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:17:363:999 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:17:364:873 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:17:365:620 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:17:366:469 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:35:17:464:439 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:17:464:928 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-20 21:35:17:467:853 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:17:469:391 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..b181fb63 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:17:683:163 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:35:17:684:595 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:17:783:121 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' + Q4 finished at: 2023-9-20 21:35:17:785:229 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2023-9-20 21:35:17:787:801 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:17:789:509 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:35:17:883:870 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:17:884:532 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-20 21:35:17:886:115 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:17:886:698 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..38d17324 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:14:31:132 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:14:32:310 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:14:131:147 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:14:132:184 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:14:133:212 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-20 21:35:14:231:780 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:14:331:491 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:14:431:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:14:434:601 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:14:435:987 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..2ea951b3 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:14:652:960 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:14:653:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:14:752:851 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:14:753:610 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:14:754:557 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:14:755:617 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:35:14:855:284 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:14:857:281 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:14:859:916 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:14:861:288 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat.txt new file mode 100644 index 00000000..fb8cbc4a --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:19:36:595 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:19:38:499 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:19:136:151 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:19:136:981 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:35:19:137:850 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:19:236:54 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:35:19:236:789 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q8 finished at: 2023-9-20 21:35:19:237:709 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2023-9-20 21:35:19:337:263 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:19:338:198 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:19:436:531 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:19:538:88 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:35:19:539:719 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:19:541:39 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..ce880bd3 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,209 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-20 21:35:19:761:186 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-20 21:35:19:762:423 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-20 21:35:19:862:266 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-20 21:35:19:864:978 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:19:961:124 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-20 21:35:19:962:264 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:35:19:964:590 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:35:20:61:415 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-20 21:35:20:62:743 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + *(14) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:35:20:162:210 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:35:20:261:697 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:20:361:735 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:35:20:461:509 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:20:462:459 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-20 21:35:20:463:736 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-20 21:35:20:464:150 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..010b23cd --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:20:675:71 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:20:675:916 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:20:775:420 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:20:776:535 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:35:20:778:131 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:20:875:147 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:35:20:875:855 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2023-9-20 21:35:20:876:782 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + *(3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:35:20:975:873 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:20:976:673 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:21:75:384 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:21:175:789 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-20 21:35:21:177:550 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:21:177:980 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..77b7d54d --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:21:387:421 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2023-9-20 21:35:21:388:316 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:21:487:795 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2023-9-20 21:35:21:488:953 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:35:21:490:376 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:21:587:535 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2023-9-20 21:35:21:588:429 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2023-9-20 21:35:21:589:616 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + (1) expected_result: + (1,) + *(2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + *(5) expected_result: + (,) + *(6) expected_result: + (,) + +Q9 finished at: 2023-9-20 21:35:21:688:841 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:35:21:690:259 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:35:21:788:900 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:21:888:111 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-20 21:35:21:889:599 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:35:21:890:438 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_dirty_read.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_dirty_read.txt new file mode 100644 index 00000000..b0600b67 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:10:467:330 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:10:470:15 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:10:566:785 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:35:10:568:152 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-20 21:35:10:667:47 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:10:767:767 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:35:10:770:696 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:10:772:321 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..b1f18e2e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:11:614:693 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:11:615:748 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:11:714:372 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:35:11:716:206 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-20 21:35:11:816:275 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:11:914:329 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:12:15:84 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:35:12:16:625 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:12:17:205 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..eab3b6b4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:12:235:452 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:12:238:397 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:12:334:675 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:35:12:335:875 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:12:336:490 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-20 21:35:12:437:160 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:12:439:219 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:35:12:441:775 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:12:443:224 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..1af49503 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:13:511:67 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:13:512:112 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:13:611:216 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:35:13:711:508 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:35:13:712:465 + Q4 finished at: 2023-9-20 21:35:13:712:461 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:13:812:707 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:13:814:20 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:13:814:602 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..00e517e6 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:10:994:364 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:10:995:833 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:11:94:499 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:11:95:816 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:35:11:195:780 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:11:296:69 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:11:394:812 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:11:396:823 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:11:397:519 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..d0b6f44f --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:12:665:813 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:35:12:667:413 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:12:766:386 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:12:767:442 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:12:768:372 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:35:12:866:694 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:12:867:705 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-20 21:35:12:869:580 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:12:871:267 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..b2094980 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:13:88:743 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:35:13:90:538 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:13:189:491 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q4 finished at: 2023-9-20 21:35:13:191:960 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:13:193:592 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:35:13:289:265 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:13:289:734 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-20 21:35:13:292:671 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:13:293:849 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..fb906384 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,56 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:25:655:584 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:25:656:878 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:25:755:531 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:25:757:466 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2023-9-20 21:35:25:856:317 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:25:857:44 +Q8 finished at: 2023-9-20 21:35:25:857:206 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:25:857:868 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:25:859:149 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:25:859:730 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..5814f6ea --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:26:74:497 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:26:75:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:26:174:699 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:26:176:52 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:35:26:275:383 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:26:375:48 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:35:26:875:892 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..07a736e1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:27:91:886 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:27:93:47 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:27:191:956 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:27:192:972 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:35:27:292:918 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:27:393:350 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:35:27:893:369 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..fc40ced4 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:28:112:12 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:28:112:974 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:28:212:642 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:28:214:893 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:35:28:315:49 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:28:317:77 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:35:29:15:653 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..aef2c2f0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:29:235:562 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:29:236:902 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:29:335:607 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:29:337:57 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:29:338:234 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:35:29:536:34 + Q8 finished at: 2023-9-20 21:35:29:536:66 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:29:537:140 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:29:538:986 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:29:539:584 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..0c6b07db --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:29:757:681 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:35:29:759:288 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:29:857:676 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:29:859:17 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:35:29:860:15 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:35:30:58:57 + Q7 finished at: 2023-9-20 21:35:30:58:301 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:35:30:158:251 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:30:159:947 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:30:160:588 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..f6974d9e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:30:378:319 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:30:379:715 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:30:478:438 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:30:480:185 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:35:30:579:379 +Q7-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:30:580:357 +Q7 finished at: 2023-9-20 21:35:30:580:625 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:30:679:156 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:30:681:527 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:30:682:410 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..1bcfe730 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:30:907:262 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:30:909:10 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:31:7:79 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:31:8:681 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:35:31:108:121 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:31:307:710 +Q8 finished at: 2023-9-20 21:35:31:307:877 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:31:309:3 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:31:311:45 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:31:311:750 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..2e2f328d --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:31:535:375 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:31:536:897 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:31:635:423 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:35:31:637:458 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:35:31:736:354 +Q8-T1 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:31:737:307 +Q8 finished at: 2023-9-20 21:35:31:737:543 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:31:738:512 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-20 21:35:31:740:522 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:35:31:741:217 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..fb76c9ef --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:31:962:301 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:31:963:942 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:32:61:555 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:32:62:950 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:35:32:161:675 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:35:32:163:365 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2023-9-20 21:35:32:263:91 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:32:362:40 + Q11 finished at: 2023-9-20 21:35:32:362:140 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:32:462:252 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:35:33:163:648 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..50b8010e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:33:385:796 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:33:388:55 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:33:486:150 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:35:33:488:130 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:35:33:585:704 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:35:33:788:64 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2023-9-20 21:35:33:886:887 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:35:33:986:14 + Q10 finished at: 2023-9-20 21:35:33:986:826 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:35:34:187:535 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:35:34:787:419 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..8863ee22 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:22:108:242 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:22:109:114 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:22:208:256 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-20 21:35:22:308:513 + Q4 finished at: 2023-9-20 21:35:22:308:668 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:22:408:643 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:35:22:411:511 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:35:22:415:807 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:22:416:188 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..d113bbef --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:22:629:749 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:22:630:592 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:22:729:860 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-20 21:35:22:830:111 + Q4 finished at: 2023-9-20 21:35:22:830:96 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:35:22:930:575 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:35:22:932:501 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:35:22:937:721 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:22:938:568 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write.txt new file mode 100644 index 00000000..d264c04e --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:23:150:61 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:23:150:943 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:23:250:55 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-20 21:35:23:352:722 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:35:23:354:239 +Q6 finished at: 2023-9-20 21:35:23:354:432 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:35:23:451:654 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:35:23:453:144 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:23:453:674 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..b7c81879 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:23:690:210 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:23:692:759 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:23:789:191 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-20 21:35:23:889:841 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:35:23:890:511 +Q7 finished at: 2023-9-20 21:35:23:890:837 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:23:891:396 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:35:23:892:477 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:23:892:948 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..b6ea0b19 --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:25:236:922 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:35:25:238:51 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:25:336:981 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:35:25:437:961 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:35:25:439:1 +Q7 finished at: 2023-9-20 21:35:25:439:217 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:35:25:440:255 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:25:441:528 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:25:442:325 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..e183114b --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:24:105:319 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:35:24:106:692 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:24:205:348 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:24:207:469 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q7-T2 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-20 21:35:24:405:907 + Q7 finished at: 2023-9-20 21:35:24:405:960 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:35:24:406:757 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:24:408:15 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:24:408:609 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..5ed74d1a --- /dev/null +++ b/test_result/centralizend_result/mariadb/repeatable-read/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: repeatable-read #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = repeatable-read for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:35:24:620:652 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:35:24:621:851 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:35:24:720:966 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-20 21:35:24:722:107 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-20 21:35:24:921:456 + Q6 finished at: 2023-9-20 21:35:24:921:665 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:35:25:21:599 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:35:25:22:900 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:35:25:23:477 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/mariadb/result_summary/read-committed_total-result.txt b/test_result/centralizend_result/mariadb/result_summary/read-committed_total-result.txt new file mode 100644 index 00000000..38745346 --- /dev/null +++ b/test_result/centralizend_result/mariadb/result_summary/read-committed_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mariadb/result_summary/read-uncommitted_total-result.txt b/test_result/centralizend_result/mariadb/result_summary/read-uncommitted_total-result.txt new file mode 100644 index 00000000..f709ccda --- /dev/null +++ b/test_result/centralizend_result/mariadb/result_summary/read-uncommitted_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mariadb/result_summary/repeatable-read_total-result.txt b/test_result/centralizend_result/mariadb/result_summary/repeatable-read_total-result.txt new file mode 100644 index 00000000..ef182286 --- /dev/null +++ b/test_result/centralizend_result/mariadb/result_summary/repeatable-read_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Avoid + +rat_dda_double_write_skew1: Avoid + +rat_dda_double_write_skew1_committed: Avoid + +rat_dda_double_write_skew2: Avoid + +rat_dda_read_skew: Avoid + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Avoid + +rat_dda_read_skew2_committed: Avoid + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Avoid + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Avoid + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Avoid + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Anomaly + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Avoid + +iat_mda_step_iat_cross_phenomenon: Avoid + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/mariadb/result_summary/serializable_total-result.txt b/test_result/centralizend_result/mariadb/result_summary/serializable_total-result.txt new file mode 100644 index 00000000..b5b686cf --- /dev/null +++ b/test_result/centralizend_result/mariadb/result_summary/serializable_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Avoid + +rat_sda_non_repeatable_read: Avoid + +rat_sda_intermediate_read: Avoid + +rat_sda_intermediate_read_committed: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Avoid + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Avoid + +rat_sda_lost_self_update: Avoid + +rat_dda_write_read_skew: Rollback + +rat_dda_write_read_skew_committed: Rollback + +rat_dda_double_write_skew1: Rollback + +rat_dda_double_write_skew1_committed: Rollback + +rat_dda_double_write_skew2: Rollback + +rat_dda_read_skew: Rollback + +rat_dda_read_skew_predicate_based_delete: Avoid + +rat_dda_read_skew_predicate_based_insert: Avoid + +rat_dda_read_skew2: Rollback + +rat_dda_read_skew2_committed: Rollback + +rat_mda_step_rat: Rollback + +rat_mda_step_rat_long_fork: Rollback + +rat_mda_step_rat_predicate_based_delete: Rollback + +rat_mda_step_rat_predicate_based_insert: Rollback + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Rollback + +wat_sda_lost_update_c2: Rollback + +wat_sda_lost_self_update_committed: Avoid + +wat_dda_double_write_skew2_committed: Rollback + +wat_dda_full_write_skew_c1: Rollback + +wat_dda_full_write_skew_c2: Rollback + +wat_dda_full_write_skew_committed: Rollback + +wat_dda_read_write_skew1_c1: Rollback + +wat_dda_read_write_skew1_c2: Rollback + +wat_dda_read_write_skew2_c1: Rollback + +wat_dda_read_write_skew2_c2: Rollback + +wat_dda_read_write_skew2_committed: Rollback + +wat_mda_step_wat_c1: Rollback + +wat_mda_step_wat_c2: Rollback + +iat_sda_non_repeatable_read_committed: Avoid + +iat_sda_lost_update_committed: Rollback + +iat_dda_read_skew_committed: Rollback + +iat_dda_read_write_skew1_committed: Rollback + +iat_dda_write_skew: Rollback + +iat_dda_write_skew_predicate_based-intersecting_data: Avoid + +iat_dda_write_skew_predicate_based-overdraft_protection: Rollback + +iat_dda_write_skew_committed: Rollback + +iat_mda_step_iat: Rollback + +iat_mda_step_iat_predicate_based_delete: Rollback + +iat_mda_step_iat_predicate_based_insert: Rollback + +iat_mda_step_iat_uname_anomaly: Rollback + +iat_mda_step_iat_cross_phenomenon: Rollback + +iat_mda_step_iat_causality_violation_anomaly: Avoid + +iat_mda_step_iat_read_only_transaction_anomaly: Rollback + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..3351536d --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:36:512:284 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:36:514:468 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:36:611:917 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:36:613:656 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:36:712:883 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:36:714:74 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:37:413:233 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..432eb8fc --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:37:639:966 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:37:641:425 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:37:740:266 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:37:741:977 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:37:841:974 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:37:843:562 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:38:542:396 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew.txt new file mode 100644 index 00000000..0da2b317 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew.txt @@ -0,0 +1,49 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:38:766:878 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:38:769:109 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:38:867:942 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:38:870:544 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:38:969:362 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:39:67:611 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:39:569:600 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..6bb81ca9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_committed.txt @@ -0,0 +1,49 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:41:357:522 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:41:359:426 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:41:457:266 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:41:458:914 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:41:558:964 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:41:560:507 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:42:258:836 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..e73a80a0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,74 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:39:798:312 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-20 21:36:39:801:717 +Q3-T1 execute sql: 'INSERT INTO mytab VALUES (2, 30);' +Q3 finished at: 2023-9-20 21:36:39:803:553 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:36:39:899:189 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' +Q8-T1 execute opt: 'COMMIT'; + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2023-9-20 21:36:39:999:699 +Q8 finished at: 2023-9-20 21:36:39:999:719 + Q6-T2 execute sql: 'INSERT INTO mytab VALUES (1, 300);' + Q6 finished at: 2023-9-20 21:36:40:1:89 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:40:2:208 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-20 21:36:40:4:102 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-20 21:36:40:5:725 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:40:6:463 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..5ed2f281 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,49 @@ +#### db_type: mariadb #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:40:228:428 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-20 21:36:40:233:159 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:40:328:536 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-20 21:36:40:333:384 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' + Q5 finished at: 2023-9-20 21:36:40:430:156 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:40:432:195 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:41:130:580 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat.txt new file mode 100644 index 00000000..8e0e5ac1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat.txt @@ -0,0 +1,89 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:42:490:862 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:36:42:493:40 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:42:590:683 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:36:42:595:57 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:42:690:791 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:36:42:692:782 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q8 finished at: 2023-9-20 21:36:42:991:590 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:36:43:191:678 +Q7 finished at: 2023-9-20 21:36:43:191:779 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:36:43:193:332 + Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q9 failed at: 2023-9-20 21:36:43:891:838 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..6435f38d --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,108 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:50:731:859 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:50:735:53 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:50:831:212 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:36:50:931:640 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2023-9-20 21:36:51:33:473 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-20 21:36:51:35:223 + Q4 finished at: 2023-9-20 21:36:51:35:523 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:51:37:46 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:36:51:37:703 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-20 21:36:51:41:600 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:51:43:873 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-20 21:36:51:47:220 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:36:51:48:331 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..67962cce --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,171 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:49:399:624 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:49:402:60 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:49:499:972 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:49:502:683 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:49:600:388 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:36:49:700:289 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2023-9-20 21:36:49:903:445 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:49:904:802 + Q9 finished at: 2023-9-20 21:36:49:904:978 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:36:49:906:227 + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-20 21:36:49:906:756 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-20 21:36:49:907:618 + Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q6 failed at: 2023-9-20 21:36:50:502:407 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..b256bcd7 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,89 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:44:116:977 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-20 21:36:44:119:210 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:44:216:643 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:36:44:219:38 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:44:316:570 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:36:44:318:36 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q8 finished at: 2023-9-20 21:36:44:618:732 + Q11-T2 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:44:817:397 + Q11 finished at: 2023-9-20 21:36:44:817:671 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:36:44:818:991 + Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q9 failed at: 2023-9-20 21:36:45:519:120 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..88b23bc0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,85 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:45:741:72 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-20 21:36:45:743:459 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:45:841:325 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-20 21:36:45:843:725 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:45:941:481 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-20 21:36:45:944:234 +Q7-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' + Q8-T2 execute sql: 'INSERT INTO t1 VALUES (1, 0);' + Q9-T3 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q7 finished at: 2023-9-20 21:36:46:242:541 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-20 21:36:46:342:237 + Q8 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q8 failed at: 2023-9-20 21:36:46:942:323 + Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q9 failed at: 2023-9-20 21:36:47:142:820 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..a856273c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,120 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:51:275:176 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:36:51:277:28 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-20 21:36:51:278:409 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-20 21:36:51:375:288 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-20 21:36:51:377:417 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:36:51:475:457 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-20 21:36:51:477:730 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' + Q6 finished at: 2023-9-20 21:36:51:576:986 + Q7-T2 execute opt: 'COMMIT'; + current_result: + Q7 finished at: 2023-9-20 21:36:51:579:455 + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:36:51:579:907 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:36:51:580:834 +Q12 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q12 failed at: 2023-9-20 21:36:52:777:355 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..d399efc0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,127 @@ +#### db_type: mariadb #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:47:367:347 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-20 21:36:47:369:994 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:47:467:645 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-20 21:36:47:469:837 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:36:47:471:408 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-20 21:36:47:473:248 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-20 21:36:47:567:576 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-20 21:36:47:569:941 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-20 21:36:47:571:651 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:36:47:670:78 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:47:671:218 + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-20 21:36:47:671:841 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-20 21:36:47:673:449 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-20 21:36:47:674:600 +Q15 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q15 failed at: 2023-9-20 21:36:49:170:546 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/mariadb/serializable/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..e62ffa9c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_sda_lost_update_committed.txt @@ -0,0 +1,39 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:35:680:30 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:36:35:681:593 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:35:780:79 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-20 21:36:35:881:720 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:35:883:256 + Q4 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q4 failed at: 2023-9-20 21:36:36:282:438 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/mariadb/serializable/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..8710d03f --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:35:241:165 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:35:243:346 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:35:341:335 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:36:35:444:282 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:35:445:959 + Q4 finished at: 2023-9-20 21:36:35:446:354 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:35:449:104 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:36:35:452:613 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:35:454:368 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..96f10244 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:6:298:795 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:6:301:650 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:6:398:801 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:6:401:559 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:36:6:500:631 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:6:599:345 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:7:101:33 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..4bd66f4f --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:7:325:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:7:328:253 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:7:425:910 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:7:428:709 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:36:7:527:770 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:7:529:640 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:8:227:921 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..1bd9e847 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_double_write_skew2.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:8:451:737 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:8:454:552 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:8:551:792 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:8:554:592 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:8:653:331 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:8:752:425 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:9:253:713 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..7192230c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:9:478:801 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:9:481:617 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:9:578:783 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:9:581:518 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:9:680:301 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:9:779:536 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:10:280:259 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2.txt new file mode 100644 index 00000000..ca9a3ad9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:11:365:28 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:11:367:803 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:11:464:950 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:11:467:696 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-20 21:36:11:566:609 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:11:568:558 + Q5 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q5 failed at: 2023-9-20 21:36:12:66:980 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..7960f95e --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:12:291:554 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:12:294:315 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:12:391:600 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:12:394:426 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-20 21:36:12:493:232 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:36:12:495:112 + Q5 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q5 failed at: 2023-9-20 21:36:12:993:619 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..653e7a22 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,63 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:10:505:448 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:36:10:508:481 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:10:605:422 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) (1,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:36:10:706:834 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:36:10:708:408 + Q4 finished at: 2023-9-20 21:36:10:708:673 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-20 21:36:10:711:347 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:10:713:267 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-20 21:36:10:716:401 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:36:10:717:949 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..42cfb60b --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: mariadb #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:10:933:797 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-20 21:36:10:936:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:11:33:785 + Q4-T2 execute sql: 'INSERT into t1 VALUES(1,0);' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-20 21:36:11:135:100 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-20 21:36:11:136:674 + Q4 finished at: 2023-9-20 21:36:11:136:999 + Q5-T2 execute sql: 'INSERT into t1 VALUES(0,0);' + Q5 finished at: 2023-9-20 21:36:11:139:699 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:11:141:502 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-20 21:36:11:144:571 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-20 21:36:11:146:125 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..fee1379e --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:4:147:619 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:4:150:466 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:4:247:657 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:4:250:452 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:36:4:349:432 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:4:448:370 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:4:949:616 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..85d6971b --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:5:173:818 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:5:176:651 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:5:273:617 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:5:275:872 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:36:5:375:538 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:5:377:264 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:6:75:809 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..13b8322f --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat.txt @@ -0,0 +1,74 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:13:219:475 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:13:222:268 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:13:319:621 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:13:322:462 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:36:13:419:555 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:36:13:422:408 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2023-9-20 21:36:13:521:915 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:36:13:620:215 + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-20 21:36:13:620:891 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:13:720:169 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:36:14:421:561 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..2c248135 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,169 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-20 21:36:14:646:825 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-20 21:36:14:650:978 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-20 21:36:14:746:997 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:14:847:2 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-20 21:36:14:851:503 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-20 21:36:14:947:232 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + (9) expected_result: + (0,1) + *(10) expected_result: + (0,0) + *(11) expected_result: + (0,0) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + *(14) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:36:15:50:648 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-20 21:36:15:347:258 + Q9 finished at: 2023-9-20 21:36:15:347:576 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:15:349:635 + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-20 21:36:15:351:564 +Q4 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q4 failed at: 2023-9-20 21:36:15:449:344 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..e5b5ccbc --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,74 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:15:675:961 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:15:678:989 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:15:775:838 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:15:778:555 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:36:15:875:161 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-20 21:36:15:876:697 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:36:15:977:646 + Q11-T2 execute opt: 'COMMIT'; + current_result: + (,) + *(1) expected_result: + (,) + Q11 finished at: 2023-9-20 21:36:16:75:929 + (2) expected_result: + (1,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-20 21:36:16:76:287 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:16:175:634 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:36:16:877:367 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..3bcfa49c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,71 @@ +#### db_type: mariadb #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:17:94:668 +Q2-T1 execute sql: 'INSERT INTO t1 VALUES (0, 1);' +Q2 finished at: 2023-9-20 21:36:17:96:516 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:17:194:578 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (1, 1);' + Q4 finished at: 2023-9-20 21:36:17:195:962 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:36:17:294:650 + Q7-T3 execute sql: 'INSERT INTO t1 VALUES (2, 1);' + Q7 finished at: 2023-9-20 21:36:17:295:980 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-20 21:36:17:396:537 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-20 21:36:17:496:339 + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-20 21:36:17:496:742 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:17:595:19 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:36:18:296:694 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_dirty_read.txt new file mode 100644 index 00000000..3888f7f9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_dirty_read.txt @@ -0,0 +1,47 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:0:568:254 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:0:571:75 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:0:668:133 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5-T1 execute opt: 'ROLLBACK'; + current_result: + (0,0) + *(1) expected_result: + (0,0) + +Q5 finished at: 2023-9-20 21:36:0:767:624 + Q4 finished at: 2023-9-20 21:36:0:767:612 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:0:868:427 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + + Q7 finished at: 2023-9-20 21:36:0:871:215 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:0:872:787 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..c8ffe506 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:1:717:516 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:1:719:666 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:1:817:540 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-20 21:36:1:919:148 +Q7-T1 execute opt: 'COMMIT'; + current_result: + (0,2) + *(1) expected_result: + (0,2) +Q7 finished at: 2023-9-20 21:36:2:118:750 + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:36:2:118:949 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:2:120:651 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:36:2:123:370 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:2:124:935 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..f25ca6c9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:2:341:474 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:2:344:276 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:2:441:331 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-20 21:36:2:542:895 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:2:544:757 + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-20 21:36:2:545:172 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:2:546:797 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-20 21:36:2:549:225 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:2:550:675 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..b1c8d750 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_lost_self_update.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:3:621:479 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:3:624:262 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:3:721:546 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:36:3:822:816 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:36:3:824:644 +Q6 finished at: 2023-9-20 21:36:3:824:724 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:3:922:117 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:36:3:925:47 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:3:926:616 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..bf5412f6 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:1:92:366 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:1:95:256 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:1:192:287 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-20 21:36:1:293:559 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:1:492:622 + Q4 finished at: 2023-9-20 21:36:1:492:819 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:1:495:119 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:36:1:498:28 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:1:499:658 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..027b76f9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,60 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:2:769:388 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:36:2:772:156 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:2:869:248 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:36:2:970:589 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:2:972:164 + Q4 finished at: 2023-9-20 21:36:2:972:600 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:2:974:571 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-20 21:36:2:976:887 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:2:978:332 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..c4b810ff --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,59 @@ +#### db_type: mariadb #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:3:195:618 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-20 21:36:3:198:752 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:3:295:732 + Q4-T2 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-20 21:36:3:396:969 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:3:398:562 + Q4 finished at: 2023-9-20 21:36:3:398:870 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:3:400:800 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-20 21:36:3:403:469 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:3:405:20 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..a5bf7c17 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:22:622:38 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:22:623:621 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:22:721:986 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:22:723:766 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:22:823:272 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:22:824:780 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:23:523:978 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..7f34f675 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:23:745:303 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:23:747:229 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:23:844:956 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:23:846:615 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:23:946:285 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:24:45:676 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:24:546:953 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..9724657c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:24:775:78 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:24:776:904 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:24:874:678 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:24:876:463 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:24:975:769 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:25:75:107 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:25:576:567 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..3a31765a --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,35 @@ +#### db_type: mariadb #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:25:803:976 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:25:805:516 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:25:903:836 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:25:905:833 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:26:5:534 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:26:7:269 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:26:706:95 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..a0e99be0 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:26:930:897 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:26:932:919 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:27:31:373 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:27:32:805 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:27:132:199 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:27:232:220 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:27:732:584 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..14dde0b1 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:27:953:947 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-20 21:36:27:956:143 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:28:53:802 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:28:55:778 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:28:155:235 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:28:255:112 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:28:755:652 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d1e4195d --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:28:984:859 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:28:987:26 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:29:84:632 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:29:86:132 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:29:185:985 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:29:286:855 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:29:786:775 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..3b9be082 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:30:18:142 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:30:19:449 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:30:118:707 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:30:120:731 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:30:220:321 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:30:319:464 +Q6 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q6 failed at: 2023-9-20 21:36:30:821:136 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..277d2e78 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,42 @@ +#### db_type: mariadb #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:31:55:497 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:31:57:436 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:31:156:59 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-20 21:36:31:158:723 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q5 finished at: 2023-9-20 21:36:31:257:713 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:31:260:462 +Q7 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q7 failed at: 2023-9-20 21:36:31:958:531 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..a1d8cf2c --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c1.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:32:184:598 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:32:186:521 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:32:284:237 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:32:285:891 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-20 21:36:32:384:374 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:36:32:386:708 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q5 finished at: 2023-9-20 21:36:32:485:837 + Q11-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:32:585:252 + Q11 finished at: 2023-9-20 21:36:32:585:634 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:32:685:830 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:36:33:386:588 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..9a3e110e --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_mda_step_wat_c2.txt @@ -0,0 +1,44 @@ +#### db_type: mariadb #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:33:613:999 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:33:616:56 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:33:713:412 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-20 21:36:33:714:987 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-20 21:36:33:813:689 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-20 21:36:34:15:675 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q6 finished at: 2023-9-20 21:36:34:117:219 + Q10-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-20 21:36:34:214:122 + Q10 finished at: 2023-9-20 21:36:34:214:391 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-20 21:36:34:414:383 +Q9 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 +Q9 failed at: 2023-9-20 21:36:35:17:899 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..a175c9b9 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:18:519:590 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:18:521:602 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:18:619:503 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; + Q4 finished at: 2023-9-20 21:36:18:719:772 +Q5 finished at: 2023-9-20 21:36:18:720:106 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:18:820:161 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:36:18:822:359 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:36:18:826:116 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:18:826:941 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..63bbfef8 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:19:44:645 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:19:45:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:19:145:670 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:36:19:244:882 +Q5 finished at: 2023-9-20 21:36:19:245:33 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-20 21:36:19:345:271 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-20 21:36:19:347:346 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-20 21:36:19:351:249 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:19:352:3 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write.txt new file mode 100644 index 00000000..3f7ca814 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:19:571:884 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:19:573:338 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:19:671:985 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-20 21:36:19:772:701 +Q6-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:36:19:773:625 +Q6 finished at: 2023-9-20 21:36:19:773:971 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-20 21:36:19:872:833 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:36:19:876:257 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:19:877:850 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..ecd83271 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: mariadb #### +#### test_type: sda_full_write_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:20:100:196 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:20:103:234 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:20:199:327 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-20 21:36:20:300:214 +Q7-T1 execute opt: 'COMMIT'; + Q4 finished at: 2023-9-20 21:36:20:301:905 +Q7 finished at: 2023-9-20 21:36:20:302:105 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:20:302:974 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,3) + + Q8 finished at: 2023-9-20 21:36:20:305:933 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:20:307:495 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..152c26fc --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,53 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:22:191:749 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-20 21:36:22:195:839 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:22:290:385 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-20 21:36:22:391:743 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:22:393:786 + Q4 finished at: 2023-9-20 21:36:22:393:826 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-20 21:36:22:396:142 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-20 21:36:22:399:258 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-20 21:36:22:400:778 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..ddeb2660 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c1.txt @@ -0,0 +1,39 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:20:527:222 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:36:20:529:28 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:20:627:128 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-20 21:36:20:727:729 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-20 21:36:20:728:875 + Q4 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q4 failed at: 2023-9-20 21:36:21:128:68 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + diff --git a/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..31fc9954 --- /dev/null +++ b/test_result/centralizend_result/mariadb/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,39 @@ +#### db_type: mariadb #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-20 21:36:21:360:177 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-20 21:36:21:363:449 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-20 21:36:21:459:835 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-20 21:36:21:561:556 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-20 21:36:21:760:829 + Q4 failed reason: [ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction errcode: 40001 + Q4 failed at: 2023-9-20 21:36:21:962:86 + +Test Result: Rollback +Reason: Err:[ma-3.1.7][10.5.22-MariaDB-1:10.5.22+maria~ubu2004]Deadlock found when trying to get lock; try restarting transaction + From 9a1dcec0ebc4d10e8b29bf8506d792fcb4626f38 Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Thu, 21 Sep 2023 15:01:10 +0800 Subject: [PATCH 42/81] add comments and docs --- doc/zh/func_doc.md | 64 ++++++++++++++++ src/dbtest/src/case_cntl.cc | 147 ++++++++++++++++++++++++++++++++++++ src/dbtest/src/case_cntl.h | 24 +++++- src/dbtest/src/common.cc | 28 +++++++ src/dbtest/src/sql_cntl.cc | 140 +++++++++++++++++++++++++++++++++- src/dbtest/src/sql_cntl.h | 22 ++++++ src/dbtest/src/sqltest.cc | 37 +++++++++ src/dbtest/src/sqltest.h | 1 + 8 files changed, 461 insertions(+), 2 deletions(-) create mode 100644 doc/zh/func_doc.md diff --git a/doc/zh/func_doc.md b/doc/zh/func_doc.md new file mode 100644 index 00000000..6eedd136 --- /dev/null +++ b/doc/zh/func_doc.md @@ -0,0 +1,64 @@ +# 功能文档 + +## 代码框架 + +源代码编译运行后会生成三个可执行文件,分别为静态测试文件 `3ts_dbtest`、动态测试 文件 `3ts_dbtest_v2` 和键值数据库测试文件 `3ts_kvtest`,因此可以据此划分并阅读源代码。 + +除核心源代码外,`src` 文件夹还包含一些脚本文件、配置文件和测试用例文件。其中脚 本文件 `auto_test_all.sh` 用于自动化全部测试用例,而 `auto_test.sh` 用于自动化某些测试 用例;配置文件 `CMakeLists.txt` 用于 `CMake` 项目构建;`do_test_list.txt` 包含一些测试用 例文件的列表;`t` 目录包含所有静态测试用例文件。 + +## 总体流程图 + +以静态/动态测试为例,给出如下总体流程图。 + +![image-20230921143844936](./overflow.png) + +## 静态测试 + + 静态测试包含 `33` 个测试用例,其测试文件在 `p` 文件夹下,不需要生成测试文件。源文件包括:`common.cc`、`case_cntl.cc`、`sql_cntl.cc`、`sqltest.cc` 以及对应的头文件,生成的可执行文件名为 `3ts_dbtest`。 + +### 源文件分析: + +- `common.cc` 包含常用的函数和操作,比如将给定的字符串按照分隔符进行分割以及移 除空白字符或者引号字符等; +- `case_cntl.cc` 实现了测试用例控制功能,包含从测试文件中读取数据库配置、`sql` 语句 以及预期结果,验证处理实际结果和预期结果的区别,输出比对结果到指定文件夹等功能; +- `sql_cntl.cc` 涉及 `SQL` 控制或操作的代码。即实现了与 `ODBC` 数据库的接口功能。包 含设置数据库隔离级别、开始事务、执行增删改查等功能、处理 `SQL` 返回值并获取错 误信息、结束事务或回滚事务等功能。 +- `sqltest.cc` 涉及 `SQL` 测试的代码,包含项目的主函数。该文件利用 `gflags` 库来实现命 令行参数解析,采用多线程编程,每个线程负责一组数据库语句的执行,并且通过子 线程不同的休眠时间实现程序代码按指定顺序运行。 + +### 重点类分析: + +`CaseReader` 用于读取和解析测试用例;`TestResultSet` 用于表示测试结果集;`TxnSql` 与事务 `SQL` 操作相关;`TestSequence` 表示测试序列;`ResultHandler` 用 于处理测试结果;`Outputter` 用于格式化和输出测试结果。 + +### 重点函数分析: + + `ExecTestSequence` 用于执行一个指定的测试序列;`ExecAllTestSequence` 利用多线程执行所有测试序列。 + +## 动态测试 + +动态测试需要通过 `python` 脚本文件动态生成测试文件。源文件包括:`common.cc`、`case_cntl_v2.cc`、`sql_cntl_v2.cc`、`sqltest_v2.cc`,生成的可执行文件名为 `3ts_dbtest_v2`。其中 `*_v2.cc` 为对应静态测试文件的另一个版本,大致功能相似。 + +较大的不同为动态测试中测试样例由 `python` 脚本文件生成,包含 `random_do_list.py`、 `mda_detect.py`、`mda_generate.py` 文件。其中 `random_do_list.py` 用于随机生成测试文件 列表;`mda_generate.py` 用于生成指定格式测试样例;`mda_detect.py`: 可能用于检测测试 结果是否出现异常现象。 + +### 源文件分析: + +- `random_do_list.py` 基于预定义的操作集随机生成一系列数据库操作,此外还要确保 生成的操作列表不含任何非法模式。此脚本文件会生成 `do_test_list.txt` 文件,该文件包含不同的测试模式,即具体测试文件列表。 +- `mda_generate.py` 从 `do_test_list.txt` 文件中读取所需的操作模式(例如 `RW-RR` 等), 针对每种操作模式生成一个测试用例文件,该文件包含初始化表、执行事务和验证的 `SQL` 语句。主要目的是为不同的操作模式自动生成数据库测试用例。 +- `mda_detect.py` 主要用于数据库事务的序列化调度检查。即读取事务,并构建一个图, 该图表示事务之间的依赖关系。然后,程序会检查这个图是否存在循环,从而判断事 务调度是否是序列化的。 + +## 键值数据库测试 + + 键值数据库测试源文件包括:`common.cc`、`case_cntl.cc`、`kv_cntl.cc` 和 `kvtest.cc` 文件, 生成的可执行文件名为 `3ts_kvtest`,其中 `kvtest.cc` 涉及键值数据库测试的代码。 + +## 功能扩展 + +即添加其他数据库测试结果,以 `MariaDB` 数据库为例。 + +**数据库连接** 在 `DBConnector` 类中添加 `MariaDB` 的连接代码,需要使用 `MariaDB` 的 `C` `API` 或其他库来实现。此外还需要安装和配置必要的 `MariaDB` 客户端库和头文件,确保它 们能在项目中被正确引用。 + +**配置文件** 重新配置文件来指定数据库连接信息(例如,数据库主机、用户名、密码等),确保添加对 `MariaDB` 相关配置的支持。 + +**`SQL` 语法** 虽然 `MariaDB` 基本上与 `MySQL`兼容,但还是可能存在一些语法上的差异。因此需要确保 `SQL` 语句和查询对 `MariaDB` 兼容。 + +**功能测试** 根据项目的结构和代码,需要在 `CaseReader` 或 `ResultHandler` 类中添加或修改 代码,以处理 `MariaDB` 的特定测试和结果。并且需要考虑添加 `MariaDB` 特有的功能和事务测试。 + +**错误处理** 更新错误处理代码以处理 `MariaDB` 特定的错误和异常。 + +**文档说明** 更新项目的 `README` 或其他文档,添加关于如何配置和运行针对 `MariaDB` 的 测试的说明。 \ No newline at end of file diff --git a/src/dbtest/src/case_cntl.cc b/src/dbtest/src/case_cntl.cc index 15157c47..f7def54d 100644 --- a/src/dbtest/src/case_cntl.cc +++ b/src/dbtest/src/case_cntl.cc @@ -12,6 +12,17 @@ Outputter outputter; ResultHandler result_handler; +/** + * Parses a given line to extract the execution order ID, transaction ID, and SQL statement. + * + * The function expects the input line to be formatted with dashes ("-") separating the + * execution order ID, the transaction ID, and the SQL statement. If the format is not met, + * an error message is displayed. The function then returns a vector containing the extracted elements. + * + * @param line The input string containing the execution order ID, transaction ID, and SQL statement. + * @return A vector of strings where the first element is the execution order ID, + * the second is the transaction ID, and the third is the SQL statement. + */ std::vector CaseReader::TxnIdAndSql(const std::string& line) { std::vector txn_id_and_sql; const auto index_first = line.find("-"); @@ -28,6 +39,23 @@ std::vector CaseReader::TxnIdAndSql(const std::string& line) { return txn_id_and_sql; } +/** + * Parses a given line to extract the SQL ID and its expected result. + * + * The function expects the input line to be formatted with a dash ("-") separating the + * SQL ID from the result. The result can be a space-separated list of values. The function + * will then return a pair where the first element is the SQL ID (as an integer) and the + * second element is the enhanced result string. Each value in the result is enclosed within + * parentheses, except for 'null' values. + * + * For example, given a line "9-0,1 1,1", the function will return a pair with 9 as the SQL ID + * and "(0,1) (1,1)" as the result. + * + * If the format is not met or there's an issue with the SQL ID, an appropriate message is displayed. + * + * @param line The input string containing the SQL ID and its expected result. + * @return A pair where the first element is the SQL ID and the second is the enhanced result string. + */ std::pair CaseReader::SqlIdAndResult(const std::string& line) { std::pair sql_id_and_result; const auto index = line.find("-"); @@ -61,11 +89,43 @@ std::pair CaseReader::SqlIdAndResult(const std::string& line) return sql_id_and_result; } +/** + * Extracts the isolation level from the given line. + * + * The function expects the input line to contain an isolation level followed by + * a curly brace "{" character. It will extract and return everything before the + * curly brace as the isolation level. + * + * For example, given a line "serializable{...}", the function will return "serializable". + * + * @param line The input string containing the isolation level and subsequent data enclosed within curly braces. + * @return The extracted isolation level from the input string. + */ std::string CaseReader::Isolation(const std::string& line) { const auto index = line.find("{"); return line.substr(0, index - 1); } +/** + * Parses the provided test file to extract both test sequences and their corresponding expected results. + * + * The function reads through the test file line by line to identify SQL transactions, their expected results, + * and additional information like the isolation level and parameter numbers. It constructs two main data structures: + * a TestSequence which represents the sequence of transactions, and a TestResultSet which represents the set + * of expected results for each transaction in the sequence. + * + * @param test_file Path to the test file to be read. + * @param db_type Database type identifier. + * + * Expected Format: + * - The file may contain lines starting with "#" which are treated as comments and ignored. + * - A line with "ParamNum" is used to set the number of parameters for the test sequence. + * - The isolation level is expected to be present in a line that contains a "{" character. + * - Each transaction's SQL and its expected result are parsed from lines without "{" or "}". + * - Each result row is defined between lines with "{" and "}". + * + * @return A pair containing the extracted TestSequence and TestResultSet from the test file. + */ std::pair CaseReader::TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type) { std::pair test_sequence_and_result_set; std::ifstream test_stream(test_file); @@ -87,9 +147,11 @@ std::pair CaseReader::TestSequenceAndTestResultSetF auto index_left = line.find("{"); auto index_right = line.find("}"); auto index_anno = line.find("#"); + // Skip comment lines (those starting with #) if (index_anno != line.npos) { continue; } + // Retrieve and set the parameter count (if the line contains "ParamNum") if (index_table_type != line.npos) { auto start = line.find(":"); std::string param_num_str = ""; @@ -158,6 +220,20 @@ std::pair CaseReader::TestSequenceAndTestResultSetF return test_sequence_and_result_set; } +/** + * Initializes the lists of TestSequence and TestResultSet List based on a provided test path and database type. + * + * The function starts by reading the "do_test_list.txt" file. Each line in this file should represent + * a test case. The function will then, for each test case, retrieve the respective test sequence and + * test result set by reading the corresponding file named ".txt" located in the provided test path. + * + * Lines in the "do_test_list.txt" file starting with a '#' are considered comments and are skipped. + * If the required test file for a test case is successfully read and parsed, a success message is printed. + * + * @param test_path The path to the directory containing the test files. + * @param db_type The type of the database being tested (e.g., "MySQL"). + * @return true if the initialization is successful, false if the "do_test_list.txt" file is not found. + */ bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type) { std::cout << dash + "read test sequence and test result set start" + dash << std::endl; std::ifstream do_test_stream("./do_test_list.txt"); @@ -188,6 +264,19 @@ bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_pa } } +/** + * Compares the current SQL result with the expected SQL result. + * + * The function checks if the given current result (cur_result) matches the expected result (expected_result) for a specific SQL query. + * The comparison is done element-wise for each entry in the result vectors. If any entry is different, or the sizes of the two vectors + * differ, the function returns false, indicating the results are not as expected. Otherwise, it returns true. + * + * @param cur_result A vector containing the current SQL query result. + * @param expected_result A vector containing the expected SQL query result. + * @param sql_id The ID of the SQL statement being compared. + * @param sql The actual SQL statement string (currently not used in the function). + * @return true if the current result matches the expected result, false otherwise. + */ bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql) { if (cur_result.size() != expected_result.size()) { //std::cout << "stmt_id:" << sql_id << " The number of data is different, cur_result:" << cur_result.size() << " expected_result: " << expected_result.size() << std::endl; @@ -204,6 +293,21 @@ bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std return true; } +/** + * Compares the current test result with a set of expected test results. + * + * The function checks if the given current test result (cur_result) matches any of the expected results in the provided list of expected result sets. + * For each expected result set, it iteratively compares the results of individual SQL queries. If all queries' results in the current result match those + * in one of the expected result sets, the function returns true. If no such matching expected result set is found, it returns false. + * + * The function also appends the matching result information to a file specified by test_process_file. + * + * @param cur_result An unordered_map containing the current test results, where the key is the SQL ID and the value is the corresponding result vector. + * @param expected_result_set_list A vector containing multiple unordered_maps. Each unordered_map represents expected results for various SQL queries. + * @param sql_map An unordered_map associating each SQL ID with its actual SQL statement string. + * @param test_process_file The name of the file where matching result information will be appended. + * @return true if the current test result matches any of the expected result sets, false otherwise. + */ bool ResultHandler::IsTestExpectedResult(std::unordered_map>& cur_result, std::vector>> expected_result_set_list, std::unordered_map sql_map, const std::string& test_process_file) { @@ -233,6 +337,16 @@ bool ResultHandler::IsTestExpectedResult(std::unordered_map test_result_set_list, const std::string& ret_file) { std::ofstream out(ret_file); for (auto& test_result_set : test_result_set_list) { @@ -244,9 +358,26 @@ void Outputter::WriteResultTotal(std::vector test_result_set_list out.close(); } +/** + * Compares the current SQL result to a set of expected results, and outputs the comparison to both the console and a file. + * + * For each transaction or session, the function uses session_id to create a string "blank" which acts as an indentation for the output. + * The current SQL result and its corresponding expected results are then printed and written to the specified file, + * with the results that match being indicated with an asterisk (*) prefix. + * + * @param cur_result A vector containing the current SQL result. + * @param expected_result_set_list A vector of unordered maps, each representing a set of expected results indexed by SQL ID. + * @param sql_id The unique identifier for the SQL statement. + * @param sql The actual SQL statement string. + * @param session_id The identifier for the current session or transaction, used for output formatting. + * @param test_process_file The path to the file where results should be written. + * + * @return True if the results are successfully written to the file, otherwise false (e.g., if the file is not found). + */ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, std::vector>> expected_result_set_list, const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file) { + // blank ensures that each transaction or session has its specific indentation. std::string blank(blank_base*(session_id - 1), ' '); std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { @@ -295,6 +426,14 @@ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, } } +/** + * Appends the given test case type to a specified file. + * The test case type is formatted with dashes before and after it. + * + * @param test_case_type The type of the test case to be written. + * @param test_process_file The file to which the test case type will be appended. + * @return Returns true if the write operation is successful; otherwise returns false. + */ bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { @@ -306,6 +445,14 @@ bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const } } +/** + * Appends the given result type to a specified file. + * The result type is prefixed with "Test Result:" for clarity. + * + * @param result_type The result type to be written. + * @param test_process_file The file to which the result type will be appended. + * @return Returns true if the write operation is successful; otherwise returns false. + */ bool Outputter::WriteResultType(const std::string& result_type, const std::string& test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { diff --git a/src/dbtest/src/case_cntl.h b/src/dbtest/src/case_cntl.h index 7b4e0e80..8dd50a80 100644 --- a/src/dbtest/src/case_cntl.h +++ b/src/dbtest/src/case_cntl.h @@ -12,9 +12,13 @@ class TestResultSet { private: + // Type of the test cases std::string test_case_type_; + // Transaction isolation level std::string isolation_; + // Test result type std::string result_type_; + // Expected result set list std::vector>> expected_result_set_list_; public: TestResultSet() {}; @@ -38,9 +42,13 @@ class TestResultSet { // The sql with txn_id in test case class TxnSql { private: + // Transaction ID int txn_id_; + // ID of the SQL statement int sql_id_; + // SQL statement std::string sql_; + // Type of the test case std::string test_case_type_; public: TxnSql(const int sql_id, const int txn_id, const std::string& sql, @@ -56,9 +64,11 @@ class TxnSql { // TestSequence->exception test case, include a series of TxnSql class TestSequence { private: - // such as mysql_dirty-read + // Type of the test cases, such as mysql_dirty-read std::string test_case_type_; + // List of test sequences std::vector txn_sql_list_; + // The number of columns in the result set. int param_num_; public: TestSequence() {}; @@ -75,7 +85,9 @@ class TestSequence { //read and parse sql from file class CaseReader { private: + // Store test sequences read from the file std::vector test_sequence_list_; + // Store the expected test results read from the file std::vector test_result_set_list_; public: bool InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type); @@ -89,17 +101,23 @@ class CaseReader { std::pair TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type); + // Parse execution order ID, transaction ID and SQL from the given line std::vector TxnIdAndSql(const std::string& line); + // Parse SQL ID and result from the given line std::pair SqlIdAndResult(const std::string& line); + // Parse isolation level from the given line std::string Isolation(const std::string& line); std::vector TestSequenceList() {return test_sequence_list_;}; std::vector TestResultSetList() {return test_result_set_list_;}; }; +// Process and validate the expected test results class ResultHandler { public: + // Compare the current result of a single SQL query with its expected result bool IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql); + // Verify if the current result set of SQL queries matches any of the expected results in the result set list bool IsTestExpectedResult(std::unordered_map>& cur_result, std::vector>> expected_result_set_list, std::unordered_map sql_map, const std::string& test_process_file); @@ -107,12 +125,16 @@ class ResultHandler { class Outputter { public: + // Write the overall test results to the specified file void WriteResultTotal(std::vector test_result_set_list, const std::string& ret_file); + // Print the results of the transaction SQL bool PrintAndWriteTxnSqlResult(std::vector cur_result, std::vector>> expected_result_set_list, const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file); + // Write the test case type to the specified file bool WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file); + // Write the result type to the specified file bool WriteResultType(const std::string& result_type, const std::string& test_process_file); }; diff --git a/src/dbtest/src/common.cc b/src/dbtest/src/common.cc index 8bb55db9..8fa6f07d 100644 --- a/src/dbtest/src/common.cc +++ b/src/dbtest/src/common.cc @@ -12,15 +12,43 @@ std::string dash(10, '-'); int blank_base = 40; +/** + * Removes all trailing whitespace characters from the given string str. + * + * This function aims to remove all whitespace characters such as spaces, tabs, enters, etc., from the given string str. + * It utilizes the remove_if function, which moves all non-whitespace characters to the front of the string and then returns an iterator pointing to the first removed element. + * Subsequently, the erase function is used to delete all characters starting from that iterator to the end of the string. + * + * @param str The string from which trailing whitespace characters are to be removed. + */ void TrimSpace(std::string& str) { auto itor = remove_if(str.begin(), str.end(), ::isspace); str.erase(itor, str.end()); } +/** + * Removes all double quote (") characters from the given string str. + * + * This function is designed to remove all occurrences of the double quote character from the specified string str. + * + * @param str The string from which the double quote characters are to be removed. + */ void TrimQuo(std::string& str) { str.erase(std::remove(str.begin(), str.end(), '\"'), str.end()); } +/** + * Splits the given string str by the delimiter delim and stores the results in the tokens vector. + * + * This function aims to split the specified string str based on the delimiter delim. The resulting substrings are then + * stored in the tokens vector. Initially, the tokens vector is cleared to ensure no pre-existing data remains. + * To achieve the splitting, the function uses two iterators, start and position, which cycle through the string + * to identify and extract substrings separated by the delimiter. These substrings are then appended to the tokens vector. + * + * @param str The string to be split. + * @param tokens A vector to hold the split substrings. + * @param delim The delimiter used for splitting the string. + */ void split(const std::string& str, std::vector& tokens, const std::string delim) { tokens.clear(); auto start = str.find_first_not_of(delim, 0); diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 124245fe..8f46ec00 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -14,6 +14,11 @@ #include #include +/** + * Get the current date and time in the format: "YYYY-MM-DD HH:MM:SS.mmmuuunnn" + * + * @return A string representing the current date and time. + */ std::string get_current_time(){ // date @@ -49,6 +54,14 @@ std::string get_current_time(){ } +/** + * Replace all occurrences of a substring 'from' with another substring 'to' in a given string. + * + * @param str The input string in which replacements will be made. + * @param from The substring to search for and replace. + * @param to The replacement substring. + * @return True if at least one replacement was made, false otherwise. + */ bool replace(std::string& str, const std::string& from, const std::string& to) { size_t start_pos = str.find(from); if(start_pos == std::string::npos) @@ -57,12 +70,27 @@ bool replace(std::string& str, const std::string& from, const std::string& to) { return true; } +/** + * Convert a SQLCHAR pointer to a C-style string and then to a C++ string. + * + * @param ch A pointer to a SQLCHAR character array. + * @return A C++ string containing the converted value from SQLCHAR. + */ std::string SQLCHARToStr(SQLCHAR* ch) { char* ch_char = (char*)ch; std::string ch_str = ch_char; return ch_str; } +/** + * Retrieves error information from an ODBC handle (either a statement or a database connection) + * and stores it in the provided arrays. + * + * @param handle_type A string indicating the handle type. It can be "stmt" (for statement handle) or "dbc" (for database connection handle). + * @param handle The specific handle, which can be either a statement handle or a database connection handle depending on handle_type. + * @param ErrInfo A SQLCHAR array to store the retrieved error information. + * @param SQLState A SQLCHAR array to store the retrieved SQL state. + */ // handle_type: stmt and dbc void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { SQLINTEGER NativeErrorPtr = 0; @@ -75,13 +103,28 @@ void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQ } } +/** + * Processes the return value of an SQL execution and retrieves error information from the handle if necessary. + * + * @param session_id The current session ID. + * @param sql_id The ID of the SQL statement. + * @param sql The SQL statement to execute. + * @param handle_type The type of handle, which can be "stmt" or "dbc". + * @param handle The specific ODBC handle (either a statement or a database connection). + * @param ret The return value of the SQL function. + * @param test_process_file The name of the file used to record the test process. + * @return An empty string if SQL execution is successful or has additional info. Otherwise, an error message is returned. + */ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); std::string blank(blank_base*(session_id - 1), ' '); + // SQL_SUCCESS or SQL_SUCCESS_WITH_INFO: Indicates successful execution or success with additional info. Function returns an empty string. if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { return ""; } + // SQL_ERROR: Indicates an error occurred. The function calls ErrInfoWithStmt to retrieve error information from the handle, + // then processes and returns the error information. else if (ret == SQL_ERROR) { SQLCHAR ErrInfo[256]; SQLCHAR SQLState[256]; @@ -113,6 +156,7 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st } return err_info; + // Other statuses like SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_NO_DATA, etc. have specific messages associated with them. } else if (ret == SQL_NEED_DATA) { std::cout << blank + "SQL_NEED_DATA" << std::endl; test_process << blank + "SQL_NEED_DATA" << std::endl; @@ -140,11 +184,22 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st } } +/** + * Executes a write SQL statement and handles errors if they occur. + * + * @param sql_id The ID of the SQL statement. + * @param sql The SQL statement to execute. + * @param test_result_set The test result set to update. + * @param session_id The session ID. + * @param test_process_file The name of the file used to record the test process. + * @return True if the SQL execution is successful, false otherwise. + */ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int session_id, std::string test_process_file) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + // Allocate a statement handle: Allocate a new statement handle for the database connection using SQLAllocHandle function. ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { @@ -155,6 +210,7 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet return false; } // execute sql + // Adjust SQL statement: If sql_id is not 1024, replace "rollback" with "ROLLBACK" and print the executed SQL statement. if (sql_id != 1024) { std::string sql1 = std::regex_replace(sql, std::regex("rollback"), "ROLLBACK"); std::string blank(blank_base*(session_id - 1), ' '); @@ -201,15 +257,30 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } +/** + * Executes a read SQL statement and handles the results. + * + * @param sql_id The ID of the SQL statement. + * @param sql The SQL statement to execute. + * @param test_result_set The test result set to update. + * @param cur_result_set The current query result set. + * @param session_id The session ID. + * @param param_num The number of columns in the result set. + * @param test_process_file The name of the file used to record the test process. + * @return True if the SQL execution is successful, false otherwise. + */ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int session_id, int param_num, std::string test_process_file) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + // Get the expected result set list from test_result_set std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + // Allocate a statement handle: Allocate a new statement handle for the database connection using SQLAllocHandle function. ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + // Check if allocating a statement handle was successful. If it fails, release the handle and return false. std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; @@ -227,12 +298,15 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_info << std::endl; } + // Execute the SQL statement using SQLExecDirect function ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); // parse result std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if(err_info_sql.empty()) { // bind column data + // If SQL execution is successful, bind column data and fetch the next row. + // It will convert each row's data into string form and store it in cur_result_set. for (int i = 0; i < param_num; i++) { SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); } @@ -261,6 +335,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult if (is_no_data) { cur_result_set[sql_id].push_back("null"); } + // Output the result: Compare the current query result with the expected result set list + // using the outputter object and output the information. outputter.PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, session_id, test_process_file); if (sql_id != 1024 && sql_id !=0) { std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; @@ -272,6 +348,9 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { + // Handle errors: If SQL execution fails, check if the error message contains "timeout". + // If yes, set the result type of test_result_set to "Timeout". + // Otherwise, set the result type to "Rollback" and include the relevant error message. SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); @@ -294,6 +373,17 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult } } +/** + * Executes a transaction end operation (commit, rollback, or custom) based on the given option and database type. + * + * @param opt The operation, such as "commit" or "rollback". + * @param session_id The current session ID. + * @param sql_id The ID of the SQL statement. + * @param test_result_set The result set object that may contain expected results or other test-related information. + * @param db_type The database type, such as "oracle", "sqlserver", "ob", etc. + * @param test_process_file The name of the file used to record the test process. + * @return True if the operation is successful, false otherwise. + */ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { if (sql_id != 1024) { std::string blank(blank_base*(session_id - 1), ' '); @@ -314,11 +404,14 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes test_process << output_info << std::endl; } } + // Non-Oracle database handling: If db_type is not "oracle", the function will use the SQLEndTran function of ODBC to perform transaction end operations. if (db_type != "oracle") { SQLRETURN ret; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + // If the operation is "commit," perform a commit. if ("commit" == opt) { ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); + // If the operation is "rollback" and the database type is not "crdb," perform a rollback. Otherwise, execute the rollback SQL command specific to "crdb." } else if ("rollback" == opt) { if (db_type != "crdb"){ ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); @@ -333,6 +426,7 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes std::cout << "unknow txn opt" << std::endl; } + // Afterward, the function calls SqlExecuteErr to handle possible errors. std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, opt, "dbc", m_hDatabaseConnection, ret, test_process_file); if (!err_info_sql.empty()) { if (test_result_set.ResultType().empty()) { @@ -349,6 +443,7 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes test_process << output_time_info << std::endl; } } + // Oracle database handling: If db_type is "oracle," directly execute the provided opt SQL command. } else { TestResultSet test_result_set; if (!DBConnector::ExecWriteSql(1024, opt, test_result_set, session_id, test_process_file)) { @@ -358,9 +453,18 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes return true; } +/** + * Starts a transaction for the given session and logs the transaction start in the test process file. + * + * @param session_id The current session ID. + * @param sql_id ID of the SQL statement. + * @param test_process_file Filename to record the test process. + * @return True if the transaction start is successful, false otherwise. + */ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_process_file) { SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; std::ofstream test_process(test_process_file, std::ios::app); + // To start a transaction, the function calls DBConnector::SetAutoCommit with the value 0, which means it turns off the auto-commit mode for the database connection. Turning off auto-commit mode means that any changes made during the transaction are not committed until explicitly requested. If the function fails to turn off auto-commit mode, it logs an error message and returns false. if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { std::string blank(blank_base*(session_id - 1), ' '); std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " begin failed"; @@ -387,6 +491,13 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce } } +/** + * Sets the auto-commit mode for the given database connection. + * + * @param m_hDatabaseConnection The database connection handle. + * @param opt 0 to disable auto-commit, 1 to enable it. + * @return True if the auto-commit mode is successfully set, false otherwise. + */ bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { SQLRETURN ret; SQLUINTEGER autoCommit; @@ -403,11 +514,22 @@ bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { return true; } +/** + * Sets the timeout for a database connection. + * + * @param conn_id The ID of the database connection. + * @param timeout The timeout value in seconds. + * @param db_type The type of the database, e.g., "sqlserver" or "ob". + * @return True if the timeout is successfully set, false otherwise. + */ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string& db_type) { std::string sql = "" ; if (db_type == "sqlserver") { + // Note that there are three additional zeros after the timeout value + // This is because SQL Server's timeout is in milliseconds sql = "SET LOCK_TIMEOUT " + timeout + "000" + ";"; } else if (db_type == "ob") { + // If the database type is "ob" (OceanBase), use OceanBase's ob_trx_timeout to set the timeout sql = "set session ob_trx_timeout=" + timeout + "000000;"; } if (!sql.empty()) { @@ -420,8 +542,21 @@ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string return true; } +/** + * Sets the transaction isolation level for the database based on the given option. + * + * @param m_hDatabaseConnection The database connection handle. + * @param opt The transaction isolation level to be set. + * @param session_id The current session's ID. + * @param db_type The database type. + * @param test_process_file The filename to record the test process. + * @return True if the isolation level is successfully set, false otherwise. + */ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { - // for ob oracle mode + // For non-Oracle and OB databases: + // Set the transaction isolation level based on the 'opt' value (e.g., "read-uncommitted," "read-committed," "repeatable-read," etc.) + // Use SQLSetConnectAttr method to set the appropriate transaction isolation level. + // "snapshot" and "rcsnapshot" options require additional SQL commands to be executed for specific isolation levels. if (db_type != "oracle" && db_type != "ob") { // for ob mysql mode // if (db_type != "oracle") { @@ -465,6 +600,9 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o return false; } } + // For Oracle or OB databases: + // Construct an SQL command to set the transaction isolation level based on the 'opt' value, + // and execute it using ExecWriteSql. else { std::string iso; if (opt == "read-committed") { diff --git a/src/dbtest/src/sql_cntl.h b/src/dbtest/src/sql_cntl.h index 5e58ed4a..153cc989 100644 --- a/src/dbtest/src/sql_cntl.h +++ b/src/dbtest/src/sql_cntl.h @@ -16,33 +16,41 @@ //db connector class DBConnector { private: + // Each SQLHDBC is a handle for a single database connection. std::vector conn_pool_; public: + // Initializes the database connector, stablishes a specified number of database connections and adds them to the connection pool. bool InitDBConnector(std::string& user, std::string& passwd, std::string& db_type, int conn_pool_size) { for (int i = 0; i < (int)conn_pool_size; i++) { + // Initializes the ODBC environment handle m_hEnviroment. SQLHENV m_hEnviroment; SQLHDBC m_hDatabaseConnection; SQLRETURN ret; // get env + // Allocates the ODBC environment handle using SQLAllocHandle. ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { std::cerr << "get env failed" << std::endl; return false; } + // Sets the ODBC version to ODBC 3.0. SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); // get conn + // Allocates the ODBC connection handle m_hDatabaseConnection using SQLAllocHandle. ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { std::cerr << "get conn failed" << std::endl; return false; } // connect + // Connects to the database using SQLConnect. ret = SQLConnect(m_hDatabaseConnection, (SQLCHAR*)db_type.c_str(), SQL_NTS, (SQLCHAR*)user.c_str(), SQL_NTS, (SQLCHAR*)passwd.c_str(), SQL_NTS); + // Checks the success of the database connection using the SqlExecuteErr method. std::string err_info_stmt = DBConnector::SqlExecuteErr(1, 1024, "connnected", "dbc", m_hDatabaseConnection, ret); if (err_info_stmt != "") { return false; @@ -52,27 +60,40 @@ class DBConnector { std::cerr << "connected failed" << std::endl; return false; }*/ + // Releases the environment handle m_hEnvironment SQLFreeHandle( SQL_HANDLE_ENV, m_hEnviroment); + // Adds the database connection handle m_hDatabaseConnection to the connection pool. conn_pool_.push_back(m_hDatabaseConnection); } std::cout << "init db_connector success" << std::endl; return true; }; + // Set the auto-commit mode for the database connection. bool SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt); + // Set a timeout for a specific database connection. bool SetTimeout(int conn_id, std::string timeout, const std::string& db_type); + // Execute an SQL statement for reading and store the result as an integer. bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int conn_id, int param_num, std::string test_process_file=""); + // Execute an SQL statement for writing bool ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id, std::string test_process_file=""); + // Get error information using the SQL statement handle. void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]); + // Return the database connection pool. std::vector DBConnPool() {return conn_pool_;}; + // Get error information when executing an SQL statement. std::string SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file=""); + // End the transaction. bool SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file=""); + // Begin a transaction. bool SQLStartTxn(int session_id, int sql_id, std::string test_process_file=""); + // Set the isolation level of the database connection. bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id, const std::string& db_type, std::string test_process_file=""); + // Release all database connections in the connection pool. void ReleaseConn() { for (int i = 0; i < (int)conn_pool_.size(); i++) { if (conn_pool_[i]){ @@ -81,6 +102,7 @@ class DBConnector { } } }; + // Release environment resources. void ReleaseEnv(); void Release() { ReleaseConn(); diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index aa196ee7..36673d5d 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -15,6 +15,7 @@ #include #include +// 基于Google's gflags库来实现命令行参数解析 DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); @@ -27,6 +28,14 @@ DEFINE_string(timeout, "20", "timeout"); // std::vector mutex_txn(5); // same as conn_pool_size std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size +/** + * Tries to lock the specified mutex within the given timeout. + * + * @param wait_second The timeout in seconds. + * @param wait_nanosecond The timeout in nanoseconds. + * @param txn_id The transaction ID. + * @return True if the lock is acquired within the timeout, false otherwise. + */ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) { struct timespec timeoutTime; @@ -36,6 +45,18 @@ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) } +/** + * Executes multiple SQL transactions in a multi-threaded environment. + * + * @param txn_sql_list The list of transaction SQL to execute. + * @param test_sequence Represents the test sequence object. + * @param test_result_set Represents the expected test result set object. + * @param db_connector The object used for database interactions. + * @param test_process_file The file for logging or recording the test process. + * @param cur_result_set A map to store the current result set. + * @param sleeptime The sleep time between transaction executions. Note: Different threads may have different sleep times to stagger their execution. + * @return True if the transactions are executed successfully, false otherwise. + */ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ @@ -45,6 +66,7 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ std::ofstream test_process(test_process_file, std::ios::app); int txn_id; + // If txn_sql_list is not empty, attempt to acquire a mutex lock associated with the current transaction ID. if (txn_sql_list.size() && txn_sql_list[0].TxnId()){ txn_id = txn_sql_list[0].TxnId(); pthread_mutex_lock(mutex_txn[txn_id]); @@ -63,6 +85,7 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ return false; } + // Iterate through each transaction SQL in txn_sql_list. for (auto& txn_sql : txn_sql_list) { // for test purpose @@ -217,10 +240,20 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ }; +/** + * Executes a series of database test transactions and writes the results to a file. + * + * @param test_sequence A TestSequence object containing a series of database transactions to execute. + * @param test_result_set A TestResultSet object used to store test results. + * @param db_connector A DBConnector object providing database connectivity. + * @return True if the transactions are executed successfully, false otherwise. + */ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + // Define the path and name of the test result file. std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + ".txt"; // std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; std::cout << test_process_file << std::endl; + // Open an output file stream named "test_process" for writing test process information. std::ifstream test_process_tmp(test_process_file); if (test_process_tmp) { std::remove(test_process_file.c_str()); @@ -231,6 +264,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t std::cout << "create test_process_file failed" << std::endl; } + // Print the database type and isolation level to both the file and the console. test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; @@ -260,6 +294,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t test_process << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl; } + // Get the list of transaction SQLs from test_sequence. std::vector txn_sql_list = test_sequence.TxnSqlList(); std::cout << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; test_process << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; @@ -281,6 +316,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // std::cout << " SQLID: " << txn_sql_list[0].SqlId() << " TXNID: " << txn_sql_list[0].TxnId() << " SQL: " << txn_sql_list[0].Sql() << std::endl; int txn_id_old; int thread_cnt = 0; + // Group transactions based on SQL ID and transaction ID. for (auto& txn_sql : txn_sql_list) { // split into anther group if (txn_sql.SqlId() == 1 || txn_sql.TxnId() != txn_id_old){ @@ -305,6 +341,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t split_groups.push_back(group); thread_cnt = thread_cnt + 1; + // Special handling for "crdb" database type. if (FLAGS_db_type == "crdb"){ // remove non transaction commit // remove the first commit at the prepraration diff --git a/src/dbtest/src/sqltest.h b/src/dbtest/src/sqltest.h index eaf0d8fa..3a73f11a 100644 --- a/src/dbtest/src/sqltest.h +++ b/src/dbtest/src/sqltest.h @@ -9,6 +9,7 @@ * */ #include "sql_cntl.h" +// Executor class for managing and executing test sequences. class JobExecutor { public: bool ExecAllTestSequence(std::vector test_sequence_list); From cdbb0309813da74aac93bd95bc073ed2cf73b09d Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Thu, 21 Sep 2023 15:05:18 +0800 Subject: [PATCH 43/81] Add comments and docs --- assets/overflow.png | Bin 0 -> 55581 bytes doc/zh/func_doc.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/overflow.png diff --git a/assets/overflow.png b/assets/overflow.png new file mode 100644 index 0000000000000000000000000000000000000000..900f4b53da2a0ad993c725cbb310589fe3731864 GIT binary patch literal 55581 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 r-vZKz0#zI1KYgMH00sX4*~LK Date: Fri, 22 Sep 2023 16:57:35 +0800 Subject: [PATCH 44/81] added comments for dynamic testing --- src/dbtest/src/case_cntl_v2.cc | 158 ++++++++++++++ src/dbtest/src/mda_detect.py | 318 +++++++++++++++++++++++++++ src/dbtest/src/mda_generate.py | 362 +++++++++++++++++++++++++++++++ src/dbtest/src/odbc.cc | 18 ++ src/dbtest/src/random_do_list.py | 26 ++- src/dbtest/src/sql_cntl_v2.cc | 179 ++++++++++++++- src/dbtest/src/sqltest.cc | 2 +- src/dbtest/src/sqltest_v2.cc | 28 +++ 8 files changed, 1083 insertions(+), 8 deletions(-) diff --git a/src/dbtest/src/case_cntl_v2.cc b/src/dbtest/src/case_cntl_v2.cc index 0a95e567..6ad0dd51 100644 --- a/src/dbtest/src/case_cntl_v2.cc +++ b/src/dbtest/src/case_cntl_v2.cc @@ -13,6 +13,19 @@ Outputter outputter; ResultHandler result_handler; +/** + * Parses a given line to extract the execution order ID, transaction ID, and SQL statement. + * + * The function expects the input line to be formatted with dashes ("-") separating the + * execution order ID, the transaction ID, and the SQL statement. If the format is not met, + * an error message is displayed. The function then returns a vector containing the extracted elements. + * + * @param line The input string containing the execution order ID, transaction ID, and SQL statement. + * @return A vector of strings where the first element is the execution order ID, + * the second is the transaction ID, and the third is the SQL statement. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ std::vector CaseReader::TxnIdAndSql(const std::string& line) { std::vector txn_id_and_sql; const auto index_first = line.find("-"); @@ -29,6 +42,25 @@ std::vector CaseReader::TxnIdAndSql(const std::string& line) { return txn_id_and_sql; } +/** + * Parses a given line to extract the SQL ID and its expected result. + * + * The function expects the input line to be formatted with a dash ("-") separating the + * SQL ID from the result. The result can be a space-separated list of values. The function + * will then return a pair where the first element is the SQL ID (as an integer) and the + * second element is the enhanced result string. Each value in the result is enclosed within + * parentheses, except for 'null' values. + * + * For example, given a line "9-0,1 1,1", the function will return a pair with 9 as the SQL ID + * and "(0,1) (1,1)" as the result. + * + * If the format is not met or there's an issue with the SQL ID, an appropriate message is displayed. + * + * @param line The input string containing the SQL ID and its expected result. + * @return A pair where the first element is the SQL ID and the second is the enhanced result string. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ std::pair CaseReader::SqlIdAndResult(const std::string& line) { std::pair sql_id_and_result; const auto index = line.find("-"); @@ -62,11 +94,38 @@ std::pair CaseReader::SqlIdAndResult(const std::string& line) return sql_id_and_result; } +/** + * Extracts the isolation level from the given line. + * + * The function expects the input line to contain an isolation level followed by + * a curly brace "{" character. It will extract and return everything before the + * curly brace as the isolation level. + * + * For example, given a line "serializable{...}", the function will return "serializable". + * + * @param line The input string containing the isolation level and subsequent data enclosed within curly braces. + * @return The extracted isolation level from the input string. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ std::string CaseReader::Isolation(const std::string& line) { const auto index = line.find("{"); return line.substr(0, index - 1); } +/** + * Reads a test file and extracts the test sequence and result set. + * + * This function reads a test file, parses its contents, and extracts the test sequence + * and result set information. It then returns a pair containing the test sequence and result set. + * + * @param test_file The path to the test file to be read. + * @param db_type The type of the database being tested (e.g., MySQL, PostgreSQL). + * @return A pair containing the extracted test sequence and result set. + * + * @note The code is different from the corresponding function in case_cntl.cc. + * Since the dynamic test file doesn't provide expected results, reading them has been canceled. + */ std::pair CaseReader::TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type) { std::pair test_sequence_and_result_set; std::ifstream test_stream(test_file); @@ -128,6 +187,22 @@ std::pair CaseReader::TestSequenceAndTestResultSetF return test_sequence_and_result_set; } +/** + * Initializes the lists of TestSequence and TestResultSet List based on a provided test path and database type. + * + * The function starts by reading the "do_test_list.txt" file. Each line in this file should represent + * a test case. The function will then, for each test case, retrieve the respective test sequence and + * test result set by reading the corresponding file named ".txt" located in the provided test path. + * + * Lines in the "do_test_list.txt" file starting with a '#' are considered comments and are skipped. + * If the required test file for a test case is successfully read and parsed, a success message is printed. + * + * @param test_path The path to the directory containing the test files. + * @param db_type The type of the database being tested (e.g., "MySQL"). + * @return true if the initialization is successful, false if the "do_test_list.txt" file is not found. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type) { std::cout << dash + "read test sequence and test result set start" + dash << std::endl; std::ifstream do_test_stream("./do_test_list.txt"); @@ -158,6 +233,21 @@ bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_pa } } +/** + * Compares the current SQL result with the expected SQL result. + * + * The function checks if the given current result (cur_result) matches the expected result (expected_result) for a specific SQL query. + * The comparison is done element-wise for each entry in the result vectors. If any entry is different, or the sizes of the two vectors + * differ, the function returns false, indicating the results are not as expected. Otherwise, it returns true. + * + * @param cur_result A vector containing the current SQL query result. + * @param expected_result A vector containing the expected SQL query result. + * @param sql_id The ID of the SQL statement being compared. + * @param sql The actual SQL statement string (currently not used in the function). + * @return true if the current result matches the expected result, false otherwise. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql) { if (cur_result.size() != expected_result.size()) { //std::cout << "stmt_id:" << sql_id << " The number of data is different, cur_result:" << cur_result.size() << " expected_result: " << expected_result.size() << std::endl; @@ -174,6 +264,23 @@ bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std return true; } +/** + * Compares the current test result with a set of expected test results. + * + * The function checks if the given current test result (cur_result) matches any of the expected results in the provided list of expected result sets. + * For each expected result set, it iteratively compares the results of individual SQL queries. If all queries' results in the current result match those + * in one of the expected result sets, the function returns true. If no such matching expected result set is found, it returns false. + * + * The function also appends the matching result information to a file specified by test_process_file. + * + * @param cur_result An unordered_map containing the current test results, where the key is the SQL ID and the value is the corresponding result vector. + * @param expected_result_set_list A vector containing multiple unordered_maps. Each unordered_map represents expected results for various SQL queries. + * @param sql_map An unordered_map associating each SQL ID with its actual SQL statement string. + * @param test_process_file The name of the file where matching result information will be appended. + * @return true if the current test result matches any of the expected result sets, false otherwise. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ bool ResultHandler::IsTestExpectedResult(std::unordered_map>& cur_result, std::vector>> expected_result_set_list, std::unordered_map sql_map, const std::string& test_process_file) { @@ -203,6 +310,18 @@ bool ResultHandler::IsTestExpectedResult(std::unordered_map test_result_set_list, const std::string& ret_file) { std::ofstream out(ret_file); for (auto& test_result_set : test_result_set_list) { @@ -214,6 +333,25 @@ void Outputter::WriteResultTotal(std::vector test_result_set_list out.close(); } +/** + * Prints and writes the transaction SQL result. + * + * This function takes a set of parameters and performs the following actions: + * - Creates a formatted output string. + * - Appends the output to a test process file. + * - Prints the output to the console. + * - Checks for expected results and logs them. + * + * @param cur_result The current result to be printed and logged. + * @param expected_result_set_list A list of expected result sets. + * @param sql_id The SQL ID associated with the result. + * @param sql The SQL query. + * @param session_id The session ID for the transaction. + * @param test_process_file The file where test process logs are written. + * @return True if the operation is successful, otherwise false. + * + * @note The code is different from the corresponding function in case_cntl.cc. + */ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, std::vector>> expected_result_set_list, const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file) { @@ -262,6 +400,16 @@ bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, } } +/** + * Appends the given test case type to a specified file. + * The test case type is formatted with dashes before and after it. + * + * @param test_case_type The type of the test case to be written. + * @param test_process_file The file to which the test case type will be appended. + * @return Returns true if the write operation is successful; otherwise returns false. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { @@ -273,6 +421,16 @@ bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const } } +/** + * Appends the given result type to a specified file. + * The result type is prefixed with "Test Result:" for clarity. + * + * @param result_type The result type to be written. + * @param test_process_file The file to which the result type will be appended. + * @return Returns true if the write operation is successful; otherwise returns false. + * + * @note The code is the same as the corresponding function in case_cntl.cc. + */ bool Outputter::WriteResultType(const std::string& result_type, const std::string& test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); if (test_process) { diff --git a/src/dbtest/src/mda_detect.py b/src/dbtest/src/mda_detect.py index 74abdc99..982361ea 100644 --- a/src/dbtest/src/mda_detect.py +++ b/src/dbtest/src/mda_detect.py @@ -34,7 +34,15 @@ def __init__(self): self.begin_ts = -1 self.end_ts = 99999999999999999999 +""" +Find the total variable number. +Args: +- lines (list): A list of queries. + +Returns: +int: The maximum variable number found in the queries. +""" # find total variable number def get_total(lines): num = 0 @@ -49,6 +57,16 @@ def get_total(lines): return num +""" +Extract the data we need from a query. + +Args: +- query (str): The input query string. +- target (str): The target substring to search for. + +Returns: +int: The extracted data value, or -1 if not found. +""" # extract the data we need in query def find_data(query, target): pos = query.find(target) @@ -67,6 +85,20 @@ def find_data(query, target): return data_value +""" +When a statement is executed, this function sets the end time, modifies the transaction list, +and updates the version list as needed. + +Args: +- op_time (int): The operation time of the statement. +- data_op_list (list): A list of data operations. +- query (str): The query string containing information about the statement execution. +- txn (list): A list of transaction objects. +- version_list (list): A list of version lists for data operations. + +Returns: +None +""" # when a statement is executed, set the end time and modify the version list def set_finish_time(op_time, data_op_list, query, txn, version_list): pos = query.find("finishedat:") @@ -103,6 +135,17 @@ def set_finish_time(op_time, data_op_list, query, txn, version_list): op.value = len(version_list[i]) - 1 +""" +Check if two transactions are concurrent based on their start and end times. + +Args: +- data1: Information about the first transaction. +- data2: Information about the second transaction. +- txn: A list of transaction objects. + +Returns: +bool: True if the transactions are concurrent, False otherwise. +""" # if both transactions are running # or the start time of the second transaction is less than the end time of the first transaction # we think they are concurrent @@ -115,6 +158,20 @@ def check_concurrency(data1, data2, txn): return False +""" +Determine the type of edge between two operations based on their read or write versions. + +Args: +- data1: Information about the first operation. +- data2: Information about the second operation. +- txn: A list of transaction objects. + +Returns: +tuple: A tuple containing three values: + - A string indicating the edge type ('R', 'W', 'CR', 'CW'). + - Information about the operation that comes first. + - Information about the operation that comes second. +""" # decide which operation comes first depending on the read or write version # if later operation happened after the first txn commit time, edge type will add "C" def get_edge_type(data1, data2, txn): @@ -134,6 +191,22 @@ def get_edge_type(data1, data2, txn): return before.op_type + state + after.op_type, before, after +""" +Build a directed graph representing the concurrency relationships between operations. + +Args: +- data_op_list: A list of lists, where each inner list contains information about operations for a specific transaction. +- indegree: A list representing the in-degrees of each operation node in the graph. +- edge: A list representing the edges (concurrency relationships) between operations. +- txn: A list of transaction objects. + +This function constructs a directed graph where nodes represent operations, and edges represent concurrency relationships +between operations. It iterates through the list of operations for each transaction and calls the 'insert_edge' function +to create edges in the graph based on concurrency relationships. + +Returns: +None +""" def build_graph(data_op_list, indegree, edge, txn): for list1 in data_op_list: for i, data in enumerate(list1): @@ -141,6 +214,25 @@ def build_graph(data_op_list, indegree, edge, txn): insert_edge(list1[j], data, indegree, edge, txn) +""" +Insert an edge into the directed graph representing concurrency relationships between operations. + +Args: +- data1: An operation object representing the first operation. +- data2: An operation object representing the second operation. +- indegree: A list representing the in-degrees of each transaction in the graph. +- edge: A list representing the edges (concurrency relationships) between operations for each transaction. +- txn: A list of transaction objects. + +This function inserts an edge into the directed graph to represent the concurrency relationship between 'data1' and 'data2'. +It first checks if the two operations are concurrent by calling the 'check_concurrency' function. If they are concurrent, it +determines the edge type using the 'get_edge_type' function and adds the edge to the 'edge' list. + +The 'indegree' list is updated to reflect the in-degree of the target transaction node when an edge is inserted. + +Returns: +None +""" def insert_edge(data1, data2, indegree, edge, txn): if check_concurrency(data1, data2, txn): edge_type, data1, data2 = get_edge_type(data1, data2, txn) @@ -149,12 +241,42 @@ def insert_edge(data1, data2, indegree, edge, txn): edge[data1.txn_num].append(Edge(edge_type, data2.txn_num)) +""" +Initialize a record in the version list based on the information in the query. + +Args: +- query: A query string that contains information about a record. +- version_list: A list of lists representing versioned records. + +This function initializes a record in the 'version_list' based on the information provided in the 'query'. It extracts the 'key' +and 'value' of the record from the query using the 'find_data' function and appends the 'value' to the corresponding version list. + +Returns: +None +""" def init_record(query, version_list): key = find_data(query, "(") value = find_data(query, ",") version_list[key].append(value) +""" +Read the versioned record based on the information in the query. + +Args: +- query (str): A query string that contains information about reading a versioned record. +- op_time (int): The operation time of the read operation. +- data_op_list (list): A list of lists representing data operations. +- version_list (list): A list of lists representing versioned records. + +This function reads the versioned record specified in the 'query'. It extracts the 'key' and 'value' from the query, which are +used to identify the record and version to read. The function checks if the specified version exists in the version list and +updates the 'op.value' accordingly. If the version doesn't exist or if the read operation is not successful, an error message +is returned. + +Returns: +str: An error message indicating the result of the read operation. An empty string means the read was successful. +""" def readVersion_record(query, op_time, data_op_list, version_list): error_message = "" data = query.split(")") @@ -201,6 +323,27 @@ def readVersion_record(query, op_time, data_op_list, version_list): +""" +Read records based on the information in the query and update data operations. + +Args: +- op_time (int): The operation time of the read operation. +- txn_num (int): The transaction number. +- total_num (int): The total number of records. +- txn (list): A list of transactions. +- data_op_list (list): A list of lists representing data operations. + +This function reads records specified in the query and updates the 'data_op_list' accordingly. It extracts information from +the 'query' to determine which records to read and what type of operation to perform (read or predicate). The function also +sets the 'begin_ts' of the transaction if it's not already set. + +The 'query' is analyzed to identify specific record keys or predicates and create corresponding 'Operation' objects in the +'data_op_list'. Depending on the structure of the query, this function handles various cases, such as reading single records, +handling predicates, and selecting all rows in a table. + +Returns: +None +""" def read_record(op_time, txn_num, total_num, txn, data_op_list): if txn[txn_num].begin_ts == -1: txn[txn_num].begin_ts = op_time @@ -229,6 +372,24 @@ def read_record(op_time, txn_num, total_num, txn, data_op_list): data_op_list[i].append(Operation("R", txn_num, op_time, i)) +""" +Write records based on the information in the query and update data operations. + +Args: +- op_time (int): The operation time of the write operation. +- txn_num (int): The transaction number. +- txn (list): A list of transactions. +- data_op_list (list): A list of lists representing data operations. + +This function writes records specified in the query and updates the 'data_op_list' accordingly. It extracts information from the +'query' to determine which records to write and what type of operation to perform (write). The function also sets the 'begin_ts' +of the transaction if it's not already set. + +The 'query' is analyzed to identify specific record keys and values, and it creates corresponding 'Operation' objects in the 'data_op_list'. + +Returns: +None +""" def write_record(op_time, txn_num, txn, data_op_list): if txn[txn_num].begin_ts == -1: txn[txn_num].begin_ts = op_time @@ -242,6 +403,24 @@ def write_record(op_time, txn_num, txn, data_op_list): data_op_list[op_data].append(Operation("W", txn_num, op_time, op_value)) +""" +Delete records based on the information in the query and update data operations. + +Args: +- op_time (int): The operation time of the delete operation. +- txn_num (int): The transaction number. +- txn (list): A list of transactions. +- data_op_list (list): A list of lists representing data operations. + +This function deletes records specified in the query and updates the 'data_op_list' accordingly. It extracts information from the +'query' to determine which records to delete and what type of operation to perform (delete). The function also sets the 'begin_ts' +of the transaction if it's not already set. + +The 'query' is analyzed to identify specific record keys, and it creates corresponding 'Operation' objects in the 'data_op_list'. + +Returns: +None +""" def delete_record(op_time, txn_num, txn, data_op_list): if txn[txn_num].begin_ts == -1: txn[txn_num].begin_ts = op_time @@ -253,6 +432,25 @@ def delete_record(op_time, txn_num, txn, data_op_list): data_op_list[op_data].append(Operation("D", txn_num, op_time, op_data)) +""" +Insert records based on the information in the query and update data operations. + +Args: +- op_time (int): The operation time of the insert operation. +- txn_num (int): The transaction number. +- txn (list): A list of transactions. +- data_op_list (list): A list of lists representing data operations. + +This function inserts records specified in the query and updates the 'data_op_list' accordingly. It extracts information from the +'query' to determine which records to insert and what type of operation to perform (insert). The function also sets the 'begin_ts' +of the transaction if it's not already set. + +The 'query' is analyzed to identify specific record keys and their corresponding values, and it creates corresponding 'Operation' +objects in the 'data_op_list'. + +Returns: +None +""" def insert_record(op_time, txn_num, txn, data_op_list): if txn[txn_num].begin_ts == -1 and op_time != 0: txn[txn_num].begin_ts = op_time @@ -261,10 +459,40 @@ def insert_record(op_time, txn_num, txn, data_op_list): data_op_list[key].append(Operation("I", txn_num, op_time, value)) +""" +Set the end timestamp for a transaction. + +Args: +- op_time (int): The operation time when the transaction ends. +- txn_num (int): The transaction number. +- txn (list): A list of transactions. + +This function sets the 'end_ts' attribute of a transaction specified by 'txn_num' to the given 'op_time'. It marks the end of the +transaction's execution. + +Returns: +None +""" def end_record(op_time, txn_num, txn): txn[txn_num].end_ts = op_time +""" +Record and process database operations. + +Args: +- total_num (int): The total number of database operations. +- query (str): The SQL query representing a database operation. +- txn (list): A list of transactions. +- data_op_list (list): A list of data operations. +- version_list (list): A list of version information for data operations. + +This function records and processes database operations based on the provided SQL query. It updates the transaction list, data +operation list, and version list accordingly. The 'total_num' parameter specifies the total number of database operations. + +Returns: +str: An error message (if any), or an empty string if the operation is successful. +""" def operation_record(total_num, query, txn, data_op_list, version_list): error_message = "" op_time = find_data(query, "Q") @@ -300,6 +528,18 @@ def operation_record(total_num, query, txn, data_op_list, version_list): +""" +Remove unfinished operations from the data operation list. + +Args: +- data_op_list (list): A list of data operations. + +This function iterates through the data operation list and removes any unfinished operations based on their operation time. +Unfinished operations are those with an operation time less than 10,000,000. + +Returns: +None +""" # remove failed statements to prevent redundant edges from being built def remove_unfinished_operation(data_op_list): for list1 in data_op_list: @@ -307,6 +547,20 @@ def remove_unfinished_operation(data_op_list): if op.op_time < 10000000: list1.pop(i) +""" +Check for cycles in a directed graph using topological sorting. + +Args: +- edge (List[List[Edge]]): A list representing the directed edges in the graph. +- indegree (List[int]): A list representing the in-degrees of nodes in the graph. +- total (int): The total number of nodes in the graph. + +This function checks for cycles in a directed graph by performing topological sorting. It takes as input the directed edges (`edge`), +in-degrees of nodes (`indegree`), and the total number of nodes in the graph (`total`). + +Returns: +bool: True if a cycle is detected, False otherwise. +""" # toposort to determine whether there is a cycle def check_cycle(edge, indegree, total): q = Queue.Queue() @@ -326,6 +580,25 @@ def check_cycle(edge, indegree, total): return True +""" +Perform depth-first search (DFS) to find and print loops in a directed graph. + +Args: +- result_folder (str): The path to the folder where the results will be saved. +- ts_now (str): The current timestamp or identifier for result file naming. +- now (int): The current node being visited. +- type (str): The type of edge leading to the current node ('C' for commit, 'R' for read, 'W' for write, etc.). + +This function performs depth-first search (DFS) to find and print loops in a directed graph. It takes as input the result folder +path (`result_folder`), the current timestamp or identifier for result file naming (`ts_now`), the current node being visited (`now`), +and the type of edge leading to the current node (`type`). + +The function recursively explores the graph, tracking the visited nodes and edges to detect loops. When a loop is found, it is printed +to a result file in the specified result folder. + +Note: This function assumes that global variables like 'visit', 'visit1', 'path', 'edge_type', and 'edge' are defined elsewhere. + +""" # for loop graphs, print the loop def dfs(result_folder, ts_now, now, type): visit1[now] = 1 @@ -351,6 +624,21 @@ def dfs(result_folder, ts_now, now, type): visit[now] = 0 +""" +Print the paths in a directed graph to a result file. + +Args: +- result_folder (str): The path to the folder where the results will be saved. +- ts_now (str): The current timestamp or identifier for result file naming. +- edge (list of lists): A list of lists representing the directed edges in the graph. + +This function prints the paths in a directed graph to a result file. It takes as input the result folder path (`result_folder`), +the current timestamp or identifier for result file naming (`ts_now`), and a list of lists (`edge`) representing the directed edges +in the graph. + +The function iterates through the edges and writes the paths to the result file in the specified result folder. + +""" def print_path(result_folder, ts_now, edge): with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: flag = 0 @@ -364,11 +652,41 @@ def print_path(result_folder, ts_now, edge): f.write("\n\n") +""" +Output the result of cycle detection to a result file. + +Args: +- file (str): The name of the file or input source being analyzed. +- result_folder (str): The path to the folder where the results will be saved. +- ts_now (str): The current timestamp or identifier for result file naming. +- IsCyclic (str): A string indicating whether a cycle was detected. + +This function outputs the result of cycle detection to a result file. It takes as input the name of the file or input source being +analyzed (`file`), the result folder path (`result_folder`), the current timestamp or identifier for result file naming (`ts_now`), +and a string (`IsCyclic`) indicating whether a cycle was detected. + +The function writes the result, including the file name and the cyclic status, to the specified result file in the result folder. + +""" def output_result(file, result_folder, ts_now, IsCyclic): with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: f.write(file + ": " + IsCyclic + "\n") +""" +Print an error message to a result file. + +Args: +- result_folder (str): The path to the folder where the results will be saved. +- ts_now (str): The current timestamp or identifier for result file naming. +- error_message (str): The error message to be printed. + +This function prints an error message to a result file. It takes as input the result folder path (`result_folder`), the current +timestamp or identifier for result file naming (`ts_now`), and the error message (`error_message`) to be printed. + +The function appends the error message to the specified result file in the result folder and adds a newline for separation. + +""" def print_error(result_folder, ts_now, error_message): with open(result_folder + "/check_result" + ts_now + ".txt", "a+") as f: f.write(error_message + "\n") diff --git a/src/dbtest/src/mda_generate.py b/src/dbtest/src/mda_generate.py index 5f1b558d..c10768a7 100644 --- a/src/dbtest/src/mda_generate.py +++ b/src/dbtest/src/mda_generate.py @@ -37,6 +37,29 @@ def __init__(self, op_type, txn_num, op_num): self.op_num = op_num +""" +Initialize tables for database testing. + +Args: +- file_name (str): The name of the file where the SQL statements will be written. +- sql_count (int): The count of SQL statements to generate. +- txn_count (int): The count of transactions. +- table_num (int): The number of tables to create. +- db_type (str): The type of database being used. +- test_type (str): The type of test being conducted. + +Returns: +int: The data_num value, which depends on the database type and determines the number of data columns in each table. + +This function initializes tables for database testing by generating SQL statements and writing them to the specified +file (`file_name`). The SQL statements include DROP TABLE IF EXISTS and CREATE TABLE statements for the specified +number of tables (`table_num`). + +The function takes into account the `db_type` and `test_type` to determine the structure of the created tables and +the number of data columns. It returns the `data_num` value, which is an integer that depends on the database type +and determines the number of data columns in each table. + +""" def init_table(file_name, sql_count, txn_count, table_num, db_type, test_type): data_num = 2 with open(file_name, "a+") as file_test: @@ -75,6 +98,17 @@ def init_table(file_name, sql_count, txn_count, table_num, db_type, test_type): return data_num +""" +Check if two transactions are concurrent based on their start and end times. + +Args: +- data1: Information about the first transaction. +- data2: Information about the second transaction. +- txn: A list of transaction objects. + +Returns: +bool: True if the transactions are concurrent, False otherwise. +""" # if both transactions are running # or the start time of the second transaction is less than the end time of the first transaction # we think they are concurrent @@ -87,6 +121,27 @@ def check_concurrency(txn_num1, txn_num2, txn): return False +""" +Check if a specific operation type exists in a transaction. + +Args: +- txn (list): The list of transactions. +- data_op_list (list): The list of data operations. +- op (str): The operation type to check for. +- op_num (int): The operation number to check. +- txn_count (int): The total number of transactions. + +Returns: +bool: True if the specified operation type exists in the transaction and is concurrent; False otherwise. + +This function checks if a specific operation type (`op`) exists in a transaction (`txn`) by examining +the list of data operations (`data_op_list`) associated with that operation number (`op_num`). If the +specified operation type exists in the transaction and is concurrent with other transactions, the +function returns True; otherwise, it returns False. + +The function is designed to help identify and handle concurrent operations in a transactional context. + +""" def check_exist_op(txn, data_op_list, op, op_num, txn_count): flag, txn_num = False, 0 for data in data_op_list[op_num]: @@ -100,6 +155,41 @@ def check_exist_op(txn, data_op_list, op, op_num, txn_count): return False +""" +Execute an SQL operation within a transaction. + +Args: +- IsPredicate (bool): A flag indicating whether the operation is a predicate operation. +- file_name (str): The name of the file to write the SQL operation to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- op_num (int): The operation number. +- op (str): The type of SQL operation to execute. +- data_num (int): The number of data elements involved in the operation. +- txn (list): The list of transactions. +- data_value (list): The values associated with the data elements. +- data_op_list (list): The list of data operations. + +Returns: +int: The updated count of SQL operations after execution. + +This function executes an SQL operation within a transaction context. It takes into account whether the +operation is a predicate operation (IsPredicate flag) and writes the SQL operation to the specified file. +The function also updates the SQL operation count and performs the necessary actions based on the type of +SQL operation. + +The supported SQL operations include: +- Write (W) +- Read (R) +- Predicate (P) +- Insert (I) +- Delete (D) +- Abort (A) +- Commit (C) + +The function returns the updated count of SQL operations after execution. + +""" def execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op, data_num, txn, data_value, data_op_list): # if check_exist_op(txn, data_op_list, op, op_num, txn_count): # return sql_count @@ -127,6 +217,30 @@ def execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op, data_n return sql_count +""" +Insert data into a table within a transaction. + +Args: +- file_name (str): The name of the file to write the SQL insert statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- cur_count (int): The current count for data insertion. +- partition_num (int): The partition number for the insert operation. +- insert_table (int): The table number to insert data into. +- data_num (int): The number of data elements to insert. +- exist (list): A list of flags indicating the existence of data elements. +- data_value (list): The values associated with the data elements. + +Returns: +int: The updated count of SQL operations after the insert. + +This function inserts data into a table within a transaction context. It generates an SQL insert statement +based on the provided parameters and writes the statement to the specified file. The function also updates +the SQL operation count and manages the existence of data elements to prevent duplicate inserts. + +The function returns the updated count of SQL operations after the insert. + +""" def insert_data(file_name, sql_count, txn_count, cur_count, partition_num, insert_table, data_num, exist, data_value): with open(file_name, "a+") as file_test: @@ -161,6 +275,31 @@ def insert_data(file_name, sql_count, txn_count, cur_count, partition_num, inser return sql_count +""" +Delete data from a table within a transaction. + +Args: +- file_name (str): The name of the file to write the SQL delete statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- cur_count (int): The current count for data deletion. +- delete_table (int): The table number to delete data from. +- data_num (int): The number of data elements to delete. +- exist (list): A list of flags indicating the existence of data elements. +- txn (list): A list of transactions. +- data_op_list (list): A list of data operation records. + +Returns: +int: The updated count of SQL operations after the delete. + +This function deletes data from a table within a transaction context. It generates an SQL delete statement +based on the provided parameters and writes the statement to the specified file. The function also updates +the SQL operation count, manages the existence of data elements, and records the delete operation in the +data operation list. + +The function returns the updated count of SQL operations after the delete. + +""" def delete_data(file_name, sql_count, txn_count, cur_count, delete_table, data_num, exist, txn, data_op_list): with open(file_name, "a+") as file_test: try: @@ -187,6 +326,30 @@ def delete_data(file_name, sql_count, txn_count, cur_count, delete_table, data_n return sql_count +""" +Write data to a table within a transaction, incrementing its value by 1. + +Args: +- file_name (str): The name of the file to write the SQL update statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- op_num (int): The current operation number. +- data_num (int): The number of data elements to write. +- txn (list): A list of transactions. +- data_value (list): A list of data values. +- data_op_list (list): A list of data operation records. + +Returns: +int: The updated count of SQL operations after the write. + +This function writes data to a table within a transaction context, incrementing its value by 1. It generates +an SQL update statement based on the provided parameters and writes the statement to the specified file. +The function also updates the SQL operation count, increments the data value, and records the write operation +in the data operation list. + +The function returns the updated count of SQL operations after the write. + +""" # when updating data, increment its value by 1 def write_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_value, data_op_list): with open(file_name, "a+") as file_test: @@ -216,6 +379,28 @@ def write_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_valu return sql_count +""" +Read data from a table within a transaction. + +Args: +- file_name (str): The name of the file to write the SQL read statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- op_num (int): The current operation number. +- data_num (int): The number of data elements to read. +- txn (list): A list of transactions. +- data_op_list (list): A list of data operation records. + +Returns: +int: The updated count of SQL operations after the read. + +This function reads data from a table within a transaction context. It generates an SQL select statement +based on the provided parameters and writes the statement to the specified file. The function also updates +the SQL operation count and records the read operation in the data operation list. + +The function returns the updated count of SQL operations after the read. + +""" def read_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list): with open(file_name, "a+") as file_test: try: @@ -241,6 +426,28 @@ def read_data(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_li return sql_count +""" +Read data from a table with a predicate (range condition) within a transaction. + +Args: +- file_name (str): The name of the file to write the SQL read statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- op_num (int): The current operation number. +- data_num (int): The number of data elements to read. +- txn (list): A list of transactions. +- data_op_list (list): A list of data operation records. + +Returns: +int: The updated count of SQL operations after the read. + +This function reads data from a table within a transaction context with a predicate (range condition). It generates +an SQL select statement based on the provided parameters and writes the statement to the specified file. +The function also updates the SQL operation count and records the read operation in the data operation list. + +The function returns the updated count of SQL operations after the read. + +""" def read_data_predicate(file_name, sql_count, txn_count, op_num, data_num, txn, data_op_list): with open(file_name, "a+") as file_test: try: @@ -266,6 +473,25 @@ def read_data_predicate(file_name, sql_count, txn_count, op_num, data_num, txn, return sql_count +""" +Abort (rollback) a transaction. + +Args: +- file_name (str): The name of the file to write the SQL rollback statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- txn (list): A list of transactions. + +Returns: +int: The updated count of SQL operations after the rollback. + +This function aborts (rolls back) a transaction by generating an SQL rollback statement based on the provided +parameters and writes the statement to the specified file. It updates the SQL operation count and marks the +transaction as ended. If the transaction has already ended, it logs an error message. + +The function returns the updated count of SQL operations after the rollback. + +""" def abort_txn(file_name, sql_count, txn_count, txn): with open(file_name, "a+") as file_test: try: @@ -281,6 +507,25 @@ def abort_txn(file_name, sql_count, txn_count, txn): return sql_count +""" +Commit a transaction. + +Args: +- file_name (str): The name of the file to write the SQL commit statement to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- txn (list): A list of transactions. + +Returns: +int: The updated count of SQL operations after the commit. + +This function commits a transaction by generating an SQL commit statement based on the provided parameters and +writes the statement to the specified file. It updates the SQL operation count and marks the transaction as ended. +If the transaction has already ended, it logs an error message. + +The function returns the updated count of SQL operations after the commit. + +""" def commit_txn(file_name, sql_count, txn_count, txn): with open(file_name, "a+") as file_test: try: @@ -296,6 +541,21 @@ def commit_txn(file_name, sql_count, txn_count, txn): return sql_count +""" +Execute a check transaction to read data from tables and order the results. + +Args: +- file_name (str): The name of the file to write SQL statements to. +- sql_count (int): The current count of SQL operations. +- txn_count (int): The total number of transactions. +- data_num (int): The number of data columns in each table. +- table_num (int): The total number of tables. + +This function generates and executes a check transaction. It begins the transaction, performs ordered SELECT +queries on all tables to read data, and then commits the transaction. The generated SQL statements are written +to the specified file. + +""" def execute_check(file_name, sql_count, txn_count, data_num, table_num): with open(file_name, "a+") as file_test: begin_sql = str(sql_count) + "-" + str(txn_count) + "-" + "BEGIN;\n" @@ -313,6 +573,22 @@ def execute_check(file_name, sql_count, txn_count, data_num, table_num): file_test.write(commit_sql) sql_count += 1 +""" +Check the last operation before the current position in a list of operations. + +Args: +- ops (list): A list of operations. +- pos (int): The current position in the list. + +Returns: +- last_op_type (str): The type of the last operation before the current position. +- last_txn_num (int): The transaction number of the last operation before the current position. + +This function examines the list of operations and checks the last operation that occurred before the current position. +It returns the type of that operation (e.g., "C" for commit, "A" for abort, or a specific operation type) and the +corresponding transaction number. + +""" # check if the txn commit/abort before or not def get_last_op(ops, pos): if pos == 0: @@ -322,6 +598,30 @@ def get_last_op(ops, pos): else: return ops[pos-1][1], int(ops[pos-1][2]) +""" +Process the first operation of a Partial Order Pair (POP) for a given transaction. + +Args: +- IsPredicate (bool): Indicates whether the operation is a predicate operation. +- num (int): The number of operations in the POP. +- ops (list): A list of operations in the POP. +- file_name (str): The name of the file where SQL queries are logged. +- sql_count (int): The current count of SQL queries. +- txn_count (int): The current transaction count. +- data_num (int): The number of data parameters. +- txn (list): A list of transactions. +- data_value (list): A list of data values. +- data_op_list (list): A list of data operations. + +Returns: +- sql_count (int): The updated count of SQL queries after processing the first operation of the POP. + +This function processes the first operation of a Partial Order Pair (POP) for a given transaction. It checks whether +the last operation before the current operation has the same type and number. If not, it executes the SQL query for +the current operation, updates the SQL query count, and advances the transaction count. The function returns the +updated SQL query count. + +""" # process first operation of a POP def execute_first(IsPredicate, num, ops, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list): for i in range(num): @@ -340,6 +640,31 @@ def execute_first(IsPredicate, num, ops, file_name, sql_count, txn_count, data_n if txn_count == num + 1: txn_count = 1 return sql_count +""" +Process the second operation of a Partial Order Pair (POP) for a given transaction. + +Args: +- IsPredicate (bool): Indicates whether the operation is a predicate operation. +- num (int): The number of operations in the POP. +- ops (list): A list of operations in the POP. +- need_ac (list): A list indicating whether each operation requires an "AC" (Abort or Commit) operation. +- file_name (str): The name of the file where SQL queries are logged. +- sql_count (int): The current count of SQL queries. +- txn_count (int): The current transaction count. +- data_num (int): The number of data parameters. +- txn (list): A list of transactions. +- data_value (list): A list of data values. +- data_op_list (list): A list of data operations. + +Returns: +- sql_count (int): The updated count of SQL queries after processing the second operation of the POP. + +This function processes the second operation of a Partial Order Pair (POP) for a given transaction. It iterates +through the list of operations, executes the SQL queries for each operation, updates the SQL query count, and +advances the transaction count. If an operation requires an "AC" (Abort or Commit) operation, it is also executed. +The function returns the updated SQL query count. + +""" # process second operation of a POP def execute_second(IsPredicate, num, ops, need_ac, file_name, sql_count, txn_count, data_num, txn, data_value, data_op_list): for i in range(num): @@ -360,6 +685,30 @@ def execute_second(IsPredicate, num, ops, need_ac, file_name, sql_count, txn_cou return sql_count +""" +Execute a transaction considering the order of operations for conflict resolution. + +Args: +- IsPredicate (bool): Indicates whether the operation is a predicate operation. +- num (int): The number of operations in the transaction. +- ops (list): A list of operations in the transaction. +- need_ac (list): A list indicating whether each operation requires an "AC" (Abort or Commit) operation. +- file_name (str): The name of the file where SQL queries are logged. +- sql_count (int): The current count of SQL queries. +- data_num (int): The number of data parameters. +- txn (list): A list of transactions. +- data_value (list): A list of data values. +- wait_op_list (list): A list of wait operations. +- data_op_list (list): A list of data operations. + +Returns: +- sql_count (int): The updated count of SQL queries after executing the transaction. + +This function executes a transaction while considering the order of operations for conflict resolution. +It iterates through the list of operations, executes SQL queries, and manages the execution order to +resolve conflicts. The function returns the updated SQL query count. + +""" # if the data of adjacent pattern operations are not the same, # reorder statements so that conflict-free statements execute first # otherwise, execute in the original order @@ -427,6 +776,19 @@ def execute_txn(IsPredicate, num, ops, need_ac, file_name, sql_count, data_num, return sql_count +""" +Write a description for the test case to the specified file. + +Args: +- file_name (str): The name of the file where the description will be written. +- txn_num (int): The number of transactions. +- op_num (int): The number of operations. +- data_num (int): The number of data parameters. + +This function writes a description for the test case to the specified file. The description includes +information about the test case pattern, parameters, and structure. + +""" def write_description(file_name, txn_num, op_num, data_num): with open(file_name, "w+") as file_test: description = "#\n" diff --git a/src/dbtest/src/odbc.cc b/src/dbtest/src/odbc.cc index fafb5ecc..fbf2afd5 100644 --- a/src/dbtest/src/odbc.cc +++ b/src/dbtest/src/odbc.cc @@ -3,6 +3,14 @@ #include #include +/** + * Retrieves error information associated with a SQL handle. + * + * @param handle_type The type of SQL handle ('stmt' for statement handle or 'dbc' for database connection handle). + * @param handle The SQL handle to retrieve error information from. + * @param ErrInfo A buffer to store the error message. + * @param SQLState A buffer to store the SQL state code. + */ void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { SQLINTEGER NativeErrorPtr = 0; SQLSMALLINT TextLengthPtr = 0; @@ -14,6 +22,16 @@ void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo } } +/** + * Executes an SQL query and retrieves results. + * + * This function initializes the ODBC environment, establishes a database connection, + * allocates a statement handle, and executes an SQL query. It can be used to interact + * with a database and retrieve data. + * + * @note To execute specific SQL queries, you can uncomment the relevant lines + * within the function. + */ void exec_sql() { SQLHENV m_hEnviroment; SQLHDBC m_hDatabaseConnection; diff --git a/src/dbtest/src/random_do_list.py b/src/dbtest/src/random_do_list.py index 473d5283..f044368c 100644 --- a/src/dbtest/src/random_do_list.py +++ b/src/dbtest/src/random_do_list.py @@ -25,8 +25,18 @@ min_txn = 2 max_txn = 20 -# decide which variable to operate twice -# if data_num = 3, target_num = 5, data_count = [2, 1, 2], means the first and third variables are operated twice +""" +Decide which variable to operate twice. + +Args: +- data_count (list): A list of integers representing the current count of operations for each variable. +- total_num (int): The total number of operations counted so far. +- target_num (int): The target number of operations where some variables should be operated twice. + +This function uses depth-first search (DFS) to explore different combinations of variables to operate twice. +If data_num = 3, target_num = 5, and data_count = [2, 1, 2], it means the first and third variables are operated twice. + +""" def dfs(data_count, total_num, target_num): s = "" for v in data_count: @@ -47,6 +57,18 @@ def dfs(data_count, total_num, target_num): data_count[i] -= 1 +""" +Generate test cases based on the current data_count. + +Args: +- data_count (list): A list of integers representing the current count of operations for each variable. +- res (list): A list to store the generated test case. +- total_num (int): The total number of operations to be generated. + +This function recursively generates test cases based on the given data_count. It explores different +combinations of operations for each variable to create a test case. + +""" # According to now data_count to generate test case def dfs1(data_count, res, total_num): if len(res) == total_num: diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 4940c7c7..44a5ce14 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -14,15 +14,18 @@ #include #include +/** + * Get the current date and time in the format: "YYYY-MM-DD HH:MM:SS.mmmuuunnn" + * + * @return A string representing the current date and time. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ std::string get_current_time(){ // date time_t d = time(0); tm* d_now = std::localtime(&d); - // std::cout << (d_now->tm_year + 1900) << '-' - // << (d_now->tm_mon + 1) << '-' - // << d_now->tm_mday - // << "\n"; // time std::chrono::time_point now = std::chrono::system_clock::now(); @@ -55,6 +58,16 @@ std::string get_current_time(){ } +/** + * Replace all occurrences of a substring 'from' with another substring 'to' in a given string. + * + * @param str The input string in which replacements will be made. + * @param from The substring to search for and replace. + * @param to The replacement substring. + * @return True if at least one replacement was made, false otherwise. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ bool replace(std::string& str, const std::string& from, const std::string& to) { size_t start_pos = str.find(from); if(start_pos == std::string::npos) @@ -63,12 +76,31 @@ bool replace(std::string& str, const std::string& from, const std::string& to) { return true; } +/** + * Convert a SQLCHAR pointer to a C-style string and then to a C++ string. + * + * @param ch A pointer to a SQLCHAR character array. + * @return A C++ string containing the converted value from SQLCHAR. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ std::string SQLCHARToStr(SQLCHAR* ch) { char* ch_char = (char*)ch; std::string ch_str = ch_char; return ch_str; } +/** + * Retrieves error information from an ODBC handle (either a statement or a database connection) + * and stores it in the provided arrays. + * + * @param handle_type A string indicating the handle type. It can be "stmt" (for statement handle) or "dbc" (for database connection handle). + * @param handle The specific handle, which can be either a statement handle or a database connection handle depending on handle_type. + * @param ErrInfo A SQLCHAR array to store the retrieved error information. + * @param SQLState A SQLCHAR array to store the retrieved SQL state. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ // handle_type: stmt and dbc void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { SQLINTEGER NativeErrorPtr = 0; @@ -81,6 +113,26 @@ void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQ } } +/** + * Handles and logs SQL execution errors. + * + * This function takes care of handling SQL execution errors and logging them to an output stream. + * It processes the error code (`ret`) and provides detailed error information when an error occurs. + * Depending on the error type, it logs the error details, including the error message, SQL state, + * and additional information about the query. It also handles specific error conditions differently, + * such as "not exist" errors and "ROLLBACK TRANSACTION" errors. + * + * @param session_id The session ID associated with the SQL query. + * @param sql_id The ID of the SQL query. + * @param sql The SQL query that caused the error. + * @param handle_type The type of ODBC handle (e.g., "stmt" or "dbc"). + * @param handle The ODBC handle associated with the error. + * @param ret The return code from the SQL execution. + * @param test_process_file The output file for logging error information. + * @return A string containing the error information, or an empty string if no error occurred. + * + * @note The code is different from the corresponding function in sql_cntl.cc. + */ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { std::ofstream test_process(test_process_file, std::ios::app); @@ -148,6 +200,24 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st } } +/** + * Executes a write SQL statement and handles potential errors. + * + * This function executes a write SQL statement and handles any potential errors that may occur + * during execution. It allocates an SQL statement handle (`m_hStatement`) and executes the SQL + * statement using ODBC. If an error occurs during execution, it logs the error information, + * including error messages and SQL states. It also checks for specific error conditions, such as + * timeouts and rollbacks, and handles them accordingly. + * + * @param sql_id The ID of the SQL statement. + * @param sql The SQL statement to be executed. + * @param test_result_set The test result set object to update with error information. + * @param session_id The session ID associated with the SQL query. + * @param test_process_file The output file for logging error and execution information. + * @return True if the SQL statement executed successfully, false otherwise. + * + * @note The code is different from the corresponding function in sql_cntl.cc. + */ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int session_id, std::string test_process_file) { SQLRETURN ret; SQLHSTMT m_hStatement; @@ -220,15 +290,32 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } +/** + * Executes a read SQL statement and handles the results. + * + * @param sql_id The ID of the SQL statement. + * @param sql The SQL statement to execute. + * @param test_result_set The test result set to update. + * @param cur_result_set The current query result set. + * @param session_id The session ID. + * @param param_num The number of columns in the result set. + * @param test_process_file The name of the file used to record the test process. + * @return True if the SQL execution is successful, false otherwise. + * + * @note The code is different from the corresponding function in sql_cntl.cc. + */ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int session_id, int param_num, std::string test_process_file) { SQLRETURN ret; SQLHSTMT m_hStatement; SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + // Get the expected result set list from test_result_set std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + // Allocate a statement handle: Allocate a new statement handle for the database connection using SQLAllocHandle function. ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + // Check if allocating a statement handle was successful. If it fails, release the handle and return false. std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; @@ -246,12 +333,15 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_info << std::endl; } + // Execute the SQL statement using SQLExecDirect function ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); // parse result std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if(err_info_sql.empty()) { // bind column data + // If SQL execution is successful, bind column data and fetch the next row. + // It will convert each row's data into string form and store it in cur_result_set. for (int i = 0; i < param_num; i++) { SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); } @@ -280,6 +370,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult if (is_no_data) { cur_result_set[sql_id].push_back("null"); } + // Output the result: Compare the current query result with the expected result set list + // using the outputter object and output the information. outputter.PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, session_id, test_process_file); if (sql_id != 1024 && sql_id !=0) { std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " finished at: " + get_current_time() ; @@ -291,6 +383,9 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { + // Handle errors: If SQL execution fails, check if the error message contains "timeout". + // If yes, set the result type of test_result_set to "Timeout". + // Otherwise, set the result type to "Rollback" and include the relevant error message. SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); @@ -312,6 +407,25 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult } } +/** + * Ends a transaction in the database and handles potential errors. + * + * This function ends a transaction in the database, either by committing or rolling back, and + * handles any potential errors that may occur during the transaction. It logs the transaction + * operation, including whether it's a commit or rollback, and updates the test result set with + * error information if needed. It also checks for specific error conditions, such as timeouts and + * database types (e.g., Oracle), and handles them accordingly. + * + * @param opt The transaction operation, either "commit" or "rollback". + * @param session_id The session ID associated with the transaction. + * @param sql_id The ID of the SQL statement (0 for non-SQL transactions). + * @param test_result_set The test result set object to update with error information. + * @param db_type The type of the database ("oracle", "crdb", etc.). + * @param test_process_file The output file for logging transaction and execution information. + * @return True if the transaction is successful, false otherwise. + * + * @note The code is different from the corresponding function in sql_cntl.cc. + */ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { if (sql_id != 1024) { std::string blank(blank_base*(session_id - 1), ' '); @@ -386,6 +500,21 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes return true; } +/** + * Starts a new transaction in the database and handles potential errors. + * + * This function begins a new transaction in the database, setting the auto-commit mode to off. + * It logs the transaction operation and checks for potential errors, such as failure to begin + * the transaction. If an error occurs, it logs the error and returns false. Otherwise, it returns + * true to indicate a successful transaction start. + * + * @param session_id The session ID associated with the transaction. + * @param sql_id The ID of the SQL statement (0 for non-SQL transactions). + * @param test_process_file The output file for logging transaction and execution information. + * @return True if the transaction starts successfully, false otherwise. + * + * @note The code is different from the corresponding function in sql_cntl.cc. + */ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_process_file) { SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; std::ofstream test_process(test_process_file, std::ios::app); @@ -414,6 +543,15 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce } } +/** + * Sets the auto-commit mode for the given database connection. + * + * @param m_hDatabaseConnection The database connection handle. + * @param opt 0 to disable auto-commit, 1 to enable it. + * @return True if the auto-commit mode is successfully set, false otherwise. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { SQLRETURN ret; SQLUINTEGER autoCommit; @@ -430,11 +568,24 @@ bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { return true; } +/** + * Sets the timeout for a database connection. + * + * @param conn_id The ID of the database connection. + * @param timeout The timeout value in seconds. + * @param db_type The type of the database, e.g., "sqlserver" or "ob". + * @return True if the timeout is successfully set, false otherwise. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string& db_type) { std::string sql = "" ; if (db_type == "sqlserver") { + // Note that there are three additional zeros after the timeout value + // This is because SQL Server's timeout is in milliseconds sql = "SET LOCK_TIMEOUT " + timeout + "000" + ";"; } else if (db_type == "ob") { + // If the database type is "ob" (OceanBase), use OceanBase's ob_trx_timeout to set the timeout sql = "set session ob_trx_timeout=" + timeout + "000000;"; } if (!sql.empty()) { @@ -447,8 +598,23 @@ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string return true; } +/** + * Sets the transaction isolation level for the database based on the given option. + * + * @param m_hDatabaseConnection The database connection handle. + * @param opt The transaction isolation level to be set. + * @param session_id The current session's ID. + * @param db_type The database type. + * @param test_process_file The filename to record the test process. + * @return True if the isolation level is successfully set, false otherwise. + * + * @note The code is the same as the corresponding function in sql_cntl.cc. + */ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { - // oracle mode + // For non-Oracle and OB databases: + // Set the transaction isolation level based on the 'opt' value (e.g., "read-uncommitted," "read-committed," "repeatable-read," etc.) + // Use SQLSetConnectAttr method to set the appropriate transaction isolation level. + // "snapshot" and "rcsnapshot" options require additional SQL commands to be executed for specific isolation levels. if (db_type != "oracle" && db_type != "ob") { // mysql mode // if (db_type != "oracle") { @@ -492,6 +658,9 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o return false; } } + // For Oracle or OB databases: + // Construct an SQL command to set the transaction isolation level based on the 'opt' value, + // and execute it using ExecWriteSql. else { std::string iso; if (opt == "read-committed") { diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 36673d5d..d83c0190 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -15,7 +15,7 @@ #include #include -// 基于Google's gflags库来实现命令行参数解析 +// Implement command-line argument parsing based on Google's gflags library DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); diff --git a/src/dbtest/src/sqltest_v2.cc b/src/dbtest/src/sqltest_v2.cc index 27ee38fb..b48f08b3 100644 --- a/src/dbtest/src/sqltest_v2.cc +++ b/src/dbtest/src/sqltest_v2.cc @@ -15,6 +15,7 @@ #include #include +// Implement command-line argument parsing based on Google's gflags library DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); @@ -27,6 +28,14 @@ DEFINE_string(timeout, "3", "timeout"); std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size +/** + * Tries to lock the specified mutex within the given timeout. + * + * @param wait_second The timeout in seconds. + * @param wait_nanosecond The timeout in nanoseconds. + * @param txn_id The transaction ID. + * @return True if the lock is acquired within the timeout, false otherwise. + */ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) { struct timespec timeoutTime; @@ -35,6 +44,17 @@ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) return pthread_mutex_timedlock( mutex_txn[txn_id], &timeoutTime ) == 0; // == 0 locked else no lock } +/** + * Executes a SQL query and returns the result. + * + * @param sql The SQL query to execute. + * @param session_id The session ID for tracking. + * @param sql_id The SQL query ID for tracking. + * @param test_result_set The test result set to store results. + * @param db_type The type of the database (e.g., "oracle", "mysql"). + * @param test_process_file The file to log test process. + * @return True if the query execution is successful, false otherwise. + */ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ @@ -210,6 +230,14 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ }; +/** + * Executes a test sequence, including preparation, execution, and verification. + * + * @param test_sequence The test sequence to execute. + * @param test_result_set The result set to store test results. + * @param db_connector The database connector for executing SQL queries. + * @return True if the test sequence execution is successful, false otherwise. + */ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + ".txt"; // std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; From 3fd87e6ba770d476c01d36a8ad56339d9ec40b65 Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Fri, 22 Sep 2023 20:43:10 +0800 Subject: [PATCH 45/81] swap the order of unbind and drop in sql_cntl --- src/dbtest/src/sql_cntl.cc | 10 +++++----- src/dbtest/src/sql_cntl_v2.cc | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index c65b2e6e..447ed6ca 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -205,8 +205,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } // execute sql @@ -223,8 +223,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); @@ -284,8 +284,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } SQLLEN length; @@ -344,15 +344,15 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_time_info << std::endl; } + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { // Handle errors: If SQL execution fails, check if the error message contains "timeout". // If yes, set the result type of test_result_set to "Timeout". // Otherwise, set the result type to "Rollback" and include the relevant error message. + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 4daa23c0..b2c18b2c 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -158,8 +158,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } // execute sql @@ -178,8 +178,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet SQLRowCount(m_hStatement,&row_count); // std::cout << "row_count" << row_count << std::endl; std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); if (row_count==0 && sql_id !=0){ std::string blank(blank_base*(session_id - 1), ' '); std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed at: " + get_current_time() ; @@ -232,8 +232,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return false; } SQLLEN length; @@ -287,12 +287,12 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_time_info << std::endl; } + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); return true; } else { + SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); - // SQLFreeStmt( m_hStatement, SQL_UNBIND); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); From 6aede039e30d9e242696a71fd8622d185f770437 Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Sun, 24 Sep 2023 13:13:10 +0800 Subject: [PATCH 46/81] Added Cassandra results --- src/dbtest/auto_test.sh | 3 + src/dbtest/auto_test_all.sh | 13 +- src/dbtest/sql2cql.py | 122 +++++++++++ src/dbtest/src/sql_cntl.cc | 41 ++++ src/dbtest/src/sqltest.cc | 7 +- .../centralizend_result/cassandra/README.md | 67 ++++++ .../all/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/all/iat_dda_write_skew.txt | 61 ++++++ .../all/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/all/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../all/iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../all/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../all/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../all/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../all/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/all/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/all/rat_dda_read_skew2.txt | 61 ++++++ .../all/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../cassandra/all/rat_dda_write_read_skew.txt | 61 ++++++ .../all/rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/all/rat_mda_step_rat.txt | 109 +++++++++ .../all/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/all/rat_sda_dirty_read.txt | 45 ++++ .../all/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../all/rat_sda_lost_self_update.txt | 51 +++++ .../all/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../all/wat_dda_full_write_skew_c1.txt | 47 ++++ .../all/wat_dda_full_write_skew_c2.txt | 47 ++++ .../all/wat_dda_full_write_skew_committed.txt | 47 ++++ .../all/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../all/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../all/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../all/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/all/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/all/wat_mda_step_wat_c2.txt | 64 ++++++ .../all/wat_sda_dirty_write_1abort.txt | 46 ++++ .../all/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/all/wat_sda_full_write.txt | 46 ++++ .../all/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../cassandra/all/wat_sda_lost_update_c1.txt | 51 +++++ .../cassandra/all/wat_sda_lost_update_c2.txt | 51 +++++ .../any/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/any/iat_dda_write_skew.txt | 61 ++++++ .../any/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/any/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../any/iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../any/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../any/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../any/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../any/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/any/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/any/rat_dda_read_skew2.txt | 61 ++++++ .../any/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../cassandra/any/rat_dda_write_read_skew.txt | 61 ++++++ .../any/rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/any/rat_mda_step_rat.txt | 109 +++++++++ .../any/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/any/rat_sda_dirty_read.txt | 45 ++++ .../any/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../any/rat_sda_lost_self_update.txt | 51 +++++ .../any/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../any/wat_dda_full_write_skew_c1.txt | 47 ++++ .../any/wat_dda_full_write_skew_c2.txt | 47 ++++ .../any/wat_dda_full_write_skew_committed.txt | 47 ++++ .../any/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../any/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../any/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../any/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/any/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/any/wat_mda_step_wat_c2.txt | 64 ++++++ .../any/wat_sda_dirty_write_1abort.txt | 46 ++++ .../any/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/any/wat_sda_full_write.txt | 46 ++++ .../any/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../cassandra/any/wat_sda_lost_update_c1.txt | 51 +++++ .../cassandra/any/wat_sda_lost_update_c2.txt | 51 +++++ .../local_one/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../local_one/iat_dda_write_skew.txt | 61 ++++++ .../iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/local_one/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../local_one/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../local_one/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/local_one/rat_dda_read_skew.txt | 61 ++++++ .../local_one/rat_dda_read_skew2.txt | 61 ++++++ .../rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../local_one/rat_dda_write_read_skew.txt | 61 ++++++ .../rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/local_one/rat_mda_step_rat.txt | 109 +++++++++ .../local_one/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../local_one/rat_sda_dirty_read.txt | 45 ++++ .../local_one/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../local_one/rat_sda_lost_self_update.txt | 51 +++++ .../local_one/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../local_one/wat_dda_full_write_skew_c1.txt | 47 ++++ .../local_one/wat_dda_full_write_skew_c2.txt | 47 ++++ .../wat_dda_full_write_skew_committed.txt | 47 ++++ .../local_one/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../local_one/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../local_one/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../local_one/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../local_one/wat_mda_step_wat_c1.txt | 64 ++++++ .../local_one/wat_mda_step_wat_c2.txt | 64 ++++++ .../local_one/wat_sda_dirty_write_1abort.txt | 46 ++++ .../local_one/wat_sda_dirty_write_2commit.txt | 46 ++++ .../local_one/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../local_one/wat_sda_lost_update_c1.txt | 51 +++++ .../local_one/wat_sda_lost_update_c2.txt | 51 +++++ .../local_quorum/rat_sda_dirty_read.txt | 45 ++++ .../rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 29 +++ .../iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../local_serial/iat_dda_write_skew.txt | 61 ++++++ .../iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../local_serial/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../rat_dda_double_write_skew2.txt | 54 +++++ .../local_serial/rat_dda_read_skew.txt | 61 ++++++ .../local_serial/rat_dda_read_skew2.txt | 61 ++++++ .../rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../local_serial/rat_dda_write_read_skew.txt | 61 ++++++ .../rat_dda_write_read_skew_committed.txt | 61 ++++++ .../local_serial/rat_mda_step_rat.txt | 109 +++++++++ .../rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../local_serial/rat_sda_dirty_read.txt | 45 ++++ .../rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../local_serial/rat_sda_lost_self_update.txt | 51 +++++ .../rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../wat_dda_full_write_skew_c1.txt | 47 ++++ .../wat_dda_full_write_skew_c2.txt | 47 ++++ .../wat_dda_full_write_skew_committed.txt | 47 ++++ .../wat_dda_read_write_skew1_c1.txt | 54 +++++ .../wat_dda_read_write_skew1_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_c1.txt | 54 +++++ .../wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../local_serial/wat_mda_step_wat_c1.txt | 64 ++++++ .../local_serial/wat_mda_step_wat_c2.txt | 64 ++++++ .../wat_sda_dirty_write_1abort.txt | 46 ++++ .../wat_sda_dirty_write_2commit.txt | 46 ++++ .../local_serial/wat_sda_full_write.txt | 46 ++++ .../wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../local_serial/wat_sda_lost_update_c1.txt | 51 +++++ .../local_serial/wat_sda_lost_update_c2.txt | 51 +++++ .../one/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/one/iat_dda_write_skew.txt | 61 ++++++ .../one/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/one/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../one/iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../one/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../one/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../one/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../one/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/one/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/one/rat_dda_read_skew2.txt | 61 ++++++ .../one/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../cassandra/one/rat_dda_write_read_skew.txt | 61 ++++++ .../one/rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/one/rat_mda_step_rat.txt | 109 +++++++++ .../one/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/one/rat_sda_dirty_read.txt | 45 ++++ .../one/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../one/rat_sda_lost_self_update.txt | 51 +++++ .../one/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../one/wat_dda_full_write_skew_c1.txt | 47 ++++ .../one/wat_dda_full_write_skew_c2.txt | 47 ++++ .../one/wat_dda_full_write_skew_committed.txt | 47 ++++ .../one/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../one/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../one/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../one/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/one/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/one/wat_mda_step_wat_c2.txt | 64 ++++++ .../one/wat_sda_dirty_write_1abort.txt | 46 ++++ .../one/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/one/wat_sda_full_write.txt | 46 ++++ .../one/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../cassandra/one/wat_sda_lost_update_c1.txt | 51 +++++ .../cassandra/one/wat_sda_lost_update_c2.txt | 51 +++++ .../quorum/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/quorum/iat_dda_write_skew.txt | 61 ++++++ .../quorum/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/quorum/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../quorum/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../quorum/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../quorum/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../quorum/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/quorum/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/quorum/rat_dda_read_skew2.txt | 61 ++++++ .../quorum/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../quorum/rat_dda_write_read_skew.txt | 61 ++++++ .../rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/quorum/rat_mda_step_rat.txt | 109 +++++++++ .../quorum/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/quorum/rat_sda_dirty_read.txt | 45 ++++ .../quorum/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../quorum/rat_sda_lost_self_update.txt | 51 +++++ .../quorum/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../quorum/wat_dda_full_write_skew_c1.txt | 47 ++++ .../quorum/wat_dda_full_write_skew_c2.txt | 47 ++++ .../wat_dda_full_write_skew_committed.txt | 47 ++++ .../quorum/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../quorum/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../quorum/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../quorum/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/quorum/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/quorum/wat_mda_step_wat_c2.txt | 64 ++++++ .../quorum/wat_sda_dirty_write_1abort.txt | 46 ++++ .../quorum/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/quorum/wat_sda_full_write.txt | 46 ++++ .../quorum/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../quorum/wat_sda_lost_update_c1.txt | 51 +++++ .../quorum/wat_sda_lost_update_c2.txt | 51 +++++ .../result_summary/all_total-result.txt | 108 +++++++++ .../result_summary/any_total-result.txt | 108 +++++++++ .../result_summary/local_one_total-result.txt | 108 +++++++++ .../local_serial_total-result.txt | 108 +++++++++ .../result_summary/one_total-result.txt | 108 +++++++++ .../result_summary/quorum_total-result.txt | 108 +++++++++ .../result_summary/serial_total-result.txt | 108 +++++++++ .../result_summary/three_total-result.txt | 108 +++++++++ .../result_summary/two_total-result.txt | 108 +++++++++ .../serial/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/serial/iat_dda_write_skew.txt | 61 ++++++ .../serial/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/serial/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../serial/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../serial/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../serial/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../serial/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/serial/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/serial/rat_dda_read_skew2.txt | 61 ++++++ .../serial/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../serial/rat_dda_write_read_skew.txt | 61 ++++++ .../rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/serial/rat_mda_step_rat.txt | 109 +++++++++ .../serial/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/serial/rat_sda_dirty_read.txt | 45 ++++ .../serial/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../serial/rat_sda_lost_self_update.txt | 51 +++++ .../serial/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../serial/wat_dda_full_write_skew_c1.txt | 47 ++++ .../serial/wat_dda_full_write_skew_c2.txt | 47 ++++ .../wat_dda_full_write_skew_committed.txt | 47 ++++ .../serial/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../serial/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../serial/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../serial/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/serial/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/serial/wat_mda_step_wat_c2.txt | 64 ++++++ .../serial/wat_sda_dirty_write_1abort.txt | 46 ++++ .../serial/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/serial/wat_sda_full_write.txt | 46 ++++ .../serial/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../serial/wat_sda_lost_update_c1.txt | 51 +++++ .../serial/wat_sda_lost_update_c2.txt | 51 +++++ .../three/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/three/iat_dda_write_skew.txt | 61 ++++++ .../three/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/three/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../three/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../three/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../three/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../three/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/three/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/three/rat_dda_read_skew2.txt | 61 ++++++ .../three/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../three/rat_dda_write_read_skew.txt | 61 ++++++ .../rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/three/rat_mda_step_rat.txt | 109 +++++++++ .../three/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/three/rat_sda_dirty_read.txt | 45 ++++ .../three/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../three/rat_sda_lost_self_update.txt | 51 +++++ .../three/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../three/wat_dda_full_write_skew_c1.txt | 47 ++++ .../three/wat_dda_full_write_skew_c2.txt | 47 ++++ .../wat_dda_full_write_skew_committed.txt | 47 ++++ .../three/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../three/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../three/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../three/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/three/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/three/wat_mda_step_wat_c2.txt | 64 ++++++ .../three/wat_sda_dirty_write_1abort.txt | 46 ++++ .../three/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/three/wat_sda_full_write.txt | 46 ++++ .../three/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../three/wat_sda_lost_update_c1.txt | 51 +++++ .../three/wat_sda_lost_update_c2.txt | 51 +++++ .../two/iat_dda_read_skew_committed.txt | 61 ++++++ .../iat_dda_read_write_skew1_committed.txt | 54 +++++ .../cassandra/two/iat_dda_write_skew.txt | 61 ++++++ .../two/iat_dda_write_skew_committed.txt | 61 ++++++ ...skew_predicate_based-intersecting_data.txt | 17 ++ ...w_predicate_based-overdraft_protection.txt | 61 ++++++ .../cassandra/two/iat_mda_step_iat.txt | 109 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 106 +++++++++ .../two/iat_mda_step_iat_cross_phenomenon.txt | 207 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 106 +++++++++ ...step_iat_read_only_transaction_anomaly.txt | 140 ++++++++++++ .../two/iat_mda_step_iat_uname_anomaly.txt | 162 ++++++++++++++ .../two/iat_sda_lost_update_committed.txt | 51 +++++ .../iat_sda_non_repeatable_read_committed.txt | 58 +++++ .../two/rat_dda_double_write_skew1.txt | 54 +++++ .../rat_dda_double_write_skew1_committed.txt | 54 +++++ .../two/rat_dda_double_write_skew2.txt | 54 +++++ .../cassandra/two/rat_dda_read_skew.txt | 61 ++++++ .../cassandra/two/rat_dda_read_skew2.txt | 61 ++++++ .../two/rat_dda_read_skew2_committed.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_delete.txt | 61 ++++++ ...t_dda_read_skew_predicate_based_insert.txt | 59 +++++ .../cassandra/two/rat_dda_write_read_skew.txt | 61 ++++++ .../two/rat_dda_write_read_skew_committed.txt | 61 ++++++ .../cassandra/two/rat_mda_step_rat.txt | 109 +++++++++ .../two/rat_mda_step_rat_long_fork.txt | 207 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 109 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 106 +++++++++ .../cassandra/two/rat_sda_dirty_read.txt | 45 ++++ .../two/rat_sda_intermediate_read.txt | 51 +++++ .../rat_sda_intermediate_read_committed.txt | 51 +++++ .../two/rat_sda_lost_self_update.txt | 51 +++++ .../two/rat_sda_non_repeatable_read.txt | 58 +++++ ...le_read_predicate_based-phantom_delete.txt | 58 +++++ ...le_read_predicate_based-phantom_insert.txt | 57 +++++ .../wat_dda_double_write_skew2_committed.txt | 54 +++++ .../two/wat_dda_full_write_skew_c1.txt | 47 ++++ .../two/wat_dda_full_write_skew_c2.txt | 47 ++++ .../two/wat_dda_full_write_skew_committed.txt | 47 ++++ .../two/wat_dda_read_write_skew1_c1.txt | 54 +++++ .../two/wat_dda_read_write_skew1_c2.txt | 54 +++++ .../two/wat_dda_read_write_skew2_c1.txt | 54 +++++ .../two/wat_dda_read_write_skew2_c2.txt | 54 +++++ .../wat_dda_read_write_skew2_committed.txt | 54 +++++ .../cassandra/two/wat_mda_step_wat_c1.txt | 64 ++++++ .../cassandra/two/wat_mda_step_wat_c2.txt | 64 ++++++ .../two/wat_sda_dirty_write_1abort.txt | 46 ++++ .../two/wat_sda_dirty_write_2commit.txt | 46 ++++ .../cassandra/two/wat_sda_full_write.txt | 46 ++++ .../two/wat_sda_full_write_committed.txt | 46 ++++ .../wat_sda_lost_self_update_committed.txt | 51 +++++ .../cassandra/two/wat_sda_lost_update_c1.txt | 51 +++++ .../cassandra/two/wat_sda_lost_update_c2.txt | 51 +++++ 506 files changed, 35495 insertions(+), 2 deletions(-) create mode 100644 src/dbtest/sql2cql.py create mode 100644 test_result/centralizend_result/cassandra/README.md create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/all_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/any_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/one_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/three_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/result_summary/two_total-result.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt diff --git a/src/dbtest/auto_test.sh b/src/dbtest/auto_test.sh index d54f0dcf..80151847 100755 --- a/src/dbtest/auto_test.sh +++ b/src/dbtest/auto_test.sh @@ -36,5 +36,8 @@ then elif [ $db == "mariadb" ] then ./3ts_dbtest -isolation=$2 -db_type="mariadb" -user="username" -passwd="password" -case_dir="mariadb" +elif [ $db == "cassandra" ] +then + ./3ts_dbtest -isolation=$2 -db_type="cassandra" -user="username" -passwd="password" -case_dir="cassandra" fi diff --git a/src/dbtest/auto_test_all.sh b/src/dbtest/auto_test_all.sh index 867945e4..70ebeada 100755 --- a/src/dbtest/auto_test_all.sh +++ b/src/dbtest/auto_test_all.sh @@ -31,4 +31,15 @@ set -x ./auto_test.sh "mariadb" "read-uncommitted" ./auto_test.sh "mariadb" "read-committed" ./auto_test.sh "mariadb" "repeatable-read" -./auto_test.sh "mariadb" "serializable" \ No newline at end of file +./auto_test.sh "mariadb" "serializable" + +./auto_test.sh "cassandra" "any" +./auto_test.sh "cassandra" "one" +./auto_test.sh "cassandra" "two" +./auto_test.sh "cassandra" "three" +./auto_test.sh "cassandra" "quorum" +./auto_test.sh "cassandra" "all" +./auto_test.sh "cassandra" "local_quorum" +./auto_test.sh "cassandra" "local_one" +./auto_test.sh "cassandra" "serial" +./auto_test.sh "cassandra" "local_serial" diff --git a/src/dbtest/sql2cql.py b/src/dbtest/sql2cql.py new file mode 100644 index 00000000..1236ae34 --- /dev/null +++ b/src/dbtest/sql2cql.py @@ -0,0 +1,122 @@ +# /* +# * Tencent is pleased to support the open source community by making 3TS available. +# * +# * Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved. The below software +# * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All +# * Tencent Modifications are Copyright (C) THL A29 Limited. +# * +# * Author: zhenhuazhuang (zhenhua.zhuang@qq.com) +# * +# */ + +# This Python script is designed to convert SQL statements to CQL (Cassandra Query Language) statements. +# It currently handles only the INSERT statements and converts them to the full INSERT INTO ... VALUES ... format. +# For example, it converts "INSERT INTO mytab VALUES (1, 20);" to "INSERT INTO mytab (k,v) VALUES (1, 20);" + +import os +import re + +""" +Extracts column names from a SQL column definition string. + +@param column_str The SQL column definition string. +@return A list of column names extracted from the input string. +""" +def extract_columns(column_str): + depth = 0 + start = 0 + columns = [] + + for i, c in enumerate(column_str): + if c == '(': + depth += 1 + elif c == ')': + depth -= 1 + elif c == ',' and depth == 0: + columns.append(column_str[start:i].strip()) + start = i + 1 + + # Add the last column name + columns.append(column_str[start:].strip()) + + # Extract column names from column definitions + column_names = [] + for column in columns: + if not column.lower().startswith(('primary key', 'key')): + column_name = column.split()[0] + column_names.append(column_name) + return column_names + +class SQLFileProcessor: + def __init__(self, input_dir, output_dir): + """ + Initializes the SQL file processor. + + :param input_dir: The path to the input directory. + :param output_dir: The path to the output directory. + """ + self.input_dir = input_dir + self.output_dir = output_dir + # Check and create the output folder if it doesn't exist + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + def process_file(self, filename): + """ + Processes a single SQL file. + + :param filename: The name of the SQL file to process. + """ + input_filepath = os.path.join(self.input_dir, filename) + output_filepath = os.path.join(self.output_dir, filename) + + with open(input_filepath, "r") as file: + lines = file.readlines() + + table_columns = {} + # Process each line + for i, line in enumerate(lines): + line = line.strip() + parts = line.split('-') + if len(parts) >= 3: + actual_line = parts[2] + if actual_line.lower().startswith("create table"): + match = re.match(r"create table (\w+)\s?\((.+?)\)", actual_line, re.I) + current_table = match.group(1) + # Locate the positions of the first left parenthesis and the last right parenthesis + start_idx = actual_line.find('(') + end_idx = actual_line.rfind(')') + if start_idx != -1 and end_idx != -1 and start_idx < end_idx: + # Extract the string between them + columns_str = actual_line[start_idx + 1:end_idx] + table_name = actual_line[len("create table "):start_idx].strip() + columns = extract_columns(columns_str) + table_columns[current_table] = columns + elif actual_line.lower().startswith("insert into"): + match = re.match(r"insert into (\w+) values", actual_line, re.I) + if match: + table = match.group(1) + columns = table_columns.get(table, []) + columns_str = ",".join(columns) + if line.find("values") != -1: + new_line = line.replace("values", f"({columns_str}) values") + else: + new_line = line.replace("VALUES", f"({columns_str}) VALUES") + lines[i] = new_line + '\n' + + with open(output_filepath, "w") as file: + file.writelines(lines) + + def process_all_files(self): + """ + Processes all SQL files in the input directory. + """ + for filename in os.listdir(self.input_dir): + if filename.endswith(".txt"): + self.process_file(filename) + +input_directory = "t/pg_old" +output_directory = "t/pg" + +processor = SQLFileProcessor(input_directory, output_directory) +processor.process_all_files() diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 8f46ec00..4538ec56 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -557,6 +557,47 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o // Set the transaction isolation level based on the 'opt' value (e.g., "read-uncommitted," "read-committed," "repeatable-read," etc.) // Use SQLSetConnectAttr method to set the appropriate transaction isolation level. // "snapshot" and "rcsnapshot" options require additional SQL commands to be executed for specific isolation levels. + + // https://cassandra.apache.org/doc/4.1/cassandra/tools/cqlsh.html#consistency + if (db_type == "cassandra") { + std::string iso; + if (opt == "any") { + iso = "any"; + } else if (opt == "one") { + iso = "one"; + } else if (opt == "two") { + iso = "two"; + } else if (opt == "three") { + iso = "three"; + } else if (opt == "quorum") { + iso = "quorum"; + } else if (opt == "all") { + iso = "all"; + } else if (opt == "local_quorum") { + iso = "local_quorum"; + } else if (opt == "local_one") { + iso = "local_one"; + } else if (opt == "serial") { + iso = "serial"; + } else if (opt == "local_serial") { + iso = "local_serial"; + } else { + std::cout << "unknow isolation level" << std::endl; + return false; + } + TestResultSet test_result_set; + std::string sql; + if (opt == "serial" || opt == "local_serial") { + sql = "serial consistency " + iso + ";"; + } else { + sql = "consistency " + iso + ";"; + } + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + return true; + } + if (db_type != "oracle" && db_type != "ob") { // for ob mysql mode // if (db_type != "oracle") { diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 36673d5d..e09b2482 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -482,7 +482,12 @@ int main(int argc, char* argv[]) { mkdir(FLAGS_db_type.c_str(), S_IRWXU); } // create isolation dir - std::vector iso_list = {"read-committed", "repeatable-read", "serializable", "result_summary"}; + std::vector iso_list; + if (FLAGS_db_type == "cassandra") { + iso_list = std::vector({"any", "one", "two", "three", "quorum", "all", "local_quorum", "local_one", "serial", "local_serial"}); + } else { + iso_list = std::vector({"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}); + } //std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; for (auto iso : iso_list) { std::string iso_dir = FLAGS_db_type + "/" + iso; diff --git a/test_result/centralizend_result/cassandra/README.md b/test_result/centralizend_result/cassandra/README.md new file mode 100644 index 00000000..d27d56d0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/README.md @@ -0,0 +1,67 @@ +# Cassandra数据库测试说明 + +## 测试环境 + +`Ubuntu22.04` | `Cassandra 4.0.11` | `CQL spec 3.4.5` | `unixODBC 2.3.9` + +## 数据库简介 + +`Apache Cassandra`是一个开源的、分布式的、`NoSQL`数据库系统,它最初是由`Facebook`开发的,用于处理大量的分布式数据存储。`Cassandra`是基于`Amazon`的`Dynamo`数据库和`Google`的`Bigtable`数据库的设计理念构建的,因此它结合了两者的优势,提供了高度可扩展性和高性能的数据管理功能。 + +## 隔离级别 + +`Cassandra` 数据库采用一种称为最终一致性(`Eventual Consistency`)的一致性模型,它与传统的关系型数据库中的 `ACID` 事务模型有所不同。因此,`Cassandra` 并不使用传统的隔离级别,如 `Read Committed`、`Repeatable Read` 等。而是提供一系列的一致性级别(`Consistency Levels`)来控制读写操作的一致性,一致性级别决定了在进行读取或写入操作时,必须成功应答的副本(`replica`)数量。主要的一致性级别包括: + +1. **ANY**:对于写操作,只要至少有一个副本应答,操作就被视为成功。 +2. **ONE**:至少有一个副本成功应答。 +3. **TWO / THREE**:至少有两个/三个副本成功应答。 +4. **QUORUM**:成功应答的副本数达到副本总数的大多数。 +5. **ALL**:所有副本都必须成功应答。 +6. **LOCAL_ONE / LOCAL_QUORUM**:对于多数据中心部署,至少有一个/大多数副本在本地数据中心应答。 +7. **EACH_QUORUM**:在每个数据中心,成功应答的副本数都达到该数据中心副本总数的大多数。 +8. **SERIAL / LOCAL_SERIAL**:用于轻量事务,确保线性一致性。 + +根据不同的一致性级别,`Cassandra` 的读写操作可能会表现出不同的隔离性,但这与传统的关系型数据库中定义的隔离级别是不同的。 + +### 轻量级事务 + +`Cassandra`支持轻量级事务(`Lightweight Transactions`),这可以为某些操作提供一种类似于传统`ACID`事务的一致性模型,但它们通常有一定的性能开销,并且不适用于所有用例。即在`CQL`语句中使用`IF NOT EXISTS`,`IF EXISTS`,或`IF`子句来实现一些形式的条件更新和删除。这种情况下,Cassandra内部会使用Paxos协议来确保操作的线性一致性,但这会带来更高的延迟和开销。 + +例如,可以使用`IF`条件来保证操作的原子性: + +```CQL +UPDATE mykeyspace.mytable SET value = 123 WHERE key = 'some_key' IF EXISTS; +``` + +这个查询只有在`some_key`确实存在时才会更新,否则不会进行任何操作。但是,这并不等同于传统的`ROLLBACK`命令,因为一旦满足条件并执行了更新,这个操作是不可逆的。 + +### 批处理 + +`Cassandra`提供了一定程度的事务支持,即通过批处理(`Batch`)来实现原子性。在`Cassandra`中,可以将多个写操作(如`INSERT`、`UPDATE`、`DELETE`)组合到一个批处理中,这些操作要么全部成功,要么全部失败。但要注意,`Cassandra`中的批处理操作不同于关系型数据库中的事务,它不提供隔离性和持久性保证。 + +```CQL +BEGIN BATCH +INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2'); +UPDATE table2 SET column1 = 'value1' WHERE column2 = 'value2'; +DELETE FROM table3 WHERE column1 = 'value1'; +APPLY BATCH; +``` + +## CQL语言 + +### `COMMIT`和`ROLLBACK`指令 + +`Cassandra`不支持传统的`SQL`事务,因此也不支持`COMMIT`和`ROLLBACK`指令。因为`Cassandra`不是一个支持`ACID`属性的关系型数据库系统。`Cassandra`是一个最终一致性(`eventual consistency`)的分布式数据库,它主要关注的是可扩展性和高可用性。 + +### `INSERT`指令 + +`INSERT INTO mytab VALUES (1, 20);`语句在`CQL`语言中不被允许,需要完整形式`INSERT INTO mytab (k,v) VALUES (1, 20);` + +## 实际测试说明 + +实际测试中编写了`sql2cql.py`脚本文件将原始测试文件中的`INSERT`语句转化为符合`CQL`语法的`INSERT`语句,其他测试语句保持原状,在单机环境对所有一致性级别进行了测试,结果基本一致,由于不支持传统的`SQL`事务,因此`33`个测试样例中大部分异常,小部分通过,仅有一个测试样例存在死锁情况。 + + + + + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..c52c9b75 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:10:377:256 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:10:381:141 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:10:478:606 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:10:489:454 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:10:495:953 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:10:496:385 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:47:10:585:556 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:10:587:559 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:10:600:147 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:10:602:353 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..5da0abf4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:11:854:412 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:11:859:516 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:11:954:356 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:11:960:213 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:11:962:640 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:11:963:53 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:47:12:62:459 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:12:64:321 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:12:71:415 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:12:71:762 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt new file mode 100644 index 00000000..259be1aa --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:13:333:374 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:13:342:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:13:433:358 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:47:13:443:316 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:13:452:573 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:47:13:541:415 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:13:543:268 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:13:633:887 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:13:645:393 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:13:647:246 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..41a8ef70 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:17:97:471 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:17:106:921 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:17:197:432 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:47:17:270:462 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:17:273:228 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:17:273:636 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:47:17:297:947 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:17:298:311 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:17:301:231 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:17:301:638 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..4c1dc6ab --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:47:14:58:500 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..389667b1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:15:672:183 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:47:15:683:878 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:15:772:161 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:47:15:783:836 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:47:15:791:819 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:15:792:250 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:47:15:891:342 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:15:893:258 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:47:15:901:868 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:15:903:852 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt new file mode 100644 index 00000000..24c4c263 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:18:557:981 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:47:18:562:586 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:18:658:11 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:18:663:138 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:47:18:758:284 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:47:18:763:847 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:47:18:866:567 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:47:18:966:996 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:47:19:66:975 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:47:19:158:843 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:47:19:259:187 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:19:359:388 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:47:19:367:47 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:19:367:416 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..06c9a211 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:28:18:723 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:28:28:569 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:28:118:952 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:28:130:421 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:28:132:928 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:47:28:219:36 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:47:28:229:614 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:47:28:241:643 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:28:243:762 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:47:28:326:681 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:47:28:328:677 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:47:28:342:356 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:47:28:344:547 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..b2b6fb52 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:26:288:546 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:26:292:693 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:26:388:542 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:47:26:391:825 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:47:26:490:274 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:47:26:501:400 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:26:503:551 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:47:26:590:356 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:47:26:601:558 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:26:603:976 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:47:26:699:756 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:26:702:595 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:47:26:797:495 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:47:26:798:835 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:47:26:806:375 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:47:26:807:119 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..011b0ad7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:20:584:256 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:47:20:593:341 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:20:684:129 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:20:694:759 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:47:20:784:683 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:47:20:796:50 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:47:20:892:648 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:47:20:992:411 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:47:21:92:524 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:47:21:183:919 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:47:21:285:242 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:21:385:346 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:47:21:393:563 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:21:395:752 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..5dd1a529 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:22:646:365 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:47:22:661:495 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:22:746:263 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:47:22:755:803 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:47:22:846:394 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:47:22:851:646 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:47:22:953:624 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:47:23:51:240 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:47:23:151:426 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:47:23:247:71 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:47:23:347:396 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:23:447:679 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:47:23:455:192 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:23:455:598 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..00260a81 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:29:668:837 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:47:29:679:159 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:47:29:689:513 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:47:29:768:821 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:47:29:779:42 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:47:29:790:291 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:29:792:520 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:47:29:869:47 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:47:29:879:34 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:47:29:889:386 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:47:29:891:979 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:47:29:977:306 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:47:29:979:305 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:47:29:991:48 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:47:29:992:897 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..5bf11945 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:24:698:314 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:47:24:708:761 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:24:798:416 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:47:24:809:84 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:24:819:576 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:47:24:830:210 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:47:24:836:834 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:24:838:64 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:47:24:898:505 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:47:24:908:302 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:47:24:918:141 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:47:24:927:217 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:47:24:937:490 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:24:939:443 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:47:25:6:822 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:47:25:9:150 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:47:25:22:309 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:47:25:24:332 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..0dd63aef --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:8:919:548 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:47:8:928:191 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:9:19:382 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:9:24:984 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:9:25:419 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:47:9:124:312 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:9:124:769 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:47:9:126:609 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:9:127:24 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..dd627db3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:7:409:182 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:7:418:236 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:7:509:256 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:7:520:405 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:7:522:510 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:47:7:616:432 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:7:618:675 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:47:7:626:357 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:7:628:133 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..d9b5738b --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:18:851:928 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:18:864:272 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:18:952:7 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:18:965:781 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:18:978:502 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:19:63:127 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:19:152:567 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:19:252:384 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:46:19:260:259 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:19:260:667 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..ddc295df --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:20:485:757 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:20:492:179 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:20:585:758 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:20:598:982 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:20:608:383 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:20:610:875 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:46:20:695:575 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:20:697:396 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:46:20:710:272 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:20:712:275 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..284f1733 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:22:7:282 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:22:13:248 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:22:107:42 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:22:112:814 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:22:115:260 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:46:22:215:721 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:22:217:785 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:22:307:811 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:22:314:383 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:22:314:789 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt new file mode 100644 index 00000000..c97db8c8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:23:549:643 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:46:23:559:857 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:23:648:125 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:23:651:488 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:23:654:377 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:46:23:750:716 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:23:850:504 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:23:950:235 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:23:958:330 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:23:958:731 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt new file mode 100644 index 00000000..56cc9de7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:28:130:447 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:28:141:307 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:28:230:498 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:46:28:236:116 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:28:238:70 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:28:338:870 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:28:339:265 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:28:430:966 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:28:438:691 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:28:439:95 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..57f6764c --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:29:687:585 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:29:692:994 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:29:787:378 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:46:29:792:476 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:29:794:652 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:29:795:173 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:46:29:893:319 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:29:893:719 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:29:897:118 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:29:897:536 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..962c81b4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:25:264:861 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:46:25:271:350 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:25:364:806 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:25:370:988 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:25:373:192 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:25:373:631 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:46:25:470:183 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:25:470:563 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:46:25:473:601 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:25:473:976 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..cb7d7c46 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:26:674:790 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:46:26:681:301 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:26:774:882 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:46:26:780:770 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:46:26:782:671 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:26:783:64 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:46:26:880:461 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:26:880:853 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:46:26:883:834 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:26:884:229 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..6e732d93 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:15:640:111 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:15:655:101 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:15:740:108 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:15:745:897 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:15:748:361 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:46:15:842:745 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:15:940:828 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:16:40:547 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:16:50:858 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:16:51:223 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..9ac2e47e --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:17:325:938 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:17:339:256 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:17:425:955 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:17:441:481 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:17:453:509 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:17:456:191 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:46:17:534:887 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:17:537:231 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:17:551:601 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:17:553:600 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt new file mode 100644 index 00000000..84cd6df5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:31:214:839 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:31:221:915 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:31:315:657 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:31:327:663 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:46:31:330:225 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:46:31:415:881 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:46:31:425:406 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:46:31:431:113 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:46:31:524:699 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:46:31:525:111 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:46:31:616:545 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:46:31:716:561 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:46:31:732:242 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:46:31:734:499 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..e757fd8d --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:46:32:978:649 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:46:32:984:52 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:46:33:78:620 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:46:33:84:186 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:46:33:178:707 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:46:33:184:723 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:46:33:187:454 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:46:33:278:674 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:46:33:284:39 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:46:33:388:878 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:46:33:478:861 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:46:33:579:125 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:46:33:679:134 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:46:33:681:346 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:46:33:694:375 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:46:33:696:287 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..7a86583c --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:35:18:280 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:35:23:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:35:118:178 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:35:124:513 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:46:35:128:567 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:46:35:218:512 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:46:35:223:680 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:46:35:226:235 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:46:35:327:477 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:46:35:329:493 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:46:35:418:966 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:46:35:519:208 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:46:35:528:161 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:46:35:530:364 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..78db8733 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:36:808:384 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:46:36:813:770 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:36:908:227 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:46:36:913:676 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:46:36:916:124 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:46:37:8:392 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:46:37:19:61 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:46:37:29:825 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:46:37:117:897 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:46:37:118:338 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:46:37:209:72 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:46:37:309:33 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:46:37:323:396 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:46:37:325:215 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt new file mode 100644 index 00000000..3e1c7ac3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:4:911:135 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:4:922:271 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:5:10:757 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:46:5:35:268 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:46:5:109:534 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:5:211:238 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:46:5:223:78 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:5:223:436 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..4d167ff5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:8:5:682 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:8:20:384 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:8:115:280 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:46:8:118:766 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:46:8:219:452 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:8:306:826 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:8:406:383 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:46:8:413:536 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:8:413:956 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..006dbdca --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:9:663:183 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:9:677:446 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:9:763:283 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:46:9:778:656 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:9:781:258 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:46:9:869:124 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:9:869:508 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:46:9:872:267 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:9:872:680 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..c2fbf7cd --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:13:994:750 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:14:5:391 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:14:94:778 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:14:109:400 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:46:14:204:245 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:46:14:206:386 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:14:295:315 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:46:14:305:148 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:14:307:27 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..5fe88efd --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:6:389:500 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:46:6:404:777 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:6:488:82 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:6:496:393 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:46:6:602:701 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:6:688:537 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:6:789:661 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:46:6:806:636 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:6:808:434 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..94127d48 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:11:164:68 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:46:11:215:911 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:11:265:241 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:11:281:560 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:11:283:990 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:46:11:378:468 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:11:380:845 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:46:11:388:309 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:11:388:692 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4005fd21 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:12:588:253 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:46:12:604:672 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:12:688:246 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:46:12:702:687 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:12:704:925 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:46:12:794:532 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:12:795:0 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:46:12:797:554 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:12:797:972 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..e2c1dbd7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:49:469:125 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:49:479:522 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:49:569:177 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:49:580:766 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:49:590:948 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:49:593:397 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:46:49:676:500 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:49:678:602 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:49:690:368 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:49:692:140 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..f14aca8e --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:50:951:738 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:50:961:768 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:51:51:932 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:51:63:191 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:51:74:413 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:51:160:294 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:51:161:542 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:51:250:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:46:51:253:657 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:51:254:23 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..23c637f8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:52:444:723 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:52:455:344 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:52:544:772 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:52:556:777 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:52:562:857 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:52:653:468 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:52:745:428 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:52:843:690 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:46:52:847:957 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:52:848:424 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cbe11bba --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:54:123:591 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:54:129:785 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:54:223:684 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:54:229:506 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:54:232:40 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:54:232:447 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:46:54:328:926 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:54:329:287 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:46:54:332:39 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:54:332:407 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..8b07d27d --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:55:615:191 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:46:55:624:848 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:55:715:84 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:55:720:885 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:55:723:332 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:55:823:803 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:55:824:584 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:55:915:590 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:55:928:103 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:55:929:946 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..99fc6bc0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:57:196:458 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:46:57:205:251 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:57:296:387 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:46:57:301:777 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:57:304:335 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:57:406:293 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:57:497:92 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:46:57:597:31 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:57:608:499 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:57:610:295 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..39f8ddc5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:58:932:124 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:58:937:580 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:59:32:98 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:46:59:37:148 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:46:59:39:491 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:46:59:136:947 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:59:137:299 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:46:59:232:540 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:46:59:243:512 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:46:59:243:881 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..601d0a1a --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:0:486:903 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:0:496:880 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:0:586:983 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:47:0:597:685 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:0:608:172 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:47:0:695:481 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:0:787:441 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:0:887:237 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:0:899:541 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:0:901:478 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..f14471f4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:2:166:580 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:2:176:995 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:2:266:801 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:47:2:278:306 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:2:287:884 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:2:290:193 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:47:2:375:98 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:2:377:19 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:2:388:782 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:2:390:935 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..119c4a75 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:3:657:325 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:3:667:88 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:3:757:337 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:3:762:916 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:3:765:89 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:47:3:857:424 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:47:3:868:655 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:47:3:874:138 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:47:3:962:398 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:47:3:962:758 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:47:4:57:728 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:4:158:60 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:47:4:165:703 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:4:166:124 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..4121ee1f --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:5:369:139 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:5:379:248 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:5:469:189 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:5:480:219 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:47:5:569:262 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:47:5:674:165 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:47:5:778:873 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:47:5:788:984 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:47:5:877:399 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:5:969:590 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:47:6:69:308 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:47:6:168:260 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:47:6:174:666 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:47:6:175:547 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..690f2c43 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:38:588:886 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:38:594:276 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:38:688:698 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:38:694:406 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:46:38:789:115 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:38:889:269 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:46:38:895:867 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:46:39:436:654 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:39:438:766 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..5aae9d32 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:40:194:222 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:40:205:81 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:40:292:630 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:40:295:782 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:46:40:394:351 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:40:494:823 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:46:40:501:647 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:46:40:982:679 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:40:984:591 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt new file mode 100644 index 00000000..0a3198ca --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:41:804:351 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:41:810:78 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:41:904:55 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:41:916:362 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:46:42:6:939 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:46:42:7:683 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:42:105:12 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:46:42:111:651 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:42:111:996 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..6d147338 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:43:337:821 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:43:343:154 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:43:436:703 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:43:441:32 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:43:441:909 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:46:43:547:92 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:43:549:242 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:46:43:557:326 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:43:559:192 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..3dea19d9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:47:977:181 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:46:47:982:578 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:48:77:70 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:48:87:591 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:48:88:28 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:46:48:185:936 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:48:188:102 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:46:48:193:937 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:48:194:346 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..2d579897 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:44:852:429 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:46:44:857:481 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:44:952:454 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:44:958:491 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:46:45:57:780 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:46:45:58:280 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:45:152:826 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:46:45:161:346 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:45:163:23 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..1299f0f7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: all #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = all for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:46:352:326 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:46:46:361:616 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:46:452:213 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:46:464:717 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:46:46:561:294 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:46:46:652:933 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:46:46:752:516 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:46:46:758:919 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:46:759:337 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..f26b28fc --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:17:442:64 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:17:450:299 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:17:541:924 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:17:547:709 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:17:550:395 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:17:550:828 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:40:17:648:860 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:17:650:982 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:17:658:861 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:17:659:286 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..60bcdfd5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:18:826:247 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:18:838:316 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:18:926:238 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:18:937:538 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:18:947:71 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:18:949:133 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:40:19:34:1 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:19:35:850 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:19:46:993 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:19:48:609 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt new file mode 100644 index 00000000..5770b3a9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:20:304:812 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:20:314:14 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:20:404:766 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:20:409:795 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:20:412:296 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:20:513:302 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:40:20:515:239 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:40:20:605:287 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:20:620:222 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:40:20:620:620 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..6b82a100 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:23:907:922 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:23:916:976 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:24:7:956 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:24:86:36 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:24:89:487 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:24:89:985 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:40:24:109:867 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:24:110:369 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:24:113:231 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:24:113:613 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..976151f3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:40:20:991:635 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..4afb9903 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:22:552:176 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:40:22:568:700 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:22:652:270 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:40:22:664:827 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:40:22:689:641 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:22:690:589 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:40:22:759:559 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:22:760:54 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:40:22:763:67 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:22:763:573 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt new file mode 100644 index 00000000..17e05502 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:25:278:194 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:40:25:280:880 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:25:378:175 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:40:25:380:952 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:40:25:478:296 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:40:25:481:93 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:40:25:588:984 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:40:25:682:894 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:40:25:782:622 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:40:25:880:70 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:40:25:980:395 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:26:80:311 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:40:26:93:798 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:26:95:664 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..340e0e46 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:34:49:129 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:34:51:509 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:34:149:108 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:40:34:151:817 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:40:34:152:229 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:40:34:249:178 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:40:34:251:932 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:40:34:254:672 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:40:34:255:151 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:40:34:352:381 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:40:34:353:26 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:40:34:357:386 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:40:34:357:971 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..45d71f33 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:32:456:169 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:32:458:697 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:32:556:160 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:32:559:286 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:40:32:656:233 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:40:32:659:531 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:40:32:659:937 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:40:32:756:194 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:40:32:759:379 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:32:759:776 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:40:32:858:507 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:32:859:15 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:40:32:958:589 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:40:32:959:14 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:40:32:962:855 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:40:32:963:327 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..1afb3900 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:27:279:147 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:40:27:291:561 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:27:378:81 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:40:27:382:617 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:40:27:479:7 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:40:27:489:958 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:40:27:587:5 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:40:27:687:503 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:40:27:782:42 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:40:27:877:914 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:40:27:978:69 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:28:78:182 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:40:28:80:718 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:28:81:123 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..d89af423 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:29:202:726 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:40:29:216:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:29:301:275 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:40:29:305:78 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:40:29:401:290 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:40:29:404:582 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:40:29:503:779 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:40:29:603:726 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:40:29:703:739 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:40:29:801:524 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:40:29:901:626 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:30:1:539 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:40:30:5:430 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:30:5:789 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..b83ec875 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:35:552:941 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:40:35:557:696 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:40:35:560:989 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:40:35:652:314 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:40:35:655:385 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:40:35:658:580 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:40:35:659:78 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:40:35:752:537 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:40:35:755:81 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:40:35:756:959 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:40:35:757:416 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:40:35:863:15 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:40:35:865:76 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:40:35:873:988 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:40:35:875:184 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..3b84d0cb --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:31:73:352 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:40:31:75:751 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:31:173:264 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:40:31:176:76 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:31:179:213 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:40:31:181:543 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:40:31:185:75 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:40:31:185:690 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:40:31:273:351 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:40:31:276:166 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:40:31:278:902 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:40:31:281:493 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:40:31:284:754 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:31:285:249 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:40:31:376:93 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:40:31:376:577 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:40:31:380:614 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:40:31:380:995 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..5cd571c2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:16:59:782 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:40:16:69:239 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:16:159:657 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:40:16:171:98 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:40:16:173:241 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:40:16:261:201 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:40:16:261:608 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:40:16:263:661 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:40:16:264:110 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..e9063cfb --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:14:638:308 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:14:647:371 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:14:738:186 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:40:14:749:674 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:40:14:752:198 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:40:14:845:352 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:40:14:847:595 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:40:14:857:46 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:40:14:859:149 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..e09d098b --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:27:597:934 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:27:612:908 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:27:697:941 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:27:713:500 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:27:725:471 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:39:27:810:64 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:27:911:189 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:27:998:243 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:39:28:14:430 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:28:16:698 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..dd9830da --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:29:260:185 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:29:275:625 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:29:360:40 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:29:374:898 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:29:385:52 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:29:387:372 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:39:29:472:237 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:29:474:726 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:39:29:493:782 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:29:496:118 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..f1742b3c --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:30:680:136 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:30:685:18 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:30:781:627 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:30:796:73 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:39:30:808:930 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:39:30:891:275 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:30:893:243 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:39:30:982:422 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:30:997:245 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:30:999:99 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt new file mode 100644 index 00000000..4742e5d2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:32:215:265 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:39:32:226:686 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:32:315:410 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:32:330:472 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:39:32:343:885 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:39:32:424:423 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:32:516:230 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:32:615:717 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:32:630:405 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:32:632:377 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt new file mode 100644 index 00000000..c04746c6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:36:723:163 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:36:737:10 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:36:823:213 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:39:36:834:486 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:36:845:527 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:39:36:933:771 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:36:935:959 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:39:37:23:983 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:37:39:95 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:37:41:271 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..5c368133 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:38:268:134 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:38:280:739 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:38:368:9 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:39:38:380:114 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:38:391:733 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:38:394:317 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:39:38:479:857 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:38:481:762 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:38:496:831 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:38:499:114 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..296a3065 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:33:880:756 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:39:33:896:923 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:33:980:856 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:33:994:392 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:39:34:6:233 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:34:8:794 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:39:34:94:720 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:34:96:934 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:39:34:112:39 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:34:113:514 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..a457568e --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:35:293:304 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:39:35:311:881 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:35:393:142 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:39:35:406:228 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:39:35:417:148 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:35:419:406 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:39:35:507:246 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:35:509:227 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:39:35:523:282 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:35:525:303 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..ed25db18 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:24:579:534 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:24:595:588 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:24:679:508 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:24:697:377 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:24:711:330 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:39:24:786:588 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:24:880:49 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:24:979:697 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:25:11:708 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:25:13:188 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..99207bf9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:26:235:461 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:26:240:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:26:336:610 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:26:352:684 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:26:365:569 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:26:368:360 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:39:26:450:380 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:26:452:754 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:26:467:936 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:26:470:81 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt new file mode 100644 index 00000000..fc2e0ba7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:39:693:829 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:39:696:846 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:39:793:908 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:39:797:527 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:39:39:801:219 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:39:39:893:992 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:39:39:897:311 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:39:39:900:57 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:39:39:996:514 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:39:39:997:16 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:39:40:94:228 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:39:40:194:375 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:39:40:199:329 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:39:40:199:917 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..0206ba72 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:39:41:417:782 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:39:41:431:106 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:39:41:517:525 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:39:41:529:570 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:39:41:617:697 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:39:41:630:354 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:39:41:644:320 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:39:41:717:962 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:39:41:731:694 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:39:41:820:102 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:39:41:918:104 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:39:42:18:487 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:39:42:118:534 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:39:42:120:658 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:39:42:134:992 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:39:42:137:325 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..f70a2738 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:43:348:311 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:43:359:919 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:43:448:325 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:43:462:182 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:39:43:480:302 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:39:43:548:382 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:39:43:561:674 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:39:43:574:755 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:39:43:658:437 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:39:43:660:469 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:39:43:748:912 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:39:43:848:980 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:39:43:858:685 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:39:43:860:728 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..192be791 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:45:61:429 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:39:45:73:405 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:45:161:425 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:39:45:173:18 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:39:45:184:88 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:39:45:261:670 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:39:45:274:91 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:39:45:287:254 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:39:45:366:579 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:39:45:367:965 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:39:45:462:259 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:39:45:562:258 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:39:45:578:242 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:39:45:580:160 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt new file mode 100644 index 00000000..88391d4d --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:14:104:88 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:14:145:500 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:14:204:87 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:39:14:261:118 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:39:14:303:937 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:14:404:350 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:39:14:418:24 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:39:14:420:315 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..1ad44c57 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:17:130:221 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:17:142:511 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:17:229:111 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:39:17:242:599 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:39:17:334:204 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:17:429:343 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:17:529:776 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:39:17:538:414 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:17:539:554 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..d3589a5c --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:18:747:836 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:18:764:138 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:18:847:764 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:39:18:863:310 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:39:18:865:665 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:39:18:963:81 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:18:965:1 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:39:18:978:390 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:18:980:359 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..9d8fba98 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:23:68:787 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:23:85:537 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:23:168:758 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:23:187:685 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:39:23:280:85 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:39:23:282:395 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:23:369:433 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:39:23:379:733 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:23:381:519 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..26c06c6d --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:15:622:802 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:39:15:636:419 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:15:721:849 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:15:735:234 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:39:15:826:551 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:15:921:261 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:16:21:295 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:39:16:24:975 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:16:25:373 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..cde852c0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:20:180:220 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:39:20:256:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:20:279:900 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:20:298:283 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:39:20:300:629 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:39:20:396:204 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:20:398:550 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:39:20:410:815 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:20:412:967 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4d2b97ac --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:21:579:862 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:39:21:599:898 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:21:679:300 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:39:21:697:759 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:39:21:700:171 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:39:21:795:653 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:21:797:786 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:39:21:810:30 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:21:812:22 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..cb6996e7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:57:370:646 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:57:382:184 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:57:470:709 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:57:483:741 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:39:57:496:276 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:57:498:596 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:39:57:578:497 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:39:57:580:512 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:39:57:595:182 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:57:597:219 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..97bcf9ae --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:58:765:665 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:58:778:611 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:58:865:352 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:39:58:877:775 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:39:58:889:249 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:39:58:976:968 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:58:978:874 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:39:59:64:161 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:39:59:70:437 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:39:59:71:29 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..bfcb976f --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:0:248:783 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:0:260:433 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:0:348:723 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:0:361:527 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:0:373:186 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:0:459:370 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:40:0:549:123 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:0:648:423 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:40:0:658:629 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:0:659:460 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..7c788076 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:1:817:526 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:1:830:358 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:1:917:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:1:932:4 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:1:944:239 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:1:946:624 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:40:2:22:364 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:2:23:53 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:40:2:27:605 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:2:28:267 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..d9305e3b --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:3:212:59 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:3:223:156 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:3:311:920 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:3:326:329 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:3:337:876 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:3:422:87 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:40:3:424:62 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:40:3:512:724 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:3:526:951 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:3:528:722 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..d0dea808 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:4:765:796 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:40:4:775:733 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:4:865:870 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:4:878:872 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:4:890:707 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:4:976:101 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:40:5:64:675 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:5:166:270 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:5:182:352 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:5:184:628 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..2598f970 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:6:383:633 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:6:394:21 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:6:483:521 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:6:493:455 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:6:504:31 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:6:592:407 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:40:6:594:340 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:40:6:684:39 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:6:695:912 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:6:697:765 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..98f13686 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:7:865:238 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:7:875:520 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:7:965:284 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:7:975:223 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:7:985:710 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:40:8:73:695 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:40:8:165:705 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:8:265:601 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:8:278:503 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:8:280:283 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..bf1f6088 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:9:509:485 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:9:520:769 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:9:608:190 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:40:9:610:972 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:9:613:436 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:40:9:613:867 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:40:9:714:630 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:40:9:715:756 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:40:9:725:254 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:9:726:198 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..07e19b2d --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:10:951:508 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:10:961:775 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:11:51:470 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:11:63:131 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:40:11:72:701 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:40:11:151:723 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:40:11:164:340 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:40:11:177:929 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:40:11:263:8 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:40:11:265:200 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:40:11:352:397 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:11:451:48 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:40:11:456:543 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:11:457:99 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..5049ddb5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:40:12:635:450 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:40:12:640:135 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:40:12:735:65 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:40:12:738:450 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:40:12:835:206 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:40:12:938:156 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:40:13:38:135 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:40:13:40:825 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:40:13:138:84 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:40:13:235:625 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:40:13:335:680 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:40:13:435:808 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:40:13:439:520 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:40:13:439:993 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..1f1fa84c --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:46:798:213 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:46:810:756 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:46:898:358 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:46:912:178 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:39:46:998:602 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:47:99:72 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:39:47:110:535 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:39:47:568:876 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:47:571:184 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..c426ece0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:48:342:969 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:48:355:299 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:48:441:240 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:48:445:758 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:39:48:543:21 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:48:643:405 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:39:48:652:449 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:39:49:141:979 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:49:143:233 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt new file mode 100644 index 00000000..eeec5b5f --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:49:913:636 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:49:925:560 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:50:12:95 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:50:15:346 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:39:50:124:214 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:39:50:126:407 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:50:214:277 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:39:50:223:733 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:50:225:497 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..26ba3d82 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:51:427:426 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:51:439:396 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:51:527:478 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:51:541:77 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:39:51:543:208 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:39:51:639:737 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:51:641:649 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:39:51:652:654 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:51:654:798 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..e8de2c54 --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:55:921:550 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:39:55:935:837 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:56:19:516 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:56:23:469 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:39:56:23:930 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:39:56:130:844 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:56:133:88 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:39:56:142:720 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:56:144:627 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..f9c8ad7e --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:52:838:913 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:39:52:849:427 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:52:937:388 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:52:941:528 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:39:53:43:623 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:39:53:44:785 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:39:53:137:340 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:39:53:139:772 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:53:140:166 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..6334c6fc --- /dev/null +++ b/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: any #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = any for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:39:54:295:835 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:39:54:307:570 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:39:54:395:917 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:39:54:409:71 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:39:54:507:21 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:39:54:596:369 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:39:54:696:290 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:39:54:706:8 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:39:54:708:36 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..68049297 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:45:751:134 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:45:759:758 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:45:850:804 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:45:862:109 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:45:872:496 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:45:874:836 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:48:45:959:116 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:45:961:215 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:45:974:376 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:45:976:227 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..a33c6178 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:47:257:215 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:47:266:46 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:47:357:214 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:47:368:115 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:47:378:502 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:47:380:761 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:48:47:465:496 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:47:467:588 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:47:480:355 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:47:482:659 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt new file mode 100644 index 00000000..5c8e415f --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:48:757:682 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:48:766:765 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:48:857:446 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:48:867:725 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:48:879:256 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:48:965:971 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:48:968:238 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:49:58:362 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:49:70:915 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:49:72:684 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..4be82718 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:52:660:667 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:52:669:687 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:52:760:739 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:52:771:500 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:52:783:490 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:52:785:950 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:48:52:869:349 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:52:871:235 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:52:886:929 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:52:889:91 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..b3af7349 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:48:49:489:489 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..32187f4c --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:51:129:766 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:48:51:140:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:51:229:361 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:48:51:239:895 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:48:51:270:133 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:51:271:315 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:48:51:353:171 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:51:355:330 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:48:51:404:896 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:51:405:297 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt new file mode 100644 index 00000000..aa82e139 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:54:151:122 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:48:54:160:32 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:54:251:148 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:48:54:261:770 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:48:54:349:758 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:48:54:352:649 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:48:54:459:540 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:48:54:559:815 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:48:54:659:682 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:54:751:959 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:54:852:248 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:54:952:346 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:48:54:964:796 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:54:966:806 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..db82a23f --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:3:810:149 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:49:3:819:36 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:3:910:262 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:3:920:932 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:3:923:433 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:49:4:10:421 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:49:4:20:929 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:49:4:32:89 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:4:34:758 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:49:4:111:443 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:49:4:112:4 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:49:4:116:24 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:49:4:116:576 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..46f496db --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:1:999:852 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:49:2:10:965 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:2:99:903 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:49:2:111:214 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:49:2:200:189 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:49:2:211:473 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:2:213:784 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:49:2:300:243 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:49:2:311:310 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:2:313:697 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:49:2:408:704 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:49:2:411:133 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:49:2:509:827 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:49:2:512:180 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:49:2:527:943 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:49:2:530:495 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..43079284 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:56:207:512 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:48:56:210:952 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:56:308:856 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:48:56:325:847 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:48:56:409:23 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:48:56:419:288 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:48:56:516:919 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:48:56:616:903 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:48:56:717:455 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:56:809:573 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:56:909:848 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:57:10:220 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:48:57:18:553 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:57:20:359 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..0776a689 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:58:343:916 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:48:58:353:989 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:58:443:762 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:48:58:453:542 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:48:58:543:984 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:48:58:553:789 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:48:58:650:971 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:48:58:750:964 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:48:58:851:533 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:58:942:801 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:59:44:731 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:59:144:891 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:48:59:157:355 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:59:159:199 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..ddd1fb81 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:5:405:227 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:49:5:414:391 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:49:5:425:776 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:49:5:505:14 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:49:5:515:38 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:49:5:525:60 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:5:527:271 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:49:5:610:762 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:49:5:620:842 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:49:5:630:974 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:49:5:633:217 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:49:5:713:821 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:49:5:715:842 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:49:5:727:31 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:49:5:728:935 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..a44b0c27 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:0:428:828 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:49:0:439:230 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:0:528:831 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:49:0:539:275 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:0:550:654 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:49:0:561:22 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:49:0:571:304 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:0:572:645 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:49:0:628:969 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:49:0:639:425 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:49:0:649:21 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:49:0:658:743 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:49:0:669:397 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:49:0:671:13 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:49:0:737:453 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:49:0:739:716 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:49:0:752:681 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:49:0:754:680 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c082a46d --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:44:339:172 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:48:44:348:792 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:44:439:84 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:44:451:55 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:48:44:453:552 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:48:44:547:643 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:44:549:675 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:48:44:558:416 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:44:560:477 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..06003da4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:42:772:75 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:42:781:921 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:42:872:100 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:42:883:338 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:48:42:885:853 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:48:42:979:161 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:42:981:281 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:48:42:990:513 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:42:992:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..a53e5364 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:53:834:134 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:53:837:621 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:53:935:714 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:53:948:832 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:47:53:962:357 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:47:54:37:80 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:54:143:64 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:54:234:590 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:47:54:238:46 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:54:238:495 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..7e743c41 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:55:493:698 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:55:507:489 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:55:593:691 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:55:606:285 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:47:55:615:460 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:55:617:643 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:47:55:703:917 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:55:705:858 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:47:55:721:277 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:55:723:96 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..31b0bd5a --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:57:5:564 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:57:17:586 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:57:105:445 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:57:119:870 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:57:130:676 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:47:57:214:173 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:57:216:405 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:57:306:405 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:57:319:332 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:57:321:528 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt new file mode 100644 index 00000000..2cd183e9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:58:627:957 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:58:637:939 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:58:727:896 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:58:740:512 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:47:58:751:426 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:47:58:837:803 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:58:928:461 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:59:28:136 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:59:36:252 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:59:36:650 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt new file mode 100644 index 00000000..8303ba4a --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:3:241:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:3:252:643 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:3:341:635 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:3:352:858 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:48:3:363:886 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:3:454:667 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:3:456:977 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:3:540:494 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:3:543:950 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:3:544:295 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..66f3d2c4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:4:783:472 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:4:794:990 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:4:883:506 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:4:895:0 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:48:4:906:693 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:4:909:193 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:48:4:993:141 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:4:995:9 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:5:8:123 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:5:9:977 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..780cd7d8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:0:279:351 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:48:0:293:80 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:0:379:189 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:0:390:618 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:0:400:756 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:0:403:287 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:48:0:490:101 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:0:492:231 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:48:0:504:866 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:0:506:838 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..e7df309a --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:1:752:265 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:48:1:765:851 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:1:852:349 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:48:1:858:252 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:48:1:860:449 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:1:860:883 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:48:1:961:981 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:1:962:368 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:48:1:965:777 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:1:966:171 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..266299ce --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:50:674:998 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:50:688:885 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:50:775:59 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:50:789:795 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:47:50:801:862 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:47:50:875:801 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:50:975:920 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:51:73:992 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:51:83:612 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:51:84:46 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..6446727a --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:52:344:147 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:52:350:228 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:52:443:996 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:47:52:454:693 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:47:52:460:871 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:52:461:868 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:47:52:546:12 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:47:52:546:701 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:47:52:552:817 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:47:52:553:590 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt new file mode 100644 index 00000000..8792f781 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:6:303:869 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:6:315:735 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:6:403:876 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:6:417:242 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:48:6:426:654 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:48:6:502:685 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:48:6:507:381 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:48:6:511:207 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:48:6:612:354 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:6:614:769 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:6:704:488 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:6:804:618 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:48:6:819:891 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:6:821:898 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..755f1810 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:48:8:147:232 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:48:8:159:373 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:48:8:247:289 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:48:8:258:742 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:48:8:347:413 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:48:8:359:389 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:48:8:371:312 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:48:8:447:554 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:48:8:459:730 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:48:8:557:200 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:48:8:647:814 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:8:748:84 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:48:8:848:338 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:8:850:727 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:48:8:863:984 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:48:8:866:221 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..9a9d3005 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:10:144:448 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:10:147:412 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:10:244:807 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:10:249:367 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:48:10:257:52 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:48:10:346:191 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:48:10:357:265 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:48:10:368:499 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:48:10:448:334 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:10:449:85 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:10:546:801 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:10:644:943 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:48:10:647:883 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:10:648:379 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..b379b660 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:11:853:525 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:48:11:858:756 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:11:954:313 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:48:11:966:565 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:48:11:976:578 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:48:12:54:538 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:48:12:64:758 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:48:12:76:395 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:48:12:165:227 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:12:167:709 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:12:255:249 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:12:355:277 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:48:12:368:985 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:12:370:912 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt new file mode 100644 index 00000000..8350c386 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:40:4:754 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:40:21:987 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:40:105:986 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:40:168:523 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:47:40:204:418 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:40:306:471 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:47:40:320:71 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:40:322:286 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..f57dadd2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:43:103:503 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:43:108:215 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:43:204:747 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:43:226:905 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:47:43:318:85 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:43:405:347 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:43:504:946 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:47:43:516:803 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:43:518:556 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..8e6c380a --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:44:793:665 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:44:808:553 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:44:893:541 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:44:909:269 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:44:911:735 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:47:45:6:576 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:45:8:535 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:47:45:18:610 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:45:20:413 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..66a65fef --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:49:110:780 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:49:125:597 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:49:210:668 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:49:226:800 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:47:49:312:96 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:47:49:312:524 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:47:49:411:337 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:47:49:421:466 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:49:422:859 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..c4661278 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:41:523:940 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:41:539:586 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:41:623:938 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:41:647:315 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:47:41:738:102 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:41:824:507 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:41:924:155 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:47:41:938:208 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:41:940:111 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..12386c8d --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:46:244:234 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:47:46:307:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:46:344:184 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:46:359:126 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:46:361:471 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:47:46:448:116 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:46:449:9 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:47:46:452:908 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:46:453:546 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..3cfe04a8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:47:681:246 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:47:47:685:665 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:47:782:892 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:47:47:800:614 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:47:802:856 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:47:47:896:691 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:47:898:865 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:47:47:908:46 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:47:909:951 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..44ce9304 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:24:534:182 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:24:544:753 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:24:634:145 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:24:645:427 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:24:655:401 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:24:657:438 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:48:24:741:591 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:24:743:703 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:24:755:805 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:24:757:763 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..3f21792f --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:26:19:192 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:26:25:78 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:26:119:402 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:26:125:941 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:26:128:438 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:26:228:992 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:26:230:882 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:26:317:919 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:48:26:320:937 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:26:321:281 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..e3aa1554 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:27:593:809 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:27:599:15 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:27:693:623 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:27:705:79 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:27:714:662 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:27:802:963 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:48:27:894:412 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:27:994:272 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:48:28:1:628 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:28:1:999 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..fab859bd --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:29:240:799 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:29:251:167 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:29:341:31 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:29:352:691 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:29:362:356 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:29:364:446 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:48:29:451:361 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:29:453:297 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:48:29:465:56 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:29:467:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..2c461209 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:30:714:335 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:30:723:571 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:30:814:291 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:30:827:111 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:30:837:403 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:30:923:20 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:30:925:2 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:31:14:992 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:31:27:1 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:31:28:935 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..8f86492e --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:32:316:665 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:48:32:326:163 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:32:416:717 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:32:427:911 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:32:437:613 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:32:525:795 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:48:32:617:466 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:32:717:307 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:32:729:824 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:32:731:702 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..099973d7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:34:62:438 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:34:72:702 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:34:162:375 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:34:174:271 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:34:184:431 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:34:271:997 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:34:274:25 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:48:34:363:56 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:34:375:142 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:34:376:902 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..8f5a5aaa --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:35:662:563 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:35:668:403 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:35:762:393 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:35:771:929 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:35:782:472 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:48:35:871:194 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:48:35:962:924 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:36:62:916 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:36:70:692 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:36:71:59 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..62a9a091 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:37:358:417 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:37:368:913 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:37:456:908 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:48:37:461:216 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:37:465:514 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:37:466:418 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:48:37:567:74 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:48:37:568:920 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:48:37:580:260 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:37:582:232 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..fb21b6fa --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:38:857:72 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:38:866:988 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:38:957:32 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:38:968:144 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:48:38:977:957 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:48:39:57:217 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:48:39:68:387 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:48:39:77:864 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:48:39:165:869 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:48:39:167:739 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:48:39:257:647 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:39:357:797 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:48:39:370:675 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:39:372:635 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..c232398b --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:40:664:661 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:40:676:124 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:40:764:736 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:48:40:778:993 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:48:40:864:821 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:48:40:975:451 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:48:41:74:680 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:48:41:84:495 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:48:41:169:996 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:48:41:265:960 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:48:41:365:507 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:48:41:465:979 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:48:41:478:221 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:48:41:480:19 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..d35eb948 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:13:668:768 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:13:675:492 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:13:769:373 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:13:774:879 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:48:13:869:734 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:13:970:158 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:48:13:976:879 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:48:14:464:552 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:14:466:365 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..cc6827f4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:15:273:873 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:15:283:703 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:15:372:910 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:15:378:883 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:48:15:474:381 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:15:574:635 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:48:15:582:642 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:48:16:41:762 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:16:42:130 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt new file mode 100644 index 00000000..b0122dfd --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:16:742:545 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:16:753:481 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:16:841:309 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:16:846:860 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:48:16:951:416 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:48:16:953:237 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:48:17:42:870 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:48:17:51:507 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:17:53:404 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..059cba7c --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:18:356:594 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:18:367:525 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:18:456:471 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:18:469:546 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:48:18:472:33 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:48:18:565:556 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:18:567:458 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:48:18:575:296 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:18:577:16 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..f4daf100 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:23:35:871 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:48:23:46:348 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:23:135:828 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:23:141:944 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:48:23:142:384 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:48:23:243:253 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:23:245:178 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:48:23:254:378 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:23:256:122 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..b308beaf --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:19:893:606 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:48:19:903:181 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:19:993:593 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:20:5:929 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:48:20:104:2 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:48:20:105:824 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:48:20:192:514 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:48:20:194:702 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:20:195:43 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..2d5f475d --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: local_one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_one for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:48:21:358:10 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:48:21:367:140 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:48:21:457:118 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:48:21:463:936 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:48:21:563:342 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:48:21:658:548 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:48:21:758:253 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:48:21:766:642 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:48:21:768:536 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt new file mode 100644 index 00000000..dfcadfc2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: local_quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_quorum for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:31:612:254 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:31:653:208 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:31:711:984 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:31:771:608 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:47:31:812:119 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:31:912:526 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:47:31:928:875 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:47:31:930:959 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..c8a92704 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: local_quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_quorum for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:34:860:918 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:34:878:782 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:34:960:920 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:34:997:599 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:47:35:77:131 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:35:161:536 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:35:261:126 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:47:35:272:750 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:35:275:69 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..da7016b0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: local_quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_quorum for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:36:551:409 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:47:36:568:512 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:36:651:411 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:47:36:667:259 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:47:36:669:994 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:47:36:764:788 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:36:766:724 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:47:36:780:270 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:36:781:661 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..03f550fe --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: local_quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_quorum for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:33:152:404 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:47:33:168:545 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:33:250:741 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:47:33:255:804 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:47:33:357:820 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:47:33:453:308 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:47:33:553:77 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:47:33:565:863 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:47:33:568:46 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..09e31634 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,29 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: local_quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_quorum for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:47:38:32:457 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:47:38:106:997 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:47:38:132:415 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..1df5d17c --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:39:381:72 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:39:385:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:39:481:31 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:39:486:173 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:39:492:63 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:39:493:544 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:51:39:589:75 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:39:591:60 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:39:603:395 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:39:605:669 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..912d4996 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:40:869:520 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:40:879:11 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:40:968:54 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:40:971:91 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:40:975:979 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:40:976:588 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:51:41:78:87 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:41:80:252 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:41:93:107 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:41:95:271 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt new file mode 100644 index 00000000..8079b1f3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:42:343:312 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:42:351:779 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:42:443:276 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:42:452:722 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:42:463:218 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:42:543:937 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:42:544:297 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:42:643:634 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:42:655:36 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:42:656:854 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..4977f374 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:46:211:551 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:46:214:904 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:46:312:880 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:46:323:347 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:46:332:923 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:46:335:385 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:51:46:421:750 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:46:423:978 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:46:438:607 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:46:440:421 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..49e6f310 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:51:43:73:237 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..107738d6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:44:744:39 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:51:44:756:15 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:44:844:126 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:51:44:856:718 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:51:44:891:462 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:44:892:369 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:51:44:949:42 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:44:949:439 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:51:44:951:943 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:44:952:465 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt new file mode 100644 index 00000000..4b894fdd --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:47:684:370 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:51:47:693:439 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:47:782:742 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:51:47:785:541 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:47:884:417 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:51:47:894:815 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:51:47:993:561 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:51:48:88:86 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:51:48:185:839 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:48:284:975 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:48:385:436 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:48:485:520 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:51:48:498:470 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:48:500:614 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..7a496790 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:57:242:943 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:57:245:862 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:57:344:412 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:57:354:882 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:51:57:357:83 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:51:57:444:538 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:51:57:455:239 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:51:57:465:518 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:57:467:791 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:51:57:545:923 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:51:57:546:463 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:51:57:549:960 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:51:57:550:470 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..1697deb2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:55:432:142 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:55:442:904 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:55:532:193 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:55:544:561 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:55:632:374 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:51:55:643:603 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:55:646:146 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:51:55:732:360 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:51:55:743:302 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:55:745:638 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:51:55:841:542 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:55:844:243 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:51:55:943:876 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:51:55:946:249 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:51:55:961:948 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:51:55:964:349 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..228e67d8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:49:798:571 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:51:49:803:390 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:49:900:291 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:51:49:910:673 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:50:0:425 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:51:50:11:137 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:51:50:100:980 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:51:50:203:51 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:51:50:308:468 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:50:400:966 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:50:501:232 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:50:601:233 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:51:50:609:433 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:50:611:304 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..448db7d3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:51:840:298 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:51:51:850:346 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:51:940:350 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:51:51:949:830 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:52:40:579 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:51:52:50:237 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:51:52:147:714 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:51:52:242:837 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:51:52:347:760 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:52:441:85 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:52:541:489 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:52:640:82 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:51:52:644:987 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:52:645:508 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..0814156e --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:58:753:807 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:51:58:770:496 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:51:58:781:880 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:51:58:853:695 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:51:58:863:792 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:51:58:874:400 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:58:876:487 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:51:58:953:715 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:51:58:964:106 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:51:58:976:446 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:58:979:355 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:51:59:55:185 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:51:59:55:722 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:51:59:58:940 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:51:59:59:342 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..8614ca66 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:53:878:303 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:51:53:888:865 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:53:976:559 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:51:53:979:190 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:53:981:635 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:51:53:984:290 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:51:53:989:682 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:53:990:548 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:51:54:76:717 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:51:54:79:103 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:51:54:81:442 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:51:54:83:594 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:51:54:86:964 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:54:87:788 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:51:54:178:744 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:51:54:179:161 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:51:54:182:294 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:51:54:182:706 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..096629c0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:37:853:595 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:51:37:862:854 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:37:953:554 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:37:964:579 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:51:37:966:924 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:51:38:61:763 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:38:63:656 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:51:38:71:559 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:38:73:670 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..abcdd9fd --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:36:397:937 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:36:407:787 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:36:497:770 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:36:509:729 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:51:36:511:860 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:51:36:605:60 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:36:607:328 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:51:36:615:211 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:36:617:189 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c961ffbc --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:48:79:416 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:48:91:132 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:48:178:501 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:48:181:923 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:48:184:462 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:48:291:992 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:48:382:930 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:48:478:807 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:50:48:482:955 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:48:483:502 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..a95a4c87 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:49:644:113 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:49:648:418 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:49:745:482 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:49:759:60 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:49:769:469 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:49:771:829 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:50:49:855:840 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:49:858:0 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:50:49:872:581 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:49:874:586 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..ea9abc5f --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:51:162:342 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:51:167:195 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:51:262:191 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:51:265:815 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:51:268:521 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:50:51:370:609 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:51:371:717 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:51:462:532 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:51:465:801 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:51:466:230 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt new file mode 100644 index 00000000..954c25ce --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:52:678:445 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:52:688:941 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:52:776:817 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:52:781:723 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:52:785:949 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:50:52:883:949 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:52:976:841 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:53:76:897 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:53:80:660 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:53:81:57 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt new file mode 100644 index 00000000..94d276e1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:57:245:639 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:57:257:125 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:57:345:675 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:57:357:427 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:57:369:471 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:57:455:267 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:57:457:171 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:57:544:461 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:57:548:177 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:57:548:625 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..224ee5a6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:58:805:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:58:817:249 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:58:905:326 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:58:916:455 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:58:926:211 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:58:928:714 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:50:59:15:498 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:59:17:582 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:59:33:428 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:59:35:832 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..82f46494 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:54:309:192 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:50:54:321:567 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:54:407:735 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:54:410:965 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:54:413:289 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:54:413:725 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:50:54:511:563 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:54:512:55 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:50:54:515:618 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:54:515:983 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..034e2fd8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:55:758:685 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:50:55:772:279 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:55:858:654 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:50:55:870:259 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:50:55:879:571 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:55:881:677 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:50:55:970:549 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:55:972:920 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:50:55:985:920 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:55:988:109 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..e2f10b9e --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:44:967:180 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:44:981:646 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:45:67:193 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:45:81:441 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:45:94:315 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:50:45:168:222 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:45:267:868 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:45:365:722 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:45:377:679 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:45:378:235 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..d4ad65e1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:46:666:37 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:46:670:22 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:46:767:312 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:46:779:198 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:50:46:786:306 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:46:787:310 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:50:46:868:318 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:46:868:745 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:46:873:996 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:46:874:630 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt new file mode 100644 index 00000000..2268eea7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:0:335:714 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:0:346:640 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:0:435:664 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:0:449:316 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:51:0:460:97 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:51:0:535:747 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:51:0:549:569 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:51:0:562:290 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:51:0:644:740 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:0:646:929 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:0:736:508 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:0:836:572 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:51:0:852:168 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:0:854:543 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..07086374 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:51:2:142:18 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:51:2:145:168 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:51:2:243:717 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:51:2:254:351 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:2:343:842 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:51:2:357:344 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:51:2:371:322 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:51:2:444:148 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:51:2:456:716 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:51:2:554:19 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:51:2:644:453 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:2:744:710 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:51:2:844:774 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:2:846:944 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:51:2:860:872 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:51:2:863:225 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..670bb7b2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:4:159:357 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:4:169:593 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:4:259:344 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:4:271:195 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:51:4:288:888 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:51:4:359:383 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:51:4:370:875 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:51:4:381:672 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:51:4:461:676 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:4:462:511 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:4:560:96 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:4:660:112 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:51:4:668:984 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:4:671:25 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..883f15c6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:6:3:261 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:51:6:15:61 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:6:103:314 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:51:6:113:819 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:51:6:126:486 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:51:6:201:904 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:51:6:204:850 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:51:6:207:513 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:51:6:313:610 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:6:315:818 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:6:404:240 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:6:503:963 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:51:6:518:820 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:6:520:971 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt new file mode 100644 index 00000000..f9176c33 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:34:329:386 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:34:368:431 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:34:427:526 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:50:34:457:416 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:50:34:527:630 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:34:630:16 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:50:34:643:138 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:34:645:423 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..6fa1cd89 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:37:483:373 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:37:487:841 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:37:584:809 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:50:37:618:422 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:50:37:699:81 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:37:785:776 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:37:885:133 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:50:37:895:809 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:37:897:550 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..96e0fe16 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:39:159:798 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:39:176:785 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:39:259:592 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:50:39:274:705 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:39:277:691 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:50:39:374:622 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:39:376:860 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:50:39:388:246 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:39:389:336 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..a0b54f89 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:43:428:508 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:43:434:767 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:43:528:331 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:43:537:591 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:50:43:634:484 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:50:43:635:536 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:43:730:33 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:50:43:740:104 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:43:742:216 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..662767a5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:35:820:636 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:35:826:683 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:35:922:47 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:35:945:453 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:50:36:35:406 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:36:122:727 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:36:221:159 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:50:36:226:989 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:36:227:823 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..77e0e00b --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:40:576:183 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:50:40:650:824 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:40:674:687 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:40:679:75 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:40:679:662 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:50:40:789:701 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:40:791:21 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:50:40:797:420 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:40:798:261 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..01a6955d --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:41:966:943 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:50:41:986:869 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:42:66:741 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:50:42:81:938 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:42:84:295 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:50:42:182:935 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:42:185:356 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:50:42:197:339 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:42:199:262 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..06d75b07 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:18:563:615 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:18:567:623 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:18:663:616 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:18:666:872 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:18:669:859 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:18:670:396 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:51:18:772:753 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:18:774:890 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:18:788:630 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:18:790:658 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..89a348e6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:20:47:766 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:20:58:11 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:20:146:754 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:20:152:751 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:20:158:185 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:20:257:58 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:20:259:327 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:20:346:182 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:51:20:349:258 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:20:349:667 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..2bf20b9b --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:21:596:361 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:21:607:228 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:21:696:274 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:21:708:269 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:21:719:915 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:21:797:104 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:21:894:806 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:21:996:470 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:51:22:9:202 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:22:11:283 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..33da444c --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:23:265:24 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:23:271:102 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:23:364:475 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:23:368:57 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:23:371:176 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:23:371:699 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:51:23:475:959 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:23:477:922 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:51:23:490:661 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:23:492:437 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..15924759 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:24:751:785 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:24:760:826 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:24:851:795 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:24:863:750 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:24:874:865 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:24:961:420 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:24:963:360 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:25:50:721 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:25:54:268 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:25:54:673 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..17e47ae4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:26:234:219 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:51:26:244:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:26:334:715 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:26:346:664 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:26:358:315 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:26:443:99 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:26:535:187 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:26:633:172 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:26:636:621 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:26:637:5 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..516b1c05 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:27:839:61 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:27:850:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:27:938:958 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:27:949:25 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:27:959:283 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:28:42:336 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:28:42:971 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:51:28:139:583 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:28:151:292 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:28:153:205 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..1c2a556e --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:29:401:975 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:29:405:574 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:29:501:554 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:29:504:328 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:29:508:613 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:51:29:605:353 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:29:702:88 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:29:803:681 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:29:816:683 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:29:818:91 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..f6de024e --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:31:118:845 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:31:125:939 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:31:218:781 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:51:31:224:87 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:31:230:157 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:31:231:557 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:51:31:328:450 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:51:31:330:323 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:51:31:338:610 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:31:339:784 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..13057a86 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:32:605:496 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:32:615:427 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:32:705:527 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:32:716:689 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:51:32:727:298 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:51:32:805:677 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:51:32:816:602 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:51:32:828:380 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:51:32:913:886 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:51:32:915:860 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:51:33:6:371 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:33:106:569 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:51:33:118:772 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:33:120:920 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..9c9c07f7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:34:365:467 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:34:369:175 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:34:467:2 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:51:34:479:636 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:51:34:567:42 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:51:34:675:809 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:51:34:776:706 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:51:34:787:906 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:51:34:875:548 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:51:34:967:358 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:51:35:67:104 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:51:35:167:418 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:51:35:179:748 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:51:35:181:743 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..3f7486f4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:7:750:892 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:7:761:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:7:851:14 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:7:862:793 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:51:7:951:337 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:8:51:740 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:51:8:61:505 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:51:8:548:862 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:8:551:268 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..a8a10227 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:9:297:954 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:9:308:839 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:9:396:480 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:9:399:344 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:51:9:498:583 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:9:598:807 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:51:9:607:124 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:51:10:146:565 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:10:148:334 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt new file mode 100644 index 00000000..a2594b83 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:10:918:574 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:10:929:516 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:11:18:346 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:11:29:359 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:51:11:119:505 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:51:11:119:895 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:11:219:218 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:51:11:227:982 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:11:230:73 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..ad907589 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:12:487:454 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:12:498:345 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:12:587:334 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:12:600:247 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:51:12:602:467 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:51:12:696:211 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:12:698:192 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:51:12:706:508 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:12:708:354 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..d9f5aea0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:17:168:638 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:51:17:172:123 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:17:268:840 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:17:273:267 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:51:17:273:976 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:51:17:375:685 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:17:377:11 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:51:17:381:498 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:17:382:320 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..39edf71c --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:13:998:375 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:51:14:7:729 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:14:98:372 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:14:109:855 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:51:14:208:837 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:51:14:211:147 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:51:14:296:999 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:51:14:299:511 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:14:299:850 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..4f225de8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: local_serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = local_serial for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:51:15:535:867 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:51:15:545:76 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:51:15:635:824 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:51:15:647:556 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:51:15:737:371 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:51:15:834:606 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:51:15:934:570 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:51:15:937:164 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:51:15:937:628 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..09e3f79e --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:30:948:305 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:30:953:957 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:31:48:150 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:31:52:569 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:31:56:867 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:31:57:299 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:38:31:156:986 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:31:159:38 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:31:172:404 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:31:174:467 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..97261c3f --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:32:413:676 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:32:420:44 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:32:512:359 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:32:515:975 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:32:520:721 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:32:521:357 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:38:32:615:179 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:32:615:599 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:32:620:983 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:32:621:508 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt new file mode 100644 index 00000000..a8fa9b2d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:33:825:778 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:33:828:27 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:33:926:891 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:33:934:354 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:33:943:523 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:34:29:646 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:34:30:164 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:34:128:1 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:34:140:107 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:34:141:918 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..9abe3a86 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:37:612:217 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:37:621:184 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:37:712:142 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:37:723:75 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:37:734:946 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:37:737:167 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:38:37:821:781 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:37:823:907 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:37:838:963 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:37:841:94 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..b43fd153 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:38:34:564:606 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..2d1f6756 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:36:206:178 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:38:36:218:2 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:36:305:964 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:38:36:318:797 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:38:36:348:46 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:36:348:918 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:38:36:414:836 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:36:415:452 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:38:36:419:691 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:36:420:376 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt new file mode 100644 index 00000000..42e8912f --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:39:56:250 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:38:39:66:487 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:39:156:47 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:38:39:169:257 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:38:39:254:775 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:38:39:258:356 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:38:39:365:508 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:38:39:457:663 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:38:39:560:361 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:38:39:656:521 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:38:39:756:984 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:39:857:172 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:38:39:871:600 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:39:873:684 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..76e4b8f1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:48:411:485 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:48:421:13 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:48:511:507 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:48:523:261 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:38:48:525:440 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:38:48:611:796 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:38:48:624:648 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:38:48:637:431 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:48:639:672 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:38:48:712:962 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:38:48:713:557 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:38:48:717:727 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:38:48:718:370 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..1c7c8842 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:46:677:840 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:46:688:415 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:46:777:550 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:46:789:623 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:38:46:876:642 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:38:46:880:696 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:46:881:289 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:38:46:976:727 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:38:46:981:116 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:46:981:796 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:38:47:87:370 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:47:89:836 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:38:47:179:597 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:38:47:180:24 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:38:47:185:196 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:38:47:185:931 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..a80e20a7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:41:131:109 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:38:41:140:680 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:41:229:640 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:38:41:232:941 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:38:41:331:333 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:38:41:344:900 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:38:41:433:731 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:38:41:540:414 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:38:41:640:148 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:38:41:731:910 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:38:41:830:425 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:41:932:105 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:38:41:941:902 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:41:943:969 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..abea006d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:43:157:53 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:38:43:172:281 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:43:255:198 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:38:43:259:718 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:38:43:355:359 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:38:43:359:787 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:38:43:464:279 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:38:43:565:0 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:38:43:664:668 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:38:43:757:485 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:38:43:857:379 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:43:957:537 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:38:43:971:57 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:43:973:51 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..ce483547 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:49:906:505 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:38:49:910:673 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:38:49:913:23 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:38:50:5:946 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:38:50:8:506 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:38:50:11:60 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:50:11:537 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:38:50:107:691 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:38:50:119:30 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:38:50:127:704 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:38:50:129:231 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:38:50:211:706 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:38:50:212:701 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:38:50:220:563 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:38:50:221:637 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..9de9e0f9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:45:148:922 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:38:45:160:254 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:45:248:830 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:38:45:262:280 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:45:275:93 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:38:45:286:100 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:38:45:295:310 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:45:296:173 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:38:45:347:280 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:38:45:351:606 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:38:45:357:154 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:38:45:359:719 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:38:45:362:401 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:45:362:909 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:38:45:449:610 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:38:45:450:351 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:38:45:456:866 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:38:45:457:230 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..4e3c74d0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:29:484:827 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:38:29:493:977 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:29:584:911 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:29:597:264 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:38:29:599:827 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:38:29:686:65 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:29:686:432 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:38:29:688:209 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:29:688:574 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..156a5be1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:28:75:537 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:28:81:474 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:28:176:500 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:28:189:713 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:38:28:192:381 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:38:28:279:108 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:28:280:32 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:38:28:284:367 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:28:285:103 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..73b3bf7c --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:40:892:501 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:40:906:350 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:40:992:291 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:41:6:669 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:41:19:587 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:37:41:104:708 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:37:41:204:767 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:41:292:767 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:37:41:313:386 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:41:315:636 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..1d28f384 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:42:498:835 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:42:513:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:42:598:249 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:42:611:489 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:42:623:983 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:42:626:588 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:37:42:710:987 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:42:713:215 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:37:42:729:547 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:42:731:777 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..b38f7b52 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:43:985:736 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:43:998:982 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:44:85:550 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:44:99:160 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:37:44:114:893 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:37:44:194:923 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:44:197:105 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:37:44:284:713 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:44:290:473 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:44:291:210 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt new file mode 100644 index 00000000..e7343a7d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:45:492:333 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:37:45:502:785 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:45:592:236 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:45:606:952 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:37:45:621:155 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:37:45:700:996 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:37:45:793:66 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:45:892:930 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:45:909:338 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:45:911:413 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt new file mode 100644 index 00000000..24b4acdd --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:49:995:450 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:50:7:836 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:50:95:271 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:37:50:106:589 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:50:118:539 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:37:50:206:867 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:50:208:848 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:37:50:296:267 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:50:309:899 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:50:311:932 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..09458d71 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:51:482:704 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:51:486:258 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:51:582:626 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:37:51:585:447 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:51:587:718 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:51:588:152 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:37:51:689:66 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:51:689:686 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:51:692:837 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:51:693:235 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..444ccde2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:47:129:796 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:37:47:145:364 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:47:229:782 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:47:243:47 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:37:47:256:570 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:47:259:124 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:37:47:341:835 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:47:344:72 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:37:47:358:359 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:47:360:590 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..c89b8c02 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:48:541:3 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:37:48:548:98 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:48:641:177 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:37:48:647:60 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:37:48:649:931 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:48:650:508 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:37:48:747:126 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:48:748:381 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:37:48:759:234 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:48:760:865 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..7725d1a8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:37:759:905 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:37:778:390 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:37:859:951 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:37:875:916 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:37:892:52 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:37:37:960:906 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:37:38:60:524 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:38:160:205 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:38:193:793 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:38:195:871 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..89438430 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:39:434:446 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:39:450:182 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:39:534:454 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:39:550:303 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:39:564:211 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:39:566:838 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:37:39:644:97 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:37:39:646:487 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:37:39:661:197 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:37:39:663:617 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt new file mode 100644 index 00000000..791a427b --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:52:910:8 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:52:923:703 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:53:8:481 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:53:11:835 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:37:53:14:892 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:37:53:110:250 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:37:53:124:688 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:37:53:138:309 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:37:53:219:852 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:37:53:222:326 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:37:53:310:598 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:37:53:409:806 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:37:53:421:300 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:37:53:422:600 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..787a505d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:37:54:665:771 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:37:54:670:35 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:37:54:765:877 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:37:54:770:466 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:37:54:865:813 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:37:54:870:136 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:37:54:873:685 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:37:54:965:769 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:37:54:973:999 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:37:55:72:393 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:37:55:166:1 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:37:55:266:0 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:37:55:365:921 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:37:55:366:468 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:37:55:372:988 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:37:55:373:516 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..3513170c --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:56:546:820 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:56:550:772 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:56:647:297 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:37:56:654:217 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:37:56:664:889 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:37:56:748:463 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:37:56:760:247 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:37:56:771:987 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:37:56:851:740 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:37:56:852:513 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:37:56:948:705 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:37:57:49:50 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:37:57:61:207 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:37:57:63:103 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..e0db80b3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:58:243:310 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:37:58:256:896 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:58:341:665 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:37:58:345:576 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:37:58:349:178 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:37:58:442:233 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:37:58:446:774 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:37:58:452:981 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:37:58:555:40 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:37:58:557:576 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:37:58:643:839 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:37:58:743:819 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:37:58:761:774 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:37:58:763:857 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt new file mode 100644 index 00000000..a3f9cf13 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:27:226:216 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:27:272:499 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:27:324:387 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:37:27:347:388 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:37:27:426:328 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:27:526:475 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:37:27:541:372 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:37:27:543:410 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..f9aaff75 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:30:353:117 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:30:372:582 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:30:453:77 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:37:30:491:652 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:37:30:571:665 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:30:652:315 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:30:753:686 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:37:30:766:425 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:30:768:700 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..58507f17 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:31:945:924 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:31:965:320 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:32:45:907 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:37:32:64:352 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:37:32:67:89 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:37:32:160:419 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:32:162:621 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:37:32:176:574 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:32:178:409 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..cf99ac0e --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:36:225:389 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:36:242:714 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:36:325:402 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:37:36:343:655 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:37:36:436:23 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:37:36:438:154 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:37:36:526:218 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:37:36:536:663 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:36:538:902 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..89df4d7d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:28:693:741 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:37:28:698:329 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:28:795:379 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:37:28:819:685 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:37:28:909:687 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:37:28:995:866 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:29:95:648 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:37:29:109:428 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:29:111:496 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..53226855 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:33:364:901 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:37:33:438:602 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:33:463:360 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:37:33:469:59 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:37:33:469:564 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:37:33:579:82 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:33:581:491 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:37:33:594:393 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:33:596:563 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4846cf1b --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:34:825:996 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:37:34:848:119 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:37:34:926:173 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:37:34:943:130 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:37:34:945:525 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:37:35:40:407 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:37:35:42:525 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:37:35:53:814 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:37:35:55:847 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..3cb21a06 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:10:441:485 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:10:453:26 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:10:540:460 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:10:548:611 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:10:557:359 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:10:559:12 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:38:10:649:152 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:10:651:606 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:10:664:944 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:10:667:26 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..7cf0a6e6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:11:869:768 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:11:876:732 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:11:970:494 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:11:977:766 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:11:984:563 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:12:74:725 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:12:75:253 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:12:170:214 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:38:12:174:190 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:12:174:679 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..de98ee83 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:13:421:586 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:13:433:671 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:13:521:693 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:13:534:268 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:13:545:976 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:13:623:751 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:13:722:52 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:13:820:559 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:38:13:825:131 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:13:825:578 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..9e5c0549 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:14:980:191 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:14:992:2 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:15:80:230 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:15:92:965 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:15:107:750 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:15:110:653 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:38:15:181:85 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:15:181:468 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:38:15:184:996 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:15:185:357 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..7e712c52 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:16:399:298 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:16:409:306 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:16:499:391 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:16:512:480 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:16:525:823 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:16:609:301 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:16:611:524 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:16:699:767 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:16:713:402 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:16:715:591 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ad320ee7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:17:963:818 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:38:17:968:256 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:18:64:2 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:18:69:904 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:18:76:164 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:18:167:887 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:18:265:703 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:18:363:904 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:18:369:2 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:18:369:531 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..ea929f88 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:19:587:662 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:19:591:669 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:19:689:208 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:19:700:242 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:19:713:145 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:19:792:411 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:19:793:119 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:38:19:888:148 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:19:893:804 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:19:894:729 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..d78713c3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:21:139:729 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:21:151:907 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:21:239:513 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:21:249:976 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:21:262:716 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:38:21:344:610 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:21:440:451 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:21:539:399 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:21:549:704 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:21:551:214 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..dedbc9df --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:22:810:850 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:22:824:328 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:22:910:846 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:38:22:923:741 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:22:934:956 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:22:937:241 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:38:23:16:380 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:38:23:17:760 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:38:23:26:800 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:23:27:938 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..13a9e40f --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:24:274:657 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:24:279:597 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:24:374:675 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:24:379:771 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:38:24:386:305 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:38:24:476:50 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:38:24:487:770 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:38:24:498:641 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:38:24:587:265 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:38:24:589:522 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:38:24:675:756 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:24:776:744 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:38:24:786:615 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:24:787:622 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..23d78a14 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:26:65:419 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:26:78:268 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:26:163:694 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:38:26:167:135 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:38:26:265:368 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:38:26:374:947 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:38:26:475:970 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:38:26:488:240 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:38:26:574:968 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:38:26:666:172 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:38:26:765:888 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:38:26:864:744 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:38:26:870:743 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:38:26:871:499 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..c82b486d --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:37:59:924:28 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:37:59:928:572 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:0:23:847 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:0:29:283 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:38:0:125:254 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:0:226:35 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:38:0:235:489 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:38:0:663:800 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:0:664:768 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..d6f0ff64 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:1:393:336 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:1:405:582 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:1:492:268 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:1:498:132 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:38:1:593:740 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:1:692:198 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:38:1:694:429 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:38:2:163:753 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:2:165:554 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt new file mode 100644 index 00000000..e2f0c0ca --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:2:926:753 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:2:938:227 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:3:26:733 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:3:39:621 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:38:3:136:840 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:38:3:139:81 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:3:225:425 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:38:3:228:978 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:3:229:355 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..d61e4777 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:4:466:856 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:4:479:148 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:4:566:448 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:4:579:859 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:38:4:582:50 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:38:4:678:69 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:4:680:203 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:38:4:690:242 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:4:691:597 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..c48c99b7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:9:34:47 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:38:9:39:198 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:9:135:422 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:9:150:451 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:38:9:152:905 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:38:9:237:468 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:9:237:929 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:38:9:240:625 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:9:241:22 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..150db3e9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:5:908:597 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:38:5:914:302 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:6:9:121 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:6:22:106 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:38:6:119:909 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:38:6:121:974 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:38:6:207:750 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:38:6:210:218 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:6:210:558 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..ee279c56 --- /dev/null +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: one #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = one for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:38:7:407:458 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:38:7:417:1 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:38:7:507:350 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:38:7:520:359 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:38:7:617:83 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:38:7:707:971 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:38:7:807:810 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:38:7:818:240 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:38:7:820:358 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..3fd4aeee --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:43:614:324 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:43:622:811 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:43:714:333 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:43:720:48 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:43:722:401 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:43:722:816 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:45:43:819:62 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:43:819:466 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:43:822:661 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:43:823:66 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..c94fd7cc --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:45:85:352 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:45:90:475 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:45:185:397 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:45:191:131 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:45:193:583 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:45:194:14 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:45:45:293:849 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:45:295:890 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:45:303:858 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:45:304:234 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt new file mode 100644 index 00000000..3e5ff262 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:46:587:84 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:46:591:681 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:46:686:985 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:46:691:944 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:46:694:576 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:46:795:418 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:46:797:239 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:46:887:621 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:46:894:685 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:46:895:24 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..f0cf03e0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:50:370:589 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:50:375:656 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:50:470:668 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:50:476:44 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:50:478:658 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:50:479:93 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:45:50:575:857 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:50:576:263 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:50:579:757 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:50:580:147 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..60723f7c --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:45:47:268:930 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..52b58602 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:48:887:748 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:45:48:893:251 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:48:987:596 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:45:48:998:995 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:45:49:37:681 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:49:38:135 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:45:49:107:551 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:49:109:582 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:45:49:119:30 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:49:121:123 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt new file mode 100644 index 00000000..56c4d193 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:51:885:919 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:45:51:894:887 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:51:985:939 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:45:51:991:522 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:52:86:50 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:45:52:91:334 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:45:52:194:68 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:45:52:294:362 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:45:52:394:879 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:52:486:736 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:52:587:21 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:52:687:63 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:45:52:700:264 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:52:702:462 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..6b453b34 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:1:350:938 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:46:1:360:781 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:46:1:450:942 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:46:1:456:682 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:46:1:457:134 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:46:1:551:59 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:46:1:561:760 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:46:1:572:516 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:46:1:574:676 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:46:1:652:864 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:46:1:653:674 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:46:1:659:565 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:46:1:659:934 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..c66064ad --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:59:659:794 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:59:670:473 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:59:759:627 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:59:765:876 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:59:859:876 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:45:59:865:680 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:59:866:123 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:45:59:959:958 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:45:59:971:36 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:59:973:74 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:46:0:64:819 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:46:0:65:312 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:46:0:165:163 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:46:0:165:567 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:46:0:168:877 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:46:0:169:281 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..237acac4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:53:968:672 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:45:53:977:819 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:54:63:575 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:45:54:74:270 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:54:163:646 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:45:54:174:717 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:45:54:271:311 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:45:54:371:278 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:45:54:471:289 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:54:563:946 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:54:664:197 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:54:764:350 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:45:54:771:114 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:54:771:479 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..bf6091db --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:56:42:15 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:45:56:52:293 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:56:140:520 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:45:56:144:56 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:56:242:227 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:45:56:247:95 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:45:56:346:649 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:45:56:446:772 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:45:56:549:266 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:56:642:756 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:56:742:841 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:56:843:248 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:45:56:851:311 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:56:851:686 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..d0f32720 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:46:2:918:313 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:46:2:927:578 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:46:2:936:249 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:46:3:18:351 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:46:3:33:823 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:46:3:43:272 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:46:3:45:288 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:46:3:118:613 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:46:3:128:563 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:46:3:137:303 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:46:3:139:592 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:46:3:227:144 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:46:3:229:3 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:46:3:240:29 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:46:3:241:917 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..84148633 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:58:75:125 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:45:58:84:953 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:58:175:169 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:45:58:186:264 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:58:189:793 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:45:58:191:846 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:45:58:194:363 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:58:194:779 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:45:58:275:145 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:45:58:285:422 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:45:58:295:136 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:45:58:304:184 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:45:58:313:909 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:58:316:107 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:45:58:383:30 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:45:58:385:222 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:45:58:398:12 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:45:58:400:35 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..c03bfc0e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:42:140:741 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:45:42:149:990 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:42:240:815 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:42:246:264 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:45:42:246:715 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:45:42:349:210 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:42:351:222 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:45:42:359:123 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:42:361:274 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..cb2783bc --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:40:734:675 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:40:739:430 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:40:833:92 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:40:836:934 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:45:40:837:470 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:45:40:938:862 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:40:939:245 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:45:40:940:891 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:40:941:223 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..283e4c34 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:53:36:481 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:53:50:166 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:53:136:444 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:53:148:412 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:44:53:156:125 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:53:239:327 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:53:339:745 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:53:436:579 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:44:53:451:84 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:53:452:994 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..30e00f4e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:54:663:824 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:54:667:165 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:54:763:909 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:54:768:789 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:44:54:771:208 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:54:771:637 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:44:54:874:9 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:54:875:165 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:44:54:883:110 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:54:883:861 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..7964ebf3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:56:5:14 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:56:9:775 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:56:105:42 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:56:111:345 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:56:120:352 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:44:56:207:818 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:56:208:281 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:56:305:282 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:56:309:792 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:56:310:419 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt new file mode 100644 index 00000000..3dec7d0f --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:57:501:339 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:57:503:798 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:57:601:527 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:57:605:345 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:57:609:31 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:44:57:703:662 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:57:802:425 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:57:901:687 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:57:905:548 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:57:906:93 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt new file mode 100644 index 00000000..d321d920 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:2:25:421 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:2:30:195 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:2:126:949 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:2:136:970 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:45:2:142:468 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:2:236:201 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:2:237:916 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:2:327:298 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:2:340:442 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:2:342:389 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..25100e80 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:3:592:213 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:3:602:538 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:3:691:264 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:3:694:773 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:45:3:698:366 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:3:699:85 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:45:3:803:801 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:3:805:667 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:3:819:265 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:3:821:385 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..89eb987a --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:59:184:980 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:44:59:197:550 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:59:284:710 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:59:295:711 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:59:307:349 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:59:309:473 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:44:59:394:971 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:59:396:871 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:44:59:408:585 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:59:410:317 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..952f7805 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:0:566:708 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:45:0:573:589 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:0:667:414 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:45:0:675:630 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:45:0:681:947 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:0:683:622 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:45:0:780:83 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:0:782:480 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:45:0:796:193 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:0:798:377 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..dda45b4e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:49:974:705 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:49:989:460 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:50:74:632 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:50:89:639 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:44:50:100:581 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:44:50:175:482 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:50:275:372 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:50:373:351 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:50:381:183 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:50:381:611 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..f8b9e065 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:51:555:811 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:51:570:941 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:51:655:838 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:51:670:101 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:44:51:681:197 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:51:684:63 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:44:51:758:190 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:51:758:701 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:51:764:528 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:51:765:16 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt new file mode 100644 index 00000000..4becb094 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:5:53:527 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:5:64:421 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:5:153:289 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:5:166:300 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:45:5:178:731 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:45:5:253:418 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:45:5:267:470 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:45:5:275:327 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:45:5:354:690 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:5:355:252 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:5:453:784 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:5:553:987 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:45:5:569:817 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:5:571:906 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..decb236e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:45:6:819:179 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:45:6:829:479 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:45:6:918:948 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:45:6:929:705 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:7:19:101 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:45:7:32:164 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:45:7:45:340 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:45:7:119:249 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:45:7:131:845 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:45:7:228:828 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:45:7:319:632 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:7:418:198 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:45:7:519:973 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:7:522:168 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:45:7:528:137 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:45:7:528:534 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..483b7db4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:8:736:392 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:8:747:375 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:8:836:612 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:8:848:43 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:45:8:863:616 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:45:8:936:588 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:45:8:946:950 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:45:8:958:764 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:45:9:37:746 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:9:38:147 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:9:137:448 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:9:237:608 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:45:9:246:351 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:9:248:216 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..6dbc3c1f --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:10:483:96 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:45:10:488:789 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:10:583:50 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:45:10:588:733 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:45:10:591:261 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:45:10:683:111 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:45:10:688:751 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:45:10:691:656 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:45:10:788:684 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:10:789:63 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:10:883:870 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:10:983:964 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:45:10:994:945 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:10:995:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt new file mode 100644 index 00000000..0724fa93 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:39:116:946 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:39:155:922 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:39:216:496 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:44:39:272:945 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:44:39:316:778 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:39:417:293 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:44:39:431:159 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:39:433:174 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..a761e275 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:42:357:382 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:42:374:428 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:42:456:410 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:44:42:487:81 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:44:42:572:382 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:42:658:82 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:42:757:836 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:44:42:769:127 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:42:771:193 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..1392aa86 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:44:51:635 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:44:67:418 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:44:151:875 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:44:44:157:652 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:44:158:203 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:44:44:265:179 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:44:267:126 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:44:44:278:268 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:44:280:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..dc054f1e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:48:424:834 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:48:440:223 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:48:524:787 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:48:540:159 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:44:48:634:745 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:44:48:636:995 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:48:725:755 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:44:48:735:834 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:48:738:6 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..41f8995e --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:40:716:665 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:40:722:206 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:40:816:879 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:40:822:242 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:44:40:932:740 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:41:19:274 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:41:118:976 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:44:41:132:519 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:41:134:412 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..1528d5b5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:45:526:384 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:44:45:600:149 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:45:625:529 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:45:640:930 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:45:643:236 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:44:45:740:466 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:45:742:988 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:44:45:752:859 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:45:754:783 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..4e9aec56 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:46:968:626 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:44:46:985:80 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:47:68:731 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:44:47:83:406 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:47:85:647 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:44:47:183:581 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:47:185:591 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:44:47:195:35 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:47:196:864 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..d6b52d4a --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:22:922:571 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:22:932:939 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:23:22:461 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:23:33:574 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:23:43:186 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:23:45:473 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:45:23:129:912 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:23:132:90 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:23:144:582 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:23:146:417 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e4fe8c48 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:24:363:704 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:24:369:568 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:24:463:610 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:24:474:442 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:24:483:969 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:24:574:171 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:24:576:225 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:24:662:591 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:45:24:666:788 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:24:667:193 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..ceaa8b39 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:25:932:939 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:25:944:3 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:26:32:690 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:26:43:936 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:26:54:301 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:26:142:171 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:26:233:588 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:26:333:475 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:45:26:345:985 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:26:348:141 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..054af4f1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:27:600:344 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:27:610:867 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:27:698:957 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:27:702:686 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:27:705:674 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:27:706:248 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:45:27:804:599 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:27:805:515 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:45:27:811:487 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:27:812:267 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..98e91cd4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:29:18:489 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:29:27:731 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:29:118:492 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:29:124:40 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:29:126:383 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:29:223:297 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:29:223:667 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:29:318:959 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:29:326:302 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:29:326:695 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..c77a7de7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:30:527:268 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:45:30:536:83 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:30:627:105 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:30:638:291 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:30:648:751 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:30:735:749 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:30:827:622 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:30:927:601 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:30:939:882 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:30:941:822 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..77809e7c --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:32:209:832 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:32:220:62 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:32:309:686 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:32:319:735 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:32:329:717 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:32:418:471 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:32:420:304 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:45:32:510:497 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:32:522:926 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:32:525:28 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..5a19e4bd --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:33:764:157 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:33:774:42 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:33:864:185 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:33:873:608 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:33:883:596 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:45:33:972:519 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:34:64:625 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:34:164:584 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:34:172:652 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:34:173:11 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..535dace9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:35:451:276 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:35:462:181 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:35:549:771 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:45:35:554:317 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:35:558:778 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:35:559:796 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:45:35:656:126 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:45:35:656:470 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:45:35:659:213 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:35:659:581 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..ab4722be --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:36:909:840 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:36:920:61 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:37:9:783 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:37:16:40 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:45:37:18:438 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:45:37:109:879 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:45:37:115:797 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:45:37:118:46 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:45:37:218:478 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:45:37:220:427 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:45:37:310:395 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:37:410:751 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:45:37:423:519 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:37:425:463 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..846e4fc0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:38:679:352 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:38:689:388 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:38:779:439 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:45:38:792:430 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:45:38:879:657 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:45:38:984:467 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:45:39:89:89 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:45:39:98:493 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:45:39:188:391 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:45:39:280:556 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:45:39:380:139 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:45:39:480:550 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:45:39:493:709 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:45:39:495:865 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..5ce564e2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:12:197:113 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:12:207:860 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:12:297:104 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:12:308:641 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:45:12:397:535 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:12:497:847 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:45:12:506:489 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:45:12:949:127 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:12:950:762 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..124a37af --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:13:759:421 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:13:770:4 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:13:858:220 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:13:862:887 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:45:13:959:743 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:14:59:901 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:45:14:68:317 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:45:14:546:83 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:14:547:28 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt new file mode 100644 index 00000000..8099b1c1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:15:300:644 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:15:306:183 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:15:399:340 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:15:404:123 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:45:15:505:603 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:45:15:505:963 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:15:601:141 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:45:15:609:494 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:15:610:249 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..895e2956 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:16:800:772 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:16:806:286 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:16:900:688 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:16:906:567 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:45:16:907:37 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:45:17:10:228 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:17:12:372 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:45:17:18:671 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:17:19:10 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..1046e3cc --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:21:489:118 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:45:21:499:551 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:21:589:172 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:21:595:334 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:45:21:595:734 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:45:21:694:132 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:21:694:529 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:45:21:696:467 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:21:696:821 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..73d0f1d7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:18:266:408 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:45:18:275:444 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:18:366:461 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:18:377:678 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:45:18:471:695 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:45:18:472:81 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:45:18:565:178 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:45:18:568:326 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:18:568:929 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..fa7656cc --- /dev/null +++ b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: quorum #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = quorum for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:45:19:796:609 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:45:19:805:332 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:45:19:896:490 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:45:19:908:240 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:45:20:1:930 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:45:20:97:119 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:45:20:196:967 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:45:20:207:55 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:45:20:208:868 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/one_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/one_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/one_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt new file mode 100644 index 00000000..3155065e --- /dev/null +++ b/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt @@ -0,0 +1,108 @@ +rat_sda_dirty_read: Anomaly + +rat_sda_non_repeatable_read: Anomaly + +rat_sda_intermediate_read: Anomaly + +rat_sda_intermediate_read_committed: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly + +rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly + +rat_sda_lost_self_update: Anomaly + +rat_dda_write_read_skew: Anomaly + +rat_dda_write_read_skew_committed: Anomaly + +rat_dda_double_write_skew1: Anomaly + +rat_dda_double_write_skew1_committed: Anomaly + +rat_dda_double_write_skew2: Anomaly + +rat_dda_read_skew: Anomaly + +rat_dda_read_skew_predicate_based_delete: Anomaly + +rat_dda_read_skew_predicate_based_insert: Anomaly + +rat_dda_read_skew2: Anomaly + +rat_dda_read_skew2_committed: Anomaly + +rat_mda_step_rat: Anomaly + +rat_mda_step_rat_long_fork: Anomaly + +rat_mda_step_rat_predicate_based_delete: Anomaly + +rat_mda_step_rat_predicate_based_insert: Anomaly + +wat_sda_dirty_write_1abort: Avoid + +wat_sda_dirty_write_2commit: Avoid + +wat_sda_full_write: Avoid + +wat_sda_full_write_committed: Avoid + +wat_sda_lost_update_c1: Anomaly + +wat_sda_lost_update_c2: Anomaly + +wat_sda_lost_self_update_committed: Anomaly + +wat_dda_double_write_skew2_committed: Anomaly + +wat_dda_full_write_skew_c1: Anomaly + +wat_dda_full_write_skew_c2: Anomaly + +wat_dda_full_write_skew_committed: Anomaly + +wat_dda_read_write_skew1_c1: Anomaly + +wat_dda_read_write_skew1_c2: Anomaly + +wat_dda_read_write_skew2_c1: Anomaly + +wat_dda_read_write_skew2_c2: Anomaly + +wat_dda_read_write_skew2_committed: Anomaly + +wat_mda_step_wat_c1: Anomaly + +wat_mda_step_wat_c2: Anomaly + +iat_sda_non_repeatable_read_committed: Anomaly + +iat_sda_lost_update_committed: Anomaly + +iat_dda_read_skew_committed: Anomaly + +iat_dda_read_write_skew1_committed: Anomaly + +iat_dda_write_skew: Anomaly + +iat_dda_write_skew_predicate_based-intersecting_data: Rollback + +iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly + +iat_dda_write_skew_committed: Anomaly + +iat_mda_step_iat: Anomaly + +iat_mda_step_iat_predicate_based_delete: Anomaly + +iat_mda_step_iat_predicate_based_insert: Anomaly + +iat_mda_step_iat_uname_anomaly: Anomaly + +iat_mda_step_iat_cross_phenomenon: Anomaly + +iat_mda_step_iat_causality_violation_anomaly: Anomaly + +iat_mda_step_iat_read_only_transaction_anomaly: Anomaly + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..1419fa76 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:13:200:856 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:13:203:198 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:13:302:510 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:13:314:61 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:13:326:390 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:13:328:536 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:50:13:410:842 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:13:412:387 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:13:420:769 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:13:421:652 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..eb8500f4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:14:649:109 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:14:652:254 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:14:749:148 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:14:753:75 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:14:756:166 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:14:756:683 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:50:14:855:228 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:14:856:333 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:14:864:720 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:14:865:587 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt new file mode 100644 index 00000000..c742829e --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:16:131:619 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:16:136:115 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:16:231:355 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:16:236:7 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:16:240:774 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:16:341:334 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:16:343:367 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:16:431:679 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:16:436:299 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:16:436:988 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..a8b7e7f9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:19:906:450 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:19:915:68 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:20:6:326 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:20:16:844 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:20:26:804 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:20:29:136 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:50:20:114:893 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:20:116:873 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:20:132:262 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:20:134:258 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..504b1a1a --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:50:16:836:494 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..ee3f0ab3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:18:506:627 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:50:18:517:96 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:18:606:631 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:50:18:617:991 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:50:18:651:874 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:18:653:210 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:50:18:710:466 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:18:710:884 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:50:18:713:237 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:18:713:701 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt new file mode 100644 index 00000000..8606bad8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:21:392:259 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:50:21:401:841 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:21:490:781 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:50:21:493:780 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:50:21:592:108 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:50:21:602:232 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:50:21:700:184 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:50:21:800:589 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:50:21:900:546 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:50:21:992:429 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:50:22:92:687 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:22:190:995 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:50:22:195:794 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:22:196:385 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..5c63841b --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:30:882:22 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:30:885:58 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:30:982:742 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:30:991:439 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:30:993:174 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:50:31:82:71 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:50:31:84:587 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:50:31:86:903 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:31:87:353 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:50:31:184:431 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:50:31:184:912 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:50:31:189:164 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:50:31:189:682 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..8b601563 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:29:126:275 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:29:137:333 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:29:226:268 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:29:238:323 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:50:29:326:286 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:50:29:337:275 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:29:339:635 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:50:29:426:407 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:50:29:437:477 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:29:439:588 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:50:29:534:940 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:29:537:811 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:50:29:636:125 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:50:29:638:331 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:50:29:653:420 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:50:29:655:826 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..0c5d37bf --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:23:423:239 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:50:23:439:596 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:23:521:726 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:50:23:525:228 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:50:23:623:539 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:50:23:634:796 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:50:23:731:120 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:50:23:830:777 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:50:23:924:842 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:50:24:23:927 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:50:24:122:447 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:24:224:269 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:50:24:232:516 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:24:234:654 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..0f324596 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:25:425:483 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:50:25:435:671 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:25:525:429 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:50:25:534:971 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:50:25:625:593 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:50:25:636:103 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:50:25:725:941 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:50:25:833:46 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:50:25:926:212 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:50:26:26:218 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:50:26:124:551 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:26:225:713 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:50:26:236:409 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:26:238:442 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..6f71b4b3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:32:378:534 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:50:32:394:280 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:50:32:405:421 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:50:32:478:522 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:50:32:488:994 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:50:32:499:59 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:32:501:402 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:50:32:578:660 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:50:32:589:91 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:50:32:598:894 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:50:32:601:122 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:50:32:686:787 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:50:32:688:805 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:50:32:700:536 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:50:32:702:779 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..4ee565e9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:27:566:384 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:50:27:577:252 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:27:666:408 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:50:27:676:753 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:27:687:188 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:50:27:696:252 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:50:27:706:216 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:27:707:482 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:50:27:764:987 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:50:27:767:638 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:50:27:770:27 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:50:27:772:349 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:50:27:774:880 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:27:775:457 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:50:27:874:419 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:50:27:876:685 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:50:27:888:195 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:50:27:889:390 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..3f8fe5a6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:11:773:19 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:50:11:777:202 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:11:874:295 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:11:885:518 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:11:887:653 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:50:11:975:665 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:11:976:199 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:50:11:979:81 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:11:979:760 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..38363600 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:10:359:145 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:10:369:174 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:10:459:168 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:50:10:470:798 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:50:10:473:345 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:50:10:562:944 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:10:564:68 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:50:10:568:269 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:50:10:569:133 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c035d1c3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:21:425:592 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:21:438:417 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:21:525:472 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:21:538:587 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:21:549:495 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:49:21:636:348 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:21:738:869 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:21:825:715 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:49:21:839:814 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:21:842:89 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..425475ff --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:23:160:590 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:23:172:884 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:23:260:595 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:23:273:112 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:23:280:24 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:23:281:89 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:49:23:361:968 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:23:362:370 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:49:23:365:819 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:23:366:210 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..e08f8919 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:24:599:998 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:24:612:197 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:24:700:150 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:24:713:90 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:24:724:943 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:49:24:808:569 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:24:810:662 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:24:900:593 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:24:914:296 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:24:916:233 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt new file mode 100644 index 00000000..b9e8f614 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:26:162:545 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:49:26:171:309 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:26:262:629 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:26:276:733 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:26:290:587 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:49:26:372:732 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:26:463:223 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:26:562:993 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:26:576:878 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:26:579:175 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt new file mode 100644 index 00000000..264828e3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:30:812:459 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:30:823:783 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:30:912:445 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:49:30:923:698 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:30:936:14 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:49:31:21:902 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:31:23:803 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:31:113:102 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:31:125:492 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:31:127:320 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..a3b63b63 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:32:407:87 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:32:418:723 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:32:507:28 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:49:32:518:30 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:32:528:631 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:32:531:347 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:49:32:616:389 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:32:618:421 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:32:635:83 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:32:637:808 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..ebead8bb --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:27:895:853 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:49:27:909:806 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:27:995:992 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:28:7:590 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:28:18:264 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:28:20:816 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:49:28:107:629 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:28:109:968 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:49:28:124:340 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:28:126:282 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..44c7053d --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:29:349:891 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:49:29:365:259 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:29:449:959 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:49:29:461:182 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:49:29:471:929 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:29:474:157 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:49:29:563:234 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:29:565:572 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:49:29:578:784 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:29:580:941 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..21357516 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:18:253:559 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:18:267:804 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:18:353:837 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:18:369:39 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:18:380:833 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:49:18:454:867 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:18:554:537 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:18:654:97 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:18:682:941 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:18:685:401 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..056c44b3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:19:968:907 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:19:982:976 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:20:69:10 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:20:83:25 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:20:95:434 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:20:98:184 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:49:20:180:282 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:20:182:420 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:20:200:238 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:20:202:578 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt new file mode 100644 index 00000000..56c06b9c --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:33:910:906 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:33:922:360 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:34:10:777 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:34:23:242 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:49:34:35:895 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:49:34:111:33 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:49:34:124:87 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:49:34:135:442 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:49:34:221:547 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:49:34:223:815 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:49:34:311:505 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:49:34:411:470 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:49:34:428:198 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:49:34:430:363 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..bc7fee4b --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:49:35:678:169 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:49:35:690:565 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:49:35:778:166 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:49:35:789:774 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:49:35:878:274 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:49:35:890:793 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:49:35:904:956 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:49:35:978:419 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:49:35:991:271 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:49:36:88:878 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:49:36:177:595 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:49:36:278:971 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:49:36:379:101 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:49:36:381:190 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:49:36:395:830 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:49:36:397:866 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..c0514060 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:37:692:239 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:37:696:103 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:37:793:576 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:37:798:891 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:49:37:803:442 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:49:37:893:586 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:49:37:905:83 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:49:37:917:276 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:49:38:2:797 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:49:38:4:995 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:49:38:94:172 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:49:38:194:318 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:49:38:204:125 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:49:38:206:212 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..9a54d03c --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:39:483:660 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:49:39:493:765 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:39:583:679 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:49:39:594:31 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:49:39:604:748 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:49:39:683:841 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:49:39:694:201 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:49:39:707:477 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:49:39:793:380 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:49:39:795:541 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:49:39:884:374 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:49:39:984:305 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:49:39:998:47 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:49:40:0:238 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt new file mode 100644 index 00000000..5c37feaa --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:7:371:562 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:7:412:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:7:471:588 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:49:7:528:794 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:49:7:571:779 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:7:671:854 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:49:7:685:391 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:7:687:256 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..c0e175ec --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:10:553:324 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:10:559:126 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:10:654:990 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:49:10:689:742 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:49:10:773:781 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:10:855:799 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:10:955:93 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:49:10:966:895 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:10:968:906 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..795afec1 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:12:235:612 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:12:251:343 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:12:335:954 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:49:12:351:281 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:12:354:9 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:49:12:448:952 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:12:450:959 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:49:12:464:237 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:12:466:471 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..01affc01 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:16:647:952 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:16:661:202 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:16:747:884 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:16:764:821 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:49:16:858:192 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:49:16:860:508 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:16:948:702 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:49:16:958:695 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:16:960:755 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..626ea667 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:8:955:734 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:49:8:964:469 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:9:56:886 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:9:79:987 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:49:9:171:344 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:9:257:616 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:9:357:210 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:49:9:369:8 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:9:370:904 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..179e7456 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:13:715:453 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:49:13:791:169 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:13:813:847 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:13:819:668 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:13:820:122 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:49:13:930:933 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:13:933:380 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:49:13:946:67 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:13:947:996 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..0bcc2bf5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:15:196:784 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:49:15:215:825 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:15:296:771 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:49:15:313:992 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:15:316:850 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:49:15:406:236 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:15:407:635 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:49:15:414:899 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:15:415:968 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..126d5cef --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:52:257:761 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:52:268:139 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:52:357:848 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:52:369:948 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:52:382:83 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:52:384:670 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:49:52:465:63 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:52:467:272 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:52:481:907 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:52:484:32 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..e73ec656 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:53:738:762 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:53:749:44 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:53:839:31 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:53:850:404 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:53:861:52 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:49:53:948:496 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:53:950:524 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:54:37:542 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:49:54:40:406 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:54:40:765 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..42b4af60 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:55:306:509 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:55:311:994 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:55:406:598 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:55:418:364 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:55:429:798 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:49:55:515:462 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:55:607:135 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:55:707:138 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:49:55:719:529 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:55:721:553 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..cd788d00 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:57:40:311 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:57:50:896 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:57:140:438 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:57:152:63 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:57:163:526 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:57:165:887 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:49:57:249:636 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:49:57:251:547 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:49:57:263:701 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:57:265:768 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..5f22bea5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:58:485:883 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:49:58:495:658 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:58:585:932 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:49:58:596:787 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:49:58:607:683 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:49:58:694:182 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:58:696:299 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:49:58:786:380 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:49:58:798:669 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:49:58:800:429 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..4e832685 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:0:56:427 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:50:0:65:948 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:0:156:462 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:0:167:893 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:0:179:156 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:0:259:540 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:0:357:22 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:0:456:876 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:0:469:119 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:0:471:156 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..a6cba9fc --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:1:764:291 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:1:775:614 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:1:864:148 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:1:875:217 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:1:888:455 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:1:972:673 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:50:1:974:578 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:50:2:64:708 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:2:77:197 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:2:79:362 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..65af2119 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:3:320:319 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:3:330:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:3:420:294 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:3:430:96 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:3:440:355 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:50:3:528:464 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:50:3:619:279 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:3:720:794 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:3:733:377 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:3:735:180 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..724ff4ae --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:4:998:721 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:5:9:480 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:5:98:617 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:50:5:109:518 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:5:121:205 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:50:5:123:455 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:50:5:207:613 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:50:5:209:754 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:50:5:222:87 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:5:224:48 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..a2a0bcd7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:6:534:631 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:6:544:865 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:6:634:816 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:6:646:310 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:50:6:658:62 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:50:6:734:874 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:50:6:745:601 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:50:6:756:450 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:50:6:844:33 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:50:6:845:995 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:50:6:935:762 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:7:35:437 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:50:7:48:525 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:7:50:500 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..ce3862d8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:50:8:329:393 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:50:8:341:284 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:50:8:429:214 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:50:8:440:496 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:50:8:529:359 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:50:8:638:656 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:50:8:739:318 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:50:8:752:112 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:50:8:838:435 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:50:8:930:106 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:50:9:29:911 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:50:9:130:414 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:50:9:142:804 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:50:9:144:844 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..bfe218d2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:41:254:998 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:41:266:166 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:41:354:261 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:41:363:33 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:49:41:455:337 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:41:555:632 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:49:41:563:886 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:49:42:100:259 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:42:102:372 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..6a646034 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:42:859:814 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:42:870:660 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:42:958:160 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:42:961:138 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:49:43:60:115 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:43:160:404 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:49:43:170:481 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:49:43:641:881 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:43:643:723 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt new file mode 100644 index 00000000..4b0abf44 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:44:455:404 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:44:468:172 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:44:553:710 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:44:557:207 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:49:44:664:132 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:49:44:666:189 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:44:755:775 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:49:44:764:349 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:44:766:449 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..897f27e6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:46:22:25 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:46:32:364 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:46:122:41 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:46:133:652 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:46:135:863 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:49:46:231:151 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:46:233:145 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:49:46:242:359 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:46:244:269 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..31afbc00 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:50:731:405 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:49:50:742:64 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:50:831:268 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:50:843:573 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:49:50:845:718 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:49:50:933:649 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:50:934:623 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:49:50:939:454 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:50:940:431 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..2b5ffaf6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:47:540:574 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:49:47:549:923 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:47:640:665 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:47:652:262 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:49:47:749:477 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:49:47:751:580 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:49:47:839:418 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:49:47:841:589 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:47:841:923 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..9eba9666 --- /dev/null +++ b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serial #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serial for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:49:49:70:716 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:49:49:79:965 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:49:49:170:719 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:49:49:182:250 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:49:49:279:729 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:49:49:371:346 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:49:49:471:351 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:49:49:480:652 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:49:49:482:529 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..eddc589f --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:18:384:691 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:18:387:87 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:18:484:819 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:18:487:617 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:18:489:975 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:18:490:413 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:44:18:586:938 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:18:587:363 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:18:591:680 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:18:592:194 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..26caae3e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:19:752:647 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:19:756:201 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:19:852:608 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:19:857:680 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:19:863:613 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:19:864:240 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:44:19:955:900 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:19:956:538 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:19:964:572 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:19:965:25 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt new file mode 100644 index 00000000..805e46e6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:21:58:78 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:21:60:261 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:21:158:101 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:21:160:649 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:21:163:590 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:21:263:772 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:21:264:286 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:21:358:381 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:21:366:634 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:21:367:219 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..54ca4c8d --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:24:805:318 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:24:814:713 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:24:905:210 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:24:915:548 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:24:926:51 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:24:928:180 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:44:25:12:711 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:25:14:399 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:25:25:284 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:25:27:203 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..f386b5be --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:44:21:794:273 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..4d04664e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:23:360:334 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:44:23:369:400 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:23:459:931 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:44:23:463:864 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:44:23:478:714 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:23:479:492 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:44:23:580:215 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:23:581:406 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:44:23:586:590 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:23:587:505 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt new file mode 100644 index 00000000..bdc35836 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:26:250:163 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:44:26:259:377 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:26:350:167 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:44:26:360:593 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:44:26:448:675 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:44:26:451:297 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:44:26:551:168 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:44:26:651:436 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:44:26:751:285 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:44:26:849:625 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:44:26:949:959 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:27:51:246 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:44:27:63:828 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:27:65:630 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..3012e4f4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:35:624:308 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:35:629:504 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:35:725:900 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:35:737:598 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:35:739:749 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:44:35:824:104 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:44:35:826:723 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:44:35:829:0 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:35:829:423 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:44:35:933:246 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:44:35:935:401 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:44:35:947:248 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:44:35:949:135 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..98a05ae0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:33:920:817 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:33:931:531 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:34:20:684 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:34:32:829 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:44:34:120:952 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:44:34:132:363 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:34:134:680 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:44:34:219:757 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:44:34:223:468 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:34:224:88 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:44:34:331:312 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:34:333:514 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:44:34:431:54 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:44:34:432:931 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:44:34:440:556 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:44:34:441:493 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..0d2dddb2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:28:282:342 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:44:28:291:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:28:382:349 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:44:28:397:893 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:44:28:481:133 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:44:28:484:618 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:44:28:586:636 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:44:28:685:133 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:44:28:792:119 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:44:28:881:945 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:44:28:983:259 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:29:83:453 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:44:29:91:689 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:29:93:499 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..fc612c8e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:30:278:994 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:44:30:290:889 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:30:379:81 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:44:30:389:102 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:44:30:479:117 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:44:30:489:631 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:44:30:582:907 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:44:30:680:828 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:44:30:783:512 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:44:30:878:29 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:44:30:977:996 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:31:79:840 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:44:31:91:791 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:31:93:562 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..c4893136 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:37:140:677 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:44:37:145:825 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:44:37:153:67 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:44:37:241:306 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:44:37:248:645 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:44:37:255:293 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:37:256:351 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:44:37:342:483 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:44:37:354:287 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:44:37:365:763 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:44:37:368:427 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:44:37:451:38 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:44:37:453:101 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:44:37:464:891 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:44:37:466:880 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..f461cb47 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:32:370:586 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:44:32:380:858 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:32:470:423 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:44:32:481:630 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:32:492:289 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:44:32:502:268 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:44:32:509:462 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:32:510:529 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:44:32:568:936 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:44:32:571:575 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:44:32:574:849 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:44:32:579:537 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:44:32:587:15 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:32:587:584 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:44:32:672:477 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:44:32:673:307 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:44:32:679:820 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:44:32:680:872 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..6682b8c8 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:16:967:929 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:44:16:970:677 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:17:68:916 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:17:78:634 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:17:80:766 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:44:17:173:866 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:17:175:124 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:44:17:181:464 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:17:182:636 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..c19f00be --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:15:557:703 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:15:563:133 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:15:658:465 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:44:15:670:857 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:44:15:672:856 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:44:15:765:960 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:15:768:187 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:44:15:776:11 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:44:15:777:973 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..c92f5195 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:29:77:801 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:29:90:227 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:29:176:190 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:29:179:770 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:29:182:454 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:43:29:278:950 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:29:382:851 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:29:477:910 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:43:29:492:258 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:29:494:218 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..87b7bcdf --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:30:634:407 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:30:649:599 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:30:734:392 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:30:751:155 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:30:762:582 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:30:765:335 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:43:30:845:734 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:30:847:963 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:43:30:861:928 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:30:863:898 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..db431c30 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:32:137:173 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:32:140:991 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:32:237:604 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:32:242:929 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:32:246:744 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:43:32:340:626 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:32:341:162 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:43:32:437:575 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:32:441:57 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:32:441:441 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt new file mode 100644 index 00000000..2def4977 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:33:565:929 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:43:33:568:502 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:33:666:85 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:33:670:78 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:33:675:340 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:43:33:768:949 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:33:866:145 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:33:966:144 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:33:970:224 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:33:970:702 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt new file mode 100644 index 00000000..766325ad --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:37:785:575 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:37:788:901 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:37:887:5 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:43:37:898:91 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:37:909:303 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:43:37:996:21 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:37:997:653 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:43:38:86:996 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:38:96:695 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:38:98:18 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..2c443ed4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:39:294:89 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:39:304:201 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:39:394:9 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:43:39:401:356 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:39:406:877 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:39:407:981 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:43:39:495:881 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:39:496:341 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:39:500:306 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:39:500:696 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..65d7d517 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:35:97:234 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:43:35:100:736 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:35:198:618 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:35:208:998 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:35:218:964 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:35:221:46 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:43:35:300:499 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:35:300:948 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:43:35:304:45 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:35:304:414 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..9debffa2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:36:420:190 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:43:36:424:380 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:36:520:433 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:43:36:524:691 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:43:36:528:988 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:36:529:691 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:43:36:624:18 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:36:624:570 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:43:36:630:884 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:36:631:669 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..4486572a --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:26:135:817 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:26:144:831 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:26:235:759 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:26:244:658 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:26:250:517 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:43:26:339:906 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:26:435:881 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:26:535:768 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:26:544:528 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:26:545:8 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..f6f8d29f --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:27:679:417 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:27:683:258 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:27:779:604 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:27:785:150 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:27:789:260 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:27:790:218 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:43:27:890:974 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:27:892:925 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:27:908:213 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:27:909:914 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt new file mode 100644 index 00000000..fbdbd370 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:40:670:297 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:40:674:269 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:40:770:241 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:40:774:491 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:43:40:777:649 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:43:40:870:269 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:43:40:874:654 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:43:40:878:317 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:43:40:973:442 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:40:973:918 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:41:70:506 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:41:170:505 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:43:41:175:949 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:41:176:507 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..260ca678 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:43:42:288:19 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:43:42:291:926 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:43:42:388:774 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:43:42:397:25 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:43:42:488:151 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:43:42:492:128 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:43:42:497:236 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:43:42:589:781 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:43:42:602:359 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:43:42:691:740 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:43:42:788:135 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:42:888:343 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:43:42:988:288 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:42:988:739 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:43:42:992:224 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:43:42:992:665 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..a84553f7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:44:179:560 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:44:184:274 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:44:279:273 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:44:282:443 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:43:44:286:261 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:43:44:379:382 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:43:44:382:256 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:43:44:385:11 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:43:44:489:534 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:44:491:575 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:44:581:301 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:44:681:422 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:43:44:690:376 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:44:692:666 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..174a772e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:45:924:253 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:43:45:932:98 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:46:24:917 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:43:46:35:823 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:43:46:47:14 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:43:46:123:638 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:43:46:127:230 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:43:46:130:640 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:43:46:236:980 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:46:238:935 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:46:325:436 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:46:425:157 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:43:46:436:141 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:46:437:596 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt new file mode 100644 index 00000000..c7916b1a --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:15:839:414 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:15:876:271 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:15:937:994 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:43:15:983:859 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:43:16:39:175 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:16:139:371 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:43:16:149:118 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:43:16:150:237 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..3b7066bb --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:18:846:936 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:18:864:252 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:18:946:804 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:43:18:970:659 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:43:19:57:436 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:19:145:575 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:19:247:44 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:43:19:259:513 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:19:261:765 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..50df5ce0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:20:504:433 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:20:520:468 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:20:603:175 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:43:20:609:827 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:20:610:922 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:43:20:706:739 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:20:707:144 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:43:20:711:54 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:20:711:541 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..694fa73e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:24:725:352 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:24:740:706 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:24:824:742 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:24:838:610 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:43:24:928:347 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:43:24:929:15 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:25:24:975 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:43:25:29:962 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:25:30:489 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..3b1ee497 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:17:283:196 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:43:17:301:144 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:17:383:280 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:17:404:428 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:43:17:497:148 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:17:581:783 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:17:682:135 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:43:17:688:365 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:17:689:400 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..0fb0396e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:21:857:689 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:43:21:907:64 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:21:957:352 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:21:962:221 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:21:962:921 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:43:22:73:121 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:22:75:526 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:43:22:88:186 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:22:90:184 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..bc941cea --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:23:306:170 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:43:23:325:89 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:23:405:616 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:43:23:415:763 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:23:416:796 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:43:23:512:148 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:23:512:934 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:43:23:516:821 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:23:517:527 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..1f7d4432 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:58:321:387 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:58:332:734 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:58:419:738 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:58:422:648 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:58:424:882 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:58:425:287 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:43:58:529:548 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:58:532:50 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:58:544:283 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:58:546:270 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..da033afc --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:59:781:284 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:59:792:53 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:59:881:246 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:43:59:893:339 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:59:904:952 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:43:59:990:451 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:59:992:279 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:0:79:984 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:44:0:83:193 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:0:83:550 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..8ed9f8ed --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:1:273:119 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:1:284:385 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:1:372:158 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:1:378:734 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:1:382:762 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:1:476:897 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:1:572:334 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:1:672:343 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:44:1:676:846 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:1:677:322 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..c7d0c1a2 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:2:808:412 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:2:813:356 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:2:908:309 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:2:913:337 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:2:916:230 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:2:916:712 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:44:3:11:986 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:3:12:387 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:44:3:15:831 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:3:16:225 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..345c56c7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:4:199:727 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:4:203:495 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:4:299:398 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:4:302:439 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:4:305:188 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:4:410:113 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:4:412:139 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:4:501:356 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:4:513:322 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:4:515:172 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..6cf4b4bb --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:5:777:839 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:44:5:787:414 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:5:877:594 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:5:888:975 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:5:898:451 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:5:987:74 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:6:76:955 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:6:177:124 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:6:182:549 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:6:183:302 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..de6ef508 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:7:378:306 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:7:385:649 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:7:479:222 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:7:490:701 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:7:501:475 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:7:587:719 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:44:7:589:536 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:44:7:679:534 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:7:691:360 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:7:692:559 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..75bab6cc --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:8:887:33 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:8:890:250 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:8:987:26 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:8:990:107 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:8:994:49 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:44:9:89:917 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:44:9:187:211 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:9:287:133 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:9:291:741 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:9:292:405 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..7a60c3fb --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:10:427:982 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:10:432:663 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:10:528:140 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:44:10:532:471 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:10:537:224 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:44:10:538:263 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:44:10:636:784 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:44:10:638:577 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:44:10:650:987 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:10:652:677 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..249c14bf --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:11:777:516 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:11:787:136 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:11:877:560 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:11:888:293 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:44:11:897:556 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:44:11:977:469 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:44:11:987:839 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:44:11:997:131 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:44:12:85:683 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:44:12:87:677 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:44:12:178:90 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:12:277:8 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:44:12:283:326 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:12:284:56 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..1e1713e7 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:44:13:529:750 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:44:13:538:976 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:44:13:628:0 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:44:13:632:505 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:44:13:729:520 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:44:13:838:574 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:44:13:932:726 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:44:13:935:540 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:44:14:39:204 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:44:14:130:547 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:44:14:230:304 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:44:14:330:750 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:44:14:343:863 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:44:14:346:5 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..e4029641 --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:47:640:51 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:47:648:265 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:47:740:906 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:47:753:331 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:43:47:841:231 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:47:941:764 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:43:47:949:963 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:43:48:399:220 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:48:401:109 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..cfa07e9b --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:49:173:172 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:49:184:827 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:49:271:587 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:49:275:523 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:43:49:373:307 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:49:473:624 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:43:49:483:203 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:43:49:932:809 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:49:933:188 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt new file mode 100644 index 00000000..5aa8c5ec --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:50:660:173 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:50:670:948 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:50:758:663 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:50:761:745 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:43:50:870:159 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:43:50:872:153 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:50:960:746 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:43:50:968:973 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:50:971:98 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..ef14db0e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:52:204:7 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:52:214:310 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:52:302:463 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:52:305:457 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:52:305:859 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:43:52:413:680 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:52:415:560 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:43:52:424:823 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:52:426:726 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..6f31751e --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:56:827:106 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:43:56:837:519 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:56:927:95 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:56:938:598 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:56:940:831 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:43:57:34:478 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:57:36:553 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:43:57:45:866 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:57:48:0 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..419924ef --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:53:631:586 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:43:53:640:975 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:53:731:506 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:53:743:452 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:43:53:842:65 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:43:53:844:336 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:53:930:936 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:43:53:935:852 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:53:936:801 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..1bd54ede --- /dev/null +++ b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: three #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = three for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:55:170:28 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:43:55:180:509 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:55:268:450 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:55:271:801 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:43:55:379:853 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:55:469:956 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:43:55:570:561 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:43:55:580:607 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:55:582:760 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..ca20a0bd --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:55:65:894 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:55:74:574 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:55:165:877 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:55:177:217 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:55:188:43 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:55:190:175 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:42:55:273:33 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:55:275:197 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:55:288:961 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:55:291:98 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..3a6e8371 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_read_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:56:516:535 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:56:525:335 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:56:616:587 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:56:627:569 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:56:639:455 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:56:642:8 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:42:56:725:269 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:56:727:511 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:56:742:870 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:56:744:843 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt new file mode 100644 index 00000000..a9c827f9 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_write_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:57:988:411 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:57:996:908 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:58:88:311 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:58:98:195 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:58:109:812 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:58:196:295 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:58:198:161 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:58:288:972 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:58:300:632 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:58:302:500 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..c5f4ec2c --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:1:708:224 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:43:1:717:826 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:1:808:123 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:43:1:818:949 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:1:830:248 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:1:832:714 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:43:1:917:135 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:1:919:357 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:43:1:982:342 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:1:982:726 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..ba5f3107 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,17 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 +Q0 failed at: 2023-9-23 18:42:58:721:464 + +Test Result: Rollback +Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. + diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1f3e9f2c --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:0:327:873 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-9-23 18:43:0:339:388 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:0:427:815 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-9-23 18:43:0:439:218 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-9-23 18:43:0:475:387 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:43:0:476:848 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-9-23 18:43:0:547:106 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:43:0:548:963 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-9-23 18:43:0:559:187 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:0:561:277 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt new file mode 100644 index 00000000..f9eeea04 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:3:188:201 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:43:3:197:555 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:3:288:122 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:43:3:293:573 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:43:3:388:371 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:43:3:399:243 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:43:3:493:214 + Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:43:3:597:113 + Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:43:3:696:980 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:3:788:856 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:3:887:530 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:3:989:306 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:43:4:2:599 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:4:4:511 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..cbfdca3b --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:12:451:80 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:43:12:461:744 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:12:550:359 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:43:12:558:530 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:43:12:560:330 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:43:12:651:24 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:43:12:662:643 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:43:12:672:615 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:43:12:674:951 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-23 18:43:12:760:23 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:43:12:762:446 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-9-23 18:43:12:776:419 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:43:12:778:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..1dc1479c --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:10:752:440 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:43:10:763:909 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:10:852:321 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:43:10:858:15 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:43:10:952:544 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-23 18:43:10:963:709 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:10:965:992 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:43:11:52:677 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:43:11:63:595 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:43:11:65:611 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-23 18:43:11:156:404 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:11:157:476 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + (3) expected_result: + (1,0) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + (6) expected_result: + (1,0) + *(7) expected_result: + (1,1) + *(8) expected_result: + (1,1) + (9) expected_result: + (1,0) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + *(12) expected_result: + (1,1) + (13) expected_result: + (1,0) + *(14) expected_result: + (1,1) + +Q13 finished at: 2023-9-23 18:43:11:262:318 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-9-23 18:43:11:264:650 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:43:11:280:715 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:43:11:282:829 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..9e776645 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_delete #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:5:232:901 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + null + (5) expected_result: + null + (6) expected_result: + null + +Q2 finished at: 2023-9-23 18:43:5:242:775 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:5:332:879 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + null + (2) expected_result: + null + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + null + *(6) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:43:5:338:682 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:43:5:433:69 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + null + *(2) expected_result: + (1,0) + (3) expected_result: + null + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:43:5:444:240 +Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q7 finished at: 2023-9-23 18:43:5:540:661 + Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q8 finished at: 2023-9-23 18:43:5:641:272 + Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q9 finished at: 2023-9-23 18:43:5:741:283 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:5:833:609 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:5:934:7 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:6:34:191 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:43:6:42:560 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:6:43:873 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..1a564d48 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_predicate_based_insert #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:7:194:691 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q2 finished at: 2023-9-23 18:43:7:200:118 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:7:294:637 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + null + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + null + *(4) expected_result: + null + (5) expected_result: + (0,1) + *(6) expected_result: + null + + Q4 finished at: 2023-9-23 18:43:7:309:345 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:43:7:394:780 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + null + (1) expected_result: + (1,1) + *(2) expected_result: + null + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + null + *(6) expected_result: + null + + Q6 finished at: 2023-9-23 18:43:7:405:169 +Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q7 finished at: 2023-9-23 18:43:7:502:355 + Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' + Q8 finished at: 2023-9-23 18:43:7:601:774 + Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' + Q9 finished at: 2023-9-23 18:43:7:701:894 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:43:7:795:181 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:7:895:579 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:43:7:995:591 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) (2,0) + (1) expected_result: + (0,1) (1,1) (2,1) + (2) expected_result: + (0,1) (1,1) (2,1) + (3) expected_result: + (0,1) (1,1) (2,1) + (4) expected_result: + (0,1) (1,1) (2,1) + (5) expected_result: + (0,1) (1,1) (2,1) + (6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:43:8:2:947 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:8:3:300 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..fbc1222f --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,140 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_read_only_transaction_anomaly #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:13:925:738 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:43:13:928:8 +Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,20) + (4) expected_result: + (1,20) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,20) + +Q3 finished at: 2023-9-23 18:43:13:929:933 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-23 18:43:14:27:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q5 finished at: 2023-9-23 18:43:14:38:464 + Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' + Q6 finished at: 2023-9-23 18:43:14:48:506 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:43:14:50:614 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:43:14:126:544 + Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,11) + (2) expected_result: + (0,11) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,11) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q9 finished at: 2023-9-23 18:43:14:131:886 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,20) + *(1) expected_result: + (1,20) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,20) + *(4) expected_result: + (1,20) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:43:14:135:983 + Q11-T3 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:43:14:136:869 +Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' +Q12 finished at: 2023-9-23 18:43:14:232:194 +Q13-T1 execute opt: 'COMMIT'; +Q13 finished at: 2023-9-23 18:43:14:233:306 + Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,11) (1,20) + *(1) expected_result: + (0,11) (1,20) + *(2) expected_result: + (0,11) (1,20) + *(3) expected_result: + (0,11) (1,20) + *(4) expected_result: + (0,11) (1,20) + *(5) expected_result: + (0,11) (1,20) + *(6) expected_result: + (0,11) (1,20) + + Q14 finished at: 2023-9-23 18:43:14:239:769 + Q15-T3 execute opt: 'COMMIT'; + Q15 finished at: 2023-9-23 18:43:14:240:735 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..715c67ef --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,162 @@ +#### db_type: cassandra #### +#### test_type: mda_step_iat_uname_anomaly #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_mda_step_iat_uname_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_uname_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:43:9:189:427 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,2) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + +Q2 finished at: 2023-9-23 18:43:9:194:502 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:43:9:289:357 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,2) + (6) expected_result: + (0,2) + + Q4 finished at: 2023-9-23 18:43:9:295:366 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:43:9:298:339 + Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + + Q6 finished at: 2023-9-23 18:43:9:300:694 + Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q7 finished at: 2023-9-23 18:43:9:303:361 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:43:9:303:854 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-23 18:43:9:389:585 + Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + *(4) expected_result: + (2,0) + *(5) expected_result: + (2,0) + *(6) expected_result: + (2,0) + + Q10 finished at: 2023-9-23 18:43:9:394:663 + Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11 finished at: 2023-9-23 18:43:9:397:43 + Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + + Q12 finished at: 2023-9-23 18:43:9:398:993 + Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q13 finished at: 2023-9-23 18:43:9:401:556 + Q14-T3 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:43:9:402:28 +Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + (4) expected_result: + (2,2) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q15 finished at: 2023-9-23 18:43:9:498:218 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-9-23 18:43:9:500:476 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-9-23 18:43:9:514:384 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-9-23 18:43:9:516:614 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..f4d323bc --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_sda_lost_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_lost_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:53:639:931 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:42:53:648:863 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:53:739:941 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:53:752:467 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:42:53:754:879 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 finished at: 2023-9-23 18:42:53:848:533 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:53:850:572 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:53:858:517 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:53:860:571 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..72be4302 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------iat_sda_non_repeatable_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_sda_non_repeatable_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:52:190:317 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:52:198:746 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:52:290:200 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:52:301:492 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:42:52:303:807 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:42:52:397:420 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:52:399:639 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:52:407:822 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:52:409:879 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..6010b3f5 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:5:263:365 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:5:276:390 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:5:361:855 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:5:365:502 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:5:368:141 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:5:473:123 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:5:576:364 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:5:663:930 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:42:5:680:941 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:5:682:673 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..5bd0a87d --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew1_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_double_write_skew1_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:6:865:190 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:6:878:827 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:6:964:576 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:6:976:310 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:6:986:287 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:6:988:827 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-23 18:42:7:75:430 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:7:77:463 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,2) + (1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,2) + + Q9 finished at: 2023-9-23 18:42:7:92:496 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:7:94:779 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..dcbaf01a --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_double_write_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:8:291:96 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:8:302:999 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:8:391:73 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:8:404:104 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:8:416:985 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:42:8:499:483 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:8:501:663 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:8:591:742 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:8:606:431 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:8:608:668 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt new file mode 100644 index 00000000..827e801c --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:9:813:643 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:9:823:966 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:9:913:311 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:9:925:391 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:9:938:934 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:42:10:21:797 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:10:114:175 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:10:214:73 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:10:229:8 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:10:231:396 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt new file mode 100644 index 00000000..f69544a6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_read_skew2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:14:280:542 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:14:291:679 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:14:380:606 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:14:391:885 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:14:403:883 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:14:490:376 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:14:492:212 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:14:581:245 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:14:595:19 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:14:597:60 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..e2ef31e3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew2_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_read_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:15:831:992 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:15:837:614 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:15:931:861 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:15:942:820 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:15:953:876 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:15:956:443 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:42:16:41:498 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:16:43:349 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:16:57:717 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:16:60:28 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..f93f1881 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_delete #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_read_skew_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:11:445:73 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:42:11:459:633 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:11:545:122 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:11:556:759 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:11:567:379 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:11:569:794 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:42:11:656:133 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:11:658:188 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + + Q9 finished at: 2023-9-23 18:42:11:671:508 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:11:673:678 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..43ddc2f0 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,59 @@ +#### db_type: cassandra #### +#### test_type: dda_read_skew_predicate_based_insert #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_read_skew_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:12:864:381 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q2 finished at: 2023-9-23 18:42:12:879:639 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:12:964:353 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-23 18:42:12:975:370 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-23 18:42:12:985:363 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:12:988:72 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (1,0) (0,0) + (1) expected_result: + null + (2) expected_result: + (0,0) (1,0) + +Q7 finished at: 2023-9-23 18:42:13:76:428 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:13:78:817 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,0) (1,0) + *(1) expected_result: + (0,0) (1,0) + *(2) expected_result: + (0,0) (1,0) + + Q9 finished at: 2023-9-23 18:42:13:92:536 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:13:94:563 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..f4d48ba3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:2:215:459 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:2:229:897 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:2:315:424 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:2:332:0 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:2:346:756 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q6 finished at: 2023-9-23 18:42:2:416:347 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:2:516:99 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:2:615:940 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:2:645:790 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:2:647:407 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..58d1aa0f --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,61 @@ +#### db_type: cassandra #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:3:821:367 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:3:834:987 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:3:921:331 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:3:935:356 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + (2) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:3:946:35 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:3:948:341 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:42:4:30:376 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:4:32:370 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:4:46:518 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:4:48:318 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt new file mode 100644 index 00000000..052bc8d3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:17:270:832 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:17:283:34 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:17:370:662 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:17:384:664 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + (3) expected_result: + (0,0) + (4) expected_result: + (0,0) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + + Q5 finished at: 2023-9-23 18:42:17:395:215 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:42:17:470:815 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:42:17:483:569 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + *(1) expected_result: + (1,1) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + (6) expected_result: + (1,0) + + Q8 finished at: 2023-9-23 18:42:17:497:32 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,1) + (1) expected_result: + (2,0) + (2) expected_result: + (2,0) + (3) expected_result: + (2,0) + *(4) expected_result: + (2,1) + *(5) expected_result: + (2,1) + *(6) expected_result: + (2,1) + +Q9 finished at: 2023-9-23 18:42:17:580:17 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:42:17:582:316 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:42:17:671:393 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:17:771:549 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:42:17:788:715 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:17:790:817 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..66fd0935 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,207 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_long_fork #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_mda_step_rat_long_fork test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_long_fork test run---------- + Q1-T4 execute opt: 'BEGIN;' + Q1 finished at: 2023-9-23 18:42:18:996:853 + Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + (4) expected_result: + (0,1) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + (7) expected_result: + (0,1) + (8) expected_result: + (0,1) + *(9) expected_result: + (0,0) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + *(13) expected_result: + (0,0) + *(14) expected_result: + (0,0) + + Q2 finished at: 2023-9-23 18:42:19:3:103 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-23 18:42:19:96:731 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-23 18:42:19:108:917 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:42:19:196:994 + Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + (6) expected_result: + (1,1) + (7) expected_result: + (1,1) + *(8) expected_result: + (1,0) + (9) expected_result: + (1,1) + (10) expected_result: + (1,1) + *(11) expected_result: + (1,0) + *(12) expected_result: + (1,0) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + + Q6 finished at: 2023-9-23 18:42:19:210:248 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + *(5) expected_result: + (0,1) + (6) expected_result: + (0,0) + *(7) expected_result: + (0,1) + *(8) expected_result: + (0,1) + *(9) expected_result: + (0,1) + (10) expected_result: + (0,0) + (11) expected_result: + (0,0) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + (14) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:42:19:223:687 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-23 18:42:19:297:72 + Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-23 18:42:19:309:930 + Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + (3) expected_result: + (1,0) + *(4) expected_result: + (1,1) + (5) expected_result: + (1,0) + *(6) expected_result: + (1,1) + (7) expected_result: + (1,0) + *(8) expected_result: + (1,1) + *(9) expected_result: + (1,1) + *(10) expected_result: + (1,1) + *(11) expected_result: + (1,1) + (12) expected_result: + (1,0) + (13) expected_result: + (1,0) + (14) expected_result: + (1,0) + + Q10 finished at: 2023-9-23 18:42:19:406:600 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:42:19:497:416 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:19:597:730 + Q13-T3 execute opt: 'COMMIT'; + Q13 finished at: 2023-9-23 18:42:19:697:817 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:19:699:827 + Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-9-23 18:42:19:713:758 + Q16-T4 execute opt: 'COMMIT'; + Q16 finished at: 2023-9-23 18:42:19:715:807 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..175bd3cb --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,109 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:20:948:415 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:20:958:850 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:21:46:801 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:21:49:932 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (1,) + (4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:42:21:54:270 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:42:21:146:896 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-23 18:42:21:150:920 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (0,) + (1) expected_result: + (,) + (2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q8 finished at: 2023-9-23 18:42:21:154:279 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (0,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + (3) expected_result: + (1,) + (4) expected_result: + (,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:42:21:257:364 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:42:21:259:765 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:42:21:348:973 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:21:449:37 + Q13-T4 execute sql: 'SELECT * FROM t1;' + current_result: + null + *(1) expected_result: + null + *(2) expected_result: + null + *(3) expected_result: + null + *(4) expected_result: + null + *(5) expected_result: + null + *(6) expected_result: + null + + Q13 finished at: 2023-9-23 18:42:21:458:524 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:21:460:709 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..2c6ea70f --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,106 @@ +#### db_type: cassandra #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:22:665:41 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-23 18:42:22:676:21 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:22:764:969 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-23 18:42:22:775:578 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-9-23 18:42:22:787:692 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:42:22:865:162 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-23 18:42:22:876:118 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + *(1) expected_result: + (1,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + (4) expected_result: + (,) + *(5) expected_result: + (1,) + (6) expected_result: + (,) + + Q8 finished at: 2023-9-23 18:42:22:888:357 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + current_result: + (1,) + *(1) expected_result: + (1,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + (6) expected_result: + (,) + +Q9 finished at: 2023-9-23 18:42:22:975:494 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:42:22:977:907 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:42:23:65:833 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:23:165:866 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) (2,1) + *(1) expected_result: + (0,1) (1,1) (2,1) + *(2) expected_result: + (0,1) (1,1) (2,1) + *(3) expected_result: + (0,1) (1,1) (2,1) + *(4) expected_result: + (0,1) (1,1) (2,1) + *(5) expected_result: + (0,1) (1,1) (2,1) + *(6) expected_result: + (0,1) (1,1) (2,1) + + Q13 finished at: 2023-9-23 18:42:23:181:706 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:23:183:733 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt new file mode 100644 index 00000000..649eb89b --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt @@ -0,0 +1,45 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_read #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_dirty_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_dirty_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:51:737:333 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:41:51:779:836 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:51:837:81 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:41:51:895:261 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:41:51:937:248 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:41:52:37:556 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,0) + + Q7 finished at: 2023-9-23 18:41:52:51:167 + Q8-T3 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:41:52:53:110 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..eaee4f89 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:54:824:870 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:41:54:843:875 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:54:923:801 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:41:54:939:796 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-23 18:41:55:42:113 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:41:55:125:612 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:41:55:225:71 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:41:55:237:655 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:41:55:239:628 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..afd9c9af --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:56:457:469 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:41:56:474:633 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:56:557:510 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,2) + (2) expected_result: + (0,0) + + Q4 finished at: 2023-9-23 18:41:56:572:429 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:41:56:574:841 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-23 18:41:56:671:683 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:41:56:673:826 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + *(2) expected_result: + (0,2) + + Q8 finished at: 2023-9-23 18:41:56:689:698 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:41:56:691:977 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..fa4ea306 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_lost_self_update test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_lost_self_update test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:0:676:745 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:0:680:938 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:0:776:723 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:0:780:824 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:42:0:879:553 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:42:0:879:950 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:0:979:28 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:0:986:28 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:0:986:421 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..c6607420 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:53:219:889 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:41:53:224:39 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:53:320:93 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:41:53:325:467 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + *(2) expected_result: + (0,1) + +Q5 finished at: 2023-9-23 18:41:53:426:510 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:41:53:522:762 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:41:53:622:431 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + *(1) expected_result: + (0,1) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:41:53:635:963 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:41:53:637:921 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..4eb1e6b3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,58 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:57:928:732 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:41:58:6:391 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:58:27:126 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-23 18:41:58:31:262 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:41:58:31:692 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:41:58:143:232 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:41:58:145:749 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + null + (1) expected_result: + (0,0) + *(2) expected_result: + null + + Q8 finished at: 2023-9-23 18:41:58:158:665 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:41:58:160:808 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..58f564da --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,57 @@ +#### db_type: cassandra #### +#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:41:59:327:163 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + null + *(1) expected_result: + null + (2) expected_result: + (0,0) + +Q2 finished at: 2023-9-23 18:41:59:345:859 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:41:59:427:286 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-23 18:41:59:443:94 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:41:59:445:499 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' + current_result: + (0,0) + (1) expected_result: + null + *(2) expected_result: + (0,0) + +Q6 finished at: 2023-9-23 18:41:59:542:200 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:41:59:544:540 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + + Q8 finished at: 2023-9-23 18:41:59:555:314 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:41:59:557:383 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..078594af --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:34:923:10 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:34:934:524 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:35:22:837 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:35:34:911 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:35:47:183 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:35:49:649 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + *(2) expected_result: + (1,1) + +Q7 finished at: 2023-9-23 18:42:35:130:362 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:35:132:514 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:35:145:329 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:35:147:493 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..8f8671be --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_full_write_skew_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:36:341:384 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:36:351:946 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:36:441:414 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:36:453:110 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:36:464:208 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:36:544:468 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:36:545:245 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:36:640:216 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:42:36:643:172 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:36:643:534 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..a68a2f82 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:37:750:667 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:37:756:484 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:37:850:600 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:37:862:200 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:37:873:583 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:37:954:96 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:38:51:44 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:38:150:865 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:42:38:164:964 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:38:166:844 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..4e4e1c13 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,47 @@ +#### db_type: cassandra #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:39:374:737 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:39:385:605 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:39:473:355 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:39:477:955 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:39:481:688 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:39:482:342 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:42:39:575:811 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:39:576:184 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + (1) expected_result: + (0,1) (1,1) + (2) expected_result: + (0,2) (1,2) + + Q9 finished at: 2023-9-23 18:42:39:578:920 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:39:579:317 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..9b5e375a --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:40:694:586 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:40:699:327 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:40:794:535 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:40:799:895 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:40:803:47 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:40:903:259 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:40:905:186 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:40:995:68 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:41:7:931 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:41:9:839 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..d30dbe57 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:42:183:118 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-23 18:42:42:191:999 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:42:283:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:42:295:112 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:42:307:66 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:42:392:1 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:42:483:811 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:42:583:754 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + (1) expected_result: + (0,1) (1,2) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:42:597:676 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:42:599:533 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..ba43e1a3 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:43:851:839 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:43:862:434 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:43:951:892 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:43:962:527 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:43:974:729 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:44:60:427 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:44:62:344 + Q8-T2 execute opt: 'COMMIT'; + Q8 finished at: 2023-9-23 18:42:44:152:284 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:44:164:876 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:44:166:971 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..6c401732 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:45:356:552 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:45:366:655 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:45:456:530 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:45:466:95 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:45:477:367 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-23 18:42:45:565:330 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:45:657:127 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:45:756:887 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:45:769:368 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:45:771:370 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..177435ab --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,54 @@ +#### db_type: cassandra #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:46:985:305 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:46:996:204 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:47:83:838 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-23 18:42:47:87:725 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:47:91:615 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:47:92:453 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-23 18:42:47:194:885 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-23 18:42:47:196:715 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) + *(1) expected_result: + (0,2) (1,1) + (2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-9-23 18:42:47:211:806 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:47:213:658 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..1a5b1ee6 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:48:470:390 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:48:481:386 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:48:570:191 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:48:582:49 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-23 18:42:48:594:336 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-23 18:42:48:669:335 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:42:48:675:598 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:42:48:681:328 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:42:48:779:115 +Q10-T1 execute opt: 'COMMIT'; +Q10 finished at: 2023-9-23 18:42:48:781:0 + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-23 18:42:48:871:98 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:48:971:20 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:42:48:983:430 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:48:985:228 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..6a5c0eef --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt @@ -0,0 +1,64 @@ +#### db_type: cassandra #### +#### test_type: mda_step_wat_c2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:50:224:535 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:50:234:972 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:50:324:400 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-23 18:42:50:335:814 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-23 18:42:50:424:648 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q6 finished at: 2023-9-23 18:42:50:534:206 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-23 18:42:50:634:461 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-23 18:42:50:645:812 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-23 18:42:50:725:853 + Q10-T2 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-23 18:42:50:825:509 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-23 18:42:50:925:264 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-23 18:42:51:23:812 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,3) (2,1) + (1) expected_result: + (0,2) (1,3) (2,3) + (2) expected_result: + (0,2) (1,2) (2,3) + (3) expected_result: + (0,1) (1,3) (2,3) + (4) expected_result: + (0,1) (1,3) (2,1) + (5) expected_result: + (0,2) (1,2) (2,1) + (6) expected_result: + (0,1) (1,2) (2,1) + + Q13 finished at: 2023-9-23 18:42:51:26:817 + Q14-T4 execute opt: 'COMMIT'; + Q14 finished at: 2023-9-23 18:42:51:27:157 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..5bb4ee3c --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:24:392:320 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:24:403:389 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:24:492:297 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:24:505:721 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-23 18:42:24:592:644 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:24:692:845 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:42:24:701:170 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:42:25:183:591 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:25:185:491 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..34199762 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_dirty_write_2commit #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_dirty_write_2commit test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_2commit test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:25:960:432 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:25:970:925 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:26:58:994 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:26:62:219 +Q5-T1 execute opt: 'COMMIT'; +Q5 finished at: 2023-9-23 18:42:26:160:343 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:26:260:976 + Q7-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,2) + + Q7 finished at: 2023-9-23 18:42:26:269:400 + Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' + Q8 finished at: 2023-9-23 18:42:26:718:917 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:26:720:625 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt new file mode 100644 index 00000000..872f8975 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:27:508:903 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:27:520:181 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:27:608:836 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:27:622:498 +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-23 18:42:27:717:746 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:42:27:719:732 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:27:809:665 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:42:27:818:408 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:27:820:345 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..843a87ce --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt @@ -0,0 +1,46 @@ +#### db_type: cassandra #### +#### test_type: sda_full_write_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:29:12:381 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:29:23:953 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:29:112:357 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:29:124:105 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:42:29:126:200 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-9-23 18:42:29:221:439 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:29:223:647 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,3) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,3) + + Q8 finished at: 2023-9-23 18:42:29:232:840 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:29:234:884 + +The current result is consistent with the [(2) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..c14fe920 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:33:515:868 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-23 18:42:33:518:879 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:33:617:363 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:33:629:877 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-23 18:42:33:632:780 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,2) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + +Q6 finished at: 2023-9-23 18:42:33:726:463 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:33:728:440 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,2) + *(1) expected_result: + (0,2) + (2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:33:738:593 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:33:740:733 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..fac079e4 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c1 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_lost_update_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:30:449:340 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:42:30:458:502 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:30:549:290 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:30:561:392 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:42:30:659:448 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-23 18:42:30:661:471 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-23 18:42:30:748:176 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:30:750:435 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:30:750:802 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..29d9e325 --- /dev/null +++ b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt @@ -0,0 +1,51 @@ +#### db_type: cassandra #### +#### test_type: sda_lost_update_c2 #### +#### isolation: two #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = two for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-23 18:42:31:922:394 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-23 18:42:31:931:719 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-23 18:42:32:22:235 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-23 18:42:32:34:3 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 finished at: 2023-9-23 18:42:32:132:766 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-23 18:42:32:223:80 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-23 18:42:32:322:883 + Q8-T3 execute sql: 'SELECT * FROM t1;' + current_result: + (0,1) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,1) + + Q8 finished at: 2023-9-23 18:42:32:331:257 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-23 18:42:32:333:55 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies + From e37ea5337aaf92768a96583ae2c1a2931cbdb80a Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Mon, 25 Sep 2023 12:19:38 +0800 Subject: [PATCH 47/81] Fixed Cassandra results and added YugabyteDB results --- src/dbtest/auto_test.sh | 4 +- src/dbtest/auto_test_all.sh | 12 +- src/dbtest/src/sql_cntl.cc | 28 +-- src/dbtest/src/sqltest.cc | 24 +- .../centralizend_result/cassandra/README.md | 13 +- .../cassandra/all/iat_dda_write_skew.txt | 61 ------ .../all/iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../all/iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../all/iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../all/iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../all/rat_dda_double_write_skew1.txt | 54 ----- .../all/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/all/rat_dda_read_skew.txt | 61 ------ .../cassandra/all/rat_dda_read_skew2.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ .../cassandra/all/rat_dda_write_read_skew.txt | 61 ------ .../all/rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/all/rat_mda_step_rat.txt | 109 --------- .../all/rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/all/rat_sda_dirty_read.txt | 45 ---- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../all/rat_sda_non_repeatable_read.txt | 58 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../all/wat_dda_full_write_skew_c1.txt | 47 ---- .../all/wat_dda_read_write_skew1_c1.txt | 54 ----- .../all/wat_dda_read_write_skew1_c2.txt | 54 ----- .../all/wat_dda_read_write_skew2_c2.txt | 54 ----- .../cassandra/all/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/all/wat_mda_step_wat_c2.txt | 64 ------ .../all/wat_sda_dirty_write_1abort.txt | 46 ---- .../all/wat_sda_dirty_write_2commit.txt | 46 ---- .../cassandra/all/wat_sda_full_write.txt | 46 ---- .../all/wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../cassandra/all/wat_sda_lost_update_c1.txt | 51 ----- .../cassandra/all/wat_sda_lost_update_c2.txt | 51 ----- .../any/iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../cassandra/any/iat_mda_step_iat.txt | 109 --------- ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../any/iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../any/iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../any/rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../any/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/any/rat_dda_read_skew.txt | 61 ------ .../any/rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../any/rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/any/rat_mda_step_rat.txt | 109 --------- .../any/rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/any/rat_sda_dirty_read.txt | 45 ---- .../any/rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../any/rat_sda_lost_self_update.txt | 51 ----- .../any/rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../any/wat_dda_full_write_skew_c2.txt | 47 ---- .../any/wat_dda_full_write_skew_committed.txt | 47 ---- .../any/wat_dda_read_write_skew1_c2.txt | 54 ----- .../any/wat_dda_read_write_skew2_c1.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../cassandra/any/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/any/wat_mda_step_wat_c2.txt | 64 ------ .../any/wat_sda_dirty_write_2commit.txt | 46 ---- .../any/wat_sda_full_write_committed.txt | 46 ---- .../cassandra/any/wat_sda_lost_update_c2.txt | 51 ----- .../local_one/iat_dda_read_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ .../local_one/rat_dda_double_write_skew1.txt | 54 ----- .../local_one/rat_dda_write_read_skew.txt | 61 ------ .../rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/local_one/rat_mda_step_rat.txt | 109 --------- ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- .../local_one/rat_sda_intermediate_read.txt | 51 ----- .../local_one/wat_dda_full_write_skew_c2.txt | 47 ---- .../wat_dda_full_write_skew_committed.txt | 47 ---- .../local_one/wat_dda_read_write_skew1_c1.txt | 54 ----- .../local_one/wat_dda_read_write_skew1_c2.txt | 54 ----- .../local_one/wat_dda_read_write_skew2_c1.txt | 54 ----- .../local_one/wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../local_one/wat_sda_dirty_write_1abort.txt | 46 ---- .../local_one/wat_sda_full_write.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../local_one/wat_sda_lost_update_c2.txt | 51 ----- .../rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 29 --- .../iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- .../local_serial/iat_dda_write_skew.txt | 61 ------ .../iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../local_serial/iat_mda_step_iat.txt | 109 --------- ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../local_serial/rat_dda_read_skew.txt | 61 ------ .../local_serial/rat_dda_read_skew2.txt | 61 ------ .../rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../local_serial/rat_dda_write_read_skew.txt | 61 ------ .../local_serial/rat_mda_step_rat.txt | 109 --------- .../rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../local_serial/rat_sda_dirty_read.txt | 45 ---- .../rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../local_serial/rat_sda_lost_self_update.txt | 51 ----- .../rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../wat_dda_full_write_skew_c1.txt | 47 ---- .../wat_dda_full_write_skew_c2.txt | 47 ---- .../wat_dda_full_write_skew_committed.txt | 47 ---- .../wat_dda_read_write_skew1_c1.txt | 54 ----- .../wat_dda_read_write_skew1_c2.txt | 54 ----- .../wat_dda_read_write_skew2_c1.txt | 54 ----- .../wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../local_serial/wat_mda_step_wat_c1.txt | 64 ------ .../local_serial/wat_mda_step_wat_c2.txt | 64 ------ .../wat_sda_dirty_write_1abort.txt | 46 ---- .../local_serial/wat_sda_full_write.txt | 46 ---- .../wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../local_serial/wat_sda_lost_update_c1.txt | 51 ----- .../local_serial/wat_sda_lost_update_c2.txt | 51 ----- .../one/iat_dda_read_skew_committed.txt | 20 +- .../iat_dda_read_write_skew1_committed.txt | 20 +- .../cassandra/one/iat_dda_write_skew.txt | 20 +- .../one/iat_dda_write_skew_committed.txt | 20 +- ...skew_predicate_based-intersecting_data.txt | 2 +- ...w_predicate_based-overdraft_protection.txt | 20 +- .../cassandra/one/iat_mda_step_iat.txt | 28 +-- ...a_step_iat_causality_violation_anomaly.txt | 26 +-- .../one/iat_mda_step_iat_cross_phenomenon.txt | 32 +-- ...at_mda_step_iat_predicate_based_delete.txt | 28 +-- ...at_mda_step_iat_predicate_based_insert.txt | 28 +-- ...step_iat_read_only_transaction_anomaly.txt | 30 +-- .../one/iat_mda_step_iat_uname_anomaly.txt | 36 +-- .../one/iat_sda_lost_update_committed.txt | 18 +- .../iat_sda_non_repeatable_read_committed.txt | 18 +- .../one/rat_dda_double_write_skew1.txt | 20 +- .../rat_dda_double_write_skew1_committed.txt | 20 +- .../one/rat_dda_double_write_skew2.txt | 20 +- .../cassandra/one/rat_dda_read_skew.txt | 20 +- .../cassandra/one/rat_dda_read_skew2.txt | 20 +- .../one/rat_dda_read_skew2_committed.txt | 20 +- ...t_dda_read_skew_predicate_based_delete.txt | 20 +- ...t_dda_read_skew_predicate_based_insert.txt | 20 +- .../cassandra/one/rat_dda_write_read_skew.txt | 20 +- .../one/rat_dda_write_read_skew_committed.txt | 20 +- .../cassandra/one/rat_mda_step_rat.txt | 28 +-- .../one/rat_mda_step_rat_long_fork.txt | 32 +-- ...at_mda_step_rat_predicate_based_delete.txt | 28 +-- ...at_mda_step_rat_predicate_based_insert.txt | 28 +-- .../cassandra/one/rat_sda_dirty_read.txt | 16 +- .../one/rat_sda_intermediate_read.txt | 18 +- .../rat_sda_intermediate_read_committed.txt | 18 +- .../one/rat_sda_lost_self_update.txt | 18 +- .../one/rat_sda_non_repeatable_read.txt | 18 +- ...le_read_predicate_based-phantom_delete.txt | 18 +- ...le_read_predicate_based-phantom_insert.txt | 18 +- .../wat_dda_double_write_skew2_committed.txt | 20 +- .../one/wat_dda_full_write_skew_c1.txt | 20 +- .../one/wat_dda_full_write_skew_c2.txt | 20 +- .../one/wat_dda_full_write_skew_committed.txt | 20 +- .../one/wat_dda_read_write_skew1_c1.txt | 20 +- .../one/wat_dda_read_write_skew1_c2.txt | 20 +- .../one/wat_dda_read_write_skew2_c1.txt | 20 +- .../one/wat_dda_read_write_skew2_c2.txt | 20 +- .../wat_dda_read_write_skew2_committed.txt | 20 +- .../cassandra/one/wat_mda_step_wat_c1.txt | 28 +-- .../cassandra/one/wat_mda_step_wat_c2.txt | 28 +-- .../one/wat_sda_dirty_write_1abort.txt | 18 +- .../one/wat_sda_dirty_write_2commit.txt | 18 +- .../cassandra/one/wat_sda_full_write.txt | 18 +- .../one/wat_sda_full_write_committed.txt | 18 +- .../wat_sda_lost_self_update_committed.txt | 18 +- .../cassandra/one/wat_sda_lost_update_c1.txt | 18 +- .../cassandra/one/wat_sda_lost_update_c2.txt | 18 +- .../quorum/iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- .../cassandra/quorum/iat_dda_write_skew.txt | 61 ------ .../quorum/iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../cassandra/quorum/iat_mda_step_iat.txt | 109 --------- ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- .../quorum/iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../quorum/iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../quorum/rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../quorum/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/quorum/rat_dda_read_skew.txt | 61 ------ .../cassandra/quorum/rat_dda_read_skew2.txt | 61 ------ .../quorum/rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../quorum/rat_dda_write_read_skew.txt | 61 ------ .../rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/quorum/rat_mda_step_rat.txt | 109 --------- ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/quorum/rat_sda_dirty_read.txt | 45 ---- .../quorum/rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../quorum/rat_sda_lost_self_update.txt | 51 ----- .../quorum/rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../quorum/wat_dda_full_write_skew_c1.txt | 47 ---- .../quorum/wat_dda_full_write_skew_c2.txt | 47 ---- .../wat_dda_full_write_skew_committed.txt | 47 ---- .../quorum/wat_dda_read_write_skew1_c1.txt | 54 ----- .../quorum/wat_dda_read_write_skew1_c2.txt | 54 ----- .../quorum/wat_dda_read_write_skew2_c1.txt | 54 ----- .../quorum/wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../cassandra/quorum/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/quorum/wat_mda_step_wat_c2.txt | 64 ------ .../quorum/wat_sda_dirty_write_1abort.txt | 46 ---- .../quorum/wat_sda_dirty_write_2commit.txt | 46 ---- .../cassandra/quorum/wat_sda_full_write.txt | 46 ---- .../quorum/wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../quorum/wat_sda_lost_update_c1.txt | 51 ----- .../quorum/wat_sda_lost_update_c2.txt | 51 ----- .../result_summary/all_total-result.txt | 108 --------- .../result_summary/any_total-result.txt | 108 --------- .../result_summary/local_one_total-result.txt | 108 --------- .../local_serial_total-result.txt | 108 --------- .../result_summary/quorum_total-result.txt | 108 --------- .../result_summary/serial_total-result.txt | 108 --------- .../result_summary/three_total-result.txt | 108 --------- .../result_summary/two_total-result.txt | 108 --------- .../serial/iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- .../cassandra/serial/iat_dda_write_skew.txt | 61 ------ .../serial/iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../cassandra/serial/iat_mda_step_iat.txt | 109 --------- ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../serial/iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../serial/iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../serial/rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../serial/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/serial/rat_dda_read_skew.txt | 61 ------ .../cassandra/serial/rat_dda_read_skew2.txt | 61 ------ .../serial/rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../serial/rat_dda_write_read_skew.txt | 61 ------ .../rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/serial/rat_mda_step_rat.txt | 109 --------- .../serial/rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/serial/rat_sda_dirty_read.txt | 45 ---- .../serial/rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../serial/rat_sda_lost_self_update.txt | 51 ----- .../serial/rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../serial/wat_dda_full_write_skew_c1.txt | 47 ---- .../serial/wat_dda_full_write_skew_c2.txt | 47 ---- .../wat_dda_full_write_skew_committed.txt | 47 ---- .../serial/wat_dda_read_write_skew1_c1.txt | 54 ----- .../serial/wat_dda_read_write_skew1_c2.txt | 54 ----- .../serial/wat_dda_read_write_skew2_c1.txt | 54 ----- .../serial/wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../cassandra/serial/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/serial/wat_mda_step_wat_c2.txt | 64 ------ .../serial/wat_sda_dirty_write_1abort.txt | 46 ---- .../serial/wat_sda_dirty_write_2commit.txt | 46 ---- .../cassandra/serial/wat_sda_full_write.txt | 46 ---- .../serial/wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../serial/wat_sda_lost_update_c1.txt | 51 ----- .../serial/wat_sda_lost_update_c2.txt | 51 ----- .../three/iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- .../cassandra/three/iat_dda_write_skew.txt | 61 ------ .../three/iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ .../cassandra/three/iat_mda_step_iat.txt | 109 --------- ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...at_mda_step_iat_predicate_based_delete.txt | 109 --------- ...at_mda_step_iat_predicate_based_insert.txt | 106 --------- ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../three/iat_mda_step_iat_uname_anomaly.txt | 162 -------------- .../three/iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../three/rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../three/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/three/rat_dda_read_skew.txt | 61 ------ .../cassandra/three/rat_dda_read_skew2.txt | 61 ------ .../three/rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../three/rat_dda_write_read_skew.txt | 61 ------ .../rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/three/rat_mda_step_rat.txt | 109 --------- .../three/rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/three/rat_sda_dirty_read.txt | 45 ---- .../three/rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../three/rat_sda_lost_self_update.txt | 51 ----- .../three/rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../three/wat_dda_full_write_skew_c1.txt | 47 ---- .../three/wat_dda_full_write_skew_c2.txt | 47 ---- .../wat_dda_full_write_skew_committed.txt | 47 ---- .../three/wat_dda_read_write_skew1_c1.txt | 54 ----- .../three/wat_dda_read_write_skew1_c2.txt | 54 ----- .../three/wat_dda_read_write_skew2_c1.txt | 54 ----- .../three/wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../cassandra/three/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/three/wat_mda_step_wat_c2.txt | 64 ------ .../three/wat_sda_dirty_write_1abort.txt | 46 ---- .../three/wat_sda_dirty_write_2commit.txt | 46 ---- .../cassandra/three/wat_sda_full_write.txt | 46 ---- .../three/wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../three/wat_sda_lost_update_c1.txt | 51 ----- .../three/wat_sda_lost_update_c2.txt | 51 ----- .../two/iat_dda_read_skew_committed.txt | 61 ------ .../iat_dda_read_write_skew1_committed.txt | 54 ----- .../cassandra/two/iat_dda_write_skew.txt | 61 ------ .../two/iat_dda_write_skew_committed.txt | 61 ------ ...skew_predicate_based-intersecting_data.txt | 17 -- ...w_predicate_based-overdraft_protection.txt | 61 ------ ...a_step_iat_causality_violation_anomaly.txt | 106 --------- .../two/iat_mda_step_iat_cross_phenomenon.txt | 207 ------------------ ...step_iat_read_only_transaction_anomaly.txt | 140 ------------ .../two/iat_sda_lost_update_committed.txt | 51 ----- .../iat_sda_non_repeatable_read_committed.txt | 58 ----- .../two/rat_dda_double_write_skew1.txt | 54 ----- .../rat_dda_double_write_skew1_committed.txt | 54 ----- .../two/rat_dda_double_write_skew2.txt | 54 ----- .../cassandra/two/rat_dda_read_skew.txt | 61 ------ .../cassandra/two/rat_dda_read_skew2.txt | 61 ------ .../two/rat_dda_read_skew2_committed.txt | 61 ------ ...t_dda_read_skew_predicate_based_delete.txt | 61 ------ ...t_dda_read_skew_predicate_based_insert.txt | 59 ----- .../cassandra/two/rat_dda_write_read_skew.txt | 61 ------ .../two/rat_dda_write_read_skew_committed.txt | 61 ------ .../cassandra/two/rat_mda_step_rat.txt | 109 --------- .../two/rat_mda_step_rat_long_fork.txt | 207 ------------------ ...at_mda_step_rat_predicate_based_delete.txt | 109 --------- ...at_mda_step_rat_predicate_based_insert.txt | 106 --------- .../cassandra/two/rat_sda_dirty_read.txt | 45 ---- .../two/rat_sda_intermediate_read.txt | 51 ----- .../rat_sda_intermediate_read_committed.txt | 51 ----- .../two/rat_sda_lost_self_update.txt | 51 ----- .../two/rat_sda_non_repeatable_read.txt | 58 ----- ...le_read_predicate_based-phantom_delete.txt | 58 ----- ...le_read_predicate_based-phantom_insert.txt | 57 ----- .../wat_dda_double_write_skew2_committed.txt | 54 ----- .../two/wat_dda_full_write_skew_c1.txt | 47 ---- .../two/wat_dda_full_write_skew_c2.txt | 47 ---- .../two/wat_dda_full_write_skew_committed.txt | 47 ---- .../two/wat_dda_read_write_skew1_c1.txt | 54 ----- .../two/wat_dda_read_write_skew1_c2.txt | 54 ----- .../two/wat_dda_read_write_skew2_c1.txt | 54 ----- .../two/wat_dda_read_write_skew2_c2.txt | 54 ----- .../wat_dda_read_write_skew2_committed.txt | 54 ----- .../cassandra/two/wat_mda_step_wat_c1.txt | 64 ------ .../cassandra/two/wat_mda_step_wat_c2.txt | 64 ------ .../two/wat_sda_dirty_write_1abort.txt | 46 ---- .../two/wat_sda_dirty_write_2commit.txt | 46 ---- .../cassandra/two/wat_sda_full_write.txt | 46 ---- .../two/wat_sda_full_write_committed.txt | 46 ---- .../wat_sda_lost_self_update_committed.txt | 51 ----- .../cassandra/two/wat_sda_lost_update_c1.txt | 51 ----- .../cassandra/two/wat_sda_lost_update_c2.txt | 51 ----- .../centralizend_result/yugabyte/README.md | 48 ++++ .../iat_dda_read_skew_committed.txt | 48 ++-- .../iat_dda_read_write_skew1_committed.txt | 46 ++-- .../serializable}/iat_dda_write_skew.txt | 46 ++-- .../iat_dda_write_skew_committed.txt | 46 ++-- ...skew_predicate_based-intersecting_data.txt | 78 +++++++ ...w_predicate_based-overdraft_protection.txt | 16 ++ .../serializable}/iat_mda_step_iat.txt | 63 ++---- ...a_step_iat_causality_violation_anomaly.txt | 92 ++++++++ .../iat_mda_step_iat_cross_phenomenon.txt | 147 +++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 63 +++--- ...at_mda_step_iat_predicate_based_insert.txt | 63 ++---- ...step_iat_read_only_transaction_anomaly.txt | 62 ++---- .../iat_mda_step_iat_uname_anomaly.txt | 70 +++--- .../iat_sda_lost_update_committed.txt | 44 ++-- .../iat_sda_non_repeatable_read_committed.txt | 44 ++-- .../rat_dda_double_write_skew1.txt | 48 ++++ .../rat_dda_double_write_skew1_committed.txt | 46 ++-- .../rat_dda_double_write_skew2.txt | 46 ++-- .../serializable/rat_dda_read_skew.txt | 46 ++++ .../serializable}/rat_dda_read_skew2.txt | 46 ++-- .../rat_dda_read_skew2_committed.txt | 46 ++-- ...t_dda_read_skew_predicate_based_delete.txt | 40 ++-- ...t_dda_read_skew_predicate_based_insert.txt | 46 ++-- .../serializable/rat_dda_write_read_skew.txt | 55 +++++ .../rat_dda_write_read_skew_committed.txt | 54 +++-- .../serializable/rat_mda_step_rat.txt | 64 ++++++ .../rat_mda_step_rat_long_fork.txt | 148 ++++++------- ...at_mda_step_rat_predicate_based_delete.txt | 64 ++++++ ...at_mda_step_rat_predicate_based_insert.txt | 61 ++++++ .../serializable}/rat_sda_dirty_read.txt | 42 ++-- .../rat_sda_intermediate_read.txt | 45 ++++ .../rat_sda_intermediate_read_committed.txt | 43 ++++ .../rat_sda_lost_self_update.txt | 42 ++-- .../rat_sda_non_repeatable_read.txt | 50 +++++ ...le_read_predicate_based-phantom_delete.txt | 44 ++-- ...le_read_predicate_based-phantom_insert.txt | 44 ++-- .../wat_dda_double_write_skew2_committed.txt | 48 ++-- .../wat_dda_full_write_skew_c1.txt | 44 ++-- .../wat_dda_full_write_skew_c2.txt | 42 ++-- .../wat_dda_full_write_skew_committed.txt | 44 ++-- .../wat_dda_read_write_skew1_c1.txt | 46 ++-- .../wat_dda_read_write_skew1_c2.txt | 46 ++++ .../wat_dda_read_write_skew2_c1.txt | 46 ++-- .../wat_dda_read_write_skew2_c2.txt | 37 ++++ .../wat_dda_read_write_skew2_committed.txt | 46 ++-- .../serializable}/wat_mda_step_wat_c1.txt | 52 +++-- .../serializable}/wat_mda_step_wat_c2.txt | 52 +++-- .../wat_sda_dirty_write_1abort.txt | 30 +-- .../wat_sda_dirty_write_2commit.txt | 28 ++- .../serializable}/wat_sda_full_write.txt | 36 +-- .../wat_sda_full_write_committed.txt | 40 ++-- .../wat_sda_lost_self_update_committed.txt | 44 ++-- .../serializable}/wat_sda_lost_update_c1.txt | 42 ++-- .../serializable/wat_sda_lost_update_c2.txt | 43 ++++ .../snapshot/iat_dda_read_skew_committed.txt | 46 ++++ .../iat_dda_read_write_skew1_committed.txt | 46 ++-- .../snapshot}/iat_dda_write_skew.txt | 30 +-- .../iat_dda_write_skew_committed.txt | 46 ++-- ...skew_predicate_based-intersecting_data.txt | 78 +++++++ ...w_predicate_based-overdraft_protection.txt | 16 ++ .../snapshot}/iat_mda_step_iat.txt | 42 ++-- ...a_step_iat_causality_violation_anomaly.txt | 75 ++----- .../iat_mda_step_iat_cross_phenomenon.txt | 116 ++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 42 ++-- ...at_mda_step_iat_predicate_based_insert.txt | 42 ++-- ...step_iat_read_only_transaction_anomaly.txt | 44 ++-- .../iat_mda_step_iat_uname_anomaly.txt | 85 +++---- .../iat_sda_lost_update_committed.txt | 44 ++-- .../iat_sda_non_repeatable_read_committed.txt | 44 ++-- .../snapshot/rat_dda_double_write_skew1.txt | 48 ++++ .../rat_dda_double_write_skew1_committed.txt | 46 ++-- .../snapshot}/rat_dda_double_write_skew2.txt | 44 ++-- .../snapshot}/rat_dda_read_skew.txt | 42 ++-- .../snapshot}/rat_dda_read_skew2.txt | 46 ++-- .../rat_dda_read_skew2_committed.txt | 46 ++-- ...t_dda_read_skew_predicate_based_delete.txt | 40 ++-- ...t_dda_read_skew_predicate_based_insert.txt | 46 ++-- .../snapshot}/rat_dda_write_read_skew.txt | 42 ++-- .../rat_dda_write_read_skew_committed.txt | 46 ++++ .../snapshot/rat_mda_step_rat.txt} | 92 ++++---- .../snapshot}/rat_mda_step_rat_long_fork.txt | 118 +++++----- ...at_mda_step_rat_predicate_based_delete.txt | 68 +++--- ...at_mda_step_rat_predicate_based_insert.txt | 84 +++---- .../snapshot}/rat_sda_dirty_read.txt | 42 ++-- .../snapshot}/rat_sda_intermediate_read.txt | 40 ++-- .../rat_sda_intermediate_read_committed.txt | 42 ++-- .../snapshot}/rat_sda_lost_self_update.txt | 42 ++-- .../snapshot}/rat_sda_non_repeatable_read.txt | 42 ++-- ...le_read_predicate_based-phantom_delete.txt | 44 ++-- ...le_read_predicate_based-phantom_insert.txt | 44 ++-- .../wat_dda_double_write_skew2_committed.txt | 39 ++++ .../snapshot}/wat_dda_full_write_skew_c1.txt | 44 ++-- .../snapshot/wat_dda_full_write_skew_c2.txt | 41 ++++ .../wat_dda_full_write_skew_committed.txt | 39 ++++ .../snapshot/wat_dda_read_write_skew1_c1.txt | 48 ++++ .../snapshot/wat_dda_read_write_skew1_c2.txt | 48 ++++ .../snapshot/wat_dda_read_write_skew2_c1.txt | 46 ++++ .../snapshot}/wat_dda_read_write_skew2_c2.txt | 42 ++-- .../wat_dda_read_write_skew2_committed.txt | 46 ++++ .../yugabyte/snapshot/wat_mda_step_wat_c1.txt | 49 +++++ .../yugabyte/snapshot/wat_mda_step_wat_c2.txt | 51 +++++ .../snapshot/wat_sda_dirty_write_1abort.txt | 34 +++ .../snapshot}/wat_sda_dirty_write_2commit.txt | 30 +-- .../yugabyte/snapshot/wat_sda_full_write.txt | 36 +++ .../snapshot/wat_sda_full_write_committed.txt | 36 +++ .../wat_sda_lost_self_update_committed.txt | 36 +++ .../snapshot}/wat_sda_lost_update_c1.txt | 42 ++-- .../snapshot/wat_sda_lost_update_c2.txt | 43 ++++ 541 files changed, 4440 insertions(+), 28494 deletions(-) delete mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/all_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/any_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/three_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/result_summary/two_total-result.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt delete mode 100644 test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt delete mode 100644 test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/yugabyte/README.md rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/iat_dda_read_skew_committed.txt (71%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/iat_dda_read_write_skew1_committed.txt (69%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/iat_dda_write_skew.txt (70%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/iat_dda_write_skew_committed.txt (70%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename test_result/centralizend_result/{cassandra/two => yugabyte/serializable}/iat_mda_step_iat.txt (56%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt rename test_result/centralizend_result/{cassandra/two => yugabyte/serializable}/iat_mda_step_iat_predicate_based_delete.txt (61%) rename test_result/centralizend_result/{cassandra/two => yugabyte/serializable}/iat_mda_step_iat_predicate_based_insert.txt (56%) rename test_result/centralizend_result/{cassandra/quorum => yugabyte/serializable}/iat_mda_step_iat_read_only_transaction_anomaly.txt (71%) rename test_result/centralizend_result/{cassandra/two => yugabyte/serializable}/iat_mda_step_iat_uname_anomaly.txt (70%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/iat_sda_lost_update_committed.txt (67%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/iat_sda_non_repeatable_read_committed.txt (70%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_dda_double_write_skew1_committed.txt (71%) rename test_result/centralizend_result/{cassandra/local_serial => yugabyte/serializable}/rat_dda_double_write_skew2.txt (70%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/rat_dda_read_skew2.txt (71%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_dda_read_skew2_committed.txt (72%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/rat_dda_read_skew_predicate_based_delete.txt (76%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_dda_read_skew_predicate_based_insert.txt (71%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt rename test_result/centralizend_result/{cassandra/local_serial => yugabyte/serializable}/rat_dda_write_read_skew_committed.txt (73%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt rename test_result/centralizend_result/{cassandra/quorum => yugabyte/serializable}/rat_mda_step_rat_long_fork.txt (70%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt rename test_result/centralizend_result/{cassandra/local_quorum => yugabyte/serializable}/rat_sda_dirty_read.txt (64%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_sda_lost_self_update.txt (69%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (70%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (70%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/wat_dda_double_write_skew2_committed.txt (71%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/wat_dda_full_write_skew_c1.txt (69%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/wat_dda_full_write_skew_c2.txt (69%) rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/wat_dda_full_write_skew_committed.txt (69%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/wat_dda_read_write_skew1_c1.txt (69%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/wat_dda_read_write_skew2_c1.txt (69%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/serializable}/wat_dda_read_write_skew2_committed.txt (69%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/wat_mda_step_wat_c1.txt (76%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/wat_mda_step_wat_c2.txt (75%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/wat_sda_dirty_write_1abort.txt (76%) rename test_result/centralizend_result/{cassandra/local_serial => yugabyte/serializable}/wat_sda_dirty_write_2commit.txt (76%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/wat_sda_full_write.txt (69%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/serializable}/wat_sda_full_write_committed.txt (69%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/wat_sda_lost_self_update_committed.txt (69%) rename test_result/centralizend_result/{cassandra/any => yugabyte/serializable}/wat_sda_lost_update_c1.txt (67%) create mode 100644 test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_dda_read_write_skew1_committed.txt (70%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_dda_write_skew.txt (80%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_dda_write_skew_committed.txt (71%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt rename test_result/centralizend_result/{cassandra/all => yugabyte/snapshot}/iat_mda_step_iat.txt (86%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_mda_step_iat_causality_violation_anomaly.txt (52%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_mda_step_iat_predicate_based_delete.txt (86%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_mda_step_iat_predicate_based_insert.txt (86%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_mda_step_iat_read_only_transaction_anomaly.txt (86%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_mda_step_iat_uname_anomaly.txt (67%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_sda_lost_update_committed.txt (69%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/iat_sda_non_repeatable_read_committed.txt (72%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_double_write_skew1_committed.txt (73%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_double_write_skew2.txt (72%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_read_skew.txt (72%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_read_skew2.txt (73%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_read_skew2_committed.txt (73%) rename test_result/centralizend_result/{cassandra/any => yugabyte/snapshot}/rat_dda_read_skew_predicate_based_delete.txt (78%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_dda_read_skew_predicate_based_insert.txt (73%) rename test_result/centralizend_result/{cassandra/any => yugabyte/snapshot}/rat_dda_write_read_skew.txt (73%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt rename test_result/centralizend_result/{cassandra/local_one/iat_mda_step_iat.txt => yugabyte/snapshot/rat_mda_step_rat.txt} (78%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_mda_step_rat_long_fork.txt (86%) rename test_result/centralizend_result/{cassandra/any => yugabyte/snapshot}/rat_mda_step_rat_predicate_based_delete.txt (80%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_mda_step_rat_predicate_based_insert.txt (76%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_dirty_read.txt (66%) rename test_result/centralizend_result/{cassandra/all => yugabyte/snapshot}/rat_sda_intermediate_read.txt (71%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_intermediate_read_committed.txt (71%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_lost_self_update.txt (70%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_non_repeatable_read.txt (71%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt (72%) rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt (71%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt rename test_result/centralizend_result/{cassandra/any => yugabyte/snapshot}/wat_dda_full_write_skew_c1.txt (70%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt rename test_result/centralizend_result/{cassandra/any => yugabyte/snapshot}/wat_dda_read_write_skew2_c2.txt (53%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/wat_sda_dirty_write_2commit.txt (77%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt rename test_result/centralizend_result/{cassandra/local_one => yugabyte/snapshot}/wat_sda_lost_update_c1.txt (68%) create mode 100644 test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt diff --git a/src/dbtest/auto_test.sh b/src/dbtest/auto_test.sh index 80151847..54894305 100755 --- a/src/dbtest/auto_test.sh +++ b/src/dbtest/auto_test.sh @@ -39,5 +39,7 @@ then elif [ $db == "cassandra" ] then ./3ts_dbtest -isolation=$2 -db_type="cassandra" -user="username" -passwd="password" -case_dir="cassandra" +elif [ $db == "yugabyte" ] +then + ./3ts_dbtest -isolation=$2 -db_type="yugabyte" -user="username" -passwd="password" -case_dir="yugabyte" fi - diff --git a/src/dbtest/auto_test_all.sh b/src/dbtest/auto_test_all.sh index 70ebeada..1ed8f507 100755 --- a/src/dbtest/auto_test_all.sh +++ b/src/dbtest/auto_test_all.sh @@ -33,13 +33,7 @@ set -x ./auto_test.sh "mariadb" "repeatable-read" ./auto_test.sh "mariadb" "serializable" -./auto_test.sh "cassandra" "any" ./auto_test.sh "cassandra" "one" -./auto_test.sh "cassandra" "two" -./auto_test.sh "cassandra" "three" -./auto_test.sh "cassandra" "quorum" -./auto_test.sh "cassandra" "all" -./auto_test.sh "cassandra" "local_quorum" -./auto_test.sh "cassandra" "local_one" -./auto_test.sh "cassandra" "serial" -./auto_test.sh "cassandra" "local_serial" + +./auto_test.sh "yugabyte" "serializable" +./auto_test.sh "yugabyte" "snapshot" \ No newline at end of file diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 4538ec56..c702f507 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -561,37 +561,15 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o // https://cassandra.apache.org/doc/4.1/cassandra/tools/cqlsh.html#consistency if (db_type == "cassandra") { std::string iso; - if (opt == "any") { - iso = "any"; - } else if (opt == "one") { - iso = "one"; - } else if (opt == "two") { - iso = "two"; - } else if (opt == "three") { - iso = "three"; - } else if (opt == "quorum") { - iso = "quorum"; - } else if (opt == "all") { - iso = "all"; - } else if (opt == "local_quorum") { - iso = "local_quorum"; - } else if (opt == "local_one") { - iso = "local_one"; - } else if (opt == "serial") { - iso = "serial"; - } else if (opt == "local_serial") { - iso = "local_serial"; + if (opt == "one") { + iso = "one"; } else { std::cout << "unknow isolation level" << std::endl; return false; } TestResultSet test_result_set; std::string sql; - if (opt == "serial" || opt == "local_serial") { - sql = "serial consistency " + iso + ";"; - } else { - sql = "consistency " + iso + ";"; - } + sql = "consistency " + iso + ";"; if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { return false; } diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index e09b2482..b98e42b1 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -169,6 +169,24 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ if (!db_connector.ExecWriteSql(sql_id, "START TRANSACTION WITH CONSISTENT SNAPSHOT;", test_result_set, txn_id, test_process_file)) { goto jump; } + // YugabyteDB https://docs.yugabyte.com/preview/explore/transactions/isolation-levels/ + } else if (FLAGS_db_type == "yugabyte") { + if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { + goto jump; + } + std::string begin_sql = "BEGIN TRANSACTION"; + // beta version: You must set the YB-Tserver flag yb_enable_read_committed_isolation to true when start database service for read-committed level!!! + // if (FLAGS_isolation == "read-committed") { + // begin_sql += " ISOLATION LEVEL READ COMMITTED;"; + // } + if (FLAGS_isolation == "snapshot") { + begin_sql += ";"; + } else { + begin_sql += " ISOLATION LEVEL SERIALIZABLE;"; + } + if (!db_connector.ExecWriteSql(sql_id, begin_sql, test_result_set, txn_id, test_process_file)) { + goto jump; + } } else { if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { goto jump; @@ -484,7 +502,9 @@ int main(int argc, char* argv[]) { // create isolation dir std::vector iso_list; if (FLAGS_db_type == "cassandra") { - iso_list = std::vector({"any", "one", "two", "three", "quorum", "all", "local_quorum", "local_one", "serial", "local_serial"}); + iso_list = std::vector({"one"}); + } else if (FLAGS_db_type == "yugabyte") { + iso_list = std::vector({"serializable", "snapshot"}); } else { iso_list = std::vector({"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}); } @@ -508,7 +528,7 @@ int main(int argc, char* argv[]) { } // set TXN_ISOLATION // crdb has only one isolation level, which is serializable by default - if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb" && FLAGS_db_type != "yugabyte") { std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; int idx = 1; diff --git a/test_result/centralizend_result/cassandra/README.md b/test_result/centralizend_result/cassandra/README.md index d27d56d0..f74c92be 100644 --- a/test_result/centralizend_result/cassandra/README.md +++ b/test_result/centralizend_result/cassandra/README.md @@ -59,7 +59,18 @@ APPLY BATCH; ## 实际测试说明 -实际测试中编写了`sql2cql.py`脚本文件将原始测试文件中的`INSERT`语句转化为符合`CQL`语法的`INSERT`语句,其他测试语句保持原状,在单机环境对所有一致性级别进行了测试,结果基本一致,由于不支持传统的`SQL`事务,因此`33`个测试样例中大部分异常,小部分通过,仅有一个测试样例存在死锁情况。 +实际测试中编写了`sql2cql.py`脚本文件将原始测试文件中的`INSERT`语句转化为符合`CQL`语法的`INSERT`语句,其他测试语句保持原状,在单机环境对`one`一致性级别进行了测试,由于不支持传统的`SQL`事务,因此`33`个测试样例中大部分异常,小部分通过,仅有一个测试样例存在死锁情况。 + +针对除`one`以外的一致性级别,由于无法通过`ODBC`接口函数直接设置一致性隔离级别,因此暂时没有测试: + +即`CONSISTENCY ***;`是CQL中的一个命令,用于设置后续查询的一致性级别,但如果直接通过`SQLExecDirect`函数执行语句,会报错`Malformed SQL Statement: Unrecognized keyword: consistency`,原因为ODBC是通用SQL接口,无法直接发送非标准的SQL命令,如`Cassandra`的`CONSISTENCY ***;`,对于Cassandra,可以使用专有的驱动器,如DataStax的C++驱动器,在DataStax C++驱动器中,可以这样设置一致性级别: + +```c++ +CassStatement* statement = cass_statement_new("SELECT * FROM table_name", 0); +cass_statement_set_consistency(statement, CASS_CONSISTENCY_QUORUM); +``` + + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt deleted file mode 100644 index 259be1aa..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:13:333:374 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:13:342:230 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:13:433:358 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:47:13:443:316 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:13:452:573 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:47:13:541:415 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:13:543:268 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:13:633:887 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:47:13:645:393 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:13:647:246 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt deleted file mode 100644 index 41a8ef70..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:17:97:471 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:17:106:921 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:17:197:432 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:47:17:270:462 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:17:273:228 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:17:273:636 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:47:17:297:947 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:17:298:311 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:47:17:301:231 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:17:301:638 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index 4c1dc6ab..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:47:14:58:500 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 389667b1..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:15:672:183 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:47:15:683:878 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:15:772:161 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:47:15:783:836 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:47:15:791:819 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:15:792:250 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:47:15:891:342 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:15:893:258 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:47:15:901:868 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:15:903:852 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 06c9a211..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:28:18:723 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:28:28:569 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:28:118:952 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:28:130:421 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:28:132:928 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:47:28:219:36 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:47:28:229:614 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:47:28:241:643 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:28:243:762 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:47:28:326:681 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:47:28:328:677 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:47:28:342:356 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:47:28:344:547 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index b2b6fb52..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:26:288:546 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:26:292:693 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:26:388:542 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:47:26:391:825 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:47:26:490:274 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:47:26:501:400 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:26:503:551 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:47:26:590:356 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:47:26:601:558 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:26:603:976 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:47:26:699:756 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:26:702:595 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:47:26:797:495 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:47:26:798:835 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:47:26:806:375 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:47:26:807:119 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 011b0ad7..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:20:584:256 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:47:20:593:341 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:20:684:129 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:47:20:694:759 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:47:20:784:683 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:47:20:796:50 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:47:20:892:648 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:47:20:992:411 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:47:21:92:524 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:47:21:183:919 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:47:21:285:242 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:21:385:346 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:47:21:393:563 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:21:395:752 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index 5dd1a529..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:22:646:365 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:47:22:661:495 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:22:746:263 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:47:22:755:803 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:47:22:846:394 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:47:22:851:646 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:47:22:953:624 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:47:23:51:240 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:47:23:151:426 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:47:23:247:71 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:47:23:347:396 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:23:447:679 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:47:23:455:192 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:23:455:598 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index 00260a81..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:29:668:837 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:47:29:679:159 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:47:29:689:513 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:47:29:768:821 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:47:29:779:42 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:47:29:790:291 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:29:792:520 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:47:29:869:47 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:47:29:879:34 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:47:29:889:386 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:47:29:891:979 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:47:29:977:306 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:47:29:979:305 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:47:29:991:48 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:47:29:992:897 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index 5bf11945..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:24:698:314 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:47:24:708:761 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:24:798:416 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:47:24:809:84 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:24:819:576 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:47:24:830:210 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:47:24:836:834 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:24:838:64 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:47:24:898:505 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:47:24:908:302 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:47:24:918:141 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:47:24:927:217 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:47:24:937:490 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:24:939:443 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:47:25:6:822 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:47:25:9:150 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:47:25:22:309 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:47:25:24:332 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt deleted file mode 100644 index 0dd63aef..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:8:919:548 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:47:8:928:191 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:9:19:382 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:9:24:984 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:9:25:419 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:47:9:124:312 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:9:124:769 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:47:9:126:609 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:9:127:24 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index dd627db3..00000000 --- a/test_result/centralizend_result/cassandra/all/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:7:409:182 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:7:418:236 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:7:509:256 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:7:520:405 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:7:522:510 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:47:7:616:432 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:7:618:675 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:47:7:626:357 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:7:628:133 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt deleted file mode 100644 index d9b5738b..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:18:851:928 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:18:864:272 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:18:952:7 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:18:965:781 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:46:18:978:502 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:19:63:127 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:19:152:567 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:19:252:384 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:46:19:260:259 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:19:260:667 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt deleted file mode 100644 index 284f1733..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:22:7:282 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:22:13:248 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:22:107:42 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:22:112:814 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:22:115:260 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:46:22:215:721 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:22:217:785 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:22:307:811 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:22:314:383 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:22:314:789 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt deleted file mode 100644 index c97db8c8..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:23:549:643 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:46:23:559:857 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:23:648:125 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:23:651:488 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:23:654:377 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:46:23:750:716 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:23:850:504 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:23:950:235 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:23:958:330 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:23:958:731 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt deleted file mode 100644 index 56cc9de7..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:28:130:447 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:28:141:307 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:28:230:498 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:46:28:236:116 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:46:28:238:70 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:28:338:870 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:28:339:265 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:28:430:966 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:28:438:691 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:28:439:95 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index 962c81b4..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:25:264:861 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:46:25:271:350 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:25:364:806 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:25:370:988 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:25:373:192 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:25:373:631 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:46:25:470:183 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:25:470:563 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:46:25:473:601 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:25:473:976 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt deleted file mode 100644 index 6e732d93..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:15:640:111 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:15:655:101 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:15:740:108 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:15:745:897 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:46:15:748:361 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:46:15:842:745 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:15:940:828 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:16:40:547 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:16:50:858 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:16:51:223 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index 9ac2e47e..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:17:325:938 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:17:339:256 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:17:425:955 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:17:441:481 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:46:17:453:509 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:17:456:191 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:46:17:534:887 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:17:537:231 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:17:551:601 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:17:553:600 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt deleted file mode 100644 index 84cd6df5..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:31:214:839 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:31:221:915 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:31:315:657 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:31:327:663 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:46:31:330:225 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:46:31:415:881 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:46:31:425:406 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:46:31:431:113 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:46:31:524:699 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:46:31:525:111 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:46:31:616:545 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:46:31:716:561 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:46:31:732:242 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:46:31:734:499 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index e757fd8d..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:46:32:978:649 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:46:32:984:52 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:46:33:78:620 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:46:33:84:186 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:46:33:178:707 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:46:33:184:723 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:46:33:187:454 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:46:33:278:674 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:46:33:284:39 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:46:33:388:878 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:46:33:478:861 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:46:33:579:125 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:46:33:679:134 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:46:33:681:346 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:46:33:694:375 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:46:33:696:287 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index 7a86583c..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:35:18:280 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:35:23:975 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:35:118:178 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:35:124:513 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:46:35:128:567 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:46:35:218:512 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:46:35:223:680 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:46:35:226:235 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:46:35:327:477 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:46:35:329:493 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:46:35:418:966 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:46:35:519:208 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:46:35:528:161 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:46:35:530:364 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 78db8733..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:36:808:384 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:46:36:813:770 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:36:908:227 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:46:36:913:676 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:46:36:916:124 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:46:37:8:392 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:46:37:19:61 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:46:37:29:825 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:46:37:117:897 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:46:37:118:338 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:46:37:209:72 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:46:37:309:33 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:46:37:323:396 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:46:37:325:215 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt deleted file mode 100644 index 3e1c7ac3..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:4:911:135 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:4:922:271 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:5:10:757 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:46:5:35:268 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:46:5:109:534 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:5:211:238 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:46:5:223:78 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:5:223:436 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index 006dbdca..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:9:663:183 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:9:677:446 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:9:763:283 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:46:9:778:656 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:9:781:258 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:46:9:869:124 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:9:869:508 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:46:9:872:267 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:9:872:680 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 5fe88efd..00000000 --- a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:6:389:500 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:46:6:404:777 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:6:488:82 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:6:496:393 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:46:6:602:701 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:6:688:537 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:6:789:661 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:46:6:806:636 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:6:808:434 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index e2c1dbd7..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:49:469:125 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:49:479:522 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:49:569:177 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:49:580:766 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:49:590:948 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:49:593:397 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:46:49:676:500 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:49:678:602 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:49:690:368 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:49:692:140 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index f14aca8e..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:50:951:738 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:50:961:768 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:51:51:932 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:51:63:191 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:51:74:413 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:51:160:294 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:51:161:542 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:51:250:575 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:46:51:253:657 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:51:254:23 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 8b07d27d..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:55:615:191 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:46:55:624:848 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:55:715:84 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:55:720:885 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:55:723:332 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:55:823:803 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:55:824:584 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:55:915:590 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:55:928:103 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:55:929:946 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index 99fc6bc0..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:57:196:458 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:46:57:205:251 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:57:296:387 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:57:301:777 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:57:304:335 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:57:406:293 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:57:497:92 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:57:597:31 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:46:57:608:499 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:57:610:295 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 601d0a1a..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:0:486:903 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:0:496:880 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:0:586:983 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:47:0:597:685 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:0:608:172 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:47:0:695:481 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:0:787:441 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:0:887:237 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:47:0:899:541 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:0:901:478 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt deleted file mode 100644 index 119c4a75..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:3:657:325 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:3:667:88 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:3:757:337 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:3:762:916 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:3:765:89 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:47:3:857:424 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:47:3:868:655 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:47:3:874:138 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:47:3:962:398 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:47:3:962:758 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:47:4:57:728 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:4:158:60 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:47:4:165:703 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:4:166:124 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt deleted file mode 100644 index 4121ee1f..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:5:369:139 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:5:379:248 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:5:469:189 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:5:480:219 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:47:5:569:262 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:47:5:674:165 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:47:5:778:873 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:47:5:788:984 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:47:5:877:399 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:5:969:590 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:47:6:69:308 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:6:168:260 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:47:6:174:666 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:6:175:547 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index 690f2c43..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:38:588:886 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:38:594:276 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:38:688:698 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:38:694:406 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:46:38:789:115 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:38:889:269 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:46:38:895:867 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:46:39:436:654 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:39:438:766 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index 5aae9d32..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:40:194:222 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:40:205:81 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:40:292:630 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:40:295:782 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:46:40:394:351 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:40:494:823 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:46:40:501:647 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:46:40:982:679 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:40:984:591 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt deleted file mode 100644 index 0a3198ca..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:41:804:351 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:41:810:78 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:41:904:55 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:41:916:362 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:46:42:6:939 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:46:42:7:683 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:42:105:12 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:46:42:111:651 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:42:111:996 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt deleted file mode 100644 index 6d147338..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:43:337:821 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:43:343:154 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:43:436:703 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:43:441:32 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:43:441:909 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:46:43:547:92 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:43:549:242 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:46:43:557:326 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:43:559:192 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index 3dea19d9..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:47:977:181 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:47:982:578 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:48:77:70 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:48:87:591 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:48:88:28 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:46:48:185:936 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:48:188:102 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:46:48:193:937 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:48:194:346 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt deleted file mode 100644 index 2d579897..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:44:852:429 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:46:44:857:481 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:44:952:454 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:44:958:491 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:46:45:57:780 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:46:45:58:280 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:45:152:826 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:46:45:161:346 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:45:163:23 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt deleted file mode 100644 index 1299f0f7..00000000 --- a/test_result/centralizend_result/cassandra/all/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: all #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = all for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:46:352:326 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:46:46:361:616 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:46:452:213 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:46:464:717 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:46:46:561:294 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:46:652:933 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:46:752:516 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:46:46:758:919 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:46:759:337 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt deleted file mode 100644 index f26b28fc..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:17:442:64 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:40:17:450:299 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:17:541:924 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:17:547:709 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:17:550:395 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:17:550:828 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:40:17:648:860 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:17:650:982 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:40:17:658:861 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:17:659:286 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index 60bcdfd5..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:18:826:247 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:40:18:838:316 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:18:926:238 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:18:937:538 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:18:947:71 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:18:949:133 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:40:19:34:1 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:19:35:850 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:40:19:46:993 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:19:48:609 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index 976151f3..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:40:20:991:635 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 4afb9903..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:22:552:176 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:40:22:568:700 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:22:652:270 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:40:22:664:827 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:40:22:689:641 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:22:690:589 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:40:22:759:559 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:22:760:54 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:40:22:763:67 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:22:763:573 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt deleted file mode 100644 index 17e05502..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:25:278:194 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:40:25:280:880 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:25:378:175 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:40:25:380:952 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:40:25:478:296 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:40:25:481:93 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:40:25:588:984 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:40:25:682:894 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:40:25:782:622 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:40:25:880:70 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:40:25:980:395 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:26:80:311 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:40:26:93:798 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:26:95:664 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 340e0e46..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:34:49:129 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:40:34:51:509 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:34:149:108 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:40:34:151:817 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:40:34:152:229 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:40:34:249:178 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:40:34:251:932 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:40:34:254:672 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:40:34:255:151 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:40:34:352:381 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:40:34:353:26 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:40:34:357:386 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:40:34:357:971 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 45d71f33..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:32:456:169 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:40:32:458:697 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:32:556:160 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:40:32:559:286 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:40:32:656:233 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:40:32:659:531 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:40:32:659:937 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:40:32:756:194 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:40:32:759:379 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:32:759:776 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:40:32:858:507 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:32:859:15 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:40:32:958:589 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:40:32:959:14 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:40:32:962:855 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:40:32:963:327 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 1afb3900..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:27:279:147 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:40:27:291:561 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:27:378:81 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:40:27:382:617 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:40:27:479:7 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:40:27:489:958 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:40:27:587:5 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:40:27:687:503 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:40:27:782:42 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:40:27:877:914 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:40:27:978:69 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:28:78:182 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:40:28:80:718 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:28:81:123 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index d89af423..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:29:202:726 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:40:29:216:230 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:29:301:275 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:40:29:305:78 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:40:29:401:290 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:40:29:404:582 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:40:29:503:779 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:40:29:603:726 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:40:29:703:739 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:40:29:801:524 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:40:29:901:626 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:30:1:539 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:40:30:5:430 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:30:5:789 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index b83ec875..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:35:552:941 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:40:35:557:696 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:40:35:560:989 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:40:35:652:314 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:40:35:655:385 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:40:35:658:580 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:40:35:659:78 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:40:35:752:537 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:40:35:755:81 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:40:35:756:959 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:40:35:757:416 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:40:35:863:15 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:40:35:865:76 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:40:35:873:988 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:40:35:875:184 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index 3b84d0cb..00000000 --- a/test_result/centralizend_result/cassandra/any/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:31:73:352 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:40:31:75:751 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:31:173:264 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:40:31:176:76 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:31:179:213 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:40:31:181:543 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:40:31:185:75 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:40:31:185:690 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:40:31:273:351 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:40:31:276:166 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:40:31:278:902 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:40:31:281:493 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:40:31:284:754 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:31:285:249 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:40:31:376:93 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:40:31:376:577 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:40:31:380:614 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:40:31:380:995 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt deleted file mode 100644 index e09d098b..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:27:597:934 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:27:612:908 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:27:697:941 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:27:713:500 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:39:27:725:471 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:39:27:810:64 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:27:911:189 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:27:998:243 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:39:28:14:430 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:28:16:698 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index dd9830da..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:29:260:185 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:29:275:625 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:29:360:40 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:29:374:898 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:39:29:385:52 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:29:387:372 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:39:29:472:237 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:29:474:726 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:39:29:493:782 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:29:496:118 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt deleted file mode 100644 index f1742b3c..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:30:680:136 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:30:685:18 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:30:781:627 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:30:796:73 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:39:30:808:930 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:39:30:891:275 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:30:893:243 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:39:30:982:422 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:39:30:997:245 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:30:999:99 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt deleted file mode 100644 index 4742e5d2..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:32:215:265 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:39:32:226:686 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:32:315:410 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:32:330:472 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:39:32:343:885 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:39:32:424:423 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:32:516:230 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:32:615:717 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:39:32:630:405 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:32:632:377 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt deleted file mode 100644 index 5c368133..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:38:268:134 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:38:280:739 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:38:368:9 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:39:38:380:114 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:39:38:391:733 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:38:394:317 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:39:38:479:857 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:38:481:762 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:39:38:496:831 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:38:499:114 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index a457568e..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:35:293:304 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:39:35:311:881 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:35:393:142 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:39:35:406:228 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:39:35:417:148 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:35:419:406 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:39:35:507:246 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:35:509:227 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:39:35:523:282 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:35:525:303 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index 99207bf9..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:26:235:461 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:26:240:977 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:26:336:610 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:26:352:684 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:39:26:365:569 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:26:368:360 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:39:26:450:380 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:26:452:754 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:39:26:467:936 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:26:470:81 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt deleted file mode 100644 index fc2e0ba7..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:39:693:829 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:39:696:846 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:39:793:908 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:39:797:527 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:39:39:801:219 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:39:39:893:992 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:39:39:897:311 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:39:39:900:57 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:39:39:996:514 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:39:39:997:16 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:39:40:94:228 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:39:40:194:375 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:39:40:199:329 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:39:40:199:917 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index 0206ba72..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:39:41:417:782 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:39:41:431:106 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:39:41:517:525 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:39:41:529:570 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:39:41:617:697 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:39:41:630:354 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:39:41:644:320 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:39:41:717:962 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:39:41:731:694 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:39:41:820:102 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:39:41:918:104 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:39:42:18:487 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:39:42:118:534 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:39:42:120:658 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:39:42:134:992 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:39:42:137:325 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 192be791..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:45:61:429 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:39:45:73:405 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:45:161:425 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:39:45:173:18 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:39:45:184:88 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:39:45:261:670 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:39:45:274:91 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:39:45:287:254 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:39:45:366:579 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:39:45:367:965 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:39:45:462:259 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:39:45:562:258 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:39:45:578:242 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:39:45:580:160 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt deleted file mode 100644 index 88391d4d..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:14:104:88 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:14:145:500 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:14:204:87 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:39:14:261:118 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:39:14:303:937 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:14:404:350 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:39:14:418:24 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:39:14:420:315 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt deleted file mode 100644 index 1ad44c57..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:17:130:221 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:17:142:511 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:17:229:111 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:39:17:242:599 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:39:17:334:204 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:17:429:343 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:17:529:776 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:39:17:538:414 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:17:539:554 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index d3589a5c..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:18:747:836 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:18:764:138 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:18:847:764 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:39:18:863:310 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:39:18:865:665 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:39:18:963:81 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:18:965:1 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:39:18:978:390 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:18:980:359 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt deleted file mode 100644 index 9d8fba98..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:23:68:787 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:23:85:537 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:23:168:758 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:23:187:685 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:39:23:280:85 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:39:23:282:395 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:23:369:433 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:39:23:379:733 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:23:381:519 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 26c06c6d..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:15:622:802 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:39:15:636:419 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:15:721:849 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:15:735:234 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:39:15:826:551 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:15:921:261 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:16:21:295 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:39:16:24:975 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:16:25:373 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index cde852c0..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:20:180:220 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:39:20:256:977 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:20:279:900 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:20:298:283 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:39:20:300:629 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:39:20:396:204 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:20:398:550 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:39:20:410:815 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:20:412:967 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index 4d2b97ac..00000000 --- a/test_result/centralizend_result/cassandra/any/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:21:579:862 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:39:21:599:898 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:21:679:300 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:39:21:697:759 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:39:21:700:171 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:39:21:795:653 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:21:797:786 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:39:21:810:30 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:21:812:22 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index cb6996e7..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:57:370:646 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:57:382:184 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:57:470:709 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:57:483:741 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:39:57:496:276 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:57:498:596 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:39:57:578:497 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:57:580:512 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:39:57:595:182 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:57:597:219 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index bfcb976f..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:0:248:783 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:0:260:433 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:0:348:723 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:0:361:527 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:0:373:186 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:0:459:370 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:40:0:549:123 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:0:648:423 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:40:0:658:629 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:0:659:460 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index 7c788076..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:1:817:526 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:1:830:358 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:1:917:472 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:1:932:4 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:1:944:239 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:1:946:624 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:40:2:22:364 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:2:23:53 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:40:2:27:605 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:2:28:267 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index d0dea808..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:4:765:796 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:40:4:775:733 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:4:865:870 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:4:878:872 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:4:890:707 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:4:976:101 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:40:5:64:675 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:5:166:270 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:40:5:182:352 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:5:184:628 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index 2598f970..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:6:383:633 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:6:394:21 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:6:483:521 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:40:6:493:455 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:6:504:31 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:6:592:407 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:40:6:594:340 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:40:6:684:39 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:40:6:695:912 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:6:697:765 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index bf1f6088..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:9:509:485 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:9:520:769 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:9:608:190 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:40:9:610:972 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:9:613:436 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:9:613:867 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:40:9:714:630 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:9:715:756 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:40:9:725:254 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:9:726:198 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt deleted file mode 100644 index 07e19b2d..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:10:951:508 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:10:961:775 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:11:51:470 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:11:63:131 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:11:72:701 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:40:11:151:723 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:40:11:164:340 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:40:11:177:929 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:40:11:263:8 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:40:11:265:200 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:40:11:352:397 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:11:451:48 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:40:11:456:543 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:11:457:99 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt deleted file mode 100644 index 5049ddb5..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:12:635:450 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:12:640:135 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:12:735:65 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:12:738:450 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:40:12:835:206 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:40:12:938:156 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:40:13:38:135 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:40:13:40:825 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:40:13:138:84 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:13:235:625 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:40:13:335:680 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:40:13:435:808 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:40:13:439:520 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:40:13:439:993 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index c426ece0..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:48:342:969 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:48:355:299 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:48:441:240 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:48:445:758 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:39:48:543:21 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:48:643:405 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:39:48:652:449 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:39:49:141:979 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:49:143:233 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt deleted file mode 100644 index 26ba3d82..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:51:427:426 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:51:439:396 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:51:527:478 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:51:541:77 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:39:51:543:208 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:39:51:639:737 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:51:641:649 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:39:51:652:654 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:51:654:798 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt deleted file mode 100644 index 6334c6fc..00000000 --- a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: any #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = any for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:54:295:835 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:39:54:307:570 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:54:395:917 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:54:409:71 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:39:54:507:21 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:54:596:369 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:54:696:290 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:39:54:706:8 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:54:708:36 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt deleted file mode 100644 index 68049297..00000000 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:45:751:134 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:48:45:759:758 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:45:850:804 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:45:862:109 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:45:872:496 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:45:874:836 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:48:45:959:116 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:45:961:215 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:45:974:376 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:45:976:227 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index b3af7349..00000000 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:48:49:489:489 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 32187f4c..00000000 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:51:129:766 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:48:51:140:230 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:51:229:361 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:48:51:239:895 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:48:51:270:133 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:51:271:315 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:48:51:353:171 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:51:355:330 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:48:51:404:896 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:51:405:297 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 46f496db..00000000 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:1:999:852 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:49:2:10:965 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:2:99:903 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:49:2:111:214 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:49:2:200:189 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:49:2:211:473 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:2:213:784 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:49:2:300:243 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:49:2:311:310 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:2:313:697 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:49:2:408:704 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:49:2:411:133 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:49:2:509:827 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:49:2:512:180 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:49:2:527:943 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:49:2:530:495 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt deleted file mode 100644 index a53e5364..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:53:834:134 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:53:837:621 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:53:935:714 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:53:948:832 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:47:53:962:357 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:47:54:37:80 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:54:143:64 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:54:234:590 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:47:54:238:46 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:54:238:495 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt deleted file mode 100644 index 266299ce..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:50:674:998 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:50:688:885 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:50:775:59 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:50:789:795 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:47:50:801:862 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:47:50:875:801 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:50:975:920 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:51:73:992 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:47:51:83:612 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:51:84:46 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index 6446727a..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:52:344:147 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:52:350:228 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:52:443:996 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:52:454:693 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:47:52:460:871 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:52:461:868 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:47:52:546:12 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:52:546:701 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:47:52:552:817 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:52:553:590 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt deleted file mode 100644 index 8792f781..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:6:303:869 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:6:315:735 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:6:403:876 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:6:417:242 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:48:6:426:654 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:48:6:502:685 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:48:6:507:381 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:48:6:511:207 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:48:6:612:354 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:6:614:769 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:6:704:488 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:6:804:618 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:48:6:819:891 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:6:821:898 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index 9a9d3005..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:10:144:448 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:10:147:412 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:10:244:807 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:10:249:367 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:48:10:257:52 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:48:10:346:191 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:48:10:357:265 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:48:10:368:499 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:48:10:448:334 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:10:449:85 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:10:546:801 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:10:644:943 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:48:10:647:883 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:10:648:379 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt deleted file mode 100644 index f57dadd2..00000000 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:43:103:503 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:43:108:215 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:43:204:747 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:47:43:226:905 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:47:43:318:85 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:43:405:347 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:43:504:946 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:47:43:516:803 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:43:518:556 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index e3aa1554..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:27:593:809 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:27:599:15 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:27:693:623 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:27:705:79 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:27:714:662 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:27:802:963 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:48:27:894:412 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:27:994:272 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:48:28:1:628 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:28:1:999 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index fab859bd..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:29:240:799 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:29:251:167 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:29:341:31 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:29:352:691 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:29:362:356 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:29:364:446 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:48:29:451:361 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:29:453:297 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:48:29:465:56 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:29:467:205 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 2c461209..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:30:714:335 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:48:30:723:571 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:30:814:291 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:30:827:111 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:30:837:403 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:30:923:20 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:30:925:2 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:31:14:992 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:31:27:1 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:31:28:935 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index 8f86492e..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:32:316:665 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:48:32:326:163 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:32:416:717 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:32:427:911 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:32:437:613 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:32:525:795 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:48:32:617:466 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:32:717:307 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:32:729:824 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:32:731:702 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index 099973d7..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:34:62:438 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:34:72:702 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:34:162:375 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:48:34:174:271 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:34:184:431 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:34:271:997 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:34:274:25 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:34:363:56 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:34:375:142 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:34:376:902 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 8f5a5aaa..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:35:662:563 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:35:668:403 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:35:762:393 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:48:35:771:929 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:35:782:472 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:35:871:194 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:48:35:962:924 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:36:62:916 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:36:70:692 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:36:71:59 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index 62a9a091..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:37:358:417 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:37:368:913 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:37:456:908 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:48:37:461:216 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:37:465:514 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:37:466:418 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:48:37:567:74 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:37:568:920 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:48:37:580:260 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:37:582:232 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index d35eb948..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:13:668:768 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:13:675:492 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:13:769:373 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:13:774:879 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:48:13:869:734 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:13:970:158 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:48:13:976:879 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:48:14:464:552 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:14:466:365 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt deleted file mode 100644 index b0122dfd..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:16:742:545 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:16:753:481 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:16:841:309 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:16:846:860 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:48:16:951:416 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:48:16:953:237 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:48:17:42:870 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:48:17:51:507 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:17:53:404 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index f4daf100..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:23:35:871 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:23:46:348 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:23:135:828 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:23:141:944 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:48:23:142:384 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:48:23:243:253 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:23:245:178 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:48:23:254:378 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:23:256:122 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt deleted file mode 100644 index 2d5f475d..00000000 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: local_one #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_one for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:21:358:10 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:48:21:367:140 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:21:457:118 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:21:463:936 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:48:21:563:342 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:21:658:548 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:21:758:253 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:48:21:766:642 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:21:768:536 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt deleted file mode 100644 index c8a92704..00000000 --- a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: local_quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_quorum for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:34:860:918 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:34:878:782 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:34:960:920 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:47:34:997:599 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:47:35:77:131 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:35:161:536 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:35:261:126 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:47:35:272:750 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:35:275:69 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index da7016b0..00000000 --- a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: local_quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_quorum for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:36:551:409 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:36:568:512 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:36:651:411 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:47:36:667:259 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:36:669:994 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:47:36:764:788 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:36:766:724 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:47:36:780:270 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:36:781:661 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 03f550fe..00000000 --- a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: local_quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_quorum for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:33:152:404 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:47:33:168:545 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:33:250:741 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:33:255:804 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:47:33:357:820 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:33:453:308 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:33:553:77 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:47:33:565:863 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:33:568:46 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 09e31634..00000000 --- a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,29 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: local_quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_quorum for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:38:32:457 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:47:38:106:997 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:38:132:415 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt deleted file mode 100644 index 1df5d17c..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:39:381:72 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:39:385:62 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:39:481:31 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:39:486:173 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:39:492:63 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:39:493:544 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:51:39:589:75 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:39:591:60 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:39:603:395 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:39:605:669 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index 912d4996..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:40:869:520 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:40:879:11 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:40:968:54 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:40:971:91 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:40:975:979 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:40:976:588 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:51:41:78:87 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:41:80:252 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:41:93:107 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:41:95:271 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt deleted file mode 100644 index 8079b1f3..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:42:343:312 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:42:351:779 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:42:443:276 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:42:452:722 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:42:463:218 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:42:543:937 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:42:544:297 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:42:643:634 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:42:655:36 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:42:656:854 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt deleted file mode 100644 index 4977f374..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:46:211:551 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:46:214:904 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:46:312:880 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:46:323:347 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:46:332:923 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:46:335:385 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:51:46:421:750 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:46:423:978 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:46:438:607 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:46:440:421 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index 49e6f310..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:51:43:73:237 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 107738d6..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:44:744:39 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:51:44:756:15 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:44:844:126 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:51:44:856:718 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:51:44:891:462 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:44:892:369 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:51:44:949:42 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:44:949:439 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:51:44:951:943 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:44:952:465 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt deleted file mode 100644 index 4b894fdd..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:47:684:370 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:51:47:693:439 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:47:782:742 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:51:47:785:541 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:47:884:417 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:51:47:894:815 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:51:47:993:561 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:51:48:88:86 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:51:48:185:839 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:48:284:975 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:48:385:436 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:48:485:520 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:51:48:498:470 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:48:500:614 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 7a496790..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:57:242:943 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:57:245:862 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:57:344:412 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:57:354:882 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:51:57:357:83 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:51:57:444:538 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:51:57:455:239 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:51:57:465:518 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:57:467:791 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:51:57:545:923 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:51:57:546:463 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:51:57:549:960 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:51:57:550:470 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 1697deb2..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:55:432:142 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:55:442:904 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:55:532:193 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:55:544:561 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:55:632:374 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:51:55:643:603 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:55:646:146 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:51:55:732:360 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:51:55:743:302 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:55:745:638 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:51:55:841:542 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:55:844:243 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:51:55:943:876 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:51:55:946:249 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:51:55:961:948 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:51:55:964:349 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 228e67d8..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:49:798:571 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:51:49:803:390 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:49:900:291 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:51:49:910:673 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:50:0:425 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:51:50:11:137 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:51:50:100:980 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:51:50:203:51 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:51:50:308:468 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:50:400:966 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:50:501:232 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:50:601:233 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:51:50:609:433 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:50:611:304 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index 448db7d3..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:51:840:298 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:51:51:850:346 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:51:940:350 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:51:51:949:830 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:52:40:579 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:51:52:50:237 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:51:52:147:714 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:51:52:242:837 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:51:52:347:760 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:52:441:85 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:52:541:489 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:52:640:82 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:51:52:644:987 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:52:645:508 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index 0814156e..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:58:753:807 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:51:58:770:496 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:51:58:781:880 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:51:58:853:695 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:51:58:863:792 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:51:58:874:400 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:58:876:487 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:51:58:953:715 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:51:58:964:106 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:51:58:976:446 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:58:979:355 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:51:59:55:185 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:51:59:55:722 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:51:59:58:940 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:51:59:59:342 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index 8614ca66..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:53:878:303 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:51:53:888:865 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:53:976:559 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:51:53:979:190 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:53:981:635 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:51:53:984:290 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:51:53:989:682 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:53:990:548 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:51:54:76:717 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:51:54:79:103 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:51:54:81:442 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:51:54:83:594 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:51:54:86:964 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:54:87:788 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:51:54:178:744 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:51:54:179:161 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:51:54:182:294 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:51:54:182:706 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt deleted file mode 100644 index 096629c0..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:37:853:595 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:51:37:862:854 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:37:953:554 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:37:964:579 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:51:37:966:924 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:51:38:61:763 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:38:63:656 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:51:38:71:559 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:38:73:670 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index abcdd9fd..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:36:397:937 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:36:407:787 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:36:497:770 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:36:509:729 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:51:36:511:860 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:51:36:605:60 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:36:607:328 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:51:36:615:211 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:36:617:189 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt deleted file mode 100644 index c961ffbc..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:48:79:416 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:48:91:132 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:48:178:501 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:48:181:923 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:50:48:184:462 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:48:291:992 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:48:382:930 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:48:478:807 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:50:48:482:955 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:48:483:502 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index a95a4c87..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:49:644:113 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:49:648:418 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:49:745:482 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:49:759:60 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:50:49:769:469 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:49:771:829 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:50:49:855:840 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:49:858:0 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:50:49:872:581 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:49:874:586 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt deleted file mode 100644 index 954c25ce..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:52:678:445 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:52:688:941 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:52:776:817 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:52:781:723 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:52:785:949 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:50:52:883:949 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:52:976:841 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:53:76:897 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:53:80:660 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:53:81:57 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt deleted file mode 100644 index 94d276e1..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:57:245:639 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:57:257:125 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:57:345:675 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:57:357:427 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:50:57:369:471 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:57:455:267 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:57:457:171 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:57:544:461 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:57:548:177 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:57:548:625 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt deleted file mode 100644 index 224ee5a6..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:58:805:469 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:58:817:249 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:58:905:326 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:58:916:455 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:50:58:926:211 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:58:928:714 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:50:59:15:498 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:59:17:582 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:59:33:428 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:59:35:832 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index 82f46494..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:54:309:192 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:50:54:321:567 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:54:407:735 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:54:410:965 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:54:413:289 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:54:413:725 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:50:54:511:563 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:54:512:55 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:50:54:515:618 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:54:515:983 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index 034e2fd8..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:55:758:685 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:50:55:772:279 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:55:858:654 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:50:55:870:259 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:50:55:879:571 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:55:881:677 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:50:55:970:549 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:55:972:920 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:50:55:985:920 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:55:988:109 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt deleted file mode 100644 index e2f10b9e..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:44:967:180 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:44:981:646 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:45:67:193 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:45:81:441 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:50:45:94:315 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:50:45:168:222 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:45:267:868 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:45:365:722 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:45:377:679 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:45:378:235 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt deleted file mode 100644 index 2268eea7..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:0:335:714 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:0:346:640 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:0:435:664 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:0:449:316 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:51:0:460:97 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:51:0:535:747 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:51:0:549:569 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:51:0:562:290 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:51:0:644:740 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:0:646:929 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:0:736:508 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:0:836:572 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:51:0:852:168 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:0:854:543 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index 07086374..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:51:2:142:18 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:51:2:145:168 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:51:2:243:717 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:51:2:254:351 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:2:343:842 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:51:2:357:344 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:51:2:371:322 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:51:2:444:148 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:51:2:456:716 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:51:2:554:19 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:51:2:644:453 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:2:744:710 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:51:2:844:774 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:2:846:944 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:51:2:860:872 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:51:2:863:225 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index 670bb7b2..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:4:159:357 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:4:169:593 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:4:259:344 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:4:271:195 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:51:4:288:888 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:51:4:359:383 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:51:4:370:875 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:51:4:381:672 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:51:4:461:676 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:4:462:511 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:4:560:96 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:4:660:112 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:51:4:668:984 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:4:671:25 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 883f15c6..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:6:3:261 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:51:6:15:61 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:6:103:314 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:51:6:113:819 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:51:6:126:486 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:51:6:201:904 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:51:6:204:850 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:51:6:207:513 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:51:6:313:610 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:6:315:818 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:6:404:240 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:6:503:963 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:51:6:518:820 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:6:520:971 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt deleted file mode 100644 index f9176c33..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:34:329:386 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:34:368:431 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:34:427:526 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:50:34:457:416 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:50:34:527:630 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:34:630:16 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:50:34:643:138 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:34:645:423 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt deleted file mode 100644 index 6fa1cd89..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:37:483:373 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:37:487:841 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:37:584:809 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:50:37:618:422 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:50:37:699:81 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:37:785:776 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:37:885:133 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:50:37:895:809 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:37:897:550 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index 96e0fe16..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:39:159:798 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:39:176:785 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:39:259:592 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:50:39:274:705 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:39:277:691 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:50:39:374:622 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:39:376:860 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:50:39:388:246 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:39:389:336 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt deleted file mode 100644 index a0b54f89..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:43:428:508 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:43:434:767 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:43:528:331 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:43:537:591 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:50:43:634:484 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:50:43:635:536 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:43:730:33 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:50:43:740:104 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:43:742:216 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 662767a5..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:35:820:636 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:35:826:683 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:35:922:47 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:35:945:453 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:50:36:35:406 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:36:122:727 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:36:221:159 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:50:36:226:989 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:36:227:823 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 77e0e00b..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:40:576:183 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:50:40:650:824 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:40:674:687 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:40:679:75 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:40:679:662 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:50:40:789:701 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:40:791:21 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:50:40:797:420 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:40:798:261 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index 01a6955d..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:41:966:943 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:50:41:986:869 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:42:66:741 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:50:42:81:938 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:42:84:295 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:50:42:182:935 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:42:185:356 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:50:42:197:339 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:42:199:262 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index 06d75b07..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:18:563:615 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:18:567:623 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:18:663:616 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:18:666:872 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:18:669:859 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:18:670:396 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:51:18:772:753 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:18:774:890 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:18:788:630 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:18:790:658 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index 89a348e6..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:20:47:766 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:20:58:11 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:20:146:754 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:20:152:751 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:20:158:185 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:20:257:58 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:20:259:327 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:20:346:182 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:51:20:349:258 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:20:349:667 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index 2bf20b9b..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:21:596:361 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:21:607:228 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:21:696:274 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:21:708:269 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:21:719:915 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:21:797:104 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:21:894:806 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:21:996:470 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:51:22:9:202 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:22:11:283 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index 33da444c..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:23:265:24 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:23:271:102 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:23:364:475 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:23:368:57 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:23:371:176 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:23:371:699 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:51:23:475:959 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:23:477:922 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:51:23:490:661 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:23:492:437 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 15924759..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:24:751:785 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:24:760:826 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:24:851:795 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:24:863:750 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:24:874:865 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:24:961:420 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:24:963:360 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:25:50:721 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:25:54:268 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:25:54:673 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index 17e47ae4..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:26:234:219 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:51:26:244:336 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:26:334:715 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:26:346:664 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:26:358:315 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:26:443:99 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:26:535:187 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:26:633:172 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:26:636:621 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:26:637:5 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index 516b1c05..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:27:839:61 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:27:850:222 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:27:938:958 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:27:949:25 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:27:959:283 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:28:42:336 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:28:42:971 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:51:28:139:583 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:28:151:292 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:28:153:205 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 1c2a556e..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:29:401:975 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:29:405:574 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:29:501:554 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:29:504:328 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:29:508:613 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:51:29:605:353 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:29:702:88 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:29:803:681 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:29:816:683 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:29:818:91 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index f6de024e..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:31:118:845 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:31:125:939 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:31:218:781 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:51:31:224:87 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:31:230:157 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:31:231:557 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:51:31:328:450 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:51:31:330:323 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:51:31:338:610 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:31:339:784 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt deleted file mode 100644 index 13057a86..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:32:605:496 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:32:615:427 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:32:705:527 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:32:716:689 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:51:32:727:298 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:51:32:805:677 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:51:32:816:602 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:51:32:828:380 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:51:32:913:886 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:51:32:915:860 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:51:33:6:371 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:33:106:569 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:51:33:118:772 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:33:120:920 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt deleted file mode 100644 index 9c9c07f7..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:34:365:467 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:34:369:175 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:34:467:2 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:51:34:479:636 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:51:34:567:42 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:51:34:675:809 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:51:34:776:706 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:51:34:787:906 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:51:34:875:548 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:51:34:967:358 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:51:35:67:104 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:51:35:167:418 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:51:35:179:748 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:51:35:181:743 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index 3f7486f4..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:7:750:892 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:7:761:736 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:7:851:14 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:7:862:793 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:51:7:951:337 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:8:51:740 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:51:8:61:505 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:51:8:548:862 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:8:551:268 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt deleted file mode 100644 index a2594b83..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:10:918:574 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:10:929:516 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:11:18:346 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:11:29:359 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:51:11:119:505 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:51:11:119:895 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:11:219:218 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:51:11:227:982 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:11:230:73 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt deleted file mode 100644 index ad907589..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:12:487:454 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:12:498:345 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:12:587:334 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:12:600:247 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:51:12:602:467 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:51:12:696:211 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:12:698:192 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:51:12:706:508 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:12:708:354 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index d9f5aea0..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:17:168:638 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:17:172:123 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:17:268:840 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:17:273:267 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:51:17:273:976 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:51:17:375:685 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:17:377:11 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:51:17:381:498 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:17:382:320 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt deleted file mode 100644 index 39edf71c..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:13:998:375 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:51:14:7:729 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:14:98:372 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:14:109:855 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:51:14:208:837 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:51:14:211:147 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:51:14:296:999 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:51:14:299:511 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:14:299:850 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt deleted file mode 100644 index 4f225de8..00000000 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: local_serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = local_serial for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:15:535:867 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:51:15:545:76 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:15:635:824 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:15:647:556 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:51:15:737:371 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:15:834:606 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:51:15:934:570 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:51:15:937:164 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:15:937:628 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt index 09e3f79e..2acb68fa 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_read_skew_committed.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:30:948:305 +Q1 finished at: 2023-9-24 22:19:54:672:702 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,15 +24,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:30:953:957 +Q2 finished at: 2023-9-24 22:19:54:677:112 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:31:48:150 + Q3 finished at: 2023-9-24 22:19:54:772:439 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:31:52:569 + Q4 finished at: 2023-9-24 22:19:54:775:721 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:31:56:867 + Q5 finished at: 2023-9-24 22:19:54:778:619 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:31:57:299 + Q6 finished at: 2023-9-24 22:19:54:779:250 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -41,9 +41,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(2) expected_result: (1,1) -Q7 finished at: 2023-9-23 18:38:31:156:986 +Q7 finished at: 2023-9-24 22:19:54:875:367 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:31:159:38 +Q8 finished at: 2023-9-24 22:19:54:876:41 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:38:31:159:38 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:31:172:404 + Q9 finished at: 2023-9-24 22:19:54:880:453 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:31:174:467 + Q10 finished at: 2023-9-24 22:19:54:881:63 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt index 97261c3f..0d056ecb 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_read_write_skew1_committed.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:32:413:676 +Q1 finished at: 2023-9-24 22:19:55:988:163 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,19 +24,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:32:420:44 +Q2 finished at: 2023-9-24 22:19:55:991:150 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:32:512:359 + Q3 finished at: 2023-9-24 22:19:56:88:198 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:32:515:975 + Q4 finished at: 2023-9-24 22:19:56:92:73 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:32:520:721 + Q5 finished at: 2023-9-24 22:19:56:95:600 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:32:521:357 + Q6 finished at: 2023-9-24 22:19:56:96:385 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:38:32:615:179 +Q7 finished at: 2023-9-24 22:19:56:191:449 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:32:615:599 +Q8 finished at: 2023-9-24 22:19:56:192:82 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:38:32:615:599 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:32:620:983 + Q9 finished at: 2023-9-24 22:19:56:196:50 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:32:621:508 + Q10 finished at: 2023-9-24 22:19:56:196:667 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt index a8fa9b2d..3a873a8e 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:33:825:778 +Q1 finished at: 2023-9-24 22:19:57:330:967 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,9 +24,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:33:828:27 +Q2 finished at: 2023-9-24 22:19:57:334:290 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:33:926:891 + Q3 finished at: 2023-9-24 22:19:57:430:910 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -35,15 +35,15 @@ Q2 finished at: 2023-9-23 18:38:33:828:27 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:33:934:354 + Q4 finished at: 2023-9-24 22:19:57:433:764 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:33:943:523 + Q5 finished at: 2023-9-24 22:19:57:437:512 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:34:29:646 +Q6 finished at: 2023-9-24 22:19:57:534:692 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:34:30:164 +Q7 finished at: 2023-9-24 22:19:57:535:425 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:34:128:1 + Q8 finished at: 2023-9-24 22:19:57:631:388 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q7 finished at: 2023-9-23 18:38:34:30:164 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:34:140:107 + Q9 finished at: 2023-9-24 22:19:57:636:11 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:34:141:918 + Q8 finished at: 2023-9-24 22:19:57:636:726 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt index 9abe3a86..828b087d 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_committed.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:37:612:217 +Q1 finished at: 2023-9-24 22:20:0:943:883 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,9 +24,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:37:621:184 +Q2 finished at: 2023-9-24 22:20:0:947:289 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:37:712:142 + Q3 finished at: 2023-9-24 22:20:1:43:912 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -35,15 +35,15 @@ Q2 finished at: 2023-9-23 18:38:37:621:184 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:37:723:75 + Q4 finished at: 2023-9-24 22:20:1:47:796 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:37:734:946 + Q5 finished at: 2023-9-24 22:20:1:51:585 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:37:737:167 + Q6 finished at: 2023-9-24 22:20:1:52:475 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:38:37:821:781 +Q7 finished at: 2023-9-24 22:20:1:146:638 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:37:823:907 +Q8 finished at: 2023-9-24 22:20:1:147:113 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:38:37:823:907 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:37:838:963 + Q9 finished at: 2023-9-24 22:20:1:150:486 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:37:841:94 + Q10 finished at: 2023-9-24 22:20:1:150:939 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt index b43fd153..c65acbc0 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -10,7 +10,7 @@ set TXN_ISOLATION = one for each session Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:38:34:564:606 +Q0 failed at: 2023-9-24 22:19:58:76:74 Test Result: Rollback Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. diff --git a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt index 2d1f6756..f80e0581 100644 --- a/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ b/test_result/centralizend_result/cassandra/one/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:36:206:178 +Q1 finished at: 2023-9-24 22:19:59:618:214 Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' current_result: (checking,500,) (saving,500,) @@ -24,9 +24,9 @@ Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' (2) expected_result: (checking,1400,) (saving,500,) -Q2 finished at: 2023-9-23 18:38:36:218:2 +Q2 finished at: 2023-9-24 22:19:59:623:738 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:36:305:964 + Q3 finished at: 2023-9-24 22:19:59:718:232 Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' current_result: (checking,500,) (saving,500,) @@ -35,15 +35,15 @@ Q2 finished at: 2023-9-23 18:38:36:218:2 *(2) expected_result: (checking,500,) (saving,500,) - Q4 finished at: 2023-9-23 18:38:36:318:797 + Q4 finished at: 2023-9-24 22:19:59:723:774 Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:38:36:348:46 + Q5 finished at: 2023-9-24 22:19:59:740:86 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:36:348:918 + Q6 finished at: 2023-9-24 22:19:59:741:293 Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:38:36:414:836 +Q7 finished at: 2023-9-24 22:19:59:837:171 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:36:415:452 +Q8 finished at: 2023-9-24 22:19:59:838:68 Q9-T3 execute sql: 'SELECT * FROM account;' current_result: (kevin,checking,1400) (kevin,saving,1400) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:38:36:415:452 *(2) expected_result: (kevin,checking,1400) (kevin,saving,1400) - Q9 finished at: 2023-9-23 18:38:36:419:691 + Q9 finished at: 2023-9-24 22:19:59:842:312 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:36:420:376 + Q10 finished at: 2023-9-24 22:19:59:843:153 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt index 42e8912f..52de9d4c 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat.txt @@ -16,7 +16,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:39:56:250 +Q1 finished at: 2023-9-24 22:20:2:313:210 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +33,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:38:39:66:487 +Q2 finished at: 2023-9-24 22:20:2:318:917 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:39:156:47 + Q3 finished at: 2023-9-24 22:20:2:414:76 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +52,9 @@ Q2 finished at: 2023-9-23 18:38:39:66:487 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:38:39:169:257 + Q4 finished at: 2023-9-24 22:20:2:424:549 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:38:39:254:775 + Q5 finished at: 2023-9-24 22:20:2:512:678 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,19 +71,19 @@ Q2 finished at: 2023-9-23 18:38:39:66:487 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:38:39:258:356 + Q6 finished at: 2023-9-24 22:20:2:515:226 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:38:39:365:508 +Q7 finished at: 2023-9-24 22:20:2:623:78 Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:38:39:457:663 + Q8 finished at: 2023-9-24 22:20:2:715:714 Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:38:39:560:361 + Q9 finished at: 2023-9-24 22:20:2:816:275 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:38:39:656:521 +Q10 finished at: 2023-9-24 22:20:2:913:232 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:38:39:756:984 + Q11 finished at: 2023-9-24 22:20:3:13:392 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:39:857:172 + Q12 finished at: 2023-9-24 22:20:3:113:800 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -100,9 +100,9 @@ Q10 finished at: 2023-9-23 18:38:39:656:521 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:38:39:871:600 + Q13 finished at: 2023-9-24 22:20:3:121:381 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:39:873:684 + Q14 finished at: 2023-9-24 22:20:3:122:525 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt index 76e4b8f1..ea2d6434 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_causality_violation_anomaly.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_causality_violation_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:48:411:485 +Q1 finished at: 2023-9-24 22:20:11:225:625 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -32,15 +32,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (6) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:48:421:13 +Q2 finished at: 2023-9-24 22:20:11:230:248 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:48:511:507 + Q3 finished at: 2023-9-24 22:20:11:325:369 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:48:523:261 + Q4 finished at: 2023-9-24 22:20:11:329:63 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:38:48:525:440 + Q5 finished at: 2023-9-24 22:20:11:329:665 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:38:48:611:796 + Q6 finished at: 2023-9-24 22:20:11:425:454 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -57,11 +57,11 @@ Q2 finished at: 2023-9-23 18:38:48:421:13 (6) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:38:48:624:648 + Q7 finished at: 2023-9-24 22:20:11:429:105 Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:38:48:637:431 + Q8 finished at: 2023-9-24 22:20:11:432:513 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:48:639:672 + Q9 finished at: 2023-9-24 22:20:11:433:201 Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -78,9 +78,9 @@ Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(6) expected_result: (1,1) -Q10 finished at: 2023-9-23 18:38:48:712:962 +Q10 finished at: 2023-9-24 22:20:11:528:391 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:38:48:713:557 +Q11 finished at: 2023-9-24 22:20:11:529:183 Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -97,9 +97,9 @@ Q11 finished at: 2023-9-23 18:38:48:713:557 *(6) expected_result: (0,1) (1,1) - Q12 finished at: 2023-9-23 18:38:48:717:727 + Q12 finished at: 2023-9-24 22:20:11:533:609 Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:38:48:718:370 + Q13 finished at: 2023-9-24 22:20:11:534:184 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt index 1c7c8842..05ffa661 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_cross_phenomenon.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_cross_phenomenon test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:46:677:840 +Q1 finished at: 2023-9-24 22:20:9:600:137 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -48,9 +48,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (14) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:46:688:415 +Q2 finished at: 2023-9-24 22:20:9:604:203 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:46:777:550 + Q3 finished at: 2023-9-24 22:20:9:700:133 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -83,19 +83,19 @@ Q2 finished at: 2023-9-23 18:38:46:688:415 *(14) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:46:789:623 + Q4 finished at: 2023-9-24 22:20:9:704:785 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:38:46:876:642 + Q5 finished at: 2023-9-24 22:20:9:800:197 Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:38:46:880:696 + Q6 finished at: 2023-9-24 22:20:9:804:627 Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:46:881:289 + Q7 finished at: 2023-9-24 22:20:9:805:450 Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:38:46:976:727 + Q8 finished at: 2023-9-24 22:20:9:900:263 Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:38:46:981:116 + Q9 finished at: 2023-9-24 22:20:9:904:494 Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:46:981:796 + Q10 finished at: 2023-9-24 22:20:9:905:236 Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -128,9 +128,9 @@ Q2 finished at: 2023-9-23 18:38:46:688:415 *(14) expected_result: (0,1) - Q11 finished at: 2023-9-23 18:38:47:87:370 + Q11 finished at: 2023-9-24 22:20:10:3:710 Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:47:89:836 + Q12 finished at: 2023-9-24 22:20:10:4:571 Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -163,9 +163,9 @@ Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(14) expected_result: (1,1) -Q13 finished at: 2023-9-23 18:38:47:179:597 +Q13 finished at: 2023-9-24 22:20:10:104:492 Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:38:47:180:24 +Q14 finished at: 2023-9-24 22:20:10:105:452 Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -198,9 +198,9 @@ Q14 finished at: 2023-9-23 18:38:47:180:24 *(14) expected_result: (0,1) (1,1) - Q15 finished at: 2023-9-23 18:38:47:185:196 + Q15 finished at: 2023-9-24 22:20:10:111:806 Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:38:47:185:931 + Q16 finished at: 2023-9-24 22:20:10:112:749 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt index a80e20a7..91147d3f 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_delete.txt @@ -16,7 +16,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:41:131:109 +Q1 finished at: 2023-9-24 22:20:4:281:391 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +33,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: null -Q2 finished at: 2023-9-23 18:38:41:140:680 +Q2 finished at: 2023-9-24 22:20:4:285:701 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:41:229:640 + Q3 finished at: 2023-9-24 22:20:4:381:383 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +52,9 @@ Q2 finished at: 2023-9-23 18:38:41:140:680 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:38:41:232:941 + Q4 finished at: 2023-9-24 22:20:4:386:487 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:38:41:331:333 + Q5 finished at: 2023-9-24 22:20:4:481:469 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,19 +71,19 @@ Q2 finished at: 2023-9-23 18:38:41:140:680 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:38:41:344:900 + Q6 finished at: 2023-9-24 22:20:4:485:914 Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:38:41:433:731 +Q7 finished at: 2023-9-24 22:20:4:584:798 Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:38:41:540:414 + Q8 finished at: 2023-9-24 22:20:4:684:587 Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:38:41:640:148 + Q9 finished at: 2023-9-24 22:20:4:784:755 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:38:41:731:910 +Q10 finished at: 2023-9-24 22:20:4:881:471 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:38:41:830:425 + Q11 finished at: 2023-9-24 22:20:4:981:593 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:41:932:105 + Q12 finished at: 2023-9-24 22:20:5:81:657 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -100,9 +100,9 @@ Q10 finished at: 2023-9-23 18:38:41:731:910 *(6) expected_result: null - Q13 finished at: 2023-9-23 18:38:41:941:902 + Q13 finished at: 2023-9-24 22:20:5:84:800 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:41:943:969 + Q14 finished at: 2023-9-24 22:20:5:85:438 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt index abea006d..7cd0a122 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_predicate_based_insert.txt @@ -13,7 +13,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:43:157:53 +Q1 finished at: 2023-9-24 22:20:6:183:48 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: null @@ -30,9 +30,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:38:43:172:281 +Q2 finished at: 2023-9-24 22:20:6:186:378 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:43:255:198 + Q3 finished at: 2023-9-24 22:20:6:282:839 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: null @@ -49,9 +49,9 @@ Q2 finished at: 2023-9-23 18:38:43:172:281 *(6) expected_result: null - Q4 finished at: 2023-9-23 18:38:43:259:718 + Q4 finished at: 2023-9-24 22:20:6:285:101 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:38:43:355:359 + Q5 finished at: 2023-9-24 22:20:6:383:136 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: null @@ -68,19 +68,19 @@ Q2 finished at: 2023-9-23 18:38:43:172:281 *(6) expected_result: null - Q6 finished at: 2023-9-23 18:38:43:359:787 + Q6 finished at: 2023-9-24 22:20:6:386:886 Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:38:43:464:279 +Q7 finished at: 2023-9-24 22:20:6:485:829 Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:38:43:565:0 + Q8 finished at: 2023-9-24 22:20:6:585:321 Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:38:43:664:668 + Q9 finished at: 2023-9-24 22:20:6:685:571 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:38:43:757:485 +Q10 finished at: 2023-9-24 22:20:6:786:49 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:38:43:857:379 + Q11 finished at: 2023-9-24 22:20:6:883:323 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:43:957:537 + Q12 finished at: 2023-9-24 22:20:6:983:473 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) (2,0) @@ -97,9 +97,9 @@ Q10 finished at: 2023-9-23 18:38:43:757:485 (6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:38:43:971:57 + Q13 finished at: 2023-9-24 22:20:6:987:554 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:43:973:51 + Q14 finished at: 2023-9-24 22:20:6:988:170 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt index ce483547..21142262 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:49:906:505 +Q1 finished at: 2023-9-24 22:20:12:678:470 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -32,7 +32,7 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(6) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:38:49:910:673 +Q2 finished at: 2023-9-24 22:20:12:682:551 Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -49,9 +49,9 @@ Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,20) -Q3 finished at: 2023-9-23 18:38:49:913:23 +Q3 finished at: 2023-9-24 22:20:12:685:798 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:38:50:5:946 + Q4 finished at: 2023-9-24 22:20:12:778:953 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -68,13 +68,13 @@ Q3 finished at: 2023-9-23 18:38:49:913:23 *(6) expected_result: (1,0) - Q5 finished at: 2023-9-23 18:38:50:8:506 + Q5 finished at: 2023-9-24 22:20:12:782:887 Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:38:50:11:60 + Q6 finished at: 2023-9-24 22:20:12:786:403 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:50:11:537 + Q7 finished at: 2023-9-24 22:20:12:787:42 Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:38:50:107:691 + Q8 finished at: 2023-9-24 22:20:12:878:593 Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -91,7 +91,7 @@ Q3 finished at: 2023-9-23 18:38:49:913:23 *(6) expected_result: (0,0) - Q9 finished at: 2023-9-23 18:38:50:119:30 + Q9 finished at: 2023-9-24 22:20:12:882:418 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,20) @@ -108,13 +108,13 @@ Q3 finished at: 2023-9-23 18:38:49:913:23 (6) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:38:50:127:704 + Q10 finished at: 2023-9-24 22:20:12:885:656 Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:38:50:129:231 + Q11 finished at: 2023-9-24 22:20:12:886:443 Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:38:50:211:706 +Q12 finished at: 2023-9-24 22:20:12:981:721 Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:38:50:212:701 +Q13 finished at: 2023-9-24 22:20:12:982:206 Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,11) (1,20) @@ -131,9 +131,9 @@ Q13 finished at: 2023-9-23 18:38:50:212:701 *(6) expected_result: (0,11) (1,20) - Q14 finished at: 2023-9-23 18:38:50:220:563 + Q14 finished at: 2023-9-24 22:20:12:985:626 Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:38:50:221:637 + Q15 finished at: 2023-9-24 22:20:12:986:93 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt index 9de9e0f9..8cb02df3 100644 --- a/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt +++ b/test_result/centralizend_result/cassandra/one/iat_mda_step_iat_uname_anomaly.txt @@ -16,7 +16,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_uname_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:45:148:922 +Q1 finished at: 2023-9-24 22:20:8:142:752 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -33,9 +33,9 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,1) -Q2 finished at: 2023-9-23 18:38:45:160:254 +Q2 finished at: 2023-9-24 22:20:8:146:365 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:45:248:830 + Q3 finished at: 2023-9-24 22:20:8:242:714 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +52,9 @@ Q2 finished at: 2023-9-23 18:38:45:160:254 (6) expected_result: (0,2) - Q4 finished at: 2023-9-23 18:38:45:262:280 + Q4 finished at: 2023-9-24 22:20:8:246:322 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:45:275:93 + Q5 finished at: 2023-9-24 22:20:8:249:507 Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,13 +71,13 @@ Q2 finished at: 2023-9-23 18:38:45:160:254 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:38:45:286:100 + Q6 finished at: 2023-9-24 22:20:8:252:443 Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:38:45:295:310 + Q7 finished at: 2023-9-24 22:20:8:257:812 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:45:296:173 + Q8 finished at: 2023-9-24 22:20:8:258:754 Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:38:45:347:280 + Q9 finished at: 2023-9-24 22:20:8:342:805 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -94,9 +94,9 @@ Q2 finished at: 2023-9-23 18:38:45:160:254 *(6) expected_result: (2,0) - Q10 finished at: 2023-9-23 18:38:45:351:606 + Q10 finished at: 2023-9-24 22:20:8:346:162 Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:38:45:357:154 + Q11 finished at: 2023-9-24 22:20:8:349:26 Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -113,11 +113,11 @@ Q2 finished at: 2023-9-23 18:38:45:160:254 (6) expected_result: (0,0) - Q12 finished at: 2023-9-23 18:38:45:359:719 + Q12 finished at: 2023-9-24 22:20:8:351:882 Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:38:45:362:401 + Q13 finished at: 2023-9-24 22:20:8:355:112 Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:45:362:909 + Q14 finished at: 2023-9-24 22:20:8:355:722 Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,1) @@ -134,9 +134,9 @@ Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' *(6) expected_result: (2,1) -Q15 finished at: 2023-9-23 18:38:45:449:610 +Q15 finished at: 2023-9-24 22:20:8:447:131 Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:38:45:450:351 +Q16 finished at: 2023-9-24 22:20:8:447:875 Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) (2,1) @@ -153,9 +153,9 @@ Q16 finished at: 2023-9-23 18:38:45:450:351 *(6) expected_result: (0,2) (1,1) (2,1) - Q17 finished at: 2023-9-23 18:38:45:456:866 + Q17 finished at: 2023-9-24 22:20:8:452:789 Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:38:45:457:230 + Q18 finished at: 2023-9-24 22:20:8:453:416 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt index 4e3c74d0..2a37dde6 100644 --- a/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt +++ b/test_result/centralizend_result/cassandra/one/iat_sda_lost_update_committed.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_lost_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:29:484:827 +Q1 finished at: 2023-9-24 22:19:53:330:839 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,17 +23,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:38:29:493:977 +Q2 finished at: 2023-9-24 22:19:53:334:757 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:29:584:911 + Q3 finished at: 2023-9-24 22:19:53:430:808 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:29:597:264 + Q4 finished at: 2023-9-24 22:19:53:435:219 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:38:29:599:827 + Q5 finished at: 2023-9-24 22:19:53:436:68 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:38:29:686:65 +Q6 finished at: 2023-9-24 22:19:53:534:390 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:29:686:432 +Q7 finished at: 2023-9-24 22:19:53:535:112 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-23 18:38:29:686:432 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:38:29:688:209 + Q8 finished at: 2023-9-24 22:19:53:538:693 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:29:688:574 + Q9 finished at: 2023-9-24 22:19:53:539:390 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt index 156a5be1..f807303a 100644 --- a/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt +++ b/test_result/centralizend_result/cassandra/one/iat_sda_non_repeatable_read_committed.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_non_repeatable_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:28:75:537 +Q1 finished at: 2023-9-24 22:19:51:976:791 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,13 +23,13 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:28:81:474 +Q2 finished at: 2023-9-24 22:19:51:980:472 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:28:176:500 + Q3 finished at: 2023-9-24 22:19:52:76:866 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:28:189:713 + Q4 finished at: 2023-9-24 22:19:52:82:992 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:38:28:192:381 + Q5 finished at: 2023-9-24 22:19:52:84:385 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -38,9 +38,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(2) expected_result: (0,1) -Q6 finished at: 2023-9-23 18:38:28:279:108 +Q6 finished at: 2023-9-24 22:19:52:180:818 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:28:280:32 +Q7 finished at: 2023-9-24 22:19:52:181:658 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -49,9 +49,9 @@ Q7 finished at: 2023-9-23 18:38:28:280:32 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:38:28:284:367 + Q8 finished at: 2023-9-24 22:19:52:185:859 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:28:285:103 + Q9 finished at: 2023-9-24 22:19:52:186:510 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt index 73b3bf7c..c385ff89 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1.txt @@ -15,13 +15,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:40:892:501 +Q1 finished at: 2023-9-24 22:19:7:505:288 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:40:906:350 +Q2 finished at: 2023-9-24 22:19:7:509:924 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:40:992:291 + Q3 finished at: 2023-9-24 22:19:7:605:301 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:41:6:669 + Q4 finished at: 2023-9-24 22:19:7:610:110 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,13 +30,13 @@ Q2 finished at: 2023-9-23 18:37:40:906:350 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:41:19:587 + Q5 finished at: 2023-9-24 22:19:7:614:138 Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:37:41:104:708 +Q6 finished at: 2023-9-24 22:19:7:709:112 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:37:41:204:767 + Q7 finished at: 2023-9-24 22:19:7:805:998 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:41:292:767 +Q8 finished at: 2023-9-24 22:19:7:906:244 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,2) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:37:41:292:767 *(2) expected_result: (0,1) (1,2) - Q9 finished at: 2023-9-23 18:37:41:313:386 + Q9 finished at: 2023-9-24 22:19:7:914:34 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:41:315:636 + Q10 finished at: 2023-9-24 22:19:7:914:821 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt index 1d28f384..0b5bd710 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew1_committed.txt @@ -15,13 +15,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:42:498:835 +Q1 finished at: 2023-9-24 22:19:9:74:577 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:42:513:605 +Q2 finished at: 2023-9-24 22:19:9:78:323 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:42:598:249 + Q3 finished at: 2023-9-24 22:19:9:174:776 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:42:611:489 + Q4 finished at: 2023-9-24 22:19:9:178:920 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,13 +30,13 @@ Q2 finished at: 2023-9-23 18:37:42:513:605 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:42:623:983 + Q5 finished at: 2023-9-24 22:19:9:182:129 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:42:626:588 + Q6 finished at: 2023-9-24 22:19:9:182:953 Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:37:42:710:987 +Q7 finished at: 2023-9-24 22:19:9:278:576 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:42:713:215 +Q8 finished at: 2023-9-24 22:19:9:279:185 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,2) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:37:42:713:215 *(2) expected_result: (0,1) (1,2) - Q9 finished at: 2023-9-23 18:37:42:729:547 + Q9 finished at: 2023-9-24 22:19:9:283:285 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:42:731:777 + Q10 finished at: 2023-9-24 22:19:9:283:799 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt index b38f7b52..7a026d70 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_double_write_skew2.txt @@ -15,15 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:43:985:736 +Q1 finished at: 2023-9-24 22:19:10:404:92 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:43:998:982 +Q2 finished at: 2023-9-24 22:19:10:408:62 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:44:85:550 + Q3 finished at: 2023-9-24 22:19:10:504:211 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:44:99:160 + Q4 finished at: 2023-9-24 22:19:10:508:878 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:37:44:114:893 + Q5 finished at: 2023-9-24 22:19:10:513:7 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -32,11 +32,11 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:37:44:194:923 +Q6 finished at: 2023-9-24 22:19:10:607:444 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:44:197:105 +Q7 finished at: 2023-9-24 22:19:10:608:139 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:37:44:284:713 + Q8 finished at: 2023-9-24 22:19:10:704:581 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,9 +45,9 @@ Q7 finished at: 2023-9-23 18:37:44:197:105 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:44:290:473 + Q9 finished at: 2023-9-24 22:19:10:709:856 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:44:291:210 + Q10 finished at: 2023-9-24 22:19:10:710:434 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt index e7343a7d..9eef15b4 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:45:492:333 +Q1 finished at: 2023-9-24 22:19:11:839:98 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,13 +24,13 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:37:45:502:785 +Q2 finished at: 2023-9-24 22:19:11:843:92 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:45:592:236 + Q3 finished at: 2023-9-24 22:19:11:939:82 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:45:606:952 + Q4 finished at: 2023-9-24 22:19:11:944:300 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:37:45:621:155 + Q5 finished at: 2023-9-24 22:19:11:948:868 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -39,11 +39,11 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:37:45:700:996 +Q6 finished at: 2023-9-24 22:19:12:41:840 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:37:45:793:66 + Q7 finished at: 2023-9-24 22:19:12:139:325 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:45:892:930 +Q8 finished at: 2023-9-24 22:19:12:239:493 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:37:45:892:930 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:45:909:338 + Q9 finished at: 2023-9-24 22:19:12:245:449 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:45:911:413 + Q10 finished at: 2023-9-24 22:19:12:246:198 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt index 24b4acdd..e9c479e5 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2.txt @@ -15,11 +15,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:49:995:450 +Q1 finished at: 2023-9-24 22:19:16:21:479 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:50:7:836 +Q2 finished at: 2023-9-24 22:19:16:26:165 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:50:95:271 + Q3 finished at: 2023-9-24 22:19:16:121:217 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,7 +28,7 @@ Q2 finished at: 2023-9-23 18:37:50:7:836 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:37:50:106:589 + Q4 finished at: 2023-9-24 22:19:16:124:484 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +37,13 @@ Q2 finished at: 2023-9-23 18:37:50:7:836 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:50:118:539 + Q5 finished at: 2023-9-24 22:19:16:128:221 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:37:50:206:867 +Q6 finished at: 2023-9-24 22:19:16:224:126 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:50:208:848 +Q7 finished at: 2023-9-24 22:19:16:224:556 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:37:50:296:267 + Q8 finished at: 2023-9-24 22:19:16:321:434 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q7 finished at: 2023-9-23 18:37:50:208:848 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:50:309:899 + Q9 finished at: 2023-9-24 22:19:16:325:237 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:50:311:932 + Q10 finished at: 2023-9-24 22:19:16:325:732 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt index 09458d71..5722478c 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew2_committed.txt @@ -15,11 +15,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:51:482:704 +Q1 finished at: 2023-9-24 22:19:17:487:981 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:51:486:258 +Q2 finished at: 2023-9-24 22:19:17:492:346 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:51:582:626 + Q3 finished at: 2023-9-24 22:19:17:588:162 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,7 +28,7 @@ Q2 finished at: 2023-9-23 18:37:51:486:258 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:37:51:585:447 + Q4 finished at: 2023-9-24 22:19:17:591:699 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +37,13 @@ Q2 finished at: 2023-9-23 18:37:51:486:258 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:51:587:718 + Q5 finished at: 2023-9-24 22:19:17:595:73 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:51:588:152 + Q6 finished at: 2023-9-24 22:19:17:595:897 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:37:51:689:66 +Q7 finished at: 2023-9-24 22:19:17:692:437 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:51:689:686 +Q8 finished at: 2023-9-24 22:19:17:693:208 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:37:51:689:686 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:51:692:837 + Q9 finished at: 2023-9-24 22:19:17:699:496 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:51:693:235 + Q10 finished at: 2023-9-24 22:19:17:700:384 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt index 444ccde2..f7979a7a 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_delete.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:47:129:796 +Q1 finished at: 2023-9-24 22:19:13:379:794 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -24,15 +24,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:37:47:145:364 +Q2 finished at: 2023-9-24 22:19:13:387:998 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:47:229:782 + Q3 finished at: 2023-9-24 22:19:13:479:170 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:47:243:47 + Q4 finished at: 2023-9-24 22:19:13:487:553 Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:37:47:256:570 + Q5 finished at: 2023-9-24 22:19:13:491:841 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:47:259:124 + Q6 finished at: 2023-9-24 22:19:13:492:581 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -41,9 +41,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:37:47:341:835 +Q7 finished at: 2023-9-24 22:19:13:583:388 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:47:344:72 +Q8 finished at: 2023-9-24 22:19:13:584:63 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: null @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:37:47:344:72 *(2) expected_result: null - Q9 finished at: 2023-9-23 18:37:47:358:359 + Q9 finished at: 2023-9-24 22:19:13:589:364 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:47:360:590 + Q10 finished at: 2023-9-24 22:19:13:590:52 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt index c89b8c02..8be87b5d 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_read_skew_predicate_based_insert.txt @@ -13,7 +13,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:48:541:3 +Q1 finished at: 2023-9-24 22:19:14:737:596 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,15 +22,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:37:48:548:98 +Q2 finished at: 2023-9-24 22:19:14:741:919 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:48:641:177 + Q3 finished at: 2023-9-24 22:19:14:837:635 Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:37:48:647:60 + Q4 finished at: 2023-9-24 22:19:14:841:280 Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:37:48:649:931 + Q5 finished at: 2023-9-24 22:19:14:845:562 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:48:650:508 + Q6 finished at: 2023-9-24 22:19:14:846:222 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -39,9 +39,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:37:48:747:126 +Q7 finished at: 2023-9-24 22:19:14:940:465 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:48:748:381 +Q8 finished at: 2023-9-24 22:19:14:940:933 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) @@ -50,9 +50,9 @@ Q8 finished at: 2023-9-23 18:37:48:748:381 *(2) expected_result: (0,0) (1,0) - Q9 finished at: 2023-9-23 18:37:48:759:234 + Q9 finished at: 2023-9-24 22:19:14:944:582 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:48:760:865 + Q10 finished at: 2023-9-24 22:19:14:945:76 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt index 7725d1a8..4f7142f0 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew.txt @@ -15,13 +15,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:37:759:905 +Q1 finished at: 2023-9-24 22:19:4:632:583 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:37:778:390 +Q2 finished at: 2023-9-24 22:19:4:638:259 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:37:859:951 + Q3 finished at: 2023-9-24 22:19:4:732:567 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:37:875:916 + Q4 finished at: 2023-9-24 22:19:4:738:297 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,7 +30,7 @@ Q2 finished at: 2023-9-23 18:37:37:778:390 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:37:892:52 + Q5 finished at: 2023-9-24 22:19:4:744:212 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' current_result: (1,1) @@ -39,11 +39,11 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' *(2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:37:37:960:906 +Q6 finished at: 2023-9-24 22:19:4:834:946 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:37:38:60:524 + Q7 finished at: 2023-9-24 22:19:4:932:627 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:38:160:205 +Q8 finished at: 2023-9-24 22:19:5:32:931 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:37:38:160:205 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:38:193:793 + Q9 finished at: 2023-9-24 22:19:5:45:418 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:38:195:871 + Q10 finished at: 2023-9-24 22:19:5:46:134 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt index 89438430..05751d6b 100644 --- a/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt +++ b/test_result/centralizend_result/cassandra/one/rat_dda_write_read_skew_committed.txt @@ -15,13 +15,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:39:434:446 +Q1 finished at: 2023-9-24 22:19:6:185:789 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:39:450:182 +Q2 finished at: 2023-9-24 22:19:6:191:188 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:39:534:454 + Q3 finished at: 2023-9-24 22:19:6:285:596 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:39:550:303 + Q4 finished at: 2023-9-24 22:19:6:290:134 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,9 +30,9 @@ Q2 finished at: 2023-9-23 18:37:39:450:182 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:39:564:211 + Q5 finished at: 2023-9-24 22:19:6:293:25 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:39:566:838 + Q6 finished at: 2023-9-24 22:19:6:293:608 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -41,9 +41,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(2) expected_result: (1,1) -Q7 finished at: 2023-9-23 18:37:39:644:97 +Q7 finished at: 2023-9-24 22:19:6:389:290 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:37:39:646:487 +Q8 finished at: 2023-9-24 22:19:6:389:939 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +52,9 @@ Q8 finished at: 2023-9-23 18:37:39:646:487 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:37:39:661:197 + Q9 finished at: 2023-9-24 22:19:6:394:912 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:37:39:663:617 + Q10 finished at: 2023-9-24 22:19:6:395:543 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt index 791a427b..ac1a12df 100644 --- a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat.txt @@ -16,13 +16,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:52:910:8 +Q1 finished at: 2023-9-24 22:19:18:829:206 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:52:923:703 +Q2 finished at: 2023-9-24 22:19:18:834:227 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:53:8:481 + Q3 finished at: 2023-9-24 22:19:18:929:60 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:53:11:835 + Q4 finished at: 2023-9-24 22:19:18:933:100 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -39,11 +39,11 @@ Q2 finished at: 2023-9-23 18:37:52:923:703 (6) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:37:53:14:892 + Q5 finished at: 2023-9-24 22:19:18:936:9 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:37:53:110:250 + Q6 finished at: 2023-9-24 22:19:19:29:165 Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:37:53:124:688 + Q7 finished at: 2023-9-24 22:19:19:33:992 Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -60,7 +60,7 @@ Q2 finished at: 2023-9-23 18:37:52:923:703 (6) expected_result: (1,0) - Q8 finished at: 2023-9-23 18:37:53:138:309 + Q8 finished at: 2023-9-24 22:19:19:38:146 Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,1) @@ -77,13 +77,13 @@ Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' *(6) expected_result: (2,1) -Q9 finished at: 2023-9-23 18:37:53:219:852 +Q9 finished at: 2023-9-24 22:19:19:132:977 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:37:53:222:326 +Q10 finished at: 2023-9-24 22:19:19:133:629 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:37:53:310:598 + Q11 finished at: 2023-9-24 22:19:19:229:257 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:37:53:409:806 + Q12 finished at: 2023-9-24 22:19:19:330:528 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -100,9 +100,9 @@ Q10 finished at: 2023-9-23 18:37:53:222:326 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:37:53:421:300 + Q13 finished at: 2023-9-24 22:19:19:339:543 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:37:53:422:600 + Q14 finished at: 2023-9-24 22:19:19:340:437 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt index 787a505d..bde46e18 100644 --- a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_long_fork.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_long_fork test run---------- Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:37:54:665:771 + Q1 finished at: 2023-9-24 22:19:20:452:275 Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -48,13 +48,13 @@ Q0-T1 execute opt: 'COMMIT'; *(14) expected_result: (0,0) - Q2 finished at: 2023-9-23 18:37:54:670:35 + Q2 finished at: 2023-9-24 22:19:20:457:691 Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:37:54:765:877 +Q3 finished at: 2023-9-24 22:19:20:552:123 Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:37:54:770:466 +Q4 finished at: 2023-9-24 22:19:20:556:262 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:37:54:865:813 + Q5 finished at: 2023-9-24 22:19:20:652:250 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -87,7 +87,7 @@ Q4 finished at: 2023-9-23 18:37:54:770:466 (14) expected_result: (1,1) - Q6 finished at: 2023-9-23 18:37:54:870:136 + Q6 finished at: 2023-9-24 22:19:20:656:807 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -120,11 +120,11 @@ Q4 finished at: 2023-9-23 18:37:54:770:466 (14) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:37:54:873:685 + Q7 finished at: 2023-9-24 22:19:20:661:199 Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:37:54:965:769 + Q8 finished at: 2023-9-24 22:19:20:752:190 Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:37:54:973:999 + Q9 finished at: 2023-9-24 22:19:20:756:386 Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -157,15 +157,15 @@ Q4 finished at: 2023-9-23 18:37:54:770:466 (14) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:37:55:72:393 + Q10 finished at: 2023-9-24 22:19:20:856:836 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:37:55:166:1 +Q11 finished at: 2023-9-24 22:19:20:952:208 Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:37:55:266:0 + Q12 finished at: 2023-9-24 22:19:21:52:400 Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:37:55:365:921 + Q13 finished at: 2023-9-24 22:19:21:152:526 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:37:55:366:468 + Q14 finished at: 2023-9-24 22:19:21:153:159 Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -198,9 +198,9 @@ Q11 finished at: 2023-9-23 18:37:55:166:1 *(14) expected_result: (0,1) (1,1) - Q15 finished at: 2023-9-23 18:37:55:372:988 + Q15 finished at: 2023-9-24 22:19:21:156:937 Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:37:55:373:516 + Q16 finished at: 2023-9-24 22:19:21:157:445 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt index 3513170c..e618dec0 100644 --- a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_delete.txt @@ -16,13 +16,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:56:546:820 +Q1 finished at: 2023-9-24 22:19:22:272:631 Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:56:550:772 +Q2 finished at: 2023-9-24 22:19:22:277:368 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:56:647:297 + Q3 finished at: 2023-9-24 22:19:22:372:472 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:37:56:654:217 + Q4 finished at: 2023-9-24 22:19:22:376:917 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: (0,) @@ -39,11 +39,11 @@ Q2 finished at: 2023-9-23 18:37:56:550:772 (6) expected_result: (1,) - Q5 finished at: 2023-9-23 18:37:56:664:889 + Q5 finished at: 2023-9-24 22:19:22:383:149 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:37:56:748:463 + Q6 finished at: 2023-9-24 22:19:22:472:592 Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:37:56:760:247 + Q7 finished at: 2023-9-24 22:19:22:476:42 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: (0,) @@ -60,7 +60,7 @@ Q2 finished at: 2023-9-23 18:37:56:550:772 (6) expected_result: (1,) - Q8 finished at: 2023-9-23 18:37:56:771:987 + Q8 finished at: 2023-9-24 22:19:22:479:486 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: (0,) @@ -77,13 +77,13 @@ Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' (6) expected_result: (,) -Q9 finished at: 2023-9-23 18:37:56:851:740 +Q9 finished at: 2023-9-24 22:19:22:575:139 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:37:56:852:513 +Q10 finished at: 2023-9-24 22:19:22:575:718 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:37:56:948:705 + Q11 finished at: 2023-9-24 22:19:22:672:740 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:37:57:49:50 + Q12 finished at: 2023-9-24 22:19:22:772:895 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -100,9 +100,9 @@ Q10 finished at: 2023-9-23 18:37:56:852:513 *(6) expected_result: null - Q13 finished at: 2023-9-23 18:37:57:61:207 + Q13 finished at: 2023-9-24 22:19:22:775:749 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:37:57:63:103 + Q14 finished at: 2023-9-24 22:19:22:776:295 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt index e0db80b3..f2f11250 100644 --- a/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt +++ b/test_result/centralizend_result/cassandra/one/rat_mda_step_rat_predicate_based_insert.txt @@ -13,13 +13,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:58:243:310 +Q1 finished at: 2023-9-24 22:19:23:908:342 Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:37:58:256:896 +Q2 finished at: 2023-9-24 22:19:23:912:744 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:58:341:665 + Q3 finished at: 2023-9-24 22:19:24:8:511 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:37:58:345:576 + Q4 finished at: 2023-9-24 22:19:24:13:66 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: (1,) @@ -36,11 +36,11 @@ Q2 finished at: 2023-9-23 18:37:58:256:896 *(6) expected_result: (1,) - Q5 finished at: 2023-9-23 18:37:58:349:178 + Q5 finished at: 2023-9-24 22:19:24:18:966 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:37:58:442:233 + Q6 finished at: 2023-9-24 22:19:24:108:464 Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:37:58:446:774 + Q7 finished at: 2023-9-24 22:19:24:113:165 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: (1,) @@ -57,7 +57,7 @@ Q2 finished at: 2023-9-23 18:37:58:256:896 (6) expected_result: (,) - Q8 finished at: 2023-9-23 18:37:58:452:981 + Q8 finished at: 2023-9-24 22:19:24:119:419 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: (1,) @@ -74,13 +74,13 @@ Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' (6) expected_result: (,) -Q9 finished at: 2023-9-23 18:37:58:555:40 +Q9 finished at: 2023-9-24 22:19:24:212:802 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:37:58:557:576 +Q10 finished at: 2023-9-24 22:19:24:213:781 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:37:58:643:839 + Q11 finished at: 2023-9-24 22:19:24:308:802 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:37:58:743:819 + Q12 finished at: 2023-9-24 22:19:24:408:740 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -97,9 +97,9 @@ Q10 finished at: 2023-9-23 18:37:58:557:576 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:37:58:761:774 + Q13 finished at: 2023-9-24 22:19:24:414:541 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:37:58:763:857 + Q14 finished at: 2023-9-24 22:19:24:415:396 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt index a3f9cf13..4bf932e9 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_dirty_read.txt @@ -14,31 +14,31 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_dirty_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:27:226:216 +Q1 finished at: 2023-9-24 22:18:54:451:848 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:27:272:499 +Q2 finished at: 2023-9-24 22:18:54:466:94 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:27:324:387 + Q3 finished at: 2023-9-24 22:18:54:551:758 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' current_result: (0,1) (1) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:37:27:347:388 + Q4 finished at: 2023-9-24 22:18:54:594:419 Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:37:27:426:328 +Q5 finished at: 2023-9-24 22:18:54:651:870 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:27:526:475 + Q6 finished at: 2023-9-24 22:18:54:751:998 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) (1) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:37:27:541:372 + Q7 finished at: 2023-9-24 22:18:54:756:245 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:37:27:543:410 + Q8 finished at: 2023-9-24 22:18:54:756:873 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt index f9aaff75..68f85c36 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read.txt @@ -14,11 +14,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:30:353:117 +Q1 finished at: 2023-9-24 22:18:57:484:790 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:30:372:582 +Q2 finished at: 2023-9-24 22:18:57:490:879 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:30:453:77 + Q3 finished at: 2023-9-24 22:18:57:584:569 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -27,13 +27,13 @@ Q2 finished at: 2023-9-23 18:37:30:372:582 (2) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:37:30:491:652 + Q4 finished at: 2023-9-24 22:18:57:596:100 Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:37:30:571:665 +Q5 finished at: 2023-9-24 22:18:57:690:633 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:30:652:315 + Q6 finished at: 2023-9-24 22:18:57:785:88 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:30:753:686 +Q7 finished at: 2023-9-24 22:18:57:885:81 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-23 18:37:30:753:686 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-23 18:37:30:766:425 + Q8 finished at: 2023-9-24 22:18:57:890:577 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:30:768:700 + Q9 finished at: 2023-9-24 22:18:57:891:311 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt index 58507f17..29ae49be 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_intermediate_read_committed.txt @@ -14,11 +14,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:31:945:924 +Q1 finished at: 2023-9-24 22:18:59:10:23 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:31:965:320 +Q2 finished at: 2023-9-24 22:18:59:17:919 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:32:45:907 + Q3 finished at: 2023-9-24 22:18:59:109:874 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -27,13 +27,13 @@ Q2 finished at: 2023-9-23 18:37:31:965:320 (2) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:37:32:64:352 + Q4 finished at: 2023-9-24 22:18:59:114:427 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:37:32:67:89 + Q5 finished at: 2023-9-24 22:18:59:115:174 Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:37:32:160:419 +Q6 finished at: 2023-9-24 22:18:59:214:390 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:32:162:621 +Q7 finished at: 2023-9-24 22:18:59:214:957 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-23 18:37:32:162:621 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-23 18:37:32:176:574 + Q8 finished at: 2023-9-24 22:18:59:219:425 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:32:178:409 + Q9 finished at: 2023-9-24 22:18:59:220:8 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt index cf99ac0e..4909d44a 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_lost_self_update.txt @@ -14,13 +14,13 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_lost_self_update test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:36:225:389 +Q1 finished at: 2023-9-24 22:19:3:124:110 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:36:242:714 +Q2 finished at: 2023-9-24 22:19:3:130:132 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:36:325:402 + Q3 finished at: 2023-9-24 22:19:3:224:69 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:37:36:343:655 + Q4 finished at: 2023-9-24 22:19:3:230:580 Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,2) @@ -29,11 +29,11 @@ Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q5 finished at: 2023-9-23 18:37:36:436:23 +Q5 finished at: 2023-9-24 22:19:3:327:949 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:37:36:438:154 +Q6 finished at: 2023-9-24 22:19:3:328:715 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:37:36:526:218 + Q7 finished at: 2023-9-24 22:19:3:425:988 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,9 +42,9 @@ Q6 finished at: 2023-9-23 18:37:36:438:154 (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:37:36:536:663 + Q8 finished at: 2023-9-24 22:19:3:435:671 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:36:538:902 + Q9 finished at: 2023-9-24 22:19:3:437:584 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt index 89df4d7d..2b316a37 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:28:693:741 +Q1 finished at: 2023-9-24 22:18:55:921:858 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,11 +23,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:37:28:698:329 +Q2 finished at: 2023-9-24 22:18:55:926:945 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:28:795:379 + Q3 finished at: 2023-9-24 22:18:56:21:911 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:37:28:819:685 + Q4 finished at: 2023-9-24 22:18:56:27:625 Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -36,11 +36,11 @@ Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(2) expected_result: (0,1) -Q5 finished at: 2023-9-23 18:37:28:909:687 +Q5 finished at: 2023-9-24 22:18:56:125:970 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:37:28:995:866 + Q6 finished at: 2023-9-24 22:18:56:222:297 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:29:95:648 +Q7 finished at: 2023-9-24 22:18:56:322:215 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -49,9 +49,9 @@ Q7 finished at: 2023-9-23 18:37:29:95:648 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:37:29:109:428 + Q8 finished at: 2023-9-24 22:18:56:326:967 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:29:111:496 + Q9 finished at: 2023-9-24 22:18:56:327:617 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index 53226855..a762f596 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:33:364:901 +Q1 finished at: 2023-9-24 22:19:0:392:365 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -23,13 +23,13 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:37:33:438:602 +Q2 finished at: 2023-9-24 22:19:0:452:261 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:33:463:360 + Q3 finished at: 2023-9-24 22:19:0:493:432 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:37:33:469:59 + Q4 finished at: 2023-9-24 22:19:0:508:689 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:37:33:469:564 + Q5 finished at: 2023-9-24 22:19:0:510:408 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -38,9 +38,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:37:33:579:82 +Q6 finished at: 2023-9-24 22:19:0:596:867 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:33:581:491 +Q7 finished at: 2023-9-24 22:19:0:597:418 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: null @@ -49,9 +49,9 @@ Q7 finished at: 2023-9-23 18:37:33:581:491 *(2) expected_result: null - Q8 finished at: 2023-9-23 18:37:33:594:393 + Q8 finished at: 2023-9-24 22:19:0:601:214 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:33:596:563 + Q9 finished at: 2023-9-24 22:19:0:601:830 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index 4846cf1b..d75ceef4 100644 --- a/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/test_result/centralizend_result/cassandra/one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -13,7 +13,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:34:825:996 +Q1 finished at: 2023-9-24 22:19:1:768:995 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,13 +22,13 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:37:34:848:119 +Q2 finished at: 2023-9-24 22:19:1:775:423 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:37:34:926:173 + Q3 finished at: 2023-9-24 22:19:1:868:758 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:37:34:943:130 + Q4 finished at: 2023-9-24 22:19:1:874:57 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:37:34:945:525 + Q5 finished at: 2023-9-24 22:19:1:874:724 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -37,9 +37,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:37:35:40:407 +Q6 finished at: 2023-9-24 22:19:1:974:207 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:37:35:42:525 +Q7 finished at: 2023-9-24 22:19:1:974:869 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,0) @@ -48,9 +48,9 @@ Q7 finished at: 2023-9-23 18:37:35:42:525 *(2) expected_result: (0,0) - Q8 finished at: 2023-9-23 18:37:35:53:814 + Q8 finished at: 2023-9-24 22:19:1:978:812 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:37:35:55:847 + Q9 finished at: 2023-9-24 22:19:1:979:516 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt index 3cb21a06..536a5fcf 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_double_write_skew2_committed.txt @@ -15,17 +15,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_double_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:10:441:485 +Q1 finished at: 2023-9-24 22:19:35:452:871 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:10:453:26 +Q2 finished at: 2023-9-24 22:19:35:458:832 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:10:540:460 + Q3 finished at: 2023-9-24 22:19:35:552:510 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:10:548:611 + Q4 finished at: 2023-9-24 22:19:35:555:980 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:10:557:359 + Q5 finished at: 2023-9-24 22:19:35:559:626 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:10:559:12 + Q6 finished at: 2023-9-24 22:19:35:560:299 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,1) @@ -34,9 +34,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' *(2) expected_result: (1,1) -Q7 finished at: 2023-9-23 18:38:10:649:152 +Q7 finished at: 2023-9-24 22:19:35:654:833 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:10:651:606 +Q8 finished at: 2023-9-24 22:19:35:655:358 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:38:10:651:606 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:10:664:944 + Q9 finished at: 2023-9-24 22:19:35:660:77 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:10:667:26 + Q10 finished at: 2023-9-24 22:19:35:660:614 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt index 7cf0a6e6..f5d3abd2 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c1.txt @@ -15,21 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:11:869:768 +Q1 finished at: 2023-9-24 22:19:36:793:86 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:11:876:732 +Q2 finished at: 2023-9-24 22:19:36:797:652 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:11:970:494 + Q3 finished at: 2023-9-24 22:19:36:894:460 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:11:977:766 + Q4 finished at: 2023-9-24 22:19:36:905:344 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:11:984:563 + Q5 finished at: 2023-9-24 22:19:36:913:539 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:12:74:725 +Q6 finished at: 2023-9-24 22:19:36:995:741 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:12:75:253 +Q7 finished at: 2023-9-24 22:19:36:996:165 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:12:170:214 + Q8 finished at: 2023-9-24 22:19:37:93:159 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -38,9 +38,9 @@ Q7 finished at: 2023-9-23 18:38:12:75:253 (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:38:12:174:190 + Q9 finished at: 2023-9-24 22:19:37:97:634 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:12:174:679 + Q10 finished at: 2023-9-24 22:19:37:98:151 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt index de98ee83..ab0d88c4 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_c2.txt @@ -15,21 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:13:421:586 +Q1 finished at: 2023-9-24 22:19:38:215:965 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:13:433:671 +Q2 finished at: 2023-9-24 22:19:38:222:369 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:13:521:693 + Q3 finished at: 2023-9-24 22:19:38:315:605 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:13:534:268 + Q4 finished at: 2023-9-24 22:19:38:320:331 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:13:545:976 + Q5 finished at: 2023-9-24 22:19:38:324:552 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:13:623:751 +Q6 finished at: 2023-9-24 22:19:38:419:320 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:13:722:52 + Q7 finished at: 2023-9-24 22:19:38:515:481 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:13:820:559 +Q8 finished at: 2023-9-24 22:19:38:617:274 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -38,9 +38,9 @@ Q8 finished at: 2023-9-23 18:38:13:820:559 (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:38:13:825:131 + Q9 finished at: 2023-9-24 22:19:38:629:206 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:13:825:578 + Q10 finished at: 2023-9-24 22:19:38:630:529 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt index 9e5c0549..952cb708 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_full_write_skew_committed.txt @@ -15,21 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:14:980:191 +Q1 finished at: 2023-9-24 22:19:39:767:561 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:14:992:2 +Q2 finished at: 2023-9-24 22:19:39:771:902 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:15:80:230 + Q3 finished at: 2023-9-24 22:19:39:867:732 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:15:92:965 + Q4 finished at: 2023-9-24 22:19:39:872:439 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:15:107:750 + Q5 finished at: 2023-9-24 22:19:39:877:640 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:15:110:653 + Q6 finished at: 2023-9-24 22:19:39:878:753 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:38:15:181:85 +Q7 finished at: 2023-9-24 22:19:39:970:741 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:15:181:468 +Q8 finished at: 2023-9-24 22:19:39:971:337 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -38,9 +38,9 @@ Q8 finished at: 2023-9-23 18:38:15:181:468 (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:38:15:184:996 + Q9 finished at: 2023-9-24 22:19:39:976:92 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:15:185:357 + Q10 finished at: 2023-9-24 22:19:39:976:971 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt index 7e712c52..32c6174c 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c1.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:16:399:298 +Q1 finished at: 2023-9-24 22:19:41:102:507 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,19 +24,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:16:409:306 +Q2 finished at: 2023-9-24 22:19:41:105:425 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:16:499:391 + Q3 finished at: 2023-9-24 22:19:41:202:646 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:16:512:480 + Q4 finished at: 2023-9-24 22:19:41:206:740 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:16:525:823 + Q5 finished at: 2023-9-24 22:19:41:211:7 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:16:609:301 +Q6 finished at: 2023-9-24 22:19:41:305:957 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:16:611:524 +Q7 finished at: 2023-9-24 22:19:41:306:545 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:16:699:767 + Q8 finished at: 2023-9-24 22:19:41:402:809 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -45,9 +45,9 @@ Q7 finished at: 2023-9-23 18:38:16:611:524 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:16:713:402 + Q9 finished at: 2023-9-24 22:19:41:406:887 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:16:715:591 + Q10 finished at: 2023-9-24 22:19:41:407:410 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt index ad320ee7..23bb440d 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew1_c2.txt @@ -15,7 +15,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:17:963:818 +Q1 finished at: 2023-9-24 22:19:42:533:60 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,19 +24,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:38:17:968:256 +Q2 finished at: 2023-9-24 22:19:42:536:438 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:18:64:2 + Q3 finished at: 2023-9-24 22:19:42:633:68 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:18:69:904 + Q4 finished at: 2023-9-24 22:19:42:636:912 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:18:76:164 + Q5 finished at: 2023-9-24 22:19:42:640:337 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:18:167:887 +Q6 finished at: 2023-9-24 22:19:42:737:526 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:18:265:703 + Q7 finished at: 2023-9-24 22:19:42:833:675 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:18:363:904 +Q8 finished at: 2023-9-24 22:19:42:933:450 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:38:18:363:904 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:18:369:2 + Q9 finished at: 2023-9-24 22:19:42:938:960 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:18:369:531 + Q10 finished at: 2023-9-24 22:19:42:939:719 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt index ea929f88..5a2801af 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c1.txt @@ -15,11 +15,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:19:587:662 +Q1 finished at: 2023-9-24 22:19:44:91:135 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:19:591:669 +Q2 finished at: 2023-9-24 22:19:44:95:274 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:19:689:208 + Q3 finished at: 2023-9-24 22:19:44:191:157 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,15 +28,15 @@ Q2 finished at: 2023-9-23 18:38:19:591:669 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:19:700:242 + Q4 finished at: 2023-9-24 22:19:44:194:736 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:19:713:145 + Q5 finished at: 2023-9-24 22:19:44:199:444 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:19:792:411 +Q6 finished at: 2023-9-24 22:19:44:299:611 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:19:793:119 +Q7 finished at: 2023-9-24 22:19:44:300:643 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:38:19:888:148 + Q8 finished at: 2023-9-24 22:19:44:391:563 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,9 +45,9 @@ Q7 finished at: 2023-9-23 18:38:19:793:119 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:19:893:804 + Q9 finished at: 2023-9-24 22:19:44:397:110 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:19:894:729 + Q10 finished at: 2023-9-24 22:19:44:397:740 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt index d78713c3..c042b498 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_c2.txt @@ -15,11 +15,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:21:139:729 +Q1 finished at: 2023-9-24 22:19:45:542:467 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:21:151:907 +Q2 finished at: 2023-9-24 22:19:45:553:491 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:21:239:513 + Q3 finished at: 2023-9-24 22:19:45:641:276 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,15 +28,15 @@ Q2 finished at: 2023-9-23 18:38:21:151:907 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:21:249:976 + Q4 finished at: 2023-9-24 22:19:45:645:104 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:21:262:716 + Q5 finished at: 2023-9-24 22:19:45:649:516 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:38:21:344:610 +Q6 finished at: 2023-9-24 22:19:45:744:634 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:21:440:451 + Q7 finished at: 2023-9-24 22:19:45:841:66 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:21:539:399 +Q8 finished at: 2023-9-24 22:19:45:941:146 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:38:21:539:399 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:21:549:704 + Q9 finished at: 2023-9-24 22:19:45:945:597 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:21:551:214 + Q10 finished at: 2023-9-24 22:19:45:946:145 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt index dedbc9df..c45b03c1 100644 --- a/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt +++ b/test_result/centralizend_result/cassandra/one/wat_dda_read_write_skew2_committed.txt @@ -15,11 +15,11 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:22:810:850 +Q1 finished at: 2023-9-24 22:19:47:41:254 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:22:824:328 +Q2 finished at: 2023-9-24 22:19:47:47:775 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:22:910:846 + Q3 finished at: 2023-9-24 22:19:47:141:68 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,15 +28,15 @@ Q2 finished at: 2023-9-23 18:38:22:824:328 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:38:22:923:741 + Q4 finished at: 2023-9-24 22:19:47:146:403 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:22:934:956 + Q5 finished at: 2023-9-24 22:19:47:151:615 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:22:937:241 + Q6 finished at: 2023-9-24 22:19:47:152:674 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:38:23:16:380 +Q7 finished at: 2023-9-24 22:19:47:243:950 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:38:23:17:760 +Q8 finished at: 2023-9-24 22:19:47:244:532 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,9 +45,9 @@ Q8 finished at: 2023-9-23 18:38:23:17:760 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:38:23:26:800 + Q9 finished at: 2023-9-24 22:19:47:249:156 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:23:27:938 + Q10 finished at: 2023-9-24 22:19:47:249:721 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt index 13a9e40f..037a4ec1 100644 --- a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt +++ b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c1.txt @@ -16,29 +16,29 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:24:274:657 +Q1 finished at: 2023-9-24 22:19:48:400:232 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:24:279:597 +Q2 finished at: 2023-9-24 22:19:48:403:624 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:24:374:675 + Q3 finished at: 2023-9-24 22:19:48:500:272 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:24:379:771 + Q4 finished at: 2023-9-24 22:19:48:504:138 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:38:24:386:305 + Q5 finished at: 2023-9-24 22:19:48:507:335 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:38:24:476:50 + Q6 finished at: 2023-9-24 22:19:48:600:198 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:38:24:487:770 + Q7 finished at: 2023-9-24 22:19:48:603:790 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:38:24:498:641 + Q8 finished at: 2023-9-24 22:19:48:607:291 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:38:24:587:265 +Q9 finished at: 2023-9-24 22:19:48:703:84 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:38:24:589:522 +Q10 finished at: 2023-9-24 22:19:48:703:614 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:38:24:675:756 + Q11 finished at: 2023-9-24 22:19:48:800:383 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:24:776:744 + Q12 finished at: 2023-9-24 22:19:48:900:530 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,3) (2,1) @@ -55,9 +55,9 @@ Q10 finished at: 2023-9-23 18:38:24:589:522 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-23 18:38:24:786:615 + Q13 finished at: 2023-9-24 22:19:48:904:701 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:24:787:622 + Q14 finished at: 2023-9-24 22:19:48:905:275 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt index 23d78a14..068f2c96 100644 --- a/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt +++ b/test_result/centralizend_result/cassandra/one/wat_mda_step_wat_c2.txt @@ -16,29 +16,29 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:26:65:419 +Q1 finished at: 2023-9-24 22:19:50:63:345 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:26:78:268 +Q2 finished at: 2023-9-24 22:19:50:67:469 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:26:163:694 + Q3 finished at: 2023-9-24 22:19:50:163:428 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:38:26:167:135 + Q4 finished at: 2023-9-24 22:19:50:167:104 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:38:26:265:368 + Q5 finished at: 2023-9-24 22:19:50:263:333 Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:38:26:374:947 + Q6 finished at: 2023-9-24 22:19:50:369:128 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:38:26:475:970 + Q7 finished at: 2023-9-24 22:19:50:467:925 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:38:26:488:240 + Q8 finished at: 2023-9-24 22:19:50:471:780 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:38:26:574:968 +Q9 finished at: 2023-9-24 22:19:50:566:639 Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:38:26:666:172 + Q10 finished at: 2023-9-24 22:19:50:663:898 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:38:26:765:888 +Q11 finished at: 2023-9-24 22:19:50:763:867 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:38:26:864:744 + Q12 finished at: 2023-9-24 22:19:50:864:104 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,3) (2,1) @@ -55,9 +55,9 @@ Q11 finished at: 2023-9-23 18:38:26:765:888 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-23 18:38:26:870:743 + Q13 finished at: 2023-9-24 22:19:50:867:996 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:38:26:871:499 + Q14 finished at: 2023-9-24 22:19:50:868:479 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt index c82b486d..904a95d5 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_1abort.txt @@ -14,17 +14,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_1abort test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:37:59:924:28 +Q1 finished at: 2023-9-24 22:19:25:514:264 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:37:59:928:572 +Q2 finished at: 2023-9-24 22:19:25:518:625 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:0:23:847 + Q3 finished at: 2023-9-24 22:19:25:614:152 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:0:29:283 + Q4 finished at: 2023-9-24 22:19:25:618:339 Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:38:0:125:254 +Q5 finished at: 2023-9-24 22:19:25:714:274 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:0:226:35 + Q6 finished at: 2023-9-24 22:19:25:814:379 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -33,11 +33,11 @@ Q5 finished at: 2023-9-23 18:38:0:125:254 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-23 18:38:0:235:489 + Q7 finished at: 2023-9-24 22:19:25:817:250 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:38:0:663:800 + Q8 finished at: 2023-9-24 22:19:26:268:29 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:0:664:768 + Q9 finished at: 2023-9-24 22:19:26:268:756 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt index d6f0ff64..a58ad44b 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_dirty_write_2commit.txt @@ -14,17 +14,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_2commit test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:1:393:336 +Q1 finished at: 2023-9-24 22:19:26:974:935 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:1:405:582 +Q2 finished at: 2023-9-24 22:19:26:979:569 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:1:492:268 + Q3 finished at: 2023-9-24 22:19:27:74:944 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:1:498:132 + Q4 finished at: 2023-9-24 22:19:27:79:868 Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:38:1:593:740 +Q5 finished at: 2023-9-24 22:19:27:174:968 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:1:692:198 + Q6 finished at: 2023-9-24 22:19:27:274:972 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -33,11 +33,11 @@ Q5 finished at: 2023-9-23 18:38:1:593:740 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-23 18:38:1:694:429 + Q7 finished at: 2023-9-24 22:19:27:277:621 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:38:2:163:753 + Q8 finished at: 2023-9-24 22:19:27:659:730 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:2:165:554 + Q9 finished at: 2023-9-24 22:19:27:660:772 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt index e2f0c0ca..fc47f263 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_full_write.txt @@ -14,19 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:2:926:753 +Q1 finished at: 2023-9-24 22:19:28:394:265 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:2:938:227 +Q2 finished at: 2023-9-24 22:19:28:398:317 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:3:26:733 + Q3 finished at: 2023-9-24 22:19:28:494:114 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:3:39:621 + Q4 finished at: 2023-9-24 22:19:28:497:735 Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:38:3:136:840 +Q5 finished at: 2023-9-24 22:19:28:597:91 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:38:3:139:81 +Q6 finished at: 2023-9-24 22:19:28:597:596 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:3:225:425 + Q7 finished at: 2023-9-24 22:19:28:694:390 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,3) @@ -35,9 +35,9 @@ Q6 finished at: 2023-9-23 18:38:3:139:81 *(2) expected_result: (0,3) - Q8 finished at: 2023-9-23 18:38:3:228:978 + Q8 finished at: 2023-9-24 22:19:28:697:666 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:3:229:355 + Q9 finished at: 2023-9-24 22:19:28:698:176 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt index d61e4777..27fddd03 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_full_write_committed.txt @@ -14,19 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:4:466:856 +Q1 finished at: 2023-9-24 22:19:29:803:715 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:4:479:148 +Q2 finished at: 2023-9-24 22:19:29:808:89 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:4:566:448 + Q3 finished at: 2023-9-24 22:19:29:903:834 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:4:579:859 + Q4 finished at: 2023-9-24 22:19:29:908:909 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:38:4:582:50 + Q5 finished at: 2023-9-24 22:19:29:909:858 Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:38:4:678:69 +Q6 finished at: 2023-9-24 22:19:30:8:203 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:4:680:203 +Q7 finished at: 2023-9-24 22:19:30:8:976 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,3) @@ -35,9 +35,9 @@ Q7 finished at: 2023-9-23 18:38:4:680:203 *(2) expected_result: (0,3) - Q8 finished at: 2023-9-23 18:38:4:690:242 + Q8 finished at: 2023-9-24 22:19:30:12:866 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:4:691:597 + Q9 finished at: 2023-9-24 22:19:30:13:557 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt index c48c99b7..e1281c37 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_self_update_committed.txt @@ -14,15 +14,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_self_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:9:34:47 +Q1 finished at: 2023-9-24 22:19:34:113:229 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:38:9:39:198 +Q2 finished at: 2023-9-24 22:19:34:117:91 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:9:135:422 + Q3 finished at: 2023-9-24 22:19:34:213:272 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:9:150:451 + Q4 finished at: 2023-9-24 22:19:34:216:742 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:38:9:152:905 + Q5 finished at: 2023-9-24 22:19:34:217:287 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,2) @@ -31,9 +31,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q6 finished at: 2023-9-23 18:38:9:237:468 +Q6 finished at: 2023-9-24 22:19:34:315:821 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:9:237:929 +Q7 finished at: 2023-9-24 22:19:34:316:387 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-23 18:38:9:237:929 (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:38:9:240:625 + Q8 finished at: 2023-9-24 22:19:34:318:621 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:9:241:22 + Q9 finished at: 2023-9-24 22:19:34:319:150 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt index 150db3e9..58676f56 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c1.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:5:908:597 +Q1 finished at: 2023-9-24 22:19:31:183:721 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,17 +23,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:38:5:914:302 +Q2 finished at: 2023-9-24 22:19:31:187:624 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:6:9:121 + Q3 finished at: 2023-9-24 22:19:31:283:942 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:6:22:106 + Q4 finished at: 2023-9-24 22:19:31:289:834 Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:38:6:119:909 +Q5 finished at: 2023-9-24 22:19:31:388:207 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:38:6:121:974 +Q6 finished at: 2023-9-24 22:19:31:389:15 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:38:6:207:750 + Q7 finished at: 2023-9-24 22:19:31:483:651 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -42,9 +42,9 @@ Q6 finished at: 2023-9-23 18:38:6:121:974 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:38:6:210:218 + Q8 finished at: 2023-9-24 22:19:31:486:200 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:6:210:558 + Q9 finished at: 2023-9-24 22:19:31:486:720 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt index ee279c56..68c1430d 100644 --- a/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt +++ b/test_result/centralizend_result/cassandra/one/wat_sda_lost_update_c2.txt @@ -14,7 +14,7 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:38:7:407:458 +Q1 finished at: 2023-9-24 22:19:32:583:820 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,17 +23,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:38:7:417:1 +Q2 finished at: 2023-9-24 22:19:32:586:923 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:38:7:507:350 + Q3 finished at: 2023-9-24 22:19:32:683:984 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:38:7:520:359 + Q4 finished at: 2023-9-24 22:19:32:688:513 Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:38:7:617:83 +Q5 finished at: 2023-9-24 22:19:32:786:616 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:38:7:707:971 + Q6 finished at: 2023-9-24 22:19:32:884:391 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:38:7:807:810 +Q7 finished at: 2023-9-24 22:19:32:984:92 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-23 18:38:7:807:810 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:38:7:818:240 + Q8 finished at: 2023-9-24 22:19:32:987:787 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:38:7:820:358 + Q9 finished at: 2023-9-24 22:19:32:988:577 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt deleted file mode 100644 index 3fd4aeee..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:43:614:324 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:43:622:811 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:43:714:333 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:43:720:48 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:43:722:401 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:43:722:816 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:45:43:819:62 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:43:819:466 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:43:822:661 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:43:823:66 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index c94fd7cc..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:45:85:352 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:45:90:475 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:45:185:397 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:45:191:131 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:45:193:583 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:45:194:14 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:45:45:293:849 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:45:295:890 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:45:303:858 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:45:304:234 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt deleted file mode 100644 index 3e5ff262..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:46:587:84 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:46:591:681 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:46:686:985 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:46:691:944 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:46:694:576 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:46:795:418 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:46:797:239 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:46:887:621 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:46:894:685 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:46:895:24 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt deleted file mode 100644 index f0cf03e0..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:50:370:589 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:50:375:656 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:50:470:668 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:50:476:44 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:50:478:658 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:50:479:93 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:45:50:575:857 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:50:576:263 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:50:579:757 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:50:580:147 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index 60723f7c..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:45:47:268:930 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 52b58602..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:48:887:748 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:45:48:893:251 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:48:987:596 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:45:48:998:995 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:45:49:37:681 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:49:38:135 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:45:49:107:551 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:49:109:582 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:45:49:119:30 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:49:121:123 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt deleted file mode 100644 index 56c4d193..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:51:885:919 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:45:51:894:887 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:51:985:939 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:45:51:991:522 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:52:86:50 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:45:52:91:334 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:45:52:194:68 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:45:52:294:362 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:45:52:394:879 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:52:486:736 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:52:587:21 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:52:687:63 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:45:52:700:264 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:52:702:462 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 6b453b34..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:1:350:938 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:46:1:360:781 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:1:450:942 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:1:456:682 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:1:457:134 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:46:1:551:59 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:46:1:561:760 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:46:1:572:516 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:1:574:676 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:46:1:652:864 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:46:1:653:674 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:46:1:659:565 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:46:1:659:934 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index c66064ad..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:59:659:794 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:59:670:473 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:59:759:627 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:59:765:876 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:59:859:876 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:45:59:865:680 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:59:866:123 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:45:59:959:958 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:45:59:971:36 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:59:973:74 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:46:0:64:819 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:46:0:65:312 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:46:0:165:163 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:46:0:165:567 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:46:0:168:877 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:46:0:169:281 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 237acac4..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:53:968:672 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:45:53:977:819 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:54:63:575 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:45:54:74:270 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:54:163:646 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:45:54:174:717 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:45:54:271:311 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:45:54:371:278 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:45:54:471:289 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:54:563:946 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:54:664:197 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:54:764:350 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:45:54:771:114 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:54:771:479 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index bf6091db..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:56:42:15 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:45:56:52:293 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:56:140:520 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:45:56:144:56 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:56:242:227 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:45:56:247:95 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:45:56:346:649 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:45:56:446:772 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:45:56:549:266 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:56:642:756 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:56:742:841 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:56:843:248 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:45:56:851:311 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:56:851:686 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index 84148633..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:58:75:125 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:45:58:84:953 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:58:175:169 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:45:58:186:264 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:58:189:793 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:45:58:191:846 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:45:58:194:363 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:58:194:779 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:45:58:275:145 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:45:58:285:422 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:45:58:295:136 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:45:58:304:184 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:45:58:313:909 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:58:316:107 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:45:58:383:30 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:45:58:385:222 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:45:58:398:12 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:45:58:400:35 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt deleted file mode 100644 index c03bfc0e..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:42:140:741 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:45:42:149:990 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:42:240:815 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:42:246:264 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:45:42:246:715 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:45:42:349:210 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:42:351:222 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:45:42:359:123 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:42:361:274 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index cb2783bc..00000000 --- a/test_result/centralizend_result/cassandra/quorum/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:40:734:675 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:40:739:430 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:40:833:92 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:40:836:934 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:45:40:837:470 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:45:40:938:862 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:40:939:245 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:45:40:940:891 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:40:941:223 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt deleted file mode 100644 index 283e4c34..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:53:36:481 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:53:50:166 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:53:136:444 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:53:148:412 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:44:53:156:125 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:53:239:327 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:53:339:745 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:53:436:579 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:44:53:451:84 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:53:452:994 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index 30e00f4e..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:54:663:824 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:54:667:165 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:54:763:909 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:54:768:789 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:44:54:771:208 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:54:771:637 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:44:54:874:9 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:54:875:165 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:44:54:883:110 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:54:883:861 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt deleted file mode 100644 index 7964ebf3..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:56:5:14 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:56:9:775 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:56:105:42 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:56:111:345 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:56:120:352 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:44:56:207:818 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:56:208:281 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:56:305:282 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:56:309:792 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:56:310:419 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt deleted file mode 100644 index 3dec7d0f..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:57:501:339 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:57:503:798 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:57:601:527 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:57:605:345 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:57:609:31 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:44:57:703:662 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:57:802:425 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:57:901:687 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:57:905:548 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:57:906:93 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt deleted file mode 100644 index d321d920..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:2:25:421 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:2:30:195 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:2:126:949 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:2:136:970 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:45:2:142:468 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:2:236:201 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:2:237:916 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:2:327:298 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:2:340:442 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:2:342:389 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt deleted file mode 100644 index 25100e80..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:3:592:213 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:3:602:538 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:3:691:264 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:3:694:773 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:45:3:698:366 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:3:699:85 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:45:3:803:801 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:3:805:667 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:3:819:265 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:3:821:385 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index 89eb987a..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:59:184:980 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:44:59:197:550 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:59:284:710 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:59:295:711 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:59:307:349 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:59:309:473 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:44:59:394:971 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:59:396:871 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:44:59:408:585 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:59:410:317 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index 952f7805..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:0:566:708 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:45:0:573:589 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:0:667:414 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:45:0:675:630 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:45:0:681:947 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:0:683:622 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:45:0:780:83 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:0:782:480 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:45:0:796:193 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:0:798:377 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt deleted file mode 100644 index dda45b4e..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:49:974:705 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:49:989:460 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:50:74:632 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:50:89:639 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:44:50:100:581 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:44:50:175:482 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:50:275:372 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:50:373:351 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:50:381:183 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:50:381:611 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index f8b9e065..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:51:555:811 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:51:570:941 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:51:655:838 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:51:670:101 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:44:51:681:197 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:51:684:63 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:44:51:758:190 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:51:758:701 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:51:764:528 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:51:765:16 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt deleted file mode 100644 index 4becb094..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:5:53:527 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:5:64:421 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:5:153:289 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:5:166:300 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:45:5:178:731 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:45:5:253:418 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:45:5:267:470 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:45:5:275:327 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:45:5:354:690 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:5:355:252 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:5:453:784 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:5:553:987 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:45:5:569:817 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:5:571:906 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index 483b7db4..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:8:736:392 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:8:747:375 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:8:836:612 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:8:848:43 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:45:8:863:616 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:45:8:936:588 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:45:8:946:950 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:45:8:958:764 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:45:9:37:746 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:9:38:147 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:9:137:448 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:9:237:608 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:45:9:246:351 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:9:248:216 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 6dbc3c1f..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:10:483:96 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:45:10:488:789 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:10:583:50 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:45:10:588:733 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:45:10:591:261 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:45:10:683:111 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:45:10:688:751 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:45:10:691:656 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:45:10:788:684 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:10:789:63 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:10:883:870 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:10:983:964 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:45:10:994:945 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:10:995:300 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt deleted file mode 100644 index 0724fa93..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:39:116:946 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:39:155:922 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:39:216:496 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:44:39:272:945 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:44:39:316:778 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:39:417:293 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:44:39:431:159 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:39:433:174 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt deleted file mode 100644 index a761e275..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:42:357:382 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:42:374:428 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:42:456:410 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:44:42:487:81 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:44:42:572:382 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:42:658:82 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:42:757:836 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:44:42:769:127 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:42:771:193 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index 1392aa86..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:44:51:635 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:44:67:418 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:44:151:875 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:44:44:157:652 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:44:158:203 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:44:44:265:179 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:44:267:126 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:44:44:278:268 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:44:280:300 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt deleted file mode 100644 index dc054f1e..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:48:424:834 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:48:440:223 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:48:524:787 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:48:540:159 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:44:48:634:745 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:44:48:636:995 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:48:725:755 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:44:48:735:834 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:48:738:6 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 41f8995e..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:40:716:665 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:40:722:206 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:40:816:879 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:40:822:242 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:44:40:932:740 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:41:19:274 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:41:118:976 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:44:41:132:519 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:41:134:412 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 1528d5b5..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:45:526:384 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:44:45:600:149 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:45:625:529 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:45:640:930 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:45:643:236 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:44:45:740:466 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:45:742:988 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:44:45:752:859 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:45:754:783 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index 4e9aec56..00000000 --- a/test_result/centralizend_result/cassandra/quorum/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:46:968:626 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:44:46:985:80 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:47:68:731 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:44:47:83:406 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:47:85:647 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:44:47:183:581 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:47:185:591 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:44:47:195:35 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:47:196:864 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index d6b52d4a..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:22:922:571 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:22:932:939 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:23:22:461 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:23:33:574 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:23:43:186 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:23:45:473 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:45:23:129:912 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:23:132:90 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:23:144:582 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:23:146:417 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index e4fe8c48..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:24:363:704 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:24:369:568 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:24:463:610 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:24:474:442 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:24:483:969 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:24:574:171 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:24:576:225 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:24:662:591 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:45:24:666:788 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:24:667:193 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index ceaa8b39..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:25:932:939 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:25:944:3 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:26:32:690 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:26:43:936 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:26:54:301 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:26:142:171 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:26:233:588 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:26:333:475 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:45:26:345:985 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:26:348:141 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index 054af4f1..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:27:600:344 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:27:610:867 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:27:698:957 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:27:702:686 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:27:705:674 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:27:706:248 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:45:27:804:599 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:27:805:515 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:45:27:811:487 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:27:812:267 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 98e91cd4..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:29:18:489 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:29:27:731 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:29:118:492 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:29:124:40 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:29:126:383 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:29:223:297 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:29:223:667 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:29:318:959 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:29:326:302 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:29:326:695 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index c77a7de7..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:30:527:268 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:45:30:536:83 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:30:627:105 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:30:638:291 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:30:648:751 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:30:735:749 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:30:827:622 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:30:927:601 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:30:939:882 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:30:941:822 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index 77809e7c..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:32:209:832 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:32:220:62 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:32:309:686 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:32:319:735 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:32:329:717 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:32:418:471 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:32:420:304 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:45:32:510:497 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:32:522:926 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:32:525:28 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 5a19e4bd..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:33:764:157 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:33:774:42 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:33:864:185 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:33:873:608 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:33:883:596 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:45:33:972:519 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:34:64:625 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:34:164:584 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:34:172:652 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:34:173:11 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index 535dace9..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:35:451:276 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:35:462:181 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:35:549:771 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:45:35:554:317 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:35:558:778 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:35:559:796 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:45:35:656:126 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:45:35:656:470 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:45:35:659:213 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:35:659:581 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt deleted file mode 100644 index ab4722be..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:36:909:840 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:36:920:61 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:37:9:783 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:37:16:40 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:45:37:18:438 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:45:37:109:879 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:45:37:115:797 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:45:37:118:46 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:45:37:218:478 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:45:37:220:427 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:45:37:310:395 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:37:410:751 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:45:37:423:519 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:37:425:463 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt deleted file mode 100644 index 846e4fc0..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:38:679:352 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:38:689:388 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:38:779:439 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:45:38:792:430 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:38:879:657 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:45:38:984:467 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:45:39:89:89 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:45:39:98:493 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:45:39:188:391 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:45:39:280:556 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:45:39:380:139 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:39:480:550 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:45:39:493:709 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:39:495:865 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index 5ce564e2..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:12:197:113 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:12:207:860 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:12:297:104 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:12:308:641 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:45:12:397:535 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:12:497:847 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:45:12:506:489 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:45:12:949:127 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:12:950:762 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index 124a37af..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:13:759:421 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:13:770:4 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:13:858:220 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:13:862:887 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:45:13:959:743 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:14:59:901 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:45:14:68:317 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:45:14:546:83 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:14:547:28 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt deleted file mode 100644 index 8099b1c1..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:15:300:644 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:15:306:183 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:15:399:340 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:15:404:123 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:45:15:505:603 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:45:15:505:963 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:15:601:141 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:45:15:609:494 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:15:610:249 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt deleted file mode 100644 index 895e2956..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:16:800:772 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:16:806:286 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:16:900:688 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:16:906:567 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:45:16:907:37 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:45:17:10:228 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:17:12:372 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:45:17:18:671 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:17:19:10 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index 1046e3cc..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:21:489:118 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:45:21:499:551 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:21:589:172 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:21:595:334 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:45:21:595:734 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:45:21:694:132 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:21:694:529 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:45:21:696:467 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:21:696:821 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt deleted file mode 100644 index 73d0f1d7..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:18:266:408 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:45:18:275:444 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:18:366:461 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:18:377:678 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:45:18:471:695 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:45:18:472:81 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:45:18:565:178 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:45:18:568:326 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:18:568:929 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt deleted file mode 100644 index fa7656cc..00000000 --- a/test_result/centralizend_result/cassandra/quorum/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: quorum #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = quorum for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:45:19:796:609 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:45:19:805:332 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:45:19:896:490 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:45:19:908:240 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:45:20:1:930 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:45:20:97:119 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:45:20:196:967 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:45:20:207:55 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:45:20:208:868 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/all_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/any_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/local_one_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/local_serial_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/quorum_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/serial_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/three_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt b/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt deleted file mode 100644 index 3155065e..00000000 --- a/test_result/centralizend_result/cassandra/result_summary/two_total-result.txt +++ /dev/null @@ -1,108 +0,0 @@ -rat_sda_dirty_read: Anomaly - -rat_sda_non_repeatable_read: Anomaly - -rat_sda_intermediate_read: Anomaly - -rat_sda_intermediate_read_committed: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_delete: Anomaly - -rat_sda_non_repeatable_read_predicate_based-phantom_insert: Anomaly - -rat_sda_lost_self_update: Anomaly - -rat_dda_write_read_skew: Anomaly - -rat_dda_write_read_skew_committed: Anomaly - -rat_dda_double_write_skew1: Anomaly - -rat_dda_double_write_skew1_committed: Anomaly - -rat_dda_double_write_skew2: Anomaly - -rat_dda_read_skew: Anomaly - -rat_dda_read_skew_predicate_based_delete: Anomaly - -rat_dda_read_skew_predicate_based_insert: Anomaly - -rat_dda_read_skew2: Anomaly - -rat_dda_read_skew2_committed: Anomaly - -rat_mda_step_rat: Anomaly - -rat_mda_step_rat_long_fork: Anomaly - -rat_mda_step_rat_predicate_based_delete: Anomaly - -rat_mda_step_rat_predicate_based_insert: Anomaly - -wat_sda_dirty_write_1abort: Avoid - -wat_sda_dirty_write_2commit: Avoid - -wat_sda_full_write: Avoid - -wat_sda_full_write_committed: Avoid - -wat_sda_lost_update_c1: Anomaly - -wat_sda_lost_update_c2: Anomaly - -wat_sda_lost_self_update_committed: Anomaly - -wat_dda_double_write_skew2_committed: Anomaly - -wat_dda_full_write_skew_c1: Anomaly - -wat_dda_full_write_skew_c2: Anomaly - -wat_dda_full_write_skew_committed: Anomaly - -wat_dda_read_write_skew1_c1: Anomaly - -wat_dda_read_write_skew1_c2: Anomaly - -wat_dda_read_write_skew2_c1: Anomaly - -wat_dda_read_write_skew2_c2: Anomaly - -wat_dda_read_write_skew2_committed: Anomaly - -wat_mda_step_wat_c1: Anomaly - -wat_mda_step_wat_c2: Anomaly - -iat_sda_non_repeatable_read_committed: Anomaly - -iat_sda_lost_update_committed: Anomaly - -iat_dda_read_skew_committed: Anomaly - -iat_dda_read_write_skew1_committed: Anomaly - -iat_dda_write_skew: Anomaly - -iat_dda_write_skew_predicate_based-intersecting_data: Rollback - -iat_dda_write_skew_predicate_based-overdraft_protection: Anomaly - -iat_dda_write_skew_committed: Anomaly - -iat_mda_step_iat: Anomaly - -iat_mda_step_iat_predicate_based_delete: Anomaly - -iat_mda_step_iat_predicate_based_insert: Anomaly - -iat_mda_step_iat_uname_anomaly: Anomaly - -iat_mda_step_iat_cross_phenomenon: Anomaly - -iat_mda_step_iat_causality_violation_anomaly: Anomaly - -iat_mda_step_iat_read_only_transaction_anomaly: Anomaly - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt deleted file mode 100644 index 1419fa76..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:13:200:856 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:13:203:198 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:13:302:510 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:13:314:61 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:13:326:390 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:13:328:536 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:50:13:410:842 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:13:412:387 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:13:420:769 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:13:421:652 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index eb8500f4..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:14:649:109 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:14:652:254 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:14:749:148 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:14:753:75 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:14:756:166 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:14:756:683 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:50:14:855:228 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:14:856:333 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:14:864:720 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:14:865:587 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt deleted file mode 100644 index c742829e..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:16:131:619 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:16:136:115 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:16:231:355 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:16:236:7 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:16:240:774 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:16:341:334 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:16:343:367 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:16:431:679 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:16:436:299 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:16:436:988 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt deleted file mode 100644 index a8b7e7f9..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:19:906:450 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:19:915:68 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:20:6:326 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:20:16:844 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:20:26:804 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:20:29:136 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:50:20:114:893 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:20:116:873 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:20:132:262 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:20:134:258 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index 504b1a1a..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:50:16:836:494 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index ee3f0ab3..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:18:506:627 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:50:18:517:96 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:18:606:631 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:50:18:617:991 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:50:18:651:874 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:18:653:210 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:50:18:710:466 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:18:710:884 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:50:18:713:237 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:18:713:701 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt deleted file mode 100644 index 8606bad8..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:21:392:259 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:50:21:401:841 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:21:490:781 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:50:21:493:780 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:50:21:592:108 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:50:21:602:232 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:50:21:700:184 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:50:21:800:589 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:50:21:900:546 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:50:21:992:429 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:50:22:92:687 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:22:190:995 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:50:22:195:794 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:22:196:385 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 5c63841b..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:30:882:22 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:30:885:58 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:30:982:742 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:30:991:439 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:30:993:174 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:50:31:82:71 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:50:31:84:587 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:50:31:86:903 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:31:87:353 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:50:31:184:431 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:50:31:184:912 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:50:31:189:164 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:50:31:189:682 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 8b601563..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:29:126:275 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:29:137:333 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:29:226:268 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:29:238:323 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:50:29:326:286 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:50:29:337:275 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:29:339:635 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:50:29:426:407 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:50:29:437:477 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:29:439:588 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:50:29:534:940 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:29:537:811 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:50:29:636:125 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:50:29:638:331 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:50:29:653:420 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:50:29:655:826 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 0c5d37bf..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:23:423:239 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:50:23:439:596 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:23:521:726 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:50:23:525:228 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:50:23:623:539 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:50:23:634:796 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:50:23:731:120 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:50:23:830:777 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:50:23:924:842 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:50:24:23:927 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:50:24:122:447 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:24:224:269 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:50:24:232:516 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:24:234:654 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index 0f324596..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:25:425:483 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:50:25:435:671 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:25:525:429 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:50:25:534:971 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:50:25:625:593 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:50:25:636:103 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:50:25:725:941 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:50:25:833:46 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:50:25:926:212 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:50:26:26:218 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:50:26:124:551 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:26:225:713 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:50:26:236:409 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:26:238:442 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index 6f71b4b3..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:32:378:534 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:50:32:394:280 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:50:32:405:421 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:50:32:478:522 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:50:32:488:994 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:50:32:499:59 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:32:501:402 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:50:32:578:660 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:50:32:589:91 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:50:32:598:894 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:50:32:601:122 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:50:32:686:787 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:50:32:688:805 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:50:32:700:536 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:50:32:702:779 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index 4ee565e9..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:27:566:384 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:50:27:577:252 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:27:666:408 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:50:27:676:753 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:27:687:188 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:50:27:696:252 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:50:27:706:216 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:27:707:482 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:50:27:764:987 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:50:27:767:638 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:50:27:770:27 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:50:27:772:349 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:50:27:774:880 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:27:775:457 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:50:27:874:419 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:50:27:876:685 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:50:27:888:195 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:50:27:889:390 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt deleted file mode 100644 index 3f8fe5a6..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:11:773:19 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:50:11:777:202 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:11:874:295 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:11:885:518 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:11:887:653 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:50:11:975:665 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:11:976:199 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:50:11:979:81 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:11:979:760 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index 38363600..00000000 --- a/test_result/centralizend_result/cassandra/serial/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:10:359:145 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:10:369:174 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:10:459:168 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:50:10:470:798 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:50:10:473:345 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:50:10:562:944 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:10:564:68 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:50:10:568:269 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:50:10:569:133 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt deleted file mode 100644 index c035d1c3..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:21:425:592 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:21:438:417 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:21:525:472 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:21:538:587 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:21:549:495 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:49:21:636:348 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:21:738:869 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:21:825:715 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:49:21:839:814 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:21:842:89 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index 425475ff..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:23:160:590 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:23:172:884 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:23:260:595 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:23:273:112 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:23:280:24 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:23:281:89 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:49:23:361:968 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:23:362:370 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:49:23:365:819 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:23:366:210 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt deleted file mode 100644 index e08f8919..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:24:599:998 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:24:612:197 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:24:700:150 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:24:713:90 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:24:724:943 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:49:24:808:569 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:24:810:662 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:24:900:593 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:24:914:296 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:24:916:233 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt deleted file mode 100644 index b9e8f614..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:26:162:545 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:49:26:171:309 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:26:262:629 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:26:276:733 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:26:290:587 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:49:26:372:732 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:26:463:223 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:26:562:993 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:26:576:878 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:26:579:175 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt deleted file mode 100644 index 264828e3..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:30:812:459 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:30:823:783 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:30:912:445 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:49:30:923:698 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:30:936:14 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:49:31:21:902 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:31:23:803 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:31:113:102 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:31:125:492 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:31:127:320 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt deleted file mode 100644 index a3b63b63..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:32:407:87 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:32:418:723 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:32:507:28 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:49:32:518:30 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:32:528:631 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:32:531:347 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:49:32:616:389 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:32:618:421 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:32:635:83 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:32:637:808 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index ebead8bb..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:27:895:853 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:49:27:909:806 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:27:995:992 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:28:7:590 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:28:18:264 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:28:20:816 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:49:28:107:629 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:28:109:968 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:49:28:124:340 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:28:126:282 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index 44c7053d..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:29:349:891 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:49:29:365:259 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:29:449:959 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:49:29:461:182 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:49:29:471:929 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:29:474:157 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:49:29:563:234 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:29:565:572 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:49:29:578:784 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:29:580:941 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt deleted file mode 100644 index 21357516..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:18:253:559 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:18:267:804 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:18:353:837 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:18:369:39 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:18:380:833 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:49:18:454:867 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:18:554:537 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:18:654:97 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:18:682:941 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:18:685:401 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index 056c44b3..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:19:968:907 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:19:982:976 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:20:69:10 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:20:83:25 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:20:95:434 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:20:98:184 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:49:20:180:282 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:20:182:420 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:20:200:238 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:20:202:578 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt deleted file mode 100644 index 56c06b9c..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:33:910:906 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:33:922:360 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:34:10:777 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:34:23:242 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:49:34:35:895 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:49:34:111:33 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:49:34:124:87 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:49:34:135:442 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:49:34:221:547 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:49:34:223:815 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:49:34:311:505 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:49:34:411:470 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:49:34:428:198 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:49:34:430:363 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index bc7fee4b..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:49:35:678:169 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:49:35:690:565 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:49:35:778:166 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:49:35:789:774 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:49:35:878:274 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:49:35:890:793 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:49:35:904:956 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:49:35:978:419 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:49:35:991:271 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:49:36:88:878 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:49:36:177:595 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:49:36:278:971 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:49:36:379:101 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:49:36:381:190 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:49:36:395:830 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:49:36:397:866 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index c0514060..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:37:692:239 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:37:696:103 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:37:793:576 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:37:798:891 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:49:37:803:442 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:49:37:893:586 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:49:37:905:83 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:49:37:917:276 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:49:38:2:797 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:49:38:4:995 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:49:38:94:172 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:49:38:194:318 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:49:38:204:125 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:49:38:206:212 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 9a54d03c..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:39:483:660 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:49:39:493:765 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:39:583:679 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:49:39:594:31 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:49:39:604:748 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:49:39:683:841 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:49:39:694:201 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:49:39:707:477 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:49:39:793:380 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:49:39:795:541 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:49:39:884:374 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:49:39:984:305 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:49:39:998:47 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:49:40:0:238 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt deleted file mode 100644 index 5c37feaa..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:7:371:562 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:7:412:736 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:7:471:588 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:49:7:528:794 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:49:7:571:779 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:7:671:854 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:49:7:685:391 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:7:687:256 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt deleted file mode 100644 index c0e175ec..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:10:553:324 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:10:559:126 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:10:654:990 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:49:10:689:742 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:49:10:773:781 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:10:855:799 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:10:955:93 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:49:10:966:895 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:10:968:906 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index 795afec1..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:12:235:612 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:12:251:343 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:12:335:954 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:49:12:351:281 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:12:354:9 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:49:12:448:952 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:12:450:959 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:49:12:464:237 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:12:466:471 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt deleted file mode 100644 index 01affc01..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:16:647:952 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:16:661:202 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:16:747:884 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:16:764:821 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:49:16:858:192 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:49:16:860:508 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:16:948:702 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:49:16:958:695 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:16:960:755 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 626ea667..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:8:955:734 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:49:8:964:469 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:9:56:886 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:9:79:987 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:49:9:171:344 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:9:257:616 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:9:357:210 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:49:9:369:8 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:9:370:904 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 179e7456..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:13:715:453 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:49:13:791:169 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:13:813:847 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:13:819:668 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:13:820:122 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:49:13:930:933 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:13:933:380 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:49:13:946:67 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:13:947:996 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index 0bcc2bf5..00000000 --- a/test_result/centralizend_result/cassandra/serial/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:15:196:784 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:49:15:215:825 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:15:296:771 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:49:15:313:992 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:15:316:850 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:49:15:406:236 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:15:407:635 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:49:15:414:899 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:15:415:968 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index 126d5cef..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:52:257:761 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:52:268:139 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:52:357:848 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:52:369:948 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:52:382:83 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:52:384:670 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:49:52:465:63 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:52:467:272 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:52:481:907 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:52:484:32 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index e73ec656..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:53:738:762 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:53:749:44 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:53:839:31 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:53:850:404 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:53:861:52 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:49:53:948:496 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:53:950:524 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:54:37:542 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:49:54:40:406 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:54:40:765 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index 42b4af60..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:55:306:509 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:55:311:994 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:55:406:598 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:55:418:364 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:55:429:798 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:49:55:515:462 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:55:607:135 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:55:707:138 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:49:55:719:529 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:55:721:553 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index cd788d00..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:57:40:311 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:57:50:896 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:57:140:438 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:57:152:63 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:57:163:526 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:57:165:887 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:49:57:249:636 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:49:57:251:547 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:49:57:263:701 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:57:265:768 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 5f22bea5..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:58:485:883 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:49:58:495:658 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:58:585:932 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:49:58:596:787 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:58:607:683 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:49:58:694:182 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:58:696:299 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:58:786:380 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:49:58:798:669 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:49:58:800:429 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index 4e832685..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:0:56:427 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:50:0:65:948 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:0:156:462 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:0:167:893 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:0:179:156 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:0:259:540 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:0:357:22 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:0:456:876 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:0:469:119 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:0:471:156 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index a6cba9fc..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:1:764:291 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:1:775:614 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:1:864:148 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:1:875:217 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:1:888:455 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:1:972:673 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:1:974:578 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:2:64:708 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:2:77:197 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:2:79:362 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 65af2119..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:3:320:319 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:3:330:605 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:3:420:294 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:3:430:96 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:3:440:355 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:50:3:528:464 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:50:3:619:279 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:3:720:794 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:3:733:377 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:3:735:180 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index 724ff4ae..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:4:998:721 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:5:9:480 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:5:98:617 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:50:5:109:518 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:5:121:205 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:5:123:455 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:50:5:207:613 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:5:209:754 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:50:5:222:87 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:5:224:48 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt deleted file mode 100644 index a2a0bcd7..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:6:534:631 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:6:544:865 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:6:634:816 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:6:646:310 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:6:658:62 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:50:6:734:874 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:50:6:745:601 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:50:6:756:450 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:50:6:844:33 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:50:6:845:995 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:50:6:935:762 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:7:35:437 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:50:7:48:525 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:7:50:500 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt deleted file mode 100644 index ce3862d8..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:8:329:393 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:8:341:284 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:8:429:214 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:8:440:496 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:50:8:529:359 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:50:8:638:656 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:50:8:739:318 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:50:8:752:112 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:50:8:838:435 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:8:930:106 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:50:9:29:911 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:50:9:130:414 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:50:9:142:804 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:50:9:144:844 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index bfe218d2..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:41:254:998 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:41:266:166 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:41:354:261 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:41:363:33 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:49:41:455:337 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:41:555:632 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:49:41:563:886 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:49:42:100:259 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:42:102:372 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index 6a646034..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:42:859:814 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:42:870:660 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:42:958:160 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:42:961:138 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:49:43:60:115 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:43:160:404 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:49:43:170:481 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:49:43:641:881 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:43:643:723 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt deleted file mode 100644 index 4b0abf44..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:44:455:404 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:44:468:172 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:44:553:710 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:44:557:207 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:49:44:664:132 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:49:44:666:189 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:44:755:775 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:49:44:764:349 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:44:766:449 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt deleted file mode 100644 index 897f27e6..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:46:22:25 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:46:32:364 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:46:122:41 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:46:133:652 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:46:135:863 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:49:46:231:151 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:46:233:145 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:49:46:242:359 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:46:244:269 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index 31afbc00..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:50:731:405 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:49:50:742:64 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:50:831:268 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:50:843:573 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:50:845:718 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:49:50:933:649 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:50:934:623 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:49:50:939:454 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:50:940:431 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt deleted file mode 100644 index 2b5ffaf6..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:47:540:574 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:49:47:549:923 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:47:640:665 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:47:652:262 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:49:47:749:477 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:49:47:751:580 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:47:839:418 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:49:47:841:589 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:47:841:923 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt deleted file mode 100644 index 9eba9666..00000000 --- a/test_result/centralizend_result/cassandra/serial/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: serial #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = serial for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:49:70:716 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:49:49:79:965 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:49:170:719 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:49:182:250 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:49:49:279:729 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:49:49:371:346 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:49:49:471:351 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:49:49:480:652 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:49:482:529 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt deleted file mode 100644 index eddc589f..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:18:384:691 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:18:387:87 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:18:484:819 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:18:487:617 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:18:489:975 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:18:490:413 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:44:18:586:938 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:18:587:363 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:18:591:680 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:18:592:194 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index 26caae3e..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:19:752:647 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:19:756:201 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:19:852:608 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:19:857:680 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:19:863:613 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:19:864:240 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:44:19:955:900 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:19:956:538 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:19:964:572 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:19:965:25 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt deleted file mode 100644 index 805e46e6..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:21:58:78 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:21:60:261 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:21:158:101 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:21:160:649 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:21:163:590 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:21:263:772 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:21:264:286 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:21:358:381 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:21:366:634 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:21:367:219 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt deleted file mode 100644 index 54ca4c8d..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:24:805:318 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:24:814:713 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:24:905:210 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:24:915:548 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:24:926:51 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:24:928:180 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:44:25:12:711 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:25:14:399 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:25:25:284 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:25:27:203 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index f386b5be..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:44:21:794:273 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 4d04664e..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:23:360:334 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:44:23:369:400 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:23:459:931 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:44:23:463:864 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:44:23:478:714 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:23:479:492 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:44:23:580:215 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:23:581:406 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:44:23:586:590 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:23:587:505 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt deleted file mode 100644 index bdc35836..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:26:250:163 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:44:26:259:377 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:26:350:167 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:44:26:360:593 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:44:26:448:675 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:44:26:451:297 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:44:26:551:168 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:44:26:651:436 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:44:26:751:285 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:44:26:849:625 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:44:26:949:959 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:27:51:246 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:44:27:63:828 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:27:65:630 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index 3012e4f4..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:35:624:308 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:35:629:504 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:35:725:900 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:35:737:598 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:35:739:749 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:44:35:824:104 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:44:35:826:723 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:44:35:829:0 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:35:829:423 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:44:35:933:246 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:44:35:935:401 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:44:35:947:248 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:44:35:949:135 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 98a05ae0..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:33:920:817 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:33:931:531 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:34:20:684 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:34:32:829 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:44:34:120:952 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:44:34:132:363 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:34:134:680 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:44:34:219:757 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:44:34:223:468 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:34:224:88 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:44:34:331:312 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:34:333:514 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:44:34:431:54 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:44:34:432:931 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:44:34:440:556 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:44:34:441:493 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt deleted file mode 100644 index 0d2dddb2..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:28:282:342 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - null - (5) expected_result: - null - (6) expected_result: - null - -Q2 finished at: 2023-9-23 18:44:28:291:222 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:28:382:349 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - null - (2) expected_result: - null - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - null - *(6) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:44:28:397:893 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:44:28:481:133 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - null - *(2) expected_result: - (1,0) - (3) expected_result: - null - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:44:28:484:618 -Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:44:28:586:636 - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:44:28:685:133 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:44:28:792:119 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:44:28:881:945 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:44:28:983:259 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:29:83:453 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:44:29:91:689 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:29:93:499 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt deleted file mode 100644 index fc612c8e..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:30:278:994 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:44:30:290:889 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:30:379:81 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - null - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - null - *(4) expected_result: - null - (5) expected_result: - (0,1) - *(6) expected_result: - null - - Q4 finished at: 2023-9-23 18:44:30:389:102 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:44:30:479:117 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - null - (1) expected_result: - (1,1) - *(2) expected_result: - null - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - null - *(6) expected_result: - null - - Q6 finished at: 2023-9-23 18:44:30:489:631 -Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:44:30:582:907 - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:44:30:680:828 - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:44:30:783:512 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:44:30:878:29 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:44:30:977:996 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:31:79:840 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:44:31:91:791 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:31:93:562 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index c4893136..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:37:140:677 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:44:37:145:825 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:44:37:153:67 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:44:37:241:306 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:44:37:248:645 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:44:37:255:293 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:37:256:351 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:44:37:342:483 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:44:37:354:287 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:44:37:365:763 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:44:37:368:427 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:44:37:451:38 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:44:37:453:101 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:44:37:464:891 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:44:37:466:880 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt deleted file mode 100644 index f461cb47..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_mda_step_iat_uname_anomaly.txt +++ /dev/null @@ -1,162 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_uname_anomaly #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_mda_step_iat_uname_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_uname_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:32:370:586 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,2) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - -Q2 finished at: 2023-9-23 18:44:32:380:858 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:32:470:423 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,2) - (6) expected_result: - (0,2) - - Q4 finished at: 2023-9-23 18:44:32:481:630 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:32:492:289 - Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q6 finished at: 2023-9-23 18:44:32:502:268 - Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:44:32:509:462 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:32:510:529 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:44:32:568:936 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-23 18:44:32:571:575 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:44:32:574:849 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-23 18:44:32:579:537 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:44:32:587:15 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:32:587:584 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:44:32:672:477 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:44:32:673:307 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:44:32:679:820 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:44:32:680:872 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt deleted file mode 100644 index 6682b8c8..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:16:967:929 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:44:16:970:677 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:17:68:916 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:17:78:634 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:17:80:766 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:44:17:173:866 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:17:175:124 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:44:17:181:464 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:17:182:636 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index c19f00be..00000000 --- a/test_result/centralizend_result/cassandra/three/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:15:557:703 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:15:563:133 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:15:658:465 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:44:15:670:857 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:44:15:672:856 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:44:15:765:960 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:15:768:187 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:44:15:776:11 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:44:15:777:973 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt deleted file mode 100644 index c92f5195..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:29:77:801 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:29:90:227 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:29:176:190 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:29:179:770 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:29:182:454 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:43:29:278:950 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:29:382:851 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:29:477:910 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:43:29:492:258 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:29:494:218 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index 87b7bcdf..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:30:634:407 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:30:649:599 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:30:734:392 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:30:751:155 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:30:762:582 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:30:765:335 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:43:30:845:734 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:30:847:963 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:43:30:861:928 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:30:863:898 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt deleted file mode 100644 index db431c30..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:32:137:173 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:32:140:991 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:32:237:604 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:32:242:929 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:32:246:744 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:43:32:340:626 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:32:341:162 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:43:32:437:575 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:32:441:57 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:32:441:441 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt deleted file mode 100644 index 2def4977..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:33:565:929 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:43:33:568:502 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:33:666:85 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:33:670:78 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:33:675:340 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:43:33:768:949 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:33:866:145 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:33:966:144 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:33:970:224 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:33:970:702 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt deleted file mode 100644 index 766325ad..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:37:785:575 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:37:788:901 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:37:887:5 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:43:37:898:91 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:37:909:303 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:43:37:996:21 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:37:997:653 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:43:38:86:996 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:38:96:695 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:38:98:18 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt deleted file mode 100644 index 2c443ed4..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:39:294:89 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:39:304:201 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:39:394:9 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:43:39:401:356 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:39:406:877 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:39:407:981 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:43:39:495:881 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:39:496:341 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:39:500:306 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:39:500:696 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index 65d7d517..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:35:97:234 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:43:35:100:736 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:35:198:618 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:35:208:998 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:35:218:964 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:35:221:46 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:43:35:300:499 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:35:300:948 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:43:35:304:45 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:35:304:414 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index 9debffa2..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:36:420:190 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:43:36:424:380 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:36:520:433 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:43:36:524:691 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:43:36:528:988 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:36:529:691 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:43:36:624:18 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:36:624:570 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:43:36:630:884 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:36:631:669 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt deleted file mode 100644 index 4486572a..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:26:135:817 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:26:144:831 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:26:235:759 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:26:244:658 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:26:250:517 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:43:26:339:906 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:26:435:881 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:26:535:768 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:26:544:528 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:26:545:8 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index f6f8d29f..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:27:679:417 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:27:683:258 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:27:779:604 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:27:785:150 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:27:789:260 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:27:790:218 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:43:27:890:974 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:27:892:925 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:27:908:213 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:27:909:914 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt deleted file mode 100644 index fbdbd370..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:40:670:297 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:40:674:269 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:40:770:241 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:40:774:491 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:43:40:777:649 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:43:40:870:269 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:43:40:874:654 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:43:40:878:317 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:43:40:973:442 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:40:973:918 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:41:70:506 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:41:170:505 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:43:41:175:949 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:41:176:507 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index 260ca678..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:43:42:288:19 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:43:42:291:926 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:43:42:388:774 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:43:42:397:25 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:43:42:488:151 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:43:42:492:128 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:43:42:497:236 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:43:42:589:781 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:43:42:602:359 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:43:42:691:740 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:43:42:788:135 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:42:888:343 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:43:42:988:288 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:42:988:739 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:43:42:992:224 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:43:42:992:665 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index a84553f7..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:44:179:560 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:44:184:274 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:44:279:273 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:44:282:443 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:43:44:286:261 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:43:44:379:382 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:43:44:382:256 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:43:44:385:11 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:43:44:489:534 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:44:491:575 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:44:581:301 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:44:681:422 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:43:44:690:376 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:44:692:666 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 174a772e..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:45:924:253 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:43:45:932:98 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:46:24:917 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:43:46:35:823 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:43:46:47:14 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:43:46:123:638 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:43:46:127:230 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:43:46:130:640 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:43:46:236:980 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:46:238:935 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:46:325:436 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:46:425:157 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:43:46:436:141 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:46:437:596 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt deleted file mode 100644 index c7916b1a..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:15:839:414 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:15:876:271 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:15:937:994 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:43:15:983:859 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:43:16:39:175 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:16:139:371 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:43:16:149:118 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:43:16:150:237 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt deleted file mode 100644 index 3b7066bb..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:18:846:936 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:18:864:252 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:18:946:804 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:43:18:970:659 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:43:19:57:436 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:19:145:575 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:19:247:44 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:43:19:259:513 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:19:261:765 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index 50df5ce0..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:20:504:433 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:20:520:468 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:20:603:175 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:43:20:609:827 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:20:610:922 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:43:20:706:739 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:20:707:144 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:43:20:711:54 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:20:711:541 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt deleted file mode 100644 index 694fa73e..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:24:725:352 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:24:740:706 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:24:824:742 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:24:838:610 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:43:24:928:347 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:43:24:929:15 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:25:24:975 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:43:25:29:962 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:25:30:489 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt deleted file mode 100644 index 3b1ee497..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:17:283:196 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:43:17:301:144 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:17:383:280 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:17:404:428 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:43:17:497:148 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:17:581:783 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:17:682:135 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:43:17:688:365 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:17:689:400 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 0fb0396e..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:21:857:689 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:43:21:907:64 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:21:957:352 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:21:962:221 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:21:962:921 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:43:22:73:121 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:22:75:526 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:43:22:88:186 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:22:90:184 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index bc941cea..00000000 --- a/test_result/centralizend_result/cassandra/three/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:23:306:170 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:43:23:325:89 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:23:405:616 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:43:23:415:763 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:23:416:796 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:43:23:512:148 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:23:512:934 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:43:23:516:821 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:23:517:527 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index 1f7d4432..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:58:321:387 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:58:332:734 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:58:419:738 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:58:422:648 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:58:424:882 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:58:425:287 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:43:58:529:548 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:58:532:50 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:58:544:283 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:58:546:270 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index da033afc..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:59:781:284 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:59:792:53 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:59:881:246 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:43:59:893:339 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:59:904:952 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:43:59:990:451 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:59:992:279 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:0:79:984 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:44:0:83:193 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:0:83:550 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index 8ed9f8ed..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:1:273:119 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:1:284:385 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:1:372:158 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:1:378:734 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:1:382:762 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:1:476:897 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:1:572:334 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:1:672:343 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:44:1:676:846 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:1:677:322 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index c7d0c1a2..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:2:808:412 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:2:813:356 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:2:908:309 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:2:913:337 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:2:916:230 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:2:916:712 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:44:3:11:986 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:3:12:387 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:44:3:15:831 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:3:16:225 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 345c56c7..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:4:199:727 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:4:203:495 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:4:299:398 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:4:302:439 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:4:305:188 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:4:410:113 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:4:412:139 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:4:501:356 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:4:513:322 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:4:515:172 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index 6cf4b4bb..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:5:777:839 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:44:5:787:414 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:5:877:594 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:5:888:975 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:5:898:451 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:5:987:74 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:6:76:955 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:6:177:124 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:6:182:549 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:6:183:302 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index de6ef508..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:7:378:306 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:7:385:649 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:7:479:222 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:7:490:701 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:7:501:475 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:7:587:719 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:44:7:589:536 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:44:7:679:534 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:7:691:360 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:7:692:559 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 75bab6cc..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:8:887:33 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:8:890:250 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:8:987:26 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:8:990:107 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:8:994:49 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:44:9:89:917 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:44:9:187:211 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:9:287:133 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:9:291:741 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:9:292:405 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index 7a60c3fb..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:10:427:982 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:10:432:663 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:10:528:140 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:44:10:532:471 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:10:537:224 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:44:10:538:263 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:44:10:636:784 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:44:10:638:577 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:44:10:650:987 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:10:652:677 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt deleted file mode 100644 index 249c14bf..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:11:777:516 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:11:787:136 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:11:877:560 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:11:888:293 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:44:11:897:556 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:44:11:977:469 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:44:11:987:839 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:44:11:997:131 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:44:12:85:683 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:44:12:87:677 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:44:12:178:90 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:12:277:8 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:44:12:283:326 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:12:284:56 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt deleted file mode 100644 index 1e1713e7..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:44:13:529:750 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:44:13:538:976 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:44:13:628:0 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:44:13:632:505 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:44:13:729:520 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:44:13:838:574 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:44:13:932:726 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:44:13:935:540 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:44:14:39:204 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:44:14:130:547 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:44:14:230:304 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:44:14:330:750 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:44:14:343:863 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:44:14:346:5 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index e4029641..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:47:640:51 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:47:648:265 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:47:740:906 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:47:753:331 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:43:47:841:231 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:47:941:764 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:43:47:949:963 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:43:48:399:220 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:48:401:109 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index cfa07e9b..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:49:173:172 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:49:184:827 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:49:271:587 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:49:275:523 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:43:49:373:307 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:49:473:624 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:43:49:483:203 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:43:49:932:809 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:49:933:188 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt deleted file mode 100644 index 5aa8c5ec..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:50:660:173 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:50:670:948 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:50:758:663 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:50:761:745 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:43:50:870:159 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:43:50:872:153 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:50:960:746 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:43:50:968:973 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:50:971:98 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt deleted file mode 100644 index ef14db0e..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:52:204:7 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:52:214:310 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:52:302:463 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:52:305:457 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:52:305:859 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:43:52:413:680 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:52:415:560 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:43:52:424:823 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:52:426:726 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index 6f31751e..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:56:827:106 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:43:56:837:519 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:56:927:95 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:56:938:598 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:56:940:831 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:43:57:34:478 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:57:36:553 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:43:57:45:866 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:57:48:0 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt deleted file mode 100644 index 419924ef..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:53:631:586 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:43:53:640:975 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:53:731:506 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:53:743:452 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:43:53:842:65 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:43:53:844:336 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:53:930:936 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:43:53:935:852 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:53:936:801 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt deleted file mode 100644 index 1bd54ede..00000000 --- a/test_result/centralizend_result/cassandra/three/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: three #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = three for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:55:170:28 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:43:55:180:509 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:55:268:450 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:55:271:801 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:43:55:379:853 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:55:469:956 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:43:55:570:561 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:43:55:580:607 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:55:582:760 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt deleted file mode 100644 index ca20a0bd..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:55:65:894 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:55:74:574 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:55:165:877 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:55:177:217 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:55:188:43 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:55:190:175 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:42:55:273:33 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:55:275:197 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:55:288:961 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:55:291:98 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt deleted file mode 100644 index 3a6e8371..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_read_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_read_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_read_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:56:516:535 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:56:525:335 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:56:616:587 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:56:627:569 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:56:639:455 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:56:642:8 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:42:56:725:269 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:56:727:511 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:56:742:870 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:56:744:843 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt deleted file mode 100644 index a9c827f9..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_write_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:57:988:411 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:57:996:908 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:58:88:311 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:58:98:195 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:58:109:812 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:58:196:295 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:58:198:161 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:58:288:972 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:58:300:632 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:58:302:500 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt deleted file mode 100644 index c5f4ec2c..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:1:708:224 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:43:1:717:826 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:1:808:123 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:43:1:818:949 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:1:830:248 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:1:832:714 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:43:1:917:135 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:1:919:357 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:43:1:982:342 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:1:982:726 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt deleted file mode 100644 index ba5f3107..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ /dev/null @@ -1,17 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-intersecting_data #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' -Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' -Q0 failed reason: The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. errcode: HY000 -Q0 failed at: 2023-9-23 18:42:58:721:464 - -Test Result: Rollback -Reason: Err:The connection '266' query failed to execute query 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL)': The CQL error message is 'No PRIMARY KEY specifed for table 'mytab' (exactly one required)'.. - diff --git a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt deleted file mode 100644 index 1f3e9f2c..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_skew_predicate_based-overdraft_protection #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' -Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:0:327:873 -Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - *(1) expected_result: - (checking,500,) (saving,500,) - (2) expected_result: - (checking,1400,) (saving,500,) - -Q2 finished at: 2023-9-23 18:43:0:339:388 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:0:427:815 - Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' - current_result: - (checking,500,) (saving,500,) - (1) expected_result: - (checking,500,) (saving,1400,) - *(2) expected_result: - (checking,500,) (saving,500,) - - Q4 finished at: 2023-9-23 18:43:0:439:218 - Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' - Q5 finished at: 2023-9-23 18:43:0:475:387 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:43:0:476:848 -Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' -Q7 finished at: 2023-9-23 18:43:0:547:106 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:43:0:548:963 - Q9-T3 execute sql: 'SELECT * FROM account;' - current_result: - (kevin,checking,1400) (kevin,saving,1400) - *(1) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - *(2) expected_result: - (kevin,checking,1400) (kevin,saving,1400) - - Q9 finished at: 2023-9-23 18:43:0:559:187 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:0:561:277 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt deleted file mode 100644 index cbfdca3b..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_causality_violation_anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_causality_violation_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:12:451:80 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:43:12:461:744 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:12:550:359 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:43:12:558:530 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:43:12:560:330 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:43:12:651:24 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:43:12:662:643 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:43:12:672:615 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:43:12:674:951 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:43:12:760:23 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:43:12:762:446 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:43:12:776:419 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:43:12:778:709 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt deleted file mode 100644 index 1dc1479c..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_cross_phenomenon.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_cross_phenomenon #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_mda_step_iat_cross_phenomenon test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_cross_phenomenon test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:10:752:440 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - (6) expected_result: - (0,1) - (7) expected_result: - (0,1) - *(8) expected_result: - (0,0) - (9) expected_result: - (0,1) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - (13) expected_result: - (0,1) - (14) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:43:10:763:909 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:10:852:321 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - *(9) expected_result: - (1,0) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - (12) expected_result: - (1,1) - (13) expected_result: - (1,1) - *(14) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:43:10:858:15 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:43:10:952:544 - Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-23 18:43:10:963:709 - Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:10:965:992 - Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:43:11:52:677 - Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:43:11:63:595 - Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:43:11:65:611 - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-23 18:43:11:156:404 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:11:157:476 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - (3) expected_result: - (1,0) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - (6) expected_result: - (1,0) - *(7) expected_result: - (1,1) - *(8) expected_result: - (1,1) - (9) expected_result: - (1,0) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - *(12) expected_result: - (1,1) - (13) expected_result: - (1,0) - *(14) expected_result: - (1,1) - -Q13 finished at: 2023-9-23 18:43:11:262:318 -Q14-T1 execute opt: 'COMMIT'; -Q14 finished at: 2023-9-23 18:43:11:264:650 - Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:43:11:280:715 - Q16-T5 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:43:11:282:829 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt deleted file mode 100644 index fbc1222f..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ /dev/null @@ -1,140 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:13:925:738 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:43:13:928:8 -Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,20) - (4) expected_result: - (1,20) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,20) - -Q3 finished at: 2023-9-23 18:43:13:929:933 - Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:43:14:27:502 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - *(3) expected_result: - (1,0) - *(4) expected_result: - (1,0) - *(5) expected_result: - (1,0) - *(6) expected_result: - (1,0) - - Q5 finished at: 2023-9-23 18:43:14:38:464 - Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:43:14:48:506 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:43:14:50:614 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:43:14:126:544 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-23 18:43:14:131:886 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:43:14:135:983 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:14:136:869 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:43:14:232:194 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:43:14:233:306 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:43:14:239:769 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:43:14:240:735 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt deleted file mode 100644 index f4d323bc..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_sda_lost_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_sda_lost_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_lost_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:53:639:931 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:42:53:648:863 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:53:739:941 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:53:752:467 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:42:53:754:879 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:42:53:848:533 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:53:850:572 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:53:858:517 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:53:860:571 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt deleted file mode 100644 index 72be4302..00000000 --- a/test_result/centralizend_result/cassandra/two/iat_sda_non_repeatable_read_committed.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------iat_sda_non_repeatable_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------iat_sda_non_repeatable_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:52:190:317 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:52:198:746 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:52:290:200 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:52:301:492 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:42:52:303:807 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:42:52:397:420 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:52:399:639 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:52:407:822 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:52:409:879 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt deleted file mode 100644 index 6010b3f5..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_double_write_skew1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:5:263:365 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:5:276:390 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:5:361:855 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:5:365:502 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:5:368:141 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:5:473:123 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:5:576:364 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:5:663:930 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:42:5:680:941 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:5:682:673 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt deleted file mode 100644 index 5bd0a87d..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew1_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew1_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_double_write_skew1_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew1_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:6:865:190 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:6:878:827 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:6:964:576 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:6:976:310 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:6:986:287 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:6:988:827 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:42:7:75:430 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:7:77:463 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-23 18:42:7:92:496 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:7:94:779 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt deleted file mode 100644 index dcbaf01a..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_double_write_skew2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_double_write_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_double_write_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:8:291:96 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:8:302:999 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:8:391:73 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:8:404:104 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:8:416:985 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:42:8:499:483 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:8:501:663 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:8:591:742 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:8:606:431 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:8:608:668 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt deleted file mode 100644 index 827e801c..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:9:813:643 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:9:823:966 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:9:913:311 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:9:925:391 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:9:938:934 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:42:10:21:797 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:10:114:175 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:10:214:73 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:10:229:8 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:10:231:396 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt deleted file mode 100644 index f69544a6..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_read_skew2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:14:280:542 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:14:291:679 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:14:380:606 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:14:391:885 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:14:403:883 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:14:490:376 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:14:492:212 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:14:581:245 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:14:595:19 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:14:597:60 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt deleted file mode 100644 index e2ef31e3..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew2_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew2_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_read_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:15:831:992 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:15:837:614 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:15:931:861 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:15:942:820 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:15:953:876 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:15:956:443 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:42:16:41:498 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:16:43:349 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:16:57:717 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:16:60:28 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt deleted file mode 100644 index f93f1881..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_delete.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_read_skew_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:11:445:73 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:42:11:459:633 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:11:545:122 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:11:556:759 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:11:567:379 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:11:569:794 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:42:11:656:133 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:11:658:188 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-23 18:42:11:671:508 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:11:673:678 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt deleted file mode 100644 index 43ddc2f0..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_read_skew_predicate_based_insert.txt +++ /dev/null @@ -1,59 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_read_skew_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_read_skew_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:12:864:381 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q2 finished at: 2023-9-23 18:42:12:879:639 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:12:964:353 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:42:12:975:370 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:42:12:985:363 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:12:988:72 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-23 18:42:13:76:428 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:13:78:817 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-23 18:42:13:92:536 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:13:94:563 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt deleted file mode 100644 index f4d48ba3..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_write_read_skew test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:2:215:459 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:2:229:897 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:2:315:424 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:2:332:0 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:2:346:756 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q6 finished at: 2023-9-23 18:42:2:416:347 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:2:516:99 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:2:615:940 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:2:645:790 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:2:647:407 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt deleted file mode 100644 index 58d1aa0f..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_dda_write_read_skew_committed.txt +++ /dev/null @@ -1,61 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_write_read_skew_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_dda_write_read_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_dda_write_read_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:3:821:367 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:3:834:987 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:3:921:331 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:3:935:356 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:3:946:35 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:3:948:341 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:42:4:30:376 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:4:32:370 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:4:46:518 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:4:48:318 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt deleted file mode 100644 index 052bc8d3..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_mda_step_rat test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:17:270:832 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:17:283:34 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:17:370:662 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:17:384:664 - Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - (3) expected_result: - (0,0) - (4) expected_result: - (0,0) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - - Q5 finished at: 2023-9-23 18:42:17:395:215 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:42:17:470:815 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:42:17:483:569 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q8 finished at: 2023-9-23 18:42:17:497:32 -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - *(4) expected_result: - (2,1) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q9 finished at: 2023-9-23 18:42:17:580:17 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:42:17:582:316 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:42:17:671:393 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:17:771:549 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:42:17:788:715 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:17:790:817 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt deleted file mode 100644 index 66fd0935..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_long_fork.txt +++ /dev/null @@ -1,207 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_long_fork #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_mda_step_rat_long_fork test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_long_fork test run---------- - Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:42:18:996:853 - Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - *(9) expected_result: - (0,0) - (10) expected_result: - (0,1) - *(11) expected_result: - (0,0) - (12) expected_result: - (0,1) - *(13) expected_result: - (0,0) - *(14) expected_result: - (0,0) - - Q2 finished at: 2023-9-23 18:42:19:3:103 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:42:19:96:731 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:42:19:108:917 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:42:19:196:994 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-23 18:42:19:210:248 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - *(5) expected_result: - (0,1) - (6) expected_result: - (0,0) - *(7) expected_result: - (0,1) - *(8) expected_result: - (0,1) - *(9) expected_result: - (0,1) - (10) expected_result: - (0,0) - (11) expected_result: - (0,0) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - (14) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:42:19:223:687 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:42:19:297:72 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:42:19:309:930 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - (3) expected_result: - (1,0) - *(4) expected_result: - (1,1) - (5) expected_result: - (1,0) - *(6) expected_result: - (1,1) - (7) expected_result: - (1,0) - *(8) expected_result: - (1,1) - *(9) expected_result: - (1,1) - *(10) expected_result: - (1,1) - *(11) expected_result: - (1,1) - (12) expected_result: - (1,0) - (13) expected_result: - (1,0) - (14) expected_result: - (1,0) - - Q10 finished at: 2023-9-23 18:42:19:406:600 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:42:19:497:416 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:19:597:730 - Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:42:19:697:817 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:19:699:827 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:42:19:713:758 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:42:19:715:807 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt deleted file mode 100644 index 175bd3cb..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_delete.txt +++ /dev/null @@ -1,109 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_mda_step_rat_predicate_based_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:20:948:415 -Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:20:958:850 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:21:46:801 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:21:49:932 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (1,) - (4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:42:21:54:270 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:42:21:146:896 - Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:42:21:150:920 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (0,) - (1) expected_result: - (,) - (2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (1,) - (5) expected_result: - (1,) - (6) expected_result: - (1,) - - Q8 finished at: 2023-9-23 18:42:21:154:279 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (0,) - (1) expected_result: - (1,) - (2) expected_result: - (1,) - (3) expected_result: - (1,) - (4) expected_result: - (,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:42:21:257:364 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:42:21:259:765 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:42:21:348:973 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:21:449:37 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:42:21:458:524 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:21:460:709 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt deleted file mode 100644 index 2c6ea70f..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_mda_step_rat_predicate_based_insert.txt +++ /dev/null @@ -1,106 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_mda_step_rat_predicate_based_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_mda_step_rat_predicate_based_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:22:665:41 -Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:42:22:676:21 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:22:764:969 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:42:22:775:578 - Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - current_result: - (1,) - (1) expected_result: - (,) - (2) expected_result: - (,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q5 finished at: 2023-9-23 18:42:22:787:692 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:42:22:865:162 - Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:42:22:876:118 - Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - *(1) expected_result: - (1,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - (4) expected_result: - (,) - *(5) expected_result: - (1,) - (6) expected_result: - (,) - - Q8 finished at: 2023-9-23 18:42:22:888:357 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - current_result: - (1,) - *(1) expected_result: - (1,) - (2) expected_result: - (,) - *(3) expected_result: - (1,) - *(4) expected_result: - (1,) - (5) expected_result: - (,) - (6) expected_result: - (,) - -Q9 finished at: 2023-9-23 18:42:22:975:494 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:42:22:977:907 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:42:23:65:833 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:23:165:866 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:42:23:181:706 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:23:183:733 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt deleted file mode 100644 index 649eb89b..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_dirty_read.txt +++ /dev/null @@ -1,45 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_read #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_dirty_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k, v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_dirty_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:51:737:333 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:41:51:779:836 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:51:837:81 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:41:51:895:261 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:41:51:937:248 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:41:52:37:556 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,0) - - Q7 finished at: 2023-9-23 18:41:52:51:167 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:41:52:53:110 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt deleted file mode 100644 index eaee4f89..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_intermediate_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:54:824:870 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:41:54:843:875 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:54:923:801 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:41:54:939:796 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:41:55:42:113 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:41:55:125:612 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:41:55:225:71 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:41:55:237:655 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:41:55:239:628 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt deleted file mode 100644 index afd9c9af..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_intermediate_read_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_intermediate_read_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_intermediate_read_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_intermediate_read_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:56:457:469 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:41:56:474:633 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:56:557:510 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,2) - (2) expected_result: - (0,0) - - Q4 finished at: 2023-9-23 18:41:56:572:429 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:41:56:574:841 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:41:56:671:683 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:41:56:673:826 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - *(2) expected_result: - (0,2) - - Q8 finished at: 2023-9-23 18:41:56:689:698 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:41:56:691:977 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt b/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt deleted file mode 100644 index fa4ea306..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_lost_self_update.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_lost_self_update test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_lost_self_update test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:0:676:745 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:0:680:938 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:0:776:723 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:0:780:824 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:42:0:879:553 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:42:0:879:950 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:0:979:28 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:0:986:28 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:0:986:421 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt deleted file mode 100644 index c6607420..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_non_repeatable_read test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:53:219:889 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:41:53:224:39 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:53:320:93 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:41:53:325:467 -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-23 18:41:53:426:510 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:41:53:522:762 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:41:53:622:431 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:41:53:635:963 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:41:53:637:921 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt deleted file mode 100644 index 4eb1e6b3..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ /dev/null @@ -1,58 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:57:928:732 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:41:58:6:391 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:58:27:126 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:41:58:31:262 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:41:58:31:692 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:41:58:143:232 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:41:58:145:749 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-23 18:41:58:158:665 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:41:58:160:808 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt deleted file mode 100644 index 58f564da..00000000 --- a/test_result/centralizend_result/cassandra/two/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ /dev/null @@ -1,57 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute opt: 'COMMIT'; - -----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:41:59:327:163 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q2 finished at: 2023-9-23 18:41:59:345:859 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:41:59:427:286 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:41:59:443:94 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:41:59:445:499 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-23 18:41:59:542:200 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:41:59:544:540 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-23 18:41:59:555:314 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:41:59:557:383 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt deleted file mode 100644 index 078594af..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_double_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_double_write_skew2_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_double_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_double_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:34:923:10 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:34:934:524 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:35:22:837 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:35:34:911 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:35:47:183 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:35:49:649 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:42:35:130:362 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:35:132:514 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:35:145:329 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:35:147:493 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt deleted file mode 100644 index 8f8671be..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c1.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_full_write_skew_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:36:341:384 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:36:351:946 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:36:441:414 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:36:453:110 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:36:464:208 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:36:544:468 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:36:545:245 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:36:640:216 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:42:36:643:172 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:36:643:534 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt deleted file mode 100644 index a68a2f82..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_c2.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_c2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_full_write_skew_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:37:750:667 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:37:756:484 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:37:850:600 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:37:862:200 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:37:873:583 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:37:954:96 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:38:51:44 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:38:150:865 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:42:38:164:964 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:38:166:844 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt deleted file mode 100644 index 4e4e1c13..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_full_write_skew_committed.txt +++ /dev/null @@ -1,47 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_full_write_skew_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_full_write_skew_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_full_write_skew_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:39:374:737 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:39:385:605 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:39:473:355 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:39:477:955 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:39:481:688 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:39:482:342 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:42:39:575:811 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:39:576:184 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - (1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,2) (1,2) - - Q9 finished at: 2023-9-23 18:42:39:578:920 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:39:579:317 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt deleted file mode 100644 index 9b5e375a..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_read_write_skew1_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:40:694:586 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:40:699:327 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:40:794:535 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:40:799:895 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:40:803:47 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:40:903:259 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:40:905:186 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:40:995:68 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:41:7:931 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:41:9:839 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt deleted file mode 100644 index d30dbe57..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew1_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew1_c2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_read_write_skew1_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew1_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:42:183:118 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q2 finished at: 2023-9-23 18:42:42:191:999 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:42:283:275 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:42:295:112 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:42:307:66 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:42:392:1 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:42:483:811 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:42:583:754 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - (1) expected_result: - (0,1) (1,2) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:42:597:676 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:42:599:533 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt deleted file mode 100644 index ba43e1a3..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c1.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_read_write_skew2_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:43:851:839 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:43:862:434 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:43:951:892 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:43:962:527 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:43:974:729 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:44:60:427 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:44:62:344 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:42:44:152:284 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:44:164:876 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:44:166:971 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt deleted file mode 100644 index 6c401732..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_c2.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_c2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_read_write_skew2_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:45:356:552 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:45:366:655 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:45:456:530 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:45:466:95 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:45:477:367 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:42:45:565:330 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:45:657:127 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:45:756:887 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:45:769:368 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:45:771:370 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt deleted file mode 100644 index 177435ab..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_dda_read_write_skew2_committed.txt +++ /dev/null @@ -1,54 +0,0 @@ -#### db_type: cassandra #### -#### test_type: dda_read_write_skew2_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_dda_read_write_skew2_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_dda_read_write_skew2_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:46:985:305 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:46:996:204 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:47:83:838 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - (1) expected_result: - (1,1) - *(2) expected_result: - (1,0) - - Q4 finished at: 2023-9-23 18:42:47:87:725 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:47:91:615 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:47:92:453 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:42:47:194:885 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:42:47:196:715 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-23 18:42:47:211:806 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:47:213:658 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt deleted file mode 100644 index 1a5b1ee6..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c1.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_mda_step_wat_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:48:470:390 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:48:481:386 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:48:570:191 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:48:582:49 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:42:48:594:336 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:42:48:669:335 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:42:48:675:598 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:42:48:681:328 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:42:48:779:115 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:42:48:781:0 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:42:48:871:98 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:48:971:20 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:42:48:983:430 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:48:985:228 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt deleted file mode 100644 index 6a5c0eef..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_mda_step_wat_c2.txt +++ /dev/null @@ -1,64 +0,0 @@ -#### db_type: cassandra #### -#### test_type: mda_step_wat_c2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_mda_step_wat_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_mda_step_wat_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:50:224:535 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:50:234:972 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:50:324:400 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:42:50:335:814 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:42:50:424:648 - Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:42:50:534:206 - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:42:50:634:461 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:42:50:645:812 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:42:50:725:853 - Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:42:50:825:509 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:42:50:925:264 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:42:51:23:812 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,3) (2,1) - (1) expected_result: - (0,2) (1,3) (2,3) - (2) expected_result: - (0,2) (1,2) (2,3) - (3) expected_result: - (0,1) (1,3) (2,3) - (4) expected_result: - (0,1) (1,3) (2,1) - (5) expected_result: - (0,2) (1,2) (2,1) - (6) expected_result: - (0,1) (1,2) (2,1) - - Q13 finished at: 2023-9-23 18:42:51:26:817 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:42:51:27:157 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt deleted file mode 100644 index 5bb4ee3c..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_1abort.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_1abort #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_dirty_write_1abort test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_1abort test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:24:392:320 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:24:403:389 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:24:492:297 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:24:505:721 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:42:24:592:644 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:24:692:845 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:42:24:701:170 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:42:25:183:591 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:25:185:491 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt deleted file mode 100644 index 34199762..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_dirty_write_2commit.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_dirty_write_2commit #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_dirty_write_2commit test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_dirty_write_2commit test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:25:960:432 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:25:970:925 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:26:58:994 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:26:62:219 -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:42:26:160:343 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:26:260:976 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) - - Q7 finished at: 2023-9-23 18:42:26:269:400 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:42:26:718:917 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:26:720:625 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt b/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt deleted file mode 100644 index 872f8975..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_full_write.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_full_write test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:27:508:903 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:27:520:181 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:27:608:836 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:27:622:498 -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:42:27:717:746 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:42:27:719:732 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:27:809:665 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:42:27:818:408 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:27:820:345 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt b/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt deleted file mode 100644 index 843a87ce..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_full_write_committed.txt +++ /dev/null @@ -1,46 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_full_write_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_full_write_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_full_write_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:29:12:381 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:29:23:953 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:29:112:357 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:29:124:105 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:42:29:126:200 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:42:29:221:439 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:29:223:647 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,3) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,3) - - Q8 finished at: 2023-9-23 18:42:29:232:840 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:29:234:884 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt deleted file mode 100644 index c14fe920..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_lost_self_update_committed.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_self_update_committed #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_lost_self_update_committed test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_self_update_committed test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:33:515:868 -Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:42:33:518:879 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:33:617:363 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:33:629:877 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:42:33:632:780 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,2) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-23 18:42:33:726:463 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:33:728:440 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:33:738:593 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:33:740:733 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt deleted file mode 100644 index fac079e4..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c1.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c1 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_lost_update_c1 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c1 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:30:449:340 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:42:30:458:502 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:30:549:290 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:30:561:392 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:42:30:659:448 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:42:30:661:471 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:42:30:748:176 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:30:750:435 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:30:750:802 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt deleted file mode 100644 index 29d9e325..00000000 --- a/test_result/centralizend_result/cassandra/two/wat_sda_lost_update_c2.txt +++ /dev/null @@ -1,51 +0,0 @@ -#### db_type: cassandra #### -#### test_type: sda_lost_update_c2 #### -#### isolation: two #### - -current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas -expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory - -set TXN_ISOLATION = two for each session -----------wat_sda_lost_update_c2 test prepare---------- -Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' -Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' -Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q0-T1 execute opt: 'COMMIT'; - -----------wat_sda_lost_update_c2 test run---------- -Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:42:31:922:394 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,2) - -Q2 finished at: 2023-9-23 18:42:31:931:719 - Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:42:32:22:235 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:42:32:34:3 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:42:32:132:766 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:42:32:223:80 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:42:32:322:883 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-23 18:42:32:331:257 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:42:32:333:55 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies - diff --git a/test_result/centralizend_result/yugabyte/README.md b/test_result/centralizend_result/yugabyte/README.md new file mode 100644 index 00000000..1bcc0961 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/README.md @@ -0,0 +1,48 @@ +# `YugabyteDB`测试说明 + +## 测试环境 + +`Ubuntu22.04` | `yugabyte 2.19.2` | `unixODBC 2.3.9` + +## 数据库简介 + +`YugabyteDB` 是一个高性能的开源分布式 `SQL` 数据库,旨在支持全球部署的业务关键型应用程序。它结合了传统的 `RDBMS`(关系数据库管理系统)的 ACID (原子性、一致性、隔离性、持久性)事务特性和 `Internet` 级别的水平可扩展性、高可用性和地理分布特性。 + +`YugabyteDB` 使用 Raft 分布式共识算法确保强一致性,并且可以容忍网络分区和节点故障,从而实现高可用性。支持多种数据模型,包括文档存储(通过 `YCQL`,兼容 Apache Cassandra 查询语言)和关系存储(通过 `YSQL`,兼容 `PostgreSQL`)。`YugabyteDB` 支持全局 `ACID` 事务,这意味着即使在分布式环境中,也能保证数据的完整性和一致性。`YugabyteDB` 的 `SQL` 接口(`YSQL`)与 `PostgreSQL` 高度兼容,这使得许多现有的应用程序和工具能够无缝迁移到 `YugabyteDB`。`YugabyteDB` 是为云而生的数据库,支持多云、混合云和 `Kubernetes` 部署。 + +## 隔离级别 + +`YugabyteDB`在事务层支持三种隔离级别:可串行化(`Serializable`)、快照(`Snapshot`)和已提交读(`Read Committed`)。`YSQL API`的默认隔离级别本质上是快照隔离(即与`PostgreSQL`的可重复读(`REPEATABLE READ`)相同) + +已提交读(`Read committed`):目前处于`Beta`阶段。只有在`YB-TServer`标志`yb_enable_read_committed_isolation`设置为`true`时,才支持已提交读隔离。 + +快照(`Snapshot`):默认情况下,`yb_enable_read_committed_isolation`标志为`false`,在这种情况下,`YugabyteDB`事务层的已提交读隔离级别将回退到更严格的快照(`Snapshot`)隔离(此时,`YSQL`的`READ COMMITTED`也会使用快照隔离)。 + +可串行化(`Serializable`),它要求一组可串行化事务的任何并发执行都保证产生与按某种串行顺序(一次一个事务)运行它们相同的效果。 + +## 实际测试说明 + +### 关于驱动程序`ODBC` + +`YugabyteDB` 是 `PostgreSQL` 兼容的,因此它通常可以使用 `PostgreSQL` 的 `ODBC` 驱动程序。 + +安装 `PostgreSQL ODBC` 驱动程序: + +```shell +sudo apt-get install odbc-postgresql +``` + +### 关于隔离级别设置 + +注意:`YugabyteDB`的事务隔离级别要在每个事务开始时设置,而不是在线程连接时设置 + +由于已提交读(`Read committed`)特性仅在`beta`版本存在,因此并未测试。 + +快照(`Snapshot`)级别的设置命令为:`BEGIN TRANSACTION;`(默认隔离级别) + +可串行化(`Serializable`)级别的设置命令为:` BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;` + + + + + diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt similarity index 71% rename from test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt index c52c9b75..2d2b8210 100644 --- a/test_result/centralizend_result/cassandra/all/iat_dda_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------iat_dda_read_skew_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:10:377:256 +Q1 finished at: 2023-9-24 22:23:38:976:203 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:38:977:618 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:47:10:381:141 +Q2 finished at: 2023-9-24 22:23:39:12:101 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:10:478:606 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:10:489:454 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:10:495:953 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:10:496:385 + Q3 finished at: 2023-9-24 22:23:39:76:206 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q7 finished at: 2023-9-23 18:47:10:585:556 +Q7 finished at: 2023-9-24 22:23:39:176:474 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:10:587:559 +Q8 finished at: 2023-9-24 22:23:39:177:496 + Q3 finished at: 2023-9-24 22:23:39:185:404 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:39:199:73 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:23:39:200:845 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:23:39:201:934 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:47:10:587:559 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:47:10:600:147 + Q9 finished at: 2023-9-24 22:23:39:270:840 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:10:602:353 + Q10 finished at: 2023-9-24 22:23:39:271:165 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt index 5da0abf4..3bb066d6 100644 --- a/test_result/centralizend_result/cassandra/all/iat_dda_read_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew1_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------iat_dda_read_write_skew1_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:11:854:412 +Q1 finished at: 2023-9-24 22:23:40:543:544 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:40:544:156 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,31 +26,35 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:47:11:859:516 +Q2 finished at: 2023-9-24 22:23:40:564:615 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:11:954:356 + Q3 finished at: 2023-9-24 22:23:40:644:506 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:23:40:746:75 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:40:747:582 + Q3 finished at: 2023-9-24 22:23:40:770:732 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:11:960:213 + Q4 finished at: 2023-9-24 22:23:40:785:365 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:11:962:640 + Q5 finished at: 2023-9-24 22:23:40:786:762 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:11:963:53 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:47:12:62:459 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:12:64:321 + Q6 finished at: 2023-9-24 22:23:40:787:628 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,1) (1,1) - (1) expected_result: (0,1) (1,2) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,2) + (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:47:12:71:415 + Q9 finished at: 2023-9-24 22:23:40:853:475 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:12:71:762 + Q10 finished at: 2023-9-24 22:23:40:853:809 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt similarity index 70% rename from test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt index 5770b3a9..14e6b238 100644 --- a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_skew #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------iat_dda_write_skew test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:20:304:812 +Q1 finished at: 2023-9-24 22:23:42:34:246 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:42:35:647 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:40:20:314:14 +Q2 finished at: 2023-9-24 22:23:42:69:732 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:20:404:766 + Q3 finished at: 2023-9-24 22:23:42:134:217 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:23:42:235:96 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:23:42:236:577 + Q3 finished at: 2023-9-24 22:23:42:250:333 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:40:20:409:795 + Q4 finished at: 2023-9-24 22:23:42:264:936 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:20:412:296 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:20:513:302 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:40:20:515:239 + Q5 finished at: 2023-9-24 22:23:42:266:197 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:40:20:605:287 + Q8 finished at: 2023-9-24 22:23:42:335:93 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q7 finished at: 2023-9-23 18:40:20:515:239 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:40:20:620:222 + Q9 finished at: 2023-9-24 22:23:42:469:40 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:40:20:620:620 + Q8 finished at: 2023-9-24 22:23:42:469:378 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt similarity index 70% rename from test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt index 6b82a100..2cfcf2cb 100644 --- a/test_result/centralizend_result/cassandra/any/iat_dda_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_skew_committed #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------iat_dda_write_skew_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:23:907:922 +Q1 finished at: 2023-9-24 22:23:45:743:668 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:45:745:150 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:40:23:916:976 +Q2 finished at: 2023-9-24 22:23:45:776:541 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:24:7:956 + Q3 finished at: 2023-9-24 22:23:45:843:678 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:23:45:944:837 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:45:945:846 + Q3 finished at: 2023-9-24 22:23:45:946:289 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:40:24:86:36 + Q4 finished at: 2023-9-24 22:23:45:959:114 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:24:89:487 + Q5 finished at: 2023-9-24 22:23:45:960:257 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:40:24:89:985 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:40:24:109:867 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:24:110:369 + Q6 finished at: 2023-9-24 22:23:45:960:967 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:40:24:110:369 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:40:24:113:231 + Q9 finished at: 2023-9-24 22:23:46:26:467 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:24:113:613 + Q10 finished at: 2023-9-24 22:23:46:26:799 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..c123cbae --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,78 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:43:231:947 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:43:233:461 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-24 22:23:43:275:516 +Q3-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 30);' +Q3 finished at: 2023-9-24 22:23:43:282:871 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-24 22:23:43:331:495 + Q4-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:43:431:831 + Q4 finished at: 2023-9-24 22:23:43:439:86 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2023-9-24 22:23:43:455:209 + Q6-T2 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 300);' + Q6 finished at: 2023-9-24 22:23:43:456:522 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:23:43:457:330 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-24 22:23:43:518:269 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-24 22:23:43:519:427 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-24 22:23:43:519:740 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..aa1182bf --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,16 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0 failed reason: 错误: must be owner of table account; errcode: 42501 +Q0 failed at: 2023-9-24 22:23:43:914:910 + +Test Result: Rollback +Reason: Err:错误: must be owner of table account; + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt similarity index 56% rename from test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt index f9eeea04..1fcb97b9 100644 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat #### -#### isolation: two #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = two for each session +set TXN_ISOLATION = serializable for each session ----------iat_mda_step_iat test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:3:188:201 +Q1 finished at: 2023-9-24 22:23:47:123:589 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:47:124:947 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:43:3:197:555 +Q2 finished at: 2023-9-24 22:23:47:159:600 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:3:288:122 + Q3 finished at: 2023-9-24 22:23:47:223:566 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:23:47:322:550 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:47:339:657 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,8 @@ Q2 finished at: 2023-9-23 18:43:3:197:555 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:43:3:293:573 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:43:3:388:371 + Q4 finished at: 2023-9-24 22:23:47:354:212 + Q5 finished at: 2023-9-24 22:23:47:370:896 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,39 +77,18 @@ Q2 finished at: 2023-9-23 18:43:3:197:555 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:43:3:399:243 + Q6 finished at: 2023-9-24 22:23:47:385:733 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:43:3:493:214 Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:43:3:597:113 Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:43:3:696:980 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:3:788:856 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:3:887:530 + Q9 finished at: 2023-9-24 22:23:47:628:483 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:3:989:306 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) (2,1) - *(1) expected_result: - (0,1) (1,1) (2,1) - *(2) expected_result: - (0,1) (1,1) (2,1) - *(3) expected_result: - (0,1) (1,1) (2,1) - *(4) expected_result: - (0,1) (1,1) (2,1) - *(5) expected_result: - (0,1) (1,1) (2,1) - *(6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:43:4:2:599 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:4:4:511 + Q12 finished at: 2023-9-24 22:23:47:926:683 +Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q7 failed at: 2023-9-24 22:23:48:126:517 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-9-24 22:23:48:333:246 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..d945a38e --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,92 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_iat_causality_violation_anomaly #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_causality_violation_anomaly test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:0:708:397 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:24:0:709:992 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:24:0:745:659 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:0:808:347 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:24:0:907:142 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:24:0:925:14 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-24 22:24:0:956:843 + Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + + Q7 finished at: 2023-9-24 22:24:0:971:26 + Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q8 finished at: 2023-9-24 22:24:0:972:681 + Q9-T3 execute opt: 'COMMIT'; + Q9 finished at: 2023-9-24 22:24:0:973:566 +Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,1) + (1) expected_result: + (1,0) + (2) expected_result: + (1,0) + *(3) expected_result: + (1,1) + (4) expected_result: + (1,0) + *(5) expected_result: + (1,1) + *(6) expected_result: + (1,1) + +Q10 finished at: 2023-9-24 22:24:1:8:976 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-24 22:24:1:10:179 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-9-24 22:24:1:341:855 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..a70593d4 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,147 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:57:853:861 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:57:855:229 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:23:57:890:542 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:57:953:821 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:23:58:52:834 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:58:69:287 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-24 22:23:58:82:714 + Q5 finished at: 2023-9-24 22:23:58:103:257 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-24 22:23:58:117:191 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:23:58:118:177 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-24 22:23:58:152:856 + Q8-T4 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q8 finished at: 2023-9-24 22:23:58:209:801 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,1) + (1) expected_result: + (0,0) + (2) expected_result: + (0,0) + *(3) expected_result: + (0,1) + *(4) expected_result: + (0,1) + (5) expected_result: + (0,0) + (6) expected_result: + (0,0) + (7) expected_result: + (0,0) + (8) expected_result: + (0,0) + *(9) expected_result: + (0,1) + *(10) expected_result: + (0,1) + *(11) expected_result: + (0,1) + (12) expected_result: + (0,0) + *(13) expected_result: + (0,1) + *(14) expected_result: + (0,1) + + Q11 finished at: 2023-9-24 22:23:58:255:22 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-24 22:23:58:256:105 +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q9 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q9 failed at: 2023-9-24 22:23:59:123:446 +Q13 failed reason: 错误: Heartbeat: Transaction 38ce5fa2-3a8e-4209-9763-2e0dd02d37de expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 38ce5fa2-3a8e-4209-9763-2e0dd errcode: 40001 +Q13 failed at: 2023-9-24 22:23:59:662:91 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt similarity index 61% rename from test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt index 9e776645..69ed233e 100644 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: two #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = two for each session +set TXN_ISOLATION = serializable for each session ----------iat_mda_step_iat_predicate_based_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:5:232:901 +Q1 finished at: 2023-9-24 22:23:49:410:315 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:49:411:677 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: null -Q2 finished at: 2023-9-23 18:43:5:242:775 +Q2 finished at: 2023-9-24 22:23:49:446:957 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:5:332:879 + Q3 finished at: 2023-9-24 22:23:49:510:226 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:23:49:609:552 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:49:633:72 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,8 @@ Q2 finished at: 2023-9-23 18:43:5:242:775 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:43:5:338:682 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:43:5:433:69 + Q4 finished at: 2023-9-24 22:23:49:649:898 + Q5 finished at: 2023-9-24 22:23:49:661:103 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,39 +77,20 @@ Q2 finished at: 2023-9-23 18:43:5:242:775 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:43:5:444:240 + Q6 finished at: 2023-9-24 22:23:49:675:505 Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:43:5:540:661 Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:43:5:641:272 + Q8 finished at: 2023-9-24 22:23:49:815:495 Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:43:5:741:283 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:5:833:609 + Q9 finished at: 2023-9-24 22:23:49:915:75 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:5:934:7 + Q11 finished at: 2023-9-24 22:23:50:113:349 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:6:34:191 - Q13-T4 execute sql: 'SELECT * FROM t1;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - *(3) expected_result: - null - *(4) expected_result: - null - *(5) expected_result: - null - *(6) expected_result: - null - - Q13 finished at: 2023-9-23 18:43:6:42:560 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:6:43:873 +Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q7 failed at: 2023-9-24 22:23:50:413:355 + Q12 failed reason: 错误: Heartbeat: Transaction 8a7e2762-0c89-4c64-84d6-32a9069c98d9 expired or aborted by a conflict: 40001 errcode: 40001 + Q12 failed at: 2023-9-24 22:23:51:416:350 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt similarity index 56% rename from test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt index 1a564d48..4a903fb2 100644 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: two #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = two for each session +set TXN_ISOLATION = serializable for each session ----------iat_mda_step_iat_predicate_based_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:7:194:691 +Q1 finished at: 2023-9-24 22:23:52:580:131 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:52:581:581 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: null @@ -30,9 +32,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:43:7:200:118 +Q2 finished at: 2023-9-24 22:23:52:627:453 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:7:294:637 + Q3 finished at: 2023-9-24 22:23:52:680:53 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:23:52:779:460 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:52:803:416 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: null @@ -49,9 +56,8 @@ Q2 finished at: 2023-9-23 18:43:7:200:118 *(6) expected_result: null - Q4 finished at: 2023-9-23 18:43:7:309:345 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:43:7:394:780 + Q4 finished at: 2023-9-24 22:23:52:819:106 + Q5 finished at: 2023-9-24 22:23:52:830:849 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: null @@ -68,39 +74,18 @@ Q2 finished at: 2023-9-23 18:43:7:200:118 *(6) expected_result: null - Q6 finished at: 2023-9-23 18:43:7:405:169 + Q6 finished at: 2023-9-24 22:23:52:843:635 Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:43:7:502:355 Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:43:7:601:774 Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:43:7:701:894 -Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:43:7:795:181 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:43:7:895:579 + Q9 finished at: 2023-9-24 22:23:53:85:198 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:43:7:995:591 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) (2,0) - (1) expected_result: - (0,1) (1,1) (2,1) - (2) expected_result: - (0,1) (1,1) (2,1) - (3) expected_result: - (0,1) (1,1) (2,1) - (4) expected_result: - (0,1) (1,1) (2,1) - (5) expected_result: - (0,1) (1,1) (2,1) - (6) expected_result: - (0,1) (1,1) (2,1) - - Q13 finished at: 2023-9-23 18:43:8:2:947 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:8:3:300 + Q12 finished at: 2023-9-24 22:23:53:383:300 +Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q7 failed at: 2023-9-24 22:23:53:583:123 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-9-24 22:23:53:789:875 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 71% rename from test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt index d0f32720..edbe98c6 100644 --- a/test_result/centralizend_result/cassandra/quorum/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: quorum #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = quorum for each session +set TXN_ISOLATION = serializable for each session ----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:2:918:313 +Q1 finished at: 2023-9-24 22:24:2:348:368 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:24:2:348:767 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -32,7 +34,7 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(6) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:46:2:927:578 +Q2 finished at: 2023-9-24 22:24:2:361:615 Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -49,9 +51,11 @@ Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,20) -Q3 finished at: 2023-9-23 18:46:2:936:249 +Q3 finished at: 2023-9-24 22:24:2:363:976 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:46:3:18:351 + Q4 finished at: 2023-9-24 22:24:2:448:354 + Q4-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q4 finished at: 2023-9-24 22:24:2:499:362 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -68,13 +72,15 @@ Q3 finished at: 2023-9-23 18:46:2:936:249 *(6) expected_result: (1,0) - Q5 finished at: 2023-9-23 18:46:3:33:823 + Q5 finished at: 2023-9-24 22:24:2:513:559 Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:46:3:43:272 + Q6 finished at: 2023-9-24 22:24:2:514:976 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:3:45:288 + Q7 finished at: 2023-9-24 22:24:2:515:652 Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:46:3:118:613 + Q8 finished at: 2023-9-24 22:24:2:548:721 + Q8-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q8 finished at: 2023-9-24 22:24:2:606:988 Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -91,7 +97,7 @@ Q3 finished at: 2023-9-23 18:46:2:936:249 *(6) expected_result: (0,0) - Q9 finished at: 2023-9-23 18:46:3:128:563 + Q9 finished at: 2023-9-24 22:24:2:623:149 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,20) @@ -108,33 +114,13 @@ Q3 finished at: 2023-9-23 18:46:2:936:249 (6) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:46:3:137:303 + Q10 finished at: 2023-9-24 22:24:2:624:814 Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:46:3:139:592 + Q11 finished at: 2023-9-24 22:24:2:625:667 Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:46:3:227:144 -Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:46:3:229:3 - Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,11) (1,20) - *(1) expected_result: - (0,11) (1,20) - *(2) expected_result: - (0,11) (1,20) - *(3) expected_result: - (0,11) (1,20) - *(4) expected_result: - (0,11) (1,20) - *(5) expected_result: - (0,11) (1,20) - *(6) expected_result: - (0,11) (1,20) - - Q14 finished at: 2023-9-23 18:46:3:240:29 - Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:46:3:241:917 +Q12 failed reason: 错误: Unknown transaction, could be recently aborted: 895e90f6-4c98-4dcb-862c-0c1783d99805; errcode: 40001 +Q12 failed at: 2023-9-24 22:24:3:859:189 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: Unknown transaction, could be recently aborted: 895e90f6-4c98-4dcb-862c-0c1783d99805; diff --git a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt similarity index 70% rename from test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt index 715c67ef..8099850e 100644 --- a/test_result/centralizend_result/cassandra/two/iat_mda_step_iat_uname_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_uname_anomaly #### -#### isolation: two #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = two for each session +set TXN_ISOLATION = serializable for each session ----------iat_mda_step_iat_uname_anomaly test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_uname_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:43:9:189:427 +Q1 finished at: 2023-9-24 22:23:54:950:164 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:54:951:658 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,1) -Q2 finished at: 2023-9-23 18:43:9:194:502 +Q2 finished at: 2023-9-24 22:23:54:987:566 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:43:9:289:357 + Q3 finished at: 2023-9-24 22:23:55:50:141 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-24 22:23:55:149:380 + Q9-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:55:176:236 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,9 @@ Q2 finished at: 2023-9-23 18:43:9:194:502 (6) expected_result: (0,2) - Q4 finished at: 2023-9-23 18:43:9:295:366 + Q4 finished at: 2023-9-24 22:23:55:191:525 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:43:9:298:339 + Q5 finished at: 2023-9-24 22:23:55:192:914 Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,13 +78,12 @@ Q2 finished at: 2023-9-23 18:43:9:194:502 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:43:9:300:694 + Q6 finished at: 2023-9-24 22:23:55:194:294 Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:43:9:303:361 + Q7 finished at: 2023-9-24 22:23:55:195:891 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:43:9:303:854 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:43:9:389:585 + Q8 finished at: 2023-9-24 22:23:55:196:688 + Q9 finished at: 2023-9-24 22:23:55:205:205 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -94,9 +100,9 @@ Q2 finished at: 2023-9-23 18:43:9:194:502 *(6) expected_result: (2,0) - Q10 finished at: 2023-9-23 18:43:9:394:663 + Q10 finished at: 2023-9-24 22:23:55:220:594 Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:43:9:397:43 + Q11 finished at: 2023-9-24 22:23:55:221:912 Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -113,11 +119,11 @@ Q2 finished at: 2023-9-23 18:43:9:194:502 (6) expected_result: (0,0) - Q12 finished at: 2023-9-23 18:43:9:398:993 + Q12 finished at: 2023-9-24 22:23:55:223:300 Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:43:9:401:556 + Q13 finished at: 2023-9-24 22:23:55:224:345 Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:43:9:402:28 + Q14 finished at: 2023-9-24 22:23:55:225:164 Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,1) @@ -134,29 +140,11 @@ Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' *(6) expected_result: (2,1) -Q15 finished at: 2023-9-23 18:43:9:498:218 +Q15 finished at: 2023-9-24 22:23:55:251:59 Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:43:9:500:476 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:43:9:514:384 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:43:9:516:614 +Q16 failed reason: 错误: Transaction 54202090-6c16-4a53-9e55-82d922f7c05a expired or aborted by a conflict: 40001 errcode: 40001 +Q16 failed at: 2023-9-24 22:23:56:853:692 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Err:错误: Transaction 54202090-6c16-4a53-9e55-82d922f7c05a expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt similarity index 67% rename from test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt index 5cd571c2..eafc8857 100644 --- a/test_result/centralizend_result/cassandra/any/iat_sda_lost_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_update_committed #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------iat_sda_lost_update_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_lost_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:16:59:782 +Q1 finished at: 2023-9-24 22:23:37:402:133 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:37:403:507 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,29 +25,33 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:40:16:69:239 +Q2 finished at: 2023-9-24 22:23:37:438:79 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:16:159:657 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:40:16:171:98 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:40:16:173:241 + Q3 finished at: 2023-9-24 22:23:37:502:62 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:40:16:261:201 +Q6 finished at: 2023-9-24 22:23:37:603:80 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:40:16:261:608 +Q7 finished at: 2023-9-24 22:23:37:604:555 + Q3 finished at: 2023-9-24 22:23:37:622:14 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:37:637:64 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:23:37:638:286 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:40:16:263:661 + Q8 finished at: 2023-9-24 22:23:37:695:738 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:40:16:264:110 + Q9 finished at: 2023-9-24 22:23:37:696:73 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt similarity index 70% rename from test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt index e9063cfb..eb84edba 100644 --- a/test_result/centralizend_result/cassandra/any/iat_sda_non_repeatable_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_committed #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------iat_sda_non_repeatable_read_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_non_repeatable_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:14:638:308 +Q1 finished at: 2023-9-24 22:23:36:49:606 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:36:51:95 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,24 +25,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:40:14:647:371 +Q2 finished at: 2023-9-24 22:23:36:86:463 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:14:738:186 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:40:14:749:674 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:40:14:752:198 + Q3 finished at: 2023-9-24 22:23:36:149:575 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: (0,0) - *(2) expected_result: + *(1) expected_result: + (0,0) + (2) expected_result: (0,1) -Q6 finished at: 2023-9-23 18:40:14:845:352 +Q6 finished at: 2023-9-24 22:23:36:249:667 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:40:14:847:595 +Q7 finished at: 2023-9-24 22:23:36:250:714 + Q3 finished at: 2023-9-24 22:23:36:255:208 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:36:269:786 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:23:36:270:775 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -49,10 +53,12 @@ Q7 finished at: 2023-9-23 18:40:14:847:595 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:40:14:857:46 + Q8 finished at: 2023-9-24 22:23:36:330:799 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:40:14:859:149 + Q9 finished at: 2023-9-24 22:23:36:331:147 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..5dd147af --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt @@ -0,0 +1,48 @@ +#### db_type: yugabyte #### +#### test_type: dda_double_write_skew1 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:45:265:663 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:45:267:153 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:22:45:301:792 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:45:365:773 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-24 22:22:45:466:361 + Q3 finished at: 2023-9-24 22:22:45:489:806 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:45:503:706 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-24 22:22:45:505:578 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:22:45:568:145 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: 错误: Heartbeat: Transaction a1979ca3-55f5-487a-9c64-6d934ebbdf23 expired or aborted by a conflict: 40001 errcode: 40001 +Q8 failed at: 2023-9-24 22:22:46:471:528 + +Test Result: Rollback +Err:错误: Heartbeat: Transaction a1979ca3-55f5-487a-9c64-6d934ebbdf23 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt similarity index 71% rename from test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt index ddc295df..3f2fc512 100644 --- a/test_result/centralizend_result/cassandra/all/rat_dda_double_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_double_write_skew1_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_double_write_skew1_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,13 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:20:485:757 +Q1 finished at: 2023-9-24 22:22:47:567:706 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:47:569:140 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:20:492:179 +Q2 finished at: 2023-9-24 22:22:47:603:230 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:20:585:758 + Q3 finished at: 2023-9-24 22:22:47:667:634 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-24 22:22:47:770:51 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:22:47:772:607 + Q3 finished at: 2023-9-24 22:22:47:802:758 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:20:598:982 + Q4 finished at: 2023-9-24 22:22:47:817:847 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,25 +38,23 @@ Q2 finished at: 2023-9-23 18:46:20:492:179 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:46:20:608:383 + Q5 finished at: 2023-9-24 22:22:47:819:644 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:20:610:875 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:46:20:695:575 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:20:697:396 + Q6 finished at: 2023-9-24 22:22:47:820:613 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,1) (1,2) - (1) expected_result: (0,1) (1,1) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,1) + (2) expected_result: (0,1) (1,2) - Q9 finished at: 2023-9-23 18:46:20:710:272 + Q9 finished at: 2023-9-24 22:22:47:884:341 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:20:712:275 + Q10 finished at: 2023-9-24 22:22:47:884:705 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt similarity index 70% rename from test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt index ea9abc5f..469cfc60 100644 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_double_write_skew2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_double_write_skew2 #### -#### isolation: local_serial #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_serial for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_double_write_skew2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,28 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:51:162:342 +Q1 finished at: 2023-9-24 22:22:48:794:727 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:48:796:184 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:51:167:195 +Q2 finished at: 2023-9-24 22:22:48:831:37 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:51:262:191 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:51:265:815 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:50:51:268:521 + Q3 finished at: 2023-9-24 22:22:48:894:683 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:50:51:370:609 +Q6 finished at: 2023-9-24 22:22:48:995:375 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:50:51:371:717 +Q7 finished at: 2023-9-24 22:22:48:996:500 + Q3 finished at: 2023-9-24 22:22:49:7:269 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:49:24:426 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:22:49:25:657 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:50:51:462:532 + Q8 finished at: 2023-9-24 22:22:49:97:313 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,10 +49,12 @@ Q7 finished at: 2023-9-23 18:50:51:371:717 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:50:51:465:801 + Q9 finished at: 2023-9-24 22:22:49:241:289 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:51:466:230 + Q10 finished at: 2023-9-24 22:22:49:241:616 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt new file mode 100644 index 00000000..0b60225d --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:50:382:933 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:50:384:304 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:22:50:418:958 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:50:482:530 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:22:50:543:592 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:50:558:465 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:22:50:559:748 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:22:50:685:620 +Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q6 failed at: 2023-9-24 22:22:51:193:232 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt similarity index 71% rename from test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt index c04746c6..59c0c706 100644 --- a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew2 #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_read_skew2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,20 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:36:723:163 +Q1 finished at: 2023-9-24 22:22:54:977:720 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:54:979:82 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:36:737:10 +Q2 finished at: 2023-9-24 22:22:55:14:144 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:36:823:213 + Q3 finished at: 2023-9-24 22:22:55:77:587 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:22:55:178:647 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:22:55:180:207 + Q3 finished at: 2023-9-24 22:22:55:197:139 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:39:36:834:486 + Q4 finished at: 2023-9-24 22:22:55:213:84 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +45,9 @@ Q2 finished at: 2023-9-23 18:39:36:737:10 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:39:36:845:527 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:39:36:933:771 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:36:935:959 + Q5 finished at: 2023-9-24 22:22:55:214:434 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:39:37:23:983 + Q8 finished at: 2023-9-24 22:22:55:280:160 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q7 finished at: 2023-9-23 18:39:36:935:959 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:39:37:39:95 + Q9 finished at: 2023-9-24 22:22:55:421:274 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:37:41:271 + Q10 finished at: 2023-9-24 22:22:55:421:611 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt similarity index 72% rename from test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt index 57f6764c..7c7f3716 100644 --- a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew2_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_read_skew2_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,20 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:29:687:585 +Q1 finished at: 2023-9-24 22:22:56:318:810 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:56:320:135 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:29:692:994 +Q2 finished at: 2023-9-24 22:22:56:353:698 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:29:787:378 + Q3 finished at: 2023-9-24 22:22:56:418:806 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:22:56:519:473 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:22:56:520:813 + Q3 finished at: 2023-9-24 22:22:56:534:306 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:46:29:792:476 + Q4 finished at: 2023-9-24 22:22:56:550:80 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +45,9 @@ Q2 finished at: 2023-9-23 18:46:29:692:994 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:46:29:794:652 + Q5 finished at: 2023-9-24 22:22:56:551:834 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:29:795:173 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:46:29:893:319 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:29:893:719 + Q6 finished at: 2023-9-24 22:22:56:552:918 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:46:29:893:719 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:46:29:897:118 + Q9 finished at: 2023-9-24 22:22:56:616:259 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:29:897:536 + Q10 finished at: 2023-9-24 22:22:56:616:599 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt similarity index 76% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt index 780cd7d8..f817319c 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_read_skew_predicate_based_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:0:279:351 +Q1 finished at: 2023-9-24 22:22:52:438:642 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:52:440:31 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:48:0:293:80 +Q2 finished at: 2023-9-24 22:22:52:475:428 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:0:379:189 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:0:390:618 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:0:400:756 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:0:403:287 + Q3 finished at: 2023-9-24 22:22:52:538:637 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - null - *(1) expected_result: + (1,0) (0,0) + (1) expected_result: null (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:48:0:490:101 +Q7 finished at: 2023-9-24 22:22:52:639:11 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:0:492:231 +Q8 finished at: 2023-9-24 22:22:52:639:991 + Q3 finished at: 2023-9-24 22:22:52:642:440 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:52:657:379 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:22:52:658:429 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:22:52:659:120 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: null @@ -52,9 +56,9 @@ Q8 finished at: 2023-9-23 18:48:0:492:231 *(2) expected_result: null - Q9 finished at: 2023-9-23 18:48:0:504:866 + Q9 finished at: 2023-9-24 22:22:52:723:597 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:0:506:838 + Q10 finished at: 2023-9-24 22:22:52:723:935 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt similarity index 71% rename from test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt index cb7d7c46..82f36487 100644 --- a/test_result/centralizend_result/cassandra/all/rat_dda_read_skew_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_read_skew_predicate_based_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:26:674:790 +Q1 finished at: 2023-9-24 22:22:53:698:353 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:53:699:771 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,26 +24,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:46:26:681:301 +Q2 finished at: 2023-9-24 22:22:53:745:430 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:26:774:882 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:46:26:780:770 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:46:26:782:671 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:26:783:64 + Q3 finished at: 2023-9-24 22:22:53:798:304 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - (1,0) (0,0) - (1) expected_result: + null + *(1) expected_result: null (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:46:26:880:461 +Q7 finished at: 2023-9-24 22:22:53:898:864 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:26:880:853 +Q8 finished at: 2023-9-24 22:22:53:900:114 + Q3 finished at: 2023-9-24 22:22:53:916:912 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-24 22:22:53:924:534 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-24 22:22:53:925:639 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:22:53:926:258 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) @@ -50,10 +54,12 @@ Q8 finished at: 2023-9-23 18:46:26:880:853 *(2) expected_result: (0,0) (1,0) - Q9 finished at: 2023-9-23 18:46:26:883:834 + Q9 finished at: 2023-9-24 22:22:53:990:833 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:26:884:229 + Q10 finished at: 2023-9-24 22:22:53:991:194 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..eff366a6 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt @@ -0,0 +1,55 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_read_skew #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_dda_write_read_skew test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:41:579:68 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:41:580:353 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:22:41:611:157 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:41:679:272 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q6 finished at: 2023-9-24 22:22:41:779:671 + Q3 finished at: 2023-9-24 22:22:41:782:482 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:41:796:570 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-24 22:22:41:797:948 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:22:41:881:586 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: 错误: Heartbeat: Transaction b15c03c7-9756-4679-98b5-8f46d69020a3 expired or aborted by a conflict: 40001 errcode: 40001 +Q8 failed at: 2023-9-24 22:22:42:785:210 + +Test Result: Rollback +Err:错误: Heartbeat: Transaction b15c03c7-9756-4679-98b5-8f46d69020a3 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt similarity index 73% rename from test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt index d4ad65e1..900ee0f7 100644 --- a/test_result/centralizend_result/cassandra/local_serial/rat_dda_write_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_read_skew_committed #### -#### isolation: local_serial #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_serial for each session +set TXN_ISOLATION = serializable for each session ----------rat_dda_write_read_skew_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,13 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:50:46:666:37 +Q1 finished at: 2023-9-24 22:22:43:811:440 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:43:812:847 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:50:46:670:22 +Q2 finished at: 2023-9-24 22:22:43:846:693 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:50:46:767:312 + Q3 finished at: 2023-9-24 22:22:43:911:328 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2023-9-24 22:22:44:12:72 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:22:44:13:366 + Q3 finished at: 2023-9-24 22:22:44:29:804 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:50:46:779:198 + Q4 finished at: 2023-9-24 22:22:44:44:434 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,20 +45,9 @@ Q2 finished at: 2023-9-23 18:50:46:670:22 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:50:46:786:306 + Q5 finished at: 2023-9-24 22:22:44:45:674 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:50:46:787:310 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - *(2) expected_result: - (1,1) - -Q7 finished at: 2023-9-23 18:50:46:868:318 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:50:46:868:745 + Q6 finished at: 2023-9-24 22:22:44:46:894 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:50:46:868:745 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:50:46:873:996 + Q9 finished at: 2023-9-24 22:22:44:114:767 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:50:46:874:630 + Q10 finished at: 2023-9-24 22:22:44:115:96 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt new file mode 100644 index 00000000..ccc4dc93 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt @@ -0,0 +1,64 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_rat #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:57:808:458 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:57:809:881 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:22:57:844:91 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:57:908:583 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:22:58:7:641 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:22:58:37:350 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:22:58:51:315 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + (2) expected_result: + (0,1) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + (5) expected_result: + (0,1) + *(6) expected_result: + (0,0) + + Q5 finished at: 2023-9-24 22:22:58:53:587 + Q6 finished at: 2023-9-24 22:22:58:65:958 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-24 22:22:58:79:929 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-24 22:22:58:211:283 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-9-24 22:22:58:883:482 +Q9 failed reason: 错误: Unknown transaction, could be recently aborted: 43a87a0c-78e7-4c04-8515-9f5d9bde69d6; errcode: 40001 +Q9 failed at: 2023-9-24 22:22:59:10:224 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt similarity index 70% rename from test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt index decb236e..563a3d9c 100644 --- a/test_result/centralizend_result/cassandra/quorum/rat_mda_step_rat_long_fork.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_rat_long_fork #### -#### isolation: quorum #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = quorum for each session +set TXN_ISOLATION = serializable for each session ----------rat_mda_step_rat_long_fork test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_long_fork test run---------- Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:45:6:819:179 + Q1 finished at: 2023-9-24 22:22:59:856:272 + Q1-T4 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-24 22:22:59:955:545 +Q3-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q3 finished at: 2023-9-24 22:22:59:956:627 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-24 22:22:59:975:870 + Q1 finished at: 2023-9-24 22:22:59:994:731 Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -48,13 +56,11 @@ Q0-T1 execute opt: 'COMMIT'; *(14) expected_result: (0,0) - Q2 finished at: 2023-9-23 18:45:6:829:479 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:45:6:918:948 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:45:6:929:705 + Q2 finished at: 2023-9-24 22:23:0:10:639 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:45:7:19:101 + Q5 finished at: 2023-9-24 22:23:0:54:973 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5 finished at: 2023-9-24 22:23:0:135:36 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -87,121 +93,89 @@ Q4 finished at: 2023-9-23 18:45:6:929:705 (14) expected_result: (1,1) - Q6 finished at: 2023-9-23 18:45:7:32:164 + Q6 finished at: 2023-9-24 22:23:0:150:843 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: (0,0) - (2) expected_result: + *(1) expected_result: (0,0) - *(3) expected_result: + *(2) expected_result: + (0,0) + (3) expected_result: (0,1) - *(4) expected_result: + (4) expected_result: (0,1) - *(5) expected_result: + (5) expected_result: (0,1) - (6) expected_result: + *(6) expected_result: (0,0) - *(7) expected_result: + (7) expected_result: (0,1) - *(8) expected_result: + (8) expected_result: (0,1) - *(9) expected_result: + (9) expected_result: (0,1) - (10) expected_result: + *(10) expected_result: (0,0) - (11) expected_result: + *(11) expected_result: (0,0) - (12) expected_result: + *(12) expected_result: (0,0) - *(13) expected_result: + (13) expected_result: (0,1) - (14) expected_result: + *(14) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:45:7:45:340 + Q7 finished at: 2023-9-24 22:23:0:152:635 Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:45:7:119:249 + Q8 finished at: 2023-9-24 22:23:0:154:720 + Q8-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q8 finished at: 2023-9-24 22:23:0:203:999 Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:45:7:131:845 + Q9 finished at: 2023-9-24 22:23:0:218:566 Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) - (3) expected_result: + *(3) expected_result: (1,0) - *(4) expected_result: + (4) expected_result: (1,1) - (5) expected_result: + *(5) expected_result: (1,0) - *(6) expected_result: + (6) expected_result: (1,1) - (7) expected_result: + *(7) expected_result: (1,0) - *(8) expected_result: + (8) expected_result: (1,1) - *(9) expected_result: + (9) expected_result: (1,1) - *(10) expected_result: + (10) expected_result: (1,1) - *(11) expected_result: + (11) expected_result: (1,1) - (12) expected_result: + *(12) expected_result: (1,0) - (13) expected_result: + *(13) expected_result: (1,0) - (14) expected_result: + *(14) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:45:7:228:828 + Q10 finished at: 2023-9-24 22:23:0:263:127 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:45:7:319:632 Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:45:7:418:198 Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:45:7:519:973 - Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:45:7:522:168 - Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - *(7) expected_result: - (0,1) (1,1) - *(8) expected_result: - (0,1) (1,1) - *(9) expected_result: - (0,1) (1,1) - *(10) expected_result: - (0,1) (1,1) - *(11) expected_result: - (0,1) (1,1) - *(12) expected_result: - (0,1) (1,1) - *(13) expected_result: - (0,1) (1,1) - *(14) expected_result: - (0,1) (1,1) - - Q15 finished at: 2023-9-23 18:45:7:528:137 - Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:45:7:528:534 +Q11 failed reason: 错误: Heartbeat: Transaction 803bce77-0f9f-432a-a0fa-39e2d9b7908b expired or aborted by a conflict: 40001 errcode: 40001 +Q11 failed at: 2023-9-24 22:23:1:462:200 + Q12 failed reason: 错误: Transaction bca0ff1f-ccf1-46e5-8e70-46cbec3e940c expired or aborted by a conflict: 40001 errcode: 40001 + Q12 failed at: 2023-9-24 22:23:1:661:296 + Q13 failed reason: 错误: Heartbeat: Transaction c560518f-7567-4844-8102-99dd57f20600 expired or aborted by a conflict: 40001 errcode: 40001 + Q13 failed at: 2023-9-24 22:23:1:859:956 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Err:错误: Heartbeat: Transaction 803bce77-0f9f-432a-a0fa-39e2d9b7908b expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..03d3f44e --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,64 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_rat_predicate_based_delete #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_delete test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_delete test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:2:943:73 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:2:944:520 +Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:23:2:980:136 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:3:43:191 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:23:3:142:119 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:3:157:194 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:3:172:140 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + Q6 finished at: 2023-9-24 22:23:3:192:133 + Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' + Q7 finished at: 2023-9-24 22:23:3:206:860 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (1,) + (1) expected_result: + (,) + *(2) expected_result: + (1,) + (3) expected_result: + (,) + *(4) expected_result: + (1,) + *(5) expected_result: + (1,) + *(6) expected_result: + (1,) + + Q8 finished at: 2023-9-24 22:23:3:210:647 +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-24 22:23:3:445:850 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-9-24 22:23:3:678:462 +Q9 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q9 failed at: 2023-9-24 22:23:4:148:685 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..3ab04c7c --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,61 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_rat_predicate_based_insert #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_mda_step_rat_predicate_based_insert test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_mda_step_rat_predicate_based_insert test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:5:360:653 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:5:362:141 +Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' +Q2 finished at: 2023-9-24 22:23:5:382:926 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:5:460:732 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:5:537:135 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' + Q4 finished at: 2023-9-24 22:23:5:543:384 + Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' + current_result: + (,) + *(1) expected_result: + (,) + *(2) expected_result: + (,) + *(3) expected_result: + (,) + (4) expected_result: + (1,) + (5) expected_result: + (1,) + (6) expected_result: + (1,) + + Q5 finished at: 2023-9-24 22:23:5:556:306 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:23:5:559:385 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6 finished at: 2023-9-24 22:23:5:604:337 + Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' + Q7 finished at: 2023-9-24 22:23:5:611:365 + Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' +Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-24 22:23:5:763:188 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-9-24 22:23:6:423:327 +Q9 failed reason: 错误: Unknown transaction, could be recently aborted: c576f5af-e562-4c84-b140-d5293d6e03a4; errcode: 40001 +Q9 failed at: 2023-9-24 22:23:6:576:454 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt similarity index 64% rename from test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt index dfcadfc2..95b40f5d 100644 --- a/test_result/centralizend_result/cassandra/local_quorum/rat_sda_dirty_read.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_dirty_read #### -#### isolation: local_quorum #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_quorum for each session +set TXN_ISOLATION = serializable for each session ----------rat_sda_dirty_read test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,32 +14,38 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_dirty_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:31:612:254 +Q1 finished at: 2023-9-24 22:22:30:341:841 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:30:343:337 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:31:653:208 +Q2 finished at: 2023-9-24 22:22:30:376:857 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:31:711:984 + Q3 finished at: 2023-9-24 22:22:30:441:785 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q5-T1 execute opt: 'ROLLBACK'; + Q3 finished at: 2023-9-24 22:22:30:540:828 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' +Q5 finished at: 2023-9-24 22:22:30:541:480 current_result: - (0,1) - (1) expected_result: + (0,0) + *(1) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:47:31:771:608 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:47:31:812:119 + Q4 finished at: 2023-9-24 22:22:30:555:607 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:31:912:526 + Q6 finished at: 2023-9-24 22:22:30:644:292 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: + (0,0) + *(1) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:47:31:928:875 + Q7 finished at: 2023-9-24 22:22:30:787:791 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:31:930:959 + Q8 finished at: 2023-9-24 22:22:30:788:119 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..0a5c6446 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt @@ -0,0 +1,45 @@ +#### db_type: yugabyte #### +#### test_type: sda_intermediate_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:33:384:718 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:33:386:75 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:22:33:420:618 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:33:484:746 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-24 22:22:33:585:631 + Q3 finished at: 2023-9-24 22:22:33:600:994 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-24 22:22:33:616:510 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:22:33:687:218 +Q7-T1 execute opt: 'COMMIT'; +Q7 failed reason: 错误: Transaction 43260acb-851a-4d60-b137-7c315fc795f1 expired or aborted by a conflict: 40001 errcode: 40001 +Q7 failed at: 2023-9-24 22:22:34:491:153 + +Test Result: Rollback +Err:错误: Transaction 43260acb-851a-4d60-b137-7c315fc795f1 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..682a9e5d --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,43 @@ +#### db_type: yugabyte #### +#### test_type: sda_intermediate_read_committed #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_intermediate_read_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_intermediate_read_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:35:423:183 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:35:424:597 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:22:35:457:136 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:35:522:66 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:22:35:569:139 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,2) + *(2) expected_result: + (0,0) + + Q4 finished at: 2023-9-24 22:22:35:581:156 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:22:35:582:462 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 failed reason: 错误: Unknown transaction, could be recently aborted: 0c621dcd-03fd-4163-8b9a-87e52d15b4d8; errcode: 40001 +Q6 failed at: 2023-9-24 22:22:36:225:235 + +Test Result: Rollback +Reason: Err:错误: Unknown transaction, could be recently aborted: 0c621dcd-03fd-4163-8b9a-87e52d15b4d8; + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt index c2fbf7cd..bf176502 100644 --- a/test_result/centralizend_result/cassandra/all/rat_sda_lost_self_update.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_self_update #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_sda_lost_self_update test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,26 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_lost_self_update test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:13:994:750 +Q1 finished at: 2023-9-24 22:22:39:996:757 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:39:998:156 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:14:5:391 +Q2 finished at: 2023-9-24 22:22:40:32:24 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:14:94:778 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:14:109:400 + Q3 finished at: 2023-9-24 22:22:40:96:724 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,2) - (1) expected_result: (0,1) - (2) expected_result: + *(1) expected_result: + (0,1) + *(2) expected_result: (0,1) -Q5 finished at: 2023-9-23 18:46:14:204:245 +Q5 finished at: 2023-9-24 22:22:40:198:713 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:46:14:206:386 +Q6 finished at: 2023-9-24 22:22:40:200:578 + Q3 finished at: 2023-9-24 22:22:40:224:53 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:22:40:239:182 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:14:295:315 + Q7 finished at: 2023-9-24 22:22:40:299:354 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,10 +46,12 @@ Q6 finished at: 2023-9-23 18:46:14:206:386 (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:46:14:305:148 + Q8 finished at: 2023-9-24 22:22:40:438:367 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:14:307:27 + Q9 finished at: 2023-9-24 22:22:40:438:700 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..4ab2d301 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt @@ -0,0 +1,50 @@ +#### db_type: yugabyte #### +#### test_type: sda_non_repeatable_read #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------rat_sda_non_repeatable_read test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_sda_non_repeatable_read test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:22:31:766:932 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:31:768:290 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:22:31:802:226 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:22:31:867:87 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q5 finished at: 2023-9-24 22:22:31:967:142 + Q3 finished at: 2023-9-24 22:22:31:970:904 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:22:32:169:696 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-9-24 22:22:32:385:295 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 70% rename from test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index 94127d48..43bb0639 100644 --- a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:11:164:68 +Q1 finished at: 2023-9-24 22:22:37:293:136 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:37:294:631 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -23,24 +25,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:46:11:215:911 +Q2 finished at: 2023-9-24 22:22:37:329:956 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:11:265:241 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:46:11:281:560 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:11:283:990 + Q3 finished at: 2023-9-24 22:22:37:393:121 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: + (0,0) + (1) expected_result: null - *(1) expected_result: - null - (2) expected_result: + *(2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:46:11:378:468 +Q6 finished at: 2023-9-24 22:22:37:494:149 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:11:380:845 +Q7 finished at: 2023-9-24 22:22:37:495:530 + Q3 finished at: 2023-9-24 22:22:37:510:433 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-24 22:22:37:526:241 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:22:37:527:124 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: null @@ -49,10 +53,12 @@ Q7 finished at: 2023-9-23 18:46:11:380:845 *(2) expected_result: null - Q8 finished at: 2023-9-23 18:46:11:388:309 + Q8 finished at: 2023-9-24 22:22:37:583:187 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:11:388:692 + Q9 finished at: 2023-9-24 22:22:37:583:517 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 70% rename from test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index 4005fd21..c71fb578 100644 --- a/test_result/centralizend_result/cassandra/all/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:12:588:253 +Q1 finished at: 2023-9-24 22:22:38:513:865 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:22:38:515:309 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,24 +24,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:46:12:604:672 +Q2 finished at: 2023-9-24 22:22:38:560:956 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:12:688:246 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:46:12:702:687 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:46:12:704:925 + Q3 finished at: 2023-9-24 22:22:38:613:694 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - (0,0) - (1) expected_result: null - *(2) expected_result: + *(1) expected_result: + null + (2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:46:12:794:532 +Q6 finished at: 2023-9-24 22:22:38:714:473 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:12:795:0 +Q7 finished at: 2023-9-24 22:22:38:715:697 + Q3 finished at: 2023-9-24 22:22:38:730:206 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-24 22:22:38:737:748 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:22:38:738:723 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,0) @@ -48,10 +52,12 @@ Q7 finished at: 2023-9-23 18:46:12:795:0 *(2) expected_result: (0,0) - Q8 finished at: 2023-9-23 18:46:12:797:554 + Q8 finished at: 2023-9-24 22:22:38:799:93 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:12:797:972 + Q9 finished at: 2023-9-24 22:22:38:799:417 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt similarity index 71% rename from test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt index 44ce9304..7543d308 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_double_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_double_write_skew2_committed #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_double_write_skew2_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,28 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_double_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:24:534:182 +Q1 finished at: 2023-9-24 22:23:18:848:855 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:18:850:199 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:24:544:753 +Q2 finished at: 2023-9-24 22:23:18:884:205 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:24:634:145 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:24:645:427 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:24:655:401 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:24:657:438 + Q3 finished at: 2023-9-24 22:23:18:948:974 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q7 finished at: 2023-9-23 18:48:24:741:591 +Q7 finished at: 2023-9-24 22:23:19:50:427 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:24:743:703 +Q8 finished at: 2023-9-24 22:23:19:52:66 + Q3 finished at: 2023-9-24 22:23:19:74:278 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:19:88:925 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:23:19:90:30 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:23:19:90:833 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,10 +49,12 @@ Q8 finished at: 2023-9-23 18:48:24:743:703 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:24:755:805 + Q9 finished at: 2023-9-24 22:23:19:154:892 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:24:757:763 + Q10 finished at: 2023-9-24 22:23:19:155:226 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt similarity index 69% rename from test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt index 3f21792f..1adf74d9 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_dda_full_write_skew_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_full_write_skew_c1 #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_full_write_skew_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,33 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:26:19:192 +Q1 finished at: 2023-9-24 22:23:20:158:820 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:20:160:209 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:26:25:78 +Q2 finished at: 2023-9-24 22:23:20:193:925 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:26:119:402 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:26:125:941 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:26:128:438 + Q3 finished at: 2023-9-24 22:23:20:258:709 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:26:228:992 +Q6 finished at: 2023-9-24 22:23:20:358:806 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:26:230:882 +Q7 finished at: 2023-9-24 22:23:20:359:838 + Q3 finished at: 2023-9-24 22:23:20:367:857 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:20:382:443 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:23:20:384:35 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:26:317:919 + Q8 finished at: 2023-9-24 22:23:20:459:106 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,1) + (0,2) (1,2) (1) expected_result: (0,1) (1,1) - (2) expected_result: + *(2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:48:26:320:937 + Q9 finished at: 2023-9-24 22:23:20:565:154 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:26:321:281 + Q10 finished at: 2023-9-24 22:23:20:565:481 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt index 23c637f8..b7c7a9cd 100644 --- a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_full_write_skew_c2 #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_full_write_skew_c2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,33 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:52:444:723 +Q1 finished at: 2023-9-24 22:23:21:493:636 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:21:495:34 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:52:455:344 +Q2 finished at: 2023-9-24 22:23:21:529:951 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:52:544:772 + Q3 finished at: 2023-9-24 22:23:21:593:414 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:21:687:194 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:52:556:777 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:52:562:857 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:52:653:468 +Q6 finished at: 2023-9-24 22:23:21:693:489 + Q4 finished at: 2023-9-24 22:23:21:701:64 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:23:21:702:441 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:46:52:745:428 + Q7 finished at: 2023-9-24 22:23:21:796:49 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:52:843:690 +Q8 finished at: 2023-9-24 22:23:21:896:88 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,1) - (1) expected_result: + (0,1) (1,1) + *(1) expected_result: (0,1) (1,1) (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:46:52:847:957 + Q9 finished at: 2023-9-24 22:23:22:39:316 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:52:848:424 + Q10 finished at: 2023-9-24 22:23:22:39:652 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt index cbe11bba..4bcfba95 100644 --- a/test_result/centralizend_result/cassandra/all/wat_dda_full_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_full_write_skew_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_full_write_skew_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,33 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:54:123:591 +Q1 finished at: 2023-9-24 22:23:22:977:666 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:22:979:86 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:54:129:785 +Q2 finished at: 2023-9-24 22:23:23:13:926 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:54:223:684 + Q3 finished at: 2023-9-24 22:23:23:77:662 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:23:23:177:820 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:23:178:826 + Q3 finished at: 2023-9-24 22:23:23:191:42 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:46:54:229:506 + Q4 finished at: 2023-9-24 22:23:23:205:803 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:54:232:40 + Q5 finished at: 2023-9-24 22:23:23:207:28 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:54:232:447 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:46:54:328:926 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:46:54:329:287 + Q6 finished at: 2023-9-24 22:23:23:207:766 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,1) + (0,2) (1,2) (1) expected_result: (0,1) (1,1) - (2) expected_result: + *(2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:46:54:332:39 + Q9 finished at: 2023-9-24 22:23:23:272:761 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:54:332:407 + Q10 finished at: 2023-9-24 22:23:23:273:87 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt similarity index 69% rename from test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt index d9305e3b..579200e8 100644 --- a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew1_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew1_c1 #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_read_write_skew1_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:3:212:59 +Q1 finished at: 2023-9-24 22:23:24:489:840 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:24:491:184 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,31 +26,35 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:40:3:223:156 +Q2 finished at: 2023-9-24 22:23:24:525:362 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:3:311:920 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:40:3:326:329 - Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:3:337:876 + Q3 finished at: 2023-9-24 22:23:24:589:905 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:3:422:87 +Q6 finished at: 2023-9-24 22:23:24:689:843 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:40:3:424:62 +Q7 finished at: 2023-9-24 22:23:24:690:828 + Q3 finished at: 2023-9-24 22:23:24:693:997 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:24:708:441 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:23:24:709:584 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:40:3:512:724 + Q8 finished at: 2023-9-24 22:23:24:792:436 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,1) (1,1) - (1) expected_result: (0,1) (1,2) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,2) + (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:40:3:526:951 + Q9 finished at: 2023-9-24 22:23:24:929:280 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:3:528:722 + Q10 finished at: 2023-9-24 22:23:24:929:616 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..8db93d20 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:26:91:266 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:26:92:650 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:23:26:126:498 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:26:191:216 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:23:26:292:866 + Q3 finished at: 2023-9-24 22:23:26:315:415 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:26:329:246 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:26:493:920 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-9-24 22:23:26:832:19 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt index 39f8ddc5..ef267f74 100644 --- a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew2_c1 #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_read_write_skew2_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,28 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:58:932:124 +Q1 finished at: 2023-9-24 22:23:27:813:699 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:27:815:57 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:58:937:580 +Q2 finished at: 2023-9-24 22:23:27:848:846 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:59:32:98 + Q3 finished at: 2023-9-24 22:23:27:913:666 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:23:28:13:845 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:23:28:15:52 + Q3 finished at: 2023-9-24 22:23:28:28:67 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:46:59:37:148 + Q4 finished at: 2023-9-24 22:23:28:42:341 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:46:59:39:491 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:46:59:136:947 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:59:137:299 + Q5 finished at: 2023-9-24 22:23:28:43:629 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:46:59:232:540 + Q8 finished at: 2023-9-24 22:23:28:114:227 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,10 +49,12 @@ Q7 finished at: 2023-9-23 18:46:59:137:299 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:46:59:243:512 + Q9 finished at: 2023-9-24 22:23:28:258:307 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:46:59:243:881 + Q10 finished at: 2023-9-24 22:23:28:258:659 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..415521d3 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,37 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew2_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_dda_read_write_skew2_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:29:382:680 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:29:384:92 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:23:29:418:435 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:29:482:684 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:23:29:582:953 + Q3 finished at: 2023-9-24 22:23:29:598:4 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:29:783:272 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-9-24 22:23:30:13:466 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt index f14471f4..65e867bf 100644 --- a/test_result/centralizend_result/cassandra/all/wat_dda_read_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew2_committed #### -#### isolation: all #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = serializable for each session ----------wat_dda_read_write_skew2_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,28 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:2:166:580 +Q1 finished at: 2023-9-24 22:23:30:911:949 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:30:913:347 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:2:176:995 +Q2 finished at: 2023-9-24 22:23:30:947:732 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:2:266:801 + Q3 finished at: 2023-9-24 22:23:31:11:828 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:23:31:112:762 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:23:31:114:324 + Q3 finished at: 2023-9-24 22:23:31:129:937 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:47:2:278:306 + Q4 finished at: 2023-9-24 22:23:31:145:645 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:2:287:884 + Q5 finished at: 2023-9-24 22:23:31:147:274 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:2:290:193 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:47:2:375:98 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:2:377:19 + Q6 finished at: 2023-9-24 22:23:31:148:228 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,10 +49,12 @@ Q8 finished at: 2023-9-23 18:47:2:377:19 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:47:2:388:782 + Q9 finished at: 2023-9-24 22:23:31:214:820 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:2:390:935 + Q10 finished at: 2023-9-24 22:23:31:215:153 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt similarity index 76% rename from test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt index fb21b6fa..5bae09a3 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_wat_c1 #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------wat_mda_step_wat_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,33 +16,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:38:857:72 +Q1 finished at: 2023-9-24 22:23:32:362:552 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:32:363:904 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:38:866:988 +Q2 finished at: 2023-9-24 22:23:32:397:943 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:38:957:32 + Q3 finished at: 2023-9-24 22:23:32:462:519 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:23:32:561:598 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:32:584:473 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:38:968:144 + Q4 finished at: 2023-9-24 22:23:32:598:299 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:38:977:957 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:48:39:57:217 + Q5 finished at: 2023-9-24 22:23:32:599:938 + Q6 finished at: 2023-9-24 22:23:32:611:647 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:48:39:68:387 + Q7 finished at: 2023-9-24 22:23:32:625:54 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:48:39:77:864 + Q8 finished at: 2023-9-24 22:23:32:626:163 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:48:39:165:869 +Q9 finished at: 2023-9-24 22:23:32:663:291 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:39:167:739 +Q10 finished at: 2023-9-24 22:23:32:664:310 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:39:257:647 + Q11 finished at: 2023-9-24 22:23:32:765:141 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:39:357:797 + Q12 finished at: 2023-9-24 22:23:32:865:158 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,3) (2,1) - (1) expected_result: + (0,2) (1,3) (2,3) + *(1) expected_result: (0,2) (1,3) (2,3) (2) expected_result: (0,2) (1,2) (2,3) @@ -55,10 +61,12 @@ Q10 finished at: 2023-9-23 18:48:39:167:739 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-23 18:48:39:370:675 + Q13 finished at: 2023-9-24 22:23:33:1:763 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:39:372:635 + Q14 finished at: 2023-9-24 22:23:33:2:109 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt similarity index 75% rename from test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt index c232398b..f75b8bb4 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_mda_step_wat_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_wat_c2 #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------wat_mda_step_wat_c2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,37 +16,43 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:40:664:661 +Q1 finished at: 2023-9-24 22:23:33:875:236 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:33:876:679 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:40:676:124 +Q2 finished at: 2023-9-24 22:23:33:910:976 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:40:764:736 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:40:778:993 + Q3 finished at: 2023-9-24 22:23:33:975:266 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:48:40:864:821 + Q5 finished at: 2023-9-24 22:23:34:74:240 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:34:90:197 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:23:34:105:226 + Q5 finished at: 2023-9-24 22:23:34:123:676 Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-23 18:48:40:975:451 + Q6 finished at: 2023-9-24 22:23:34:180:29 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-23 18:48:41:74:680 + Q7 finished at: 2023-9-24 22:23:34:329:886 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-23 18:48:41:84:495 + Q8 finished at: 2023-9-24 22:23:34:335:655 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-23 18:48:41:169:996 +Q9 finished at: 2023-9-24 22:23:34:380:183 Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:41:265:960 + Q10 finished at: 2023-9-24 22:23:34:477:926 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:48:41:365:507 +Q11 finished at: 2023-9-24 22:23:34:578:185 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:41:465:979 + Q12 finished at: 2023-9-24 22:23:34:678:378 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,3) (2,1) + (0,1) (1,3) (2,3) (1) expected_result: (0,2) (1,3) (2,3) (2) expected_result: (0,2) (1,2) (2,3) - (3) expected_result: + *(3) expected_result: (0,1) (1,3) (2,3) (4) expected_result: (0,1) (1,3) (2,1) @@ -55,10 +61,12 @@ Q11 finished at: 2023-9-23 18:48:41:365:507 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-23 18:48:41:478:221 + Q13 finished at: 2023-9-24 22:23:34:821:750 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:41:480:19 + Q14 finished at: 2023-9-24 22:23:34:822:83 + +The current result is consistent with the [(3) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt similarity index 76% rename from test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt index 1f1fa84c..2b11959f 100644 --- a/test_result/centralizend_result/cassandra/any/wat_sda_dirty_write_1abort.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_dirty_write_1abort #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_dirty_write_1abort test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,17 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_1abort test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:46:798:213 +Q1 finished at: 2023-9-24 22:23:7:685:831 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:7:687:293 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:46:810:756 +Q2 finished at: 2023-9-24 22:23:7:721:387 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:46:898:358 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:46:912:178 + Q3 finished at: 2023-9-24 22:23:7:785:627 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:39:46:998:602 +Q5 finished at: 2023-9-24 22:23:7:887:283 + Q3 finished at: 2023-9-24 22:23:7:917:579 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:7:932:260 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:47:99:72 + Q6 finished at: 2023-9-24 22:23:7:988:219 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -33,11 +37,11 @@ Q5 finished at: 2023-9-23 18:39:46:998:602 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-23 18:39:47:110:535 + Q7 finished at: 2023-9-24 22:23:8:120:656 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:39:47:568:876 + Q8 finished at: 2023-9-24 22:23:8:288:810 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:47:571:184 + Q9 finished at: 2023-9-24 22:23:8:290:501 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt similarity index 76% rename from test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt index a8a10227..c738ced6 100644 --- a/test_result/centralizend_result/cassandra/local_serial/wat_sda_dirty_write_2commit.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_dirty_write_2commit #### -#### isolation: local_serial #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_serial for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_dirty_write_2commit test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,17 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_2commit test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:51:9:297:954 +Q1 finished at: 2023-9-24 22:23:9:275:7 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:9:276:443 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:51:9:308:839 +Q2 finished at: 2023-9-24 22:23:9:304:947 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:51:9:396:480 + Q3 finished at: 2023-9-24 22:23:9:374:959 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:9:376:501 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:51:9:399:344 + Q4 finished at: 2023-9-24 22:23:9:434:504 Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:51:9:498:583 +Q5 finished at: 2023-9-24 22:23:9:477:152 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:51:9:598:807 + Q6 finished at: 2023-9-24 22:23:9:577:472 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -33,11 +37,11 @@ Q5 finished at: 2023-9-23 18:51:9:498:583 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-23 18:51:9:607:124 + Q7 finished at: 2023-9-24 22:23:9:613:734 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:51:10:146:565 + Q8 finished at: 2023-9-24 22:23:9:955:787 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:51:10:148:334 + Q9 finished at: 2023-9-24 22:23:9:957:509 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt similarity index 69% rename from test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt index eeec5b5f..7259ccbb 100644 --- a/test_result/centralizend_result/cassandra/any/wat_sda_full_write.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_full_write #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_full_write test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,32 +14,36 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:49:913:636 +Q1 finished at: 2023-9-24 22:23:10:951:873 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:10:953:285 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:49:925:560 +Q2 finished at: 2023-9-24 22:23:10:987:176 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:50:12:95 + Q3 finished at: 2023-9-24 22:23:11:51:808 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:11:53:324 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:50:15:346 + Q4 finished at: 2023-9-24 22:23:11:106:342 Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-23 18:39:50:124:214 +Q5 finished at: 2023-9-24 22:23:11:156:348 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:39:50:126:407 +Q6 finished at: 2023-9-24 22:23:11:160:10 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:50:214:277 + Q7 finished at: 2023-9-24 22:23:11:254:223 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,3) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,3) - Q8 finished at: 2023-9-23 18:39:50:223:733 + Q8 finished at: 2023-9-24 22:23:11:288:280 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:50:225:497 + Q9 finished at: 2023-9-24 22:23:11:290:143 -The current result is consistent with the [(2) expected_result] of serial scheduling +The current result is consistent with the [(1) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt index 059cba7c..e43af7ba 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_full_write_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_full_write_committed #### -#### isolation: local_one #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_full_write_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,32 +14,36 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:18:356:594 +Q1 finished at: 2023-9-24 22:23:12:534:830 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:12:536:214 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:18:367:525 +Q2 finished at: 2023-9-24 22:23:12:573:39 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:18:456:471 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:18:469:546 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:48:18:472:33 + Q3 finished at: 2023-9-24 22:23:12:635:8 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-23 18:48:18:565:556 +Q6 finished at: 2023-9-24 22:23:12:736:348 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:18:567:458 +Q7 finished at: 2023-9-24 22:23:12:737:998 + Q3 finished at: 2023-9-24 22:23:12:755:534 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:12:771:477 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:23:12:772:219 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,3) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,3) - Q8 finished at: 2023-9-23 18:48:18:575:296 + Q8 finished at: 2023-9-24 22:23:12:827:326 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:18:577:16 + Q9 finished at: 2023-9-24 22:23:12:827:650 -The current result is consistent with the [(2) expected_result] of serial scheduling +The current result is consistent with the [(1) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt index e8de2c54..0bc6a90f 100644 --- a/test_result/centralizend_result/cassandra/any/wat_sda_lost_self_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_self_update_committed #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_lost_self_update_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,26 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_self_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:55:921:550 +Q1 finished at: 2023-9-24 22:23:17:291:119 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:17:292:534 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:55:935:837 +Q2 finished at: 2023-9-24 22:23:17:327:14 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:56:19:516 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:56:23:469 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:39:56:23:930 + Q3 finished at: 2023-9-24 22:23:17:391:225 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,2) - (1) expected_result: (0,1) - (2) expected_result: + *(1) expected_result: + (0,1) + *(2) expected_result: (0,1) -Q6 finished at: 2023-9-23 18:39:56:130:844 +Q6 finished at: 2023-9-24 22:23:17:492:604 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:56:133:88 +Q7 finished at: 2023-9-24 22:23:17:494:211 + Q3 finished at: 2023-9-24 22:23:17:512:597 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:17:528:264 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:23:17:529:66 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,10 +46,12 @@ Q7 finished at: 2023-9-23 18:39:56:133:88 (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:39:56:142:720 + Q8 finished at: 2023-9-24 22:23:17:584:375 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:56:144:627 + Q9 finished at: 2023-9-24 22:23:17:584:715 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt similarity index 67% rename from test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt rename to test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt index f9c8ad7e..be223f89 100644 --- a/test_result/centralizend_result/cassandra/any/wat_sda_lost_update_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_update_c1 #### -#### isolation: any #### +#### isolation: serializable #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = serializable for each session ----------wat_sda_lost_update_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:52:838:913 +Q1 finished at: 2023-9-24 22:23:14:11:114 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:14:12:507 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,29 +25,33 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:39:52:849:427 +Q2 finished at: 2023-9-24 22:23:14:47:335 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:52:937:388 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:39:52:941:528 + Q3 finished at: 2023-9-24 22:23:14:111:128 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:39:53:43:623 +Q5 finished at: 2023-9-24 22:23:14:211:461 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:39:53:44:785 +Q6 finished at: 2023-9-24 22:23:14:212:391 + Q3 finished at: 2023-9-24 22:23:14:220:969 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:14:236:198 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:53:137:340 + Q7 finished at: 2023-9-24 22:23:14:313:682 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:39:53:139:772 + Q8 finished at: 2023-9-24 22:23:14:443:98 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:39:53:140:166 + Q9 finished at: 2023-9-24 22:23:14:443:427 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..4d4b15a3 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt @@ -0,0 +1,43 @@ +#### db_type: yugabyte #### +#### test_type: sda_lost_update_c2 #### +#### isolation: serializable #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = serializable for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:23:15:393:950 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-9-24 22:23:15:395:332 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-24 22:23:15:430:74 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:23:15:492:704 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-9-24 22:23:15:543:74 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:23:15:557:445 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:23:15:696:516 +Q5 failed reason: 错误: Unknown transaction, could be recently aborted: 7579b26a-ce8d-45fb-a64e-1806e8bb3374; errcode: 40001 +Q5 failed at: 2023-9-24 22:23:16:96:538 + +Test Result: Rollback +Reason: Err:错误: Unknown transaction, could be recently aborted: 7579b26a-ce8d-45fb-a64e-1806e8bb3374; + diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..8f72cd17 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:9:331:851 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:9:332:146 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:25:9:340:749 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:25:9:431:895 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:9:483:117 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:25:9:496:441 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:25:9:497:584 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:25:9:498:259 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565509532884 } local_limit: { physical: 1695565509532884 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q7 failed at: 2023-9-24 22:25:10:235:636 + +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565509532884 } local_limit: { physical: 1695565509532884 } global_limit: in_txn_limit: serial_no: 0 }; + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt similarity index 70% rename from test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt index a33c6178..2e316091 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_read_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew1_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_dda_read_write_skew1_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:47:257:215 +Q1 finished at: 2023-9-24 22:25:11:168:283 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:11:169:515 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,31 +26,35 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:48:47:266:46 +Q2 finished at: 2023-9-24 22:25:11:198:130 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:47:357:214 + Q3 finished at: 2023-9-24 22:25:11:268:149 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:25:11:374:432 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:25:11:377:586 + Q3 finished at: 2023-9-24 22:25:11:413:510 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:48:47:368:115 + Q4 finished at: 2023-9-24 22:25:11:428:150 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:47:378:502 + Q5 finished at: 2023-9-24 22:25:11:429:303 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:47:380:761 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:48:47:465:496 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:47:467:588 + Q6 finished at: 2023-9-24 22:25:11:429:985 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,1) (1,1) - (1) expected_result: (0,1) (1,2) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,2) + (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:47:480:355 + Q9 finished at: 2023-9-24 22:25:11:495:170 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:47:482:659 + Q10 finished at: 2023-9-24 22:25:11:495:523 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt similarity index 80% rename from test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt index 5c8e415f..14f4272a 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_skew #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_dda_write_skew test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:48:757:682 +Q1 finished at: 2023-9-24 22:25:12:331:323 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:12:332:603 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,9 +26,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:48:48:766:765 +Q2 finished at: 2023-9-24 22:25:12:362:735 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:48:857:446 + Q3 finished at: 2023-9-24 22:25:12:429:989 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:12:490:381 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -35,15 +39,15 @@ Q2 finished at: 2023-9-23 18:48:48:766:765 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:48:48:867:725 + Q4 finished at: 2023-9-24 22:25:12:506:221 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:48:879:256 + Q5 finished at: 2023-9-24 22:25:12:508:356 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:48:965:971 +Q6 finished at: 2023-9-24 22:25:12:532:709 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:48:968:238 +Q7 finished at: 2023-9-24 22:25:12:533:848 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:49:58:362 + Q8 finished at: 2023-9-24 22:25:12:633:443 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +56,9 @@ Q7 finished at: 2023-9-23 18:48:48:968:238 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:49:70:915 + Q9 finished at: 2023-9-24 22:25:12:754:100 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:49:72:684 + Q8 finished at: 2023-9-24 22:25:12:754:451 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt similarity index 71% rename from test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt index 4be82718..0bcbbdf3 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_dda_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_skew_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_dda_write_skew_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:52:660:667 +Q1 finished at: 2023-9-24 22:25:16:88:645 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:16:89:920 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:48:52:669:687 +Q2 finished at: 2023-9-24 22:25:16:119:900 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:52:760:739 + Q3 finished at: 2023-9-24 22:25:16:188:683 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:25:16:296:673 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:25:16:299:770 + Q3 finished at: 2023-9-24 22:25:16:333:199 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:48:52:771:500 + Q4 finished at: 2023-9-24 22:25:16:345:857 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:48:52:783:490 + Q5 finished at: 2023-9-24 22:25:16:347:605 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:52:785:950 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:48:52:869:349 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:52:871:235 + Q6 finished at: 2023-9-24 22:25:16:348:359 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:48:52:871:235 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:52:886:929 + Q9 finished at: 2023-9-24 22:25:16:407:829 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:52:889:91 + Q10 finished at: 2023-9-24 22:25:16:408:167 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..307c1ebb --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,78 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_skew_predicate_based-intersecting_data #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew_predicate_based-intersecting_data test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS mytab;' +Q0-T1 execute sql: 'CREATE TABLE mytab(class int NOT NULL, value int NOT NULL);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 10);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 20);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 100);' +Q0-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 200);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:13:615:261 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:13:616:177 +Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (30,) + *(1) expected_result: + (30,) + (2) expected_result: + (330,) + +Q2 finished at: 2023-9-24 22:25:13:642:799 +Q3-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 30);' +Q3 finished at: 2023-9-24 22:25:13:649:239 + Q4-T2 execute opt: 'BEGIN;' + Q4 finished at: 2023-9-24 22:25:13:715:35 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:25:13:816:100 + Q4 finished at: 2023-9-24 22:25:13:840:541 + Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + (2) expected_result: + (300,) + + Q5 finished at: 2023-9-24 22:25:13:856:10 + Q6-T2 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 300);' + Q6 finished at: 2023-9-24 22:25:13:857:928 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:25:13:858:603 + Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q9 finished at: 2023-9-24 22:25:13:917:948 + Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' + current_result: + (330,) + *(1) expected_result: + (330,) + *(2) expected_result: + (330,) + + Q10 finished at: 2023-9-24 22:25:13:919:8 + Q12-T3 execute opt: 'COMMIT'; + Q12 finished at: 2023-9-24 22:25:13:919:317 + +The current result is consistent with the [(1) expected_result] of serial scheduling + +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent + diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..1f11d544 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,16 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_skew_predicate_based-overdraft_protection #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' +Q0 failed reason: 错误: must be owner of table account; errcode: 42501 +Q0 failed at: 2023-9-24 22:25:14:123:219 + +Test Result: Rollback +Reason: Err:错误: must be owner of table account; + diff --git a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt similarity index 86% rename from test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt index 24c4c263..2f1a0ec6 100644 --- a/test_result/centralizend_result/cassandra/all/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat #### -#### isolation: all #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:18:557:981 +Q1 finished at: 2023-9-24 22:25:17:451:525 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:17:452:780 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:47:18:562:586 +Q2 finished at: 2023-9-24 22:25:17:482:532 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:18:658:11 + Q3 finished at: 2023-9-24 22:25:17:551:473 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:25:17:650:960 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:17:680:838 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,8 @@ Q2 finished at: 2023-9-23 18:47:18:562:586 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:47:18:663:138 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:47:18:758:284 + Q4 finished at: 2023-9-24 22:25:17:692:265 + Q5 finished at: 2023-9-24 22:25:17:705:328 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,19 +77,19 @@ Q2 finished at: 2023-9-23 18:47:18:562:586 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:47:18:763:847 + Q6 finished at: 2023-9-24 22:25:17:718:869 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:47:18:866:567 +Q7 finished at: 2023-9-24 22:25:17:758:603 Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:47:18:966:996 + Q8 finished at: 2023-9-24 22:25:17:859:87 Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:47:19:66:975 + Q9 finished at: 2023-9-24 22:25:17:959:367 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:47:19:158:843 +Q10 finished at: 2023-9-24 22:25:18:54:381 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:47:19:259:187 + Q11 finished at: 2023-9-24 22:25:18:154:663 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:47:19:359:388 + Q12 finished at: 2023-9-24 22:25:18:254:591 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -100,9 +106,9 @@ Q10 finished at: 2023-9-23 18:47:19:158:843 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:47:19:367:47 + Q13 finished at: 2023-9-24 22:25:18:422:322 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:47:19:367:416 + Q14 finished at: 2023-9-24 22:25:18:422:676 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt similarity index 52% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt index db82a23f..55a2a118 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_causality_violation_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_causality_violation_anomaly #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat_causality_violation_anomaly test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_causality_violation_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:3:810:149 +Q1 finished at: 2023-9-24 22:25:29:224:381 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:29:225:638 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -32,15 +34,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (6) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:49:3:819:36 +Q2 finished at: 2023-9-24 22:25:29:254:771 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:3:910:262 + Q3 finished at: 2023-9-24 22:25:29:324:546 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:25:29:423:688 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:29:446:432 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:49:3:920:932 + Q4 finished at: 2023-9-24 22:25:29:459:804 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:49:3:923:433 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:49:4:10:421 + Q5 finished at: 2023-9-24 22:25:29:460:549 + Q6 finished at: 2023-9-24 22:25:29:472:564 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -57,50 +63,15 @@ Q2 finished at: 2023-9-23 18:49:3:819:36 (6) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:49:4:20:929 + Q7 finished at: 2023-9-24 22:25:29:485:102 Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:49:4:32:89 + Q8 finished at: 2023-9-24 22:25:29:486:983 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:49:4:34:758 + Q9 finished at: 2023-9-24 22:25:29:487:787 Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-23 18:49:4:111:443 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:49:4:112:4 - Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - *(3) expected_result: - (0,1) (1,1) - *(4) expected_result: - (0,1) (1,1) - *(5) expected_result: - (0,1) (1,1) - *(6) expected_result: - (0,1) (1,1) - - Q12 finished at: 2023-9-23 18:49:4:116:24 - Q13-T4 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:49:4:116:576 +Q10 failed reason: 错误: Restart read required at: { read: { physical: 1695565529524232 } local_limit: { physical: 1695565529524232 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q10 failed at: 2023-9-24 22:25:30:527:431 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565529524232 } local_limit: { physical: 1695565529524232 } global_limit: in_txn_limit: serial_no: 0 }; diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..44ebe569 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,116 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_iat_cross_phenomenon #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------iat_mda_step_iat_cross_phenomenon test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_mda_step_iat_cross_phenomenon test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:26:138:164 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:26:139:365 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + *(3) expected_result: + (0,0) + *(4) expected_result: + (0,0) + *(5) expected_result: + (0,0) + (6) expected_result: + (0,1) + (7) expected_result: + (0,1) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + *(11) expected_result: + (0,0) + (12) expected_result: + (0,1) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:25:26:171:187 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:25:26:238:1 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:25:26:337:869 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:26:380:765 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + *(3) expected_result: + (1,0) + (4) expected_result: + (1,1) + *(5) expected_result: + (1,0) + *(6) expected_result: + (1,0) + *(7) expected_result: + (1,0) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + (13) expected_result: + (1,1) + *(14) expected_result: + (1,0) + + Q4 finished at: 2023-9-24 22:25:26:393:570 + Q5 finished at: 2023-9-24 22:25:26:401:529 + Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6 finished at: 2023-9-24 22:25:26:415:662 + Q7-T3 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:25:26:416:389 + Q8-T4 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-24 22:25:26:436:940 + Q8-T4 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2023-9-24 22:25:26:515:765 + Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q9 finished at: 2023-9-24 22:25:26:528:286 + Q10-T4 execute opt: 'COMMIT'; + Q10 finished at: 2023-9-24 22:25:26:529:46 + Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q11 failed reason: 错误: Restart read required at: { read: { physical: 1695565526537624 } local_limit: { physical: 1695565526537624 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 + Q11 failed at: 2023-9-24 22:25:27:639:937 +Q13 failed reason: 错误: Restart read required at: { read: { physical: 1695565526641121 } local_limit: { physical: 1695565526641121 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q13 failed at: 2023-9-24 22:25:27:946:749 + +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565526537624 } local_limit: { physical: 1695565526537624 } global_limit: in_txn_limit: serial_no: 0 }; + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt similarity index 86% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt index 43079284..330a2415 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_predicate_based_delete #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat_predicate_based_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:56:207:512 +Q1 finished at: 2023-9-24 22:25:19:456:801 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:19:458:43 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: null -Q2 finished at: 2023-9-23 18:48:56:210:952 +Q2 finished at: 2023-9-24 22:25:19:488:992 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:56:308:856 + Q3 finished at: 2023-9-24 22:25:19:556:733 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:25:19:656:192 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:19:691:313 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,8 @@ Q2 finished at: 2023-9-23 18:48:56:210:952 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:48:56:325:847 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:48:56:409:23 + Q4 finished at: 2023-9-24 22:25:19:703:199 + Q5 finished at: 2023-9-24 22:25:19:710:415 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,19 +77,19 @@ Q2 finished at: 2023-9-23 18:48:56:210:952 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:48:56:419:288 + Q6 finished at: 2023-9-24 22:25:19:721:671 Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:48:56:516:919 +Q7 finished at: 2023-9-24 22:25:19:758:23 Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:48:56:616:903 + Q8 finished at: 2023-9-24 22:25:19:864:124 Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:48:56:717:455 + Q9 finished at: 2023-9-24 22:25:19:964:351 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:56:809:573 +Q10 finished at: 2023-9-24 22:25:20:59:496 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:56:909:848 + Q11 finished at: 2023-9-24 22:25:20:159:340 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:57:10:220 + Q12 finished at: 2023-9-24 22:25:20:259:514 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -100,9 +106,9 @@ Q10 finished at: 2023-9-23 18:48:56:809:573 *(6) expected_result: null - Q13 finished at: 2023-9-23 18:48:57:18:553 + Q13 finished at: 2023-9-24 22:25:20:393:124 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:57:20:359 + Q14 finished at: 2023-9-24 22:25:20:393:483 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt similarity index 86% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt index 0776a689..a1ef1954 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_predicate_based_insert #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat_predicate_based_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:58:343:916 +Q1 finished at: 2023-9-24 22:25:21:264:334 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:21:264:952 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: null @@ -30,9 +32,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-23 18:48:58:353:989 +Q2 finished at: 2023-9-24 22:25:21:279:707 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:58:443:762 + Q3 finished at: 2023-9-24 22:25:21:365:627 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:25:21:464:628 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:21:500:716 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: null @@ -49,9 +56,8 @@ Q2 finished at: 2023-9-23 18:48:58:353:989 *(6) expected_result: null - Q4 finished at: 2023-9-23 18:48:58:453:542 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:48:58:543:984 + Q4 finished at: 2023-9-24 22:25:21:512:846 + Q5 finished at: 2023-9-24 22:25:21:528:200 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: null @@ -68,19 +74,19 @@ Q2 finished at: 2023-9-23 18:48:58:353:989 *(6) expected_result: null - Q6 finished at: 2023-9-23 18:48:58:553:789 + Q6 finished at: 2023-9-24 22:25:21:542:130 Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-23 18:48:58:650:971 +Q7 finished at: 2023-9-24 22:25:21:566:511 Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-23 18:48:58:750:964 + Q8 finished at: 2023-9-24 22:25:21:673:468 Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-23 18:48:58:851:533 + Q9 finished at: 2023-9-24 22:25:21:773:555 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:58:942:801 +Q10 finished at: 2023-9-24 22:25:21:868:175 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:59:44:731 + Q11 finished at: 2023-9-24 22:25:21:968:744 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:59:144:891 + Q12 finished at: 2023-9-24 22:25:22:68:304 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) (2,0) @@ -97,9 +103,9 @@ Q10 finished at: 2023-9-23 18:48:58:942:801 (6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:48:59:157:355 + Q13 finished at: 2023-9-24 22:25:22:221:583 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:59:159:199 + Q14 finished at: 2023-9-24 22:25:22:221:944 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt similarity index 86% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt index ddd1fb81..2e975ca2 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_read_only_transaction_anomaly #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat_read_only_transaction_anomaly test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:5:405:227 +Q1 finished at: 2023-9-24 22:25:31:622:381 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:31:623:652 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -32,7 +34,7 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(6) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:49:5:414:391 +Q2 finished at: 2023-9-24 22:25:31:653:554 Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -49,9 +51,14 @@ Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,20) -Q3 finished at: 2023-9-23 18:49:5:425:776 +Q3 finished at: 2023-9-24 22:25:31:659:355 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-23 18:49:5:505:14 + Q4 finished at: 2023-9-24 22:25:31:722:408 + Q4-T2 execute sql: 'BEGIN TRANSACTION;' + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-24 22:25:31:822:317 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q4 finished at: 2023-9-24 22:25:31:865:430 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -68,13 +75,12 @@ Q3 finished at: 2023-9-23 18:49:5:425:776 *(6) expected_result: (1,0) - Q5 finished at: 2023-9-23 18:49:5:515:38 + Q5 finished at: 2023-9-24 22:25:31:876:693 Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-23 18:49:5:525:60 + Q6 finished at: 2023-9-24 22:25:31:878:407 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:49:5:527:271 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:49:5:610:762 + Q7 finished at: 2023-9-24 22:25:31:879:36 + Q8 finished at: 2023-9-24 22:25:31:887:806 Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -91,7 +97,7 @@ Q3 finished at: 2023-9-23 18:49:5:425:776 *(6) expected_result: (0,0) - Q9 finished at: 2023-9-23 18:49:5:620:842 + Q9 finished at: 2023-9-24 22:25:31:899:205 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,20) @@ -108,13 +114,13 @@ Q3 finished at: 2023-9-23 18:49:5:425:776 (6) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:49:5:630:974 + Q10 finished at: 2023-9-24 22:25:31:900:268 Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:49:5:633:217 + Q11 finished at: 2023-9-24 22:25:31:900:704 Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-23 18:49:5:713:821 +Q12 finished at: 2023-9-24 22:25:31:923:35 Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-23 18:49:5:715:842 +Q13 finished at: 2023-9-24 22:25:31:923:897 Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,11) (1,20) @@ -131,9 +137,9 @@ Q13 finished at: 2023-9-23 18:49:5:715:842 *(6) expected_result: (0,11) (1,20) - Q14 finished at: 2023-9-23 18:49:5:727:31 + Q14 finished at: 2023-9-24 22:25:31:935:309 Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-23 18:49:5:728:935 + Q15 finished at: 2023-9-24 22:25:31:935:731 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt similarity index 67% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt index a44b0c27..64a60247 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat_uname_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_iat_uname_anomaly #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_mda_step_iat_uname_anomaly test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,7 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_uname_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:49:0:428:828 +Q1 finished at: 2023-9-24 22:25:23:196:576 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:23:197:782 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -33,9 +35,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,1) -Q2 finished at: 2023-9-23 18:49:0:439:230 +Q2 finished at: 2023-9-24 22:25:23:228:236 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:49:0:528:831 + Q3 finished at: 2023-9-24 22:25:23:296:555 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-9-24 22:25:23:396:154 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:23:425:175 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -52,9 +59,9 @@ Q2 finished at: 2023-9-23 18:49:0:439:230 (6) expected_result: (0,2) - Q4 finished at: 2023-9-23 18:49:0:539:275 + Q4 finished at: 2023-9-24 22:25:23:437:548 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:49:0:550:654 + Q5 finished at: 2023-9-24 22:25:23:439:261 Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -71,13 +78,12 @@ Q2 finished at: 2023-9-23 18:49:0:439:230 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:49:0:561:22 + Q6 finished at: 2023-9-24 22:25:23:440:317 Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-23 18:49:0:571:304 + Q7 finished at: 2023-9-24 22:25:23:441:502 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:49:0:572:645 - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-23 18:49:0:628:969 + Q8 finished at: 2023-9-24 22:25:23:442:195 + Q9 finished at: 2023-9-24 22:25:23:451:510 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -94,9 +100,9 @@ Q2 finished at: 2023-9-23 18:49:0:439:230 *(6) expected_result: (2,0) - Q10 finished at: 2023-9-23 18:49:0:639:425 + Q10 finished at: 2023-9-24 22:25:23:464:469 Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-23 18:49:0:649:21 + Q11 finished at: 2023-9-24 22:25:23:466:244 Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -113,50 +119,15 @@ Q2 finished at: 2023-9-23 18:49:0:439:230 (6) expected_result: (0,0) - Q12 finished at: 2023-9-23 18:49:0:658:743 + Q12 finished at: 2023-9-24 22:25:23:467:247 Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-23 18:49:0:669:397 + Q13 finished at: 2023-9-24 22:25:23:468:187 Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:49:0:671:13 + Q14 finished at: 2023-9-24 22:25:23:469:52 Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-23 18:49:0:737:453 -Q16-T1 execute opt: 'COMMIT'; -Q16 finished at: 2023-9-23 18:49:0:739:716 - Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) (2,1) - *(1) expected_result: - (0,2) (1,1) (2,1) - *(2) expected_result: - (0,2) (1,1) (2,1) - *(3) expected_result: - (0,2) (1,1) (2,1) - *(4) expected_result: - (0,2) (1,1) (2,1) - *(5) expected_result: - (0,2) (1,1) (2,1) - *(6) expected_result: - (0,2) (1,1) (2,1) - - Q17 finished at: 2023-9-23 18:49:0:752:681 - Q18-T4 execute opt: 'COMMIT'; - Q18 finished at: 2023-9-23 18:49:0:754:680 +Q15 failed reason: 错误: Restart read required at: { read: { physical: 1695565523496291 logical: 1 } local_limit: { physical: 1695565523496291 logical: 1 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q15 failed at: 2023-9-24 22:25:24:999:77 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565523496291 logical: 1 } local_limit: { physical: 1695565523496291 logical: 1 } global_limit: in_txn_limit: serial_no: 0 }; diff --git a/test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt similarity index 69% rename from test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt index c082a46d..0d4fa5b2 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_sda_lost_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_update_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_sda_lost_update_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_lost_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:44:339:172 +Q1 finished at: 2023-9-24 22:25:8:338:586 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:8:339:762 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,29 +25,33 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:48:44:348:792 +Q2 finished at: 2023-9-24 22:25:8:366:698 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:44:439:84 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:44:451:55 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:48:44:453:552 + Q3 finished at: 2023-9-24 22:25:8:438:824 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-23 18:48:44:547:643 +Q6 finished at: 2023-9-24 22:25:8:541:124 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:44:549:675 +Q7 finished at: 2023-9-24 22:25:8:542:714 + Q3 finished at: 2023-9-24 22:25:8:560:726 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:25:8:574:577 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:25:8:575:292 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:48:44:558:416 + Q8 finished at: 2023-9-24 22:25:8:627:192 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:44:560:477 + Q9 finished at: 2023-9-24 22:25:8:627:526 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt similarity index 72% rename from test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt index 06003da4..684a2b1b 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_sda_non_repeatable_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------iat_sda_non_repeatable_read_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_non_repeatable_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:42:772:75 +Q1 finished at: 2023-9-24 22:25:7:46:225 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:7:46:767 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,24 +25,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:48:42:781:921 +Q2 finished at: 2023-9-24 22:25:7:55:148 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:42:872:100 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:42:883:338 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:48:42:885:853 + Q3 finished at: 2023-9-24 22:25:7:146:792 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:7:246:198 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: (0,0) - *(2) expected_result: + *(1) expected_result: + (0,0) + (2) expected_result: (0,1) -Q6 finished at: 2023-9-23 18:48:42:979:161 +Q6 finished at: 2023-9-24 22:25:7:247:910 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:42:981:281 +Q7 finished at: 2023-9-24 22:25:7:248:366 + Q4 finished at: 2023-9-24 22:25:7:260:4 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:25:7:261:349 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -49,10 +53,12 @@ Q7 finished at: 2023-9-23 18:48:42:981:281 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:48:42:990:513 + Q8 finished at: 2023-9-24 22:25:7:319:108 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:42:992:300 + Q9 finished at: 2023-9-24 22:25:7:319:449 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..2460f856 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt @@ -0,0 +1,48 @@ +#### db_type: yugabyte #### +#### test_type: dda_double_write_skew1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_double_write_skew1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_double_write_skew1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:18:664:150 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:18:665:408 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:18:697:336 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:18:764:207 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:18:865:161 + Q3 finished at: 2023-9-24 22:24:18:885:185 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:18:898:848 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-24 22:24:18:899:964 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:24:18:964:65 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: 错误: Heartbeat: Transaction 73dd3355-dd7c-46d8-9f22-198a23937661 expired or aborted by a conflict: 40001 errcode: 40001 +Q8 failed at: 2023-9-24 22:24:19:865:695 + +Test Result: Rollback +Err:错误: Heartbeat: Transaction 73dd3355-dd7c-46d8-9f22-198a23937661 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt similarity index 73% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt index 7e743c41..bfdcc6f0 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_double_write_skew1_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_double_write_skew1_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,13 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:55:493:698 +Q1 finished at: 2023-9-24 22:24:20:705:389 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:20:706:560 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:55:507:489 +Q2 finished at: 2023-9-24 22:24:20:738:544 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:55:593:691 + Q3 finished at: 2023-9-24 22:24:20:805:207 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 finished at: 2023-9-24 22:24:20:905:203 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:24:20:906:220 + Q3 finished at: 2023-9-24 22:24:20:909:502 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:55:606:285 + Q4 finished at: 2023-9-24 22:24:20:922:672 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,25 +38,23 @@ Q2 finished at: 2023-9-23 18:47:55:507:489 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:47:55:615:460 + Q5 finished at: 2023-9-24 22:24:20:923:699 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:55:617:643 -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-23 18:47:55:703:917 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:55:705:858 + Q6 finished at: 2023-9-24 22:24:20:924:345 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,1) (1,2) - (1) expected_result: (0,1) (1,1) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,1) + (2) expected_result: (0,1) (1,2) - Q9 finished at: 2023-9-23 18:47:55:721:277 + Q9 finished at: 2023-9-24 22:24:20:988:765 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:55:723:96 + Q10 finished at: 2023-9-24 22:24:20:989:105 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt similarity index 72% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt index 31b0bd5a..ad8e8e24 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_double_write_skew2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_double_write_skew2 #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_double_write_skew2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,28 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:57:5:564 +Q1 finished at: 2023-9-24 22:24:22:97:828 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:22:98:418 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:57:17:586 +Q2 finished at: 2023-9-24 22:24:22:107:369 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:57:105:445 + Q3 finished at: 2023-9-24 22:24:22:198:478 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:22:294:496 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:57:119:870 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:57:130:676 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:47:57:214:173 +Q6 finished at: 2023-9-24 22:24:22:299:228 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:57:216:405 +Q7 finished at: 2023-9-24 22:24:22:299:970 + Q4 finished at: 2023-9-24 22:24:22:306:960 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:22:308:38 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:57:306:405 + Q8 finished at: 2023-9-24 22:24:22:401:426 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,1) @@ -45,10 +49,12 @@ Q7 finished at: 2023-9-23 18:47:57:216:405 (2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:47:57:319:332 + Q9 finished at: 2023-9-24 22:24:22:540:792 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:57:321:528 + Q10 finished at: 2023-9-24 22:24:22:541:170 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt similarity index 72% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt index 2cd183e9..8eb0b343 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_read_skew test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:58:627:957 +Q1 finished at: 2023-9-24 22:24:23:210:218 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:23:210:544 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:47:58:637:939 +Q2 finished at: 2023-9-24 22:24:23:219:834 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:58:727:896 + Q3 finished at: 2023-9-24 22:24:23:310:186 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:23:359:202 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:47:58:740:512 + Q4 finished at: 2023-9-24 22:24:23:375:183 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:47:58:751:426 + Q5 finished at: 2023-9-24 22:24:23:376:266 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:47:58:837:803 +Q6 finished at: 2023-9-24 22:24:23:411:397 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:58:928:461 + Q7 finished at: 2023-9-24 22:24:23:511:134 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:47:59:28:136 +Q8 finished at: 2023-9-24 22:24:23:610:510 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:47:59:28:136 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:47:59:36:252 + Q9 finished at: 2023-9-24 22:24:23:677:856 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:47:59:36:650 + Q10 finished at: 2023-9-24 22:24:23:678:192 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt similarity index 73% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt index 8303ba4a..3ab2728e 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew2 #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_read_skew2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,20 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:3:241:469 +Q1 finished at: 2023-9-24 22:24:27:118:947 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:27:120:135 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:3:252:643 +Q2 finished at: 2023-9-24 22:24:27:150:251 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:3:341:635 + Q3 finished at: 2023-9-24 22:24:27:218:35 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:27:312:93 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:27:318:795 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:24:27:319:580 current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:48:3:352:858 + Q4 finished at: 2023-9-24 22:24:27:323:17 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +45,9 @@ Q2 finished at: 2023-9-23 18:48:3:252:643 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:48:3:363:886 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:48:3:454:667 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:48:3:456:977 + Q5 finished at: 2023-9-24 22:24:27:323:923 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:48:3:540:494 + Q8 finished at: 2023-9-24 22:24:27:419:669 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q7 finished at: 2023-9-23 18:48:3:456:977 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:3:543:950 + Q9 finished at: 2023-9-24 22:24:27:560:79 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:3:544:295 + Q10 finished at: 2023-9-24 22:24:27:560:426 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt similarity index 73% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt index 66f3d2c4..f0d1233e 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew2_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_read_skew2_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,20 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:4:783:472 +Q1 finished at: 2023-9-24 22:24:28:607:384 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:28:608:583 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:4:794:990 +Q2 finished at: 2023-9-24 22:24:28:640:339 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:4:883:506 + Q3 finished at: 2023-9-24 22:24:28:707:491 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:24:28:808:106 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:24:28:809:267 + Q3 finished at: 2023-9-24 22:24:28:818:121 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,0) - (1) expected_result: (1,1) - *(2) expected_result: + *(1) expected_result: + (1,1) + (2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:48:4:895:0 + Q4 finished at: 2023-9-24 22:24:28:832:975 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -37,13 +45,9 @@ Q2 finished at: 2023-9-23 18:48:4:794:990 (2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:48:4:906:693 + Q5 finished at: 2023-9-24 22:24:28:834:108 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:4:909:193 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-23 18:48:4:993:141 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:4:995:9 + Q6 finished at: 2023-9-24 22:24:28:834:555 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,10 +56,12 @@ Q8 finished at: 2023-9-23 18:48:4:995:9 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:48:5:8:123 + Q9 finished at: 2023-9-24 22:24:28:894:339 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:5:9:977 + Q10 finished at: 2023-9-24 22:24:28:894:678 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt similarity index 78% rename from test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt index 296a3065..1aa97dfe 100644 --- a/test_result/centralizend_result/cassandra/any/rat_dda_read_skew_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew_predicate_based_delete #### -#### isolation: any #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_read_skew_predicate_based_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:33:880:756 +Q1 finished at: 2023-9-24 22:24:24:578:289 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:24:579:505 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -24,26 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:39:33:896:923 +Q2 finished at: 2023-9-24 22:24:24:607:660 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:33:980:856 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:33:994:392 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-23 18:39:34:6:233 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:39:34:8:794 + Q3 finished at: 2023-9-24 22:24:24:678:687 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - null - *(1) expected_result: + (1,0) (0,0) + (1) expected_result: null (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:39:34:94:720 +Q7 finished at: 2023-9-24 22:24:24:779:728 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:34:96:934 +Q8 finished at: 2023-9-24 22:24:24:780:593 + Q3 finished at: 2023-9-24 22:24:24:800:497 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:24:816:278 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:24:817:594 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:24:24:818:427 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: null @@ -52,9 +56,9 @@ Q8 finished at: 2023-9-23 18:39:34:96:934 *(2) expected_result: null - Q9 finished at: 2023-9-23 18:39:34:112:39 + Q9 finished at: 2023-9-24 22:24:24:885:381 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:34:113:514 + Q10 finished at: 2023-9-24 22:24:24:885:719 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt similarity index 73% rename from test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt index e7df309a..bf5b691c 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_dda_read_skew_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_skew_predicate_based_insert #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_read_skew_predicate_based_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:1:752:265 +Q1 finished at: 2023-9-24 22:24:25:717:865 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:25:719:236 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,26 +24,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-23 18:48:1:765:851 +Q2 finished at: 2023-9-24 22:24:25:762:327 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:1:852:349 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-23 18:48:1:858:252 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-23 18:48:1:860:449 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:1:860:883 + Q3 finished at: 2023-9-24 22:24:25:817:728 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - (1,0) (0,0) - (1) expected_result: + null + *(1) expected_result: null (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-23 18:48:1:961:981 +Q7 finished at: 2023-9-24 22:24:25:918:905 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:48:1:962:368 +Q8 finished at: 2023-9-24 22:24:25:919:897 + Q3 finished at: 2023-9-24 22:24:25:941:929 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-9-24 22:24:25:949:663 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-9-24 22:24:25:950:940 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:24:25:951:766 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) @@ -50,10 +54,12 @@ Q8 finished at: 2023-9-23 18:48:1:962:368 *(2) expected_result: (0,0) (1,0) - Q9 finished at: 2023-9-23 18:48:1:965:777 + Q9 finished at: 2023-9-24 22:24:26:14:702 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:48:1:966:171 + Q10 finished at: 2023-9-24 22:24:26:15:51 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt similarity index 73% rename from test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt index ed25db18..4e687654 100644 --- a/test_result/centralizend_result/cassandra/any/rat_dda_write_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_write_read_skew #### -#### isolation: any #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = snapshot for each session ----------rat_dda_write_read_skew test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,35 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:24:579:534 +Q1 finished at: 2023-9-24 22:24:15:370:674 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:15:371:394 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:24:595:588 +Q2 finished at: 2023-9-24 22:24:15:388:312 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:24:679:508 + Q3 finished at: 2023-9-24 22:24:15:470:411 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:15:535:387 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:24:697:377 + Q4 finished at: 2023-9-24 22:24:15:549:724 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: + *(2) expected_result: (0,0) - Q5 finished at: 2023-9-23 18:39:24:711:330 + Q5 finished at: 2023-9-24 22:24:15:551:179 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) -Q6 finished at: 2023-9-23 18:39:24:786:588 +Q6 finished at: 2023-9-24 22:24:15:571:71 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:39:24:880:49 + Q7 finished at: 2023-9-24 22:24:15:671:172 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:39:24:979:697 +Q8 finished at: 2023-9-24 22:24:15:773:410 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -52,9 +56,9 @@ Q8 finished at: 2023-9-23 18:39:24:979:697 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-23 18:39:25:11:708 + Q9 finished at: 2023-9-24 22:24:15:889:870 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:25:13:188 + Q10 finished at: 2023-9-24 22:24:15:890:213 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..7ec2cb4a --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_write_read_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------rat_dda_write_read_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------rat_dda_write_read_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:16:810:404 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:16:810:763 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:16:820:527 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:16:910:409 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:16:956:744 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:16:970:163 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + (1) expected_result: + (0,1) + *(2) expected_result: + (0,0) + + Q5 finished at: 2023-9-24 22:24:16:971:469 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:24:16:972:298 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565457011227 } local_limit: { physical: 1695565457011227 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q7 failed at: 2023-9-24 22:24:17:714:197 + +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565457011227 } local_limit: { physical: 1695565457011227 } global_limit: in_txn_limit: serial_no: 0 }; + diff --git a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt similarity index 78% rename from test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt index aa82e139..924663f3 100644 --- a/test_result/centralizend_result/cassandra/local_one/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt @@ -1,12 +1,12 @@ -#### db_type: cassandra #### -#### test_type: mda_step_iat #### -#### isolation: local_one #### +#### db_type: yugabyte #### +#### test_type: mda_step_rat #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session -----------iat_mda_step_iat test prepare---------- +set TXN_ISOLATION = snapshot for each session +----------rat_mda_step_rat test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' @@ -14,29 +14,23 @@ Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' Q0-T1 execute opt: 'COMMIT'; -----------iat_mda_step_iat test run---------- +----------rat_mda_step_rat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:54:151:122 -Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - (4) expected_result: - (2,1) - (5) expected_result: - (2,1) - (6) expected_result: - (2,1) - -Q2 finished at: 2023-9-23 18:48:54:160:32 +Q1 finished at: 2023-9-24 22:24:29:844:741 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:29:845:908 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:29:879:532 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:54:251:148 - Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q3 finished at: 2023-9-24 22:24:29:944:902 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:24:30:44:580 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:30:85:382 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:30:98:849 + Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) (1) expected_result: @@ -52,10 +46,11 @@ Q2 finished at: 2023-9-23 18:48:54:160:32 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:48:54:261:770 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:48:54:349:758 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' + Q5 finished at: 2023-9-24 22:24:30:100:48 + Q6 finished at: 2023-9-24 22:24:30:104:656 + Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q7 finished at: 2023-9-24 22:24:30:116:731 + Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) (1) expected_result: @@ -71,20 +66,31 @@ Q2 finished at: 2023-9-23 18:48:54:160:32 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-23 18:48:54:352:649 -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-23 18:48:54:459:540 - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-23 18:48:54:559:815 - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-23 18:48:54:659:682 + Q8 finished at: 2023-9-24 22:24:30:117:912 +Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,1) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q9 finished at: 2023-9-24 22:24:30:145:143 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:54:751:959 +Q10 finished at: 2023-9-24 22:24:30:149:39 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:54:852:248 + Q11 finished at: 2023-9-24 22:24:30:247:310 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:54:952:346 - Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + Q12 finished at: 2023-9-24 22:24:30:347:446 + Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) *(1) expected_result: @@ -100,9 +106,9 @@ Q10 finished at: 2023-9-23 18:48:54:751:959 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:48:54:964:796 + Q13 finished at: 2023-9-24 22:24:30:517:89 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:54:966:806 + Q14 finished at: 2023-9-24 22:24:30:517:442 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt similarity index 86% rename from test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt index 755f1810..7855c042 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_long_fork.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_rat_long_fork #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_mda_step_rat_long_fork test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,7 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_long_fork test run---------- Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-23 18:48:8:147:232 + Q1 finished at: 2023-9-24 22:24:31:448:735 + Q1-T4 execute sql: 'BEGIN TRANSACTION;' +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-9-24 22:24:31:548:71 +Q3-T1 execute sql: 'BEGIN TRANSACTION;' +Q3 finished at: 2023-9-24 22:24:31:548:778 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-9-24 22:24:31:562:856 + Q1 finished at: 2023-9-24 22:24:31:579:642 Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -48,13 +56,14 @@ Q0-T1 execute opt: 'COMMIT'; *(14) expected_result: (0,0) - Q2 finished at: 2023-9-23 18:48:8:159:373 -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-23 18:48:8:247:289 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-23 18:48:8:258:742 + Q2 finished at: 2023-9-24 22:24:31:591:104 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-23 18:48:8:347:413 + Q5 finished at: 2023-9-24 22:24:31:647:848 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-9-24 22:24:31:748:296 + Q8-T2 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-9-24 22:24:31:775:733 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -87,85 +96,84 @@ Q4 finished at: 2023-9-23 18:48:8:258:742 (14) expected_result: (1,1) - Q6 finished at: 2023-9-23 18:48:8:359:389 + Q6 finished at: 2023-9-24 22:24:31:790:27 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: (0,0) - (2) expected_result: + *(1) expected_result: + (0,0) + *(2) expected_result: (0,0) - *(3) expected_result: + (3) expected_result: (0,1) - *(4) expected_result: + (4) expected_result: (0,1) - *(5) expected_result: + (5) expected_result: (0,1) - (6) expected_result: + *(6) expected_result: (0,0) - *(7) expected_result: + (7) expected_result: (0,1) - *(8) expected_result: + (8) expected_result: (0,1) - *(9) expected_result: + (9) expected_result: (0,1) - (10) expected_result: + *(10) expected_result: (0,0) - (11) expected_result: + *(11) expected_result: (0,0) - (12) expected_result: + *(12) expected_result: (0,0) - *(13) expected_result: + (13) expected_result: (0,1) - (14) expected_result: + *(14) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:48:8:371:312 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-23 18:48:8:447:554 + Q7 finished at: 2023-9-24 22:24:31:791:405 + Q8 finished at: 2023-9-24 22:24:31:804:443 Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-23 18:48:8:459:730 + Q9 finished at: 2023-9-24 22:24:31:815:989 Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: - (1,1) - (1) expected_result: (1,0) - *(2) expected_result: + *(1) expected_result: + (1,0) + (2) expected_result: (1,1) - (3) expected_result: + *(3) expected_result: (1,0) - *(4) expected_result: + (4) expected_result: (1,1) - (5) expected_result: + *(5) expected_result: (1,0) - *(6) expected_result: + (6) expected_result: (1,1) - (7) expected_result: + *(7) expected_result: (1,0) - *(8) expected_result: + (8) expected_result: (1,1) - *(9) expected_result: + (9) expected_result: (1,1) - *(10) expected_result: + (10) expected_result: (1,1) - *(11) expected_result: + (11) expected_result: (1,1) - (12) expected_result: + *(12) expected_result: (1,0) - (13) expected_result: + *(13) expected_result: (1,0) - (14) expected_result: + *(14) expected_result: (1,0) - Q10 finished at: 2023-9-23 18:48:8:557:200 + Q10 finished at: 2023-9-24 22:24:31:849:656 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-23 18:48:8:647:814 +Q11 finished at: 2023-9-24 22:24:31:951:725 Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:8:748:84 + Q12 finished at: 2023-9-24 22:24:32:51:389 Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-23 18:48:8:848:338 + Q13 finished at: 2023-9-24 22:24:32:150:84 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:8:850:727 + Q14 finished at: 2023-9-24 22:24:32:152:546 Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -198,10 +206,12 @@ Q11 finished at: 2023-9-23 18:48:8:647:814 *(14) expected_result: (0,1) (1,1) - Q15 finished at: 2023-9-23 18:48:8:863:984 + Q15 finished at: 2023-9-24 22:24:32:212:60 Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-23 18:48:8:866:221 + Q16 finished at: 2023-9-24 22:24:32:214:48 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt similarity index 80% rename from test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt index f70a2738..25c0b539 100644 --- a/test_result/centralizend_result/cassandra/any/rat_mda_step_rat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_rat_predicate_based_delete #### -#### isolation: any #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = snapshot for each session ----------rat_mda_step_rat_predicate_based_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -16,59 +16,65 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:43:348:311 +Q1 finished at: 2023-9-24 22:24:33:335:895 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:33:337:218 Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:43:359:919 +Q2 finished at: 2023-9-24 22:24:33:368:799 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:43:448:325 + Q3 finished at: 2023-9-24 22:24:33:435:929 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:24:33:535:187 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:33:559:48 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:43:462:182 + Q4 finished at: 2023-9-24 22:24:33:573:113 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: - (0,) + (1,) (1) expected_result: (,) (2) expected_result: (,) - (3) expected_result: + *(3) expected_result: (1,) - (4) expected_result: + *(4) expected_result: (1,) (5) expected_result: (,) - (6) expected_result: + *(6) expected_result: (1,) - Q5 finished at: 2023-9-23 18:39:43:480:302 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:39:43:548:382 + Q5 finished at: 2023-9-24 22:24:33:577:442 + Q6 finished at: 2023-9-24 22:24:33:586:199 Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-23 18:39:43:561:674 + Q7 finished at: 2023-9-24 22:24:33:599:459 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: - (0,) + (1,) (1) expected_result: (,) - (2) expected_result: + *(2) expected_result: (1,) (3) expected_result: (,) - (4) expected_result: + *(4) expected_result: (1,) - (5) expected_result: + *(5) expected_result: (1,) - (6) expected_result: + *(6) expected_result: (1,) - Q8 finished at: 2023-9-23 18:39:43:574:755 + Q8 finished at: 2023-9-24 22:24:33:603:269 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: - (0,) - (1) expected_result: (1,) - (2) expected_result: + *(1) expected_result: + (1,) + *(2) expected_result: (1,) - (3) expected_result: + *(3) expected_result: (1,) (4) expected_result: (,) @@ -77,13 +83,13 @@ Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' (6) expected_result: (,) -Q9 finished at: 2023-9-23 18:39:43:658:437 +Q9 finished at: 2023-9-24 22:24:33:641:225 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:39:43:660:469 +Q10 finished at: 2023-9-24 22:24:33:642:464 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:39:43:748:912 + Q11 finished at: 2023-9-24 22:24:33:738:513 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:39:43:848:980 + Q12 finished at: 2023-9-24 22:24:33:838:571 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -100,9 +106,9 @@ Q10 finished at: 2023-9-23 18:39:43:660:469 *(6) expected_result: null - Q13 finished at: 2023-9-23 18:39:43:858:685 + Q13 finished at: 2023-9-24 22:24:33:975:616 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:39:43:860:728 + Q14 finished at: 2023-9-24 22:24:33:975:957 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt similarity index 76% rename from test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt index b379b660..cc112797 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_mda_step_rat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: mda_step_rat_predicate_based_insert #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_mda_step_rat_predicate_based_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,74 +13,80 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:11:853:525 +Q1 finished at: 2023-9-24 22:24:34:815:864 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:34:817:9 Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-23 18:48:11:858:756 +Q2 finished at: 2023-9-24 22:24:34:835:626 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:11:954:313 + Q3 finished at: 2023-9-24 22:24:34:915:921 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:24:35:15:551 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:35:49:206 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-23 18:48:11:966:565 + Q4 finished at: 2023-9-24 22:24:35:56:240 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: - (1,) - (1) expected_result: (,) - (2) expected_result: + *(1) expected_result: (,) - (3) expected_result: + *(2) expected_result: (,) - *(4) expected_result: + *(3) expected_result: + (,) + (4) expected_result: (1,) - *(5) expected_result: + (5) expected_result: (1,) - *(6) expected_result: + (6) expected_result: (1,) - Q5 finished at: 2023-9-23 18:48:11:976:578 - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-23 18:48:12:54:538 + Q5 finished at: 2023-9-24 22:24:35:65:518 + Q6 finished at: 2023-9-24 22:24:35:75:875 Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-23 18:48:12:64:758 + Q7 finished at: 2023-9-24 22:24:35:82:541 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: + (,) + (1) expected_result: (1,) - *(1) expected_result: - (1,) - *(2) expected_result: + (2) expected_result: (1,) - (3) expected_result: + *(3) expected_result: (,) - (4) expected_result: + *(4) expected_result: (,) - *(5) expected_result: + (5) expected_result: (1,) - (6) expected_result: + *(6) expected_result: (,) - Q8 finished at: 2023-9-23 18:48:12:76:395 + Q8 finished at: 2023-9-24 22:24:35:92:744 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: + (,) + (1) expected_result: (1,) - *(1) expected_result: - (1,) - (2) expected_result: + *(2) expected_result: (,) - *(3) expected_result: + (3) expected_result: (1,) - *(4) expected_result: + (4) expected_result: (1,) - (5) expected_result: + *(5) expected_result: (,) - (6) expected_result: + *(6) expected_result: (,) -Q9 finished at: 2023-9-23 18:48:12:165:227 +Q9 finished at: 2023-9-24 22:24:35:125:705 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-23 18:48:12:167:709 +Q10 finished at: 2023-9-24 22:24:35:126:496 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-23 18:48:12:255:249 + Q11 finished at: 2023-9-24 22:24:35:218:473 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-23 18:48:12:355:277 + Q12 finished at: 2023-9-24 22:24:35:316:318 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -97,9 +103,9 @@ Q10 finished at: 2023-9-23 18:48:12:167:709 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-23 18:48:12:368:985 + Q13 finished at: 2023-9-24 22:24:35:422:878 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-23 18:48:12:370:912 + Q14 finished at: 2023-9-24 22:24:35:423:215 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt similarity index 66% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt index 8350c386..a58901f0 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_dirty_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_dirty_read #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_dirty_read test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,32 +14,38 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_dirty_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:40:4:754 +Q1 finished at: 2023-9-24 22:24:4:896:984 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:4:898:282 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:40:21:987 +Q2 finished at: 2023-9-24 22:24:4:933:393 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:40:105:986 + Q3 finished at: 2023-9-24 22:24:4:997:257 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-24 22:24:5:97:489 + Q3 finished at: 2023-9-24 22:24:5:107:747 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' current_result: - (0,1) - (1) expected_result: + (0,0) + *(1) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:47:40:168:523 -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-23 18:47:40:204:418 + Q4 finished at: 2023-9-24 22:24:5:124:372 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:40:306:471 + Q6 finished at: 2023-9-24 22:24:5:198:234 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: + (0,0) + *(1) expected_result: (0,0) - Q7 finished at: 2023-9-23 18:47:40:320:71 + Q7 finished at: 2023-9-24 22:24:5:333:949 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:47:40:322:286 + Q8 finished at: 2023-9-24 22:24:5:334:282 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt similarity index 71% rename from test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt index 4d167ff5..0060cfcb 100644 --- a/test_result/centralizend_result/cassandra/all/rat_sda_intermediate_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_intermediate_read #### -#### isolation: all #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = all for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_intermediate_read test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,26 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:46:8:5:682 +Q1 finished at: 2023-9-24 22:24:8:58:25 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:8:59:310 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:46:8:20:384 +Q2 finished at: 2023-9-24 22:24:8:92:194 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:46:8:115:280 + Q3 finished at: 2023-9-24 22:24:8:157:976 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-9-24 22:24:8:260:541 + Q3 finished at: 2023-9-24 22:24:8:294:111 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) + (0,0) (1) expected_result: (0,2) - (2) expected_result: + *(2) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:46:8:118:766 -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-23 18:46:8:219:452 + Q4 finished at: 2023-9-24 22:24:8:306:447 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:46:8:306:826 + Q6 finished at: 2023-9-24 22:24:8:358:821 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:46:8:406:383 +Q7 finished at: 2023-9-24 22:24:8:460:468 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,10 +46,12 @@ Q7 finished at: 2023-9-23 18:46:8:406:383 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-23 18:46:8:413:536 + Q8 finished at: 2023-9-24 22:24:8:606:878 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:46:8:413:956 + Q9 finished at: 2023-9-24 22:24:8:607:216 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt similarity index 71% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt index 8e6c380a..a87cc0d9 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_intermediate_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_intermediate_read_committed #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_intermediate_read_committed test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,26 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:44:793:665 +Q1 finished at: 2023-9-24 22:24:9:658:8 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:9:659:298 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:44:808:553 +Q2 finished at: 2023-9-24 22:24:9:692:766 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:44:893:541 + Q3 finished at: 2023-9-24 22:24:9:757:855 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-9-24 22:24:9:861:164 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:24:9:863:717 + Q3 finished at: 2023-9-24 22:24:9:894:973 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: + (0,2) + *(1) expected_result: (0,2) (2) expected_result: (0,0) - Q4 finished at: 2023-9-23 18:47:44:909:269 + Q4 finished at: 2023-9-24 22:24:9:908:456 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:44:911:735 -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-23 18:47:45:6:576 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:45:8:535 + Q5 finished at: 2023-9-24 22:24:9:908:985 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,10 +46,12 @@ Q7 finished at: 2023-9-23 18:47:45:8:535 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-23 18:47:45:18:610 + Q8 finished at: 2023-9-24 22:24:9:963:724 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:45:20:413 + Q9 finished at: 2023-9-24 22:24:9:964:63 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt similarity index 70% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt index 66a65fef..fb05cb2d 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_lost_self_update.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_self_update #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_lost_self_update test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,26 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_lost_self_update test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:49:110:780 +Q1 finished at: 2023-9-24 22:24:13:886:335 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:13:887:503 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:47:49:125:597 +Q2 finished at: 2023-9-24 22:24:13:920:636 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:49:210:668 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:49:226:800 + Q3 finished at: 2023-9-24 22:24:13:986:193 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,2) - (1) expected_result: (0,1) - (2) expected_result: + *(1) expected_result: + (0,1) + *(2) expected_result: (0,1) -Q5 finished at: 2023-9-23 18:47:49:312:96 +Q5 finished at: 2023-9-24 22:24:14:87:543 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:47:49:312:524 +Q6 finished at: 2023-9-24 22:24:14:89:220 + Q3 finished at: 2023-9-24 22:24:14:110:50 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:14:123:919 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:47:49:411:337 + Q7 finished at: 2023-9-24 22:24:14:186:892 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -42,10 +46,12 @@ Q6 finished at: 2023-9-23 18:47:49:312:524 (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:47:49:421:466 + Q8 finished at: 2023-9-24 22:24:14:320:81 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:49:422:859 + Q9 finished at: 2023-9-24 22:24:14:320:413 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt similarity index 71% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt index c4661278..0f261230 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_non_repeatable_read test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:41:523:940 +Q1 finished at: 2023-9-24 22:24:6:361:957 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:6:363:275 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,24 +25,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-23 18:47:41:539:586 +Q2 finished at: 2023-9-24 22:24:6:392:469 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:41:623:938 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:41:647:315 + Q3 finished at: 2023-9-24 22:24:6:462:52 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: - (0,1) - (1) expected_result: (0,0) - *(2) expected_result: + *(1) expected_result: + (0,0) + (2) expected_result: (0,1) -Q5 finished at: 2023-9-23 18:47:41:738:102 +Q5 finished at: 2023-9-24 22:24:6:561:809 + Q3 finished at: 2023-9-24 22:24:6:570:629 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:6:584:957 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:47:41:824:507 + Q6 finished at: 2023-9-24 22:24:6:664:534 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:41:924:155 +Q7 finished at: 2023-9-24 22:24:6:763:52 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -49,10 +53,12 @@ Q7 finished at: 2023-9-23 18:47:41:924:155 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:47:41:938:208 + Q8 finished at: 2023-9-24 22:24:6:908:757 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:41:940:111 + Q9 finished at: 2023-9-24 22:24:6:909:83 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt similarity index 72% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index 12386c8d..e9bf4c9a 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_predicate_based-phantom_delete #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:46:244:234 +Q1 finished at: 2023-9-24 22:24:10:946:478 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:10:947:745 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -23,24 +25,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:47:46:307:62 +Q2 finished at: 2023-9-24 22:24:10:977:333 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:46:344:184 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-23 18:47:46:359:126 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:46:361:471 + Q3 finished at: 2023-9-24 22:24:11:46:438 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: + (0,0) + (1) expected_result: null - *(1) expected_result: - null - (2) expected_result: + *(2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:47:46:448:116 +Q6 finished at: 2023-9-24 22:24:11:149:558 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:46:449:9 +Q7 finished at: 2023-9-24 22:24:11:151:436 + Q3 finished at: 2023-9-24 22:24:11:193:517 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:11:209:423 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:24:11:210:350 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: null @@ -49,10 +53,12 @@ Q7 finished at: 2023-9-23 18:47:46:449:9 *(2) expected_result: null - Q8 finished at: 2023-9-23 18:47:46:452:908 + Q8 finished at: 2023-9-24 22:24:11:264:161 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:46:453:546 + Q9 finished at: 2023-9-24 22:24:11:264:508 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt similarity index 71% rename from test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt rename to test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index 3cfe04a8..66f95ee6 100644 --- a/test_result/centralizend_result/cassandra/local_one/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_non_repeatable_read_predicate_based-phantom_insert #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -13,7 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:47:47:681:246 +Q1 finished at: 2023-9-24 22:24:12:453:459 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:12:454:660 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -22,24 +24,26 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q2 finished at: 2023-9-23 18:47:47:685:665 +Q2 finished at: 2023-9-24 22:24:12:495:436 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:47:47:782:892 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-23 18:47:47:800:614 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-23 18:47:47:802:856 + Q3 finished at: 2023-9-24 22:24:12:553:472 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: - (0,0) - (1) expected_result: null - *(2) expected_result: + *(1) expected_result: + null + (2) expected_result: (0,0) -Q6 finished at: 2023-9-23 18:47:47:896:691 +Q6 finished at: 2023-9-24 22:24:12:654:550 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:47:47:898:865 +Q7 finished at: 2023-9-24 22:24:12:655:565 + Q3 finished at: 2023-9-24 22:24:12:676:621 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-9-24 22:24:12:685:5 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:24:12:685:803 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,0) @@ -48,10 +52,12 @@ Q7 finished at: 2023-9-23 18:47:47:898:865 *(2) expected_result: (0,0) - Q8 finished at: 2023-9-23 18:47:47:908:46 + Q8 finished at: 2023-9-24 22:24:12:739:623 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:47:47:909:951 + Q9 finished at: 2023-9-24 22:24:12:739:970 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..ac0794d3 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,39 @@ +#### db_type: yugabyte #### +#### test_type: dda_double_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_double_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_double_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:46:597:319 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:46:598:512 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:46:626:913 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:46:695:972 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:46:747:701 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:46:761:482 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:46:763:34 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:24:46:763:947 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565486796859 } local_limit: { physical: 1695565486796859 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 +Q7 failed at: 2023-9-24 22:24:47:499:552 + +Test Result: Rollback +Reason: Err:错误: Restart read required at: { read: { physical: 1695565486796859 } local_limit: { physical: 1695565486796859 } global_limit: in_txn_limit: serial_no: 0 }; + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt similarity index 70% rename from test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt rename to test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt index 97bcf9ae..1d11646b 100644 --- a/test_result/centralizend_result/cassandra/any/wat_dda_full_write_skew_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_full_write_skew_c1 #### -#### isolation: any #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = snapshot for each session ----------wat_dda_full_write_skew_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,33 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:39:58:765:665 +Q1 finished at: 2023-9-24 22:24:48:256:742 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:48:257:133 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:39:58:778:611 +Q2 finished at: 2023-9-24 22:24:48:266:173 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:39:58:865:352 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-23 18:39:58:877:775 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:39:58:889:249 + Q3 finished at: 2023-9-24 22:24:48:357:800 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:39:58:976:968 +Q6 finished at: 2023-9-24 22:24:48:459:482 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-23 18:39:58:978:874 +Q7 finished at: 2023-9-24 22:24:48:461:111 + Q3 finished at: 2023-9-24 22:24:48:478:580 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:48:493:289 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:48:494:284 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-23 18:39:59:64:161 + Q8 finished at: 2023-9-24 22:24:48:558:205 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,1) + (0,2) (1,2) (1) expected_result: (0,1) (1,1) - (2) expected_result: + *(2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-23 18:39:59:70:437 + Q9 finished at: 2023-9-24 22:24:48:653:292 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:39:59:71:29 + Q10 finished at: 2023-9-24 22:24:48:653:648 + +The current result is consistent with the [(2) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..054b94a5 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,41 @@ +#### db_type: yugabyte #### +#### test_type: dda_full_write_skew_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_full_write_skew_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:49:556:909 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:49:557:231 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:49:565:222 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:49:657:929 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:49:758:980 + Q3 finished at: 2023-9-24 22:24:49:773:798 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:49:789:198 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:49:790:408 + Q7-T2 execute opt: 'COMMIT'; + Q7 finished at: 2023-9-24 22:24:49:858:31 +Q8-T1 execute opt: 'COMMIT'; +Q8 failed reason: 错误: Heartbeat: Transaction bf623b97-63f8-4cee-8da1-eb5068d8ad92 expired or aborted by a conflict: 40001 errcode: 40001 +Q8 failed at: 2023-9-24 22:24:50:759:226 + +Test Result: Rollback +Err:错误: Heartbeat: Transaction bf623b97-63f8-4cee-8da1-eb5068d8ad92 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..14813a68 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,39 @@ +#### db_type: yugabyte #### +#### test_type: dda_full_write_skew_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_full_write_skew_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_full_write_skew_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:51:655:420 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:51:655:791 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:51:665:798 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:51:756:144 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:51:832:596 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:51:847:486 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:24:51:856:653 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:24:51:857:577 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-9-24 22:24:52:351:837 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..13f118e7 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,48 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew1_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew1_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:53:160:68 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:53:160:382 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:24:53:168:372 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:53:260:115 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:53:304:258 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:53:318:398 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:53:320:120 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:53:362:699 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:24:53:363:843 + Q8-T2 execute opt: 'COMMIT'; + Q8 failed reason: 错误: Transaction d1c09ecb-2041-46fc-9c5e-4931c70d801f expired or aborted by a conflict: 40001 errcode: 40001 + Q8 failed at: 2023-9-24 22:24:54:268:531 + +Test Result: Rollback +Err:错误: Transaction d1c09ecb-2041-46fc-9c5e-4931c70d801f expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..54ea1f01 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,48 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew1_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew1_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew1_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:55:91:942 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:55:92:286 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,1) + +Q2 finished at: 2023-9-24 22:24:55:100:474 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:55:191:886 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:55:236:415 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:24:55:250:76 + Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q5 finished at: 2023-9-24 22:24:55:251:388 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:55:294:38 + Q7-T2 execute opt: 'COMMIT'; +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:24:55:493:23 + Q7 failed reason: 错误: Transaction 14291789-1159-4a15-a723-846d92bda4c6 expired or aborted by a conflict: 40001 errcode: 40001 + Q7 failed at: 2023-9-24 22:24:56:95:596 + +Test Result: Rollback +Err:错误: Transaction 14291789-1159-4a15-a723-846d92bda4c6 expired or aborted by a conflict: 40001 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..22b1a7bd --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew2_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew2_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:56:896:33 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:56:896:376 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:56:904:611 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:56:996:100 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:57:42:503 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-24 22:24:57:55:145 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-9-24 22:24:57:101:815 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-9-24 22:24:57:105:284 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-9-24 22:24:57:558:233 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt similarity index 53% rename from test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt rename to test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt index 98f13686..dd0a93e8 100644 --- a/test_result/centralizend_result/cassandra/any/wat_dda_read_write_skew2_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: dda_read_write_skew2_c2 #### -#### isolation: any #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = any for each session +set TXN_ISOLATION = snapshot for each session ----------wat_dda_read_write_skew2_c2 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -15,11 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:40:7:865:238 +Q1 finished at: 2023-9-24 22:24:58:471:71 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:58:471:535 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:40:7:875:520 +Q2 finished at: 2023-9-24 22:24:58:480:228 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:40:7:965:284 + Q3 finished at: 2023-9-24 22:24:58:571:111 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:58:617:161 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -28,27 +32,17 @@ Q2 finished at: 2023-9-23 18:40:7:875:520 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-23 18:40:7:975:223 + Q4 finished at: 2023-9-24 22:24:58:630:429 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-23 18:40:7:985:710 + Q5 finished at: 2023-9-24 22:24:58:632:297 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-23 18:40:8:73:695 +Q6 finished at: 2023-9-24 22:24:58:672:308 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:40:8:165:705 + Q7 finished at: 2023-9-24 22:24:58:772:42 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-23 18:40:8:265:601 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) +Q8 failed reason: 错误: Heartbeat: Transaction 0cae4d21-ec5a-4515-ad80-2b3496cc1241 expired or aborted by a conflict: 40001 errcode: 40001 +Q8 failed at: 2023-9-24 22:24:59:673:200 - Q9 finished at: 2023-9-23 18:40:8:278:503 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-23 18:40:8:280:283 - -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Err:错误: Heartbeat: Transaction 0cae4d21-ec5a-4515-ad80-2b3496cc1241 expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..095ba947 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,46 @@ +#### db_type: yugabyte #### +#### test_type: dda_read_write_skew2_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_dda_read_write_skew2_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_dda_read_write_skew2_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:0:598:128 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:0:599:292 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:25:0:632:278 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:25:0:696:988 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:0:743:97 + Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-9-24 22:25:0:756:613 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-9-24 22:25:0:798:792 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-9-24 22:25:0:800:183 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-9-24 22:25:1:259:348 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..2487a90b --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt @@ -0,0 +1,49 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_wat_c1 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_mda_step_wat_c1 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c1 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:1:998:741 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:1:999:451 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:25:2:13:738 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:25:2:98:309 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:2:158:325 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:25:2:170:157 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-9-24 22:25:2:172:297 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-9-24 22:25:2:198:260 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2023-9-24 22:25:2:247:337 + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-24 22:25:2:262:18 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' + Q11-T2 execute opt: 'COMMIT'; + Q11 finished at: 2023-9-24 22:25:2:401:688 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-9-24 22:25:3:65:58 +Q9 failed reason: 错误: Unknown transaction, could be recently aborted: 40a94ebf-bdb4-4eb5-8b68-93162f334e5d; errcode: 40001 +Q9 failed at: 2023-9-24 22:25:3:201:516 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..48c6366f --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt @@ -0,0 +1,51 @@ +#### db_type: yugabyte #### +#### test_type: mda_step_wat_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_mda_step_wat_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_mda_step_wat_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:25:4:50:459 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:25:4:50:788 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:25:4:60:28 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:25:4:150:497 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:25:4:199:57 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-9-24 22:25:4:211:363 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-9-24 22:25:4:250:485 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-9-24 22:25:4:305:212 + Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' + Q7 finished at: 2023-9-24 22:25:4:483:444 + Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' + Q8 finished at: 2023-9-24 22:25:4:486:795 +Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' +Q9 finished at: 2023-9-24 22:25:4:553:854 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-9-24 22:25:4:752:634 + Q12-T3 execute opt: 'COMMIT'; + Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q6 failed at: 2023-9-24 22:25:4:953:165 + Q12 failed reason: 错误: Heartbeat: Transaction 59aefe13-10d2-4d6f-90e3-6561d9ff74b4 expired or aborted by a conflict: 40001 errcode: 40001 + Q12 failed at: 2023-9-24 22:25:6:58:518 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..92f21998 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,34 @@ +#### db_type: yugabyte #### +#### test_type: sda_dirty_write_1abort #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_dirty_write_1abort test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_dirty_write_1abort test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:36:266:572 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:36:266:930 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:36:274:764 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:36:366:636 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:36:411:240 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-9-24 22:24:36:467:311 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-9-24 22:24:36:825:159 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt similarity index 77% rename from test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt rename to test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt index cc6827f4..17583951 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_dirty_write_2commit.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_dirty_write_2commit #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------wat_sda_dirty_write_2commit test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,17 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_2commit test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:15:273:873 +Q1 finished at: 2023-9-24 22:24:37:582:355 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:37:583:473 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-23 18:48:15:283:703 +Q2 finished at: 2023-9-24 22:24:37:614:102 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:15:372:910 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:15:378:883 + Q3 finished at: 2023-9-24 22:24:37:681:920 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-23 18:48:15:474:381 +Q5 finished at: 2023-9-24 22:24:37:782:169 + Q3 finished at: 2023-9-24 22:24:37:788:275 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:37:800:976 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-23 18:48:15:574:635 + Q6 finished at: 2023-9-24 22:24:37:884:325 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -33,11 +37,11 @@ Q5 finished at: 2023-9-23 18:48:15:474:381 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-23 18:48:15:582:642 + Q7 finished at: 2023-9-24 22:24:38:4:699 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-23 18:48:16:41:762 + Q8 finished at: 2023-9-24 22:24:38:99:73 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:16:42:130 + Q9 finished at: 2023-9-24 22:24:38:99:856 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt new file mode 100644 index 00000000..67f3e675 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt @@ -0,0 +1,36 @@ +#### db_type: yugabyte #### +#### test_type: sda_full_write #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_full_write test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:38:845:126 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:38:846:175 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:38:871:712 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:38:945:387 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:38:946:782 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q5 finished at: 2023-9-24 22:24:39:45:655 +Q6-T1 execute opt: 'COMMIT'; +Q6 finished at: 2023-9-24 22:24:39:46:841 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-9-24 22:24:39:395:895 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..2f1c7f4c --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt @@ -0,0 +1,36 @@ +#### db_type: yugabyte #### +#### test_type: sda_full_write_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_full_write_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_full_write_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:40:708:294 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:40:708:610 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:40:716:948 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:40:808:313 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:40:852:196 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:40:867:545 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:24:40:868:425 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 failed reason: 错误: Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81c7c5462 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81 errcode: 40001 +Q6 failed at: 2023-9-24 22:24:41:511:474 + +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81c7c5462 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81 + diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..4402bed8 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,36 @@ +#### db_type: yugabyte #### +#### test_type: sda_lost_self_update_committed #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_lost_self_update_committed test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_self_update_committed test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:45:0:948 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:45:2:178 +Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q2 finished at: 2023-9-24 22:24:45:34:65 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:45:100:705 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:45:163:114 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:45:176:333 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-9-24 22:24:45:177:312 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q6 failed reason: 错误: Unknown transaction, could be recently aborted: 317e4441-0993-4b88-b7ff-825633d6857e; errcode: 40001 +Q6 failed at: 2023-9-24 22:24:45:803:142 + +Test Result: Rollback +Reason: Err:错误: Unknown transaction, could be recently aborted: 317e4441-0993-4b88-b7ff-825633d6857e; + diff --git a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt similarity index 68% rename from test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt rename to test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt index b308beaf..c4f41211 100644 --- a/test_result/centralizend_result/cassandra/local_one/wat_sda_lost_update_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt @@ -1,11 +1,11 @@ -#### db_type: cassandra #### +#### db_type: yugabyte #### #### test_type: sda_lost_update_c1 #### -#### isolation: local_one #### +#### isolation: snapshot #### current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory -set TXN_ISOLATION = local_one for each session +set TXN_ISOLATION = snapshot for each session ----------wat_sda_lost_update_c1 test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' @@ -14,7 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-23 18:48:19:893:606 +Q1 finished at: 2023-9-24 22:24:42:297:431 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:42:297:800 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -23,29 +25,33 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-23 18:48:19:903:181 +Q2 finished at: 2023-9-24 22:24:42:306:180 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-23 18:48:19:993:593 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-23 18:48:20:5:929 + Q3 finished at: 2023-9-24 22:24:42:397:838 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-23 18:48:20:104:2 +Q5 finished at: 2023-9-24 22:24:42:500:459 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-23 18:48:20:105:824 +Q6 finished at: 2023-9-24 22:24:42:501:613 + Q3 finished at: 2023-9-24 22:24:42:509:274 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:42:524:377 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-23 18:48:20:192:514 + Q7 finished at: 2023-9-24 22:24:42:598:764 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: - (0,1) - (1) expected_result: (0,2) - *(2) expected_result: + *(1) expected_result: + (0,2) + (2) expected_result: (0,1) - Q8 finished at: 2023-9-23 18:48:20:194:702 + Q8 finished at: 2023-9-24 22:24:42:658:406 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-23 18:48:20:195:43 + Q9 finished at: 2023-9-24 22:24:42:658:781 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..1394a6d6 --- /dev/null +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt @@ -0,0 +1,43 @@ +#### db_type: yugabyte #### +#### test_type: sda_lost_update_c2 #### +#### isolation: snapshot #### + +current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas +expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory + +set TXN_ISOLATION = snapshot for each session +----------wat_sda_lost_update_c2 test prepare---------- +Q0-T1 execute sql: 'DROP TABLE IF EXISTS t1;' +Q0-T1 execute sql: 'CREATE TABLE t1 (k INT PRIMARY KEY, v INT);' +Q0-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' +Q0-T1 execute opt: 'COMMIT'; + +----------wat_sda_lost_update_c2 test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-9-24 22:24:43:518:732 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-9-24 22:24:43:519:75 +Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + (2) expected_result: + (0,2) + +Q2 finished at: 2023-9-24 22:24:43:527:974 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-9-24 22:24:43:618:915 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-9-24 22:24:43:666:427 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-9-24 22:24:43:679:944 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-9-24 22:24:43:819:904 +Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q5 failed at: 2023-9-24 22:24:44:222:683 + +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 + From b509cc5032e765db15b354f6d822bd776de5d7f3 Mon Sep 17 00:00:00 2001 From: zzhuncle <57178872+zzhuncle@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:34:52 +0800 Subject: [PATCH 48/81] Update sql_cntl_v2.cc --- src/dbtest/src/sql_cntl_v2.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 44a5ce14..16fb8ed0 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -228,8 +228,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return false; } // execute sql @@ -248,8 +248,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet SQLRowCount(m_hStatement,&row_count); // std::cout << "row_count" << row_count << std::endl; std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); if (row_count==0 && sql_id !=0){ std::string blank(blank_base*(session_id - 1), ' '); std::string output_time_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " failed at: " + get_current_time() ; @@ -319,8 +319,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return false; } SQLLEN length; @@ -379,15 +379,15 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_time_info << std::endl; } - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return true; } else { // Handle errors: If SQL execution fails, check if the error message contains "timeout". // If yes, set the result type of test_result_set to "Timeout". // Otherwise, set the result type to "Rollback" and include the relevant error message. - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); From 701f13ca5a8f3ea95b893dddcd8a4849985c4f1b Mon Sep 17 00:00:00 2001 From: zzhuncle <57178872+zzhuncle@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:36:58 +0800 Subject: [PATCH 49/81] Update sql_cntl.cc --- src/dbtest/src/sql_cntl.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 8f46ec00..447ed6ca 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -205,8 +205,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; std::cout << __TIMESTAMP__ << std::endl; - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return false; } // execute sql @@ -223,8 +223,8 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); @@ -284,8 +284,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return false; } SQLLEN length; @@ -344,15 +344,15 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::ofstream test_process(test_process_file, std::ios::app); test_process << output_time_info << std::endl; } - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); return true; } else { // Handle errors: If SQL execution fails, check if the error message contains "timeout". // If yes, set the result type of test_result_set to "Timeout". // Otherwise, set the result type to "Rollback" and include the relevant error message. - SQLFreeStmt( m_hStatement, SQL_DROP); SQLFreeStmt( m_hStatement, SQL_UNBIND); + SQLFreeStmt( m_hStatement, SQL_DROP); auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); From 73881d833f9bc9c0d9ef75494b55ce46dd4c00de Mon Sep 17 00:00:00 2001 From: zzhuncle <57178872+zzhuncle@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:38:08 +0800 Subject: [PATCH 50/81] Update sql_cntl_v2.cc --- src/dbtest/src/sql_cntl_v2.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/dbtest/src/sql_cntl_v2.cc b/src/dbtest/src/sql_cntl_v2.cc index 16fb8ed0..73236cbb 100644 --- a/src/dbtest/src/sql_cntl_v2.cc +++ b/src/dbtest/src/sql_cntl_v2.cc @@ -383,9 +383,6 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult SQLFreeStmt( m_hStatement, SQL_DROP); return true; } else { - // Handle errors: If SQL execution fails, check if the error message contains "timeout". - // If yes, set the result type of test_result_set to "Timeout". - // Otherwise, set the result type to "Rollback" and include the relevant error message. SQLFreeStmt( m_hStatement, SQL_UNBIND); SQLFreeStmt( m_hStatement, SQL_DROP); auto index_timeout1 = err_info_sql.find("timeout"); From a8fc2829f2125aaa628aca63af1552f51fb88ff5 Mon Sep 17 00:00:00 2001 From: zzhuncle <57178872+zzhuncle@users.noreply.github.com> Date: Mon, 25 Sep 2023 13:49:22 +0800 Subject: [PATCH 51/81] Create README.md --- .../centralizend_result/mariadb/README.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test_result/centralizend_result/mariadb/README.md diff --git a/test_result/centralizend_result/mariadb/README.md b/test_result/centralizend_result/mariadb/README.md new file mode 100644 index 00000000..79afcd93 --- /dev/null +++ b/test_result/centralizend_result/mariadb/README.md @@ -0,0 +1,26 @@ +# `MariaDB`数据库测试说明 + +## 测试环境 + +`Ubuntu 20.04` | `MariaDB 10.5.22` | `unixODBC 2.3.6` + +## 数据库简介 + +`MariaDB` 是一个开源的关系数据库管理系统(`RDBMS`),由 `MySQL` 的原始开发者创建,作为 `MySQL` 的一个分支。`MariaDB` 的创建是为了保持开放源代码的自由性,这是由于 Oracle 公司收购了 `MySQL` 的母公司 `Sun Microsystems`。`MariaDB` 的开发目标是与 `MySQL` 数据库完全兼容,保证开源性,以及保持开放和透明的开发模式。 + +`MariaDB` 设计上对 `MySQL` 有很高的兼容性,它能够直接替换 `MySQL`,且大多数 `MySQL` 代码、表和`API`等在 `MariaDB` 中都可以直接使用。`MariaDB` 支持多种存储引擎,包括 `InnoDB`、`MyRocks`、`Aria`等,以满足不同用途的需求。`MariaDB` 提供了一系列的扩展功能,如分区表、虚拟列、联合引擎等。同时,它还支持线性水平扩展,以支持更大的数据集和更高的查询负载。`MariaDB` 提供了适用于多种云平台的解决方案,支持容器化部署,例如在 `Kubernetes` 上运行。 + +## 隔离级别 + +`MariaDB`支持多种事务隔离级别,这些隔离级别决定了多个并发事务如何交互以及在读取数据时可能会看到哪些数据,以下是 `MariaDB` 支持的隔离级别: + +- **`READ UNCOMMITTED`** (读未提交):一个事务可以读取其他未提交事务的修改。这是隔离级别中最低的一种,也是最少使用的一种,因为它可能会导致许多并发问题,如脏读(读取到其他事务未提交的更改)。 +- **`READ COMMITTED`** (读已提交):一个事务只能读取已经提交的其他事务的修改。这意味着它不会看到其他并发事务所做的未提交的更改。这是许多数据库系统的默认隔离级别。 +- **`REPEATABLE READ`** (可重复读):这是 `MariaDB`的默认隔离级别。在此隔离级别下,事务在开始时锁定其读取的所有数据行,确保这些行在事务结束之前不会被其他事务修改。这样,一个事务在其生命周期内多次读取同一行数据时,总是看到相同的信息。 +- **`SERIALIZABLE`** (串行化):这是隔离级别中最高的一种。在此隔离级别下,事务被执行得就像是序列化的,即一个接一个地执行,没有并发。这意味着在一个事务运行时,其他事务不能并发地访问相同的数据。 + +在选择隔离级别时,通常需要在性能和数据的准确性/一致性之间进行权衡。更高的隔离级别通常提供更好的数据一致性保证,但可能降低并发性能。 + +## 实际测试说明 + +由于`MariaDB`和`MySQL`渊源颇深,因此`SQL`语法类似,代码基本无需改动,最终在4种隔离级别,33种数据异常上的结果`MariaDB 10.5.22`也和`MySQL 8.0.20`基本相同。 From 3f77845e164a8b74e391b37d4f4e6ac98d498fbb Mon Sep 17 00:00:00 2001 From: zzhuncle <3294175303@qq.com> Date: Thu, 5 Oct 2023 00:16:10 +0800 Subject: [PATCH 52/81] Fixed the test results of YugabyteDB --- .../iat_dda_read_skew_committed.txt | 47 ++---- .../iat_dda_read_write_skew1_committed.txt | 38 ++--- .../serializable/iat_dda_write_skew.txt | 44 ++---- .../iat_dda_write_skew_committed.txt | 44 ++---- ...skew_predicate_based-intersecting_data.txt | 54 ++----- ...w_predicate_based-overdraft_protection.txt | 43 +++++- .../serializable/iat_mda_step_iat.txt | 31 ++-- ...a_step_iat_causality_violation_anomaly.txt | 56 +------ .../iat_mda_step_iat_cross_phenomenon.txt | 68 ++------ ...at_mda_step_iat_predicate_based_delete.txt | 33 ++-- ...at_mda_step_iat_predicate_based_insert.txt | 31 ++-- ...step_iat_read_only_transaction_anomaly.txt | 64 ++------ .../iat_mda_step_iat_uname_anomaly.txt | 87 ++--------- .../iat_sda_lost_update_committed.txt | 38 ++--- .../iat_sda_non_repeatable_read_committed.txt | 43 ++---- .../rat_dda_double_write_skew1.txt | 26 ++-- .../rat_dda_double_write_skew1_committed.txt | 45 ++---- .../rat_dda_double_write_skew2.txt | 42 ++--- .../serializable/rat_dda_read_skew.txt | 20 +-- .../serializable/rat_dda_read_skew2.txt | 51 ++---- .../rat_dda_read_skew2_committed.txt | 51 ++---- ...t_dda_read_skew_predicate_based_delete.txt | 45 ++---- ...t_dda_read_skew_predicate_based_insert.txt | 45 ++---- .../serializable/rat_dda_write_read_skew.txt | 38 ++--- .../rat_dda_write_read_skew_committed.txt | 53 ++----- .../serializable/rat_mda_step_rat.txt | 44 +----- .../rat_mda_step_rat_long_fork.txt | 139 ++--------------- ...at_mda_step_rat_predicate_based_delete.txt | 63 ++++---- ...at_mda_step_rat_predicate_based_insert.txt | 46 ++++-- .../serializable/rat_sda_dirty_read.txt | 37 ++--- .../rat_sda_intermediate_read.txt | 29 +--- .../rat_sda_intermediate_read_committed.txt | 20 +-- .../serializable/rat_sda_lost_self_update.txt | 38 ++--- .../rat_sda_non_repeatable_read.txt | 23 +-- ...le_read_predicate_based-phantom_delete.txt | 43 ++---- ...le_read_predicate_based-phantom_insert.txt | 43 ++---- .../wat_dda_double_write_skew2_committed.txt | 44 +++--- .../wat_dda_full_write_skew_c1.txt | 28 ++-- .../wat_dda_full_write_skew_c2.txt | 26 ++-- .../wat_dda_full_write_skew_committed.txt | 36 ++--- .../wat_dda_read_write_skew1_c1.txt | 40 ++--- .../wat_dda_read_write_skew1_c2.txt | 24 ++- .../wat_dda_read_write_skew2_c1.txt | 46 ++---- .../wat_dda_read_write_skew2_c2.txt | 33 ++-- .../wat_dda_read_write_skew2_committed.txt | 42 ++--- .../serializable/wat_mda_step_wat_c1.txt | 38 ++--- .../serializable/wat_mda_step_wat_c2.txt | 36 ++--- .../wat_sda_dirty_write_1abort.txt | 24 +-- .../wat_sda_dirty_write_2commit.txt | 22 +-- .../serializable/wat_sda_full_write.txt | 22 +-- .../wat_sda_full_write_committed.txt | 34 ++-- .../wat_sda_lost_self_update_committed.txt | 34 ++-- .../serializable/wat_sda_lost_update_c1.txt | 38 ++--- .../serializable/wat_sda_lost_update_c2.txt | 20 +-- .../snapshot/iat_dda_read_skew_committed.txt | 45 ++++-- .../iat_dda_read_write_skew1_committed.txt | 40 ++--- .../yugabyte/snapshot/iat_dda_write_skew.txt | 24 +-- .../snapshot/iat_dda_write_skew_committed.txt | 40 +++-- ...skew_predicate_based-intersecting_data.txt | 40 +++-- ...w_predicate_based-overdraft_protection.txt | 57 ++++++- .../yugabyte/snapshot/iat_mda_step_iat.txt | 38 ++--- ...a_step_iat_causality_violation_anomaly.txt | 73 ++++++--- .../iat_mda_step_iat_cross_phenomenon.txt | 145 +++++++++++++++--- ...at_mda_step_iat_predicate_based_delete.txt | 38 ++--- ...at_mda_step_iat_predicate_based_insert.txt | 38 ++--- ...step_iat_read_only_transaction_anomaly.txt | 40 ++--- .../iat_mda_step_iat_uname_anomaly.txt | 83 +++++++--- .../iat_sda_lost_update_committed.txt | 38 ++--- .../iat_sda_non_repeatable_read_committed.txt | 26 ++-- .../snapshot/rat_dda_double_write_skew1.txt | 26 ++-- .../rat_dda_double_write_skew1_committed.txt | 46 ++---- .../snapshot/rat_dda_double_write_skew2.txt | 47 ++---- .../yugabyte/snapshot/rat_dda_read_skew.txt | 24 +-- .../yugabyte/snapshot/rat_dda_read_skew2.txt | 42 ++--- .../snapshot/rat_dda_read_skew2_committed.txt | 42 ++--- ...t_dda_read_skew_predicate_based_delete.txt | 30 ++-- ...t_dda_read_skew_predicate_based_insert.txt | 30 ++-- .../snapshot/rat_dda_write_read_skew.txt | 24 +-- .../rat_dda_write_read_skew_committed.txt | 43 ++++-- .../yugabyte/snapshot/rat_mda_step_rat.txt | 38 ++--- .../snapshot/rat_mda_step_rat_long_fork.txt | 50 +++--- ...at_mda_step_rat_predicate_based_delete.txt | 38 ++--- ...at_mda_step_rat_predicate_based_insert.txt | 38 ++--- .../yugabyte/snapshot/rat_sda_dirty_read.txt | 22 +-- .../snapshot/rat_sda_intermediate_read.txt | 24 +-- .../rat_sda_intermediate_read_committed.txt | 34 ++-- .../snapshot/rat_sda_lost_self_update.txt | 45 ++---- .../snapshot/rat_sda_non_repeatable_read.txt | 24 +-- ...le_read_predicate_based-phantom_delete.txt | 26 ++-- ...le_read_predicate_based-phantom_insert.txt | 26 ++-- .../wat_dda_double_write_skew2_committed.txt | 22 ++- .../snapshot/wat_dda_full_write_skew_c1.txt | 38 ++--- .../snapshot/wat_dda_full_write_skew_c2.txt | 24 ++- .../wat_dda_full_write_skew_committed.txt | 18 +-- .../snapshot/wat_dda_read_write_skew1_c1.txt | 24 ++- .../snapshot/wat_dda_read_write_skew1_c2.txt | 24 ++- .../snapshot/wat_dda_read_write_skew2_c1.txt | 22 ++- .../snapshot/wat_dda_read_write_skew2_c2.txt | 24 ++- .../wat_dda_read_write_skew2_committed.txt | 18 +-- .../yugabyte/snapshot/wat_mda_step_wat_c1.txt | 27 ++-- .../yugabyte/snapshot/wat_mda_step_wat_c2.txt | 29 ++-- .../snapshot/wat_sda_dirty_write_1abort.txt | 14 +- .../snapshot/wat_sda_dirty_write_2commit.txt | 36 ++--- .../yugabyte/snapshot/wat_sda_full_write.txt | 16 +- .../snapshot/wat_sda_full_write_committed.txt | 20 +-- .../wat_sda_lost_self_update_committed.txt | 20 +-- .../snapshot/wat_sda_lost_update_c1.txt | 38 ++--- .../snapshot/wat_sda_lost_update_c2.txt | 16 +- 108 files changed, 1712 insertions(+), 2451 deletions(-) diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt index 2d2b8210..75db201e 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_skew_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:38:976:203 +Q1 finished at: 2023-10-4 10:27:52:380:145 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:38:977:618 +Q1 finished at: 2023-10-4 10:27:52:380:529 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,42 +26,21 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:39:12:101 +Q2 finished at: 2023-10-4 10:27:52:392:372 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:39:76:206 + Q3 finished at: 2023-10-4 10:27:53:381:664 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - -Q7 finished at: 2023-9-24 22:23:39:176:474 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:39:177:496 - Q3 finished at: 2023-9-24 22:23:39:185:404 + Q3 finished at: 2023-10-4 10:27:53:484:82 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:39:199:73 + Q4 finished at: 2023-10-4 10:27:53:499:356 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:39:200:845 + Q5 finished at: 2023-10-4 10:27:53:502:615 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:39:201:934 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:23:39:270:840 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:39:271:165 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q6 finished at: 2023-10-4 10:27:53:503:360 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: 错误: Heartbeat: Transaction 27341f5a-bbeb-4768-9e54-5d76b7770b36 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 27341f5a-bbeb-4768-9e54-5d76b errcode: 40001 +Q7 failed at: 2023-10-4 10:27:55:91:48 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 27341f5a-bbeb-4768-9e54-5d76b7770b36 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 27341f5a-bbeb-4768-9e54-5d76b diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt index 3bb066d6..e77c79cb 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_read_write_skew1_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:40:543:544 +Q1 finished at: 2023-10-4 10:27:57:802:478 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:40:544:156 +Q1 finished at: 2023-10-4 10:27:57:803:911 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,35 +26,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:40:564:615 +Q2 finished at: 2023-10-4 10:27:57:840:139 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:40:644:506 + Q3 finished at: 2023-10-4 10:27:58:802:532 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:23:40:746:75 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:40:747:582 - Q3 finished at: 2023-9-24 22:23:40:770:732 + Q3 finished at: 2023-10-4 10:27:58:929:130 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:40:785:365 + Q4 finished at: 2023-10-4 10:27:58:946:627 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:40:786:762 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:40:787:628 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - *(1) expected_result: - (0,1) (1,2) - (2) expected_result: - (0,1) (1,1) + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:27:59:449:707 - Q9 finished at: 2023-9-24 22:23:40:853:475 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:40:853:809 - -The current result is consistent with the [(1) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt index 14e6b238..3a6f12c6 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:42:34:246 +Q1 finished at: 2023-10-4 10:28:2:548:401 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:42:35:647 +Q1 finished at: 2023-10-4 10:28:2:548:810 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -26,42 +26,24 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:42:69:732 +Q2 finished at: 2023-10-4 10:28:2:560:863 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:42:134:217 + Q3 finished at: 2023-10-4 10:28:3:549:538 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:42:235:96 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:42:236:577 - Q3 finished at: 2023-9-24 22:23:42:250:333 + Q3 finished at: 2023-10-4 10:28:3:624:312 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:23:42:264:936 + Q4 finished at: 2023-10-4 10:28:3:640:162 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:42:266:197 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:42:335:93 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:23:42:469:40 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:42:469:378 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:28:4:143:339 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt index 2cfcf2cb..5fe3c986 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:45:743:668 +Q1 finished at: 2023-10-4 10:28:18:786:923 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:45:745:150 +Q1 finished at: 2023-10-4 10:28:18:788:527 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -26,42 +26,24 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:45:776:541 +Q2 finished at: 2023-10-4 10:28:18:825:132 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:45:843:678 + Q3 finished at: 2023-10-4 10:28:19:786:837 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:23:45:944:837 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:45:945:846 - Q3 finished at: 2023-9-24 22:23:45:946:289 + Q3 finished at: 2023-10-4 10:28:19:925:700 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:23:45:959:114 + Q4 finished at: 2023-10-4 10:28:19:942:678 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:45:960:257 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:45:960:967 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:23:46:26:467 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:46:26:799 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:28:20:445:748 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt index c123cbae..8b709c3b 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -17,9 +17,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:43:231:947 +Q1 finished at: 2023-10-4 10:28:8:377:206 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:43:233:461 +Q1 finished at: 2023-10-4 10:28:8:378:501 Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' current_result: (30,) @@ -28,51 +28,17 @@ Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' (2) expected_result: (330,) -Q2 finished at: 2023-9-24 22:23:43:275:516 +Q2 finished at: 2023-10-4 10:28:8:422:4 Q3-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 30);' -Q3 finished at: 2023-9-24 22:23:43:282:871 +Q3 finished at: 2023-10-4 10:28:8:428:163 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-24 22:23:43:331:495 + Q4 finished at: 2023-10-4 10:28:9:377:183 Q4-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:43:431:831 - Q4 finished at: 2023-9-24 22:23:43:439:86 + Q4 finished at: 2023-10-4 10:28:9:485:236 Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' - current_result: - (330,) - *(1) expected_result: - (330,) - (2) expected_result: - (300,) + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:28:10:2:754 - Q5 finished at: 2023-9-24 22:23:43:455:209 - Q6-T2 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 300);' - Q6 finished at: 2023-9-24 22:23:43:456:522 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:23:43:457:330 - Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' - current_result: - (330,) - *(1) expected_result: - (330,) - *(2) expected_result: - (330,) - - Q9 finished at: 2023-9-24 22:23:43:518:269 - Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' - current_result: - (330,) - *(1) expected_result: - (330,) - *(2) expected_result: - (330,) - - Q10 finished at: 2023-9-24 22:23:43:519:427 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:43:519:740 - -The current result is consistent with the [(1) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt index aa1182bf..2909d891 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -8,9 +8,46 @@ expected_result: The expected result is the expected query result for each SQL t set TXN_ISOLATION = serializable for each session ----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0 failed reason: 错误: must be owner of table account; errcode: 42501 -Q0 failed at: 2023-9-24 22:23:43:914:910 +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; + +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-10-4 10:28:13:243:611 +Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q1 finished at: 2023-10-4 10:28:13:244:994 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-10-4 10:28:13:265:353 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-10-4 10:28:14:243:699 + Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:28:14:377:65 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-10-4 10:28:14:407:777 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-10-4 10:28:14:411:312 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-10-4 10:28:14:412:42 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 failed reason: 错误: Heartbeat: Transaction e2d8197d-9fa7-4b37-8719-97648596fa38 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction e2d8197d-9fa7-4b37-8719-97648 errcode: 40001 +Q7 failed at: 2023-10-4 10:28:15:952:316 Test Result: Rollback -Reason: Err:错误: must be owner of table account; +Reason: Err:错误: Heartbeat: Transaction e2d8197d-9fa7-4b37-8719-97648596fa38 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction e2d8197d-9fa7-4b37-8719-97648 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt index 1fcb97b9..ca1103d2 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:47:123:589 +Q1 finished at: 2023-10-4 10:28:23:555:999 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:47:124:947 +Q1 finished at: 2023-10-4 10:28:23:557:380 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-24 22:23:47:159:600 +Q2 finished at: 2023-10-4 10:28:23:594:160 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:47:223:566 + Q3 finished at: 2023-10-4 10:28:24:556:69 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:47:322:550 - Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:47:339:657 + Q3 finished at: 2023-10-4 10:28:24:689:483 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,8 +56,11 @@ Q2 finished at: 2023-9-24 22:23:47:159:600 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:23:47:354:212 - Q5 finished at: 2023-9-24 22:23:47:370:896 + Q4 finished at: 2023-10-4 10:28:24:707:112 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:28:25:554:668 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5 finished at: 2023-10-4 10:28:25:608:402 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -77,17 +77,10 @@ Q2 finished at: 2023-9-24 22:23:47:159:600 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:23:47:385:733 + Q6 finished at: 2023-10-4 10:28:25:625:24 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-24 22:23:47:628:483 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:47:926:683 Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q7 failed at: 2023-9-24 22:23:48:126:517 - Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q8 failed at: 2023-9-24 22:23:48:333:246 +Q7 failed at: 2023-10-4 10:28:27:265:249 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt index d945a38e..dafc7908 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_causality_violation_anomaly.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_causality_violation_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:0:708:397 +Q1 finished at: 2023-10-4 10:29:9:662:600 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:24:0:709:992 +Q1 finished at: 2023-10-4 10:29:9:663:988 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,58 +34,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (6) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:24:0:745:659 +Q2 finished at: 2023-10-4 10:29:9:700:694 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:0:808:347 + Q3 finished at: 2023-10-4 10:29:10:662:695 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:24:0:907:142 - Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:24:0:925:14 + Q3 finished at: 2023-10-4 10:29:10:773:634 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-24 22:24:0:956:843 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q7 finished at: 2023-9-24 22:24:0:971:26 - Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-24 22:24:0:972:681 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:0:973:566 -Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,1) - (1) expected_result: - (1,0) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,1) - (4) expected_result: - (1,0) - *(5) expected_result: - (1,1) - *(6) expected_result: - (1,1) - -Q10 finished at: 2023-9-24 22:24:1:8:976 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-24 22:24:1:10:179 Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q4 failed at: 2023-9-24 22:24:1:341:855 + Q4 failed at: 2023-10-4 10:29:11:190:661 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt index a70593d4..79d11abd 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_cross_phenomenon.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_cross_phenomenon test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:57:853:861 +Q1 finished at: 2023-10-4 10:29:1:874:188 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:57:855:229 +Q1 finished at: 2023-10-4 10:29:1:875:564 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -50,14 +50,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (14) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:57:890:542 +Q2 finished at: 2023-10-4 10:29:1:912:254 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:57:953:821 + Q3 finished at: 2023-10-4 10:29:2:874:249 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:58:52:834 - Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:58:69:287 + Q3 finished at: 2023-10-4 10:29:2:979:146 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -90,57 +87,22 @@ Q2 finished at: 2023-9-24 22:23:57:890:542 *(14) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:23:58:82:714 - Q5 finished at: 2023-9-24 22:23:58:103:257 + Q4 finished at: 2023-10-4 10:29:2:995:582 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:29:3:874:282 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5 finished at: 2023-10-4 10:29:4:18:44 Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-24 22:23:58:117:191 + Q6 finished at: 2023-10-4 10:29:4:36:258 Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:23:58:118:177 + Q7 finished at: 2023-10-4 10:29:4:37:127 Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:23:58:152:856 + Q8 finished at: 2023-10-4 10:29:4:873:309 Q8-T4 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q8 finished at: 2023-9-24 22:23:58:209:801 + Q8 finished at: 2023-10-4 10:29:4:927:724 Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - (1) expected_result: - (0,0) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - (7) expected_result: - (0,0) - (8) expected_result: - (0,0) - *(9) expected_result: - (0,1) - *(10) expected_result: - (0,1) - *(11) expected_result: - (0,1) - (12) expected_result: - (0,0) - *(13) expected_result: - (0,1) - *(14) expected_result: - (0,1) - - Q11 finished at: 2023-9-24 22:23:58:255:22 - Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:58:256:105 -Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' Q9 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q9 failed at: 2023-9-24 22:23:59:123:446 -Q13 failed reason: 错误: Heartbeat: Transaction 38ce5fa2-3a8e-4209-9763-2e0dd02d37de expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 38ce5fa2-3a8e-4209-9763-2e0dd errcode: 40001 -Q13 failed at: 2023-9-24 22:23:59:662:91 + Q9 failed at: 2023-10-4 10:29:5:843:648 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt index 69ed233e..d7f63b32 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_delete.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:49:410:315 +Q1 finished at: 2023-10-4 10:28:34:483:85 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:49:411:677 +Q1 finished at: 2023-10-4 10:28:34:484:514 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: null -Q2 finished at: 2023-9-24 22:23:49:446:957 +Q2 finished at: 2023-10-4 10:28:34:522:655 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:49:510:226 + Q3 finished at: 2023-10-4 10:28:35:483:39 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:49:609:552 - Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:49:633:72 + Q3 finished at: 2023-10-4 10:28:35:569:837 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,8 +56,11 @@ Q2 finished at: 2023-9-24 22:23:49:446:957 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:23:49:649:898 - Q5 finished at: 2023-9-24 22:23:49:661:103 + Q4 finished at: 2023-10-4 10:28:35:585:753 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:28:36:483:30 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5 finished at: 2023-10-4 10:28:36:611:596 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -77,19 +77,10 @@ Q2 finished at: 2023-9-24 22:23:49:446:957 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:23:49:675:505 + Q6 finished at: 2023-10-4 10:28:36:628:364 Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-24 22:23:49:815:495 - Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-24 22:23:49:915:75 - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:23:50:113:349 - Q12-T3 execute opt: 'COMMIT'; Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q7 failed at: 2023-9-24 22:23:50:413:355 - Q12 failed reason: 错误: Heartbeat: Transaction 8a7e2762-0c89-4c64-84d6-32a9069c98d9 expired or aborted by a conflict: 40001 errcode: 40001 - Q12 failed at: 2023-9-24 22:23:51:416:350 +Q7 failed at: 2023-10-4 10:28:38:193:42 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt index 4a903fb2..60dd93de 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_predicate_based_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:52:580:131 +Q1 finished at: 2023-10-4 10:28:45:326:842 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:52:581:581 +Q1 finished at: 2023-10-4 10:28:45:328:336 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: null @@ -32,14 +32,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-24 22:23:52:627:453 +Q2 finished at: 2023-10-4 10:28:45:375:752 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:52:680:53 + Q3 finished at: 2023-10-4 10:28:46:326:740 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:52:779:460 - Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:52:803:416 + Q3 finished at: 2023-10-4 10:28:46:404:501 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: null @@ -56,8 +53,11 @@ Q2 finished at: 2023-9-24 22:23:52:627:453 *(6) expected_result: null - Q4 finished at: 2023-9-24 22:23:52:819:106 - Q5 finished at: 2023-9-24 22:23:52:830:849 + Q4 finished at: 2023-10-4 10:28:46:421:381 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:28:47:326:913 + Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q5 finished at: 2023-10-4 10:28:47:411:15 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: null @@ -74,17 +74,10 @@ Q2 finished at: 2023-9-24 22:23:52:627:453 *(6) expected_result: null - Q6 finished at: 2023-9-24 22:23:52:843:635 + Q6 finished at: 2023-10-4 10:28:47:424:475 Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-24 22:23:53:85:198 - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:53:383:300 Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q7 failed at: 2023-9-24 22:23:53:583:123 - Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q8 failed at: 2023-9-24 22:23:53:789:875 +Q7 failed at: 2023-10-4 10:28:49:37:413 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt index edbe98c6..6dadd04c 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:2:348:368 +Q1 finished at: 2023-10-4 10:29:15:410:551 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:24:2:348:767 +Q1 finished at: 2023-10-4 10:29:15:411:912 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,7 +34,7 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(6) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:24:2:361:615 +Q2 finished at: 2023-10-4 10:29:15:449:364 Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -51,11 +51,11 @@ Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,20) -Q3 finished at: 2023-9-24 22:24:2:363:976 +Q3 finished at: 2023-10-4 10:29:15:458:59 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-24 22:24:2:448:354 + Q4 finished at: 2023-10-4 10:29:16:410:538 Q4-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q4 finished at: 2023-9-24 22:24:2:499:362 + Q4 finished at: 2023-10-4 10:29:16:544:530 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -72,55 +72,11 @@ Q3 finished at: 2023-9-24 22:24:2:363:976 *(6) expected_result: (1,0) - Q5 finished at: 2023-9-24 22:24:2:513:559 + Q5 finished at: 2023-10-4 10:29:16:562:190 Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-24 22:24:2:514:976 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:2:515:652 - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:24:2:548:721 - Q8-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q8 finished at: 2023-9-24 22:24:2:606:988 - Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,11) - (2) expected_result: - (0,11) - *(3) expected_result: - (0,0) - (4) expected_result: - (0,11) - *(5) expected_result: - (0,0) - *(6) expected_result: - (0,0) - - Q9 finished at: 2023-9-24 22:24:2:623:149 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,20) - *(1) expected_result: - (1,20) - (2) expected_result: - (1,0) - *(3) expected_result: - (1,20) - *(4) expected_result: - (1,20) - (5) expected_result: - (1,0) - (6) expected_result: - (1,0) - - Q10 finished at: 2023-9-24 22:24:2:624:814 - Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:24:2:625:667 -Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 failed reason: 错误: Unknown transaction, could be recently aborted: 895e90f6-4c98-4dcb-862c-0c1783d99805; errcode: 40001 -Q12 failed at: 2023-9-24 22:24:3:859:189 + Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q6 failed at: 2023-10-4 10:29:17:165:167 Test Result: Rollback -Reason: Err:错误: Unknown transaction, could be recently aborted: 895e90f6-4c98-4dcb-862c-0c1783d99805; +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt index 8099850e..aef23058 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_mda_step_iat_uname_anomaly.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_uname_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:54:950:164 +Q1 finished at: 2023-10-4 10:28:56:11:999 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:54:951:658 +Q1 finished at: 2023-10-4 10:28:56:12:577 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,1) -Q2 finished at: 2023-9-24 22:23:54:987:566 +Q2 finished at: 2023-10-4 10:28:56:29:446 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:55:50:141 + Q3 finished at: 2023-10-4 10:28:57:13:139 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-24 22:23:55:149:380 - Q9-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:55:176:236 + Q3 finished at: 2023-10-4 10:28:57:158:3 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,9 +56,9 @@ Q2 finished at: 2023-9-24 22:23:54:987:566 (6) expected_result: (0,2) - Q4 finished at: 2023-9-24 22:23:55:191:525 + Q4 finished at: 2023-10-4 10:28:57:175:178 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:55:192:914 + Q5 finished at: 2023-10-4 10:28:57:176:569 Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -78,73 +75,11 @@ Q2 finished at: 2023-9-24 22:23:54:987:566 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:23:55:194:294 + Q6 finished at: 2023-10-4 10:28:57:179:814 Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-24 22:23:55:195:891 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:55:196:688 - Q9 finished at: 2023-9-24 22:23:55:205:205 - Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,0) - *(1) expected_result: - (2,0) - *(2) expected_result: - (2,0) - *(3) expected_result: - (2,0) - *(4) expected_result: - (2,0) - *(5) expected_result: - (2,0) - *(6) expected_result: - (2,0) - - Q10 finished at: 2023-9-24 22:23:55:220:594 - Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-24 22:23:55:221:912 - Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - *(3) expected_result: - (0,1) - *(4) expected_result: - (0,1) - (5) expected_result: - (0,0) - (6) expected_result: - (0,0) - - Q12 finished at: 2023-9-24 22:23:55:223:300 - Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-24 22:23:55:224:345 - Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:23:55:225:164 -Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - current_result: - (2,1) - (1) expected_result: - (2,0) - (2) expected_result: - (2,0) - (3) expected_result: - (2,0) - (4) expected_result: - (2,2) - *(5) expected_result: - (2,1) - *(6) expected_result: - (2,1) - -Q15 finished at: 2023-9-24 22:23:55:251:59 -Q16-T1 execute opt: 'COMMIT'; -Q16 failed reason: 错误: Transaction 54202090-6c16-4a53-9e55-82d922f7c05a expired or aborted by a conflict: 40001 errcode: 40001 -Q16 failed at: 2023-9-24 22:23:56:853:692 + Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q7 failed at: 2023-10-4 10:28:57:882:697 Test Result: Rollback -Err:错误: Transaction 54202090-6c16-4a53-9e55-82d922f7c05a expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt index eafc8857..26bad2d2 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_sda_lost_update_committed.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_lost_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:37:402:133 +Q1 finished at: 2023-10-4 10:27:46:756:629 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:37:403:507 +Q1 finished at: 2023-10-4 10:27:46:757:972 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,33 +25,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:23:37:438:79 +Q2 finished at: 2023-10-4 10:27:46:794:877 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:37:502:62 + Q3 finished at: 2023-10-4 10:27:47:756:580 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-24 22:23:37:603:80 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:37:604:555 - Q3 finished at: 2023-9-24 22:23:37:622:14 + Q3 finished at: 2023-10-4 10:27:47:831:466 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:37:637:64 + Q4 finished at: 2023-10-4 10:27:47:848:496 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:23:37:638:286 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:23:37:695:738 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:37:696:73 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 finished at: 2023-10-4 10:27:47:849:348 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: 错误: Heartbeat: Transaction 8e2473ee-9e04-4c7d-8a74-d9e6ba88174e expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 8e2473ee-9e04-4c7d-8a74-d9e6b errcode: 40001 +Q6 failed at: 2023-10-4 10:27:49:366:92 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 8e2473ee-9e04-4c7d-8a74-d9e6ba88174e expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 8e2473ee-9e04-4c7d-8a74-d9e6b diff --git a/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt index eb84edba..ddc913cd 100644 --- a/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/iat_sda_non_repeatable_read_committed.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_non_repeatable_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:36:49:606 +Q1 finished at: 2023-10-4 10:27:41:974:175 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:36:51:95 +Q1 finished at: 2023-10-4 10:27:41:975:741 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,40 +25,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:36:86:463 +Q2 finished at: 2023-10-4 10:27:42:12:502 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:36:149:575 + Q3 finished at: 2023-10-4 10:27:42:974:168 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q6 finished at: 2023-9-24 22:23:36:249:667 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:36:250:714 - Q3 finished at: 2023-9-24 22:23:36:255:208 + Q3 finished at: 2023-10-4 10:27:43:91:718 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:36:269:786 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:23:36:270:775 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:23:36:330:799 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:36:331:147 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:27:43:506:616 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt index 5dd147af..c305f41a 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1.txt @@ -15,19 +15,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:45:265:663 +Q1 finished at: 2023-10-4 10:24:30:332:873 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:45:267:153 +Q1 finished at: 2023-10-4 10:24:30:334:251 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:45:301:792 +Q2 finished at: 2023-10-4 10:24:30:370:650 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:45:365:773 + Q3 finished at: 2023-10-4 10:24:31:332:872 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-24 22:22:45:466:361 - Q3 finished at: 2023-9-24 22:22:45:489:806 + Q3 finished at: 2023-10-4 10:24:31:407:492 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:45:503:706 + Q4 finished at: 2023-10-4 10:24:31:421:891 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -36,13 +34,11 @@ Q6 finished at: 2023-9-24 22:22:45:466:361 *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:22:45:505:578 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:22:45:568:145 -Q8-T1 execute opt: 'COMMIT'; -Q8 failed reason: 错误: Heartbeat: Transaction a1979ca3-55f5-487a-9c64-6d934ebbdf23 expired or aborted by a conflict: 40001 errcode: 40001 -Q8 failed at: 2023-9-24 22:22:46:471:528 + Q5 finished at: 2023-10-4 10:24:31:425:112 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 failed reason: 错误: Heartbeat: Transaction c3e44cf6-54a4-49f2-89c9-9d47196c6732 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction c3e44cf6-54a4-49f2-89c9-9d471 errcode: 40001 +Q6 failed at: 2023-10-4 10:24:32:942:131 Test Result: Rollback -Err:错误: Heartbeat: Transaction a1979ca3-55f5-487a-9c64-6d934ebbdf23 expired or aborted by a conflict: 40001 +Reason: Err:错误: Heartbeat: Transaction c3e44cf6-54a4-49f2-89c9-9d47196c6732 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction c3e44cf6-54a4-49f2-89c9-9d471 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt index 3f2fc512..dfec5781 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew1_committed.txt @@ -15,46 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:47:567:706 +Q1 finished at: 2023-10-4 10:24:36:978:756 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:47:569:140 +Q1 finished at: 2023-10-4 10:24:36:980:405 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:47:603:230 +Q2 finished at: 2023-10-4 10:24:36:994:60 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:47:667:634 + Q3 finished at: 2023-10-4 10:24:37:977:277 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-24 22:22:47:770:51 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:22:47:772:607 - Q3 finished at: 2023-9-24 22:22:47:802:758 + Q3 finished at: 2023-10-4 10:24:38:22:342 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:47:817:847 + Q4 finished at: 2023-10-4 10:24:38:39:976 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:24:38:543:260 - Q5 finished at: 2023-9-24 22:22:47:819:644 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:47:820:613 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-24 22:22:47:884:341 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:47:884:705 - -The current result is consistent with the [(1) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt index 469cfc60..e225a198 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_double_write_skew2.txt @@ -15,14 +15,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:48:794:727 +Q1 finished at: 2023-10-4 10:24:41:817:181 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:48:796:184 +Q1 finished at: 2023-10-4 10:24:41:818:610 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:48:831:37 +Q2 finished at: 2023-10-4 10:24:41:855:113 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:48:894:683 + Q3 finished at: 2023-10-4 10:24:42:816:955 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:24:42:923:458 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-10-4 10:24:42:940:984 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-10-4 10:24:42:944:114 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -31,30 +36,13 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (2) expected_result: (1,1) -Q6 finished at: 2023-9-24 22:22:48:995:375 +Q6 finished at: 2023-10-4 10:24:43:821:919 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:22:48:996:500 - Q3 finished at: 2023-9-24 22:22:49:7:269 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:49:24:426 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:22:49:25:657 +Q7 finished at: 2023-10-4 10:24:43:825:426 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:22:49:97:313 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:22:49:241:289 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:49:241:616 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q8 failed reason: 错误: Heartbeat: Transaction 05053ca1-4284-4bef-bc81-c2b85db9ee4d expired or aborted by a conflict: 40001 errcode: 40001 + Q8 failed at: 2023-10-4 10:24:45:624:250 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Err:错误: Heartbeat: Transaction 05053ca1-4284-4bef-bc81-c2b85db9ee4d expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt index 0b60225d..24911e7c 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:50:382:933 +Q1 finished at: 2023-10-4 10:24:48:379:367 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:50:384:304 +Q1 finished at: 2023-10-4 10:24:48:380:944 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,20 +26,16 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:22:50:418:958 +Q2 finished at: 2023-10-4 10:24:48:419:461 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:50:482:530 + Q3 finished at: 2023-10-4 10:24:49:379:368 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:22:50:543:592 + Q3 finished at: 2023-10-4 10:24:49:480:592 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:50:558:465 + Q4 finished at: 2023-10-4 10:24:49:496:760 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:22:50:559:748 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:22:50:685:620 -Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q6 failed at: 2023-9-24 22:22:51:193:232 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:24:49:999:330 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt index 59c0c706..8fe47f50 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2.txt @@ -15,53 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:54:977:720 +Q1 finished at: 2023-10-4 10:25:5:629:639 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:54:979:82 +Q1 finished at: 2023-10-4 10:25:5:631:95 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:55:14:144 +Q2 finished at: 2023-10-4 10:25:5:667:158 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:55:77:587 + Q3 finished at: 2023-10-4 10:25:6:629:615 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:22:55:178:647 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:22:55:180:207 - Q3 finished at: 2023-9-24 22:22:55:197:139 + Q3 finished at: 2023-10-4 10:25:6:739:404 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:22:55:213:84 + Q4 finished at: 2023-10-4 10:25:6:754:615 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-24 22:22:55:214:434 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:22:55:280:160 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:22:55:421:274 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:55:421:611 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:25:7:256:923 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt index 7c7f3716..c551ac70 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew2_committed.txt @@ -15,53 +15,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:56:318:810 +Q1 finished at: 2023-10-4 10:25:11:665:890 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:56:320:135 +Q1 finished at: 2023-10-4 10:25:11:667:303 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:56:353:698 +Q2 finished at: 2023-10-4 10:25:11:703:149 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:56:418:806 + Q3 finished at: 2023-10-4 10:25:12:665:884 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:22:56:519:473 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:22:56:520:813 - Q3 finished at: 2023-9-24 22:22:56:534:306 + Q3 finished at: 2023-10-4 10:25:12:785:233 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:22:56:550:80 + Q4 finished at: 2023-10-4 10:25:12:803:651 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: - (0,0) - - Q5 finished at: 2023-9-24 22:22:56:551:834 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:56:552:918 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:22:56:616:259 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:56:616:599 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:25:13:307:158 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt index f817319c..7b351445 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_delete.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:52:438:642 +Q1 finished at: 2023-10-4 10:24:55:144:630 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:52:440:31 +Q1 finished at: 2023-10-4 10:24:55:146:48 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -26,40 +26,21 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-24 22:22:52:475:428 +Q2 finished at: 2023-10-4 10:24:55:183:450 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:52:538:637 + Q3 finished at: 2023-10-4 10:24:56:144:501 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (1,0) (0,0) - (1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-24 22:22:52:639:11 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:22:52:639:991 - Q3 finished at: 2023-9-24 22:22:52:642:440 + Q3 finished at: 2023-10-4 10:24:56:243:632 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:52:657:379 + Q4 finished at: 2023-10-4 10:24:56:258:448 Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:22:52:658:429 + Q5 finished at: 2023-10-4 10:24:56:261:392 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:52:659:120 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - null - *(1) expected_result: - null - *(2) expected_result: - null - - Q9 finished at: 2023-9-24 22:22:52:723:597 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:52:723:935 + Q6 finished at: 2023-10-4 10:24:56:262:319 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' +Q7 failed reason: 错误: Heartbeat: Transaction 6d20edea-23d0-4d1e-9c50-cd21b79a915a expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 6d20edea-23d0-4d1e-9c50-cd21b errcode: 40001 +Q7 failed at: 2023-10-4 10:24:57:853:350 -Test Result: Anomaly -Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 6d20edea-23d0-4d1e-9c50-cd21b79a915a expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 6d20edea-23d0-4d1e-9c50-cd21b diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt index 82f36487..97f4f9ff 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_read_skew_predicate_based_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:53:698:353 +Q1 finished at: 2023-10-4 10:25:0:862:957 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:53:699:771 +Q1 finished at: 2023-10-4 10:25:0:864:436 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -24,42 +24,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-24 22:22:53:745:430 +Q2 finished at: 2023-10-4 10:25:0:912:259 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:53:798:304 + Q3 finished at: 2023-10-4 10:25:1:863:23 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) (1,0) - -Q7 finished at: 2023-9-24 22:22:53:898:864 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:22:53:900:114 - Q3 finished at: 2023-9-24 22:22:53:916:912 + Q3 finished at: 2023-10-4 10:25:1:997:359 Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-24 22:22:53:924:534 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-24 22:22:53:925:639 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:53:926:258 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,0) (1,0) - *(1) expected_result: - (0,0) (1,0) - *(2) expected_result: - (0,0) (1,0) - - Q9 finished at: 2023-9-24 22:22:53:990:833 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:53:991:194 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:25:2:406:338 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt index eff366a6..6b7d72fc 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew.txt @@ -15,41 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:41:579:68 +Q1 finished at: 2023-10-4 10:24:18:318:445 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:41:580:353 +Q1 finished at: 2023-10-4 10:24:18:319:828 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:41:611:157 +Q2 finished at: 2023-10-4 10:24:18:336:377 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:41:679:272 + Q3 finished at: 2023-10-4 10:24:19:318:515 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - -Q6 finished at: 2023-9-24 22:22:41:779:671 - Q3 finished at: 2023-9-24 22:22:41:782:482 + Q3 finished at: 2023-10-4 10:24:19:438:407 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:41:796:570 + Q4 finished at: 2023-10-4 10:24:19:455:275 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,0) - - Q5 finished at: 2023-9-24 22:22:41:797:948 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:22:41:881:586 -Q8-T1 execute opt: 'COMMIT'; -Q8 failed reason: 错误: Heartbeat: Transaction b15c03c7-9756-4679-98b5-8f46d69020a3 expired or aborted by a conflict: 40001 errcode: 40001 -Q8 failed at: 2023-9-24 22:22:42:785:210 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:24:19:958:113 Test Result: Rollback -Err:错误: Heartbeat: Transaction b15c03c7-9756-4679-98b5-8f46d69020a3 expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt index 900ee0f7..0c9bb7f5 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_dda_write_read_skew_committed.txt @@ -15,53 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:43:811:440 +Q1 finished at: 2023-10-4 10:24:24:844:923 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:43:812:847 +Q1 finished at: 2023-10-4 10:24:24:846:493 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:43:846:693 +Q2 finished at: 2023-10-4 10:24:24:865:632 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:43:911:328 + Q3 finished at: 2023-10-4 10:24:25:844:632 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - -Q7 finished at: 2023-9-24 22:22:44:12:72 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:22:44:13:366 - Q3 finished at: 2023-9-24 22:22:44:29:804 + Q3 finished at: 2023-10-4 10:24:25:946:403 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:44:44:434 + Q4 finished at: 2023-10-4 10:24:25:962:97 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: + *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:22:44:45:674 + Q5 finished at: 2023-10-4 10:24:25:965:605 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:44:46:894 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:22:44:114:767 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:22:44:115:96 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q6 finished at: 2023-10-4 10:24:25:966:528 +Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q7 failed reason: 错误: Heartbeat: Transaction 6bd4f7be-223f-474d-8fe3-aab5e7297cf7 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 6bd4f7be-223f-474d-8fe3-aab5e errcode: 40001 +Q7 failed at: 2023-10-4 10:24:27:553:882 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 6bd4f7be-223f-474d-8fe3-aab5e7297cf7 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 6bd4f7be-223f-474d-8fe3-aab5e diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt index ccc4dc93..b8ae5cd8 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat.txt @@ -16,48 +16,20 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:57:808:458 +Q1 finished at: 2023-10-4 10:25:16:401:935 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:57:809:881 +Q1 finished at: 2023-10-4 10:25:16:403:232 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:57:844:91 +Q2 finished at: 2023-10-4 10:25:16:439:683 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:57:908:583 + Q3 finished at: 2023-10-4 10:25:17:400:586 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:22:58:7:641 - Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:22:58:37:350 + Q3 finished at: 2023-10-4 10:25:17:445:583 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:22:58:51:315 + Q4 finished at: 2023-10-4 10:25:17:461:504 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,1) - (2) expected_result: - (0,1) - *(3) expected_result: - (0,0) - *(4) expected_result: - (0,0) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - - Q5 finished at: 2023-9-24 22:22:58:53:587 - Q6 finished at: 2023-9-24 22:22:58:65:958 - Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-24 22:22:58:79:929 - Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:22:58:211:283 - Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q8 failed at: 2023-9-24 22:22:58:883:482 -Q9 failed reason: 错误: Unknown transaction, could be recently aborted: 43a87a0c-78e7-4c04-8515-9f5d9bde69d6; errcode: 40001 -Q9 failed at: 2023-9-24 22:22:59:10:224 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:25:17:964:384 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt index 563a3d9c..3713bd17 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_long_fork.txt @@ -15,15 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_long_fork test run---------- Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-24 22:22:59:856:272 + Q1 finished at: 2023-10-4 10:25:24:123:447 Q1-T4 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-24 22:22:59:955:545 -Q3-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q3 finished at: 2023-9-24 22:22:59:956:627 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-24 22:22:59:975:870 - Q1 finished at: 2023-9-24 22:22:59:994:731 + Q1 finished at: 2023-10-4 10:25:24:241:804 Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -56,126 +50,15 @@ Q4 finished at: 2023-9-24 22:22:59:975:870 *(14) expected_result: (0,0) - Q2 finished at: 2023-9-24 22:23:0:10:639 - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:0:54:973 - Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q5 finished at: 2023-9-24 22:23:0:135:36 - Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - *(2) expected_result: - (1,0) - (3) expected_result: - (1,1) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - (7) expected_result: - (1,1) - *(8) expected_result: - (1,0) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - *(11) expected_result: - (1,0) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - (14) expected_result: - (1,1) - - Q6 finished at: 2023-9-24 22:23:0:150:843 - Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - (3) expected_result: - (0,1) - (4) expected_result: - (0,1) - (5) expected_result: - (0,1) - *(6) expected_result: - (0,0) - (7) expected_result: - (0,1) - (8) expected_result: - (0,1) - (9) expected_result: - (0,1) - *(10) expected_result: - (0,0) - *(11) expected_result: - (0,0) - *(12) expected_result: - (0,0) - (13) expected_result: - (0,1) - *(14) expected_result: - (0,0) - - Q7 finished at: 2023-9-24 22:23:0:152:635 - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:23:0:154:720 - Q8-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q8 finished at: 2023-9-24 22:23:0:203:999 - Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-24 22:23:0:218:566 - Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - *(3) expected_result: - (1,0) - (4) expected_result: - (1,1) - *(5) expected_result: - (1,0) - (6) expected_result: - (1,1) - *(7) expected_result: - (1,0) - (8) expected_result: - (1,1) - (9) expected_result: - (1,1) - (10) expected_result: - (1,1) - (11) expected_result: - (1,1) - *(12) expected_result: - (1,0) - *(13) expected_result: - (1,0) - *(14) expected_result: - (1,0) - - Q10 finished at: 2023-9-24 22:23:0:263:127 -Q11-T1 execute opt: 'COMMIT'; - Q12-T2 execute opt: 'COMMIT'; - Q13-T3 execute opt: 'COMMIT'; -Q11 failed reason: 错误: Heartbeat: Transaction 803bce77-0f9f-432a-a0fa-39e2d9b7908b expired or aborted by a conflict: 40001 errcode: 40001 -Q11 failed at: 2023-9-24 22:23:1:462:200 - Q12 failed reason: 错误: Transaction bca0ff1f-ccf1-46e5-8e70-46cbec3e940c expired or aborted by a conflict: 40001 errcode: 40001 - Q12 failed at: 2023-9-24 22:23:1:661:296 - Q13 failed reason: 错误: Heartbeat: Transaction c560518f-7567-4844-8102-99dd57f20600 expired or aborted by a conflict: 40001 errcode: 40001 - Q13 failed at: 2023-9-24 22:23:1:859:956 + Q2 finished at: 2023-10-4 10:25:24:259:529 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-10-4 10:25:25:123:439 +Q3-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' +Q3 finished at: 2023-10-4 10:25:25:124:870 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q4 failed at: 2023-10-4 10:25:25:561:896 Test Result: Rollback -Err:错误: Heartbeat: Transaction 803bce77-0f9f-432a-a0fa-39e2d9b7908b expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt index 03d3f44e..d582cb1f 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_delete.txt @@ -16,48 +16,43 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:2:943:73 +Q1 finished at: 2023-10-4 10:25:33:821:403 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:2:944:520 +Q1 finished at: 2023-10-4 10:25:33:822:809 Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:2:980:136 +Q2 finished at: 2023-10-4 10:25:33:858:898 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:3:43:191 + Q3 finished at: 2023-10-4 10:25:34:821:353 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:23:3:142:119 - Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:3:157:194 + Q3 finished at: 2023-10-4 10:25:34:930:807 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:3:172:140 + Q4 finished at: 2023-10-4 10:25:34:946:891 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' - Q6 finished at: 2023-9-24 22:23:3:192:133 + current_result: + (1,) + (1) expected_result: + (,) + (2) expected_result: + (,) + *(3) expected_result: + (1,) + *(4) expected_result: + (1,) + (5) expected_result: + (,) + *(6) expected_result: + (1,) + + Q5 finished at: 2023-10-4 10:25:34:952:957 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:25:35:821:476 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6 finished at: 2023-10-4 10:25:35:888:279 Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-24 22:23:3:206:860 + Q7 finished at: 2023-10-4 10:25:35:904:289 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' - current_result: - (1,) - (1) expected_result: - (,) - *(2) expected_result: - (1,) - (3) expected_result: - (,) - *(4) expected_result: - (1,) - *(5) expected_result: - (1,) - *(6) expected_result: - (1,) - - Q8 finished at: 2023-9-24 22:23:3:210:647 -Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:3:445:850 - Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q5 failed at: 2023-9-24 22:23:3:678:462 -Q9 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q9 failed at: 2023-9-24 22:23:4:148:685 + Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q8 failed at: 2023-10-4 10:25:36:710:730 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt index 3ab04c7c..6269879a 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_mda_step_rat_predicate_based_insert.txt @@ -13,17 +13,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:5:360:653 +Q1 finished at: 2023-10-4 10:25:41:559:753 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:5:362:141 +Q1 finished at: 2023-10-4 10:25:41:561:70 Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-24 22:23:5:382:926 +Q2 finished at: 2023-10-4 10:25:41:574:656 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:5:460:732 + Q3 finished at: 2023-10-4 10:25:42:559:643 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:5:537:135 + Q3 finished at: 2023-10-4 10:25:42:664:988 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-24 22:23:5:543:384 + Q4 finished at: 2023-10-4 10:25:42:673:393 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: (,) @@ -40,22 +40,34 @@ Q2 finished at: 2023-9-24 22:23:5:382:926 (6) expected_result: (1,) - Q5 finished at: 2023-9-24 22:23:5:556:306 + Q5 finished at: 2023-10-4 10:25:42:685:955 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:23:5:559:385 + Q6 finished at: 2023-10-4 10:25:43:559:831 Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q6 finished at: 2023-9-24 22:23:5:604:337 + Q6 finished at: 2023-10-4 10:25:43:713:869 Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-24 22:23:5:611:365 + Q7 finished at: 2023-10-4 10:25:43:724:272 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' + current_result: + (,) + (1) expected_result: + (1,) + (2) expected_result: + (1,) + *(3) expected_result: + (,) + *(4) expected_result: + (,) + (5) expected_result: + (1,) + *(6) expected_result: + (,) + + Q8 finished at: 2023-10-4 10:25:43:737:813 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:23:5:763:188 - Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q8 failed at: 2023-9-24 22:23:6:423:327 -Q9 failed reason: 错误: Unknown transaction, could be recently aborted: c576f5af-e562-4c84-b140-d5293d6e03a4; errcode: 40001 -Q9 failed at: 2023-9-24 22:23:6:576:454 +Q9 failed reason: 错误: Heartbeat: Transaction 46a81d7d-9d1c-4180-99ba-7ea8c50e8451 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 46a81d7d-9d1c-4180-99ba-7ea8c errcode: 40001 +Q9 failed at: 2023-10-4 10:25:45:502:996 Test Result: Rollback -Reason: Err:错误: 由于同步更新而无法串行访问 +Reason: Err:错误: Heartbeat: Transaction 46a81d7d-9d1c-4180-99ba-7ea8c50e8451 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 46a81d7d-9d1c-4180-99ba-7ea8c diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt index 95b40f5d..e19c3b49 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_dirty_read.txt @@ -14,38 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_dirty_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:30:341:841 +Q1 finished at: 2023-10-4 10:23:37:809:697 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:30:343:337 +Q1 finished at: 2023-10-4 10:23:37:810:280 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:30:376:857 +Q2 finished at: 2023-10-4 10:23:37:828:647 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:30:441:785 + Q3 finished at: 2023-10-4 10:23:38:811:511 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q5-T1 execute opt: 'ROLLBACK'; - Q3 finished at: 2023-9-24 22:22:30:540:828 + Q3 finished at: 2023-10-4 10:23:38:888:180 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' -Q5 finished at: 2023-9-24 22:22:30:541:480 - current_result: - (0,0) - *(1) expected_result: - (0,0) + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:23:39:304:649 - Q4 finished at: 2023-9-24 22:22:30:555:607 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:30:644:292 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - - Q7 finished at: 2023-9-24 22:22:30:787:791 - Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:22:30:788:119 - -The current result is consistent with the [(1) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt index 0a5c6446..b55451bd 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read.txt @@ -14,32 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:33:384:718 +Q1 finished at: 2023-10-4 10:23:50:391:370 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:33:386:75 +Q1 finished at: 2023-10-4 10:23:50:392:948 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:33:420:618 +Q2 finished at: 2023-10-4 10:23:50:428:893 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:33:484:746 + Q3 finished at: 2023-10-4 10:23:51:391:185 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-24 22:22:33:585:631 - Q3 finished at: 2023-9-24 22:22:33:600:994 + Q3 finished at: 2023-10-4 10:23:51:507:754 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - (1) expected_result: - (0,2) - *(2) expected_result: - (0,0) - - Q4 finished at: 2023-9-24 22:22:33:616:510 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:22:33:687:218 -Q7-T1 execute opt: 'COMMIT'; -Q7 failed reason: 错误: Transaction 43260acb-851a-4d60-b137-7c315fc795f1 expired or aborted by a conflict: 40001 errcode: 40001 -Q7 failed at: 2023-9-24 22:22:34:491:153 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:23:51:925:305 Test Result: Rollback -Err:错误: Transaction 43260acb-851a-4d60-b137-7c315fc795f1 expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt index 682a9e5d..457e8393 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_intermediate_read_committed.txt @@ -14,15 +14,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:35:423:183 +Q1 finished at: 2023-10-4 10:23:57:48:735 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:35:424:597 +Q1 finished at: 2023-10-4 10:23:57:50:156 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:35:457:136 +Q2 finished at: 2023-10-4 10:23:57:86:127 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:35:522:66 + Q3 finished at: 2023-10-4 10:23:58:48:477 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:22:35:569:139 + Q3 finished at: 2023-10-4 10:23:58:170:772 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -31,13 +31,13 @@ Q2 finished at: 2023-9-24 22:22:35:457:136 *(2) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:22:35:581:156 + Q4 finished at: 2023-10-4 10:23:58:186:397 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:22:35:582:462 + Q5 finished at: 2023-10-4 10:23:58:187:86 Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 failed reason: 错误: Unknown transaction, could be recently aborted: 0c621dcd-03fd-4163-8b9a-87e52d15b4d8; errcode: 40001 -Q6 failed at: 2023-9-24 22:22:36:225:235 +Q6 failed reason: 错误: Heartbeat: Transaction bc3b7206-50fb-43d8-b17a-0af6cdaf96a3 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction bc3b7206-50fb-43d8-b17a-0af6c errcode: 40001 +Q6 failed at: 2023-10-4 10:23:59:658:126 Test Result: Rollback -Reason: Err:错误: Unknown transaction, could be recently aborted: 0c621dcd-03fd-4163-8b9a-87e52d15b4d8; +Reason: Err:错误: Heartbeat: Transaction bc3b7206-50fb-43d8-b17a-0af6cdaf96a3 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction bc3b7206-50fb-43d8-b17a-0af6c diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt index bf176502..2126733c 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_lost_self_update.txt @@ -14,14 +14,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_lost_self_update test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:39:996:757 +Q1 finished at: 2023-10-4 10:24:11:936:713 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:39:998:156 +Q1 finished at: 2023-10-4 10:24:11:938:70 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:22:40:32:24 +Q2 finished at: 2023-10-4 10:24:11:952:477 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:40:96:724 + Q3 finished at: 2023-10-4 10:24:12:936:509 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:24:13:62:432 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-10-4 10:24:13:80:411 Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,28 +33,13 @@ Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(2) expected_result: (0,1) -Q5 finished at: 2023-9-24 22:22:40:198:713 +Q5 finished at: 2023-10-4 10:24:13:942:90 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:22:40:200:578 - Q3 finished at: 2023-9-24 22:22:40:224:53 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:22:40:239:182 +Q6 finished at: 2023-10-4 10:24:13:945:661 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:22:40:299:354 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:22:40:438:367 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:22:40:438:700 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q7 failed reason: 错误: Heartbeat: Transaction 29aec9c8-7907-4971-8374-a5f067268fc8 expired or aborted by a conflict: 40001 errcode: 40001 + Q7 failed at: 2023-10-4 10:24:15:643:523 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Err:错误: Heartbeat: Transaction 29aec9c8-7907-4971-8374-a5f067268fc8 expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt index 4ab2d301..e6dbe74c 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:31:766:932 +Q1 finished at: 2023-10-4 10:23:43:767:698 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:31:768:290 +Q1 finished at: 2023-10-4 10:23:43:769:132 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,25 +25,14 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:22:31:802:226 +Q2 finished at: 2023-10-4 10:23:43:804:748 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:31:867:87 + Q3 finished at: 2023-10-4 10:23:44:767:678 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - (2) expected_result: - (0,1) - -Q5 finished at: 2023-9-24 22:22:31:967:142 - Q3 finished at: 2023-9-24 22:22:31:970:904 + Q3 finished at: 2023-10-4 10:23:44:900:961 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:22:32:169:696 Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q4 failed at: 2023-9-24 22:22:32:385:295 + Q4 failed at: 2023-10-4 10:23:45:316:603 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index 43bb0639..7d71a993 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:37:293:136 +Q1 finished at: 2023-10-4 10:24:2:422:522 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:37:294:631 +Q1 finished at: 2023-10-4 10:24:2:422:974 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -25,40 +25,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:22:37:329:956 +Q2 finished at: 2023-10-4 10:24:2:437:888 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:37:393:121 + Q3 finished at: 2023-10-4 10:24:3:423:925 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - (0,0) - (1) expected_result: - null - *(2) expected_result: - (0,0) - -Q6 finished at: 2023-9-24 22:22:37:494:149 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:22:37:495:530 - Q3 finished at: 2023-9-24 22:22:37:510:433 + Q3 finished at: 2023-10-4 10:24:3:482:778 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-24 22:22:37:526:241 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:22:37:527:124 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - null - (1) expected_result: - (0,0) - *(2) expected_result: - null - - Q8 finished at: 2023-9-24 22:22:37:583:187 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:22:37:583:517 - -The current result is consistent with the [(2) expected_result] of serial scheduling + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:24:3:896:223 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index c71fb578..5ebeaab3 100644 --- a/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/test_result/centralizend_result/yugabyte/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:22:38:513:865 +Q1 finished at: 2023-10-4 10:24:7:3:303 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:22:38:515:309 +Q1 finished at: 2023-10-4 10:24:7:4:710 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -24,40 +24,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:22:38:560:956 +Q2 finished at: 2023-10-4 10:24:7:51:690 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:22:38:613:694 + Q3 finished at: 2023-10-4 10:24:8:3:181 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' - current_result: - null - *(1) expected_result: - null - (2) expected_result: - (0,0) - -Q6 finished at: 2023-9-24 22:22:38:714:473 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:22:38:715:697 - Q3 finished at: 2023-9-24 22:22:38:730:206 + Q3 finished at: 2023-10-4 10:24:8:124:32 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-24 22:22:38:737:748 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:22:38:738:723 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,0) - *(1) expected_result: - (0,0) - *(2) expected_result: - (0,0) - - Q8 finished at: 2023-9-24 22:22:38:799:93 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:22:38:799:417 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:24:8:532:711 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt index 7543d308..4b0de30d 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_double_write_skew2_committed.txt @@ -15,45 +15,45 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_double_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:18:848:855 +Q1 finished at: 2023-10-4 10:26:29:865:879 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:18:850:199 +Q1 finished at: 2023-10-4 10:26:29:867:414 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:18:884:205 +Q2 finished at: 2023-10-4 10:26:29:903:896 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:18:948:974 + Q3 finished at: 2023-10-4 10:26:30:865:782 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:26:31:10:278 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' + Q4 finished at: 2023-10-4 10:26:31:24:922 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-10-4 10:26:31:27:854 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-10-4 10:26:31:28:687 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,1) + (1) expected_result: (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: + *(2) expected_result: (1,1) -Q7 finished at: 2023-9-24 22:23:19:50:427 +Q7 finished at: 2023-10-4 10:26:31:870:304 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:19:52:66 - Q3 finished at: 2023-9-24 22:23:19:74:278 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:19:88:925 - Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:19:90:30 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:19:90:833 +Q8 finished at: 2023-10-4 10:26:31:874:103 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: + (0,1) (1,1) + (1) expected_result: (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: + *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:23:19:154:892 + Q9 finished at: 2023-10-4 10:26:32:30:348 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:19:155:226 + Q10 finished at: 2023-10-4 10:26:32:30:689 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt index 1adf74d9..bdba8b02 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c1.txt @@ -15,25 +15,25 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:20:158:820 +Q1 finished at: 2023-10-4 10:26:34:833:646 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:20:160:209 +Q1 finished at: 2023-10-4 10:26:34:835:107 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:20:193:925 +Q2 finished at: 2023-10-4 10:26:34:847:732 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:20:258:709 + Q3 finished at: 2023-10-4 10:26:35:833:614 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:20:358:806 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:20:359:838 - Q3 finished at: 2023-9-24 22:23:20:367:857 + Q3 finished at: 2023-10-4 10:26:35:967:656 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:20:382:443 + Q4 finished at: 2023-10-4 10:26:35:986:832 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:20:384:35 + Q5 finished at: 2023-10-4 10:26:35:994:649 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-10-4 10:26:36:838:194 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-10-4 10:26:36:841:754 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:20:459:106 + Q8 finished at: 2023-10-4 10:26:37:836:13 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,2) @@ -42,9 +42,9 @@ Q7 finished at: 2023-9-24 22:23:20:359:838 *(2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-24 22:23:20:565:154 + Q9 finished at: 2023-10-4 10:26:37:996:571 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:20:565:481 + Q10 finished at: 2023-10-4 10:26:37:996:922 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt index b7c7a9cd..fa238053 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_c2.txt @@ -15,25 +15,25 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:21:493:636 +Q1 finished at: 2023-10-4 10:26:40:988:372 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:21:495:34 +Q1 finished at: 2023-10-4 10:26:40:989:769 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:21:529:951 +Q2 finished at: 2023-10-4 10:26:41:25:236 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:21:593:414 + Q3 finished at: 2023-10-4 10:26:41:988:361 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:21:687:194 + Q3 finished at: 2023-10-4 10:26:42:105:254 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:21:693:489 - Q4 finished at: 2023-9-24 22:23:21:701:64 + Q4 finished at: 2023-10-4 10:26:42:123:330 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:21:702:441 + Q5 finished at: 2023-10-4 10:26:42:126:405 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-10-4 10:26:42:992:667 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:23:21:796:49 + Q7 finished at: 2023-10-4 10:26:43:990:685 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:21:896:88 +Q8 finished at: 2023-10-4 10:26:44:990:803 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -42,9 +42,9 @@ Q8 finished at: 2023-9-24 22:23:21:896:88 (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-24 22:23:22:39:316 + Q9 finished at: 2023-10-4 10:26:45:135:93 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:22:39:652 + Q10 finished at: 2023-10-4 10:26:45:135:440 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt index 4bcfba95..bc23d87f 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_full_write_skew_committed.txt @@ -15,38 +15,38 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:22:977:666 +Q1 finished at: 2023-10-4 10:26:47:857:485 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:22:979:86 +Q1 finished at: 2023-10-4 10:26:47:859:0 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:23:13:926 +Q2 finished at: 2023-10-4 10:26:47:895:295 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:23:77:662 + Q3 finished at: 2023-10-4 10:26:48:857:484 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:23:23:177:820 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:23:178:826 - Q3 finished at: 2023-9-24 22:23:23:191:42 + Q3 finished at: 2023-10-4 10:26:48:983:469 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:23:205:803 + Q4 finished at: 2023-10-4 10:26:48:999:650 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:23:207:28 + Q5 finished at: 2023-10-4 10:26:49:2:754 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:23:207:766 + Q6 finished at: 2023-10-4 10:26:49:3:562 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-10-4 10:26:49:861:444 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:26:49:864:972 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: - (0,2) (1,2) - (1) expected_result: (0,1) (1,1) - *(2) expected_result: + *(1) expected_result: + (0,1) (1,1) + (2) expected_result: (0,2) (1,2) - Q9 finished at: 2023-9-24 22:23:23:272:761 + Q9 finished at: 2023-10-4 10:26:50:6:750 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:23:273:87 + Q10 finished at: 2023-10-4 10:26:50:7:93 -The current result is consistent with the [(2) expected_result] of serial scheduling +The current result is consistent with the [(1) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt index 579200e8..ad9547d8 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c1.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:24:489:840 +Q1 finished at: 2023-10-4 10:26:52:806:64 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:24:491:184 +Q1 finished at: 2023-10-4 10:26:52:807:549 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,35 +26,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:24:525:362 +Q2 finished at: 2023-10-4 10:26:52:844:138 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:24:589:905 + Q3 finished at: 2023-10-4 10:26:53:805:950 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:24:689:843 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:24:690:828 - Q3 finished at: 2023-9-24 22:23:24:693:997 + Q3 finished at: 2023-10-4 10:26:53:910:640 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:24:708:441 + Q4 finished at: 2023-10-4 10:26:53:926:746 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:24:709:584 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:24:792:436 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - *(1) expected_result: - (0,1) (1,2) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:23:24:929:280 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:24:929:616 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 finished at: 2023-10-4 10:26:53:931:233 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: 错误: Heartbeat: Transaction 3d50a33d-89fc-4316-a225-7b6a724065d7 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 3d50a33d-89fc-4316-a225-7b6a7 errcode: 40001 +Q6 failed at: 2023-10-4 10:26:55:415:586 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 3d50a33d-89fc-4316-a225-7b6a724065d7 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 3d50a33d-89fc-4316-a225-7b6a7 diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt index 8db93d20..580d4dc0 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew1_c2.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:26:91:266 +Q1 finished at: 2023-10-4 10:26:58:756:297 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:26:92:650 +Q1 finished at: 2023-10-4 10:26:58:757:712 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,21 +26,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:23:26:126:498 +Q2 finished at: 2023-10-4 10:26:58:794:327 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:26:191:216 + Q3 finished at: 2023-10-4 10:26:59:756:225 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:26:292:866 - Q3 finished at: 2023-9-24 22:23:26:315:415 + Q3 finished at: 2023-10-4 10:26:59:893:264 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:26:329:246 + Q4 finished at: 2023-10-4 10:26:59:911:318 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:26:493:920 - Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q5 failed at: 2023-9-24 22:23:26:832:19 + Q5 finished at: 2023-10-4 10:26:59:916:279 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: 错误: Heartbeat: Transaction 17363c9c-fe4d-4265-b8ce-bc060a5a8740 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 17363c9c-fe4d-4265-b8ce-bc060 errcode: 40001 +Q6 failed at: 2023-10-4 10:27:1:366:25 Test Result: Rollback -Reason: Err:错误: 由于同步更新而无法串行访问 +Reason: Err:错误: Heartbeat: Transaction 17363c9c-fe4d-4265-b8ce-bc060a5a8740 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 17363c9c-fe4d-4265-b8ce-bc060 diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt index ef267f74..4935bfe4 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c1.txt @@ -15,46 +15,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:27:813:699 +Q1 finished at: 2023-10-4 10:27:5:619:774 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:27:815:57 +Q1 finished at: 2023-10-4 10:27:5:620:291 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:27:848:846 +Q2 finished at: 2023-10-4 10:27:5:635:234 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:27:913:666 + Q3 finished at: 2023-10-4 10:27:6:620:964 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:28:13:845 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:28:15:52 - Q3 finished at: 2023-9-24 22:23:28:28:67 + Q3 finished at: 2023-10-4 10:27:6:744:809 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:23:28:42:341 + Q4 finished at: 2023-10-4 10:27:6:760:459 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:28:43:629 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:23:28:114:227 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:23:28:258:307 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:28:258:659 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 finished at: 2023-10-4 10:27:6:763:798 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q6 failed at: 2023-10-4 10:27:8:230:936 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt index 415521d3..d688e66e 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_c2.txt @@ -15,23 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:29:382:680 +Q1 finished at: 2023-10-4 10:27:11:318:214 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:29:384:92 +Q1 finished at: 2023-10-4 10:27:11:319:571 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:29:418:435 +Q2 finished at: 2023-10-4 10:27:11:333:192 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:29:482:684 + Q3 finished at: 2023-10-4 10:27:12:318:5 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:23:29:582:953 - Q3 finished at: 2023-9-24 22:23:29:598:4 + Q3 finished at: 2023-10-4 10:27:12:436:837 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:29:783:272 - Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q4 failed at: 2023-9-24 22:23:30:13:466 + current_result: + (1,0) + (1) expected_result: + (1,1) + *(2) expected_result: + (1,0) + + Q4 finished at: 2023-10-4 10:27:12:454:699 + Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-10-4 10:27:12:457:949 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-10-4 10:27:13:323:199 + Q7-T2 execute opt: 'COMMIT'; + Q7 failed reason: 错误: Heartbeat: Transaction 41e10ffb-6e64-4a0e-ba0b-5de12735f6a6 expired or aborted by a conflict: 40001 errcode: 40001 + Q7 failed at: 2023-10-4 10:27:15:24:907 Test Result: Rollback -Reason: Err:错误: 由于同步更新而无法串行访问 +Err:错误: Heartbeat: Transaction 41e10ffb-6e64-4a0e-ba0b-5de12735f6a6 expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt index 65e867bf..a1e43540 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_dda_read_write_skew2_committed.txt @@ -15,45 +15,45 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:30:911:949 +Q1 finished at: 2023-10-4 10:27:18:101:460 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:30:913:347 +Q1 finished at: 2023-10-4 10:27:18:102:990 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:30:947:732 +Q2 finished at: 2023-10-4 10:27:18:138:391 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:31:11:828 + Q3 finished at: 2023-10-4 10:27:19:101:441 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:23:31:112:762 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:23:31:114:324 - Q3 finished at: 2023-9-24 22:23:31:129:937 + Q3 finished at: 2023-10-4 10:27:19:231:505 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:23:31:145:645 + Q4 finished at: 2023-10-4 10:27:19:248:568 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:31:147:274 + Q5 finished at: 2023-10-4 10:27:19:252:549 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:31:148:228 + Q6 finished at: 2023-10-4 10:27:19:255:892 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-10-4 10:27:20:105:937 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:27:20:109:522 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: + (0,1) (1,1) + (1) expected_result: (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: + *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:23:31:214:820 + Q9 finished at: 2023-10-4 10:27:20:265:414 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:31:215:153 + Q10 finished at: 2023-10-4 10:27:20:265:763 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt index 5bae09a3..7b1aefcd 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c1.txt @@ -16,35 +16,35 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:32:362:552 +Q1 finished at: 2023-10-4 10:27:23:37:541 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:32:363:904 +Q1 finished at: 2023-10-4 10:27:23:38:974 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:32:397:943 +Q2 finished at: 2023-10-4 10:27:23:74:995 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:32:462:519 + Q3 finished at: 2023-10-4 10:27:24:37:648 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:23:32:561:598 - Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:32:584:473 + Q3 finished at: 2023-10-4 10:27:24:170:394 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:32:598:299 + Q4 finished at: 2023-10-4 10:27:24:186:778 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:23:32:599:938 - Q6 finished at: 2023-9-24 22:23:32:611:647 + Q5 finished at: 2023-10-4 10:27:24:189:925 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:27:25:37:601 + Q6-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q6 finished at: 2023-10-4 10:27:25:183:850 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-24 22:23:32:625:54 + Q7 finished at: 2023-10-4 10:27:25:199:189 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-24 22:23:32:626:163 + Q8 finished at: 2023-10-4 10:27:25:202:163 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-24 22:23:32:663:291 +Q9 finished at: 2023-10-4 10:27:26:42:586 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:23:32:664:310 +Q10 finished at: 2023-10-4 10:27:26:46:229 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:23:32:765:141 + Q11 finished at: 2023-10-4 10:27:27:40:420 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:32:865:158 + Q12 finished at: 2023-10-4 10:27:28:40:511 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,2) (1,3) (2,3) @@ -61,9 +61,9 @@ Q10 finished at: 2023-9-24 22:23:32:664:310 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-24 22:23:33:1:763 + Q13 finished at: 2023-10-4 10:27:28:200:436 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:23:33:2:109 + Q14 finished at: 2023-10-4 10:27:28:200:777 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt index f75b8bb4..9cf5b9e0 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_mda_step_wat_c2.txt @@ -16,35 +16,35 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:33:875:236 +Q1 finished at: 2023-10-4 10:27:31:54:977 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:33:876:679 +Q1 finished at: 2023-10-4 10:27:31:56:502 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:33:910:976 +Q2 finished at: 2023-10-4 10:27:31:92:245 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:33:975:266 + Q3 finished at: 2023-10-4 10:27:32:55:4 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:27:32:194:683 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' + Q4 finished at: 2023-10-4 10:27:32:213:206 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:23:34:74:240 + Q5 finished at: 2023-10-4 10:27:33:55:0 Q5-T3 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:34:90:197 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:23:34:105:226 - Q5 finished at: 2023-9-24 22:23:34:123:676 + Q5 finished at: 2023-10-4 10:27:33:199:118 Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q6 finished at: 2023-9-24 22:23:34:180:29 + Q6 finished at: 2023-10-4 10:27:34:63:244 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-24 22:23:34:329:886 + Q7 finished at: 2023-10-4 10:27:35:112:580 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-24 22:23:34:335:655 + Q8 finished at: 2023-10-4 10:27:35:120:387 Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-24 22:23:34:380:183 +Q9 finished at: 2023-10-4 10:27:36:59:972 Q10-T2 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:23:34:477:926 + Q10 finished at: 2023-10-4 10:27:37:58:30 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-24 22:23:34:578:185 +Q11 finished at: 2023-10-4 10:27:38:57:722 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:23:34:678:378 + Q12 finished at: 2023-10-4 10:27:39:58:59 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,3) (2,3) @@ -61,9 +61,9 @@ Q11 finished at: 2023-9-24 22:23:34:578:185 (6) expected_result: (0,1) (1,2) (2,1) - Q13 finished at: 2023-9-24 22:23:34:821:750 + Q13 finished at: 2023-10-4 10:27:39:221:802 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:23:34:822:83 + Q14 finished at: 2023-10-4 10:27:39:222:175 The current result is consistent with the [(3) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt index 2b11959f..1e3affed 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_1abort.txt @@ -14,21 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_1abort test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:7:685:831 +Q1 finished at: 2023-10-4 10:25:49:538:945 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:7:687:293 +Q1 finished at: 2023-10-4 10:25:49:540:354 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:7:721:387 +Q2 finished at: 2023-10-4 10:25:49:554:623 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:7:785:627 + Q3 finished at: 2023-10-4 10:25:50:537:501 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-24 22:23:7:887:283 - Q3 finished at: 2023-9-24 22:23:7:917:579 + Q3 finished at: 2023-10-4 10:25:50:585:442 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:7:932:260 + Q4 finished at: 2023-10-4 10:25:50:601:138 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-10-4 10:25:51:542:46 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:7:988:219 + Q6 finished at: 2023-10-4 10:25:52:541:449 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -37,11 +37,11 @@ Q5 finished at: 2023-9-24 22:23:7:887:283 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-24 22:23:8:120:656 + Q7 finished at: 2023-10-4 10:25:52:666:876 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-24 22:23:8:288:810 + Q8 finished at: 2023-10-4 10:25:52:853:310 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:8:290:501 + Q9 finished at: 2023-10-4 10:25:52:853:892 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt index c738ced6..596ced1a 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_dirty_write_2commit.txt @@ -14,21 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_2commit test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:9:275:7 +Q1 finished at: 2023-10-4 10:25:55:360:633 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:9:276:443 +Q1 finished at: 2023-10-4 10:25:55:362:88 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:9:304:947 +Q2 finished at: 2023-10-4 10:25:55:398:360 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:9:374:959 + Q3 finished at: 2023-10-4 10:25:56:360:760 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:9:376:501 + Q3 finished at: 2023-10-4 10:25:56:362:237 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:9:434:504 + Q4 finished at: 2023-10-4 10:25:56:379:319 Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-24 22:23:9:477:152 +Q5 finished at: 2023-10-4 10:25:57:362:933 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:9:577:472 + Q6 finished at: 2023-10-4 10:25:58:363:77 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -37,11 +37,11 @@ Q5 finished at: 2023-9-24 22:23:9:477:152 *(2) expected_result: (0,2) - Q7 finished at: 2023-9-24 22:23:9:613:734 + Q7 finished at: 2023-10-4 10:25:58:395:650 Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-24 22:23:9:955:787 + Q8 finished at: 2023-10-4 10:25:58:721:274 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:9:957:509 + Q9 finished at: 2023-10-4 10:25:58:721:934 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt index 7259ccbb..8bfd4144 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write.txt @@ -14,23 +14,23 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:10:951:873 +Q1 finished at: 2023-10-4 10:26:1:404:629 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:10:953:285 +Q1 finished at: 2023-10-4 10:26:1:406:50 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:10:987:176 +Q2 finished at: 2023-10-4 10:26:1:441:443 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:11:51:808 + Q3 finished at: 2023-10-4 10:26:2:404:554 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:11:53:324 + Q3 finished at: 2023-10-4 10:26:2:405:990 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:11:106:342 + Q4 finished at: 2023-10-4 10:26:2:460:566 Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-24 22:23:11:156:348 +Q5 finished at: 2023-10-4 10:26:3:409:180 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:23:11:160:10 +Q6 finished at: 2023-10-4 10:26:3:412:830 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:23:11:254:223 + Q7 finished at: 2023-10-4 10:26:4:407:96 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -39,9 +39,9 @@ Q6 finished at: 2023-9-24 22:23:11:160:10 (2) expected_result: (0,3) - Q8 finished at: 2023-9-24 22:23:11:288:280 + Q8 finished at: 2023-10-4 10:26:4:441:353 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:11:290:143 + Q9 finished at: 2023-10-4 10:26:4:443:48 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt index e43af7ba..ece1c204 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_full_write_committed.txt @@ -14,36 +14,36 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:12:534:830 +Q1 finished at: 2023-10-4 10:26:7:344:698 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:12:536:214 +Q1 finished at: 2023-10-4 10:26:7:345:606 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:12:573:39 +Q2 finished at: 2023-10-4 10:26:7:381:997 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:12:635:8 + Q3 finished at: 2023-10-4 10:26:8:345:560 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 finished at: 2023-9-24 22:23:12:736:348 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:12:737:998 - Q3 finished at: 2023-9-24 22:23:12:755:534 + Q3 finished at: 2023-10-4 10:26:8:472:905 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:12:771:477 + Q4 finished at: 2023-10-4 10:26:8:490:30 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:23:12:772:219 + Q5 finished at: 2023-10-4 10:26:8:491:77 +Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' +Q6 finished at: 2023-10-4 10:26:9:349:794 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-10-4 10:26:9:353:165 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: + (0,3) + (1) expected_result: (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: + *(2) expected_result: (0,3) - Q8 finished at: 2023-9-24 22:23:12:827:326 + Q8 finished at: 2023-10-4 10:26:9:512:636 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:12:827:650 + Q9 finished at: 2023-10-4 10:26:9:512:978 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt index 0bc6a90f..0323fe59 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_self_update_committed.txt @@ -14,14 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_self_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:17:291:119 +Q1 finished at: 2023-10-4 10:26:24:988:780 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:17:292:534 +Q1 finished at: 2023-10-4 10:26:24:990:228 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:23:17:327:14 +Q2 finished at: 2023-10-4 10:26:25:25:712 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:17:391:225 + Q3 finished at: 2023-10-4 10:26:25:988:847 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' + Q3 finished at: 2023-10-4 10:26:26:128:26 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-10-4 10:26:26:144:265 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-10-4 10:26:26:145:171 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -30,27 +35,22 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(2) expected_result: (0,1) -Q6 finished at: 2023-9-24 22:23:17:492:604 +Q6 finished at: 2023-10-4 10:26:26:993:552 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:23:17:494:211 - Q3 finished at: 2023-9-24 22:23:17:512:597 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:17:528:264 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:23:17:529:66 +Q7 finished at: 2023-10-4 10:26:26:996:856 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: + (0,1) + (1) expected_result: (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: + *(2) expected_result: (0,1) - Q8 finished at: 2023-9-24 22:23:17:584:375 + Q8 finished at: 2023-10-4 10:26:27:130:407 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:17:584:715 + Q9 finished at: 2023-10-4 10:26:27:130:741 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt index be223f89..d7f1ab9e 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c1.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:14:11:114 +Q1 finished at: 2023-10-4 10:26:12:317:848 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:14:12:507 +Q1 finished at: 2023-10-4 10:26:12:319:203 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,33 +25,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:23:14:47:335 +Q2 finished at: 2023-10-4 10:26:12:355:567 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:14:111:128 + Q3 finished at: 2023-10-4 10:26:13:317:845 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-24 22:23:14:211:461 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:23:14:212:391 - Q3 finished at: 2023-9-24 22:23:14:220:969 + Q3 finished at: 2023-10-4 10:26:13:421:342 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:14:236:198 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:23:14:313:682 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:23:14:443:98 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:23:14:443:427 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q4 finished at: 2023-10-4 10:26:13:438:878 +Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q5 failed reason: 错误: Heartbeat: Transaction 86a4d602-f177-452d-a3e4-ba21e0ffccf1 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 86a4d602-f177-452d-a3e4-ba21e errcode: 40001 +Q5 failed at: 2023-10-4 10:26:14:827:218 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 86a4d602-f177-452d-a3e4-ba21e0ffccf1 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 86a4d602-f177-452d-a3e4-ba21e diff --git a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt index 4d4b15a3..289e5a62 100644 --- a/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt +++ b/test_result/centralizend_result/yugabyte/serializable/wat_sda_lost_update_c2.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:23:15:393:950 +Q1 finished at: 2023-10-4 10:26:18:33:361 Q1-T1 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' -Q1 finished at: 2023-9-24 22:23:15:395:332 +Q1 finished at: 2023-10-4 10:26:18:34:810 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,19 +25,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:23:15:430:74 +Q2 finished at: 2023-10-4 10:26:18:72:17 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:23:15:492:704 + Q3 finished at: 2023-10-4 10:26:19:33:401 Q3-T2 execute sql: 'BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;' - Q3 finished at: 2023-9-24 22:23:15:543:74 + Q3 finished at: 2023-10-4 10:26:19:161:350 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:23:15:557:445 -Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:23:15:696:516 -Q5 failed reason: 错误: Unknown transaction, could be recently aborted: 7579b26a-ce8d-45fb-a64e-1806e8bb3374; errcode: 40001 -Q5 failed at: 2023-9-24 22:23:16:96:538 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:26:19:576:923 Test Result: Rollback -Reason: Err:错误: Unknown transaction, could be recently aborted: 7579b26a-ce8d-45fb-a64e-1806e8bb3374; +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt index 8f72cd17..9174179e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_skew_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:9:331:851 +Q1 finished at: 2023-10-4 10:33:37:11:514 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:9:332:146 +Q1 finished at: 2023-10-4 10:33:37:12:655 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,21 +26,42 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:9:340:749 +Q2 finished at: 2023-10-4 10:33:37:41:976 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:9:431:895 + Q3 finished at: 2023-10-4 10:33:38:11:290 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:9:483:117 + Q3 finished at: 2023-10-4 10:33:38:141:645 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:25:9:496:441 + Q4 finished at: 2023-10-4 10:33:38:158:732 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:9:497:584 + Q5 finished at: 2023-10-4 10:33:38:165:869 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:25:9:498:259 + Q6 finished at: 2023-10-4 10:33:38:168:974 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565509532884 } local_limit: { physical: 1695565509532884 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q7 failed at: 2023-9-24 22:25:10:235:636 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) + +Q7 finished at: 2023-10-4 10:33:39:14:911 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:33:39:17:91 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-10-4 10:33:39:168:59 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-10-4 10:33:39:168:408 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565509532884 } local_limit: { physical: 1695565509532884 } global_limit: in_txn_limit: serial_no: 0 }; +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt index 2e316091..58d894d4 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_read_write_skew1_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_read_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:11:168:283 +Q1 finished at: 2023-10-4 10:33:41:813:193 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:11:169:515 +Q1 finished at: 2023-10-4 10:33:41:814:454 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,35 +26,21 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:11:198:130 +Q2 finished at: 2023-10-4 10:33:41:843:689 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:11:268:149 + Q3 finished at: 2023-10-4 10:33:42:813:128 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:25:11:374:432 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:25:11:377:586 - Q3 finished at: 2023-9-24 22:25:11:413:510 + Q3 finished at: 2023-10-4 10:33:42:888:387 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:25:11:428:150 + Q4 finished at: 2023-10-4 10:33:42:904:889 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:11:429:303 + Q5 finished at: 2023-10-4 10:33:42:907:910 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:25:11:429:985 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,2) - *(1) expected_result: - (0,1) (1,2) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:25:11:495:170 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:25:11:495:523 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q6 finished at: 2023-10-4 10:33:42:908:896 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q7 failed at: 2023-10-4 10:33:44:519:859 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt index 14f4272a..baf6dc2e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:12:331:323 +Q1 finished at: 2023-10-4 10:33:47:133:893 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:12:332:603 +Q1 finished at: 2023-10-4 10:33:47:135:166 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -26,11 +26,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:12:362:735 +Q2 finished at: 2023-10-4 10:33:47:163:742 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:12:429:989 + Q3 finished at: 2023-10-4 10:33:48:133:846 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:12:490:381 + Q3 finished at: 2023-10-4 10:33:48:261:44 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -39,15 +39,15 @@ Q2 finished at: 2023-9-24 22:25:12:362:735 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:25:12:506:221 + Q4 finished at: 2023-10-4 10:33:48:272:298 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:12:508:356 + Q5 finished at: 2023-10-4 10:33:48:277:384 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:25:12:532:709 +Q6 finished at: 2023-10-4 10:33:49:143:884 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:25:12:533:848 +Q7 finished at: 2023-10-4 10:33:49:147:297 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:25:12:633:443 + Q8 finished at: 2023-10-4 10:33:50:136:279 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,9 +56,9 @@ Q7 finished at: 2023-9-24 22:25:12:533:848 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:25:12:754:100 + Q9 finished at: 2023-10-4 10:33:50:298:249 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:25:12:754:451 + Q8 finished at: 2023-10-4 10:33:50:298:622 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt index 0bcbbdf3..c97e482a 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_committed.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:16:88:645 +Q1 finished at: 2023-10-4 10:34:3:93:457 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:16:89:920 +Q1 finished at: 2023-10-4 10:34:3:94:610 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' current_result: (0,0) @@ -26,28 +26,28 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0; ' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:16:119:900 +Q2 finished at: 2023-10-4 10:34:3:105:430 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:16:188:683 + Q3 finished at: 2023-10-4 10:34:4:93:478 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:25:16:296:673 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:25:16:299:770 - Q3 finished at: 2023-9-24 22:25:16:333:199 + Q3 finished at: 2023-10-4 10:34:4:197:24 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:25:16:345:857 + Q4 finished at: 2023-10-4 10:34:4:209:851 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:16:347:605 + Q5 finished at: 2023-10-4 10:34:4:215:682 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:25:16:348:359 + Q6 finished at: 2023-10-4 10:34:4:219:178 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-10-4 10:34:5:104:8 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:34:5:107:608 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,12 +56,10 @@ Q8 finished at: 2023-9-24 22:25:16:299:770 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:25:16:407:829 + Q9 finished at: 2023-10-4 10:34:5:247:422 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:25:16:408:167 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q10 finished at: 2023-10-4 10:34:5:247:769 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt index 307c1ebb..57ebc930 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -17,9 +17,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_dda_write_skew_predicate_based-intersecting_data test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:13:615:261 +Q1 finished at: 2023-10-4 10:33:53:27:204 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:13:616:177 +Q1 finished at: 2023-10-4 10:33:53:28:509 Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' current_result: (30,) @@ -28,28 +28,28 @@ Q2-T1 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' (2) expected_result: (330,) -Q2 finished at: 2023-9-24 22:25:13:642:799 +Q2 finished at: 2023-10-4 10:33:53:40:696 Q3-T1 execute sql: 'INSERT INTO mytab (class,value) VALUES (2, 30);' -Q3 finished at: 2023-9-24 22:25:13:649:239 +Q3 finished at: 2023-10-4 10:33:53:45:690 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-24 22:25:13:715:35 + Q4 finished at: 2023-10-4 10:33:54:27:141 Q4-T2 execute sql: 'BEGIN TRANSACTION;' -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:25:13:816:100 - Q4 finished at: 2023-9-24 22:25:13:840:541 + Q4 finished at: 2023-10-4 10:33:54:146:969 Q5-T2 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' current_result: + (300,) + (1) expected_result: (330,) - *(1) expected_result: - (330,) - (2) expected_result: + *(2) expected_result: (300,) - Q5 finished at: 2023-9-24 22:25:13:856:10 + Q5 finished at: 2023-10-4 10:33:54:160:326 Q6-T2 execute sql: 'INSERT INTO mytab (class,value) VALUES (1, 300);' - Q6 finished at: 2023-9-24 22:25:13:857:928 + Q6 finished at: 2023-10-4 10:33:54:165:493 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:25:13:858:603 + Q7 finished at: 2023-10-4 10:33:54:168:959 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:33:55:29:443 Q9-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 1;' current_result: (330,) @@ -58,7 +58,7 @@ Q8 finished at: 2023-9-24 22:25:13:816:100 *(2) expected_result: (330,) - Q9 finished at: 2023-9-24 22:25:13:917:948 + Q9 finished at: 2023-10-4 10:33:55:194:242 Q10-T3 execute sql: 'SELECT SUM(value) FROM mytab WHERE class = 2;' current_result: (330,) @@ -67,12 +67,10 @@ Q8 finished at: 2023-9-24 22:25:13:816:100 *(2) expected_result: (330,) - Q10 finished at: 2023-9-24 22:25:13:919:8 + Q10 finished at: 2023-10-4 10:33:55:195:288 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:25:13:919:317 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q12 finished at: 2023-10-4 10:33:55:195:620 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt index 1f11d544..6c257c08 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -8,9 +8,58 @@ expected_result: The expected result is the expected query result for each SQL t set TXN_ISOLATION = snapshot for each session ----------iat_dda_write_skew_predicate_based-overdraft_protection test prepare---------- Q0-T1 execute sql: 'DROP TABLE IF EXISTS account;' -Q0 failed reason: 错误: must be owner of table account; errcode: 42501 -Q0 failed at: 2023-9-24 22:25:14:123:219 +Q0-T1 execute sql: 'create table account (name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type))' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','saving', 500);' +Q0-T1 execute sql: 'INSERT into account (name,type,balance) VALUES ('kevin','checking', 500);' +Q0-T1 execute opt: 'COMMIT'; -Test Result: Rollback -Reason: Err:错误: must be owner of table account; +----------iat_dda_write_skew_predicate_based-overdraft_protection test run---------- +Q1-T1 execute opt: 'BEGIN;' +Q1 finished at: 2023-10-4 10:33:58:116:987 +Q1-T1 execute sql: 'BEGIN TRANSACTION;' +Q1 finished at: 2023-10-4 10:33:58:118:247 +Q2-T1 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + *(1) expected_result: + (checking,500,) (saving,500,) + (2) expected_result: + (checking,1400,) (saving,500,) + +Q2 finished at: 2023-10-4 10:33:58:173:418 + Q3-T2 execute opt: 'BEGIN;' + Q3 finished at: 2023-10-4 10:33:59:117:77 + Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:33:59:248:620 + Q4-T2 execute sql: 'SELECT type, balance FROM account WHERE name = 'kevin';' + current_result: + (checking,500,) (saving,500,) + (1) expected_result: + (checking,500,) (saving,1400,) + *(2) expected_result: + (checking,500,) (saving,500,) + + Q4 finished at: 2023-10-4 10:33:59:277:786 + Q5-T2 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'saving';' + Q5 finished at: 2023-10-4 10:33:59:283:967 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-10-4 10:33:59:284:763 +Q7-T1 execute sql: 'UPDATE account SET balance = balance + 900 WHERE name = 'kevin' and type = 'checking';' +Q7 finished at: 2023-10-4 10:34:0:133:882 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:34:0:137:700 + Q9-T3 execute sql: 'SELECT * FROM account;' + current_result: + (kevin,checking,1400) (kevin,saving,1400) + *(1) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + *(2) expected_result: + (kevin,checking,1400) (kevin,saving,1400) + + Q9 finished at: 2023-10-4 10:34:0:292:41 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-10-4 10:34:0:292:377 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt index 2f1a0ec6..278c078c 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:17:451:525 +Q1 finished at: 2023-10-4 10:34:8:1:8 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:17:452:780 +Q1 finished at: 2023-10-4 10:34:8:2:308 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-24 22:25:17:482:532 +Q2 finished at: 2023-10-4 10:34:8:31:349 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:17:551:473 + Q3 finished at: 2023-10-4 10:34:9:0:915 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:25:17:650:960 - Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:17:680:838 + Q3 finished at: 2023-10-4 10:34:9:103:827 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,8 +56,11 @@ Q2 finished at: 2023-9-24 22:25:17:482:532 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:25:17:692:265 - Q5 finished at: 2023-9-24 22:25:17:705:328 + Q4 finished at: 2023-10-4 10:34:9:117:143 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:34:10:0:903 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-10-4 10:34:10:150:314 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -77,19 +77,19 @@ Q2 finished at: 2023-9-24 22:25:17:482:532 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:25:17:718:869 + Q6 finished at: 2023-10-4 10:34:10:164:662 Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q7 finished at: 2023-9-24 22:25:17:758:603 +Q7 finished at: 2023-10-4 10:34:11:11:683 Q8-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-24 22:25:17:859:87 + Q8 finished at: 2023-10-4 10:34:12:11:759 Q9-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q9 finished at: 2023-9-24 22:25:17:959:367 + Q9 finished at: 2023-10-4 10:34:13:9:423 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:25:18:54:381 +Q10 finished at: 2023-10-4 10:34:14:3:655 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:25:18:154:663 + Q11 finished at: 2023-10-4 10:34:15:3:904 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:25:18:254:591 + Q12 finished at: 2023-10-4 10:34:16:3:505 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -106,9 +106,9 @@ Q10 finished at: 2023-9-24 22:25:18:54:381 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-24 22:25:18:422:322 + Q13 finished at: 2023-10-4 10:34:16:162:697 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:25:18:422:676 + Q14 finished at: 2023-10-4 10:34:16:163:50 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt index 55a2a118..e9f176b7 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_causality_violation_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:29:224:381 +Q1 finished at: 2023-10-4 10:34:55:448:203 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:29:225:638 +Q1 finished at: 2023-10-4 10:34:55:449:415 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,19 +34,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (6) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:29:254:771 +Q2 finished at: 2023-10-4 10:34:55:479:83 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:29:324:546 + Q3 finished at: 2023-10-4 10:34:56:448:311 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:25:29:423:688 - Q6-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:29:446:432 + Q3 finished at: 2023-10-4 10:34:56:561:663 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-24 22:25:29:459:804 + Q4 finished at: 2023-10-4 10:34:56:577:200 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:25:29:460:549 - Q6 finished at: 2023-9-24 22:25:29:472:564 + Q5 finished at: 2023-10-4 10:34:56:578:122 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:34:57:448:203 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2023-10-4 10:34:57:581:664 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -63,15 +63,52 @@ Q2 finished at: 2023-9-24 22:25:29:254:771 (6) expected_result: (0,0) - Q7 finished at: 2023-9-24 22:25:29:485:102 + Q7 finished at: 2023-10-4 10:34:57:596:313 Q8-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q8 finished at: 2023-9-24 22:25:29:486:983 + Q8 finished at: 2023-10-4 10:34:57:600:349 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:25:29:487:787 + Q9 finished at: 2023-10-4 10:34:57:601:240 Q10-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q10 failed reason: 错误: Restart read required at: { read: { physical: 1695565529524232 } local_limit: { physical: 1695565529524232 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q10 failed at: 2023-9-24 22:25:30:527:431 + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + (3) expected_result: + (1,1) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + (6) expected_result: + (1,1) + +Q10 finished at: 2023-10-4 10:34:58:452:564 +Q11-T1 execute opt: 'COMMIT'; +Q11 finished at: 2023-10-4 10:34:58:454:665 + Q12-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + + Q12 finished at: 2023-10-4 10:34:58:623:705 + Q13-T4 execute opt: 'COMMIT'; + Q13 finished at: 2023-10-4 10:34:58:624:70 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565529524232 } local_limit: { physical: 1695565529524232 } global_limit: in_txn_limit: serial_no: 0 }; +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt index 44ebe569..bc744396 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_cross_phenomenon.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_cross_phenomenon test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:26:138:164 +Q1 finished at: 2023-10-4 10:34:47:240:131 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:26:139:365 +Q1 finished at: 2023-10-4 10:34:47:240:559 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -50,14 +50,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (14) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:26:171:187 +Q2 finished at: 2023-10-4 10:34:47:250:301 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:26:238:1 + Q3 finished at: 2023-10-4 10:34:48:241:577 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:25:26:337:869 - Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:26:380:765 + Q3 finished at: 2023-10-4 10:34:48:376:572 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -90,27 +87,131 @@ Q2 finished at: 2023-9-24 22:25:26:171:187 *(14) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:25:26:393:570 - Q5 finished at: 2023-9-24 22:25:26:401:529 + Q4 finished at: 2023-10-4 10:34:48:390:650 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:34:49:241:512 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-10-4 10:34:49:366:914 Q6-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6 finished at: 2023-9-24 22:25:26:415:662 + Q6 finished at: 2023-10-4 10:34:49:382:248 Q7-T3 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:25:26:416:389 + Q7 finished at: 2023-10-4 10:34:49:382:981 Q8-T4 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:25:26:436:940 + Q8 finished at: 2023-10-4 10:34:50:241:721 Q8-T4 execute sql: 'BEGIN TRANSACTION;' - Q8 finished at: 2023-9-24 22:25:26:515:765 + Q8 finished at: 2023-10-4 10:34:50:382:466 Q9-T4 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-24 22:25:26:528:286 + Q9 finished at: 2023-10-4 10:34:50:397:198 Q10-T4 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:25:26:529:46 + Q10 finished at: 2023-10-4 10:34:50:397:964 Q11-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' + current_result: + (0,0) + *(1) expected_result: + (0,0) + *(2) expected_result: + (0,0) + (3) expected_result: + (0,1) + (4) expected_result: + (0,1) + *(5) expected_result: + (0,0) + *(6) expected_result: + (0,0) + *(7) expected_result: + (0,0) + *(8) expected_result: + (0,0) + (9) expected_result: + (0,1) + (10) expected_result: + (0,1) + (11) expected_result: + (0,1) + *(12) expected_result: + (0,0) + (13) expected_result: + (0,1) + (14) expected_result: + (0,1) + + Q11 finished at: 2023-10-4 10:34:51:247:167 + Q12-T2 execute opt: 'COMMIT'; + Q12 finished at: 2023-10-4 10:34:51:249:499 Q13-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - Q11 failed reason: 错误: Restart read required at: { read: { physical: 1695565526537624 } local_limit: { physical: 1695565526537624 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 - Q11 failed at: 2023-9-24 22:25:27:639:937 -Q13 failed reason: 错误: Restart read required at: { read: { physical: 1695565526641121 } local_limit: { physical: 1695565526641121 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q13 failed at: 2023-9-24 22:25:27:946:749 + current_result: + (1,0) + *(1) expected_result: + (1,0) + *(2) expected_result: + (1,0) + *(3) expected_result: + (1,0) + *(4) expected_result: + (1,0) + (5) expected_result: + (1,1) + *(6) expected_result: + (1,0) + (7) expected_result: + (1,1) + (8) expected_result: + (1,1) + *(9) expected_result: + (1,0) + (10) expected_result: + (1,1) + (11) expected_result: + (1,1) + (12) expected_result: + (1,1) + *(13) expected_result: + (1,0) + (14) expected_result: + (1,1) + +Q13 finished at: 2023-10-4 10:34:52:247:762 +Q14-T1 execute opt: 'COMMIT'; +Q14 finished at: 2023-10-4 10:34:52:250:12 + Q15-T5 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + *(3) expected_result: + (0,1) (1,1) + *(4) expected_result: + (0,1) (1,1) + *(5) expected_result: + (0,1) (1,1) + *(6) expected_result: + (0,1) (1,1) + *(7) expected_result: + (0,1) (1,1) + *(8) expected_result: + (0,1) (1,1) + *(9) expected_result: + (0,1) (1,1) + *(10) expected_result: + (0,1) (1,1) + *(11) expected_result: + (0,1) (1,1) + *(12) expected_result: + (0,1) (1,1) + *(13) expected_result: + (0,1) (1,1) + *(14) expected_result: + (0,1) (1,1) + + Q15 finished at: 2023-10-4 10:34:52:428:164 + Q16-T5 execute opt: 'COMMIT'; + Q16 finished at: 2023-10-4 10:34:52:428:545 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565526537624 } local_limit: { physical: 1695565526537624 } global_limit: in_txn_limit: serial_no: 0 }; +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt index 330a2415..48400904 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_delete.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:19:456:801 +Q1 finished at: 2023-10-4 10:34:19:268:705 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:19:458:43 +Q1 finished at: 2023-10-4 10:34:19:269:978 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: null -Q2 finished at: 2023-9-24 22:25:19:488:992 +Q2 finished at: 2023-10-4 10:34:19:300:327 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:19:556:733 + Q3 finished at: 2023-10-4 10:34:20:268:700 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:25:19:656:192 - Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:19:691:313 + Q3 finished at: 2023-10-4 10:34:20:343:221 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,8 +56,11 @@ Q2 finished at: 2023-9-24 22:25:19:488:992 *(6) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:25:19:703:199 - Q5 finished at: 2023-9-24 22:25:19:710:415 + Q4 finished at: 2023-10-4 10:34:20:356:445 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:34:21:268:741 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-10-4 10:34:21:383:132 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -77,19 +77,19 @@ Q2 finished at: 2023-9-24 22:25:19:488:992 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:25:19:721:671 + Q6 finished at: 2023-10-4 10:34:21:395:150 Q7-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q7 finished at: 2023-9-24 22:25:19:758:23 +Q7 finished at: 2023-10-4 10:34:22:279:540 Q8-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q8 finished at: 2023-9-24 22:25:19:864:124 + Q8 finished at: 2023-10-4 10:34:23:279:108 Q9-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q9 finished at: 2023-9-24 22:25:19:964:351 + Q9 finished at: 2023-10-4 10:34:24:279:296 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:25:20:59:496 +Q10 finished at: 2023-10-4 10:34:25:271:221 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:25:20:159:340 + Q11 finished at: 2023-10-4 10:34:26:271:111 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:25:20:259:514 + Q12 finished at: 2023-10-4 10:34:27:271:359 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -106,9 +106,9 @@ Q10 finished at: 2023-9-24 22:25:20:59:496 *(6) expected_result: null - Q13 finished at: 2023-9-24 22:25:20:393:124 + Q13 finished at: 2023-10-4 10:34:27:425:317 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:25:20:393:483 + Q14 finished at: 2023-10-4 10:34:27:425:678 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt index a1ef1954..9ae22071 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_predicate_based_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:21:264:334 +Q1 finished at: 2023-10-4 10:34:30:69:859 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:21:264:952 +Q1 finished at: 2023-10-4 10:34:30:71:284 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: null @@ -32,14 +32,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q2 finished at: 2023-9-24 22:25:21:279:707 +Q2 finished at: 2023-10-4 10:34:30:89:717 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:21:365:627 + Q3 finished at: 2023-10-4 10:34:31:69:812 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:25:21:464:628 - Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:21:500:716 + Q3 finished at: 2023-10-4 10:34:31:217:604 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: null @@ -56,8 +53,11 @@ Q2 finished at: 2023-9-24 22:25:21:279:707 *(6) expected_result: null - Q4 finished at: 2023-9-24 22:25:21:512:846 - Q5 finished at: 2023-9-24 22:25:21:528:200 + Q4 finished at: 2023-10-4 10:34:31:232:120 + Q5-T3 execute opt: 'BEGIN;' + Q5 finished at: 2023-10-4 10:34:32:69:885 + Q5-T3 execute sql: 'BEGIN TRANSACTION;' + Q5 finished at: 2023-10-4 10:34:32:211:749 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: null @@ -74,19 +74,19 @@ Q2 finished at: 2023-9-24 22:25:21:279:707 *(6) expected_result: null - Q6 finished at: 2023-9-24 22:25:21:542:130 + Q6 finished at: 2023-10-4 10:34:32:225:707 Q7-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' -Q7 finished at: 2023-9-24 22:25:21:566:511 +Q7 finished at: 2023-10-4 10:34:33:76:807 Q8-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 0);' - Q8 finished at: 2023-9-24 22:25:21:673:468 + Q8 finished at: 2023-10-4 10:34:34:81:75 Q9-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 0);' - Q9 finished at: 2023-9-24 22:25:21:773:555 + Q9 finished at: 2023-10-4 10:34:35:81:85 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:25:21:868:175 +Q10 finished at: 2023-10-4 10:34:36:72:282 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:25:21:968:744 + Q11 finished at: 2023-10-4 10:34:37:72:457 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:25:22:68:304 + Q12 finished at: 2023-10-4 10:34:38:72:447 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) (2,0) @@ -103,9 +103,9 @@ Q10 finished at: 2023-9-24 22:25:21:868:175 (6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-24 22:25:22:221:583 + Q13 finished at: 2023-10-4 10:34:38:236:984 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:25:22:221:944 + Q14 finished at: 2023-10-4 10:34:38:237:350 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt index 2e975ca2..6cbdd3c0 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_read_only_transaction_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:31:622:381 +Q1 finished at: 2023-10-4 10:35:1:666:495 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:31:623:652 +Q1 finished at: 2023-10-4 10:35:1:667:782 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,7 +34,7 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' *(6) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:25:31:653:554 +Q2 finished at: 2023-10-4 10:35:1:698:454 Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -51,14 +51,11 @@ Q3-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,20) -Q3 finished at: 2023-9-24 22:25:31:659:355 +Q3 finished at: 2023-10-4 10:35:1:704:499 Q4-T2 execute opt: 'BEGIN;' - Q4 finished at: 2023-9-24 22:25:31:722:408 + Q4 finished at: 2023-10-4 10:35:2:666:485 Q4-T2 execute sql: 'BEGIN TRANSACTION;' - Q8-T3 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:25:31:822:317 - Q8-T3 execute sql: 'BEGIN TRANSACTION;' - Q4 finished at: 2023-9-24 22:25:31:865:430 + Q4 finished at: 2023-10-4 10:35:2:780:750 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -75,12 +72,15 @@ Q3 finished at: 2023-9-24 22:25:31:659:355 *(6) expected_result: (1,0) - Q5 finished at: 2023-9-24 22:25:31:876:693 + Q5 finished at: 2023-10-4 10:35:2:792:784 Q6-T2 execute sql: 'UPDATE t1 SET v=20 WHERE k=1;' - Q6 finished at: 2023-9-24 22:25:31:878:407 + Q6 finished at: 2023-10-4 10:35:2:797:846 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:25:31:879:36 - Q8 finished at: 2023-9-24 22:25:31:887:806 + Q7 finished at: 2023-10-4 10:35:2:798:585 + Q8-T3 execute opt: 'BEGIN;' + Q8 finished at: 2023-10-4 10:35:3:666:672 + Q8-T3 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2023-10-4 10:35:3:807:889 Q9-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -97,7 +97,7 @@ Q3 finished at: 2023-9-24 22:25:31:659:355 *(6) expected_result: (0,0) - Q9 finished at: 2023-9-24 22:25:31:899:205 + Q9 finished at: 2023-10-4 10:35:3:822:64 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,20) @@ -114,13 +114,13 @@ Q3 finished at: 2023-9-24 22:25:31:659:355 (6) expected_result: (1,0) - Q10 finished at: 2023-9-24 22:25:31:900:268 + Q10 finished at: 2023-10-4 10:35:3:823:215 Q11-T3 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:25:31:900:704 + Q11 finished at: 2023-10-4 10:35:3:823:645 Q12-T1 execute sql: 'UPDATE t1 SET v=11 WHERE k=0;' -Q12 finished at: 2023-9-24 22:25:31:923:35 +Q12 finished at: 2023-10-4 10:35:4:677:185 Q13-T1 execute opt: 'COMMIT'; -Q13 finished at: 2023-9-24 22:25:31:923:897 +Q13 finished at: 2023-10-4 10:35:4:680:517 Q14-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,11) (1,20) @@ -137,9 +137,9 @@ Q13 finished at: 2023-9-24 22:25:31:923:897 *(6) expected_result: (0,11) (1,20) - Q14 finished at: 2023-9-24 22:25:31:935:309 + Q14 finished at: 2023-10-4 10:35:4:740:692 Q15-T3 execute opt: 'COMMIT'; - Q15 finished at: 2023-9-24 22:25:31:935:731 + Q15 finished at: 2023-10-4 10:35:4:743:125 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt index 64a60247..5cfef131 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_mda_step_iat_uname_anomaly.txt @@ -16,9 +16,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_mda_step_iat_uname_anomaly test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:23:196:576 +Q1 finished at: 2023-10-4 10:34:41:90:148 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:23:197:782 +Q1 finished at: 2023-10-4 10:34:41:91:345 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -35,14 +35,11 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (6) expected_result: (1,1) -Q2 finished at: 2023-9-24 22:25:23:228:236 +Q2 finished at: 2023-10-4 10:34:41:121:789 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:23:296:555 + Q3 finished at: 2023-10-4 10:34:42:90:140 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q9-T3 execute opt: 'BEGIN;' - Q9 finished at: 2023-9-24 22:25:23:396:154 - Q9-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:23:425:175 + Q3 finished at: 2023-10-4 10:34:42:202:69 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -59,9 +56,9 @@ Q2 finished at: 2023-9-24 22:25:23:228:236 (6) expected_result: (0,2) - Q4 finished at: 2023-9-24 22:25:23:437:548 + Q4 finished at: 2023-10-4 10:34:42:215:114 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:23:439:261 + Q5 finished at: 2023-10-4 10:34:42:218:788 Q6-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -78,12 +75,15 @@ Q2 finished at: 2023-9-24 22:25:23:228:236 *(6) expected_result: (1,0) - Q6 finished at: 2023-9-24 22:25:23:440:317 + Q6 finished at: 2023-10-4 10:34:42:219:934 Q7-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q7 finished at: 2023-9-24 22:25:23:441:502 + Q7 finished at: 2023-10-4 10:34:42:223:154 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:25:23:442:195 - Q9 finished at: 2023-9-24 22:25:23:451:510 + Q8 finished at: 2023-10-4 10:34:42:224:19 + Q9-T3 execute opt: 'BEGIN;' + Q9 finished at: 2023-10-4 10:34:43:88:855 + Q9-T3 execute sql: 'BEGIN TRANSACTION;' + Q9 finished at: 2023-10-4 10:34:43:142:665 Q10-T3 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -100,9 +100,9 @@ Q2 finished at: 2023-9-24 22:25:23:228:236 *(6) expected_result: (2,0) - Q10 finished at: 2023-9-24 22:25:23:464:469 + Q10 finished at: 2023-10-4 10:34:43:156:639 Q11-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11 finished at: 2023-9-24 22:25:23:466:244 + Q11 finished at: 2023-10-4 10:34:43:158:746 Q12-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,1) @@ -119,15 +119,52 @@ Q2 finished at: 2023-9-24 22:25:23:228:236 (6) expected_result: (0,0) - Q12 finished at: 2023-9-24 22:25:23:467:247 + Q12 finished at: 2023-10-4 10:34:43:160:0 Q13-T3 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q13 finished at: 2023-9-24 22:25:23:468:187 + Q13 finished at: 2023-10-4 10:34:43:161:107 Q14-T3 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:25:23:469:52 + Q14 finished at: 2023-10-4 10:34:43:161:814 Q15-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' -Q15 failed reason: 错误: Restart read required at: { read: { physical: 1695565523496291 logical: 1 } local_limit: { physical: 1695565523496291 logical: 1 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q15 failed at: 2023-9-24 22:25:24:999:77 + current_result: + (2,0) + *(1) expected_result: + (2,0) + *(2) expected_result: + (2,0) + *(3) expected_result: + (2,0) + (4) expected_result: + (2,2) + (5) expected_result: + (2,1) + (6) expected_result: + (2,1) + +Q15 finished at: 2023-10-4 10:34:44:94:834 +Q16-T1 execute opt: 'COMMIT'; +Q16 finished at: 2023-10-4 10:34:44:97:115 + Q17-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,2) (1,1) (2,1) + *(1) expected_result: + (0,2) (1,1) (2,1) + *(2) expected_result: + (0,2) (1,1) (2,1) + *(3) expected_result: + (0,2) (1,1) (2,1) + *(4) expected_result: + (0,2) (1,1) (2,1) + *(5) expected_result: + (0,2) (1,1) (2,1) + *(6) expected_result: + (0,2) (1,1) (2,1) + + Q17 finished at: 2023-10-4 10:34:44:251:580 + Q18-T4 execute opt: 'COMMIT'; + Q18 finished at: 2023-10-4 10:34:44:251:973 + +The current result is consistent with the [(1) expected_result] of serial scheduling -Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565523496291 logical: 1 } local_limit: { physical: 1695565523496291 logical: 1 } global_limit: in_txn_limit: serial_no: 0 }; +Test Result: Avoid +Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt index 0d4fa5b2..0dc52410 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_lost_update_committed.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_lost_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:8:338:586 +Q1 finished at: 2023-10-4 10:33:31:549:914 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:8:339:762 +Q1 finished at: 2023-10-4 10:33:31:551:270 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,33 +25,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:25:8:366:698 +Q2 finished at: 2023-10-4 10:33:31:581:25 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:8:438:824 + Q3 finished at: 2023-10-4 10:33:32:549:943 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q6 finished at: 2023-9-24 22:25:8:541:124 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:25:8:542:714 - Q3 finished at: 2023-9-24 22:25:8:560:726 + Q3 finished at: 2023-10-4 10:33:32:651:978 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:25:8:574:577 + Q4 finished at: 2023-10-4 10:33:32:669:297 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:25:8:575:292 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:25:8:627:192 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:25:8:627:526 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 finished at: 2023-10-4 10:33:32:672:759 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q6 failed at: 2023-10-4 10:33:34:156:890 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt index 684a2b1b..6ff77633 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/iat_sda_non_repeatable_read_committed.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------iat_sda_non_repeatable_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:7:46:225 +Q1 finished at: 2023-10-4 10:33:26:437:947 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:7:46:767 +Q1 finished at: 2023-10-4 10:33:26:439:360 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,13 +25,16 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:25:7:55:148 +Q2 finished at: 2023-10-4 10:33:26:468:605 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:7:146:792 + Q3 finished at: 2023-10-4 10:33:27:437:867 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:7:246:198 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' + Q3 finished at: 2023-10-4 10:33:27:512:316 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-10-4 10:33:27:528:823 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-10-4 10:33:27:529:833 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) *(1) expected_result: @@ -39,12 +42,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q6 finished at: 2023-9-24 22:25:7:247:910 +Q6 finished at: 2023-10-4 10:33:28:441:533 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:25:7:248:366 - Q4 finished at: 2023-9-24 22:25:7:260:4 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:25:7:261:349 +Q7 finished at: 2023-10-4 10:33:28:443:592 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -53,9 +53,9 @@ Q7 finished at: 2023-9-24 22:25:7:248:366 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-24 22:25:7:319:108 + Q8 finished at: 2023-10-4 10:33:28:594:601 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:25:7:319:449 + Q9 finished at: 2023-10-4 10:33:28:594:935 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt index 2460f856..04a0ced6 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1.txt @@ -15,19 +15,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:18:664:150 +Q1 finished at: 2023-10-4 10:30:14:80:825 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:18:665:408 +Q1 finished at: 2023-10-4 10:30:14:82:61 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:18:697:336 +Q2 finished at: 2023-10-4 10:30:14:118:570 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:18:764:207 + Q3 finished at: 2023-10-4 10:30:15:80:877 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:18:865:161 - Q3 finished at: 2023-9-24 22:24:18:885:185 + Q3 finished at: 2023-10-4 10:30:15:215:206 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:18:898:848 + Q4 finished at: 2023-10-4 10:30:15:234:900 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -36,13 +34,11 @@ Q6 finished at: 2023-9-24 22:24:18:865:161 *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:18:899:964 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:18:964:65 -Q8-T1 execute opt: 'COMMIT'; -Q8 failed reason: 错误: Heartbeat: Transaction 73dd3355-dd7c-46d8-9f22-198a23937661 expired or aborted by a conflict: 40001 errcode: 40001 -Q8 failed at: 2023-9-24 22:24:19:865:695 + Q5 finished at: 2023-10-4 10:30:15:236:66 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q6 failed at: 2023-10-4 10:30:16:690:884 Test Result: Rollback -Err:错误: Heartbeat: Transaction 73dd3355-dd7c-46d8-9f22-198a23937661 expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt index bfdcc6f0..5d3e1bdd 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew1_committed.txt @@ -15,46 +15,32 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew1_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:20:705:389 +Q1 finished at: 2023-10-4 10:30:20:931:567 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:20:706:560 +Q1 finished at: 2023-10-4 10:30:20:932:804 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:20:738:544 +Q2 finished at: 2023-10-4 10:30:20:969:123 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:20:805:207 + Q3 finished at: 2023-10-4 10:30:21:931:496 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' -Q7 finished at: 2023-9-24 22:24:20:905:203 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:20:906:220 - Q3 finished at: 2023-9-24 22:24:20:909:502 + Q3 finished at: 2023-10-4 10:30:22:31:356 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:20:922:672 + Q4 finished at: 2023-10-4 10:30:22:47:393 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: + *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:20:923:699 + Q5 finished at: 2023-10-4 10:30:22:48:536 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:20:924:345 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,1) (1,1) - *(1) expected_result: - (0,1) (1,1) - (2) expected_result: - (0,1) (1,2) - - Q9 finished at: 2023-9-24 22:24:20:988:765 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:20:989:105 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q6 finished at: 2023-10-4 10:30:22:49:354 +Q7-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' +Q7 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q7 failed at: 2023-10-4 10:30:23:641:374 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt index ad8e8e24..4a79d691 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_double_write_skew2.txt @@ -15,46 +15,23 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_double_write_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:22:97:828 +Q1 finished at: 2023-10-4 10:30:26:544:722 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:22:98:418 +Q1 finished at: 2023-10-4 10:30:26:545:977 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:22:107:369 +Q2 finished at: 2023-10-4 10:30:26:582:412 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:22:198:478 + Q3 finished at: 2023-10-4 10:30:27:544:886 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:22:294:496 + Q3 finished at: 2023-10-4 10:30:27:665:559 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' - current_result: - (1,0) - *(1) expected_result: - (1,0) - (2) expected_result: - (1,1) - -Q6 finished at: 2023-9-24 22:24:22:299:228 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:22:299:970 - Q4 finished at: 2023-9-24 22:24:22:306:960 + Q4 finished at: 2023-10-4 10:30:27:682:602 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:22:308:38 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:24:22:401:426 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,1) - *(1) expected_result: - (0,2) (1,1) - (2) expected_result: - (0,1) (1,1) - - Q9 finished at: 2023-9-24 22:24:22:540:792 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:22:541:170 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q5 finished at: 2023-10-4 10:30:27:685:519 +Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' +Q6 failed reason: 错误: Heartbeat: Transaction b50a26d9-3ecd-45e3-8809-dde1988588ed expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction b50a26d9-3ecd-45e3-8809-dde19 errcode: 40001 +Q6 failed at: 2023-10-4 10:30:29:154:163 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction b50a26d9-3ecd-45e3-8809-dde1988588ed expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction b50a26d9-3ecd-45e3-8809-dde19 diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt index 8eb0b343..37b927da 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:23:210:218 +Q1 finished at: 2023-10-4 10:30:32:278:358 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:23:210:544 +Q1 finished at: 2023-10-4 10:30:32:278:792 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,15 +26,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:24:23:219:834 +Q2 finished at: 2023-10-4 10:30:32:288:243 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:23:310:186 + Q3 finished at: 2023-10-4 10:30:33:279:648 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:23:359:202 + Q3 finished at: 2023-10-4 10:30:33:420:54 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:23:375:183 + Q4 finished at: 2023-10-4 10:30:33:438:223 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:23:376:266 + Q5 finished at: 2023-10-4 10:30:33:441:411 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -43,11 +43,11 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' (2) expected_result: (1,1) -Q6 finished at: 2023-9-24 22:24:23:411:397 +Q6 finished at: 2023-10-4 10:30:34:283:832 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:23:511:134 + Q7 finished at: 2023-10-4 10:30:35:282:223 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:23:610:510 +Q8 finished at: 2023-10-4 10:30:36:280:749 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,9 +56,9 @@ Q8 finished at: 2023-9-24 22:24:23:610:510 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:24:23:677:856 + Q9 finished at: 2023-10-4 10:30:36:445:765 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:23:678:192 + Q10 finished at: 2023-10-4 10:30:36:446:105 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt index 3ab2728e..71483a21 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2.txt @@ -15,39 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:27:118:947 +Q1 finished at: 2023-10-4 10:30:49:372:458 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:27:120:135 +Q1 finished at: 2023-10-4 10:30:49:373:578 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:27:150:251 +Q2 finished at: 2023-10-4 10:30:49:409:399 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:27:218:35 + Q3 finished at: 2023-10-4 10:30:50:372:542 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:27:312:93 + Q3 finished at: 2023-10-4 10:30:50:492:168 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:27:318:795 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:27:319:580 current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:24:27:323:17 + Q4 finished at: 2023-10-4 10:30:50:504:854 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: + *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:27:323:923 + Q5 finished at: 2023-10-4 10:30:50:505:835 +Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q6 finished at: 2023-10-4 10:30:51:379:689 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-10-4 10:30:51:383:251 Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:24:27:419:669 + Q8 finished at: 2023-10-4 10:30:52:373:370 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,11 +56,11 @@ Q7 finished at: 2023-9-24 22:24:27:319:580 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:24:27:560:79 + Q9 finished at: 2023-10-4 10:30:52:528:208 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:27:560:426 + Q10 finished at: 2023-10-4 10:30:52:528:555 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt index f0d1233e..6857152e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew2_committed.txt @@ -15,39 +15,39 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:28:607:384 +Q1 finished at: 2023-10-4 10:30:55:316:963 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:28:608:583 +Q1 finished at: 2023-10-4 10:30:55:318:294 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:28:640:339 +Q2 finished at: 2023-10-4 10:30:55:354:698 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:28:707:491 + Q3 finished at: 2023-10-4 10:30:56:317:131 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:24:28:808:106 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:28:809:267 - Q3 finished at: 2023-9-24 22:24:28:818:121 + Q3 finished at: 2023-10-4 10:30:56:450:970 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: + (1,0) + (1) expected_result: (1,1) - *(1) expected_result: - (1,1) - (2) expected_result: + *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:24:28:832:975 + Q4 finished at: 2023-10-4 10:30:56:464:973 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,1) - *(1) expected_result: - (0,1) - (2) expected_result: + *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:28:834:108 + Q5 finished at: 2023-10-4 10:30:56:465:965 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:28:834:555 + Q6 finished at: 2023-10-4 10:30:56:466:364 +Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' +Q7 finished at: 2023-10-4 10:30:57:324:522 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:30:57:327:975 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,11 +56,11 @@ Q8 finished at: 2023-9-24 22:24:28:809:267 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:24:28:894:339 + Q9 finished at: 2023-10-4 10:30:57:481:274 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:28:894:678 + Q10 finished at: 2023-10-4 10:30:57:481:616 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt index 1aa97dfe..eb00c256 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_delete.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:24:578:289 +Q1 finished at: 2023-10-4 10:30:39:388:749 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:24:579:505 +Q1 finished at: 2023-10-4 10:30:39:389:954 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -26,10 +26,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-24 22:24:24:607:660 +Q2 finished at: 2023-10-4 10:30:39:420:103 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:24:678:687 + Q3 finished at: 2023-10-4 10:30:40:388:793 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:30:40:518:782 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' + Q4 finished at: 2023-10-4 10:30:40:535:527 + Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q5 finished at: 2023-10-4 10:30:40:538:660 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-10-4 10:30:40:539:434 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (1,0) (0,0) @@ -38,16 +45,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-24 22:24:24:779:728 +Q7 finished at: 2023-10-4 10:30:41:392:666 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:24:780:593 - Q3 finished at: 2023-9-24 22:24:24:800:497 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:24:816:278 - Q5-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:24:817:594 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:24:818:427 +Q8 finished at: 2023-10-4 10:30:41:396:383 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: null @@ -56,9 +56,9 @@ Q8 finished at: 2023-9-24 22:24:24:780:593 *(2) expected_result: null - Q9 finished at: 2023-9-24 22:24:24:885:381 + Q9 finished at: 2023-10-4 10:30:41:549:102 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:24:885:719 + Q10 finished at: 2023-10-4 10:30:41:549:448 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt index bf5b691c..be91f435 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_read_skew_predicate_based_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_read_skew_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:25:717:865 +Q1 finished at: 2023-10-4 10:30:44:288:434 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:25:719:236 +Q1 finished at: 2023-10-4 10:30:44:289:669 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -24,10 +24,17 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q2 finished at: 2023-9-24 22:24:25:762:327 +Q2 finished at: 2023-10-4 10:30:44:331:174 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:25:817:728 + Q3 finished at: 2023-10-4 10:30:45:288:585 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:30:45:392:498 + Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' + Q4 finished at: 2023-10-4 10:30:45:402:706 + Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' + Q5 finished at: 2023-10-4 10:30:45:405:812 + Q6-T2 execute opt: 'COMMIT'; + Q6 finished at: 2023-10-4 10:30:45:406:686 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -36,16 +43,9 @@ Q7-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) (1,0) -Q7 finished at: 2023-9-24 22:24:25:918:905 +Q7 finished at: 2023-10-4 10:30:46:292:221 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:25:919:897 - Q3 finished at: 2023-9-24 22:24:25:941:929 - Q4-T2 execute sql: 'INSERT into t1 (k,v) VALUES(1,0);' - Q4 finished at: 2023-9-24 22:24:25:949:663 - Q5-T2 execute sql: 'INSERT into t1 (k,v) VALUES(0,0);' - Q5 finished at: 2023-9-24 22:24:25:950:940 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:25:951:766 +Q8 finished at: 2023-10-4 10:30:46:294:645 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,0) (1,0) @@ -54,9 +54,9 @@ Q8 finished at: 2023-9-24 22:24:25:919:897 *(2) expected_result: (0,0) (1,0) - Q9 finished at: 2023-9-24 22:24:26:14:702 + Q9 finished at: 2023-10-4 10:30:46:367:36 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:26:15:51 + Q10 finished at: 2023-10-4 10:30:46:367:366 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt index 4e687654..114e7173 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew.txt @@ -15,17 +15,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:15:370:674 +Q1 finished at: 2023-10-4 10:30:2:136:478 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:15:371:394 +Q1 finished at: 2023-10-4 10:30:2:137:642 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:15:388:312 +Q2 finished at: 2023-10-4 10:30:2:173:475 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:15:470:411 + Q3 finished at: 2023-10-4 10:30:3:136:491 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:15:535:387 + Q3 finished at: 2023-10-4 10:30:3:211:952 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:15:549:724 + Q4 finished at: 2023-10-4 10:30:3:227:548 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,7 +34,7 @@ Q2 finished at: 2023-9-24 22:24:15:388:312 *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:15:551:179 + Q5 finished at: 2023-10-4 10:30:3:228:602 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' current_result: (1,0) @@ -43,11 +43,11 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=1; ' (2) expected_result: (1,1) -Q6 finished at: 2023-9-24 22:24:15:571:71 +Q6 finished at: 2023-10-4 10:30:4:140:409 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:15:671:172 + Q7 finished at: 2023-10-4 10:30:5:138:980 Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:15:773:410 +Q8 finished at: 2023-10-4 10:30:6:139:8 Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -56,9 +56,9 @@ Q8 finished at: 2023-9-24 22:24:15:773:410 *(2) expected_result: (0,1) (1,1) - Q9 finished at: 2023-9-24 22:24:15:889:870 + Q9 finished at: 2023-10-4 10:30:6:285:200 Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:15:890:213 + Q10 finished at: 2023-10-4 10:30:6:285:537 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt index 7ec2cb4a..c9c8f614 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_dda_write_read_skew_committed.txt @@ -15,17 +15,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_dda_write_read_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:16:810:404 +Q1 finished at: 2023-10-4 10:30:9:67:225 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:16:810:763 +Q1 finished at: 2023-10-4 10:30:9:68:572 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:16:820:527 +Q2 finished at: 2023-10-4 10:30:9:104:482 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:16:910:409 + Q3 finished at: 2023-10-4 10:30:10:67:436 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:16:956:744 + Q3 finished at: 2023-10-4 10:30:10:200:256 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:16:970:163 + Q4 finished at: 2023-10-4 10:30:10:219:335 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -34,13 +34,32 @@ Q2 finished at: 2023-9-24 22:24:16:820:527 *(2) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:16:971:469 + Q5 finished at: 2023-10-4 10:30:10:220:527 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:16:972:298 + Q6 finished at: 2023-10-4 10:30:10:221:455 Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565457011227 } local_limit: { physical: 1695565457011227 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q7 failed at: 2023-9-24 22:24:17:714:197 + current_result: + (1,0) + *(1) expected_result: + (1,0) + (2) expected_result: + (1,1) -Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565457011227 } local_limit: { physical: 1695565457011227 } global_limit: in_txn_limit: serial_no: 0 }; +Q7 finished at: 2023-10-4 10:30:11:71:261 +Q8-T1 execute opt: 'COMMIT'; +Q8 finished at: 2023-10-4 10:30:11:75:21 + Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' + current_result: + (0,1) (1,1) + *(1) expected_result: + (0,1) (1,1) + *(2) expected_result: + (0,1) (1,1) + + Q9 finished at: 2023-10-4 10:30:11:230:929 + Q10-T3 execute opt: 'COMMIT'; + Q10 finished at: 2023-10-4 10:30:11:231:286 + +Test Result: Anomaly +Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt index 924663f3..df4bf75c 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat.txt @@ -16,20 +16,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:29:844:741 +Q1 finished at: 2023-10-4 10:31:0:259:983 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:29:845:908 +Q1 finished at: 2023-10-4 10:31:0:261:169 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:29:879:532 +Q2 finished at: 2023-10-4 10:31:0:297:871 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:29:944:902 + Q3 finished at: 2023-10-4 10:31:1:260:149 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:24:30:44:580 - Q6-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:30:85:382 + Q3 finished at: 2023-10-4 10:31:1:388:533 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:30:98:849 + Q4 finished at: 2023-10-4 10:31:1:405:75 Q5-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -46,10 +43,13 @@ Q2 finished at: 2023-9-24 22:24:29:879:532 *(6) expected_result: (0,0) - Q5 finished at: 2023-9-24 22:24:30:100:48 - Q6 finished at: 2023-9-24 22:24:30:104:656 + Q5 finished at: 2023-10-4 10:31:1:406:244 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:31:2:260:151 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2023-10-4 10:31:2:401:490 Q7-T3 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q7 finished at: 2023-9-24 22:24:30:116:731 + Q7 finished at: 2023-10-4 10:31:2:417:32 Q8-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -66,7 +66,7 @@ Q2 finished at: 2023-9-24 22:24:29:879:532 *(6) expected_result: (1,0) - Q8 finished at: 2023-9-24 22:24:30:117:912 + Q8 finished at: 2023-10-4 10:31:2:418:275 Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' current_result: (2,0) @@ -83,13 +83,13 @@ Q9-T1 execute sql: 'SELECT * FROM t1 WHERE k=2;' (6) expected_result: (2,1) -Q9 finished at: 2023-9-24 22:24:30:145:143 +Q9 finished at: 2023-10-4 10:31:3:265:221 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:24:30:149:39 +Q10 finished at: 2023-10-4 10:31:3:268:734 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:24:30:247:310 + Q11 finished at: 2023-10-4 10:31:4:262:464 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:24:30:347:446 + Q12 finished at: 2023-10-4 10:31:5:262:750 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -106,9 +106,9 @@ Q10 finished at: 2023-9-24 22:24:30:149:39 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-24 22:24:30:517:89 + Q13 finished at: 2023-10-4 10:31:5:420:318 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:24:30:517:442 + Q14 finished at: 2023-10-4 10:31:5:420:696 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt index 7855c042..1ef7cf5a 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_long_fork.txt @@ -15,15 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_long_fork test run---------- Q1-T4 execute opt: 'BEGIN;' - Q1 finished at: 2023-9-24 22:24:31:448:735 + Q1 finished at: 2023-10-4 10:31:8:215:142 Q1-T4 execute sql: 'BEGIN TRANSACTION;' -Q3-T1 execute opt: 'BEGIN;' -Q3 finished at: 2023-9-24 22:24:31:548:71 -Q3-T1 execute sql: 'BEGIN TRANSACTION;' -Q3 finished at: 2023-9-24 22:24:31:548:778 -Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q4 finished at: 2023-9-24 22:24:31:562:856 - Q1 finished at: 2023-9-24 22:24:31:579:642 + Q1 finished at: 2023-10-4 10:31:8:347:519 Q2-T4 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -56,14 +50,17 @@ Q4 finished at: 2023-9-24 22:24:31:562:856 *(14) expected_result: (0,0) - Q2 finished at: 2023-9-24 22:24:31:591:104 + Q2 finished at: 2023-10-4 10:31:8:360:604 +Q3-T1 execute opt: 'BEGIN;' +Q3 finished at: 2023-10-4 10:31:9:215:111 +Q3-T1 execute sql: 'BEGIN TRANSACTION;' +Q3 finished at: 2023-10-4 10:31:9:216:377 +Q4-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' +Q4 finished at: 2023-10-4 10:31:9:250:538 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:24:31:647:848 + Q5 finished at: 2023-10-4 10:31:10:215:250 Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q8-T2 execute opt: 'BEGIN;' - Q8 finished at: 2023-9-24 22:24:31:748:296 - Q8-T2 execute sql: 'BEGIN TRANSACTION;' - Q5 finished at: 2023-9-24 22:24:31:775:733 + Q5 finished at: 2023-10-4 10:31:10:345:875 Q6-T3 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -96,7 +93,7 @@ Q4 finished at: 2023-9-24 22:24:31:562:856 (14) expected_result: (1,1) - Q6 finished at: 2023-9-24 22:24:31:790:27 + Q6 finished at: 2023-10-4 10:31:10:360:76 Q7-T3 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -129,10 +126,13 @@ Q4 finished at: 2023-9-24 22:24:31:562:856 *(14) expected_result: (0,0) - Q7 finished at: 2023-9-24 22:24:31:791:405 - Q8 finished at: 2023-9-24 22:24:31:804:443 + Q7 finished at: 2023-10-4 10:31:10:361:625 + Q8-T2 execute opt: 'BEGIN;' + Q8 finished at: 2023-10-4 10:31:11:215:465 + Q8-T2 execute sql: 'BEGIN TRANSACTION;' + Q8 finished at: 2023-10-4 10:31:11:353:465 Q9-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q9 finished at: 2023-9-24 22:24:31:815:989 + Q9 finished at: 2023-10-4 10:31:11:371:163 Q10-T4 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -165,15 +165,15 @@ Q4 finished at: 2023-9-24 22:24:31:562:856 *(14) expected_result: (1,0) - Q10 finished at: 2023-9-24 22:24:31:849:656 + Q10 finished at: 2023-10-4 10:31:12:221:246 Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-24 22:24:31:951:725 +Q11 finished at: 2023-10-4 10:31:13:217:767 Q12-T2 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:24:32:51:389 + Q12 finished at: 2023-10-4 10:31:14:218:106 Q13-T3 execute opt: 'COMMIT'; - Q13 finished at: 2023-9-24 22:24:32:150:84 + Q13 finished at: 2023-10-4 10:31:15:216:485 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:24:32:152:546 + Q14 finished at: 2023-10-4 10:31:15:219:10 Q15-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) @@ -206,9 +206,9 @@ Q11 finished at: 2023-9-24 22:24:31:951:725 *(14) expected_result: (0,1) (1,1) - Q15 finished at: 2023-9-24 22:24:32:212:60 + Q15 finished at: 2023-10-4 10:31:15:277:656 Q16-T4 execute opt: 'COMMIT'; - Q16 finished at: 2023-9-24 22:24:32:214:48 + Q16 finished at: 2023-10-4 10:31:15:279:936 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt index 25c0b539..87eba5f5 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_delete.txt @@ -16,20 +16,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:33:335:895 +Q1 finished at: 2023-10-4 10:31:18:204:829 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:33:337:218 +Q1 finished at: 2023-10-4 10:31:18:206:84 Q2-T1 execute sql: 'DELETE FROM t1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:33:368:799 +Q2 finished at: 2023-10-4 10:31:18:241:649 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:33:435:929 + Q3 finished at: 2023-10-4 10:31:19:204:830 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:24:33:535:187 - Q6-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:33:559:48 + Q3 finished at: 2023-10-4 10:31:19:314:467 Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:33:573:113 + Q4 finished at: 2023-10-4 10:31:19:330:638 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: (1,) @@ -46,10 +43,13 @@ Q2 finished at: 2023-9-24 22:24:33:368:799 *(6) expected_result: (1,) - Q5 finished at: 2023-9-24 22:24:33:577:442 - Q6 finished at: 2023-9-24 22:24:33:586:199 + Q5 finished at: 2023-10-4 10:31:19:334:820 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:31:20:204:884 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2023-10-4 10:31:20:329:928 Q7-T3 execute sql: 'DELETE FROM t1 WHERE k=2;' - Q7 finished at: 2023-9-24 22:24:33:599:459 + Q7 finished at: 2023-10-4 10:31:20:345:211 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: (1,) @@ -66,7 +66,7 @@ Q2 finished at: 2023-9-24 22:24:33:368:799 *(6) expected_result: (1,) - Q8 finished at: 2023-9-24 22:24:33:603:269 + Q8 finished at: 2023-10-4 10:31:20:348:715 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: (1,) @@ -83,13 +83,13 @@ Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' (6) expected_result: (,) -Q9 finished at: 2023-9-24 22:24:33:641:225 +Q9 finished at: 2023-10-4 10:31:21:222:857 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:24:33:642:464 +Q10 finished at: 2023-10-4 10:31:21:226:612 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:24:33:738:513 + Q11 finished at: 2023-10-4 10:31:22:207:534 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:24:33:838:571 + Q12 finished at: 2023-10-4 10:31:23:207:226 Q13-T4 execute sql: 'SELECT * FROM t1;' current_result: null @@ -106,9 +106,9 @@ Q10 finished at: 2023-9-24 22:24:33:642:464 *(6) expected_result: null - Q13 finished at: 2023-9-24 22:24:33:975:616 + Q13 finished at: 2023-10-4 10:31:23:346:463 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:24:33:975:957 + Q14 finished at: 2023-10-4 10:31:23:346:844 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt index cc112797..e27a8886 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_mda_step_rat_predicate_based_insert.txt @@ -13,20 +13,17 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_mda_step_rat_predicate_based_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:34:815:864 +Q1 finished at: 2023-10-4 10:31:26:369:117 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:34:817:9 +Q1 finished at: 2023-10-4 10:31:26:370:458 Q2-T1 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 1);' -Q2 finished at: 2023-9-24 22:24:34:835:626 +Q2 finished at: 2023-10-4 10:31:26:393:917 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:34:915:921 + Q3 finished at: 2023-10-4 10:31:27:368:971 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:24:35:15:551 - Q6-T3 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:35:49:206 + Q3 finished at: 2023-10-4 10:31:27:469:928 Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (1, 1);' - Q4 finished at: 2023-9-24 22:24:35:56:240 + Q4 finished at: 2023-10-4 10:31:27:478:938 Q5-T2 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 0;' current_result: (,) @@ -43,10 +40,13 @@ Q2 finished at: 2023-9-24 22:24:34:835:626 (6) expected_result: (1,) - Q5 finished at: 2023-9-24 22:24:35:65:518 - Q6 finished at: 2023-9-24 22:24:35:75:875 + Q5 finished at: 2023-10-4 10:31:27:489:618 + Q6-T3 execute opt: 'BEGIN;' + Q6 finished at: 2023-10-4 10:31:28:369:325 + Q6-T3 execute sql: 'BEGIN TRANSACTION;' + Q6 finished at: 2023-10-4 10:31:28:498:581 Q7-T3 execute sql: 'INSERT INTO t1 (k,v) VALUES (2, 1);' - Q7 finished at: 2023-9-24 22:24:35:82:541 + Q7 finished at: 2023-10-4 10:31:28:508:663 Q8-T3 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 1;' current_result: (,) @@ -63,7 +63,7 @@ Q2 finished at: 2023-9-24 22:24:34:835:626 *(6) expected_result: (,) - Q8 finished at: 2023-9-24 22:24:35:92:744 + Q8 finished at: 2023-10-4 10:31:28:522:914 Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' current_result: (,) @@ -80,13 +80,13 @@ Q9-T1 execute sql: 'SELECT SUM(v) FROM t1 WHERE k = 2;' *(6) expected_result: (,) -Q9 finished at: 2023-9-24 22:24:35:125:705 +Q9 finished at: 2023-10-4 10:31:29:408:368 Q10-T1 execute opt: 'COMMIT'; -Q10 finished at: 2023-9-24 22:24:35:126:496 +Q10 finished at: 2023-10-4 10:31:29:411:949 Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:24:35:218:473 + Q11 finished at: 2023-10-4 10:31:30:371:577 Q12-T3 execute opt: 'COMMIT'; - Q12 finished at: 2023-9-24 22:24:35:316:318 + Q12 finished at: 2023-10-4 10:31:31:371:549 Q13-T4 execute sql: 'SELECT * FROM t1 ORDER BY k;' current_result: (0,1) (1,1) (2,1) @@ -103,9 +103,9 @@ Q10 finished at: 2023-9-24 22:24:35:126:496 *(6) expected_result: (0,1) (1,1) (2,1) - Q13 finished at: 2023-9-24 22:24:35:422:878 + Q13 finished at: 2023-10-4 10:31:31:533:725 Q14-T4 execute opt: 'COMMIT'; - Q14 finished at: 2023-9-24 22:24:35:423:215 + Q14 finished at: 2023-10-4 10:31:31:534:76 Test Result: Anomaly Reason: Data anomaly is not recognized by the database, resulting in data inconsistencies diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt index a58901f0..410617f8 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_dirty_read.txt @@ -14,35 +14,35 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_dirty_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:4:896:984 +Q1 finished at: 2023-10-4 10:29:21:253:917 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:4:898:282 +Q1 finished at: 2023-10-4 10:29:21:255:305 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:4:933:393 +Q2 finished at: 2023-10-4 10:29:21:292:40 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:4:997:257 + Q3 finished at: 2023-10-4 10:29:22:254:302 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-24 22:24:5:97:489 - Q3 finished at: 2023-9-24 22:24:5:107:747 + Q3 finished at: 2023-10-4 10:29:22:359:404 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k = 0;' current_result: (0,0) *(1) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:24:5:124:372 + Q4 finished at: 2023-10-4 10:29:22:373:156 +Q5-T1 execute opt: 'ROLLBACK'; +Q5 finished at: 2023-10-4 10:29:23:257:469 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:5:198:234 + Q6 finished at: 2023-10-4 10:29:24:255:127 Q7-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,0) *(1) expected_result: (0,0) - Q7 finished at: 2023-9-24 22:24:5:333:949 + Q7 finished at: 2023-10-4 10:29:24:414:929 Q8-T3 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:24:5:334:282 + Q8 finished at: 2023-10-4 10:29:24:415:278 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt index 0060cfcb..cc6756d3 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read.txt @@ -14,17 +14,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:8:58:25 +Q1 finished at: 2023-10-4 10:29:34:269:607 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:8:59:310 +Q1 finished at: 2023-10-4 10:29:34:270:867 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:8:92:194 +Q2 finished at: 2023-10-4 10:29:34:308:207 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:8:157:976 + Q3 finished at: 2023-10-4 10:29:35:269:528 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5 finished at: 2023-9-24 22:24:8:260:541 - Q3 finished at: 2023-9-24 22:24:8:294:111 + Q3 finished at: 2023-10-4 10:29:35:397:995 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -33,11 +31,13 @@ Q5 finished at: 2023-9-24 22:24:8:260:541 *(2) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:24:8:306:447 + Q4 finished at: 2023-10-4 10:29:35:412:429 +Q5-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q5 finished at: 2023-10-4 10:29:36:272:928 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:8:358:821 + Q6 finished at: 2023-10-4 10:29:37:270:222 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:8:460:468 +Q7 finished at: 2023-10-4 10:29:38:271:660 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -46,9 +46,9 @@ Q7 finished at: 2023-9-24 22:24:8:460:468 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-24 22:24:8:606:878 + Q8 finished at: 2023-10-4 10:29:38:422:850 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:8:607:216 + Q9 finished at: 2023-10-4 10:29:38:423:276 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt index a87cc0d9..00880091 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_intermediate_read_committed.txt @@ -14,30 +14,30 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_intermediate_read_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:9:658:8 +Q1 finished at: 2023-10-4 10:29:41:317:141 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:9:659:298 +Q1 finished at: 2023-10-4 10:29:41:318:340 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:9:692:766 +Q2 finished at: 2023-10-4 10:29:41:354:751 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:9:757:855 + Q3 finished at: 2023-10-4 10:29:42:317:248 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q6 finished at: 2023-9-24 22:24:9:861:164 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:9:863:717 - Q3 finished at: 2023-9-24 22:24:9:894:973 + Q3 finished at: 2023-10-4 10:29:42:418:236 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: + (0,0) + (1) expected_result: (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: + *(2) expected_result: (0,0) - Q4 finished at: 2023-9-24 22:24:9:908:456 + Q4 finished at: 2023-10-4 10:29:42:429:411 Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:24:9:908:985 + Q5 finished at: 2023-10-4 10:29:42:429:807 +Q6-T1 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' +Q6 finished at: 2023-10-4 10:29:43:324:919 +Q7-T1 execute opt: 'COMMIT'; +Q7 finished at: 2023-10-4 10:29:43:328:396 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,2) @@ -46,11 +46,11 @@ Q7 finished at: 2023-9-24 22:24:9:863:717 *(2) expected_result: (0,2) - Q8 finished at: 2023-9-24 22:24:9:963:724 + Q8 finished at: 2023-10-4 10:29:43:481:245 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:9:964:63 + Q9 finished at: 2023-10-4 10:29:43:481:595 -The current result is consistent with the [(1) expected_result] of serial scheduling +The current result is consistent with the [(2) expected_result] of serial scheduling Test Result: Avoid Reason: Data anomaly did not occur and the data is consistent diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt index fb05cb2d..36386fbf 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_lost_self_update.txt @@ -14,44 +14,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_lost_self_update test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:13:886:335 +Q1 finished at: 2023-10-4 10:29:56:217:720 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:13:887:503 +Q1 finished at: 2023-10-4 10:29:56:218:977 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:13:920:636 +Q2 finished at: 2023-10-4 10:29:56:233:438 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:13:986:193 + Q3 finished at: 2023-10-4 10:29:57:217:841 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' - current_result: - (0,1) - *(1) expected_result: - (0,1) - *(2) expected_result: - (0,1) - -Q5 finished at: 2023-9-24 22:24:14:87:543 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:24:14:89:220 - Q3 finished at: 2023-9-24 22:24:14:110:50 + Q3 finished at: 2023-10-4 10:29:57:350:525 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:14:123:919 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:14:186:892 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:24:14:320:81 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:14:320:413 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q4 finished at: 2023-10-4 10:29:57:368:610 +Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' +Q5 failed reason: 错误: Heartbeat: Transaction 381f9a85-f082-41e4-a4db-cb6bd1d3e3a0 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 381f9a85-f082-41e4-a4db-cb6bd errcode: 40001 +Q5 failed at: 2023-10-4 10:29:58:727:449 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: Heartbeat: Transaction 381f9a85-f082-41e4-a4db-cb6bd1d3e3a0 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 381f9a85-f082-41e4-a4db-cb6bd diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt index 0f261230..03d1575e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:6:361:957 +Q1 finished at: 2023-10-4 10:29:27:403:81 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:6:363:275 +Q1 finished at: 2023-10-4 10:29:27:404:466 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,10 +25,13 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:24:6:392:469 +Q2 finished at: 2023-10-4 10:29:27:434:537 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:6:462:52 + Q3 finished at: 2023-10-4 10:29:28:403:168 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:29:28:504:318 + Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' + Q4 finished at: 2023-10-4 10:29:28:520:343 Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -37,14 +40,11 @@ Q5-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q5 finished at: 2023-9-24 22:24:6:561:809 - Q3 finished at: 2023-9-24 22:24:6:570:629 - Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:6:584:957 +Q5 finished at: 2023-10-4 10:29:29:406:857 Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:6:664:534 + Q6 finished at: 2023-10-4 10:29:30:405:637 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:6:763:52 +Q7 finished at: 2023-10-4 10:29:31:404:352 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,1) @@ -53,9 +53,9 @@ Q7 finished at: 2023-9-24 22:24:6:763:52 *(2) expected_result: (0,1) - Q8 finished at: 2023-9-24 22:24:6:908:757 + Q8 finished at: 2023-10-4 10:29:31:540:717 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:6:909:83 + Q9 finished at: 2023-10-4 10:29:31:541:67 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index e9bf4c9a..b1a6dea0 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_delete test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:10:946:478 +Q1 finished at: 2023-10-4 10:29:46:338:577 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:10:947:745 +Q1 finished at: 2023-10-4 10:29:46:339:784 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -25,10 +25,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:24:10:977:333 +Q2 finished at: 2023-10-4 10:29:46:370:863 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:11:46:438 + Q3 finished at: 2023-10-4 10:29:47:338:652 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:29:47:462:93 + Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' + Q4 finished at: 2023-10-4 10:29:47:478:898 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-10-4 10:29:47:479:547 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: (0,0) @@ -37,14 +42,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' *(2) expected_result: (0,0) -Q6 finished at: 2023-9-24 22:24:11:149:558 +Q6 finished at: 2023-10-4 10:29:48:338:440 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:11:151:436 - Q3 finished at: 2023-9-24 22:24:11:193:517 - Q4-T2 execute sql: 'DELETE FROM t1 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:11:209:423 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:24:11:210:350 +Q7 finished at: 2023-10-4 10:29:48:338:898 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: null @@ -53,9 +53,9 @@ Q7 finished at: 2023-9-24 22:24:11:151:436 *(2) expected_result: null - Q8 finished at: 2023-9-24 22:24:11:264:161 + Q8 finished at: 2023-10-4 10:29:48:397:959 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:11:264:508 + Q9 finished at: 2023-10-4 10:29:48:398:307 The current result is consistent with the [(2) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index 66f95ee6..1e1a422b 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -13,9 +13,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------rat_sda_non_repeatable_read_predicate_based-phantom_insert test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:12:453:459 +Q1 finished at: 2023-10-4 10:29:51:221:580 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:12:454:660 +Q1 finished at: 2023-10-4 10:29:51:222:899 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -24,10 +24,15 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q2 finished at: 2023-9-24 22:24:12:495:436 +Q2 finished at: 2023-10-4 10:29:51:264:825 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:12:553:472 + Q3 finished at: 2023-10-4 10:29:52:221:533 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:29:52:351:235 + Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' + Q4 finished at: 2023-10-4 10:29:52:361:823 + Q5-T2 execute opt: 'COMMIT'; + Q5 finished at: 2023-10-4 10:29:52:362:848 Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' current_result: null @@ -36,14 +41,9 @@ Q6-T1 execute sql: 'SELECT * FROM t1 WHERE v=0;' (2) expected_result: (0,0) -Q6 finished at: 2023-9-24 22:24:12:654:550 +Q6 finished at: 2023-10-4 10:29:53:225:330 Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:12:655:565 - Q3 finished at: 2023-9-24 22:24:12:676:621 - Q4-T2 execute sql: 'INSERT INTO t1 (k,v) VALUES (0, 0);' - Q4 finished at: 2023-9-24 22:24:12:685:5 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:24:12:685:803 +Q7 finished at: 2023-10-4 10:29:53:227:542 Q8-T3 execute sql: 'SELECT * FROM t1;' current_result: (0,0) @@ -52,9 +52,9 @@ Q7 finished at: 2023-9-24 22:24:12:655:565 *(2) expected_result: (0,0) - Q8 finished at: 2023-9-24 22:24:12:739:623 + Q8 finished at: 2023-10-4 10:29:53:366:0 Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:12:739:970 + Q9 finished at: 2023-10-4 10:29:53:366:371 The current result is consistent with the [(1) expected_result] of serial scheduling diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt index ac0794d3..a3e4697d 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_double_write_skew2_committed.txt @@ -15,25 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_double_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:46:597:319 +Q1 finished at: 2023-10-4 10:32:15:124:694 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:46:598:512 +Q1 finished at: 2023-10-4 10:32:15:125:971 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:46:626:913 +Q2 finished at: 2023-10-4 10:32:15:162:26 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:46:695:972 + Q3 finished at: 2023-10-4 10:32:16:124:708 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:46:747:701 + Q3 finished at: 2023-10-4 10:32:16:253:759 Q4-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:46:761:482 + Q4 finished at: 2023-10-4 10:32:16:269:812 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:46:763:34 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:46:763:947 -Q7-T1 execute sql: 'SELECT * FROM t1 WHERE k=1;' -Q7 failed reason: 错误: Restart read required at: { read: { physical: 1695565486796859 } local_limit: { physical: 1695565486796859 } global_limit: in_txn_limit: serial_no: 0 }; errcode: 40001 -Q7 failed at: 2023-9-24 22:24:47:499:552 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:32:16:772:349 Test Result: Rollback -Reason: Err:错误: Restart read required at: { read: { physical: 1695565486796859 } local_limit: { physical: 1695565486796859 } global_limit: in_txn_limit: serial_no: 0 }; +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt index 1d11646b..de26e696 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c1.txt @@ -15,39 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:48:256:742 +Q1 finished at: 2023-10-4 10:32:19:878:566 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:48:257:133 +Q1 finished at: 2023-10-4 10:32:19:879:863 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:48:266:173 +Q2 finished at: 2023-10-4 10:32:19:915:912 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:48:357:800 + Q3 finished at: 2023-10-4 10:32:20:878:446 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:48:459:482 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:48:461:111 - Q3 finished at: 2023-9-24 22:24:48:478:580 + Q3 finished at: 2023-10-4 10:32:21:8:537 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:48:493:289 + Q4 finished at: 2023-10-4 10:32:21:26:262 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:48:494:284 - Q8-T2 execute opt: 'COMMIT'; - Q8 finished at: 2023-9-24 22:24:48:558:205 - Q9-T3 execute sql: 'SELECT * FROM t1 ORDER BY k;' - current_result: - (0,2) (1,2) - (1) expected_result: - (0,1) (1,1) - *(2) expected_result: - (0,2) (1,2) + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:32:21:529:58 - Q9 finished at: 2023-9-24 22:24:48:653:292 - Q10-T3 execute opt: 'COMMIT'; - Q10 finished at: 2023-9-24 22:24:48:653:648 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt index 054b94a5..cf404f02 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_c2.txt @@ -15,27 +15,21 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:49:556:909 +Q1 finished at: 2023-10-4 10:32:25:833:671 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:49:557:231 +Q1 finished at: 2023-10-4 10:32:25:834:917 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:49:565:222 +Q2 finished at: 2023-10-4 10:32:25:849:470 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:49:657:929 + Q3 finished at: 2023-10-4 10:32:26:833:615 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:49:758:980 - Q3 finished at: 2023-9-24 22:24:49:773:798 + Q3 finished at: 2023-10-4 10:32:26:974:419 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:49:789:198 + Q4 finished at: 2023-10-4 10:32:26:991:684 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:49:790:408 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:49:858:31 -Q8-T1 execute opt: 'COMMIT'; -Q8 failed reason: 错误: Heartbeat: Transaction bf623b97-63f8-4cee-8da1-eb5068d8ad92 expired or aborted by a conflict: 40001 errcode: 40001 -Q8 failed at: 2023-9-24 22:24:50:759:226 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:32:27:494:766 Test Result: Rollback -Err:错误: Heartbeat: Transaction bf623b97-63f8-4cee-8da1-eb5068d8ad92 expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt index 14813a68..fd151f3d 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_full_write_skew_committed.txt @@ -15,24 +15,20 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_full_write_skew_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:51:655:420 +Q1 finished at: 2023-10-4 10:32:32:616:646 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:51:655:791 +Q1 finished at: 2023-10-4 10:32:32:617:904 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:51:665:798 +Q2 finished at: 2023-10-4 10:32:32:632:810 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:51:756:144 + Q3 finished at: 2023-10-4 10:32:33:616:539 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:51:832:596 + Q3 finished at: 2023-10-4 10:32:33:692:147 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:51:847:486 + Q4 finished at: 2023-10-4 10:32:33:707:767 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:24:51:856:653 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:51:857:577 Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q5 failed at: 2023-9-24 22:24:52:351:837 + Q5 failed at: 2023-10-4 10:32:34:210:892 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt index 13f118e7..86bfe11a 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c1.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:53:160:68 +Q1 finished at: 2023-10-4 10:32:37:491:249 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:53:160:382 +Q1 finished at: 2023-10-4 10:32:37:492:494 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,23 +26,19 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:24:53:168:372 +Q2 finished at: 2023-10-4 10:32:37:522:539 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:53:260:115 + Q3 finished at: 2023-10-4 10:32:38:491:248 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:53:304:258 + Q3 finished at: 2023-10-4 10:32:38:607:831 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:53:318:398 + Q4 finished at: 2023-10-4 10:32:38:625:470 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:53:320:120 + Q5 finished at: 2023-10-4 10:32:38:628:342 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:53:362:699 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:53:363:843 - Q8-T2 execute opt: 'COMMIT'; - Q8 failed reason: 错误: Transaction d1c09ecb-2041-46fc-9c5e-4931c70d801f expired or aborted by a conflict: 40001 errcode: 40001 - Q8 failed at: 2023-9-24 22:24:54:268:531 +Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 +Q6 failed at: 2023-10-4 10:32:40:104:594 Test Result: Rollback -Err:错误: Transaction d1c09ecb-2041-46fc-9c5e-4931c70d801f expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt index 54ea1f01..53be84f1 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew1_c2.txt @@ -15,9 +15,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew1_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:55:91:942 +Q1 finished at: 2023-10-4 10:32:43:157:114 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:55:92:286 +Q1 finished at: 2023-10-4 10:32:43:158:420 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -26,23 +26,21 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,1) -Q2 finished at: 2023-9-24 22:24:55:100:474 +Q2 finished at: 2023-10-4 10:32:43:187:919 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:55:191:886 + Q3 finished at: 2023-10-4 10:32:44:157:100 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:55:236:415 + Q3 finished at: 2023-10-4 10:32:44:276:427 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:24:55:250:76 + Q4 finished at: 2023-10-4 10:32:44:294:901 Q5-T2 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:55:251:388 + Q5 finished at: 2023-10-4 10:32:44:297:946 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:55:294:38 +Q6 finished at: 2023-10-4 10:32:45:162:869 Q7-T2 execute opt: 'COMMIT'; -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:24:55:493:23 - Q7 failed reason: 错误: Transaction 14291789-1159-4a15-a723-846d92bda4c6 expired or aborted by a conflict: 40001 errcode: 40001 - Q7 failed at: 2023-9-24 22:24:56:95:596 + Q7 failed reason: 错误: Heartbeat: Transaction 84c469ef-6e1e-457c-a845-7d3219ec1e2f expired or aborted by a conflict: 40001 errcode: 40001 + Q7 failed at: 2023-10-4 10:32:46:863:797 Test Result: Rollback -Err:错误: Transaction 14291789-1159-4a15-a723-846d92bda4c6 expired or aborted by a conflict: 40001 +Err:错误: Heartbeat: Transaction 84c469ef-6e1e-457c-a845-7d3219ec1e2f expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt index 22b1a7bd..90452384 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c1.txt @@ -15,15 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:56:896:33 +Q1 finished at: 2023-10-4 10:32:49:894:316 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:56:896:376 +Q1 finished at: 2023-10-4 10:32:49:895:541 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:56:904:611 +Q2 finished at: 2023-10-4 10:32:49:932:65 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:56:996:100 + Q3 finished at: 2023-10-4 10:32:50:894:376 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:57:42:503 + Q3 finished at: 2023-10-4 10:32:51:26:657 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -32,15 +32,13 @@ Q2 finished at: 2023-9-24 22:24:56:904:611 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:24:57:55:145 + Q4 finished at: 2023-10-4 10:32:51:40:931 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q5 finished at: 2023-10-4 10:32:51:45:934 Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:57:101:815 -Q7-T1 execute opt: 'COMMIT'; -Q7 finished at: 2023-9-24 22:24:57:105:284 - Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q5 failed at: 2023-9-24 22:24:57:558:233 +Q6 failed reason: 错误: Heartbeat: Transaction bd441a52-2034-46c9-88c2-dc78fc51b42e expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction bd441a52-2034-46c9-88c2-dc78f errcode: 40001 +Q6 failed at: 2023-10-4 10:32:52:504:119 Test Result: Rollback -Reason: Err:错误: 由于同步更新而无法串行访问 +Reason: Err:错误: Heartbeat: Transaction bd441a52-2034-46c9-88c2-dc78fc51b42e expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction bd441a52-2034-46c9-88c2-dc78f diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt index dd0a93e8..0eecf637 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_c2.txt @@ -15,15 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:58:471:71 +Q1 finished at: 2023-10-4 10:32:55:713:867 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:58:471:535 +Q1 finished at: 2023-10-4 10:32:55:715:216 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:58:480:228 +Q2 finished at: 2023-10-4 10:32:55:752:266 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:58:571:111 + Q3 finished at: 2023-10-4 10:32:56:713:798 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:58:617:161 + Q3 finished at: 2023-10-4 10:32:56:841:795 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -32,17 +32,11 @@ Q2 finished at: 2023-9-24 22:24:58:480:228 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:24:58:630:429 + Q4 finished at: 2023-10-4 10:32:56:854:739 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:24:58:632:297 -Q6-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q6 finished at: 2023-9-24 22:24:58:672:308 - Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:58:772:42 -Q8-T1 execute opt: 'COMMIT'; -Q8 failed reason: 错误: Heartbeat: Transaction 0cae4d21-ec5a-4515-ad80-2b3496cc1241 expired or aborted by a conflict: 40001 errcode: 40001 -Q8 failed at: 2023-9-24 22:24:59:673:200 + Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q5 failed at: 2023-10-4 10:32:57:358:33 Test Result: Rollback -Err:错误: Heartbeat: Transaction 0cae4d21-ec5a-4515-ad80-2b3496cc1241 expired or aborted by a conflict: 40001 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt index 095ba947..814a7547 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_dda_read_write_skew2_committed.txt @@ -15,15 +15,15 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_dda_read_write_skew2_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:0:598:128 +Q1 finished at: 2023-10-4 10:33:2:400:914 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:0:599:292 +Q1 finished at: 2023-10-4 10:33:2:402:275 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:25:0:632:278 +Q2 finished at: 2023-10-4 10:33:2:438:853 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:0:696:988 + Q3 finished at: 2023-10-4 10:33:3:400:959 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:0:743:97 + Q3 finished at: 2023-10-4 10:33:3:522:732 Q4-T2 execute sql: 'SELECT * FROM t1 WHERE k=1;' current_result: (1,0) @@ -32,14 +32,10 @@ Q2 finished at: 2023-9-24 22:25:0:632:278 *(2) expected_result: (1,0) - Q4 finished at: 2023-9-24 22:25:0:756:613 + Q4 finished at: 2023-10-4 10:33:3:536:497 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q7-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=1;' -Q7 finished at: 2023-9-24 22:25:0:798:792 -Q8-T1 execute opt: 'COMMIT'; -Q8 finished at: 2023-9-24 22:25:0:800:183 Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q5 failed at: 2023-9-24 22:25:1:259:348 + Q5 failed at: 2023-10-4 10:33:4:39:673 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt index 2487a90b..72d3946e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c1.txt @@ -16,33 +16,28 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:1:998:741 +Q1 finished at: 2023-10-4 10:33:7:376:118 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:1:999:451 +Q1 finished at: 2023-10-4 10:33:7:377:316 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:25:2:13:738 +Q2 finished at: 2023-10-4 10:33:7:413:228 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:2:98:309 + Q3 finished at: 2023-10-4 10:33:8:376:157 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:2:158:325 + Q3 finished at: 2023-10-4 10:33:8:522:903 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:25:2:170:157 + Q4 finished at: 2023-10-4 10:33:8:539:789 Q5-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q5 finished at: 2023-9-24 22:25:2:172:297 + Q5 finished at: 2023-10-4 10:33:8:542:955 Q6-T3 execute opt: 'BEGIN;' - Q6 finished at: 2023-9-24 22:25:2:198:260 + Q6 finished at: 2023-10-4 10:33:9:376:37 Q6-T3 execute sql: 'BEGIN TRANSACTION;' - Q6 finished at: 2023-9-24 22:25:2:247:337 + Q6 finished at: 2023-10-4 10:33:9:504:75 Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-24 22:25:2:262:18 + Q7 finished at: 2023-10-4 10:33:9:519:38 Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' - Q11-T2 execute opt: 'COMMIT'; - Q11 finished at: 2023-9-24 22:25:2:401:688 Q8 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q8 failed at: 2023-9-24 22:25:3:65:58 -Q9 failed reason: 错误: Unknown transaction, could be recently aborted: 40a94ebf-bdb4-4eb5-8b68-93162f334e5d; errcode: 40001 -Q9 failed at: 2023-9-24 22:25:3:201:516 + Q8 failed at: 2023-10-4 10:33:10:321:676 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt index 48c6366f..18424beb 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_mda_step_wat_c2.txt @@ -16,35 +16,24 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_mda_step_wat_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:25:4:50:459 +Q1 finished at: 2023-10-4 10:33:15:462:155 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:25:4:50:788 +Q1 finished at: 2023-10-4 10:33:15:463:362 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:25:4:60:28 +Q2 finished at: 2023-10-4 10:33:15:499:876 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:25:4:150:497 + Q3 finished at: 2023-10-4 10:33:16:462:93 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:25:4:199:57 + Q3 finished at: 2023-10-4 10:33:16:592:232 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=1;' - Q4 finished at: 2023-9-24 22:25:4:211:363 + Q4 finished at: 2023-10-4 10:33:16:611:322 Q5-T3 execute opt: 'BEGIN;' - Q5 finished at: 2023-9-24 22:25:4:250:485 + Q5 finished at: 2023-10-4 10:33:17:462:173 Q5-T3 execute sql: 'BEGIN TRANSACTION;' - Q5 finished at: 2023-9-24 22:25:4:305:212 + Q5 finished at: 2023-10-4 10:33:17:579:818 Q6-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q7-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=2;' - Q7 finished at: 2023-9-24 22:25:4:483:444 - Q8-T3 execute sql: 'UPDATE t1 SET v=3 WHERE k=1;' - Q8 finished at: 2023-9-24 22:25:4:486:795 -Q9-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=2;' -Q9 finished at: 2023-9-24 22:25:4:553:854 -Q11-T1 execute opt: 'COMMIT'; -Q11 finished at: 2023-9-24 22:25:4:752:634 - Q12-T3 execute opt: 'COMMIT'; Q6 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q6 failed at: 2023-9-24 22:25:4:953:165 - Q12 failed reason: 错误: Heartbeat: Transaction 59aefe13-10d2-4d6f-90e3-6561d9ff74b4 expired or aborted by a conflict: 40001 errcode: 40001 - Q12 failed at: 2023-9-24 22:25:6:58:518 + Q6 failed at: 2023-10-4 10:33:19:71:59 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt index 92f21998..57ecca83 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_1abort.txt @@ -14,20 +14,18 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_1abort test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:36:266:572 +Q1 finished at: 2023-10-4 10:31:34:528:665 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:36:266:930 +Q1 finished at: 2023-10-4 10:31:34:529:910 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:36:274:764 +Q2 finished at: 2023-10-4 10:31:34:566:904 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:36:366:636 + Q3 finished at: 2023-10-4 10:31:35:528:552 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:36:411:240 + Q3 finished at: 2023-10-4 10:31:35:653:734 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5-T1 execute opt: 'ROLLBACK'; -Q5 finished at: 2023-9-24 22:24:36:467:311 Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q4 failed at: 2023-9-24 22:24:36:825:159 + Q4 failed at: 2023-10-4 10:31:36:70:236 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt index 17583951..5f1d14dd 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_dirty_write_2commit.txt @@ -14,37 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_dirty_write_2commit test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:37:582:355 +Q1 finished at: 2023-10-4 10:31:40:228:293 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:37:583:473 +Q1 finished at: 2023-10-4 10:31:40:229:566 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:37:614:102 +Q2 finished at: 2023-10-4 10:31:40:266:416 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:37:681:920 + Q3 finished at: 2023-10-4 10:31:41:228:276 Q3-T2 execute sql: 'BEGIN TRANSACTION;' -Q5-T1 execute opt: 'COMMIT'; -Q5 finished at: 2023-9-24 22:24:37:782:169 - Q3 finished at: 2023-9-24 22:24:37:788:275 + Q3 finished at: 2023-10-4 10:31:41:334:770 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:37:800:976 - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:37:884:325 - Q7-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - (1) expected_result: - (0,1) - *(2) expected_result: - (0,2) + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:31:41:751:241 - Q7 finished at: 2023-9-24 22:24:38:4:699 - Q8-T3 execute sql: 'DROP TABLE IF EXISTS t1;' - Q8 finished at: 2023-9-24 22:24:38:99:73 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:38:99:856 - -The current result is consistent with the [(2) expected_result] of serial scheduling - -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt index 67f3e675..7d38e000 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write.txt @@ -14,22 +14,18 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:38:845:126 +Q1 finished at: 2023-10-4 10:31:45:932:591 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:38:846:175 +Q1 finished at: 2023-10-4 10:31:45:933:831 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:38:871:712 +Q2 finished at: 2023-10-4 10:31:45:970:595 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:38:945:387 + Q3 finished at: 2023-10-4 10:31:46:932:669 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:38:946:782 + Q3 finished at: 2023-10-4 10:31:47:57:986 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' -Q5-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q5 finished at: 2023-9-24 22:24:39:45:655 -Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:24:39:46:841 Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 - Q4 failed at: 2023-9-24 22:24:39:395:895 + Q4 failed at: 2023-10-4 10:31:47:473:317 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt index 2f1c7f4c..b0c1e71e 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_full_write_committed.txt @@ -14,23 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_full_write_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:40:708:294 +Q1 finished at: 2023-10-4 10:31:51:794:365 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:40:708:610 +Q1 finished at: 2023-10-4 10:31:51:795:540 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:40:716:948 +Q2 finished at: 2023-10-4 10:31:51:832:267 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:40:808:313 + Q3 finished at: 2023-10-4 10:31:52:794:368 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:40:852:196 + Q3 finished at: 2023-10-4 10:31:52:871:52 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:40:867:545 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:24:40:868:425 -Q6-T1 execute sql: 'UPDATE t1 SET v=3 WHERE k=0;' -Q6 failed reason: 错误: Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81c7c5462 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81 errcode: 40001 -Q6 failed at: 2023-9-24 22:24:41:511:474 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:31:53:284:471 Test Result: Rollback -Reason: Err:错误: Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81c7c5462 expired or aborted by a conflict: 40001: . Errors from tablet servers: [Operation expired (yb/tablet/transaction_coordinator.cc:1706): Heartbeat: Transaction 924a6c84-69fe-4382-81fc-24c81 +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt index 4402bed8..d2a200a9 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_self_update_committed.txt @@ -14,23 +14,19 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_self_update_committed test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:45:0:948 +Q1 finished at: 2023-10-4 10:32:10:107:964 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:45:2:178 +Q1 finished at: 2023-10-4 10:32:10:109:192 Q2-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q2 finished at: 2023-9-24 22:24:45:34:65 +Q2 finished at: 2023-10-4 10:32:10:124:851 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:45:100:705 + Q3 finished at: 2023-10-4 10:32:11:107:792 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:45:163:114 + Q3 finished at: 2023-10-4 10:32:11:205:647 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:45:176:333 - Q5-T2 execute opt: 'COMMIT'; - Q5 finished at: 2023-9-24 22:24:45:177:312 -Q6-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' -Q6 failed reason: 错误: Unknown transaction, could be recently aborted: 317e4441-0993-4b88-b7ff-825633d6857e; errcode: 40001 -Q6 failed at: 2023-9-24 22:24:45:803:142 + Q4 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 + Q4 failed at: 2023-10-4 10:32:11:620:573 Test Result: Rollback -Reason: Err:错误: Unknown transaction, could be recently aborted: 317e4441-0993-4b88-b7ff-825633d6857e; +Reason: Err:错误: 由于同步更新而无法串行访问 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt index c4f41211..a750b3da 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c1.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c1 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:42:297:431 +Q1 finished at: 2023-10-4 10:31:56:764:956 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:42:297:800 +Q1 finished at: 2023-10-4 10:31:56:766:105 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,33 +25,21 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:24:42:306:180 +Q2 finished at: 2023-10-4 10:31:56:795:937 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:42:397:838 + Q3 finished at: 2023-10-4 10:31:57:764:891 Q3-T2 execute sql: 'BEGIN TRANSACTION;' + Q3 finished at: 2023-10-4 10:31:57:895:814 + Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' + Q4 finished at: 2023-10-4 10:31:57:915:932 Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' -Q5 finished at: 2023-9-24 22:24:42:500:459 +Q5 finished at: 2023-10-4 10:31:58:772:805 Q6-T1 execute opt: 'COMMIT'; -Q6 finished at: 2023-9-24 22:24:42:501:613 - Q3 finished at: 2023-9-24 22:24:42:509:274 - Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:42:524:377 +Q6 finished at: 2023-10-4 10:31:58:776:172 Q7-T2 execute opt: 'COMMIT'; - Q7 finished at: 2023-9-24 22:24:42:598:764 - Q8-T3 execute sql: 'SELECT * FROM t1;' - current_result: - (0,2) - *(1) expected_result: - (0,2) - (2) expected_result: - (0,1) - - Q8 finished at: 2023-9-24 22:24:42:658:406 - Q9-T3 execute opt: 'COMMIT'; - Q9 finished at: 2023-9-24 22:24:42:658:781 - -The current result is consistent with the [(1) expected_result] of serial scheduling + Q7 failed reason: 错误: Heartbeat: Transaction 0dd95d51-ca46-4742-8d67-2af4dc58d293 expired or aborted by a conflict: 40001 errcode: 40001 + Q7 failed at: 2023-10-4 10:32:0:471:688 -Test Result: Avoid -Reason: Data anomaly did not occur and the data is consistent +Test Result: Rollback +Err:错误: Heartbeat: Transaction 0dd95d51-ca46-4742-8d67-2af4dc58d293 expired or aborted by a conflict: 40001 diff --git a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt index 1394a6d6..9205dd44 100644 --- a/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt +++ b/test_result/centralizend_result/yugabyte/snapshot/wat_sda_lost_update_c2.txt @@ -14,9 +14,9 @@ Q0-T1 execute opt: 'COMMIT'; ----------wat_sda_lost_update_c2 test run---------- Q1-T1 execute opt: 'BEGIN;' -Q1 finished at: 2023-9-24 22:24:43:518:732 +Q1 finished at: 2023-10-4 10:32:3:206:789 Q1-T1 execute sql: 'BEGIN TRANSACTION;' -Q1 finished at: 2023-9-24 22:24:43:519:75 +Q1 finished at: 2023-10-4 10:32:3:207:972 Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' current_result: (0,0) @@ -25,18 +25,16 @@ Q2-T1 execute sql: 'SELECT * FROM t1 WHERE k=0;' (2) expected_result: (0,2) -Q2 finished at: 2023-9-24 22:24:43:527:974 +Q2 finished at: 2023-10-4 10:32:3:238:284 Q3-T2 execute opt: 'BEGIN;' - Q3 finished at: 2023-9-24 22:24:43:618:915 + Q3 finished at: 2023-10-4 10:32:4:206:840 Q3-T2 execute sql: 'BEGIN TRANSACTION;' - Q3 finished at: 2023-9-24 22:24:43:666:427 + Q3 finished at: 2023-10-4 10:32:4:311:446 Q4-T2 execute sql: 'UPDATE t1 SET v=2 WHERE k=0;' - Q4 finished at: 2023-9-24 22:24:43:679:944 + Q4 finished at: 2023-10-4 10:32:4:327:857 Q5-T1 execute sql: 'UPDATE t1 SET v=1 WHERE k=0;' - Q6-T2 execute opt: 'COMMIT'; - Q6 finished at: 2023-9-24 22:24:43:819:904 Q5 failed reason: 错误: 由于同步更新而无法串行访问 errcode: 40001 -Q5 failed at: 2023-9-24 22:24:44:222:683 +Q5 failed at: 2023-10-4 10:32:5:713:739 Test Result: Rollback Reason: Err:错误: 由于同步更新而无法串行访问 From cb63c718d0c9acb5cf37df32a7856c15b2485698 Mon Sep 17 00:00:00 2001 From: Yuxing Chen Date: Wed, 26 Jun 2024 14:51:58 +0800 Subject: [PATCH 53/81] Create readme.md add folder for documents --- src/dbtest/src/doc/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/dbtest/src/doc/readme.md diff --git a/src/dbtest/src/doc/readme.md b/src/dbtest/src/doc/readme.md new file mode 100644 index 00000000..756b01c7 --- /dev/null +++ b/src/dbtest/src/doc/readme.md @@ -0,0 +1 @@ +This is the description document folder for 3TS/src/​dbtest/​src From 4f6d577c413aa49753d51e59d0c195b2e3594059 Mon Sep 17 00:00:00 2001 From: Yuxing Chen Date: Thu, 27 Jun 2024 10:16:10 +0800 Subject: [PATCH 54/81] Update README.md Update papers' repo --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 1be47d76..62d34e0f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,11 @@ Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_di You can explore all results on [report webpage](https://axingguchen.github.io/3TS/). +Paper from the project: +VLDB'23: [PolySI](https://github.com/hengxin/PolySI-PVLDB2023-Artifacts) +VLDB'24 DEMO: [IsoVista](https://github.com/hengxin/IsoVista) + + ## Usage Provide two installation methods for the project environment: **Docker** and **Compilation**, and you can freely choose the installation method. From 8b4843034dd31fce244f24b61e57da6cfb827298 Mon Sep 17 00:00:00 2001 From: Yuxing Chen Date: Thu, 27 Jun 2024 10:23:50 +0800 Subject: [PATCH 55/81] Update README.md update paper repos --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 62d34e0f..dfef084e 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,10 @@ Check out some test cases (e.g., [Dirty Write](test_result/test_cases/wat_sda_di You can explore all results on [report webpage](https://axingguchen.github.io/3TS/). Paper from the project: -VLDB'23: [PolySI](https://github.com/hengxin/PolySI-PVLDB2023-Artifacts) -VLDB'24 DEMO: [IsoVista](https://github.com/hengxin/IsoVista) + +- VLDB'23: [PolySI: Efficient Black-box Checking of Snapshot Isolation in Databases](https://github.com/hengxin/PolySI-PVLDB2023-Artifacts) + +- VLDB'24 DEMO: [IsoVista: Black-box Checking Database Isolation Guarantees](https://github.com/hengxin/IsoVista) ## Usage From 4776375694bb8b6e52573859f5168d47beebc278 Mon Sep 17 00:00:00 2001 From: Henry yu <101050434+yhyhdyb@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:45:41 +0800 Subject: [PATCH 56/81] Add files via upload --- src/dbtest/src/doc/dynamicTest.md | 93 +++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/dbtest/src/doc/dynamicTest.md diff --git a/src/dbtest/src/doc/dynamicTest.md b/src/dbtest/src/doc/dynamicTest.md new file mode 100644 index 00000000..92da90d8 --- /dev/null +++ b/src/dbtest/src/doc/dynamicTest.md @@ -0,0 +1,93 @@ +## 简介 +在这个模块里,我们提供了动态测试不同数据库的框架。你可以用python 脚本文件(random_do_list.py、 mda_detect.py、mda_generate.py)自行生成输入测试文件。动态测试具体实现在(3TS/src/​dbtest/​src)下的case_cntl_v2.cc、sqltest_v2.cc、sql_cntl_v2.cc。 + +## 测试文件生成 +运行random_do_list.py +```shell +python random_do_list.py data_num target_num +``` +脚本会生成do_test_list.txt文件,里面内容形如 +``` +PW0-PW1 +``` +指示了操作类型 + +接下来运行mda_generate.py +```shell +python mda_generate.py db_type test_type +``` +db_type有tdsql,crdb等,test_type有single,dist + +运行mad_detect.py进行错误检测 +```shell +python mad_detect.py +``` +## 测试文件格式 +静态测试首先声明ParamNum,即结果集有多少列 +下面输入testSequence,格式为:执行顺序ID-事务ID-SQL语句 +接下来输入隔离级别,例如serializable{...} +括号里面是像"9-0,1 1,1"的对,其中 9 是 SQL ID,"(0,1) (1,1)" 是结果。 +文件可以在#后添加注释。 +动态测试声明Parameters和testSequence,但是没有期望结果序列。 +Parameters格式类似如下: + +``` +#Parameters: #column=2 #txn=2 #operations=2 #variable=2 +``` + +## case_cntl_v2.cc +实现了测试用例控制功能,包含从测试文件中读取数据库配置、sql 语句和预期结果,验证处理实际结果和预期结果的区别,输出比对结果到指定文件夹等功能。 +代码首先通过TestSequenceAndTestResultSetFromFile函数读取指定的测试文件。这个函数解析测试文件的内容,提取测试序列和结果集信息。在读取测试文件的过程中,对每一行进行解析。根据行的内容,执行不同的操作: +如果行包含"Parameters",则提取参数数量,并设置到测试序列对象中。
    +如果行以"#"开头,表示这是一条注释,跳过这行。
    +其他情况下,假设行包含事务ID和SQL语句,使用TxnIdAndSql函数解析这行,提取事务ID、SQL ID和SQL语句,然后创建一个TxnSql对象,并添加到测试序列中。
    +初始化测试序列和结果集列表:InitTestSequenceAndTestResultSetList函数读取"do_test_list.txt"文件,该文件包含要执行的测试案例列表。对于列表中的每个测试案例,函数会读取相应的测试文件,并将解析得到的测试序列和结果集添加到内部存储结构中。
    +最后调用IsSqlExpectedResult比较SQL查询的当前结果和预期结果。这个比较是逐项进行的。如果当前结果和预期结果的大小不同,或者任何一项不匹配,函数返回false,表示结果不符合预期。否则,返回true,表示测试通过。 + +数据结构: +1.Outputter:提供将测试用例和结果数据写入文件的函数 +2.ResultHandler:处理和验证期望的测试结果 + +函数:
    +和v1静态测试相同的有:
    +CaseReader::TxnIdAndSql:解析给定的行以提取执行顺序ID、事务ID和SQL语句。
    +CaseReader::SqlIdAndResult:解析给定的行以提取SQL ID及其预期结果。
    +CaseReader::Isolation:解析隔离级别。
    +CaseReader::InitTestSequenceAndTestResultSetList:同v1,基于提供的测试路径和数据库类型初始化 TestSequence 和 TestResultSet 列表。
    +ResultHandler::IsSqlExpectedResult,ResultHandler::IsTestExpectedResult:比较测试结果和期望结果
    +Outputter::WriteResultTotal,Outputter::WriteTestCaseTypeToFile,Outputter::WriteResultType:将测试结果写入文件
    +不同:
    +CaseReader::TestSequenceAndTestResultSetFromFile:读取文件并输出testSequence,和v1不同的是没有解析隔离级别和预期结果。
    +Outputter::PrintAndWriteTxnSqlResult:输出事物结果,和v1不同的是只输出当前结果,没有和预期结果集的比对
    + +## sql_cntl_v2.cc +SQL控制或操作的代码。实现了与 ODBC 数据库的接口功能。包含设置数据库隔离级别、开始事务、执行增删改查等功能、处理 SQL 返回值并获取错 误信息、结束事务或回滚事务等功能。 + +这段代码首先使用DBConnector从连接池中获取对应会话ID的数据库连接,然后分配一个新的语句句柄。如果句柄分配失败,函数会调用DBConnector::SqlExecuteErr来获取错误信息,并输出错误提示。sql_id为1024会跳过打印输出功能然后,它会释放语句句柄并返回false,表示SQL执行失败。最终返回一个布尔值,表示SQL语句的执行是否成功。 + +数据结构:
    +DBConnector:管理所有和数据库连接相关功能,持有ODBC中的数据库连接句柄(Database Connection Handle) + +和v1静态测试相同的有:
    +DBConnector::ErrInfoWithStmt:从ODBC句柄提取错误信息
    +DBConnector::ExecReadSql2Int:执行SQL读语句并处理错误
    +DBConnector::SQLStartTxn:启动事务并处理错误
    +DBConnector::SetAutoCommit:数据库连接设为自动提交模式
    +DBConnector::SetTimeout:设置连接timeout
    +DBConnector::SetIsolationLevel:设置隔离级别
    +不同:
    +DBConnector::SqlExecuteErr:处理和记录执行错误,和v1不同的是输出了session id,如果因为莫名原因失败就返回空而没有信息
    +DBConnector::ExecWriteSql:执行SQL写语句并处理错误,和v1不同的是使用SQLRowCount函数获取受影响的行数,如果没有受影响的行就输出错误
    +DBConnector::SQLEndTnx:通过提交或回滚结束事务,和v1不同的是在SQL语句执行成功后会输出执行时间信息 + +## sqltest_v2.cc +SQL测试的代码,包含项目的主函数。 +首先利用gflags库来实现命令行参数解析。 +初始化测试环境: +设置数据库连接池大小、事务超时时间等配置参数。 +初始化数据库连接器(DBConnector)以连接到指定的数据库。 +准备测试用的SQL语句和事务序列,这些可能包括读(SELECT)、写(INSERT, UPDATE, DELETE)、事务开始(BEGIN)和结束(COMMIT, ROLLBACK)等操作。采用多线程编程,每个线程负责一组数据库语句的执行,并且通过子线程不同的休眠时间实现程序代码按指定顺序运行。
    +在执行过程中,将测试过程和结果记录到指定的日志文件中,以便后续分析和审计。完成所有SQL语句的执行后,释放相关资源,如关闭数据库连接、释放互斥锁等。汇总测试结果,包括成功执行的语句数量、失败的语句及其原因等。
    +和v1不同的是不支持cassandra和yugabyte,也不支持它们的隔离级别定义 +函数: +MultiThreadExecution:多线程执行SQL查询并返回结果,和v1不同的是没有对yugabyte和myrocks支持 \ No newline at end of file From 9708b97c42575620a2ff8760978a8a98c65667b0 Mon Sep 17 00:00:00 2001 From: czyrye <81145281+czyrye@users.noreply.github.com> Date: Thu, 4 Jul 2024 23:28:55 +0100 Subject: [PATCH 57/81] add explain file --- src/dbtest/src/doc/StaticTest.md | 167 +++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 src/dbtest/src/doc/StaticTest.md diff --git a/src/dbtest/src/doc/StaticTest.md b/src/dbtest/src/doc/StaticTest.md new file mode 100644 index 00000000..9c0dc746 --- /dev/null +++ b/src/dbtest/src/doc/StaticTest.md @@ -0,0 +1,167 @@ +### 简介 + +该文档负责三个文件的说明,包括了代码功能、整体结构、与其他文件的关系和在项目中的作用等。 + + + +## case_cntl.cc + +该文件负责解析和处理测试文件中的SQL语句和事务ID,帮助读取和解析输入文件中的命令和数据,并将结果输出。 + +### 整体结构: + +头文件引入,名为`case_cntl.h` + +```c++ +#include "case_cntl.h" +``` + + + +全局对象:outputter`和`result_handler,分别用于输出和结果处理 + +```c++ +Outputter outputter; +ResultHandler result_handler; +``` + + + +### 函数声明和定义 + +- `CaseReader`类 + + 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 + + - `TxnIdAndSql`:用于获取特定行的事务ID和SQL语句,解析输入行,提取执行顺序ID、交易事务ID和SQL语句。 + - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 + - `Isolation`:提取字符串行中的隔离级别。 + - `InitTestSequenceAndTestResultSetList`:根据提供的测试路径和数据库类型,初始化测试序列和结果集(casecntl)。 + - `TestSequenceAndTestResultSetFromFile`:解析提供的测试文件以提取测试序列及其相应的预期结果。 + +- `ResulHandler`类 + + 主要负责比较SQL查询结果,并确定它们是否符合预期结果。以下是该类中关键函数的声明和定义: + + - `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 + - `IsTestExpectedResult`:用于将当前测试结果与一组预期测试结果进行比较。 + +- `Outputter`类 + + 主要负责将各种类型的输出写入文件,特别是与测试结果相关的输出。 + + - `WriteResultTotal`:该函数功能是将测试结果集的摘要信息写入指定的文件。它从每个 `TestResultSet` 对象中提取简化的测试结果,并将每个测试用例类型及其对应的结果写入到提供的输出文件中。 + - `PrintAndWriteTxnSqlResult`:该函数功能是将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 + - `WriteTestCaseTypeToFile`:该函数功能是将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 + +### 项目中的作用 + +该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作和测试结果的比较。通过详细的函数定义和类方法,实现了对SQL语句执行过程中的各种操作和错误处理。 + +#### + +## sqltest.cc + +该文件用于执行多线程SQL事务测试的,主要功能是通过多线程环境下执行多组SQL事务,并验证其结果。 + +### 整体结构 + +头文件和库引入 + +```c++ +#include "gflags/gflags.h" +#include "sqltest.h" +#include +#include +#include +#include +``` + +包括必要的头文件,`gflags/gflags.h`、`sqltest.h`、`thread`、`unistd.h`、`mutex`、`regex`。 + +命令行参数定义,使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。 + +全局变量 + +定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。 + +### 函数声明和定义 + +- **`try_lock_wait`**:尝试在给定超时时间内获取指定的互斥锁,用于多线程锁机制。 +- **`MultiThreadExecution`**:在多线程环境下执行一组SQL事务。该函数使用 `DBConnector` 类来执行SQL语句,并在事务执行过程中进行锁操作和错误处理。 +- **`JobExecutor::ExecTestSequence`**:执行一系列数据库测试事务,并将结果写入指定文件。该函数通过调用`MultiThreadExecution`函数来实现多线程事务执行。 + +### 项目中的作用 + +**数据库类型的支持**:支持多种数据库类型(如MySQL、PostgreSQL、Oracle等)的事务测试。 + +**多线程事务执行**:通过多线程机制执行事务,模拟高并发环境下的事务处理情况。 + +**事务隔离级别测试**:支持不同的事务隔离级别,验证数据库在不同隔离级别下的行为。 + +**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析和验证。 + + + +## sql_cntl.cc + +该文件用于执行SQL语句并处理数据库连接。文件中定义了一些工具函数和一个主要的数据库连接器类`DBConnector`。 + +### 整体结构 + +头文件和库引入 + +```c++ +#include "sql_cntl.h" +#include +#include +#include +#include +``` + +工具函数的定义:用于时间获取、字符串替换和类型转换等。 + +DBConnector类的定义:处理SQL语句执行、错误信息获取和结果集处理等。 + + + +### 对象声明和定义 + +- `DBConnector`类 + + 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 + + - `ErrInfoWithStmt`:用于获取特定句柄的错误信息。 + - `SqlExecuteErr`:处理SQL执行的错误信息。 + - `ExecWriteSql`:执行写入类型的SQL语句。 + - `ExecReadSql2Int`:执行读取类型的SQL语句并处理结果。 + + + +### 函数声明和定义 + +- **`get_current_time`**:该函数用于获取当前时间。 +- **`replace`**:该函数用于进行字符串替换。 +- **`SQLCHARToStr`**:该函数用于将`SQLCHAR`类型转换为`std::string`类型。 +- **`DBConnector::ErrInfoWithStmt`**:该函数用于获取错误信息。 +- **`DBConnector::SqlExecuteErr`**:该函数用于处理SQL执行返回值。 +- **`DBConnector::ExecWriteSql`**:该函数用于执行写入SQL语句。 +- **`DBConnector::ExecReadSql2Int`**:该函数用于执行读取SQL语句并处理结果集。 + + + +### 项目中的作用 + +该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。通过提供对数据库操作的封装和抽象,`DBConnector`类使得上层应用程序可以更简便地进行数据库操作,同时提供详细的错误信息以便于调试和维护。 + + + +## 文件之间的关系 + +1. `sql_cntl.cc` 和 `sqltest.cc` : + - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的 `DBConnector` 类来执行具体的SQL操作。`sqltest.txt` 使用 `DBConnector` 类的方法来执行SQL语句,并在多线程环境下进行事务测试。 +2. `sql_cntl.cc` 和 `case_cntl.cc` : + - `case_cntl.cc` 中的解析结果(SQL语句和事务ID)会通过某种方式传递给 `sqltest.cc` 中的测试执行函数。而这些SQL操作实际是由 `sql_cntl.cc` 中的 `DBConnector` 类完成的。 +3. `sql_test.cc` 和 `case_cntl.cc` : + - `case_cntl.cc` 负责读取和解析测试用例文件,提取出SQL语句和事务ID。 + - 这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试 From 89ff302b315a97ba972b500c3dc5286b1c61d0e5 Mon Sep 17 00:00:00 2001 From: czyrye <81145281+czyrye@users.noreply.github.com> Date: Fri, 5 Jul 2024 00:18:10 +0100 Subject: [PATCH 58/81] add file --- src/dbtest/src/doc/StaticTest.md | 102 ++++++------------------------- 1 file changed, 19 insertions(+), 83 deletions(-) diff --git a/src/dbtest/src/doc/StaticTest.md b/src/dbtest/src/doc/StaticTest.md index 9c0dc746..e05bcb75 100644 --- a/src/dbtest/src/doc/StaticTest.md +++ b/src/dbtest/src/doc/StaticTest.md @@ -10,53 +10,29 @@ ### 整体结构: -头文件引入,名为`case_cntl.h` +首先引入头文件,接着定义全局对象:outputter`和`result_handler,分别用于输出和结果处理。再进行函数声明及定义,包括`CaseReader`类里处理SQL语句的执行和错误信息的获取函数,`ResulHandler`类里比较SQL查询结果多函数,`Outputter`类将与测试结果相关的输出写入指定的文件的函数。 -```c++ -#include "case_cntl.h" -``` - - - -全局对象:outputter`和`result_handler,分别用于输出和结果处理 - -```c++ -Outputter outputter; -ResultHandler result_handler; -``` - - - -### 函数声明和定义 +#### 函数声明和定义 - `CaseReader`类 - - 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 - - `TxnIdAndSql`:用于获取特定行的事务ID和SQL语句,解析输入行,提取执行顺序ID、交易事务ID和SQL语句。 - - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 + - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 - `Isolation`:提取字符串行中的隔离级别。 - `InitTestSequenceAndTestResultSetList`:根据提供的测试路径和数据库类型,初始化测试序列和结果集(casecntl)。 - `TestSequenceAndTestResultSetFromFile`:解析提供的测试文件以提取测试序列及其相应的预期结果。 - + - `ResulHandler`类 - - 主要负责比较SQL查询结果,并确定它们是否符合预期结果。以下是该类中关键函数的声明和定义: - - - `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 +- `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 - `IsTestExpectedResult`:用于将当前测试结果与一组预期测试结果进行比较。 - `Outputter`类 - - 主要负责将各种类型的输出写入文件,特别是与测试结果相关的输出。 - - - `WriteResultTotal`:该函数功能是将测试结果集的摘要信息写入指定的文件。它从每个 `TestResultSet` 对象中提取简化的测试结果,并将每个测试用例类型及其对应的结果写入到提供的输出文件中。 - - `PrintAndWriteTxnSqlResult`:该函数功能是将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 - - `WriteTestCaseTypeToFile`:该函数功能是将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 +- `WriteResultTotal`:将测试结果集的摘要信息写入指定的文件。 + - `PrintAndWriteTxnSqlResult`:将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 +- `WriteTestCaseTypeToFile`:将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 ### 项目中的作用 -该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作和测试结果的比较。通过详细的函数定义和类方法,实现了对SQL语句执行过程中的各种操作和错误处理。 +该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作,比较测试结果。 #### @@ -66,26 +42,9 @@ ResultHandler result_handler; ### 整体结构 -头文件和库引入 +首先进行头文件和库引入,接着使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。再定义函数。 -```c++ -#include "gflags/gflags.h" -#include "sqltest.h" -#include -#include -#include -#include -``` - -包括必要的头文件,`gflags/gflags.h`、`sqltest.h`、`thread`、`unistd.h`、`mutex`、`regex`。 - -命令行参数定义,使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。 - -全局变量 - -定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。 - -### 函数声明和定义 +#### 函数声明和定义 - **`try_lock_wait`**:尝试在给定超时时间内获取指定的互斥锁,用于多线程锁机制。 - **`MultiThreadExecution`**:在多线程环境下执行一组SQL事务。该函数使用 `DBConnector` 类来执行SQL语句,并在事务执行过程中进行锁操作和错误处理。 @@ -99,56 +58,33 @@ ResultHandler result_handler; **事务隔离级别测试**:支持不同的事务隔离级别,验证数据库在不同隔离级别下的行为。 -**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析和验证。 +**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析验证。 ## sql_cntl.cc -该文件用于执行SQL语句并处理数据库连接。文件中定义了一些工具函数和一个主要的数据库连接器类`DBConnector`。 +该文件用于执行SQL语句并处理数据库连接。 ### 整体结构 -头文件和库引入 - -```c++ -#include "sql_cntl.h" -#include -#include -#include -#include -``` - -工具函数的定义:用于时间获取、字符串替换和类型转换等。 +首先定义头文件和库引入,接着定义工具函数,用于时间获取、字符串替换和类型转换等。再进行函数声明及定义,包括`DBConnector`类处理SQL语句的执行的函数,获取时间,替换字符串等功能的函数。 -DBConnector类的定义:处理SQL语句执行、错误信息获取和结果集处理等。 - - - -### 对象声明和定义 +#### 函数声明和定义 - `DBConnector`类 - - 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 - - `ErrInfoWithStmt`:用于获取特定句柄的错误信息。 - `SqlExecuteErr`:处理SQL执行的错误信息。 - `ExecWriteSql`:执行写入类型的SQL语句。 - `ExecReadSql2Int`:执行读取类型的SQL语句并处理结果。 +- **`get_current_time`**:用于获取当前时间。 +- **`replace`**:进行字符串替换。 -### 函数声明和定义 - -- **`get_current_time`**:该函数用于获取当前时间。 -- **`replace`**:该函数用于进行字符串替换。 -- **`SQLCHARToStr`**:该函数用于将`SQLCHAR`类型转换为`std::string`类型。 -- **`DBConnector::ErrInfoWithStmt`**:该函数用于获取错误信息。 -- **`DBConnector::SqlExecuteErr`**:该函数用于处理SQL执行返回值。 -- **`DBConnector::ExecWriteSql`**:该函数用于执行写入SQL语句。 -- **`DBConnector::ExecReadSql2Int`**:该函数用于执行读取SQL语句并处理结果集。 - +- **`SQLCHARToStr`**:用于将`SQLCHAR`类型转换为`std::string`类型。 + ### 项目中的作用 From 20de8111929dac862f140c045cf1da6700102941 Mon Sep 17 00:00:00 2001 From: czyrye <81145281+czyrye@users.noreply.github.com> Date: Fri, 5 Jul 2024 01:15:56 +0100 Subject: [PATCH 59/81] add file --- src/dbtest/src/doc/StaticTest.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/dbtest/src/doc/StaticTest.md b/src/dbtest/src/doc/StaticTest.md index e05bcb75..729b3737 100644 --- a/src/dbtest/src/doc/StaticTest.md +++ b/src/dbtest/src/doc/StaticTest.md @@ -88,16 +88,15 @@ ### 项目中的作用 -该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。通过提供对数据库操作的封装和抽象,`DBConnector`类使得上层应用程序可以更简便地进行数据库操作,同时提供详细的错误信息以便于调试和维护。 +该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。 ## 文件之间的关系 1. `sql_cntl.cc` 和 `sqltest.cc` : - - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的 `DBConnector` 类来执行具体的SQL操作。`sqltest.txt` 使用 `DBConnector` 类的方法来执行SQL语句,并在多线程环境下进行事务测试。 + - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的工具和辅助函数来执行具体的SQL操作,`sqltest.cc`利用 `sql_cntl.cc` 定义的结果处理和输出函数来验证正确性,并报告结果。`sqlcntl.txt`负责具体的SQL执行逻辑,为`sqltest.txt`提供支持。 2. `sql_cntl.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 中的解析结果(SQL语句和事务ID)会通过某种方式传递给 `sqltest.cc` 中的测试执行函数。而这些SQL操作实际是由 `sql_cntl.cc` 中的 `DBConnector` 类完成的。 + - `case_cntl.cc` 的函数和类读取测试用例、解析预期结果以及将实际结果与这些预期进行比较。 `sqltest.cc` 负责执行SQL语句的逻辑,并调用这些比较函数。 3. `sql_test.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 负责读取和解析测试用例文件,提取出SQL语句和事务ID。 - - 这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试 + - `case_cntl.cc` 负责读取和解析测试用例文件,和预期结果预期结果。这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试。 From ef284ff3d686f20d34e9cb2046ce541b1d777e6a Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Wed, 10 Jul 2024 00:36:22 +0800 Subject: [PATCH 60/81] add 3TS-coo build file within ubuntu18.04 --- .../src/doc/Build 3TS-Coo on ubuntu18.04.md | 211 ++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md diff --git a/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md new file mode 100644 index 00000000..af5aee9b --- /dev/null +++ b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md @@ -0,0 +1,211 @@ +## Ubuntu 18.04 编译 3TS-Coo + +### 所需依赖 + +首先,根据 3TS 官方文档,为了生成Makefile、编译代码并链接数据库,需要安装以下内容: + +- GCC 编译套件, CMake +- ODBC 启动管理器 +- 要测试的数据库(例如:MySQL) +- 与数据库对应的 ODBC 驱动(例如:mysql-connector-odbc) +- 3TS-Coo 以及 ODBC 运行的依赖库 + + 3TS 使用了 C++17 的特性,所以安装 GCC 套件的时候请确保它支持 C++17 (推荐 g++8)。具体命令如下。 + +```shell +sudo apt update +sudo apt install build-essential cmake git +apt install +``` + +同样的,我们也要安装 ODBC 依赖,这个在下文会一一给出。 + + + +### 安装 ODBC 驱动管理器 + +ODBC 是 Open Database Connect 即开放数据库互连的简称,它是由微软提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。 + +ODBC 主要由驱动程序 (ODBC Driver) 和驱动程序管理器 (ODBC Driver Manager) 组成。驱动程序是一个用以支持 ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,源码由具体的数据库厂商实现。驱动程序管理器可链接到所有 ODBC 应用程序中,它负责管理应用程序中 ODBC 函数与 DLL 中函数的绑定。 + +#### 下载与解压缩 + +目前主要使用的驱动管理器有两个,分别是 [unixODBC](https://www.unixodbc.org/) 和 [iODBC](https://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/WelcomeVisitors)。 我们选择下载安装 `unixODBC`。首先,从官方下载 `unixODBC` 源码。具体版本请自行选择,这里选择下载 [2.3.12 ](https://www.unixodbc.org/unixODBC-2.3.12.tar.gz) 版本。可以直接从官网的 Downloads 界面下载,也可以借助 `curl` 或者 `wget` 下载。下载后使用 `tar` 工具进行解压缩。 + +```shell +curl -o unixODBC-2.3.12.tar.gz https://www.unixodbc.org/unixODBC-2.3.12.tar.gz +tar -zxvf unixODBC-2.3.12.tar.gz +``` + +#### 依赖下载 + +根据 `unixODBC` 官方网站, `unixODBC` 源码使用 `autoconf` 构建。编译安装之前,请确保本地环境已经有 `automake`,`autoconf`, `libtool` 工具。 + +```shell +apt install autoconf automake libtool +``` + +#### 编译安装 + +根据官方步骤,进行编译安装,编译安装命令如下。具体安装步骤和编译选项见 [unixODBC 官网](https://www.unixodbc.org/) + +```shell +cd unixODBC-dir +./configure # 默认情况下,unixODBC将会安装到/usr/local中。与configure一样,可以通过更改configure的 --prefix 更改安装位置,这里使用默认位置安装。 +make -j4 && make install +``` + +#### 安装验证 + +安装后,使用 `odbc_config` 或 `odbcinst` 验证安装是否成功。 + +```shell +root@c7b71bf10157$ odbc_config --version +2.3.12 +root@c7b71bf10157$ odbcinst -j +unixODBC 2.3.12 +DRIVERS............: /usr/local/etc/odbcinst.ini +SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini +FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources +USER DATA SOURCES..: /root/.odbc.ini +SQLULEN Size.......: 8 +SQLLEN Size........: 8 +SQLSETPOSIROW Size.: 8 +``` + + + +### 安装 ODBC 驱动 + +#### 安装 MySQL ODBC 驱动 + +以 `mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64` 为例 + +##### 前提条件 + +使用的是 `ubuntu 18.04`,MySQL ODBC 没有提供对应的 DEB 包。所以只能源码编译 ODBC。 首先根据 MySQL 官方网站,为了安装 MySQL ODBC Driver 我们需要先确保以下条件满足。 + +* **GNU 编译套件和 Cmake**: 要求 GCC 4.2.1 或更高版本 + +* **MySQL Client Library**。要获取 MySQL client 库和包含文件,请访问 [MySQL 下载页面](https://dev.mysql.com/downloads/)。 + +* **一个兼容的 ODBC 驱动管理器**。Connector/ODBC 已知可以与 iODBC 和 unixODBC 管理器一起工作。 + +* **字符集支持**。如果您使用的字符集未编译到 MySQL 客户端库中,请将 MySQL 字符定义从 `charsets` 目录安装到 `SHAREDIR`(默认情况下为 `/usr/local/mysql/share/mysql/charsets`)。如果您在同一台机器上安装了 MySQL 服务器,这些字符集应该已经就位。有关字符集支持的更多信息,请参见“字符集、排序规则、Unicode”。 + +##### MySQL Client Library 安装 + +MySQL 针对 Client Library 已经提供了 DEB 包,可以直接在 [对应网站](https://downloads.mysql.com/archives/community/)下载安装。这里以 MySQL 8.0.19 对应的 client library 为例。 + +首先下载对应的 DEB 包。主要涉及的 DEB 包下文列出 + +```shell +mysql-common_8.0.19-1ubuntu18.04_amd64.deb +libmysqlclient21_8.0.19-1ubuntu18.04_amd64.deb +libmysqlclient-dev_8.0.19-1ubuntu18.04_amd64.deb +``` + +官网已经提供了对应的 **Bundle** 包,包含 MySQL 官方打包的所有 deb。下载后使用 `dpkg` 命令安装对应的 DEB 包。 + +```shell +dpkg -i mysql-common_8.0.19-1ubuntu18.04_amd64.deb +dpkg -i libmysqlclient21_8.0.19-1ubuntu18.04_amd64.deb +dpkg -i libmysqlclient-dev_8.0.19-1ubuntu18.04_amd64.deb +``` + +注意,这三个包是层层依赖的,所以安装顺序不能调换。 + +##### MySQL ODBC Connector (Driver) 编译安装 + +首先,从 [MySQL ODBC 下载网站](https://downloads.mysql.com/archives/c-odbc/) 拉取对应版本的 MySQL ODBC Connector 源码到本地,使用 `tar` 进行解压。 + +```shell +tar -zxvf mysql-connector-odbc-8.0.19-src.tar.gz +``` + +MySQL ODBC Connector 源码使用 `cmake` 构建,所以安装之前,请确保本地已经有 `cmake`。进入 Connector 文件夹里,并创建 `build` 文件夹。 + +```shell +cd mysql-connector-odbc-8.0.19-src +mkdir build +``` + +使用 `cmake` 配置构建选项 + +```shell +cmake -G "Unix Makefiles" -DWITH_UNIXODBC=true -DDISABLE_GUI=true .. +``` + +* `-DWITH_UNIXODBC`: 使用 `unixODBC` 作为驱动管理器,MySQL ODBC 默认使用 `iODBC`。 +* `-DDISABLE_GUI`: 不构建 GUI 图形界面,默认为 `false`, 构建 GUI。 + +使用 `make` 进行项目构建,并安装。默认安装到 `/usr/local` 路径。可以使用 `cmake` 编译选项 `-DCMAKE_INSTALL_PREFIX` 进行配置。 + +```shell +make -j4 && make install +``` + +编译过程中可以出现无法链接到 `ssl` 库的问题。可以使用 `apt` 安装后重新构建。 + +```shell +apt install libssl-dev +make -j4 +``` + + + +### 3TS-Coo 编译 + +#### 下载 + +首先从 [3TS github 官网](https://github.com/Tencent/3TS.git) 上拉去 3TS 源码, 进入代码根目录,切换分支到 `coo-consistency-check`。 + +```shell +git clone https://github.com/Tencent/3TS.git +git checkout coo-consistency-check +``` + +#### 依赖 + +注意, 3Ts-Coo 项目依赖 pthread 库 和 gflags 库,编译前请确保已经安装相关依赖。 + +#### 编译 + +进入 `src/dbtest` 文件夹,创建 `build` 目录并进入。 + +~~~shell +cd src/dbtest +mkdir build && cd build +~~~ + +这里不要直接 `cmake` 构建,否则会报下面错误 + +> By not providing "FindODBC.cmake" in CMAKE_MODULE_PATH this project has +> asked CMake to find a package configuration file provided by "ODBC", but +> CMake did not find one. +> +> Could not find a package configuration file provided by "ODBC" with any of +> the following names: +> +> ODBCConfig.cmake +> odbc-config.cmake +> +> separate development package or SDK, be sure it has been +> installed. + +要解决该错误,需要执行 + +~~~shell +find / -name "FindODBC.cmake" + +//filepath is obtained by "find" +cp filepath/FindODBC.cmake 3TS/src/dbtest +~~~ + +之后在 `build` 目录下进行构建与编译 + +~~~shell +cmake -S -DWITH_UNIXODBC=1 ../ #这里拷贝的是 mysql FindODBC.cmake 默认为 iODBC, 需要配置参数 +make -j4 +~~~ + From b90d406b9dff9b3259e32845e3ab4dfd30ccca56 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Fri, 12 Jul 2024 09:55:04 +0800 Subject: [PATCH 61/81] add dbms research documentation --- src/dbtest/src/doc/Database_Resarch_Doc.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/dbtest/src/doc/Database_Resarch_Doc.md diff --git a/src/dbtest/src/doc/Database_Resarch_Doc.md b/src/dbtest/src/doc/Database_Resarch_Doc.md new file mode 100644 index 00000000..99537d1a --- /dev/null +++ b/src/dbtest/src/doc/Database_Resarch_Doc.md @@ -0,0 +1,19 @@ +### 主流 DMBS 支持情况 + +| DBMS 名称 | DBMS 类型 | 是否提供 ODBC | 是否支持事务 | 是否被 3TS-Coo 验证 | 详细介绍 | +| -------------------- | ---------------------- | ------------- | ------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MySQL | 关系型数据库管理系统 | 是 | 是 | 是 | MySQL 是一个广泛使用的开源关系型数据库管理系统,适合用于各种规模的应用,包括Web应用和企业级解决方案。支持事务处理和复制,具有良好的性能和稳定性。 | +| PostgreSQL | 关系型数据库管理系统 | 是 | 是 | 是 | PostgreSQL 是一个强大的开源关系型数据库系统,支持复杂的查询和事务处理,以及高级功能如JSON支持、全文搜索和地理空间查询。广泛用于各种企业和科研领域的应用。 | +| MariaDB | 关系型数据库管理系统 | 是 | 是 | 是 | MariaDB 是一个社区驱动的开源数据库管理系统,由MySQL的创始人创建,兼容MySQL,并包含增强的功能和性能优化。适合需要高性能和开放源代码的应用。 | +| Microsoft SQL Server | 关系型数据库管理系统 | 是 | 是 | 是 | SQL Server 是由Microsoft开发的关系型数据库管理系统,适用于大型企业应用和数据驱动的解决方案。提供高可用性、安全性和企业级支持,支持广泛的开发工具和平台。 | +| Oracle Database | 关系型数据库管理系统 | 是 | 是 | 是 | Oracle Database 是一种功能强大的商业级关系数据库管理系统,用于企业级数据管理和应用程序。具有高度可扩展性、安全性和数据完整性,支持广泛的应用开发和管理需求。 | +| MyRocks | 关系型数据库管理系统 | 是 | 是 | 是 | MyRocks 是Facebook开发的高性能持久性存储引擎,设计用于处理大规模的OLTP工作负载。基于RocksDB,专注于高吞吐和低延迟的需求。 | +| MongoDB | NoSQL 数据库管理系统 | 是 | 3.0 后支持 | 是 | MongoDB 是一个面向文档的NoSQL数据库,适合处理大量非结构化数据和需要灵活数据模型的应用,如Web应用、分析和实时数据处理。支持高可用性和横向扩展。 | +| Redis | NoSQL 数据库管理系统 | 否 | 否 | 否 | Redis 是一个内存中的数据结构存储,通常用作缓存和消息代理。支持多种数据结构(如字符串、哈希表、列表等),提供快速访问和高性能。适用于实时数据处理和会话存储等场景。 | +| Cassandra | NoSQL 数据库管理系统 | 是 | 是 | 是 | Cassandra 是一个分布式的面向列的NoSQL数据库,具有高可用性和可伸缩性。适用于需要处理大量数据和分布式数据存储的应用,如分析和日志管理。 | +| Neo4j | 图数据库 | 是 | 是 | 否 | Neo4j 是一个图数据库管理系统,专注于存储和处理图形结构数据(节点和边)。适用于需要复杂关系和网络分析的应用,如社交网络、推荐系统和网络安全分析。 | +| InfluxDB | 时间序列数据库管理系统 | 是 | 是 | 否 | InfluxDB 是一个专为时间序列数据设计的开源数据库,用于处理大规模的时间戳数据,如监控、IoT传感器数据和实时分析。具有高性能和查询效率。 | +| TimescaleDB | 时间序列数据库管理系统 | 是 | 是 | 否 | TimescaleDB 是建立在PostgreSQL之上的开源时间序列数据库,结合了SQL和NoSQL的特性,用于处理时间序列数据的高性能分析和查询。适合于时间序列数据存储和复杂查询。 | +| CockroachDB | 分布式数据库管理系统 | 是 | 是 | 是 | CockroachDB 是一个分布式的关系数据库管理系统,具有事务支持和高可用性,适用于需要强一致性和水平扩展的大规模分布式应用,如在线服务和全球部署的应用。 | +| TiDB | 分布式数据库管理系统 | 是 | 是 | 是 | TiDB 是一个开源的分布式关系数据库管理系统,兼容MySQL协议,支持事务处理和横向扩展。适用于在线事务处理(OLTP)和在线分析处理(OLAP)的混合工作负载。 | +| Oceanbase | 分布式数据库管理系统 | 是 | 是 | 是 | Oceanbase 是蚂蚁开发的 NoSQL 分布式关系数据库管理系统,具有多模态数据和分布式事务支持,适用于大规模分布式数据处理和高并发事务处理。 | From 3145761b04273cc3289bad332f3b932cdf619a57 Mon Sep 17 00:00:00 2001 From: Koschei Date: Mon, 15 Jul 2024 20:06:48 +0800 Subject: [PATCH 62/81] feat: support sql_interval parameter as an execution input parameter --- src/dbtest/src/sqltest.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 30d7a110..1b0388a0 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -24,6 +24,7 @@ DEFINE_int32(conn_pool_size, 6, "db_conn pool size"); DEFINE_string(isolation, "serializable", "transation isolation level: read-uncommitted read-committed repeatable-read serializable"); DEFINE_string(case_dir, "mysql", "test case dir name"); DEFINE_string(timeout, "20", "timeout"); +DEFINE_int32(sql_interval, 0, "sleep for the specified interval between SQL executions"); // std::vector mutex_txn(5); // same as conn_pool_size std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size @@ -55,10 +56,11 @@ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) * @param test_process_file The file for logging or recording the test process. * @param cur_result_set A map to store the current result set. * @param sleeptime The sleep time between transaction executions. Note: Different threads may have different sleep times to stagger their execution. + * @param sql_interval The sleep time between individual SQL executions within a transaction. * @return True if the transactions are executed successfully, false otherwise. */ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, - DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ + DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime, int sql_interval) { // time between queries // usleep(1000000*sleeptime); // 1 second @@ -245,7 +247,15 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ goto jump; } } - + + // Output the interval between SQL executions + std::string blank(blank_base*(txn_id - 1), ' '); + std::string output_time_info = blank + "T" + std::to_string(txn_id) + " sleeping for " + std::to_string(sql_interval) + " ms " + "before executing next SQL"; + std::cout << output_time_info << std::endl; + test_process << output_time_info << std::endl; + // sleep for sql_interval milliseconds + usleep(1000 * sql_interval); + // mutex_txn[txn_id]->unlock(); } pthread_mutex_unlock(mutex_txn[txn_id]); @@ -374,7 +384,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // std::cout << " SQLID: " << txn_sql.SqlId() << " TXNID: " << txn_sql.TxnId() << " SQL: " << txn_sql.Sql() << std::endl; // } // std::cout << std::endl; - if (! MultiThreadExecution(group, test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} + if (! MultiThreadExecution(group, test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0, 0)) {return false;} } @@ -382,7 +392,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // exlcude last group for parallel execution for (int i = 0; i < thread_cnt-1; i++) { - threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), test_process_file, std::ref(cur_result_set), i+1)); + threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), test_process_file, std::ref(cur_result_set), i+1, FLAGS_sql_interval)); } for (auto &th : threads) { @@ -392,7 +402,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // execute last group if correct (no error) if (test_result_set.ResultType() == "") { - if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} + if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0, FLAGS_sql_interval)) {return false;} } if (test_result_set.ResultType() == "") { From 79da82ec0618711215c2a145803c66ec875cf805 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Mon, 15 Jul 2024 22:04:21 +0800 Subject: [PATCH 63/81] add static test study documentation --- src/dbtest/src/doc/3TS_StaticTest_Doc.md | 114 +++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/dbtest/src/doc/3TS_StaticTest_Doc.md diff --git a/src/dbtest/src/doc/3TS_StaticTest_Doc.md b/src/dbtest/src/doc/3TS_StaticTest_Doc.md new file mode 100644 index 00000000..b1a10fd6 --- /dev/null +++ b/src/dbtest/src/doc/3TS_StaticTest_Doc.md @@ -0,0 +1,114 @@ +## 静态测试分析 + +### 静态测试概述 + +静态测试的源代码包含 `case_cntl.cc`、`sql_cntl.cc`、`sqltest.cc` 以及对应的头文件,生成的可执行文件名为 `3ts_dbtest`。 + +- `case_cntl.cc`封装了测试用例控制所有到的类,主要包括三个方面的功能类: 1.解析测试文件,2.处理和比较结果,3.输出结果。 + +- `sql_cntl.cc` 涉及` SQL` 操作的代码。主要是定义实现了一个 `DBConnector`类。 `DBConnector` 向下对接 `ODBC`,向上提供了封装的 `SQL` 执行接口。包含设置数据库隔离级别、开始事务、执行增删改查等功能、处理 `SQL` 返回值并获取错误信息、结束事务或回滚事务等功能。 + +- `sqltest.cc` 静态测试的的入口,具体定义了静态测试的运行逻辑。该文件利用 `gflags` 库来实现命令行参数解析中,声明定义了 `JobExecutor` 负责多线程执行数据库语句。 + +三个源代码以及他们的头文件从上到下是层层依赖关系。`sql_cntl.cc` 使用了`case_cntl.cc` 中封装的类用来解析语句和返回结果。`sqltest.cc` 需要 `sql_cntl.cc` 中定义的 `DBConnector` 来执行具体的事务 `SQL`。 + +### `case_cntl.cc ` 解析 + +#### 主要功能 + +**解析测试文件** + +- 从文件中逐行读取内容,识别不同的标记和格式(如注释、参数数目、事务SQL、预期结果等)。 +- 将解析后的数据结构化为测试序列和结果集。 + +**处理和比较结果** + +- 比较当前SQL执行结果与预期结果,检查是否匹配。 +- 对于每个测试用例,检查当前结果是否与任意一个预期结果集匹配。 +- 匹配结果会记录到指定文件中,供后续分析使用。 + +**输出结果** + +- 输出整体测试结果,总结各测试用例的执行情况。 +- 将详细的匹配结果输出到控制台和文件,便于调试和验证。 + +#### 主要封装类 + +**TestResultSet 类**: + +- 存储测试用例类型 (`test_case_type_`)、事务隔离级别 (`isolation_`)、测试结果类型 (`result_type_`) 以及预期结果集列表 (`expected_result_set_list_`)。 +- 提供设置和获取这些属性的方法,以及添加 SQL 结果集的方法。 + +**TxnSql 类**: + +- 存储事务 ID (`txn_id_`)、SQL 语句 ID (`sql_id_`)、SQL 语句 (`sql_`) 和测试用例类型 (`test_case_type_`)。 +- 提供获取这些属性的方法。 + +**TestSequence 类**: + +- 存储测试用例类型 (`test_case_type_`)、测试序列列表 (`txn_sql_list_`) 以及结果集的列数 (`param_num_`)。 +- 提供获取这些属性的方法、添加事务 SQL 的方法和设置参数数量的方法。 + +**CaseReader 类**: + +- 用于从文件读取并解析测试序列和预期结果集。 +- 存储从文件中读取的测试序列列表 (`test_sequence_list_`) 和测试结果集列表 (`test_result_set_list_`)。 +- 提供初始化测试序列和结果集的方法、添加测试序列和结果集的方法,以及从文件中解析事务 ID、SQL 语句、SQL 结果和隔离级别的方法。 + +**ResultHandler 类**: + +- 用于处理和验证 SQL 查询的预期结果。 +- 提供方法比较单个 SQL 查询的当前结果与预期结果,以及验证 SQL 查询的当前结果集是否匹配预期结果集列表中的任何一个。 + +**Outputter 类**: + +- 用于输出测试结果。 +- 提供将总体测试结果写入指定文件的方法、打印和写入事务 SQL 结果的方法,以及将测试用例类型和结果类型写入指定文件的方法。 + +**全局变量**: + +- `outputter` 和 `result_handler` 是 Outputter 和 ResultHandler 类的全局实例,用于在整个程序中处理输出和结果验证。 + + + +### `sql_cntl.cc` 解析 + +#### 主要功能 + +`sql_cntl.cc` 涉及` SQL` 操作的代码。主要是定义实现了一个 `DBConnector`类。 `DBConnector` 向下对接 `ODBC`,向上提供了封装的 `SQL` 执行接口。包含设置数据库隔离级别、开始事务、执行增删改查等功能、处理 `SQL` 返回值并获取错误信息、结束事务或回滚事务等功能。 + +#### DBConnector 类 + +* **conn_pool_ **:存储数据库连接句柄的向量,用于连接池管理。 + +* **InitDBConnector**: 初始化数据库连接器,创建指定数量的数据库连接,并将它们添加到连接池中。使用ODBC函数 `SQLAllocHandle` 分配环境和连接句柄,使用 `SQLConnect` 连接到数据库。 + +* **ExecReadSql2Int / ExecWriteSql**: 分别用于执行读取和写入操作的SQL语句。处理结果集或错误,并记录执行过程。 +* **SqlExecuteErr**: 处理SQL执行返回值的错误信息。根据返回值判断执行状态,并返回适当的错误消息或空字符串。 +* **SQLEndTnx / SQLStartTxn**: 用于事务管理的函数,包括开始、提交或回滚事务,并记录执行过程和错误信息。 +* **SetAutoCommit / SetTimeout / SetIsolationLevel**: 分别设置自动提交模式、连接超时和隔离级别,通过ODBC函数调整数据库连接的行为。 +* **ErrInfoWithStmt**: 通过SQL语句句柄获取错误信息,将错误信息和SQL状态填充到指定的数组中。 +* **ReleaseConn / ReleaseEnv / Release**: 释放数据库连接、环境资源或整体资源的函数,确保在使用完毕后进行清理和释放。 + + + +### `sqltest.cc ` 解析 + +#### 主要功能 + +静态测试的的入口,具体定义了静态测试的运行逻辑。该文件利用 `gflags` 库来实现命令行参数解析,声明定义了 `JobExecutor` 负责多线程执行数据库语句。使用了`pthread_mutex_t`来实现事务的并发控制。 + + + +#### 主要函数 + +**MultiThreadExecution** + +* 在多线程环境下执行多个数据库事务的函数,支持不同的数据库操作类型和事务隔离级别。 +* 该函数接受一系列事务SQL,执行并将结果记录到文件中。 + +**ExecTestSequence**: + +* `JobExecutor`的成员函数,执行一系列数据库测试事务并将结果写入文件。 +* 函数首先初始化测试结果文件,然后根据事务类型和隔离级别打印相关信息,执行事务SQL,并验证结果的一致性。 +* 具体调用 `MultiThreadExecution` 来在多线程环境中执行多个SQL事务。 From 8a677c5016cc1cd95c39c73427f1986fdfa371b1 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Wed, 24 Jul 2024 13:13:59 +0800 Subject: [PATCH 64/81] add english doc --- .../doc/Build 3TS-Coo on ubuntu18.04_en.md | 208 ++++++++++++++++++ ....md => Build 3TS-Coo on ubuntu18.04_zh.md} | 0 2 files changed, 208 insertions(+) create mode 100644 src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md rename src/dbtest/src/doc/{Build 3TS-Coo on ubuntu18.04.md => Build 3TS-Coo on ubuntu18.04_zh.md} (100%) diff --git a/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md new file mode 100644 index 00000000..49131e59 --- /dev/null +++ b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md @@ -0,0 +1,208 @@ +## Compiling 3TS-Coo on Ubuntu 18.04 + +### Required Dependencies + +First, according to the 3TS official documentation, to generate the Makefile, compile the code, and link to the database, the following tools and libraries need to be installed: + +- GCC suite and CMake +- ODBC Driver Manager +- The database you want to test (e.g., MySQL) +- ODBC driver for the database (e.g., mysql-connector-odbc) +- Dependencies for 3TS-Coo and ODBC + +3TS uses C++17 features, so when installing the GCC suite, make sure it supports C++17 (GCC 8 is recommended). The specific commands are as follows: + +```shell +sudo apt update +sudo apt install build-essential cmake git +apt install +``` + +We also need to install ODBC dependencies, which will be detailed below. + +### Installing the ODBC Driver Manager + +ODBC (Open Database Connectivity) is a standard API for accessing database management systems (DBMS). It was developed by Microsoft to make it easier for applications to communicate with databases. It acts as a middleware between applications and the DBMS. + +ODBC mainly consists of the ODBC Driver and the ODBC Driver Manager. The driver is a module that supports ODBC function calls, and each driver corresponds to a specific database, provided by the database vendor. The driver manager links all ODBC applications to the drivers and handles the binding of ODBC function calls to the appropriate driver functions. + +#### Download and Extract + +The two main driver managers are [unixODBC](https://www.unixodbc.org/) and [iODBC](https://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/WelcomeVisitors). We will install `unixODBC`. Download the `unixODBC` source from the official site. Choose the version as needed; here we download version [2.3.12](https://www.unixodbc.org/unixODBC-2.3.12.tar.gz). You can download it directly from the Downloads page on the website or use `curl` or `wget`. After downloading, use `tar` to extract the files. + +```shell +curl -o unixODBC-2.3.12.tar.gz https://www.unixodbc.org/unixODBC-2.3.12.tar.gz +tar -zxvf unixODBC-2.3.12.tar.gz +``` + +#### Installing Dependencies + +According to the `unixODBC` website, the source uses `autoconf` to build. Ensure that `automake`, `autoconf`, and `libtool` are installed before compiling and installing. + +```shell +apt install autoconf automake libtool +``` + +#### Compiling and Installing + +Follow the official steps to compile and install. The commands are as follows. For detailed installation steps and build options, refer to the [unixODBC official site](https://www.unixodbc.org/). + +```shell +cd unixODBC-dir +./configure # By default, unixODBC will be installed in /usr/local. You can change the installation location with the --prefix option. Here we use the default location. +make -j4 && make install +``` + +#### Installation Verification + +After installation, use `odbc_config` or `odbcinst` to verify the installation. + +```shell +root@c7b71bf10157$ odbc_config --version +2.3.12 +root@c7b71bf10157$ odbcinst -j +unixODBC 2.3.12 +DRIVERS............: /usr/local/etc/odbcinst.ini +SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini +FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources +USER DATA SOURCES..: /root/.odbc.ini +SQLULEN Size.......: 8 +SQLLEN Size........: 8 +SQLSETPOSIROW Size.: 8 +``` + +### Installing the ODBC Driver + +#### Installing MySQL ODBC Driver + +Using `mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64` as an example. + +##### Prerequisites + +Using `Ubuntu 18.04`, MySQL ODBC does not provide a corresponding DEB package. Therefore, the ODBC driver must be compiled from source. According to the MySQL official site, to install the MySQL ODBC Driver, ensure the following prerequisites are met: + +* **GNU Compiler Collection and CMake**: Requires GCC 4.2.1 or later. +* **MySQL Client Library**. To obtain the MySQL client library and header files, visit the [MySQL downloads page](https://dev.mysql.com/downloads/). +* **A compatible ODBC driver manager**. Connector/ODBC is known to work with both iODBC and unixODBC managers. +* **Character set support**. If you are using a character set not compiled into the MySQL client library, install the MySQL character definitions from the `charsets` directory to the `SHAREDIR` (default is `/usr/local/mysql/share/mysql/charsets`). If you have installed a MySQL server on the same machine, these character sets should already be in place. For more information on character set support, see "Character Sets, Collations, Unicode." + +##### MySQL Client Library Installation + +MySQL provides DEB packages for the Client Library, which can be downloaded and installed from the [MySQL downloads page](https://downloads.mysql.com/archives/community/). Here we use the MySQL 8.0.19 client library as an example. + +First, download the corresponding DEB packages. The main DEB packages are listed below: + +```shell +mysql-common_8.0.19-1ubuntu18.04_amd64.deb +libmysqlclient21_8.0.19-1ubuntu18.04_amd64.deb +libmysqlclient-dev_8.0.19-1ubuntu18.04_amd64.deb +``` + +The official site provides a **Bundle** package that includes all the deb files. Download it and use the `dpkg` command to install the corresponding DEB packages. + +```shell +dpkg -i mysql-common_8.0.19-1ubuntu18.04_amd64.deb +dpkg -i libmysqlclient21_8.0.19-1ubuntu18.04_amd64.deb +dpkg -i libmysqlclient-dev_8.0.19-1ubuntu18.04_amd64.deb +``` + +Note that these packages depend on each other, so the installation order cannot be changed. + +##### MySQL ODBC Connector (Driver) Compilation and Installation + +First, download the MySQL ODBC Connector source code from the [MySQL ODBC downloads page](https://downloads.mysql.com/archives/c-odbc/), then use `tar` to extract the files. + +```shell +tar -zxvf mysql-connector-odbc-8.0.19-src.tar.gz +``` + +The MySQL ODBC Connector source uses `cmake` to build, so ensure that `cmake` is installed before proceeding. Enter the Connector directory and create a `build` directory. + +```shell +cd mysql-connector-odbc-8.0.19-src +mkdir build +``` + +Configure the build options using `cmake`. + +```shell +cmake -G "Unix Makefiles" -DWITH_UNIXODBC=true -DDISABLE_GUI=true .. +``` + +* `-DWITH_UNIXODBC`: Use `unixODBC` as the driver manager. By default, MySQL ODBC uses `iODBC`. +* `-DDISABLE_GUI`: Do not build the GUI. The default is `false`, which builds the GUI. + +Build the project using `make`, and install it. The default installation path is `/usr/local`, which can be changed using the `-DCMAKE_INSTALL_PREFIX` option. + +```shell +make -j4 && make install +``` + +During compilation, if there are issues about missing dynamic library, install it using `apt` and rebuild. + +```shell +apt install libssl-dev +make -j4 +``` + +### Compiling 3TS-Coo + +#### Download + +First, clone the 3TS source code from the [3TS GitHub repository](https://github.com/Tencent/3TS.git), enter the source code root directory, and switch to the `coo-consistency-check` branch. + +```shell +git clone https://github.com/Tencent/3TS.git +git checkout coo-consistency-check +``` + +#### Dependencies + +Note that the 3TS-Coo project depends on the `pthread` library and the `gflags` library. Ensure these dependencies are installed before compiling. + +~~~ shell + + + + ~~~ + +#### Compilation + +Navigate to the `src/dbtest` directory, create a `build` directory, and enter it. + +```shell +cd src/dbtest +mkdir build && cd build +``` + +Do not directly run `cmake` here; otherwise, you will encounter the following error: + +> By not providing "FindODBC.cmake" in CMAKE_MODULE_PATH this project has +> asked CMake to find a package configuration file provided by "ODBC", but +> CMake did not find one. +> +> Could not find a package configuration file provided by "ODBC" with any of +> the following names: +> +> ODBCConfig.cmake +> odbc-config.cmake +> +> Make sure the installation of the ODBC driver manager is correct. + +To resolve this error, run: + +```shell +find / -name "FindODBC.cmake" + +//filepath is obtained by "find + +" +cp filepath/FindODBC.cmake 3TS/src/dbtest +``` + +Then, configure and build in the `build` directory. + +```shell +cmake -S -DWITH_UNIXODBC=1 ../ # Copying the MySQL FindODBC.cmake, the default is iODBC, so we need to set the configuration parameter. +make -j4 +``` diff --git a/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_zh.md similarity index 100% rename from src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04.md rename to src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_zh.md From cbb8dc8b25f576e028061c3b1e2e2ce8c35507a3 Mon Sep 17 00:00:00 2001 From: yhyhdyb <2930387428@qq.com> Date: Wed, 24 Jul 2024 13:29:09 +0800 Subject: [PATCH 65/81] Create dynamicTest.md --- src/dbtest/src/doc/dynamicTest.md | 142 ++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/dbtest/src/doc/dynamicTest.md diff --git a/src/dbtest/src/doc/dynamicTest.md b/src/dbtest/src/doc/dynamicTest.md new file mode 100644 index 00000000..6346910e --- /dev/null +++ b/src/dbtest/src/doc/dynamicTest.md @@ -0,0 +1,142 @@ +## Introduction +In this module, we provide a framework for dynamically testing different databases. You can use Python scripts (random_do_list.py, mda_detect.py, mda_generate.py) to generate input test files yourself. Dynamic testing is specifically implemented in (3TS/src/dbtest/src) under case_cntl_v2.cc, sqltest_v2.cc, sql_cntl_v2.cc. + +## Test File Generation +Run random_do_list.py +```shell +python random_do_list.py data_num target_num +``` +The script will generate a do_test_list.txt file with contents like +``` +PW0-PW1 +``` +indicating the type of operation. +- Write (W) +- Read (R) +- Predicate (P) +- Insert (I) +- Delete (D) +- Abort (A) +- Commit (C) +Next, run mda_generate.py +```shell +python mda_generate.py db_type test_type +``` +db_type includes tdsql, crdb, etc., and test_type includes single, dist. + +Run mad_detect.py for error detection +```shell +python mad_detect.py +``` + +## Test File Format +Static testing first declares ParamNum, which means how many columns the result set has. + +Then input testSequence in the format: execution order ID-transaction ID-SQL statement + +Next, input the isolation level, such as serializable{...} + +Inside the brackets are pairs like "9-0,1 1,1", where 9 is the SQL ID and "(0,1) (1,1)" is the result. + +Comments can be added after # in the file. + +Dynamic testing declares Parameters and testSequence but does not have an expected result sequence. + +Parameters format is similar to the following: +``` +#Parameters: #column=2 #txn=2 #operations=2 #variable=2 +``` + +## case_cntl_v2.cc +Implements the test case control function, including reading database configuration, SQL statements, and expected results from the test file, verifying the difference between actual results and expected results, and outputting comparison results to the specified folder. + +The code first reads the specified test file using the TestSequenceAndTestResultSetFromFile function. This function parses the content of the test file and extracts the test sequence and result set information. During the process of reading the test file, each line is parsed. Depending on the content of the line, different operations are performed: + +If the line contains "Parameters", the number of parameters is extracted and set to the test sequence object. + +If the line starts with "#", it indicates a comment and is skipped. + +In other cases, it is assumed that the line contains transaction ID and SQL statement. The TxnIdAndSql function is used to parse this line, extract the transaction ID, SQL ID, and SQL statement, then create a TxnSql object and add it to the test sequence. +Initialize the test sequence and result set list: The InitTestSequenceAndTestResultSetList function reads the "do_test_list.txt" file, which contains the list of test cases to be executed. For each test case in the list, the function reads the corresponding test file and adds the parsed test sequence and result set to the internal storage structure. + +Finally, the IsSqlExpectedResult function is called to compare the current result of the SQL query with the expected result. This comparison is done item by item. If the current result and the expected result differ in size or any item does not match, the function returns false, indicating that the result does not meet expectations. Otherwise, it returns true, indicating that the test passed. + +Data structures: + +Outputter: Provides functions to write test cases and result data to a file + +ResultHandler: Handles and verifies expected test results + +Functions: + +Same as v1 static testing: + +CaseReader::TxnIdAndSql: Parses a given line to extract the execution order ID, transaction ID, and SQL statement. + +CaseReader::SqlIdAndResult: Parses a given line to extract the SQL ID and its expected result. + +CaseReader::Isolation: Parses the isolation level. + +CaseReader::InitTestSequenceAndTestResultSetList: Same as v1, initializes the TestSequence and TestResultSet lists based on the provided test path and database type. + +ResultHandler::IsSqlExpectedResult, ResultHandler::IsTestExpectedResult: Compares the test result with the expected result. + +Outputter::WriteResultTotal, Outputter::WriteTestCaseTypeToFile, Outputter::WriteResultType: Writes test results to a file. + +Different: + +CaseReader::TestSequenceAndTestResultSetFromFile: Reads the file and outputs the testSequence. Unlike v1, it does not parse the isolation level and expected results. + +Outputter::PrintAndWriteTxnSqlResult: Outputs transaction results. Unlike v1, it only outputs the current result without comparing it with the expected result set. + +## sql_cntl_v2.cc +Code for SQL control or operations. Implements interface functions with ODBC databases, including setting database isolation levels, starting transactions, performing CRUD operations, handling SQL return values and retrieving error messages, ending transactions or rolling back transactions. + +The code first uses DBConnector to get the database connection for the corresponding session ID from the connection pool, then allocates a new statement handle. If the handle allocation fails, the function calls DBConnector::SqlExecuteErr to get error information and outputs an error message. If sql_id is 1024, it skips the print output function. Then, it releases the statement handle and returns false, indicating that the SQL execution failed. Finally, it returns a boolean value indicating whether the SQL statement execution was successful. + +Data structures: + +DBConnector: Manages all database connection-related functions and holds the ODBC database connection handle (Database Connection Handle). + +Same as v1 static testing: + +DBConnector::ErrInfoWithStmt: Extracts error information from the ODBC handle. + +DBConnector::ExecReadSql2Int: Executes SQL read statements and handles errors. + +DBConnector::SQLStartTxn: Starts a transaction and handles errors. + +DBConnector::SetAutoCommit: Sets the database connection to auto-commit mode. + +DBConnector::SetTimeout: Sets the connection timeout. + +DBConnector::SetIsolationLevel: Sets the isolation level. + +Different: + +DBConnector::SqlExecuteErr: Handles and records execution errors. Unlike v1, it outputs the session id and returns empty if it fails for some unknown reason without providing information. + +DBConnector::ExecWriteSql: Executes SQL write statements and handles errors. Unlike v1, it uses the SQLRowCount function to get the number of affected rows. If no rows are affected, it outputs an error. + +DBConnector::SQLEndTnx: Ends the transaction by committing or rolling back. Unlike v1, it outputs the execution time information after the SQL statement is successfully executed. + +## sqltest_v2.cc +Code for SQL testing, containing the main function of the project. + +First, the gflags library is used to implement command-line argument parsing. + +Initialize the test environment: +Set configuration parameters such as database connection pool size and transaction timeout. + +Initialize the database connector (DBConnector) to connect to the specified database. + +Prepare SQL statements and transaction sequences for testing, which may include read (SELECT), write (INSERT, UPDATE, DELETE), transaction start (BEGIN), and end (COMMIT, ROLLBACK) operations. Use multi-threaded programming, where each thread is responsible for executing a group of database statements, and the program code is executed in a specified order by setting different sleep times for the sub-threads. + +During execution, record the test process and results in the specified log file for subsequent analysis and audit. After completing the execution of all SQL statements, release related resources, such as closing database connections and releasing mutex locks. Summarize test results, including the number of successfully executed statements, failed statements, and their reasons. + +Unlike v1, it does not support Cassandra and Yugabyte, nor their isolation level definitions. + +Functions: + +MultiThreadExecution: Executes SQL queries in multiple threads and returns results. Unlike v1, it does not support Yugabyte and MyRocks. + From 262ac2f414a4fc58cc35db45c041042dd0ef54fb Mon Sep 17 00:00:00 2001 From: Henry yu <101050434+yhyhdyb@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:33:20 +0800 Subject: [PATCH 66/81] Update dynamicTest.md --- src/dbtest/src/doc/dynamicTest.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dbtest/src/doc/dynamicTest.md b/src/dbtest/src/doc/dynamicTest.md index 6346910e..38240d08 100644 --- a/src/dbtest/src/doc/dynamicTest.md +++ b/src/dbtest/src/doc/dynamicTest.md @@ -18,6 +18,7 @@ indicating the type of operation. - Delete (D) - Abort (A) - Commit (C) + Next, run mda_generate.py ```shell python mda_generate.py db_type test_type From 145afc150964855e3f7338212a7d69d2ec047294 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Wed, 24 Jul 2024 13:45:36 +0800 Subject: [PATCH 67/81] delete extra code block --- src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md index 49131e59..a1b4f747 100644 --- a/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md +++ b/src/dbtest/src/doc/Build 3TS-Coo on ubuntu18.04_en.md @@ -160,12 +160,6 @@ git checkout coo-consistency-check Note that the 3TS-Coo project depends on the `pthread` library and the `gflags` library. Ensure these dependencies are installed before compiling. -~~~ shell - - - - ~~~ - #### Compilation Navigate to the `src/dbtest` directory, create a `build` directory, and enter it. @@ -203,6 +197,6 @@ cp filepath/FindODBC.cmake 3TS/src/dbtest Then, configure and build in the `build` directory. ```shell -cmake -S -DWITH_UNIXODBC=1 ../ # Copying the MySQL FindODBC.cmake, the default is iODBC, so we need to set the configuration parameter. +cmake -S -DWITH_UNIXODBC=1 ../ # Copying the MySQL FindODBC.cmake, the default odbc driver manager is iODBC, so we need to set the configuration parameter. make -j4 ``` From 1a179b0cd47d758bf31495cb2eee7a705c852ce6 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Thu, 25 Jul 2024 00:21:45 +0800 Subject: [PATCH 68/81] add two columns to describe the isolation level and the concurrency alogrithm add english documentation --- src/dbtest/src/doc/Database_Resarch_Doc.md | 19 ----- .../src/doc/Database_Research_Doc_en.md | 78 +++++++++++++++++++ .../src/doc/Database_Research_Doc_zh.md | 65 ++++++++++++++++ 3 files changed, 143 insertions(+), 19 deletions(-) delete mode 100644 src/dbtest/src/doc/Database_Resarch_Doc.md create mode 100644 src/dbtest/src/doc/Database_Research_Doc_en.md create mode 100644 src/dbtest/src/doc/Database_Research_Doc_zh.md diff --git a/src/dbtest/src/doc/Database_Resarch_Doc.md b/src/dbtest/src/doc/Database_Resarch_Doc.md deleted file mode 100644 index 99537d1a..00000000 --- a/src/dbtest/src/doc/Database_Resarch_Doc.md +++ /dev/null @@ -1,19 +0,0 @@ -### 主流 DMBS 支持情况 - -| DBMS 名称 | DBMS 类型 | 是否提供 ODBC | 是否支持事务 | 是否被 3TS-Coo 验证 | 详细介绍 | -| -------------------- | ---------------------- | ------------- | ------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MySQL | 关系型数据库管理系统 | 是 | 是 | 是 | MySQL 是一个广泛使用的开源关系型数据库管理系统,适合用于各种规模的应用,包括Web应用和企业级解决方案。支持事务处理和复制,具有良好的性能和稳定性。 | -| PostgreSQL | 关系型数据库管理系统 | 是 | 是 | 是 | PostgreSQL 是一个强大的开源关系型数据库系统,支持复杂的查询和事务处理,以及高级功能如JSON支持、全文搜索和地理空间查询。广泛用于各种企业和科研领域的应用。 | -| MariaDB | 关系型数据库管理系统 | 是 | 是 | 是 | MariaDB 是一个社区驱动的开源数据库管理系统,由MySQL的创始人创建,兼容MySQL,并包含增强的功能和性能优化。适合需要高性能和开放源代码的应用。 | -| Microsoft SQL Server | 关系型数据库管理系统 | 是 | 是 | 是 | SQL Server 是由Microsoft开发的关系型数据库管理系统,适用于大型企业应用和数据驱动的解决方案。提供高可用性、安全性和企业级支持,支持广泛的开发工具和平台。 | -| Oracle Database | 关系型数据库管理系统 | 是 | 是 | 是 | Oracle Database 是一种功能强大的商业级关系数据库管理系统,用于企业级数据管理和应用程序。具有高度可扩展性、安全性和数据完整性,支持广泛的应用开发和管理需求。 | -| MyRocks | 关系型数据库管理系统 | 是 | 是 | 是 | MyRocks 是Facebook开发的高性能持久性存储引擎,设计用于处理大规模的OLTP工作负载。基于RocksDB,专注于高吞吐和低延迟的需求。 | -| MongoDB | NoSQL 数据库管理系统 | 是 | 3.0 后支持 | 是 | MongoDB 是一个面向文档的NoSQL数据库,适合处理大量非结构化数据和需要灵活数据模型的应用,如Web应用、分析和实时数据处理。支持高可用性和横向扩展。 | -| Redis | NoSQL 数据库管理系统 | 否 | 否 | 否 | Redis 是一个内存中的数据结构存储,通常用作缓存和消息代理。支持多种数据结构(如字符串、哈希表、列表等),提供快速访问和高性能。适用于实时数据处理和会话存储等场景。 | -| Cassandra | NoSQL 数据库管理系统 | 是 | 是 | 是 | Cassandra 是一个分布式的面向列的NoSQL数据库,具有高可用性和可伸缩性。适用于需要处理大量数据和分布式数据存储的应用,如分析和日志管理。 | -| Neo4j | 图数据库 | 是 | 是 | 否 | Neo4j 是一个图数据库管理系统,专注于存储和处理图形结构数据(节点和边)。适用于需要复杂关系和网络分析的应用,如社交网络、推荐系统和网络安全分析。 | -| InfluxDB | 时间序列数据库管理系统 | 是 | 是 | 否 | InfluxDB 是一个专为时间序列数据设计的开源数据库,用于处理大规模的时间戳数据,如监控、IoT传感器数据和实时分析。具有高性能和查询效率。 | -| TimescaleDB | 时间序列数据库管理系统 | 是 | 是 | 否 | TimescaleDB 是建立在PostgreSQL之上的开源时间序列数据库,结合了SQL和NoSQL的特性,用于处理时间序列数据的高性能分析和查询。适合于时间序列数据存储和复杂查询。 | -| CockroachDB | 分布式数据库管理系统 | 是 | 是 | 是 | CockroachDB 是一个分布式的关系数据库管理系统,具有事务支持和高可用性,适用于需要强一致性和水平扩展的大规模分布式应用,如在线服务和全球部署的应用。 | -| TiDB | 分布式数据库管理系统 | 是 | 是 | 是 | TiDB 是一个开源的分布式关系数据库管理系统,兼容MySQL协议,支持事务处理和横向扩展。适用于在线事务处理(OLTP)和在线分析处理(OLAP)的混合工作负载。 | -| Oceanbase | 分布式数据库管理系统 | 是 | 是 | 是 | Oceanbase 是蚂蚁开发的 NoSQL 分布式关系数据库管理系统,具有多模态数据和分布式事务支持,适用于大规模分布式数据处理和高并发事务处理。 | diff --git a/src/dbtest/src/doc/Database_Research_Doc_en.md b/src/dbtest/src/doc/Database_Research_Doc_en.md new file mode 100644 index 00000000..f1f65eb9 --- /dev/null +++ b/src/dbtest/src/doc/Database_Research_Doc_en.md @@ -0,0 +1,78 @@ +### DBMS Overview + +| DBMS Name | DBMS Type | ODBC Support | Transaction Support | 3TS-Coo Verified | Supported Isolation Levels | Concurrency Control Algorithms and Transaction Details | +| -------------------- | ---------------- | ------------ | ------------------- | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------ | +| MySQL | Relational DBMS | Yes | Yes | Yes | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC, Optimistic and Pessimistic Control | +| PostgreSQL | Relational DBMS | Yes | Yes | Yes | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| MariaDB | Relational DBMS | Yes | Yes | Yes | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| Microsoft SQL Server | Relational DBMS | Yes | Yes | Yes | Read Uncommitted, Read Committed, Repeatable Read, Serializable, Snapshot | 2PL, MVCC, Optimistic and Pessimistic Control | +| Oracle Database | Relational DBMS | Yes | Yes | Yes | Read Committed, Serializable | 2PL (No-wait, Wait-for-Grant), MVCC | +| MyRocks | Relational DBMS | Yes | Yes | Yes | Read Committed, Repeatable Read | MVCC | +| MongoDB | NoSQL DBMS | Yes | Supported since 3.0 | Yes | Read Uncommitted, Snapshot | Optimistic Concurrency Control (OCC) | +| Redis | NoSQL DBMS | No | No | No | Not applicable | Optimistic Lock, MULTI/EXEC | +| Cassandra | NoSQL DBMS | Yes | Yes | Yes | Not applicable (controlled by consistency levels) | LWT, Timestamp Ordering Protocol (T/O) | +| Neo4j | Graph Database | Yes | Yes | No | Read Committed | MVCC | +| InfluxDB | Time Series DBMS | Yes | Yes | No | Not applicable | Optimistic Concurrency Control (OCC) | +| TimescaleDB | Time Series DBMS | Yes | Yes | No | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| CockroachDB | Distributed DBMS | Yes | Yes | Yes | Read Committed, Serializable | MVCC, Calvin | +| TiDB | Distributed DBMS | Yes | Yes | Yes | Read Committed, Repeatable Read | MVCC, Percolator | +| Oceanbase | Distributed DBMS | Yes | Yes | Yes | Read Committed, Repeatable Read, Serializable | MVCC, 2PC (Two-Phase Commit) | + + +### DBMS Detailed Overview + +#### MySQL + +MySQL is a widely used open-source relational database management system suitable for applications of various scales, including web and enterprise solutions. It supports transaction processing and replication, offering good performance and stability. Transactions in MySQL are implemented via the InnoDB storage engine, which supports four isolation levels (Read Uncommitted, Read Committed, Repeatable Read, Serializable) and manages concurrent transactions using Multi-Version Concurrency Control (MVCC) and row-level locks. + +#### PostgreSQL + +PostgreSQL is a powerful open-source relational database system supporting complex queries and transactions, along with advanced features like JSON support, full-text search, and geospatial queries. It is widely used in enterprise and research applications. PostgreSQL handles transactions via MVCC, supports four isolation levels, and manages concurrency with shared and exclusive locks. + +#### MariaDB + +MariaDB is a community-driven open-source database management system created by the founders of MySQL. It is compatible with MySQL and includes enhanced features and performance optimizations. It is suited for applications requiring high performance and open-source access. Transaction management in MariaDB is similar to MySQL, primarily implemented via the InnoDB engine. + +#### Microsoft SQL Server + +SQL Server, developed by Microsoft, is a relational database management system designed for large-scale enterprise applications and data-driven solutions. It offers high availability, security, and enterprise-level support, with broad development tool and platform support. SQL Server supports five isolation levels and manages concurrency using locks and lock escalation. It also supports Snapshot Isolation, utilizing optimistic concurrency control mechanisms. + +#### Oracle Database + +Oracle Database is a powerful commercial-grade relational database management system used for enterprise data management and applications. It features high scalability, security, and data integrity. Oracle manages transactions through read consistency and locking mechanisms, supporting two main isolation levels (Read Committed, Serializable). It uses Multi-Version Concurrency Control (MVCC) for consistent reads and combines it with Two-Phase Locking (2PL). + +#### MyRocks + +MyRocks is a high-performance persistent storage engine developed by Facebook, designed to handle large-scale OLTP workloads. Based on RocksDB, it focuses on high throughput and low latency. Transactions in MyRocks are implemented using MVCC and key-based locks, supporting two isolation levels (Read Committed, Repeatable Read). + +#### MongoDB + +MongoDB is a document-oriented NoSQL database suitable for handling large amounts of unstructured data and applications requiring a flexible data model, such as web apps, analytics, and real-time data processing. MongoDB supports transactions starting from version 3.0, with isolation levels mainly being Read Uncommitted and Read Committed. It uses multi-document transactions and distributed locks for concurrency management and employs optimistic concurrency control (OCC). + +#### Redis + +Redis is an in-memory data structure store often used as a cache and message broker. It supports various data structures (e.g., strings, hashes, lists) and offers fast access and high performance. It is suited for real-time data processing and session storage. Redis does not support traditional transaction isolation levels due to its single-threaded model, relying on optimistic locks and transaction commands (MULTI/EXEC) for simple transaction support. + +#### Cassandra + +Cassandra is a distributed column-family NoSQL database known for its high availability and scalability. It is suitable for applications requiring large-scale data processing and distributed data storage, such as analytics and log management. Cassandra does not support traditional transaction isolation levels but manages data consistency through consistency levels (e.g., One, Quorum, All). It uses optimistic concurrency control and lightweight transactions (LWT) and employs a Timestamp Ordering Protocol (T/O). + +#### Neo4j + +Neo4j is a graph database management system focusing on storing and processing graph data (nodes and edges). It is suitable for applications requiring complex relationship and network analysis, such as social networks, recommendation systems, and network security analysis. Neo4j manages transactions using ACID properties, with the main isolation level being Read Committed, and employs locks and MVCC for concurrency control. + +#### InfluxDB + +InfluxDB is an open-source database designed specifically for time-series data, used for handling large volumes of timestamped data, such as monitoring, IoT sensor data, and real-time analytics. It offers high performance and query efficiency. InfluxDB does not support traditional transaction isolation levels as it focuses on time-series data's write and query performance, using the uniqueness of time-series data to prevent conflicts. InfluxDB employs optimistic concurrency control (OCC). + +#### TimescaleDB + +TimescaleDB is an open-source time-series database built on PostgreSQL, combining SQL and NoSQL features for high-performance analysis and querying of time-series data. It is suitable for time-series data storage and complex queries. TimescaleDB inherits PostgreSQL's transaction model, supports four isolation levels, and uses MVCC for concurrency management. + +#### CockroachDB + +CockroachDB is a distributed relational database management system with transaction support and high availability, designed for large-scale distributed applications requiring strong consistency and horizontal scalability, such as online services and global deployments. CockroachDB handles transactions via distributed transaction protocols (e.g., Percolator), supports two isolation levels (Read Committed, Serializable), and uses optimistic concurrency control and deterministic concurrency control protocols (Calvin). + +#### TiDB + +TiDB is an open-source distributed relational database management system compatible with MySQL protocol, supporting transaction processing and horizontal scalability. It is suitable for mixed workloads involving Online Transaction Processing (OLTP) and Online Analytical Processing (OLAP). TiDB's transactions are managed using Percolator, supporting two isolation levels (Read Committed, Repeatable Read). \ No newline at end of file diff --git a/src/dbtest/src/doc/Database_Research_Doc_zh.md b/src/dbtest/src/doc/Database_Research_Doc_zh.md new file mode 100644 index 00000000..72bf8b65 --- /dev/null +++ b/src/dbtest/src/doc/Database_Research_Doc_zh.md @@ -0,0 +1,65 @@ +### DBMS 大致介绍 + +| DBMS 名称 | DBMS 类型 | 是否提供 ODBC | 是否支持事务 | 是否被 3TS-Coo 验证 | 支持的事务隔离级别 | 并发控制算法及事务描述 | +| -------------------- | ---------------------- | ------------- | ------------ | ------------------- | ------------------------------------------------------------ | ---------------------------- | +| MySQL | 关系型数据库管理系统 | 是 | 是 | 是 | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC,乐观和悲观控制 | +| PostgreSQL | 关系型数据库管理系统 | 是 | 是 | 是 | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| MariaDB | 关系型数据库管理系统 | 是 | 是 | 是 | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| Microsoft SQL Server | 关系型数据库管理系统 | 是 | 是 | 是 | Read Uncommitted, Read Committed, Repeatable Read, Serializable, Snapshot | 2PL,MVCC,乐观和悲观控制 | +| Oracle Database | 关系型数据库管理系统 | 是 | 是 | 是 | Read Committed, Serializable | 2PL (无等待、等待死锁),MVCC | +| MyRocks | 关系型数据库管理系统 | 是 | 是 | 是 | Read Committed, Repeatable Read | MVCC | +| MongoDB | NoSQL 数据库管理系统 | 是 | 3.0 后支持 | 是 | Read Uncommitted, Snapshot | 乐观控制(OCC) | +| Redis | NoSQL 数据库管理系统 | 否 | 否 | 否 | 不适用 | 乐观锁,MULTI/EXEC | +| Cassandra | NoSQL 数据库管理系统 | 是 | 是 | 是 | 不适用(通过一致性级别控制) | LWT,时间戳排序协议(T/O) | +| Neo4j | 图数据库 | 是 | 是 | 否 | Read Committed | MVCC | +| InfluxDB | 时间序列数据库管理系统 | 是 | 是 | 否 | 不适用 | 乐观并发控制(OCC) | +| TimescaleDB | 时间序列数据库管理系统 | 是 | 是 | 否 | Read Uncommitted, Read Committed, Repeatable Read, Serializable | MVCC | +| CockroachDB | 分布式数据库管理系统 | 是 | 是 | 是 | Read Committed, Serializable | MVCC,Calvin | +| TiDB | 分布式数据库管理系统 | 是 | 是 | 是 | Read Committed, Repeatable Read | MVCC,Percolator | +| Oceanbase | 分布式数据库管理系统 | 是 | 是 | 是 | Read Committed, Repeatable Read,Serializable | MVCC,2PC(两阶段提交) | + + + +### DBMS 详细介绍 + +#### MySQL +MySQL 是一个广泛使用的开源关系型数据库管理系统,适合用于各种规模的应用,包括 Web 应用和企业级解决方案。支持事务处理和复制,具有良好的性能和稳定性。MySQL 的事务通过 InnoDB 存储引擎实现,支持四种隔离级别(Read Uncommitted, Read Committed, Repeatable Read, Serializable),并使用多版本并发控制(MVCC)和行级锁来管理并发事务。 + +#### PostgreSQL +PostgreSQL 是一个强大的开源关系型数据库系统,支持复杂的查询和事务处理,以及高级功能如 JSON 支持、全文搜索和地理空间查询。广泛用于各种企业和科研领域的应用。PostgreSQL 的事务通过 MVCC 实现,支持四种隔离级别,并使用共享锁和排他锁来管理并发事务。 + +#### MariaDB +MariaDB 是一个社区驱动的开源数据库管理系统,由 MySQL 的创始人创建,兼容 MySQL,并包含增强的功能和性能优化。适合需要高性能和开放源代码的应用。MariaDB 的事务管理与 MySQL 类似,也主要通过 InnoDB 引擎实现。 + +#### Microsoft SQL Server +SQL Server 是由 Microsoft 开发的关系型数据库管理系统,适用于大型企业应用和数据驱动的解决方案。提供高可用性、安全性和企业级支持,支持广泛的开发工具和平台。SQL Server 支持五种事务隔离级别,并使用锁和锁升级来管理并发事务。SQL Server 还支持快照隔离(Snapshot Isolation),使用乐观并发控制机制。 + +#### Oracle Database +Oracle Database 是一种功能强大的商业级关系数据库管理系统,用于企业级数据管理和应用程序。具有高度可扩展性、安全性和数据完整性。Oracle 的事务通过读一致性和锁来管理,并支持两种主要的隔离级别(Read Committed, Serializable)。Oracle 使用多版本并发控制(MVCC)来实现一致性读,并结合两阶段锁定协议(2PL)。 + +#### MyRocks +MyRocks 是 Facebook 开发的高性能持久性存储引擎,设计用于处理大规模的 OLTP 工作负载。基于 RocksDB,专注于高吞吐和低延迟的需求。MyRocks 的事务通过 MVCC 和基于键的锁实现,并支持两种隔离级别(Read Committed, Repeatable Read)。 + +#### MongoDB +MongoDB 是一个面向文档的 NoSQL 数据库,适合处理大量非结构化数据和需要灵活数据模型的应用,如 Web 应用、分析和实时数据处理。MongoDB 从 3.0 版本开始支持事务,隔离级别主要为 Read Uncommitted 和 Read Committed。MongoDB 使用多文档事务和分布式锁来管理并发事务,采用乐观并发控制(OCC)。 + +#### Redis +Redis 是一个内存中的数据结构存储,通常用作缓存和消息代理。支持多种数据结构(如字符串、哈希表、列表等),提供快速访问和高性能。适用于实时数据处理和会话存储等场景。Redis 不支持事务隔离级别,因为它是一个单线程处理模型,使用乐观锁和事务命令(MULTI/EXEC)来实现简单的事务支持。 + +#### Cassandra +Cassandra 是一个分布式的面向列的 NoSQL 数据库,具有高可用性和可伸缩性。适用于需要处理大量数据和分布式数据存储的应用,如分析和日志管理。Cassandra 不支持传统的事务隔离级别,而是通过一致性级别(如 One, Quorum, All)来控制数据一致性。Cassandra 使用乐观并发控制和轻量级事务(LWT)来管理并发事务,同时使用时间戳排序协议(T/O)。 + +#### Neo4j +Neo4j 是一个图数据库管理系统,专注于存储和处理图形结构数据(节点和边)。适用于需要复杂关系和网络分析的应用,如社交网络、推荐系统和网络安全分析。Neo4j 的事务管理使用 ACID 特性,主要隔离级别为 Read Committed,并使用锁机制和 MVCC 来管理并发事务。 + +#### InfluxDB +InfluxDB 是一个专为时间序列数据设计的开源数据库,用于处理大规模的时间戳数据,如监控、IoT 传感器数据和实时分析。具有高性能和查询效率。InfluxDB 不支持传统的事务隔离级别,因为它专注于时间序列数据的写入和查询性能,通过时间序列的唯一性来避免数据冲突。InfluxDB 使用乐观并发控制(OCC)。 + +#### TimescaleDB +TimescaleDB 是建立在 PostgreSQL 之上的开源时间序列数据库,结合了 SQL 和 NoSQL 的特性,用于处理时间序列数据的高性能分析和查询。适合于时间序列数据存储和复杂查询。TimescaleDB 继承了 PostgreSQL 的事务模型,支持四种隔离级别,并使用 MVCC 来管理并发事务。 + +#### CockroachDB +CockroachDB 是一个分布式的关系数据库管理系统,具有事务支持和高可用性,适用于需要强一致性和水平扩展的大规模分布式应用,如在线服务和全球部署的应用。CockroachDB 的事务通过分布式事务协议(如 Percolator)实现,支持两种隔离级别(Read Committed, Serializable),并使用乐观并发控制和确定性并发控制协议(Calvin)。 + +#### TiDB +TiDB 是一个开源的分布式关系数据库管理系统,兼容 MySQL 协议,支持事务处理和横向扩展。适用于在线事务处理(OLTP)和在线分析处理(OLAP)的混合工作负载。TiDB 的事务通过 Percolator 实现,支持两种隔离级别(Read Committed, Repeat)。 From fe47caee934488683abbf5630758626e681555e3 Mon Sep 17 00:00:00 2001 From: czy <81145281+czyrye@users.noreply.github.com> Date: Wed, 24 Jul 2024 21:46:52 +0100 Subject: [PATCH 69/81] translate to english --- StaticTest.md | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 StaticTest.md diff --git a/StaticTest.md b/StaticTest.md new file mode 100644 index 00000000..8e2c606a --- /dev/null +++ b/StaticTest.md @@ -0,0 +1,166 @@ +### 简介 + +该文档负责三个文件的说明,包括了代码功能、整体结构、与其他文件的关系和在项目中的作用等。 + + + +## case_cntl.cc + +该文件负责解析和处理测试文件中的SQL语句和事务ID,帮助读取和解析输入文件中的命令和数据,并将结果输出。 + +### 整体结构: + +头文件引入,名为`case_cntl.h` + +```c++ +#include "case_cntl.h" +``` + + + +全局对象:outputter`和`result_handler,分别用于输出和结果处理 + +```c++ +Outputter outputter; +ResultHandler result_handler; +``` + + + +### 函数声明和定义 + +- `CaseReader`类 + + 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 + + - `TxnIdAndSql`:用于获取特定行的事务ID和SQL语句,解析输入行,提取执行顺序ID、交易事务ID和SQL语句。 + - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 + - `Isolation`:提取字符串行中的隔离级别。 + - `InitTestSequenceAndTestResultSetList`:根据提供的测试路径和数据库类型,初始化测试序列和结果集(casecntl)。 + - `TestSequenceAndTestResultSetFromFile`:解析提供的测试文件以提取测试序列及其相应的预期结果。 + +- `ResulHandler`类 + + 主要负责比较SQL查询结果,并确定它们是否符合预期结果。以下是该类中关键函数的声明和定义: + + - `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 + - `IsTestExpectedResult`:用于将当前测试结果与一组预期测试结果进行比较。 + +- `Outputter`类 + + 主要负责将各种类型的输出写入文件,特别是与测试结果相关的输出。 + + - `WriteResultTotal`:该函数功能是将测试结果集的摘要信息写入指定的文件。它从每个 `TestResultSet` 对象中提取简化的测试结果,并将每个测试用例类型及其对应的结果写入到提供的输出文件中。 + - `PrintAndWriteTxnSqlResult`:该函数功能是将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 + - `WriteTestCaseTypeToFile`:该函数功能是将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 + +### 项目中的作用 + +该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作和测试结果的比较。通过详细的函数定义和类方法,实现了对SQL语句执行过程中的各种操作和错误处理。 + +#### + +## sqltest.cc + +该文件用于执行多线程SQL事务测试的,主要功能是通过多线程环境下执行多组SQL事务,并验证其结果。 + +### 整体结构 + +头文件和库引入 + +```c++ +#include "gflags/gflags.h" +#include "sqltest.h" +#include +#include +#include +#include +``` + +包括必要的头文件,`gflags/gflags.h`、`sqltest.h`、`thread`、`unistd.h`、`mutex`、`regex`。 + +命令行参数定义,使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。 + +全局变量 + +定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。 + +### 函数声明和定义 + +- **`try_lock_wait`**:尝试在给定超时时间内获取指定的互斥锁,用于多线程锁机制。 +- **`MultiThreadExecution`**:在多线程环境下执行一组SQL事务。该函数使用 `DBConnector` 类来执行SQL语句,并在事务执行过程中进行锁操作和错误处理。 +- **`JobExecutor::ExecTestSequence`**:执行一系列数据库测试事务,并将结果写入指定文件。该函数通过调用`MultiThreadExecution`函数来实现多线程事务执行。 + +### 项目中的作用 + +**数据库类型的支持**:支持多种数据库类型(如MySQL、PostgreSQL、Oracle等)的事务测试。 + +**多线程事务执行**:通过多线程机制执行事务,模拟高并发环境下的事务处理情况。 + +**事务隔离级别测试**:支持不同的事务隔离级别,验证数据库在不同隔离级别下的行为。 + +**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析和验证。 + + + +## sql_cntl.cc + +该文件用于执行SQL语句并处理数据库连接。文件中定义了一些工具函数和一个主要的数据库连接器类`DBConnector`。 + +### 整体结构 + +头文件和库引入 + +```c++ +#include "sql_cntl.h" +#include +#include +#include +#include +``` + +工具函数的定义:用于时间获取、字符串替换和类型转换等。 + +DBConnector类的定义:处理SQL语句执行、错误信息获取和结果集处理等。 + + + +### 对象声明和定义 + +- `DBConnector`类 + + 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 + + - `ErrInfoWithStmt`:用于获取特定句柄的错误信息。 + - `SqlExecuteErr`:处理SQL执行的错误信息。 + - `ExecWriteSql`:执行写入类型的SQL语句。 + - `ExecReadSql2Int`:执行读取类型的SQL语句并处理结果。 + + + +### 函数声明和定义 + +- **`get_current_time`**:该函数用于获取当前时间。 +- **`replace`**:该函数用于进行字符串替换。 +- **`SQLCHARToStr`**:该函数用于将`SQLCHAR`类型转换为`std::string`类型。 +- **`DBConnector::ErrInfoWithStmt`**:该函数用于获取错误信息。 +- **`DBConnector::SqlExecuteErr`**:该函数用于处理SQL执行返回值。 +- **`DBConnector::ExecWriteSql`**:该函数用于执行写入SQL语句。 +- **`DBConnector::ExecReadSql2Int`**:该函数用于执行读取SQL语句并处理结果集。 + + + +### 项目中的作用 + +该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。 + + + +## 文件之间的关系 + +1. `sql_cntl.cc` 和 `sqltest.cc` : + - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的工具和辅助函数来执行具体的SQL操作,`sqltest.cc`利用 `sql_cntl.cc` 定义的结果处理和输出函数来验证正确性,并报告结果。`sqlcntl.txt`负责具体的SQL执行逻辑,为`sqltest.txt`提供支持。 +2. `sql_cntl.cc` 和 `case_cntl.cc` : + - `case_cntl.cc` 的函数和类读取测试用例、解析预期结果以及将实际结果与这些预期进行比较。 `sqltest.cc` 负责执行SQL语句的逻辑,并调用这些比较函数。 +3. `sql_test.cc` 和 `case_cntl.cc` : + - `case_cntl.cc` 负责读取和解析测试用例文件,和预期结果预期结果。这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试。 From 2ccc54597caabe01ba77a39e8049347c77246bd7 Mon Sep 17 00:00:00 2001 From: czy <81145281+czyrye@users.noreply.github.com> Date: Wed, 24 Jul 2024 22:06:44 +0100 Subject: [PATCH 70/81] translate to english --- StaticTest.md | 166 -------------------------------------------------- 1 file changed, 166 deletions(-) delete mode 100644 StaticTest.md diff --git a/StaticTest.md b/StaticTest.md deleted file mode 100644 index 8e2c606a..00000000 --- a/StaticTest.md +++ /dev/null @@ -1,166 +0,0 @@ -### 简介 - -该文档负责三个文件的说明,包括了代码功能、整体结构、与其他文件的关系和在项目中的作用等。 - - - -## case_cntl.cc - -该文件负责解析和处理测试文件中的SQL语句和事务ID,帮助读取和解析输入文件中的命令和数据,并将结果输出。 - -### 整体结构: - -头文件引入,名为`case_cntl.h` - -```c++ -#include "case_cntl.h" -``` - - - -全局对象:outputter`和`result_handler,分别用于输出和结果处理 - -```c++ -Outputter outputter; -ResultHandler result_handler; -``` - - - -### 函数声明和定义 - -- `CaseReader`类 - - 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 - - - `TxnIdAndSql`:用于获取特定行的事务ID和SQL语句,解析输入行,提取执行顺序ID、交易事务ID和SQL语句。 - - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 - - `Isolation`:提取字符串行中的隔离级别。 - - `InitTestSequenceAndTestResultSetList`:根据提供的测试路径和数据库类型,初始化测试序列和结果集(casecntl)。 - - `TestSequenceAndTestResultSetFromFile`:解析提供的测试文件以提取测试序列及其相应的预期结果。 - -- `ResulHandler`类 - - 主要负责比较SQL查询结果,并确定它们是否符合预期结果。以下是该类中关键函数的声明和定义: - - - `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 - - `IsTestExpectedResult`:用于将当前测试结果与一组预期测试结果进行比较。 - -- `Outputter`类 - - 主要负责将各种类型的输出写入文件,特别是与测试结果相关的输出。 - - - `WriteResultTotal`:该函数功能是将测试结果集的摘要信息写入指定的文件。它从每个 `TestResultSet` 对象中提取简化的测试结果,并将每个测试用例类型及其对应的结果写入到提供的输出文件中。 - - `PrintAndWriteTxnSqlResult`:该函数功能是将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 - - `WriteTestCaseTypeToFile`:该函数功能是将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 - -### 项目中的作用 - -该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作和测试结果的比较。通过详细的函数定义和类方法,实现了对SQL语句执行过程中的各种操作和错误处理。 - -#### - -## sqltest.cc - -该文件用于执行多线程SQL事务测试的,主要功能是通过多线程环境下执行多组SQL事务,并验证其结果。 - -### 整体结构 - -头文件和库引入 - -```c++ -#include "gflags/gflags.h" -#include "sqltest.h" -#include -#include -#include -#include -``` - -包括必要的头文件,`gflags/gflags.h`、`sqltest.h`、`thread`、`unistd.h`、`mutex`、`regex`。 - -命令行参数定义,使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。 - -全局变量 - -定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。 - -### 函数声明和定义 - -- **`try_lock_wait`**:尝试在给定超时时间内获取指定的互斥锁,用于多线程锁机制。 -- **`MultiThreadExecution`**:在多线程环境下执行一组SQL事务。该函数使用 `DBConnector` 类来执行SQL语句,并在事务执行过程中进行锁操作和错误处理。 -- **`JobExecutor::ExecTestSequence`**:执行一系列数据库测试事务,并将结果写入指定文件。该函数通过调用`MultiThreadExecution`函数来实现多线程事务执行。 - -### 项目中的作用 - -**数据库类型的支持**:支持多种数据库类型(如MySQL、PostgreSQL、Oracle等)的事务测试。 - -**多线程事务执行**:通过多线程机制执行事务,模拟高并发环境下的事务处理情况。 - -**事务隔离级别测试**:支持不同的事务隔离级别,验证数据库在不同隔离级别下的行为。 - -**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析和验证。 - - - -## sql_cntl.cc - -该文件用于执行SQL语句并处理数据库连接。文件中定义了一些工具函数和一个主要的数据库连接器类`DBConnector`。 - -### 整体结构 - -头文件和库引入 - -```c++ -#include "sql_cntl.h" -#include -#include -#include -#include -``` - -工具函数的定义:用于时间获取、字符串替换和类型转换等。 - -DBConnector类的定义:处理SQL语句执行、错误信息获取和结果集处理等。 - - - -### 对象声明和定义 - -- `DBConnector`类 - - 包含多个成员函数,用于处理SQL语句的执行和错误信息的获取。 - - - `ErrInfoWithStmt`:用于获取特定句柄的错误信息。 - - `SqlExecuteErr`:处理SQL执行的错误信息。 - - `ExecWriteSql`:执行写入类型的SQL语句。 - - `ExecReadSql2Int`:执行读取类型的SQL语句并处理结果。 - - - -### 函数声明和定义 - -- **`get_current_time`**:该函数用于获取当前时间。 -- **`replace`**:该函数用于进行字符串替换。 -- **`SQLCHARToStr`**:该函数用于将`SQLCHAR`类型转换为`std::string`类型。 -- **`DBConnector::ErrInfoWithStmt`**:该函数用于获取错误信息。 -- **`DBConnector::SqlExecuteErr`**:该函数用于处理SQL执行返回值。 -- **`DBConnector::ExecWriteSql`**:该函数用于执行写入SQL语句。 -- **`DBConnector::ExecReadSql2Int`**:该函数用于执行读取SQL语句并处理结果集。 - - - -### 项目中的作用 - -该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。 - - - -## 文件之间的关系 - -1. `sql_cntl.cc` 和 `sqltest.cc` : - - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的工具和辅助函数来执行具体的SQL操作,`sqltest.cc`利用 `sql_cntl.cc` 定义的结果处理和输出函数来验证正确性,并报告结果。`sqlcntl.txt`负责具体的SQL执行逻辑,为`sqltest.txt`提供支持。 -2. `sql_cntl.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 的函数和类读取测试用例、解析预期结果以及将实际结果与这些预期进行比较。 `sqltest.cc` 负责执行SQL语句的逻辑,并调用这些比较函数。 -3. `sql_test.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 负责读取和解析测试用例文件,和预期结果预期结果。这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试。 From edd361d1c75bac30eb7d7f2668f8605dc2461285 Mon Sep 17 00:00:00 2001 From: czyrye <81145281+czyrye@users.noreply.github.com> Date: Wed, 24 Jul 2024 22:17:04 +0100 Subject: [PATCH 71/81] translate to english --- src/dbtest/src/doc/StaticTest.md | 114 +++++++++++++++---------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src/dbtest/src/doc/StaticTest.md b/src/dbtest/src/doc/StaticTest.md index 729b3737..e0d6cfaa 100644 --- a/src/dbtest/src/doc/StaticTest.md +++ b/src/dbtest/src/doc/StaticTest.md @@ -1,102 +1,102 @@ -### 简介 +### Introduction -该文档负责三个文件的说明,包括了代码功能、整体结构、与其他文件的关系和在项目中的作用等。 +This document is for the description of three files, including code functionality, overall structure, relationships with other files, and their roles in the project. ## case_cntl.cc -该文件负责解析和处理测试文件中的SQL语句和事务ID,帮助读取和解析输入文件中的命令和数据,并将结果输出。 +This file is for parsing and handling SQL statements and transaction IDs in test files, assisting in reading and parsing commands and data from input files, and outputting results. -### 整体结构: +### Overall Structure: -首先引入头文件,接着定义全局对象:outputter`和`result_handler,分别用于输出和结果处理。再进行函数声明及定义,包括`CaseReader`类里处理SQL语句的执行和错误信息的获取函数,`ResulHandler`类里比较SQL查询结果多函数,`Outputter`类将与测试结果相关的输出写入指定的文件的函数。 +First, header files are included, followed by the definition of global objects: `outputter` and `result_handler`, which are used for outputting and result handling, respectively. Then, function declarations and definitions are provided, including functions in the `CaseReader` class for handling SQL statement execution and error information retrieval, functions in the `ResultHandler` class for comparing SQL query results, and functions in the `Outputter` class for writing outputs related to test results to specified files. -#### 函数声明和定义 +#### Function Declarations and Definitions -- `CaseReader`类 - - `TxnIdAndSql`:用于获取特定行的事务ID和SQL语句,解析输入行,提取执行顺序ID、交易事务ID和SQL语句。 - - `SqlIdAndResult`:解析输入行,提取 SQL ID 及其预期结果 - - `Isolation`:提取字符串行中的隔离级别。 - - `InitTestSequenceAndTestResultSetList`:根据提供的测试路径和数据库类型,初始化测试序列和结果集(casecntl)。 - - `TestSequenceAndTestResultSetFromFile`:解析提供的测试文件以提取测试序列及其相应的预期结果。 - -- `ResulHandler`类 -- `IsSqlExpectedResult`:用于将当前 SQL 结果与预期 SQL 结果进行比较。 - - `IsTestExpectedResult`:用于将当前测试结果与一组预期测试结果进行比较。 +- **`CaseReader`** Class + - `TxnIdAndSql`: Used to get the transaction ID and SQL statement of a specific line, parse the input line, and extract the execution order ID, transaction ID, and SQL statement. + - `SqlIdAndResult`: Parses the input line and extracts the SQL ID and its expected result. + - `Isolation`: Extracts the isolation level from a string line. + - `InitTestSequenceAndTestResultSetList`: Initializes the test sequence and result set (casecntl) based on the provided test path and database type. + - `TestSequenceAndTestResultSetFromFile`: Parses the provided test file to extract the test sequence and their corresponding expected results. -- `Outputter`类 -- `WriteResultTotal`:将测试结果集的摘要信息写入指定的文件。 - - `PrintAndWriteTxnSqlResult`:将当前 SQL 结果与一组预期结果进行比较,并将比较结果输出到控制台和文件。 -- `WriteTestCaseTypeToFile`:将给定的结果类型附加写入到指定的文件中,并在结果类型前添加 "Test Result:" 前缀进行说明。 +- **`ResultHandler`** Class + - `IsSqlExpectedResult`: Used to compare the current SQL result with the expected SQL result. + - `IsTestExpectedResult`: Used to compare the current test result with a set of expected test results. -### 项目中的作用 +- **`Outputter`** Class + - `WriteResultTotal`: Writes the summary information of the test result set to a specified file. + - `PrintAndWriteTxnSqlResult`: Compares the current SQL result with a set of expected results and outputs the comparison result to the console and file. + - `WriteTestCaseTypeToFile`: Appends the given result type to a specified file, with the prefix "Test Result:" for explanation. + +### Role in the Project + +The overall structure and content of this file revolve around the parsing and execution of SQL statements, providing a series of utility functions and class methods to handle SQL-related operations and compare test results. -该文件的整体结构和内容围绕SQL语句的解析和执行,提供了一系列工具函数和类方法来处理SQL相关的操作,比较测试结果。 -#### ## sqltest.cc -该文件用于执行多线程SQL事务测试的,主要功能是通过多线程环境下执行多组SQL事务,并验证其结果。 +This file is for executing multi-threaded SQL transaction tests, primarily through executing multiple sets of SQL transactions in a multi-threaded environment and verifying their results. -### 整体结构 +### Overall Structure -首先进行头文件和库引入,接着使用gflags库定义了一系列命令行参数,如数据库类型、用户名、密码、数据库名、连接池大小、事务隔离级别、测试用例目录、超时时间等。定义了一个全局的互斥锁向量`mutex_txn`,用于管理不同事务的锁。再定义函数。 +First, header files and libraries are included, followed by the definition of a series of command-line parameters using the gflags library, such as database type, username, password, database name, connection pool size, transaction isolation level, test case directory, timeout, etc. A global mutex vector `mutex_txn` is defined to manage locks for different transactions. Then, functions are defined. -#### 函数声明和定义 +#### Function Declarations and Definitions -- **`try_lock_wait`**:尝试在给定超时时间内获取指定的互斥锁,用于多线程锁机制。 -- **`MultiThreadExecution`**:在多线程环境下执行一组SQL事务。该函数使用 `DBConnector` 类来执行SQL语句,并在事务执行过程中进行锁操作和错误处理。 -- **`JobExecutor::ExecTestSequence`**:执行一系列数据库测试事务,并将结果写入指定文件。该函数通过调用`MultiThreadExecution`函数来实现多线程事务执行。 +- **`try_lock_wait`**: Attempts to acquire the specified mutex within a given timeout, used for multi-threaded lock mechanisms. +- **`MultiThreadExecution`**: Executes a set of SQL transactions in a multi-threaded environment. This function uses the `DBConnector` class to execute SQL statements, and performs lock operations and error handling during transaction execution. +- **`JobExecutor::ExecTestSequence`**: Executes a series of database test transactions and writes the results to a specified file. This function implements multi-threaded transaction execution by calling the `MultiThreadExecution` function. -### 项目中的作用 +### Role in the Project -**数据库类型的支持**:支持多种数据库类型(如MySQL、PostgreSQL、Oracle等)的事务测试。 +**Support for Multiple Database Types**: Supports transaction testing for multiple database types (such as MySQL, PostgreSQL, Oracle, etc.). -**多线程事务执行**:通过多线程机制执行事务,模拟高并发环境下的事务处理情况。 +**Multi-threaded Transaction Execution**: Executes transactions through a multi-threaded mechanism, simulating transaction processing in a high-concurrency environment. -**事务隔离级别测试**:支持不同的事务隔离级别,验证数据库在不同隔离级别下的行为。 +**Transaction Isolation Level Testing**: Supports different transaction isolation levels, verifying the database's behavior under different isolation levels. -**结果验证与输出**:执行事务后,将测试结果写入指定的输出文件中,以供后续分析验证。 +**Result Verification and Output**: After executing transactions, writes the test results to a specified output file for subsequent analysis and verification. ## sql_cntl.cc -该文件用于执行SQL语句并处理数据库连接。 +This file is for executing SQL statements and handling database connections. + +### Overall Structure -### 整体结构 +First, header files and libraries are defined, followed by the definition of utility functions for time retrieval, string replacement, type conversion, etc. Then, function declarations and definitions are provided, including functions in the `DBConnector` class for handling SQL statement execution, time retrieval, string replacement, and type conversion. -首先定义头文件和库引入,接着定义工具函数,用于时间获取、字符串替换和类型转换等。再进行函数声明及定义,包括`DBConnector`类处理SQL语句的执行的函数,获取时间,替换字符串等功能的函数。 +#### Function Declarations and Definitions -#### 函数声明和定义 +- **`DBConnector`** Class + - `ErrInfoWithStmt`: Used to get error information for a specific handle. + - `SqlExecuteErr`: Handles error information for SQL execution. + - `ExecWriteSql`: Executes write-type SQL statements. + - `ExecReadSql2Int`: Executes read-type SQL statements and handles results. -- `DBConnector`类 - - `ErrInfoWithStmt`:用于获取特定句柄的错误信息。 - - `SqlExecuteErr`:处理SQL执行的错误信息。 - - `ExecWriteSql`:执行写入类型的SQL语句。 - - `ExecReadSql2Int`:执行读取类型的SQL语句并处理结果。 +- **`get_current_time`**: Used to get the current time. -- **`get_current_time`**:用于获取当前时间。 +- **`replace`**: Performs string replacement. -- **`replace`**:进行字符串替换。 +- **`SQLCHARToStr`**: Converts `SQLCHAR` type to `std::string` type. -- **`SQLCHARToStr`**:用于将`SQLCHAR`类型转换为`std::string`类型。 +### Role in the Project - +This file is for interacting with the database, executing SQL statements, and handling errors and logging during execution. -### 项目中的作用 -该文件在整个项目中主要负责与数据库的交互,执行SQL语句,并在执行过程中进行错误处理和日志记录。 +## Relationship Between Files +1. `sql_cntl.cc` and `sqltest.cc`: + - `sqltest.cc` relies on the tools and helper functions in `sql_cntl.cc` to execute specific SQL operations. `sqltest.cc` uses the result handling and output functions defined in `sql_cntl.cc` to verify correctness and report results. `sql_cntl.cc` is responsible for the specific SQL execution logic, providing support for `sqltest.cc`. -## 文件之间的关系 +2. `sql_cntl.cc` and `case_cntl.cc`: + - The functions and classes in `case_cntl.cc` read test cases, parse expected results, and compare actual results with these expectations. `sqltest.cc` handles the logic of executing SQL statements and calls these comparison functions. -1. `sql_cntl.cc` 和 `sqltest.cc` : - - `sqltest.cc` 依赖于 `sql_cntl.cc` 中的工具和辅助函数来执行具体的SQL操作,`sqltest.cc`利用 `sql_cntl.cc` 定义的结果处理和输出函数来验证正确性,并报告结果。`sqlcntl.txt`负责具体的SQL执行逻辑,为`sqltest.txt`提供支持。 -2. `sql_cntl.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 的函数和类读取测试用例、解析预期结果以及将实际结果与这些预期进行比较。 `sqltest.cc` 负责执行SQL语句的逻辑,并调用这些比较函数。 -3. `sql_test.cc` 和 `case_cntl.cc` : - - `case_cntl.cc` 负责读取和解析测试用例文件,和预期结果预期结果。这些解析后的数据会被传递给 `sqltest.cc`,然后由 `sqltest.cc` 进行多线程的事务执行测试。 +3. `sql_test.cc` and `case_cntl.cc`: + - `case_cntl.cc` is responsible for reading and parsing test case files and expected results. This parsed data is passed to `sqltest.cc`, which then performs multi-threaded transaction execution tests. From ccac726995f0844f0e13420c7bba062147a8fe2b Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Thu, 25 Jul 2024 16:51:20 +0800 Subject: [PATCH 72/81] add doc to describes three python files about dynamic testing --- .../src/doc/dynamic_test_doc_python_en.md | 144 +++++++++++++++++ .../src/doc/dynamic_test_doc_python_zh.md | 146 ++++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100644 src/dbtest/src/doc/dynamic_test_doc_python_en.md create mode 100644 src/dbtest/src/doc/dynamic_test_doc_python_zh.md diff --git a/src/dbtest/src/doc/dynamic_test_doc_python_en.md b/src/dbtest/src/doc/dynamic_test_doc_python_en.md new file mode 100644 index 00000000..54a2fbd9 --- /dev/null +++ b/src/dbtest/src/doc/dynamic_test_doc_python_en.md @@ -0,0 +1,144 @@ +Sure! Here's the translation of your document into English: + +--- + +## `random_do_list.py` + +### File Overview + +`random_do_list.py` randomly generates a series of database operations based on a predefined set of operations while ensuring that the generated operation list contains no illegal patterns. This script generates the `do_test_list.txt` file, which contains different test patterns, i.e., specific test file lists. + +`op_set = ["P", "R", "W", "I"]` # operations involved in the case + +The `op_set` defines four types of database transaction operators: + +* **P (Predicate)**: Predicate operation used to describe conditions in queries. +* **R (Read)**: Read operation used to retrieve data from the database. +* **W (Write)**: Write operation used to insert or update data in the database. +* **I (Insert)**: Insert operation used to insert new data into the database. + +In `mda_generate.py`, there is a function called `execute_sql` that defines the SQL statements it supports, including seven types of SQL operations, as detailed in the function comment. + +```python +""" +The supported SQL operations include: +- Write (W) +- Read (R) +- Predicate (P) +- Insert (I) +- Delete (D) +- Abort (A) +- Commit (C) +""" +``` + +### Variable Definitions + +- `op_set`: Defines the set of operation types used in the script, including read ("R"), write ("W"), insert ("I"), and predicate ("P") operations. +- `illegal_op_set`: Defines the set of disallowed operation patterns because these patterns are either impossible or meaningless in actual database transactions. + +### Function Definitions + +- **dfs(data_count, total_num, target_num)**: Uses depth-first search to determine which variables need to be operated on twice to meet the total number of operations required in the test sequence. +- **dfs1(data_count, res, total_num)**: Recursive function that generates test cases based on the current `data_count`. It tries different operation combinations to create test sequences. + +--- + +## `mda_generate.py` + +### File Overview + +`mda_generate.py` reads the required operation patterns (e.g., `RW-RR`, etc.) from the `do_test_list.txt` file and generates a test case file for each pattern. + +Each test case is formatted as `sql_id-txn_id-sql`, where `sql_id` is the incrementing identifier for the statement, `txn_id` identifies the transaction executing the statement, and `sql` is the specific SQL statement. + +The process of generating test case files in `mda_generate.py` can be divided into three stages: + +* **Initialization Stage**: Generates the header description of the test case file, initializes tables, and inserts test data. +* **Execution Stage**: Executes transactions and validation SQL statements. The main goal is to automatically generate database test cases for different operation patterns. +* **Commit Stage**: Generates commit statements for each transaction and writes them to the corresponding test case files. + +#### Initialization Stage + +First, it calls `write_description` to write the description of the test cases. Then, it calls `init_table` to initialize the table structure. If it is a distributed test and the database is either `tdsql` or `crdb`, it creates a table for each transaction. + +Then it calls `insert_data` to insert the data used for subsequent transactions. `insert_data` generates SQL insert statements based on provided parameters and writes these statements to a specified file. This function uses an array named `exist` to manage the presence of data elements to avoid duplicate inserts, while updating the SQL operation count. + +#### Execution Stage + +The main method used in this stage is `execute_txn`. This function generates SQL statements for executing operations based on the operation patterns in `do_test_list.txt`. When encountering specific operation patterns, this function reorders the operation statements to resolve conflicts as much as possible. + +In `execute_txn`, there are two critical structures: `data_op_list` for storing data operation lists and `wait_op_list` for storing operations that need to be delayed. When an operation needs to be deferred, it is placed in `wait_op_list`. + +#### Commit Stage + +The commit stage generates commit statements for each transaction and writes them to the corresponding test case files. + +### Class Definitions + +- **OptionException**: Custom exception class. +- **Txn**: Transaction class, containing start and end timestamps. +- **Operation**: Operation class representing a database operation, including operation type and transaction number. +- **Wait_Operation**: Wait operation class extending the Operation class, adding an operation number. + +### Function Definitions + +- **init_table(file_name, sql_count, txn_count, table_num, db_type, test_type)**: Initializes database tables based on database type and test type, creating table structures and writing SQL statements to a file. +- **check_concurrency(txn_num1, txn_num2, txn)**: Checks if two transactions are concurrent. +- **check_exist_op(txn, data_op_list, op, op_num, txn_count)**: Checks if a specific type of operation exists in the transaction and if it is concurrent. +- **execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op, data_num, txn, data_value, data_op_list)**: Executes SQL operations such as Write (W), Read (R), Insert (I), Delete (D), Abort (A), and Commit (C). +- **insert_data(...)**: Inserts data into the table and handles possible exceptions, such as data already existing. +- **delete_data(...)**: Deletes data from the table and records the delete operation. +- **write_data(...)**: Writes data to the table, typically incrementing data values by 1 and recording the write operation. +- **read_data(...)**: Reads data from the table and records the read operation. +- **read_data_predicate(...)**: Reads data from the table using a range condition. +- **abort_txn(...)**: Aborts a transaction and writes rollback SQL statements. +- **commit_txn(...)**: Commits a transaction and writes commit SQL statements. +- **execute_check(file_name, sql_count, txn_count, data_num, table_num)**: Performs consistency checks for transactions to validate data. +- **get_last_op(ops, pos)**: Retrieves the last operation before a given position in the operation list. +- **execute_first(...)** and **execute_second(...)**: Handle the first and second operations of Partial Order Pairs (POP), respectively. +- **execute_txn(...)**: Executes transactions, considering the operation order to resolve conflicts. +- **write_description(file_name, txn_num, op_num, data_num)**: Writes the description of test cases to a file. + +--- + +## `mda_detect.py` + +### File Overview + +`mda_detect.py` is primarily responsible for analyzing the results generated by the testing framework (`sqltest_v2`), detecting cyclic dependencies in database transaction concurrency control, and determining whether the concurrent transactions are serializable. The theoretical principle is that a scheduling sequence is conflict-serializable if and only if its precedence graph is acyclic. + +> *For mathematical proofs on this, interested readers can refer to: [Proof of correctness of the precedence graph test](http://www.cs.emory.edu/~cheung/Courses/554/Syllabus/7-serializability/graph-conflict2.html)* + +#### Main Logic + +`sqltest_v2` generates a schedule result file for each test case file. `mda_detect.py` reads each file, recording transaction operations, edges, in-degrees and access statuses. + +* If an error is detected during reading, it outputs the error result and skips further steps. +* If no error message is found, it removes unfinished operations, builds the dependency graph, and calculates in-degrees. + + * If not marked as `go_end`, it checks for cycles in the graph. + * If a cycle exists, it outputs the cycle result and calls the `dfs` method for depth-first search to record the path. + * If no exsited cycle, it outputs the result and prints the path. + +### Class Definitions + +- **Edge**: Represents an edge, containing type and output. +- **Operation**: Represents an operation, including operation type, transaction number, operation time, and value. +- **Txn**: Represents a transaction, including start and end timestamps. + +### Function Definitions + +- **get_total(lines)**: Calculates the maximum number of variables in a query. +- **find_data(query, target)**: Extracts data from the query. +- **set_finish_time(op_time, data_op_list, query, txn, version_list)**: Sets the end time of an operation and updates the transaction and version lists. +- **check_concurrency(data1, data2, txn)**: Checks if two transactions are concurrent. +- **get_edge_type(data1, data2, txn)**: Determines the edge type between two operations. +- **build_graph(data_op_list, indegree, edge, txn)**: Builds a directed graph representing the concurrency relationships of operations. +- **insert_edge(data1, data2, indegree, edge, txn)**: Inserts an edge into the directed graph. +- **init_record(query, version_list)**: Initializes records in the version list based on the query. +- **readVersion_record(query, op_time, data_op_list, version_list)**: Reads versioned records and updates operations. +- **read_record(op_time, txn_num, total_num, txn, data_op_list)**: Reads records and updates data operations. +- **write_record(op_time, txn_num, txn, data_op_list)**: Writes records and updates data operations. +- **delete_record(op_time, txn_num, txn, data_op_list)**: Deletes records and updates data operations. +- **insert_record(op_time, txn_num, txn, data_op_list)**: Inserts records diff --git a/src/dbtest/src/doc/dynamic_test_doc_python_zh.md b/src/dbtest/src/doc/dynamic_test_doc_python_zh.md new file mode 100644 index 00000000..1fc3817f --- /dev/null +++ b/src/dbtest/src/doc/dynamic_test_doc_python_zh.md @@ -0,0 +1,146 @@ +## random_do_list.py + +### 文件概述 + +`random_do_list.py` 基于预定义的操作集随机生成一系列数据库操作,此外还要确保 生成的操作列表不含任何非法模式。此脚本文件会生成 `do_test_list.txt` 文件,该文件包含不同的测试模式,即具体测试文件列表。 + +op_set = ["P", "R", "W", "I"] # operations involved in the case + +op_set 定义了四种数据库事务操作符。分别是: + +* **P (Predicate)**: 谓词操作,用于描述查询中的条件。 +* **R (Read)**: 读取操作,用于从数据库中读取数据。 +* **W (Write)**: 写入操作,用于向数据库中写入或更新数据。 +* **I (Insert)**: 插入操作,用于将新数据插入到数据库中。 + +在 mda_generate.py 中定义了一个 execute_sql 函数,用来定义执行的语句,它支持的 7 种 SQL 操作,具体可见函数注释。 + +```python +""" +The supported SQL operations include: +- Write (W) +- Read (R) +- Predicate (P) +- Insert (I) +- Delete (D) +- Abort (A) +- Commit (C) +""" +``` + +### 变量定义 + +- `op_set`:定义了脚本中使用的操作类型集合,包含读("R")、写("W")、插入("I")、谓词("P")等操作。 +- `illegal_op_set`:定义了不允许出现的操作模式集合,因为这些模式在实际数据库事务中不可能出现或没有意义。 + +### 函数定义 + +- **dfs(data_count, total_num, target_num)**:使用深度优先搜索算法来决定哪些变量需要被操作两次,以满足测试序列中的操作总数要求。 +- **dfs1(data_count, res, total_num)**:递归函数,根据当前的 `data_count`生成测试用例。它尝试不同的操作组合来创建测试序列。 + +## mda_generate.py + +### 文件概述 + +`mda_generate.py` 从 `do_test_list.txt` 文件中读取所需的操作模式(例如 `RW-RR` 等), 针对每种操作模式生成一个测试用例文件。 + +每个测试用例的格式为 `sql_id-txn_id-sql`,`sql_id` 是语句的递增表示,`txn_id` 标识执行语句的事务。 `sql` 为具体的语句。 + +`mda_generate.py` 生成测试用例文件的过程大致可以分为三个阶段: + +* 初始化阶段: 生成测试用例文件的表头描述、初始化表和插入测试所需数据。 +* 执行阶段:执行事务和验证的 `SQL` 语句。主要目的是为不同的操作模式自动生成数据库测试用例。 +* 提交阶段:提交所有事务。 + +`mda_generate.py` 针对上述的三个阶段分别生成测试用例写入到对应的测试用例文件里面。 + +#### 初始化阶段 + +首先会调用 write_description 编写测试用例的描述。之后会调用 init_table 初始化表结构。这里如果是分布式测试并且数据库是 tdsql 或者是 crdb。则会针对每个事务都创建一个表。 + +之后调用 insert_data 插入之后执行事务所使用的数据。insert_data 会根据提供的参数生成SQL插入语句,并将该语句写入指定的文件。该函数会使用名为 exist 的数组来管理数据元素的存在,以防止重复插入,同时他会更新 SQL 操作计数。 + +#### 执行阶段 + +执行阶段主要调用的方法是 execute_txn。这个函数会根据 `do_test_list.txt`中的操作模式生成执行操作事务的SQL语句,当遇到特定的操作模式时,该函数会重新排序操作语句以尽量解决冲突。 + +在 execute_txn 中有两个很关键的结构体。一个是 `data_op_list` 用来存储数据操作的列表。一个是 `wait_op_list` 用来存储需要等待执行的操作列表。当有操作需要延时执行的时候,这个操作就会被放入到 `wait_op_list `里面。 + +#### 提交阶段 + +提交阶段会针对每个事务生成提交语句,并将他们写入到指定的测试用例文件里。 + +### 类定义 + +- **OptionException**: 自定义异常类。 +- **Txn**: 事务类,包含开始和结束时间戳。 +- **Operation**: 操作类,表示一个数据库操作,包含操作类型和事务编号。 +- **Wait_Operation**: 等待操作类,扩展了Operation类,添加了操作编号。 + +### 函数定义 + +- **init_table(file_name, sql_count, txn_count, table_num, db_type, test_type)**: 初始化数据库表,根据数据库类型和测试类型创建表结构,并写入SQL语句到文件。 +- **check_concurrency(txn_num1, txn_num2, txn)**: 检查两个事务是否并发。 +- **check_exist_op(txn, data_op_list, op, op_num, txn_count)**: 检查特定类型的操作是否存在于事务中,并且是并发的。 +- **execute_sql(IsPredicate, file_name, sql_count, txn_count, op_num, op, data_num, txn, data_value, data_op_list)**: 执行SQL操作,如写入(W)、读取(R)、插入(I)、删除(D)、中止(A)和提交(C)操作。 +- **insert_data(...)**: 插入数据到表中,并处理可能的异常情况,例如数据已存在。 +- **delete_data(...)**: 从表中删除数据,并记录删除操作。 +- **write_data(...)**: 写入数据到表中,通常将数据值增加1,并记录写入操作。 +- **read_data(...)**: 从表中读取数据,并记录读取操作。 +- **read_data_predicate(...)**: 使用范围条件从表中读取数据。 +- **abort_txn(...)**: 中止事务,并写入回滚SQL语句。 +- **commit_txn(...)**: 提交事务,并写入提交SQL语句。 +- **execute_check(file_name, sql_count, txn_count, data_num, table_num)**: 执行检查事务,用于验证数据的一致性。 +- **get_last_op(ops, pos)**: 获取操作列表中给定位置前的最后一个操作。 +- **execute_first(...)** 和 **execute_second(...)**: 分别处理Partial Order Pair (POP)的第一次和第二次操作。 +- **execute_txn(...)**: 执行事务,考虑操作顺序以解决冲突。 +- **write_description(file_name, txn_num, op_num, data_num)**: 向文件写入测试用例的描述。 + +## mda_detect.py + +### 文件概述 + +mda_detect.py 主要是对测试框架(sqltest_v2) 跑出来的结果进行分析,检测数据库事务并发控制中的循环依赖。进而本次并发事务是否满足可串行化。理论原理就是一个调度序列,是冲突可序列化的,当且仅当其依赖图是无环的。 + +> *关于这一点的数学证明,这里不展开,感兴趣的可以自行查看:* [Proof of correctness of the precedence graph test](http://www.cs.emory.edu/~cheung/Courses/554/Syllabus/7-serializability/graph-conflict2.html) + +#### 主要逻辑 + +sqltest_v2 针对每个测试用例文件都会生成一个并发调度的结果文件。mda_detect.py 负责对于每个文件读取,并记录事务操作、边、入度、访问状态等。 + +* 如果读取中间检查到了错误信息。则输出错误结果并跳过后续步骤。 +* 如果没有错误消息,则删除未完成的操作,构建依赖图并计算入度。 + + * 如果未标记为 `go_end`,则检查图中是否存在循环。 + * 如果存在循环,输出循环结果并调用 `dfs` 方法进行深度优先搜索,记录路径。 + * 如果不存在循环,输出结果并打印路径 + +### 类定义 + +- **Edge**: 表示一个边,包含类型和输出。 +- **Operation**: 表示一个操作,包含操作类型、事务编号、操作时间和值。 +- **Txn**: 表示一个事务,包含开始时间和结束时间。 + +### 函数定义 + +- **get_total(lines)**: 计算查询中的最大变量数。 +- **find_data(query, target)**: 从查询中提取数据。 +- **set_finish_time(op_time, data_op_list, query, txn, version_list)**: 设置操作的结束时间,并更新事务列表和版本列表。 +- **check_concurrency(data1, data2, txn)**: 检查两个事务是否并发。 +- **get_edge_type(data1, data2, txn)**: 确定两个操作之间的边类型。 +- **build_graph(data_op_list, indegree, edge, txn)**: 构建表示操作并发关系的有向图。 +- **insert_edge(data1, data2, indegree, edge, txn)**: 向有向图中插入边。 +- **init_record(query, version_list)**: 根据查询初始化版本列表中的记录。 +- **readVersion_record(query, op_time, data_op_list, version_list)**: 读取版本化记录并更新操作。 +- **read_record(op_time, txn_num, total_num, txn, data_op_list)**: 读取记录并更新数据操作。 +- **write_record(op_time, txn_num, txn, data_op_list)**: 写入记录并更新数据操作。 +- **delete_record(op_time, txn_num, txn, data_op_list)**: 删除记录并更新数据操作。 +- **insert_record(op_time, txn_num, txn, data_op_list)**: 插入记录并更新数据操作。 +- **end_record(op_time, txn_num, txn)**: 设置事务的结束时间戳。 +- **operation_record(total_num, query, txn, data_op_list, version_list)**: 记录和处理数据库操作。 +- **remove_unfinished_operation(data_op_list)**: 移除未完成的操作。 +- **check_cycle(edge, indegree, total)**: 使用拓扑排序检查有向图中的循环。 +- **dfs(result_folder, ts_now, now, type)**: 执行深度优先搜索以查找并打印有向图中的循环。 +- **print_path(result_folder, ts_now, edge)**: 打印有向图中的路径。 +- **output_result(file, result_folder, ts_now, IsCyclic)**: 将循环检测结果输出到结果文件。 +- **print_error(result_folder, ts_now, error_message)**: 将错误消息打印到结果文件。 From 79056293f76d560198ada130505cfd3771780819 Mon Sep 17 00:00:00 2001 From: Kaijie Gu <2459548460@qq.com> Date: Mon, 29 Jul 2024 10:42:30 +0800 Subject: [PATCH 73/81] modify english doc --- src/dbtest/src/doc/dynamic_test_doc_python_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbtest/src/doc/dynamic_test_doc_python_en.md b/src/dbtest/src/doc/dynamic_test_doc_python_en.md index 54a2fbd9..fe9adeb3 100644 --- a/src/dbtest/src/doc/dynamic_test_doc_python_en.md +++ b/src/dbtest/src/doc/dynamic_test_doc_python_en.md @@ -6,7 +6,7 @@ Sure! Here's the translation of your document into English: ### File Overview -`random_do_list.py` randomly generates a series of database operations based on a predefined set of operations while ensuring that the generated operation list contains no illegal patterns. This script generates the `do_test_list.txt` file, which contains different test patterns, i.e., specific test file lists. +`random_do_list.py` randomly generates a series of database operations based on a predefined set of operations while ensuring that the generated operation list contains no illegal patterns. This script generates the `do_test_list.txt` file, which contains different test patterns. `op_set = ["P", "R", "W", "I"]` # operations involved in the case From 20504f464e5185806e981509a1fa492c7657246f Mon Sep 17 00:00:00 2001 From: Koschei Date: Thu, 5 Sep 2024 21:12:43 +0800 Subject: [PATCH 74/81] feat: set the default value of sql_interval to 2000ms --- src/dbtest/src/sqltest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 1b0388a0..644c9a9e 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -24,7 +24,7 @@ DEFINE_int32(conn_pool_size, 6, "db_conn pool size"); DEFINE_string(isolation, "serializable", "transation isolation level: read-uncommitted read-committed repeatable-read serializable"); DEFINE_string(case_dir, "mysql", "test case dir name"); DEFINE_string(timeout, "20", "timeout"); -DEFINE_int32(sql_interval, 0, "sleep for the specified interval between SQL executions"); +DEFINE_int32(sql_interval, 2000, "sleep for the specified interval between SQL executions"); // std::vector mutex_txn(5); // same as conn_pool_size std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size From d3755849249229028ea7851ff864c5fafa6572ea Mon Sep 17 00:00:00 2001 From: Yuxing Chen Date: Mon, 16 Jun 2025 15:02:49 +0800 Subject: [PATCH 75/81] Update README.md update papers --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dfef084e..ee81166d 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,10 @@ Paper from the project: - VLDB'24 DEMO: [IsoVista: Black-box Checking Database Isolation Guarantees](https://github.com/hengxin/IsoVista) +- ICDE'25: [Boosting End-to-End Database Isolation Checking via Mini-Transactions](https://www.computer.org/csdl/proceedings-article/icde/2025/360300d998/26FZCeQ3uJW) + +- ICDE'25: [Online Timestamp-Based Transactional Isolation Checking of Database Systems](https://www.computer.org/csdl/proceedings-article/icde/2025/360300d738/26FZC0ImYsU) + ## Usage Provide two installation methods for the project environment: **Docker** and **Compilation**, and you can freely choose the installation method. @@ -110,12 +114,6 @@ isql pg -v ``` Once the connected information showed, we are able to run our code to test designed anomaly schedules. -The anomaly test cases are Write-read Skew and Write-read Skew Committed, the schedules are as follows: - -Write-read Skew : - -Write-read Skew Committed : - Under "src/dbtest/" folder, add rat_dda_write_read_skew and rat_dda_write_read_skew_committed to "do_test_list.txt". Add the following to "auto_test_all.sh" for running PostgreSQL with four isolation levels: ``` From bf5a50cebfa1039ed0827201a3e779c3ef751b24 Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Thu, 17 Jul 2025 02:27:26 +0800 Subject: [PATCH 76/81] doc: add file list and directory structure --- src/dbtest/src/doc/dynamic_test_analysis.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/dbtest/src/doc/dynamic_test_analysis.md diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md new file mode 100644 index 00000000..934cf2ba --- /dev/null +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -0,0 +1,11 @@ +# 3TS-COO 动态测试代码阅读与分析文档 +1 +1.文件列表与目录结构 +|文件名|路径|说明| +case_cntl_v2.cc|src/dbtest/src/case_cntl_v2.cc|测试用例控制逻辑| +sqltest_v2.cc |src/dbtest/src/sqltest_v2.cc |动态SQL测试主流程| +sql_cntl_v2.cc |src/dbtest/src/sql_cntl_v2.cc |数据库链接与执行控制| +其他辅助文件: +- case_cntl.cc / sql_cntl.cc /sqltest.cc:旧版实现(兼容保留) +- common.*:公共工具与数据结构 +- *.py:MongoDB与MDA相关脚本 From 54bce1497344d7cdeceba2d5cee9f92e1d2de7f5 Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Thu, 17 Jul 2025 16:29:49 +0800 Subject: [PATCH 77/81] doc: add sqltest_v2.cc overview (main + thread loop) --- src/dbtest/src/doc/dynamic_test_analysis.md | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md index 934cf2ba..47d697ff 100644 --- a/src/dbtest/src/doc/dynamic_test_analysis.md +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -1,5 +1,11 @@ # 3TS-COO 动态测试代码阅读与分析文档 1 + +## 1. 文件列表与目录结构 +- case_cntl_v2.cc +- sqltest_v2.cc +- sql_cntl_v2.cc +位于 `src/dbtest/src/` 目录下。 1.文件列表与目录结构 |文件名|路径|说明| case_cntl_v2.cc|src/dbtest/src/case_cntl_v2.cc|测试用例控制逻辑| @@ -9,3 +15,63 @@ sql_cntl_v2.cc |src/dbtest/src/sql_cntl_v2.cc |数据库链接与执行控制| - case_cntl.cc / sql_cntl.cc /sqltest.cc:旧版实现(兼容保留) - common.*:公共工具与数据结构 - *.py:MongoDB与MDA相关脚本 + + +cat >> doc/dynamic_test_analysis.md <<'EOF' + +## 2. sqltest_v2.cc 功能概述 +- 入口函数:`int main(int argc, char **argv)` 位于第 368 行 +- 线程模型: + 1. 解析命令行参数(测试路径、数据库类型、并发线程数等) + 2. 初始化日志 & 全局数据库连接池 + 3. 为每个测试用例启动一个 `std::thread`(`ThreadEntry`) +- 核心测试循环(`RunTestLoop`): + 1. 通过 `CaseReader` 读取 `*.txt` 测试用例 + 2. 调用 `sql_cntl_v2` 接口执行 SQL + 3. 收集结果 → 与预期比对 → 写日志 → 统计异常 +- 异常处理:连接失败、SQL 语法错误、超时均记录到 `logs/` 目录 + +**调用链流程图** +sqltest_v2.cc::main() +├─ ParseCLI() +├─ InitLogger() +├─ InitDBConnection() +└─ StartThreads() +└─ ThreadEntry() +└─ RunTestLoop() +├─ ReadTestCase() +├─ ExecuteSQL() +├─ CollectResult() +└─ RecordLog() +EOF + +## 2. case_cntl_v2.cc 功能概述 +- 无 `main()`,纯工具类实现。 +- 核心类: + - `CaseReader`: + - `TxnIdAndSql()` —— 从单行文本提取 “执行序号-事务ID-SQL”。 + - `SqlIdAndResult()` —— 提取 “SQL-ID-预期结果”。 + - `Isolation()` —— 提取隔离级别。 + - `TestSequenceAndTestResultSetFromFile()` —— 读取整个测试文件,生成 `TestSequence` 与 `TestResultSet`。 + - `InitTestSequenceAndTestResultSetList()` —— 批量读取 `do_test_list.txt` 中列出的所有测试用例。 + - `ResultHandler`: + - `IsSqlExpectedResult()` —— 单条 SQL 结果比对。 + - `IsTestExpectedResult()`—— 整个测试集结果比对。 + - `Outputter`: + - `WriteResultTotal()`、`PrintAndWriteTxnSqlResult()` 等 —— 结果输出与日志落盘。 + +- 与旧版差异: + - 新版不再读取预期结果(动态测试用例不给出结果)。 + - 支持参数化表个数提取(正则解析 "Parameters=xx")。 + +- 调用链(伪代码) +sqltest_v2.cc::main() +└─ CaseReader::InitTestSequenceAndTestResultSetList() +├─ for each test_case in do_test_list.txt +│ └─ CaseReader::TestSequenceAndTestResultSetFromFile() +│ ├─ TxnIdAndSql() +│ ├─ SqlIdAndResult() +│ └─ Isolation() +└─ ResultHandler::IsTestExpectedResult() +├─ IsSqlExpectedResult() +└─ Outputter::WriteResultTotal() From 28253136ad1eb0d92c9e16e1c0ac84e50aaa4baf Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Thu, 17 Jul 2025 17:31:35 +0800 Subject: [PATCH 78/81] doc: add sql_cntl_v2.cc overview with exact line numbers --- src/dbtest/src/.vscode/c_cpp_properties.json | 38 ++++++++++++++++++++ src/dbtest/src/.vscode/settings.json | 3 ++ src/dbtest/src/doc/dynamic_test_analysis.md | 14 +++++++- src/dbtest/src/doc/dynamic_test_analysis.ms | 0 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/dbtest/src/.vscode/c_cpp_properties.json create mode 100644 src/dbtest/src/.vscode/settings.json create mode 100644 src/dbtest/src/doc/dynamic_test_analysis.ms diff --git a/src/dbtest/src/.vscode/c_cpp_properties.json b/src/dbtest/src/.vscode/c_cpp_properties.json new file mode 100644 index 00000000..e1b96491 --- /dev/null +++ b/src/dbtest/src/.vscode/c_cpp_properties.json @@ -0,0 +1,38 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ] + }, + { + "name": "includePath", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ] + }, + { + "name": "gflags/gflags.h", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/src/dbtest/src/.vscode/settings.json b/src/dbtest/src/.vscode/settings.json new file mode 100644 index 00000000..70e34ecb --- /dev/null +++ b/src/dbtest/src/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md index 47d697ff..f5f11409 100644 --- a/src/dbtest/src/doc/dynamic_test_analysis.md +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -28,7 +28,7 @@ cat >> doc/dynamic_test_analysis.md <<'EOF' - 核心测试循环(`RunTestLoop`): 1. 通过 `CaseReader` 读取 `*.txt` 测试用例 2. 调用 `sql_cntl_v2` 接口执行 SQL - 3. 收集结果 → 与预期比对 → 写日志 → 统计异常 + 3. 收集结果 → 与预期比对 → 写日志 → 统计 异常 - 异常处理:连接失败、SQL 语法错误、超时均记录到 `logs/` 目录 **调用链流程图** @@ -75,3 +75,15 @@ sqltest_v2.cc::main() └─ ResultHandler::IsTestExpectedResult() ├─ IsSqlExpectedResult() └─ Outputter::WriteResultTotal() + + +## 3. sql_cntl_v2.cc 功能概述(行号精确版) + +- **建立连接**:`DBConnector::SetAutoCommit`(552 行) +- **执行写 SQL**:`ExecWriteSql`(221 行) +- **执行读 SQL 并收集结果**:`ExecReadSql2Int`(307 行) +- **事务控制**:`SQLStartTxn`(515 行) / `SQLEndTnx`(426 行) +- **隔离级别**:`SetIsolationLevel`(610 行) +- **超时设置**:`SetTimeout`(578 行) +- **异常处理**:`SqlExecuteErr`(136 行) + diff --git a/src/dbtest/src/doc/dynamic_test_analysis.ms b/src/dbtest/src/doc/dynamic_test_analysis.ms new file mode 100644 index 00000000..e69de29b From 8995a431ba3249cb6a7d189108830540788de831 Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Fri, 18 Jul 2025 00:55:45 +0800 Subject: [PATCH 79/81] doc: add sql_cntl_v2.cc interaction & error handling --- src/dbtest/src/doc/dynamic_test_analysis.md | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md index f5f11409..6cfc6488 100644 --- a/src/dbtest/src/doc/dynamic_test_analysis.md +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -87,3 +87,51 @@ sqltest_v2.cc::main() - **超时设置**:`SetTimeout`(578 行) - **异常处理**:`SqlExecuteErr`(136 行) + + +## 4. sql_cntl_v2.cc 功能概述 + +86178@LAPTOP-TUT2NE8F MINGW64 ~/Desktop (master) +$ cd ~/3TS/src/dbtest/src +grep -nE '^[[:space:]]*(bool|void|std::string)[[:space:]]+[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*\(' sql_cntl_v2.cc | nl + 1 24:std::string get_current_time(){ + 2 79:bool replace(std::string& str, const std::string& from, const std::string& to) { + 3 96:std::string SQLCHARToStr(SQLCHAR* ch) { + 4 177: std::string blank(blank_base*(session_id - 1), ' '); + 5 276: std::string blank(blank_base*(session_id - 1), ' '); + 6 292: std::string blank(blank_base*(session_id - 1), ' '); + 7 319: std::string blank(blank_base*(session_id - 1), ' '); + 8 367: std::string blank(blank_base*(session_id - 1), ' '); + 9 466: std::string blank(blank_base*(session_id - 1), ' '); + 10 513: std::string blank(blank_base*(session_id - 1), ' '); + 11 527: std::string blank(blank_base*(session_id - 1), ' '); + 12 557: std::string blank(blank_base*(session_id - 1), ' '); + 13 565: std::string blank(blank_base*(session_id - 1), ' '); + +sql_cntl_v2.cc做了部分的修改,代码行数会与原来的行数纯在偏差 + +| 行号 | 函数 | 作用 | +|---|---|---| +| 24 | get_current_time | 高精度时间戳 | +| 79 | replace | 字符串替换 | +| 96 | SQLCHARToStr | SQLCHAR → std::string | +| 121 | ErrInfoWithStmt | 提取 ODBC 错误信息 | +| 174 | SqlExecuteErr | 统一 SQL 执行错误处理 | +| 259 | ExecWriteSql | 执行写 SQL(INSERT/UPDATE/DELETE) | +| 345 | ExecReadSql2Int | 执行读 SQL,返回结果集 | +| 464 | SQLEndTnx | 事务提交/回滚 | +| 553 | SQLStartTxn | 显式开启事务 | +| 590 | SetAutoCommit | 设置自动提交模式 | +| 616 | SetTimeout | 设置锁/事务超时 | +| 648 | SetIsolationLevel | 设置事务隔离级别 | + +**异常处理** +- 连接失败:打印日志 → 重试 +- SQL 超时:检测 "timeout" 字符串 → 标记 ResultType +- 语法错误:立即记录到 `logs/sql_error.log` +**交互/异常处理要点** +- **建立连接**:`SetAutoCommit(590)` 关闭自动提交,进入事务模式 +- **执行 SQL**:`ExecWriteSql(259)` / `ExecReadSql2Int(345)` 使用 ODBC `SQLExecDirect` +- **异常处理**:`SqlExecuteErr(174)` 解析 `SQL_ERROR` → 日志 + 标记超时/回滚 +- **资源清理**:所有句柄在 `SQLFreeStmt` 后释放,避免泄漏 +EOF \ No newline at end of file From 1392461aff123df090f840409ca4bae655841e08 Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Mon, 28 Jul 2025 18:45:46 +0800 Subject: [PATCH 80/81] doc: complete Day5+Day6 content for Issue #69 --- src/dbtest/src/doc/dynamic_test_analysis.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md index 6cfc6488..36a41518 100644 --- a/src/dbtest/src/doc/dynamic_test_analysis.md +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -134,4 +134,5 @@ sql_cntl_v2.cc做了部分的修改,代码行数会与原来的行数纯在偏 - **执行 SQL**:`ExecWriteSql(259)` / `ExecReadSql2Int(345)` 使用 ODBC `SQLExecDirect` - **异常处理**:`SqlExecuteErr(174)` 解析 `SQL_ERROR` → 日志 + 标记超时/回滚 - **资源清理**:所有句柄在 `SQLFreeStmt` 后释放,避免泄漏 -EOF \ No newline at end of file +EOF + From f0356c2c8ebb8f12961b240c2d8b55d80f380973 Mon Sep 17 00:00:00 2001 From: Shining1101 <3100437103@qq.com> Date: Mon, 28 Jul 2025 19:02:12 +0800 Subject: [PATCH 81/81] fix: add missing Day5+Day6 sections --- src/dbtest/src/doc/dynamic_test_analysis.md | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/dbtest/src/doc/dynamic_test_analysis.md b/src/dbtest/src/doc/dynamic_test_analysis.md index 36a41518..54dc5854 100644 --- a/src/dbtest/src/doc/dynamic_test_analysis.md +++ b/src/dbtest/src/doc/dynamic_test_analysis.md @@ -136,3 +136,48 @@ sql_cntl_v2.cc做了部分的修改,代码行数会与原来的行数纯在偏 - **资源清理**:所有句柄在 `SQLFreeStmt` 后释放,避免泄漏 EOF + +## 5. 动态测试 vs 静态测试对比与重构建议 + +| 维度 | 动态测试 | 静态测试 | +|---|---|---| +| 执行方式 | 运行时连接真实数据库,执行真实 SQL | 离线解析 SQL 文本,不连接数据库 | +| 结果来源 | 数据库返回结果 + 日志 | AST / 正则 / 规则引擎 | +| 异常捕获 | 连接超时、锁等待、语法错误 | 语法/语义错误、死锁检测 | +| 性能影响 | 受网络、DB 负载影响 | 纯 CPU 计算,速度快 | +| 覆盖范围 | 真实并发、事务边界 | 无法检测运行时并发异常 | +| 适用场景 | 验证隔离级别、性能基准 | 代码审查、规则扫描 | + +### 重构建议(3 条) +1. **统一错误码枚举** + 将 `SqlExecuteErr()` 中的字符串匹配改为 `enum class SqlError { TIMEOUT, SYNTAX, LOCK_WAIT }`,跨模块安全易维护。 +2. **连接池封装** + 将裸数组升级为 `class ConnectionPool`:自动重连、健康检查、线程安全队列、连接泄露检测。 +3. **日志抽象** + 用 `spdlog` 或 `glog` 替换 `std::cout`:异步落盘、分级日志、JSON 输出支持。 + +## 6. 其他重要内容 +### 日志格式 +[YYYY-MM-DD HH:MM:SS.mmm] + +### 并发模型 +- **线程级**:每个测试用例启动 `std::thread`,句柄独占。 +- **资源隔离**:`conn_pool_[session_id]` 无锁竞争。 +- **超时保护**:所有 SQL 执行默认 30 s 超时。 + +### 性能瓶颈与优化 +- **瓶颈** + - 大量 `SQLExecDirect` 导致网络往返 + - 解析 & 绑定开销 +- **优化手段** + 1. 预编译语句 (`SQLPrepare` + `SQLExecute`) + 2. 批处理(一次发送多条 SQL) + 3. 连接复用(长连接 + 心跳) + +### 全文自检清单 +- [x] 所有函数用途 + 行号已列出 +- [x] Markdown 表格统一对齐 +- [x] 无中文标点混用 +- [x] 代码块使用 ```cpp ``` + +EOF

  • H&d|Q>3|qv`h;8hQJjKqa%j}GP$j*en*_oK> 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 qzI40X?AyNOIR!n%_)VIE>< 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 Cfti5- literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno b/src/dbtest/CMakeFiles/3ts_kvtest.dir/src/mongo_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..ee16ddfd558350e806bb545477a5505e95a1fac6 GIT binary patch literal 397004 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 Sf1J>jrXEb))vj~zbN?SEV^S6X literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/CMakeOutput.log b/src/dbtest/CMakeFiles/CMakeOutput.log new file mode 100644 index 00000000..6407c540 --- /dev/null +++ b/src/dbtest/CMakeFiles/CMakeOutput.log @@ -0,0 +1,570 @@ +The system is: Linux - 5.4.32-1-tlinux4-0001 - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/data1/farrisli/3TS/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/data1/farrisli/3TS/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_83bcb/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_83bcb.dir/build.make CMakeFiles/cmTC_83bcb.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_83bcb +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_83bcb.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_83bcb.dir/testCCompiler.c.o -o cmTC_83bcb -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_31c81/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_31c81.dir/build.make CMakeFiles/cmTC_31c81.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_31c81 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31c81.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -o cmTC_31c81 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux +Thread model: posix +gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) +COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64' + /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccSKy7jS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_31c81 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64' +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_31c81/fast"] + ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_31c81.dir/build.make CMakeFiles/cmTC_31c81.dir/build] + ignore line: [gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_31c81] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31c81.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -o cmTC_31c81 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_31c81' '-rdynamic' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccSKy7jS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_31c81 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccSKy7jS.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_31c81] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_31c81.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_12ee6/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_12ee6.dir/build.make CMakeFiles/cmTC_12ee6.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c +Linking C executable cmTC_12ee6 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_12ee6.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_12ee6.dir/feature_tests.c.o -o cmTC_12ee6 -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_e54c5/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_e54c5.dir/build.make CMakeFiles/cmTC_e54c5.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c +Linking C executable cmTC_e54c5 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e54c5.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_e54c5.dir/feature_tests.c.o -o cmTC_e54c5 -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_3fbce/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_3fbce.dir/build.make CMakeFiles/cmTC_3fbce.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.c +Linking C executable cmTC_3fbce +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3fbce.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_3fbce.dir/feature_tests.c.o -o cmTC_3fbce -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Determining if the CXX compiler works passed with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_4374d/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_4374d.dir/build.make CMakeFiles/cmTC_4374d.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_4374d +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4374d.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_4374d.dir/testCXXCompiler.cxx.o -o cmTC_4374d -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_6a715/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_6a715.dir/build.make CMakeFiles/cmTC_6a715.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -o CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp +Linking CXX executable cmTC_6a715 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a715.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6a715 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux +Thread model: posix +gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) +COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRTUiYm.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6a715 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_6a715/fast"] + ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_6a715.dir/build.make CMakeFiles/cmTC_6a715.dir/build] + ignore line: [gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -o CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Linking CXX executable cmTC_6a715] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a715.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6a715 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6a715' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRTUiYm.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6a715 /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccRTUiYm.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_6a715] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_6a715.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting CXX [-std=c++14] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_25c7b/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_25c7b.dir/build.make CMakeFiles/cmTC_25c7b.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++14 -o CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_25c7b +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_25c7b.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_25c7b.dir/feature_tests.cxx.o -o cmTC_25c7b -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:1cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:1cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:1cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:1cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:1cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:1cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:1cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:1cxx_relaxed_constexpr + Feature record: CXX_FEATURE:1cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:1cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_58341/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_58341.dir/build.make CMakeFiles/cmTC_58341.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++11 -o CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_58341 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58341.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_58341.dir/feature_tests.cxx.o -o cmTC_58341 -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++98] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_7ff84/fast" +gmake[1]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +/usr/bin/gmake -f CMakeFiles/cmTC_7ff84.dir/build.make CMakeFiles/cmTC_7ff84.dir/build +gmake[2]: Entering directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++98 -o CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o -c /data1/farrisli/3TS/src/dbtest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_7ff84 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7ff84.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_7ff84.dir/feature_tests.cxx.o -o cmTC_7ff84 -rdynamic +gmake[2]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' +gmake[1]: Leaving directory '/data1/farrisli/3TS/src/dbtest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:0cxx_alias_templates + Feature record: CXX_FEATURE:0cxx_alignas + Feature record: CXX_FEATURE:0cxx_alignof + Feature record: CXX_FEATURE:0cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:0cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:0cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:0cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:0cxx_default_function_template_args + Feature record: CXX_FEATURE:0cxx_defaulted_functions + Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:0cxx_delegating_constructors + Feature record: CXX_FEATURE:0cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:0cxx_enum_forward_declarations + Feature record: CXX_FEATURE:0cxx_explicit_conversions + Feature record: CXX_FEATURE:0cxx_extended_friend_declarations + Feature record: CXX_FEATURE:0cxx_extern_templates + Feature record: CXX_FEATURE:0cxx_final + Feature record: CXX_FEATURE:0cxx_func_identifier + Feature record: CXX_FEATURE:0cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:0cxx_inheriting_constructors + Feature record: CXX_FEATURE:0cxx_inline_namespaces + Feature record: CXX_FEATURE:0cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:0cxx_local_type_template_args + Feature record: CXX_FEATURE:0cxx_long_long_type + Feature record: CXX_FEATURE:0cxx_noexcept + Feature record: CXX_FEATURE:0cxx_nonstatic_member_init + Feature record: CXX_FEATURE:0cxx_nullptr + Feature record: CXX_FEATURE:0cxx_override + Feature record: CXX_FEATURE:0cxx_range_for + Feature record: CXX_FEATURE:0cxx_raw_string_literals + Feature record: CXX_FEATURE:0cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:0cxx_right_angle_brackets + Feature record: CXX_FEATURE:0cxx_rvalue_references + Feature record: CXX_FEATURE:0cxx_sizeof_member + Feature record: CXX_FEATURE:0cxx_static_assert + Feature record: CXX_FEATURE:0cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:0cxx_thread_local + Feature record: CXX_FEATURE:0cxx_trailing_return_types + Feature record: CXX_FEATURE:0cxx_unicode_literals + Feature record: CXX_FEATURE:0cxx_uniform_initialization + Feature record: CXX_FEATURE:0cxx_unrestricted_unions + Feature record: CXX_FEATURE:0cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:0cxx_variadic_macros + Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 new file mode 100644 index 00000000..556469df --- /dev/null +++ b/src/dbtest/CMakeFiles/Makefile2 @@ -0,0 +1,145 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest + +#============================================================================= +# Target rules for target CMakeFiles/3ts_dbtest.dir + +# All Build rule for target. +CMakeFiles/3ts_dbtest.dir/all: + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/depend + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2,3,4,5 "Built target 3ts_dbtest" +.PHONY : CMakeFiles/3ts_dbtest.dir/all + +# Include target in all. +all: CMakeFiles/3ts_dbtest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/3ts_dbtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 5 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_dbtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 +.PHONY : CMakeFiles/3ts_dbtest.dir/rule + +# Convenience name for target. +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/rule + +.PHONY : 3ts_dbtest + +# clean rule for target. +CMakeFiles/3ts_dbtest.dir/clean: + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/clean +.PHONY : CMakeFiles/3ts_dbtest.dir/clean + +# clean rule for target. +clean: CMakeFiles/3ts_dbtest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/3ts_kvtest.dir + +# All Build rule for target. +CMakeFiles/3ts_kvtest.dir/all: + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/depend + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=6,7,8,9,10 "Built target 3ts_kvtest" +.PHONY : CMakeFiles/3ts_kvtest.dir/all + +# Include target in all. +all: CMakeFiles/3ts_kvtest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/3ts_kvtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 5 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_kvtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 +.PHONY : CMakeFiles/3ts_kvtest.dir/rule + +# Convenience name for target. +3ts_kvtest: CMakeFiles/3ts_kvtest.dir/rule + +.PHONY : 3ts_kvtest + +# clean rule for target. +CMakeFiles/3ts_kvtest.dir/clean: + $(MAKE) -f CMakeFiles/3ts_kvtest.dir/build.make CMakeFiles/3ts_kvtest.dir/clean +.PHONY : CMakeFiles/3ts_kvtest.dir/clean + +# clean rule for target. +clean: CMakeFiles/3ts_kvtest.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/src/dbtest/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..c2ef8969f8f0eeb2b4f4bf65835862b8dd019a02 GIT binary patch literal 20744 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 E3+j&d761SM literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c new file mode 100644 index 00000000..5a17cdba --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx new file mode 100644 index 00000000..54f83f04 --- /dev/null +++ b/src/dbtest/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks new file mode 100644 index 00000000..f599e28b --- /dev/null +++ b/src/dbtest/CMakeFiles/progress.marks @@ -0,0 +1 @@ +10 diff --git a/src/dbtest/auto_test.sh b/src/dbtest/auto_test.sh new file mode 100755 index 00000000..83610809 --- /dev/null +++ b/src/dbtest/auto_test.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -x +db=$1 +isolation=$2 +if [ $db == "sqlserver" ] +then + ./3ts_dbtest -isolation=$2 -db_type="sqlserver" -user="SA" -passwd="Ly.123456" -case_dir="sqlserver" +elif [ $db == "mysql" ] +then + ./3ts_dbtest -isolation=$2 -db_type="mysql" -user="test123" -passwd="Ly.123456" -case_dir="mysql" +elif [ $db == "tidb" ] +then + ./3ts_dbtest -isolation=$2 -db_type="tidb" -user="test123" -passwd="Ly.123456" -case_dir="tidb" +elif [ $db == "oracle" ] +then + ./3ts_dbtest -isolation=$2 -db_type="oracle" -user="system" -passwd="oracle" -case_dir="oracle" +elif [ $db == "pg" ] +then + ./3ts_dbtest -isolation=$2 -db_type="pg" -user="test123" -passwd="Ly.123456" -case_dir="pg" +elif [ $db == "ob" ] +then + ./3ts_dbtest -isolation=$2 -db_type="ob" -user="sys@oracle" -passwd="" -case_dir="ob" +elif [ $db == "crdb" ] +then + ./3ts_dbtest -isolation=$2 -db_type="crdb" -user="test123" -passwd="Ly.123456" -case_dir="crdb" +else [ $db == "mongodb" ] + ./3ts_dbtest -isolation=$2 -db_type="mongodb" -user="test123" -passwd="Ly.123456" -case_dir="mysql" +fi + + diff --git a/src/dbtest/auto_test_all.sh b/src/dbtest/auto_test_all.sh new file mode 100755 index 00000000..c51a9b4c --- /dev/null +++ b/src/dbtest/auto_test_all.sh @@ -0,0 +1,29 @@ +#!/bin/bash +set -x +./auto_test.sh "mysql" "read-uncommitted" +./auto_test.sh "mysql" "read-committed" +./auto_test.sh "mysql" "repeatable-read" +./auto_test.sh "mysql" "serializable" + +./auto_test.sh "sqlserver" "read-uncommitted" +./auto_test.sh "sqlserver" "read-committed" +./auto_test.sh "sqlserver" "repeatable-read" +./auto_test.sh "sqlserver" "serializable" + +./auto_test.sh "oracle" "read-committed" +./auto_test.sh "oracle" "serializable" + +./auto_test.sh "pg" "read-uncommitted" +./auto_test.sh "pg" "read-committed" +./auto_test.sh "pg" "repeatable-read" +./auto_test.sh "pg" "serializable" + +./auto_test.sh "tidb" "read-committed" +./auto_test.sh "tidb" "repeatable-read" + +./auto_test.sh "crdb" "serializable" + +./auto_test.sh "ob" "read-uncommitted" +./auto_test.sh "ob" "read-committed" +./auto_test.sh "ob" "repeatable-read" +./auto_test.sh "ob" "serializable" diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf deleted file mode 100644 index 9829942e..00000000 --- a/src/dbtest/config/gflags.conf +++ /dev/null @@ -1,5 +0,0 @@ --db_type="mysql" --user="test123" --passwd="Ly.123456" --db_name="test" - diff --git a/src/dbtest/src/case_cntl.cc b/src/dbtest/src/case_cntl.cc new file mode 100644 index 00000000..c1c14f05 --- /dev/null +++ b/src/dbtest/src/case_cntl.cc @@ -0,0 +1,315 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "case_cntl.h" +Outputter outputter; +ResultHandler result_handler; + +std::vector CaseReader::TxnIdAndSql(const std::string& line) { + std::vector txn_id_and_sql; + const auto index_first = line.find("-"); + const auto index_second = line.rfind("-"); + if (!line.empty()) { + if (index_first != line.npos && index_second != line.npos) { + txn_id_and_sql.push_back(line.substr(0, index_first)); + txn_id_and_sql.push_back(line.substr(index_first + 1, index_second - index_first - 1)); + txn_id_and_sql.push_back(line.substr(index_second + 1)); + } else { + std::cerr << "read txn_sql failed, please check format of test file. line:" + line << std::endl; + } + } + return txn_id_and_sql; +} + +std::pair CaseReader::SqlIdAndResult(const std::string& line) { + std::pair sql_id_and_result; + const auto index = line.find("-"); + if (index != line.npos) { + std::string sql_id = line.substr(0, index); + std::string result = line.substr(index + 1); + std::vector ret_list; + std::string result_enhance = ""; + split(result, ret_list, " "); + int i = 0; + for (auto row : ret_list) { + if (row == "null") { + result_enhance = row; + } else { + std::string r = "(" + row + ")"; + if (i != int(ret_list.size()) - 1) { + result_enhance += r + " "; + } else { + result_enhance += r; + } + } + i++; + } + if (!sql_id.empty()) { + sql_id_and_result.first = std::stoi(sql_id); + } else { + std::cout << "line: " << line << " please check case file, there is no sql_id" << std::endl; + } + sql_id_and_result.second = result_enhance; + } + return sql_id_and_result; +} + +std::string CaseReader::Isolation(const std::string& line) { + const auto index = line.find("{"); + return line.substr(0, index - 1); +} + +std::pair CaseReader::TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type) { + std::pair test_sequence_and_result_set; + std::ifstream test_stream(test_file); + const auto index_second = test_file.rfind("/"); + const auto end = test_file.find("."); + std::string test_case = test_file.substr(index_second + 1, end - index_second - 1); + std::string test_case_type = db_type + "_" + test_case; + std::string line; + TestSequence test_sequence(test_case_type); + TestResultSet test_result_set(test_case_type); + bool is_result_row = false; + int first_sql_id = -1; + std::unordered_map> sql_result_set; + if (test_stream) { + while (getline(test_stream, line)) { + if (!line.empty()) { + auto index_table_type = line.find("ParamNum"); + auto index_left = line.find("{"); + auto index_right = line.find("}"); + auto index_anno = line.find("#"); + if (index_anno != line.npos) { + continue; + } + if (index_table_type != line.npos) { + auto start = line.find(":"); + std::string param_num_str = ""; + if (start != line.npos) { + param_num_str = line.substr(start + 1); + } + int param_num = 0; + if (!param_num_str.empty()) { + param_num = std::stoi(param_num_str); + } + test_sequence.SetParamNum(param_num); + } else if (index_left != line.npos) { + std::string isolation = CaseReader::Isolation(line); + test_result_set.SetIsolation(isolation); + is_result_row = true; + } else if (index_right != line.npos && is_result_row) { + /* + std::pair sql_id_and_result = CaseReader::SqlIdAndResult(line); + std::cout << sql_id_and_result.first << "222" << std::endl; + std::vector ret_list; + std::string result_str = sql_id_and_result.second; + split(result_str, ret_list, " "); + sql_result_set[sql_id_and_result.first] = ret_list; + */ + test_result_set.AddSqlResultSet(sql_result_set); + + is_result_row = false; + } else if (is_result_row) { + std::pair sql_id_and_result = CaseReader::SqlIdAndResult(line); + if (first_sql_id == -1) { + first_sql_id = sql_id_and_result.first; + } else if (first_sql_id == sql_id_and_result.first) { + test_result_set.AddSqlResultSet(sql_result_set); + sql_result_set.clear(); + } + std::vector ret_list; + std::string result_str = sql_id_and_result.second; + + split(result_str, ret_list, " "); + sql_result_set[sql_id_and_result.first] = ret_list; + } else if (!is_result_row) { + std::vector txn_id_and_sql = CaseReader::TxnIdAndSql(line); + int sql_id = 0; + int txn_id = 0; + std::string sql = ""; + if (!txn_id_and_sql[0].empty()) { + sql_id = std::stoi(txn_id_and_sql[0]); + } + if (!txn_id_and_sql[1].empty()) { + txn_id = std::stoi(txn_id_and_sql[1]); + } + if (!txn_id_and_sql[2].empty()) { + sql = txn_id_and_sql[2]; + } + TxnSql txn_sql(sql_id, txn_id, sql, test_case_type); + test_sequence.AddTxnSql(txn_sql); + } + } + } + test_sequence_and_result_set.first = test_sequence; + test_sequence_and_result_set.second = test_result_set; + } else { + //throw "test file not found"; + std::cerr << "test file: " + test_file + " not found" << std::endl; + } + return test_sequence_and_result_set; +} + +bool CaseReader::InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type) { + std::cout << dash + "read test sequence and test result set start" + dash << std::endl; + std::ifstream do_test_stream("./do_test_list.txt"); + std::string test_case; + if (do_test_stream) { + while (getline(do_test_stream, test_case)) { + auto index = test_case.find("#"); + if (index != test_case.npos) { + continue; + } + if (!do_test_stream) { + continue; + } + std::string test_file_name = test_case + ".txt"; + std::string test_file = test_path + "/" + test_file_name; + std::pair test_sequence_and_result_set = CaseReader::TestSequenceAndTestResultSetFromFile(test_file, db_type); + TestSequence test_sequence = test_sequence_and_result_set.first; + TestResultSet test_result_set = test_sequence_and_result_set.second; + CaseReader::AddTestResultSet(test_result_set); + CaseReader::AddTestSequence(test_sequence); + std::cout << test_file + " read success" << std::endl; + } + return true; + } else { + //throw "do_test_list.txt not found"; + std::cerr << "do_test_list.txt not found" << std::endl; + return false; + } +} + +bool ResultHandler::IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql) { + if (cur_result.size() != expected_result.size()) { + //std::cout << "stmt_id:" << sql_id << " The number of data is different, cur_result:" << cur_result.size() << " expected_result: " << expected_result.size() << std::endl; + return false; + } + int len = cur_result.size(); + for (int i = 0; i < len; i++) { + std::string cur = cur_result[i]; + std::string expected = expected_result[i]; + if (cur != expected) { + return false; + } + } + return true; +} + +bool ResultHandler::IsTestExpectedResult(std::unordered_map>& cur_result, + std::vector>> expected_result_set_list, + std::unordered_map sql_map, const std::string& test_process_file) { + int index = 1; + for (auto expected_result_set : expected_result_set_list) { + bool is_all_expected = true; + for (auto& result_map : expected_result_set) { + int sql_id = result_map.first; + std::vector sql_expected_result = result_map.second; + std::vector sql_cur_result = cur_result[sql_id]; + if (!IsSqlExpectedResult(sql_cur_result, sql_expected_result, sql_id, sql_map[sql_id])) { + is_all_expected = false; + break; + } + } + if (is_all_expected) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + std::string info = "\nThe current result is consistent with the [(" + std::to_string(index) + ") expected_result] of serial scheduling"; + std::cout << info << std::endl; + test_process << info << std::endl; + } + return true; + } + index += 1; + } + return false; +} + +void Outputter::WriteResultTotal(std::vector test_result_set_list, const std::string& ret_file) { + std::ofstream out(ret_file); + for (auto& test_result_set : test_result_set_list) { + out << test_result_set.TestCaseType() + ": " << test_result_set.ResultType() << std::endl; + } + out.close(); +} + +bool Outputter::PrintAndWriteTxnSqlResult(std::vector cur_result, + std::vector>> expected_result_set_list, + const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file) { + std::string blank(blank_base*(session_id - 1), ' '); + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + std::cout << blank + " current_result: " << std::endl; + std::cout << blank + " "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + //test_process << blank + "T" + std::to_string(session_id) + " sql_id: " + std::to_string(sql_id) + " sql: " + sql << std::endl; + test_process << blank + " current_result: " << std::endl; + test_process << blank + " "; + std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (test_process, " ")); + test_process << "" << std::endl; + int idx = 1; + for (auto& expected_result_set : expected_result_set_list) { + std::vector sql_expected_result = expected_result_set[sql_id]; + int len = sql_expected_result.size(); + if (len == 0) { + std::cout << "[ERROR]" << "stmt_expected_result is empty, please check expected result. stmt_id: " << sql_id << " stmt: " << sql << std::endl; + } + if (result_handler.IsSqlExpectedResult(cur_result, sql_expected_result, sql_id, sql)) { + std::cout << blank + " *(" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + std::cout << blank + " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + test_process << blank + " *(" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + test_process << blank + " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (test_process, " ")); + test_process << "" << std::endl; + } else { + std::cout << blank + " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + std::cout << blank + " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); + std::cout << "" << std::endl; + test_process << blank + " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; + test_process << blank + " "; + std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (test_process, " ")); + test_process << "" << std::endl; + } + idx++; + } + test_process << "" << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} + +bool Outputter::WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + test_process << dash + test_case_type + dash << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} + +bool Outputter::WriteResultType(const std::string& result_type, const std::string& test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); + if (test_process) { + test_process << "\nTest Result: " + result_type << std::endl; + test_process << "" << std::endl; + return true; + } else { + std::cerr << test_process_file + "has not found" << std::endl; + return false; + } +} diff --git a/src/dbtest/src/case_cntl.h b/src/dbtest/src/case_cntl.h new file mode 100644 index 00000000..7b4e0e80 --- /dev/null +++ b/src/dbtest/src/case_cntl.h @@ -0,0 +1,120 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "common.h" + +class TestResultSet { +private: + std::string test_case_type_; + std::string isolation_; + std::string result_type_; + std::vector>> expected_result_set_list_; +public: + TestResultSet() {}; + TestResultSet(const std::string& test_case_type) {test_case_type_ = test_case_type;}; + + void SetResultType(const std::string& result_type) {result_type_ = result_type;}; + void SetIsolation(const std::string& isolation) {isolation_ = isolation;}; + + std::string TestCaseType() {return test_case_type_;}; + std::string Isolation() {return isolation_;}; + std::string ResultType() {return result_type_;}; + std::vector>> ExpectedResultSetList() { + return expected_result_set_list_; + }; + + void AddSqlResultSet(std::unordered_map> sql_result_set) { + expected_result_set_list_.push_back(sql_result_set); + }; +}; + +// The sql with txn_id in test case +class TxnSql { +private: + int txn_id_; + int sql_id_; + std::string sql_; + std::string test_case_type_; +public: + TxnSql(const int sql_id, const int txn_id, const std::string& sql, + const std::string& test_case_type):txn_id_(txn_id), + sql_id_(sql_id), sql_(sql), test_case_type_(test_case_type) {}; + + int TxnId() {return txn_id_;}; + int SqlId() {return sql_id_;}; + std::string Sql() {return sql_;}; + std::string TestCaseType() {return test_case_type_;}; +}; + +// TestSequence->exception test case, include a series of TxnSql +class TestSequence { +private: + // such as mysql_dirty-read + std::string test_case_type_; + std::vector txn_sql_list_; + int param_num_; +public: + TestSequence() {}; + TestSequence(const std::string& test_case_type):test_case_type_(test_case_type) {}; + + std::string TestCaseType() {return test_case_type_;}; + std::vector TxnSqlList() {return txn_sql_list_;}; + int ParamNum() {return param_num_;}; + + void AddTxnSql(TxnSql txn_sql) {txn_sql_list_.push_back(txn_sql);}; + void SetParamNum(const int param_num) {param_num_ = param_num;}; +}; + +//read and parse sql from file +class CaseReader { +private: + std::vector test_sequence_list_; + std::vector test_result_set_list_; +public: + bool InitTestSequenceAndTestResultSetList(const std::string& test_path, const std::string& db_type); + + void AddTestSequence(TestSequence test_sequence) { + test_sequence_list_.push_back(test_sequence); + }; + void AddTestResultSet(TestResultSet test_result_set) { + test_result_set_list_.push_back(test_result_set); + }; + + std::pair TestSequenceAndTestResultSetFromFile(const std::string& test_file, const std::string& db_type); + + std::vector TxnIdAndSql(const std::string& line); + std::pair SqlIdAndResult(const std::string& line); + std::string Isolation(const std::string& line); + + std::vector TestSequenceList() {return test_sequence_list_;}; + std::vector TestResultSetList() {return test_result_set_list_;}; +}; + +class ResultHandler { +public: + bool IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, const int sql_id, const std::string& sql); + bool IsTestExpectedResult(std::unordered_map>& cur_result, + std::vector>> expected_result_set_list, + std::unordered_map sql_map, const std::string& test_process_file); +}; + +class Outputter { +public: + void WriteResultTotal(std::vector test_result_set_list, const std::string& ret_file); + + bool PrintAndWriteTxnSqlResult(std::vector cur_result, + std::vector>> expected_result_set_list, + const int sql_id, const std::string& sql, const int session_id, const std::string& test_process_file); + bool WriteTestCaseTypeToFile(const std::string& test_case_type, const std::string& test_process_file); + bool WriteResultType(const std::string& result_type, const std::string& test_process_file); +}; + +extern Outputter outputter; +extern ResultHandler result_handler; diff --git a/src/dbtest/src/common.cc b/src/dbtest/src/common.cc new file mode 100644 index 00000000..8bb55db9 --- /dev/null +++ b/src/dbtest/src/common.cc @@ -0,0 +1,33 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "common.h" +std::string dash(10, '-'); +int blank_base = 40; + +void TrimSpace(std::string& str) { + auto itor = remove_if(str.begin(), str.end(), ::isspace); + str.erase(itor, str.end()); +} + +void TrimQuo(std::string& str) { + str.erase(std::remove(str.begin(), str.end(), '\"'), str.end()); +} + +void split(const std::string& str, std::vector& tokens, const std::string delim) { + tokens.clear(); + auto start = str.find_first_not_of(delim, 0); + auto position = str.find_first_of(delim, start); + while (position != std::string::npos || start != std::string::npos) { + tokens.emplace_back(std::move(str.substr(start, position - start))); + start = str.find_first_not_of(delim, position); + position = str.find_first_of(delim, start); + } +} diff --git a/src/dbtest/src/common.h b/src/dbtest/src/common.h new file mode 100644 index 00000000..1fc7b049 --- /dev/null +++ b/src/dbtest/src/common.h @@ -0,0 +1,34 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +extern std::string dash; +extern int blank_base; +// trim all space +void TrimSpace(std::string& str); +// trim all quotation mark +void TrimQuo(std::string& str); +// split string with delim +void split(const std::string& str, std::vector& tokens, const std::string delim = " "); diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc deleted file mode 100644 index 4045698c..00000000 --- a/src/dbtest/src/db_test.cc +++ /dev/null @@ -1,726 +0,0 @@ -#include "db_test.h" -#include "gflags/gflags.h" -#include -#include -#include -#include -#include - - -DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); -DEFINE_string(user, "test123", "username"); -DEFINE_string(passwd, "Ly.123456", "password"); -DEFINE_string(db_name, "test", "create database name"); -DEFINE_int32(conn_pool_size, 4, "db_conn pool size"); -DEFINE_string(isolation, "serializable", "transation isolation level"); -DEFINE_string(case_dir, "mysql", "test case dir name"); -DEFINE_string(timeout, "5", "timeout"); -std::string dash(10, '-'); - -std::string SQLCHARToStr(SQLCHAR* ch) { - char* ch_char = (char*)ch; - std::string ch_str = ch_char; - return ch_str; -} - -void split(const std::string& str, - std::vector& tokens, - const std::string delim = " ") { - tokens.clear(); - auto start = str.find_first_not_of(delim, 0); - auto position = str.find_first_of(delim, start); - while (position != std::string::npos || start != std::string::npos) { - tokens.emplace_back(std::move(str.substr(start, position - start))); - start = str.find_first_not_of(delim, position); - position = str.find_first_of(delim, start); - } -} - -bool PrintAndWriteTxnSqlResult(std::vector cur_result, - std::vector>> expected_result_set_list, - int sql_id, std::string sql, int txn_id) { - std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; - std::ofstream out(sql_result_file, std::ios::app); - if (out) { - std::cout << " cur_result: " << std::endl; - std::cout << " "; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "" << std::endl; - - out << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(txn_id) + " sql: " + sql << std::endl; - out << " cur_result: " << std::endl; - out << " "; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (out, " ")); - out << "" << std::endl; - int idx = 1; - for (auto& expected_result_set : expected_result_set_list) { - std::vector sql_expected_result = expected_result_set[sql_id]; - std::cout << " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; - std::cout << " "; - std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "" << std::endl; - out << " (" + std::to_string(idx) + ") " + "expected_result: " << std::endl; - out << " "; - std::copy(sql_expected_result.begin(), sql_expected_result.end(), std::ostream_iterator (out, " ")); - out << "" << std::endl; - idx++; - } - out << "" << std::endl; - return true; - } else { - std::cerr << sql_result_file + "has not found" << std::endl; - return false; - } -} - -bool WriteTestCaseTypeToFile(std::string test_case_type) { - std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; - std::ofstream out(sql_result_file, std::ios::app); - if (out) { - out << dash + test_case_type + dash << std::endl; - return true; - } else { - std::cerr << sql_result_file + "has not found" << std::endl; - return false; - } -} - -bool WriteResultType(std::string result_type) { - std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; - std::ofstream out(sql_result_file, std::ios::app); - if (out) { - out << "result_type: " + result_type << std::endl; - out << "" << std::endl; - return true; - } else { - std::cerr << sql_result_file + "has not found" << std::endl; - return false; - } - -} - -bool IsSqlExpectedResult(std::vector cur_result, std::vector expected_result, int sql_id, std::string sql) { - if (cur_result.size() != expected_result.size()) { - std::cerr << "number of cur_result_row != number of expected_result_row" << std::endl; - return false; - } - int len = cur_result.size(); - for (int i = 0; i < len; i++) { - std::string cur = cur_result[i]; - std::string expected = expected_result[i]; - if (cur != expected) { - return false; - } - } - return true; -} - -bool IsTestExpectedResult(std::unordered_map>& cur_result, - std::vector>> expected_result_set_list, - std::unordered_map sql_map) { - for (auto expected_result_set : expected_result_set_list) { - bool is_all_expected = true; - for (auto& result_map : expected_result_set) { - int sql_id = result_map.first; - std::vector sql_expected_result = result_map.second; - std::vector sql_cur_result = cur_result[sql_id]; - if (!IsSqlExpectedResult(sql_cur_result, sql_expected_result, sql_id, sql_map[sql_id])) { - is_all_expected = false; - break; - } - } - if (is_all_expected) { - return true; - } - } - return false; -} - -std::vector SQLReader::TxnIdAndSql(std::string line) { - std::vector txn_id_and_sql; - const auto index_first = line.find("-"); - const auto index_second = line.rfind("-"); - if (line != "") { - if (index_first != line.npos && index_second != line.npos) { - txn_id_and_sql.push_back(line.substr(0, index_first)); - txn_id_and_sql.push_back(line.substr(index_first + 1, index_second - index_first - 1)); - txn_id_and_sql.push_back(line.substr(index_second + 1)); - } else { - std::cerr << "read txn_sql failed, please check format of test file. line:" + line << std::endl; - } - } - return txn_id_and_sql; -} - -std::pair SQLReader::SqlIdAndResult(std::string line) { - std::pair sql_id_and_result; - const auto index = line.find("-"); - if (index != line.npos) { - std::string sql_id = line.substr(0, index); - std::string result = line.substr(index + 1); - sql_id_and_result.first = std::stoi(sql_id); - sql_id_and_result.second = result; - } - return sql_id_and_result; -} - -std::string SQLReader::Isolation(std::string line) { - const auto index = line.find("{"); - return line.substr(0, index - 1); -} - -std::pair SQLReader::TestSequenceAndTestResultSetFromFile(std::string& test_file) { - std::pair test_sequence_and_result_set; - std::ifstream test_stream(test_file); - const auto index_first = test_file.find("/"); - const auto index_second = test_file.rfind("/"); - const auto end = test_file.find("."); - std::string db_name = test_file.substr(index_first + 1, index_second - index_first - 1); - std::string test_case = test_file.substr(index_second + 1, end - index_second - 1); - std::string test_case_type = db_name + "_" + test_case; - std::string line; - TestSequence test_sequence(test_case_type); - TestResultSet test_result_set(test_case_type); - bool is_result_row = false; - int first_sql_id = -1; - std::unordered_map> sql_result_set; - if (test_stream) { - while (getline(test_stream, line)) { - if (line != "") { - auto index_table_type = line.find("ParamNum"); - auto index_left = line.find("{"); - auto index_right = line.find("}"); - if (index_table_type != line.npos) { - auto start = line.find(":"); - std::string param_num_str = line.substr(start + 1); - int param_num = std::stoi(param_num_str); - test_sequence.SetParamNum(param_num); - } else if (index_left != line.npos) { - std::string isolation = SQLReader::Isolation(line); - test_result_set.SetIsolation(isolation); - is_result_row = true; - } else if (index_right != line.npos) { - std::pair sql_id_and_result = SQLReader::SqlIdAndResult(line); - std::vector ret_list; - std::string result_str = sql_id_and_result.second; - split(result_str, ret_list, " "); - sql_result_set[sql_id_and_result.first] = ret_list; - test_result_set.AddSqlResultSet(sql_result_set); - is_result_row = false; - } else if (is_result_row) { - std::pair sql_id_and_result = SQLReader::SqlIdAndResult(line); - if (first_sql_id == -1) { - first_sql_id = sql_id_and_result.first; - } else if (first_sql_id == sql_id_and_result.first) { - test_result_set.AddSqlResultSet(sql_result_set); - sql_result_set.clear(); - } - std::vector ret_list; - std::string result_str = sql_id_and_result.second; - split(result_str, ret_list, " "); - sql_result_set[sql_id_and_result.first] = ret_list; - } else if (!is_result_row) { - std::vector txn_id_and_sql = SQLReader::TxnIdAndSql(line); - TxnSql txn_sql(std::stoi(txn_id_and_sql[0]), std::stoi(txn_id_and_sql[1]), txn_id_and_sql[2], test_case_type); - test_sequence.AddTxnSql(txn_sql); - } - } - } - test_sequence_and_result_set.first = test_sequence; - test_sequence_and_result_set.second = test_result_set; - } else { - //throw "test file not found"; - std::cerr << "test file: " + test_file + " not found" << std::endl; - } - return test_sequence_and_result_set; -} - - - -bool SQLReader::InitTestSequenceAndTestResultSetList(std::string& test_path) { - std::cout << dash + "read test sequence and test result set start" + dash << std::endl; - std::ifstream do_test_stream("./do_test_list.txt"); - std::string test_case; - if (do_test_stream) { - while (getline(do_test_stream, test_case)) { - auto index = test_case.find("#"); - if (index != test_case.npos) { - continue; - } - std::string test_file_name = test_case + ".txt"; - std::string test_file = test_path + "/" + test_file_name; - std::pair test_sequence_and_result_set = SQLReader::TestSequenceAndTestResultSetFromFile(test_file); - TestSequence test_sequence = test_sequence_and_result_set.first; - TestResultSet test_result_set = test_sequence_and_result_set.second; - SQLReader::AddTestResultSet(test_result_set); - SQLReader::AddTestSequence(test_sequence); - std::cout << test_file + " read success" << std::endl; - } - return true; - } else { - //throw "do_test_list.txt not found"; - std::cerr << "do_test_list.txt not found" << std::endl; - return false; - } -} - -// handle_type: stmt and dbc -void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { - SQLINTEGER NativeErrorPtr = 0; - SQLSMALLINT TextLengthPtr = 0; - if ("stmt" == handle_type) { - SQLGetDiagRec(SQL_HANDLE_STMT, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); - } - if ("dbc" == handle_type) { - SQLGetDiagRec(SQL_HANDLE_DBC, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); - } -} - -std::string DBConnector::SqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret) { - if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { - return ""; - } else if (ret == SQL_ERROR) { - SQLCHAR ErrInfo[256]; - SQLCHAR SQLState[256]; - DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); - std::cerr << "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; - std::string err_info = SQLCHARToStr(ErrInfo); - return err_info; - } else if (ret == SQL_NEED_DATA) { - std::cout << "SQL_NEED_DATA" << std::endl; - return "SQL_NEED_DATA"; - } else if (ret == SQL_STILL_EXECUTING) { - std::cout << "SQL_STILL_EXECUTING" << std::endl; - return "SQL_STILL_EXECUTING"; - } else if (ret == SQL_NO_DATA) { - std::cout << "SQL_NO_DATA" << std::endl; - return "SQL_NO_DATA"; - } else if (ret == SQL_INVALID_HANDLE) { - std::cout << "SQL_INVALID_HANDLE" << std::endl; - return "SQL_INVALID_HANDLE"; - } else if (ret == SQL_PARAM_DATA_AVAILABLE) { - std::cout << "SQL_PARAM_DATA_AVAILABLE" << std::endl; - return "SQL_PARAM_DATA_AVAILABLE"; - } else { - std::cerr << "execute sql: '" + sql + "' failed, unknow error" << std::endl; - return "unknow error"; - } -} - -bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id) { - SQLRETURN ret; - SQLHSTMT m_hStatement; - SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - - ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - std::string err_info_stmt = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); - if (err_info_stmt != "") { - return false; - } - // execute sql - std::cout << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'"<< std::endl; - ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); - std::string err_info_sql = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); - if (err_info_sql != "") { - /* - auto index_lock_wait = err_info_sql.find("Lock wait timeout exceeded"); - auto index_lock_wait_1 = err_info_sql.find(""); - if (index_lock_wait != err_info_sql.npos) { - test_result_set.SetResultType("timeout"); - return true; - } - auto index_serialize = err_info_sql.find("can't serialize access"); - if (index_serialize != err_info_sql.npos) { - test_result_set.SetResultType("can't serialize access"); - return true; - }*/ - test_result_set.SetResultType(err_info_sql); - //return false; - } - // get error info - return true; -} - - -bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, - std::unordered_map>& cur_result_set, - int conn_id, int param_num) { - SQLRETURN ret; - SQLHSTMT m_hStatement; - SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); - - ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - std::string err_info_stmt = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); - if (err_info_stmt != "") { - return false; - } - SQLLEN length; - SQLCHAR value[param_num][20] = {{0}}; - // execute sql - std::cout << "sql_id: " + std::to_string(sql_id) + " txn_id: " + std::to_string(conn_id) + " execute sql: '" + sql + "'" << std::endl; - ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); - // parse result - std::string err_info_sql = DBConnector::SqlExecuteErr(sql, "stmt", m_hStatement, ret); - if(err_info_sql == "") { - // bind column data - for (int i = 0; i < param_num; i++) { - SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); - } - // get next row, and fill cur_sql_result_set - bool is_no_data = true; - while(SQL_NO_DATA != SQLFetch(m_hStatement)) { - std::string row = ""; - for (int i = 0; i < param_num; i++) { - std::string v_str = SQLCHARToStr(value[i]); - if (i == (param_num - 1)) { - row += v_str; - } else { - row += v_str + ","; - } - } - if (cur_result_set.find(sql_id) != cur_result_set.end()) { - cur_result_set[sql_id].push_back(row); - } else { - std::vector sql_result; - sql_result.push_back(row); - cur_result_set[sql_id] = sql_result; - } - is_no_data = false; - } - if (is_no_data) { - cur_result_set[sql_id].push_back("null"); - } - PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, conn_id); - return true; - } else { - auto index_lock_wait = err_info_sql.find("Lock wait timeout exceeded"); - if (index_lock_wait != err_info_sql.npos) { - test_result_set.SetResultType("timeout"); - return true; - } - test_result_set.SetResultType(err_info_sql); - //return false; - return true; - } -} - -std::string DBConnector::IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN ret) { - if (ret == SQL_ERROR) { - SQLCHAR ErrInfo[256]; - SQLCHAR SQLState[256]; - SQLINTEGER NativeErrorPtr = 0; - SQLSMALLINT TextLengthPtr = 0; - SQLGetDiagRec(SQL_HANDLE_DBC, m_hDatabaseConnection, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); - std::string state = SQLCHARToStr(SQLState); - if ("25S03" == state) { - return "rollback"; - } - if ("40001" == state) { - return "deadlock"; - } - } - return ""; -} - -bool DBConnector::SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set) { - if (FLAGS_db_type != "oracle") { - SQLRETURN ret; - SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - std::cout << "txn_id: " + std::to_string(conn_id) + " execute opt: '" + opt + "'" << std::endl; - if ("commit" == opt) { - ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); - } else if ("rollback" == opt) { - ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); - } else { - std::cerr << "unknow txn opt" << std::endl; - } - std::string result_type = DBConnector::IsTxnRollback(m_hDatabaseConnection, ret); - if (result_type != "") { - test_result_set.SetResultType(result_type); - } - } else { - TestResultSet test_result_set; - if (!DBConnector::ExecWriteSql(0, opt, test_result_set, conn_id)) { - return false; - } - } - return true; -} - -bool DBConnector::SQLStartTxn(int conn_id) { - SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[conn_id - 1]; - if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { - std::cerr << "txn_id: " + std::to_string(conn_id) + " start txn failed" << std::endl; - return false; - } else { - std::cout << "txn_id: " + std::to_string(conn_id) + " start txn success" << std::endl; - return true; - } -} - -bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { - SQLRETURN ret; - SQLUINTEGER autoCommit; - if (opt == 0) { - autoCommit = 0; - } else { - autoCommit = 1; - } - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)(long)autoCommit, 0); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "set AutoCommit = 0 failed" << std::endl; - return false; - } - return true; -} - -bool DBConnector::SetTimeout(SQLHDBC m_hDatabaseConnection, int timeout) { - SQLRETURN ret; - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); - std::string err_info_stmt = DBConnector::SqlExecuteErr("set timeout", "dbc", m_hDatabaseConnection, ret); - if (err_info_stmt != "") { - return false; - } - return true; -} - -bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id) { - if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { - SQLRETURN ret; - if (opt == "read-uncommitted") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); - } else if (opt == "read-committed") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); - } else if (opt == "repeatable-read") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); - } else if (opt == "serializable") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); - } else { - std::cerr << "unknow isolation level" << std::endl; - return false; - } - std::string err_info_stmt = DBConnector::SqlExecuteErr("set isolation", "dbc", m_hDatabaseConnection, ret); - if (err_info_stmt != "") { - return false; - } - } else { - std::string iso; - if (opt == "read-committed") { - iso = "read committed"; - } else if (opt == "serializable") { - iso = "serializable"; - } else { - std::cerr << "unknow isolation level" << std::endl; - return false; - } - TestResultSet test_result_set; - std::string sql; - if (FLAGS_db_type == "oracle") { - sql = "alter session set isolation_level =" + iso; - } else if (FLAGS_db_type == "ob") { - sql = "set session transaction isolation level " + iso + ";"; - } - if (!DBConnector::ExecWriteSql(0, sql, test_result_set, conn_id)) { - return false; - } - } - //if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - // std::cerr << "set TXN_ISOLATION = " + opt + " failed" << std::endl; - // return false; - //} - return true; -} - -bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { - std::vector txn_sql_list = test_sequence.TxnSqlList(); - std::cout << dash + test_sequence.TestCaseType() + " test start" + dash << std::endl; - if (!WriteTestCaseTypeToFile(test_sequence.TestCaseType())) { - return false; - } - //int i = 0; - std::unordered_map> cur_result_set; - std::unordered_map sql_map; - std::string table_name; - for (auto& txn_sql : txn_sql_list) { - if (test_result_set.ResultType() == "timeout") { - if (test_result_set.ResultType() == "timeout") { - for (int i = 0; i < FLAGS_conn_pool_size; i++) { - db_connector.SQLEndTnx("rollback", i + 1, test_result_set); - } - } - WriteResultType(test_result_set.ResultType()); - break; - } - int sql_id = txn_sql.SqlId(); - int txn_id = txn_sql.TxnId(); - std::string sql = txn_sql.Sql(); - sql_map[sql_id] = sql; - auto index_read = sql.find("SELECT"); - auto index_read_1 = sql.find("select"); - auto index_begin = sql.find("BEGIN"); - auto index_begin_1 = sql.find("begin"); - auto index_commit = sql.find("COMMIT"); - auto index_commit_1 = sql.find("commit"); - auto index_rollback = sql.find("ROLLBACK"); - auto index_rollback_1 = sql.find("rollback"); - if (index_read != sql.npos || index_read_1 != sql.npos) { - if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, cur_result_set, txn_id, test_sequence.ParamNum())) { - return false; - } - } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { - if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { - if (!db_connector.SQLStartTxn(txn_id)) { - return false; - } - /* - if (FLAGS_db_type == "crdb") { - if (!db_connector.ExecWriteSql(0, "set transaction isolation level serializable;", test_result_set, txn_id)) { - return false; - } - }*/ - } else { - if (!db_connector.ExecWriteSql(0, "BEGIN;", test_result_set, txn_id)) { - return false; - } - } - } else if (index_commit != sql.npos || index_commit_1 != sql.npos) { - if (FLAGS_db_type != "crdb") { - if (!db_connector.SQLEndTnx("commit", txn_id, test_result_set)) { - return false; - } - } else { - if (!db_connector.ExecWriteSql(0, "COMMIT;", test_result_set, txn_id)) { - return false; - } - } - } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { - if (!db_connector.SQLEndTnx("rollback", txn_id, test_result_set)) { - return false; - } - } else { - if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id)) { - return false; - } - } - //i++; - //if (i == (int)txn_sql_list.size()) { - // if(!WriteResultType(test_result_set.ResultType())) { - // return false; - // } - //} - } - if (test_result_set.ResultType() == "") { - if (IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), sql_map)) { - test_result_set.SetResultType("avoid"); - } else { - test_result_set.SetResultType("exception"); - } - } - if(!WriteResultType(test_result_set.ResultType())) { - return false; - } - return true; -} - -void Outputter::WriteResultSet(std::vector test_result_set_list) { - std::string ret_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + ".txt"; - std::ofstream out(ret_file); - for (auto& test_result_set : test_result_set_list) { - out << test_result_set.TestCaseType() + ": " << test_result_set.ResultType() << std::endl; - } - out.close(); -} - -int main(int argc, char* argv[]) { - // parse gflags args - google::ParseCommandLineFlags(&argc, &argv, true); - std::cout << "input param-> " << std::endl; - std::cout << " db_type: " + FLAGS_db_type << std::endl; - std::cout << " user: " + FLAGS_user << std::endl; - std::cout << " passwd: " + FLAGS_passwd << std::endl; - std::cout << " isolation: " + FLAGS_isolation << std::endl; - // read test sequence - SQLReader sql_reader; - std::string test_path_base = "t/"; - std::string test_path = test_path_base + FLAGS_case_dir; - if (!sql_reader.InitTestSequenceAndTestResultSetList(test_path)) { - std::cerr << "init test sequence and test result set failed" << std::endl; - } - - std::vector test_sequence_list = sql_reader.TestSequenceList(); - std::vector test_result_set_list = sql_reader.TestResultSetList(); - /* - std::cout << "begin" << std::endl; - for (auto& test_result_set : test_result_set_list) { - std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); - for (auto& expected_result_set : expected_result_set_list) { - for (auto& k : expected_result_set) { - int sql_id = k.first; - std::vector cur_result = k.second; - std::cout << sql_id << std::endl; - std::copy(cur_result.begin(), cur_result.end(), std::ostream_iterator (std::cout, " ")); - std::cout << "" << std::endl; - - } - } - }*/ - - // init db_connector - std::cout << dash + "init db_connector start" + dash << std::endl; - DBConnector db_connector; - if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { - std::cerr << "init db_connector failed" << std::endl; - } - if (FLAGS_db_type != "crdb") { - // init database - if (FLAGS_db_type != "oracle") { - std::cout << dash + "init database start" + dash << std::endl; - TestResultSet test_rs__; - db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); - db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); - } - } - if (FLAGS_db_type != "crdb") { - std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; - std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; - int idx = 1; - for (auto hdbc : db_connector.DBConnPool()) { - /*// set timeout - if (!db_connector.SetTimeout(hdbc, std::stoi(FLAGS_timeout))) { - return false; - }*/ - // set TXN_ISOLATION - if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx)) { - return false; - } - idx++; - } - std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; - } - - // clear result file - std::string sql_result_file = "./" + FLAGS_db_type + "-" + FLAGS_isolation + "-read-sql-result" + ".txt"; - std::ifstream sql_result(sql_result_file); - if (sql_result) { - std::remove(sql_result_file.c_str()); - std::cout << "delete" << std::endl; - } - // send sql - JobExecutor job_executor; - Outputter outputter; - int len = test_sequence_list.size(); - for (int i = 0; i < len; i++) { - if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { - std::cerr << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; - //return 0; - } else { - std::string result_type = test_result_set_list[i].ResultType(); - std::cout << "result_type:" << result_type + "\n" << std::endl; - } - } - outputter.WriteResultSet(test_result_set_list); - db_connector.ReleaseConn(); - - return 0; -} diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h deleted file mode 100644 index 95ac2619..00000000 --- a/src/dbtest/src/db_test.h +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -/* -enum class ResultType { - RollBack, - Avaid, - Exception -};*/ - -// result set -class SqlResultSet { -private: - std::vector sql_rs_; -public: - SqlResultSet(std::vector sql_rs) {sql_rs_ = sql_rs;}; - std::vector AllSqlResultSet() {return sql_rs_;}; -}; - -class TxnResultSet { -private: - bool is_commit_; - bool is_timeout_; -public: - bool IsCommit() {return is_commit_;}; - bool IsTimeout() {return is_timeout_;}; - void UpdateCommitStatus(bool commit) {is_commit_ = commit;}; - void UpdateCimeoutStatus(bool timeout) {is_timeout_ = timeout;}; -}; - -class TestResultSet { -private: - std::string test_case_type_; - std::vector txn_result_set_list_; - // [map1, map2, ...] - std::vector>> expected_result_set_list_; - std::string result_type_; - std::string isolation_; -public: - TestResultSet() {}; - TestResultSet(std::string test_case_type) {test_case_type_ = test_case_type;}; - std::string TestCaseType() {return test_case_type_;}; - std::vector TxnResultSetList() {return txn_result_set_list_;}; - std::vector>> ExpectedResultSetList() {return expected_result_set_list_;}; - bool IsExpectedResult(); - std::string ResultType() {return result_type_;}; - void SetResultType(std::string result_type) {result_type_ = result_type;}; - void SetIsolation(std::string isolation) {isolation_ = isolation;}; - std::string Isolation() {return isolation_;}; - void AddSqlResultSet(std::unordered_map> sql_result_set) { - expected_result_set_list_.push_back(sql_result_set); - }; -}; - -// The sql with txn_id in test case -class TxnSql { -private: - int sql_id_; - std::string sql_; - int txn_id_; - std::string test_case_type_; -public: - TxnSql(int sql_id, int txn_id, std::string sql, std::string test_case_type) { - sql_id_ = sql_id; - sql_ = sql; - txn_id_ = txn_id; - test_case_type_ = test_case_type; - }; - int SqlId() {return sql_id_;}; - std::string Sql() {return sql_;}; - int TxnId() {return txn_id_;}; - std::string TestCaseType() {return test_case_type_;}; -}; -// TestSequence->exception test case, include a series of TxnSql -class TestSequence { -private: - // such as mysql_dirty-read - std::string test_case_type_; - std::vector txn_sql_list_; - int param_num_; -public: - TestSequence() {}; - TestSequence(std::string test_case_type) { - test_case_type_ = test_case_type; - }; - void AddTxnSql(TxnSql txn_sql) {txn_sql_list_.push_back(txn_sql);}; - std::vector TxnSqlList() {return txn_sql_list_;}; - std::string TestCaseType() {return test_case_type_;}; - void SetParamNum(int param_num) {param_num_ = param_num;}; - int ParamNum() {return param_num_;}; -}; - -//read and parse sql from file -class SQLReader { -private: - std::vector test_sequence_list_; - std::vector test_result_set_list_; -public: - bool InitTestSequenceAndTestResultSetList(std::string& test_path); - - void AddTestSequence(TestSequence test_sequence) { - test_sequence_list_.push_back(test_sequence); - }; - void AddTestResultSet(TestResultSet test_result_set) { - test_result_set_list_.push_back(test_result_set); - }; - - std::pair TestSequenceAndTestResultSetFromFile(std::string& test_file); - - std::vector TxnIdAndSql(std::string line); - std::pair SqlIdAndResult(std::string line); - std::string Isolation(std::string line); - - std::vector TestSequenceList() {return test_sequence_list_;}; - std::vector TestResultSetList() {return test_result_set_list_;}; -}; - -//db connector -class DBConnector { -private: - std::vector conn_pool_; -public: - bool InitDBConnector(std::string& user, std::string& passwd, std::string& db_type, int conn_pool_size) { - for (int i = 0; i < (int)conn_pool_size; i++) { - SQLHENV m_hEnviroment; - SQLHDBC m_hDatabaseConnection; - SQLRETURN ret; - // get env - ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "get env failed" << std::endl; - return false; - } - - SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); - // get conn - ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "get conn failed" << std::endl; - return false; - } - // connect - ret = SQLConnect(m_hDatabaseConnection, - (SQLCHAR*)db_type.c_str(), SQL_NTS, - (SQLCHAR*)user.c_str(), SQL_NTS, - (SQLCHAR*)passwd.c_str(), SQL_NTS); - - std::string err_info_stmt = DBConnector::SqlExecuteErr("connnected", "dbc", m_hDatabaseConnection, ret); - if (err_info_stmt != "") { - return false; - } - /* - if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { - std::cerr << "connected failed" << std::endl; - return false; - }*/ - conn_pool_.push_back(m_hDatabaseConnection); - } - std::cerr << "init db_connector success" << std::endl; - return true; - }; - bool SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt); - bool SetTimeout(SQLHDBC m_hDatabaseConnection, int timeout); - bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int conn_id, int param_num); - bool ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id); - void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]); - std::vector DBConnPool() {return conn_pool_;}; - std::string SqlExecuteErr(const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret); - std::string IsTxnRollback(SQLHDBC m_hDatabaseConnection, SQLRETURN ret); - void ReleaseConn() { - for (int i = 0; i < (int)conn_pool_.size(); i++) { - SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); - } - }; - bool SQLEndTnx(std::string opt, int conn_id, TestResultSet& test_result_set); - bool SQLStartTxn(int conn_id); - bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id=1); - void ReleaseEnv(); - void Release() { - ReleaseConn(); - }; -}; - -class JobExecutor { -public: - bool ExecAllTestSequence(std::vector test_sequence_list); - bool ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector); - void handle_result(TestResultSet& rs); -}; - -class Outputter { -public: - void WriteResultSet(std::vector test_result_set_list); -}; diff --git a/src/dbtest/src/kv_cntl.cc b/src/dbtest/src/kv_cntl.cc new file mode 100644 index 00000000..ee773905 --- /dev/null +++ b/src/dbtest/src/kv_cntl.cc @@ -0,0 +1,500 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "kv_cntl.h" +KVParser kv_parser; + +// execute +bool MongoConnector::ExecInsertkV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + std::cout << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + } + + //bsoncxx::document::value doc = document{} << "k" << "0" << "v" << "2" << finalize; + coll.insert_one(session, doc_value.view()); + + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::ExecInsertkV ->" << e_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::ExecInsertkV ->" << e_info << std::endl; + } + + auto index_conflict = e_info.find("WriteConflict"); + if (index_conflict != e_info.npos) { + test_result_set.SetResultType("Rollback\nReason: " + e_info); + + return false; + } + } + + return true; +} + +bool MongoConnector::ExecDeleteKV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + + std::cout << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + } + + coll.delete_one(session, doc_value.view()); + + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::ExecDeleteKV ->" << e_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::ExecDeleteKV ->" << e_info << std::endl; + } + } + + return true; +} + +bool MongoConnector::ExecUpdatekV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value_filter, bsoncxx::document::value& doc_value_update, + TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + + std::cout << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + } + + coll.update_many(session, doc_value_filter.view(), doc_value_update.view()); + + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::ExecUpdatekV ->" << e_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::ExecUpdatekV ->" << e_info << std::endl; + } + + auto index_conflict = e_info.find("WriteConflict"); + + for (int i = 1;i <= 4;i++) { + KVEndTxn(i, 1024, "ROLLBACK", test_result_set); + } + + if (index_conflict != e_info.npos) { + test_result_set.SetResultType("Rollback\nReason: " + e_info); + return false; + } + } + return true; +} + + +bool MongoConnector::ExecUpdatekVWithVInc(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + const auto& [stmt_data_k, stmt_data_v] = kv_parser.StmtKVData(stmt); + + bsoncxx::document::value doc_value_find = kv_parser.MongoFind(stmt_data_k); + + std::string ret_v = ExecGetV(session_id, coll, doc_value_find); + if (ret_v.empty()) { + std::cout << "[ERROR]" << " get value failed, stmt: " << stmt << std::endl; + return false; + } + auto index_p = stmt_data_v.find("+"); + auto index_s = stmt_data_v.find("-"); + std::string target_v = stmt_data_v.substr(1); + int update_v = 0; + if (index_p != ret_v.npos) { + update_v = std::stoi(ret_v) + std::stoi(target_v); + } else if (index_s != ret_v.npos){ + update_v = std::stoi(ret_v) - std::stoi(target_v); + } else { + std::cout << "[ERROR] " << "unkonw stmt: " << stmt << " t1.vinc(k, v_opt)-> v_opt:+100 or -100" << std::endl; + } + + std::vector doc = kv_parser.MongoUpdate(stmt_data_k, std::to_string(update_v)); + bsoncxx::document::value doc_value = doc[0]; + bsoncxx::document::value doc_value_update = doc[1]; + if (!ExecUpdatekV(session_id, stmt_id, stmt, coll, doc_value, doc_value_update, test_result_set, test_process_file)) { + return false; + } + } catch(mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::ExecUpdatekV ->" << e_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::ExecUpdatekV ->" << e_info << std::endl; + } + + auto index_conflict = e_info.find("WriteConflict"); + + for (int i = 1;i <= 4;i++) { + KVEndTxn(i, 1024, "ROLLBACK", test_result_set); + } + + if (index_conflict != e_info.npos) { + test_result_set.SetResultType("Rollback\nReason: " + e_info); + return false; + } + } + return true; +} + +std::string MongoConnector::ExecGetV(const int session_id, mongocxx::collection& coll, bsoncxx::document::value& doc_value) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + mongocxx::cursor cursor = coll.find(session, doc_value.view()); + std::pair data; + for (auto&& doc : cursor) { + std::string doc_json = bsoncxx::to_json(doc); + data = kv_parser.DocKVData(doc_json); + } + return data.second; + } catch(mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + std::cout << blank << "[ERROR] in MongoConnector::ExecUpdatekV ->" << e_info << std::endl; + return ""; + } +} + +bool MongoConnector::ExecFindKV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, + const int param_num, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + + auto index_a = stmt.find("*"); + + std::cout << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " execute stmt: '" << stmt << "'" << std::endl; + } + + mongocxx::cursor cursor = [&] { + if (index_a != stmt.npos) { + return coll.find(session, {}); + } else { + return coll.find(session, doc_value.view()); + } + }(); + + int exist = 0; + for (auto&& doc : cursor) { + std::string row = ""; + std::string doc_json = bsoncxx::to_json(doc); + const auto& [k_data, v_data] = kv_parser.DocKVData(doc_json); + row = "(" + k_data + "," + v_data + ")"; + if (cur_result_set.find(stmt_id) != cur_result_set.end()) { + cur_result_set[stmt_id].push_back(row); + } else { + std::vector sql_result; + sql_result.push_back(row); + cur_result_set[stmt_id] = sql_result; + } + exist = 1; + } + + if (exist == 0) { + std::vector sql_result; + sql_result.push_back("null"); + cur_result_set[stmt_id] = sql_result; + } + std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + outputter.PrintAndWriteTxnSqlResult(cur_result_set[stmt_id], expected_result_set_list, stmt_id, stmt, session_id, test_process_file); + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::ExecFindkV ->" << e_info << std::endl; + + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::ExecFindkV ->" << e_info << std::endl; + } + + for (int i = 1;i <= 4;i++) { + KVEndTxn(i, 1024, "ROLLBACK", test_result_set); + } + + auto index_no_read = e_info.find("Unable to read from a snapshot due to pending collection catalog changes"); + if (index_no_read != e_info.npos) { + test_result_set.SetResultType("Rollback\nReason: " + e_info); + return false; + } + } + + return true; +} + +// transaction options +bool MongoConnector::KVStartTxn(const int session_id, const int stmt_id, TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + + std::cout << blank << "T" << session_id << " start transaction success" << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " start transaction success" << std::endl; + } + + session.start_transaction(opts_); + + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + std::cout << blank << "[ERROR] in MongoConnector::KVStartTxn ->" << e_info << std::endl; + + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::KVStartTxn ->" << e_info << std::endl; + } + } + return true; +} + +bool MongoConnector::KVEndTxn(int session_id, int stmt_id, const std::string& opt, + TestResultSet& test_result_set, const std::string test_process_file) { + const std::string blank(blank_base*(session_id - 1), ' '); + try { + mongocxx::client_session& session = session_pool_[session_id - 1]; + if (stmt_id != 1024) { + std::cout << blank << "T" << session_id << " " << opt << " transaction success" << std::endl; + } + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "T" << session_id << " " << opt << " transaction success" << std::endl; + } + + if (opt == "COMMIT") { + session.commit_transaction(); + } else if (opt == "ROLLBACK") { + session.abort_transaction(); + } else { + std::cout << "[ERROR] unknow opt in MongoConnector::KVEndTxn" << std::endl; + } + + } catch (mongocxx::v_noabi::exception& e) { + std::string e_info = e.what(); + + if (stmt_id != 1024) { + std::cout << blank << "[ERROR] in MongoConnector::KVEndTxn ->" << e_info << std::endl; + } + + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << blank << "[ERROR] in MongoConnector::KVEndTxn ->" << e_info << std::endl; + } + + auto index_conflict = e_info.find("WriteConflict"); + if (index_conflict != e_info.npos) { + test_result_set.SetResultType("Rollback\nReason: " + e_info); + return false; + } + } + + return true; +} + +std::string KVParser::MongoOpt(const std::string& stmt) { + auto index_get = stmt.find("get"); + auto index_get_p = stmt.find("getpred"); + auto index_put = stmt.find("put"); + auto index_put_p = stmt.find("putpred"); + auto index_vinc = stmt.find("vinc"); + auto index_begin = stmt.find("begin"); + auto index_commit = stmt.find("commit"); + auto index_rollback = stmt.find("rollback"); + std::string opt = ""; + if (index_get != stmt.npos) { + if (index_get_p != stmt.npos) { + opt = "findpred"; + } else { + opt = "find"; + } + } else if (index_put != stmt.npos) { + const auto& [stmt_data_k, stmt_data_v] = StmtKVData(stmt); + if (index_put_p == stmt.npos) { + if (FindFromKCache(stmt_data_k)) { + opt = "update"; + } else { + opt = "insert"; + PutIntoKCache(stmt_data_k); + } + } else { + opt = "updatepred"; + } + } else if (index_vinc != stmt.npos) { + opt = "vinc"; + } else if (index_begin != stmt.npos) { + opt = "begin"; + } else if (index_commit != stmt.npos) { + opt = "commit"; + } else if (index_rollback != stmt.npos) { + opt = "rollback"; + } + + return opt; +} + +std::pair KVParser::DocKVData(const std::string& doc_json) { + std::pair doc_data; + auto index_k = doc_json.find("k"); + auto index_right = doc_json.find_last_of("}"); + if (index_k != doc_json.npos && index_right != doc_json.npos) { + std::string data = doc_json.substr(index_k, index_right - index_k - 1); + auto index_v = data.find("v"); + auto index_dot = data.find(","); + auto index_m_f = data.find_first_of(":"); + auto index_m_l = data.find_last_of(":"); + if (index_v != data.npos && index_dot != data.npos && index_m_f != data.npos && index_m_l != data.npos) { + std::string k_data = data.substr(index_m_f + 1, index_dot - index_m_f - 1); + std::string v_data = data.substr(index_m_l + 1); + TrimQuo(k_data); + TrimQuo(v_data); + TrimSpace(k_data); + TrimSpace(v_data); + doc_data.first = k_data; + doc_data.second = v_data; + } + } + return doc_data; +} + +std::pair KVParser::StmtKVData(const std::string& stmt) { + auto index_left = stmt.find("("); + auto index_right = stmt.find(")"); + auto index_dot = stmt.find(","); + + std::pair stmt_data; + + if (index_left != stmt.npos && index_right != stmt.npos && index_dot != stmt.npos) { + std::string stmt_data_k = stmt.substr(index_left + 1, index_dot - index_left - 1); + std::string stmt_data_v = stmt.substr(index_dot + 1, index_right - index_dot - 1); + if (!stmt_data_k.empty() && !stmt_data_v.empty()) { + TrimSpace(stmt_data_k); + TrimSpace(stmt_data_v); + stmt_data.first = stmt_data_k; + stmt_data.second = stmt_data_v; + } + } else if (index_dot == stmt.npos) { + std::string stmt_data_k = stmt.substr(index_left + 1, index_right - index_left - 1); + if (!stmt_data_k.empty()) { + TrimSpace(stmt_data_k); + stmt_data.first = stmt_data_k; + stmt_data.second = ""; + } + } else { + stmt_data.first = ""; + stmt_data.second = ""; + } + + return stmt_data; +} + +std::string KVParser::StmtCollName(const std::string& stmt) { + auto index_dot = stmt.find("."); + std::string coll_name = ""; + if (index_dot != stmt.npos) { + coll_name = stmt.substr(0, index_dot); + } + if (coll_name.empty()) { + std::cout << "[ERROR] " << "please check stmt: " << stmt << " there is no coll_name" << std::endl; + } + + return coll_name; +} + +mongocxx::collection KVParser::GetColl(const std::string& stmt, MongoConnector& mongo_connector, int& is_first_use) { + std::string coll_name = StmtCollName(stmt); + if (!coll_name.empty()) { + if (is_first_use == 1) { + mongo_connector.InitColl(coll_name); + is_first_use = 0; + } + } + mongocxx::collection coll; + if (!coll_name.empty()) { + coll = GetFromCollCache(coll_name); + if (!coll) { + coll = mongo_connector.Coll(coll_name); + PutIntoCollCache(coll_name, coll); + } + } + + return coll; +} + +bsoncxx::document::value KVParser::MongoFind(const std::string& stmt_data_k) { + bsoncxx::document::value doc_value = document{} << "k" << stmt_data_k << finalize; + + return doc_value; +} + +bsoncxx::document::value KVParser::MongoFindPred(const std::string& stmt_data_k) { + bsoncxx::document::value doc_value = document{} << "v" << stmt_data_k << finalize; + + return doc_value; +} + +bsoncxx::document::value KVParser::MongoInsert(const std::string& stmt_data_k, const std::string& stmt_data_v) { + auto builder = bsoncxx::builder::stream::document{}; + bsoncxx::document::value doc_value = builder << "k" << stmt_data_k << "v" << stmt_data_v << finalize; + + return doc_value; +} + +std::vector KVParser::MongoUpdate(const std::string& stmt_data_k, const std::string& stmt_data_v) { + auto builder_filter = bsoncxx::builder::stream::document{}; + auto builder_update = bsoncxx::builder::stream::document{}; + + std::vector doc_update; + bsoncxx::document::value doc_value = builder_filter << "k" << stmt_data_k << finalize; + bsoncxx::document::value doc_value_update = builder_update << "$set" << open_document << "v" << stmt_data_v << close_document << finalize; + doc_update.emplace_back(doc_value); + doc_update.emplace_back(doc_value_update); + + return doc_update; +} + +std::vector KVParser::MongoUpdatePred(const std::string& stmt_data_k, const std::string& stmt_data_v) { + auto builder_filter = bsoncxx::builder::stream::document{}; + auto builder_update = bsoncxx::builder::stream::document{}; + + std::vector doc_update; + bsoncxx::document::value doc_value = builder_filter << "v" << stmt_data_k << finalize; + bsoncxx::document::value doc_value_update = builder_update << "$set" << open_document << "v" << stmt_data_v << close_document << finalize; + doc_update.emplace_back(doc_value); + doc_update.emplace_back(doc_value_update); + + return doc_update; +} diff --git a/src/dbtest/src/kv_cntl.h b/src/dbtest/src/kv_cntl.h new file mode 100644 index 00000000..7dc00a0a --- /dev/null +++ b/src/dbtest/src/kv_cntl.h @@ -0,0 +1,145 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "case_cntl.h" + +using bsoncxx::builder::stream::close_array; +using bsoncxx::builder::stream::close_document; +using bsoncxx::builder::stream::document; +using bsoncxx::builder::stream::finalize; +using bsoncxx::builder::stream::open_array; +using bsoncxx::builder::stream::open_document; + +class KVParser; +extern KVParser kv_parser; + +class MongoConnector { +private: + mongocxx::instance inst_; + mongocxx::client client_; + const std::string test_db_; + std::vector session_pool_; + mongocxx::write_concern wc_majority_; + mongocxx::read_concern rc_snapshot_; + mongocxx::read_preference rp_primary_; + mongocxx::options::transaction opts_; +public: + // init + MongoConnector(const std::string& conn_uri, const std::string test_db):client_(mongocxx::client{mongocxx::uri{conn_uri}}), test_db_(test_db) {}; + void InitMongoConnector(const int session_pool_size) { + // init read/write concern + wc_majority_.acknowledge_level(mongocxx::write_concern::level::k_majority); + rc_snapshot_.acknowledge_level(mongocxx::read_concern::level::k_snapshot); + rp_primary_.mode(mongocxx::read_preference::read_mode::k_primary); + // init transaction opts + InitTxnOpts(); + // init session pool + auto db = client_[test_db_]; + for (int i = 0; i < session_pool_size; i++) { + mongocxx::client_session session = client_.start_session(); + session_pool_.emplace_back(client_.start_session()); + }; + std::cout << "init mongo_connector success" << std::endl; + }; + // init transaction opts + void InitTxnOpts() { + opts_.write_concern(wc_majority_); + opts_.read_concern(rc_snapshot_); + opts_.read_preference(rp_primary_); + }; + // init transaction timeout + void InitTxnTimeout(std::chrono::milliseconds timeout) { + opts_.max_commit_time_ms(timeout); + }; + // init coll + bool InitColl(const std::string& coll_name) { + client_[test_db_][coll_name].drop(wc_majority_); + return true; + }; + // get obj + //std::vector MongoSessionPool() {return session_pool_;}; + mongocxx::collection Coll(const std::string coll_name) {return client_[test_db_][coll_name];}; + // execute + bool ExecInsertkV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, const std::string test_process_file=""); + + bool ExecDeleteKV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, const std::string test_process_file=""); + + bool ExecUpdatekV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value_filter, bsoncxx::document::value& doc_value_update, + TestResultSet& test_result_set, const std::string test_process_file=""); + + bool ExecUpdatekVWithVInc(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + TestResultSet& test_result_set, const std::string test_process_file); + + bool ExecFindKV(const int session_id, const int stmt_id, const std::string& stmt, mongocxx::collection& coll, + bsoncxx::document::value& doc_value, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, + const int param_num, const std::string test_process_file=""); + std::string ExecGetV(const int session_id, mongocxx::collection& coll, bsoncxx::document::value& doc_value); + + // transaction options + bool KVStartTxn(const int session_id, const int stmt_id, TestResultSet& test_result_set, + const std::string test_process_file=""); + bool KVEndTxn(int session_id, int stmt_id, const std::string& opt, + TestResultSet& test_result_set, const std::string test_process_file=""); + // release resource + void Release(); +}; + +class KVParser { +private: + std::unordered_map k_cache_; + std::unordered_map coll_cache_; +public: + std::string MongoOpt(const std::string& stmt); + std::pair StmtKVData(const std::string& stmt); + std::pair DocKVData(const std::string& doc_json); + std::string StmtCollName(const std::string& stmt); + mongocxx::collection GetColl(const std::string& stmt, MongoConnector& mongo_connector, int& is_first_use); + + bsoncxx::document::value MongoInsert(const std::string& stmt_data_k, const std::string& stmt_data_v); + std::vector MongoUpdate(const std::string& stmt_data_k, const std::string& stmt_data_v); + std::vector MongoUpdatePred(const std::string& stmt_data_k, const std::string& stmt_data_v); + bsoncxx::document::value MongoFind(const std::string& stmt_data_k); + bsoncxx::document::value MongoFindPred(const std::string& stmt_data_k); + // cache options + void PutIntoKCache(const std::string& k) {k_cache_.emplace(k, 0);}; + bool FindFromKCache(const std::string& k) { + if (k_cache_.count(k) == 1) { + return true; + } else { + return false; + } + }; + void ClearKCache() {k_cache_.clear();}; + + void PutIntoCollCache(const std::string& coll_name, mongocxx::collection coll) { + coll_cache_[coll_name] = coll; + }; + mongocxx::collection GetFromCollCache(const std::string& coll_name) { + mongocxx::collection coll; + if (coll_cache_.find(coll_name) != coll_cache_.end()) { + coll = coll_cache_[coll_name]; + } + return coll; + }; + void ClearCollCache() {coll_cache_.clear();}; +}; diff --git a/src/dbtest/src/kvtest.cc b/src/dbtest/src/kvtest.cc new file mode 100644 index 00000000..23cefcf8 --- /dev/null +++ b/src/dbtest/src/kvtest.cc @@ -0,0 +1,241 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "kvtest.h" +#include "gflags/gflags.h" + +DEFINE_string(db_type, "mongodb", "data resource name"); +DEFINE_string(uri, "", "conn uri"); +DEFINE_string(db_name, "test", "database name"); +DEFINE_int32(conn_pool_size, 4, "session pool size"); +DEFINE_string(isolation, "snapshot", "transation isolation level: snapshot"); +DEFINE_string(timeout, "2", "timeout"); +int is_first_use = 1; + +bool JobExecutor::MongoStmtExcutor(const int session_id, const int stmt_id, const std::string& stmt, + MongoConnector& mongo_connector, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, const std::string& test_process_file) { + // get stmt's option + std::string opt = kv_parser.MongoOpt(stmt); + // excute opt + if ("find" == opt || "findpred" == opt) { + const auto& [stmt_data_k, stmt_data_v] = kv_parser.StmtKVData(stmt); + mongocxx::collection coll = kv_parser.GetColl(stmt, mongo_connector, is_first_use); + if (!coll) { + std::cout << "[ERROR]" << "get coll failed" << std::endl; + return false; + } + bsoncxx::document::value doc_value = [&] { + if ("findpred" == opt) { + return kv_parser.MongoFindPred(stmt_data_k); + } else { + return kv_parser.MongoFind(stmt_data_k); + } + }(); + + if (!mongo_connector.ExecFindKV(session_id, stmt_id, stmt, coll, doc_value, test_result_set, cur_result_set, 2, test_process_file)) { + return false; + } + } else if ("update" == opt || "updatepred" == opt) { + const auto& [stmt_data_k, stmt_data_v] = kv_parser.StmtKVData(stmt); + mongocxx::collection coll = kv_parser.GetColl(stmt, mongo_connector, is_first_use); + if (!coll) { + std::cout << "[ERROR]" << "get coll failed" << std::endl; + return false; + } + + std::vector doc = [&] { + if ("updatepred" == opt) { + return kv_parser.MongoUpdatePred(stmt_data_k, stmt_data_v); + } else { + return kv_parser.MongoUpdate(stmt_data_k, stmt_data_v); + } + }(); + + bsoncxx::document::value doc_value = doc[0]; + bsoncxx::document::value doc_value_update = doc[1]; + + if (!mongo_connector.ExecUpdatekV(session_id, stmt_id, stmt, coll, doc_value, doc_value_update, test_result_set, test_process_file)) { + return false; + } + } else if ("vinc" == opt) { + const auto& [stmt_data_k, stmt_data_v] = kv_parser.StmtKVData(stmt); + mongocxx::collection coll = kv_parser.GetColl(stmt, mongo_connector, is_first_use); + if (!coll) { + std::cout << "[ERROR]" << "get coll failed" << std::endl; + return false; + } + + if (!mongo_connector.ExecUpdatekVWithVInc(session_id, stmt_id, stmt, coll, test_result_set, test_process_file)) { + return false; + } + + } else if ("insert" == opt) { + const auto& [stmt_data_k, stmt_data_v] = kv_parser.StmtKVData(stmt); + mongocxx::collection coll = kv_parser.GetColl(stmt, mongo_connector, is_first_use); + if (!coll) { + std::cout << "[ERROR]" << "get coll failed" << std::endl; + return false; + } + bsoncxx::document::value doc_value = kv_parser.MongoInsert(stmt_data_k, stmt_data_v); + + if (!mongo_connector.ExecInsertkV(session_id, stmt_id, stmt, coll, doc_value, test_result_set, test_process_file)) { + return false; + } + } else if ("begin" == opt) { + if (!mongo_connector.KVStartTxn(session_id, stmt_id, test_result_set, test_process_file)) { + return false; + } + } else if ("commit" == opt) { + if (!mongo_connector.KVEndTxn(session_id, stmt_id, "COMMIT", test_result_set, test_process_file)) { + return false; + } + } else if ("rollback" == opt) { + if (!mongo_connector.KVEndTxn(session_id, stmt_id, "ROLLBACK", test_result_set)) { + return false; + } + } else { + std::cout << "[ERROR]" << "stmt: " << stmt << " unknown option: " << opt << " The current program supports the following commands: begin t1.get(k) t1.put(k,v) t1.getpred(v) t1.putpred(v,v) t1.vinc(k,+100) commit rollback" << std::endl; + } + return true; +} + +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, MongoConnector& mongo_connector) { + std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + std::cout << "test_process_file : " << test_process_file << std::endl; + // remove old test_process_file + std::ifstream test_process_tmp(test_process_file); + if (test_process_tmp) { + std::remove(test_process_file.c_str()); + } + // create new test_process_file + std::ofstream test_process(test_process_file, std::ios::app); + if (!test_process) { + std::cout << "create test_process_file failed" << std::endl; + } + + test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + + std::string test_case_type = test_sequence.TestCaseType(); + + auto index_t = test_case_type.find_first_of("_"); + if (index_t != test_case_type.npos) { + test_case_type = test_case_type.substr(int(index_t) + 1); + } + test_process << "#### test_type: " + test_case_type + " ####" << std::endl; + test_process << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::cout << "#### test_type: " + test_case_type + " ####" << std::endl; + std::cout << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::string current_info = "current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas"; + std::string expected_info = "expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory"; + std::cout << current_info << std::endl; + std::cout << expected_info << std::endl; + test_process << current_info << std::endl; + test_process << expected_info << std::endl; + + std::cout << " " << std::endl; + test_process << " " << std::endl; + + // test start + std::cout << dash << "test start" << dash << std::endl; + std::vector txn_sql_list = test_sequence.TxnSqlList(); + std::unordered_map> cur_result_set; + std::unordered_map stmt_map; + std::string table_name; + for (auto& txn_sql : txn_sql_list) { + int stmt_id = txn_sql.SqlId(); + int session_id = txn_sql.TxnId(); + std::string stmt = txn_sql.Sql(); + stmt_map[stmt_id] = stmt; + // If the current case timeout, all transactions are rollback + std::string ret_type = test_result_set.ResultType(); + auto index_T = ret_type.find("Timeout"); + auto index_R = ret_type.find("Rollback"); + if (index_T != ret_type.npos || index_R != ret_type.npos) { + for (int i = 0; i < FLAGS_conn_pool_size; i++) { + mongo_connector.KVEndTxn(session_id, stmt_id, "ROLLBACK", test_result_set); + } + break; + } + if (!MongoStmtExcutor(session_id, stmt_id, stmt, mongo_connector, test_result_set, cur_result_set, test_process_file)) { + break; + } + } + if (test_result_set.ResultType() == "") { + if (result_handler.IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), stmt_map, test_process_file)) { + test_result_set.SetResultType("Avoid\nReason: Data anomaly did not occur and the data is consistent"); + } else { + test_result_set.SetResultType("Exception\nReason: Data anomaly is not recognized by the database, resulting in data inconsistencies"); + } + } + if(!outputter.WriteResultType(test_result_set.ResultType(), test_process_file)) { + return false; + } + // release resource + kv_parser.ClearKCache(); + kv_parser.ClearCollCache(); + is_first_use = 1; + return true; +} + +bool JobExecutor::ExecAllTestSequence(std::vector& test_sequence_list, std::vector& test_result_set_list, + MongoConnector& mongo_connector, JobExecutor& job_executor) { + int len = test_sequence_list.size(); + for (int i = 0; i < len; i++) { + if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], mongo_connector)) { + std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + } else { + std::string result_type = test_result_set_list[i].ResultType(); + std::cout << "\nTest Result: " << result_type + "\n" << std::endl; + } + } + return true; +} + +int main(int argc, char* argv[]) { + // parser gflags args + google::ParseCommandLineFlags(&argc, &argv, true); + std::cout << "input param-> " << std::endl; + std::cout << " db_type: " << FLAGS_db_type << std::endl; + std::cout << " uri: " << FLAGS_uri << std::endl; + std::cout << " isolation: " << FLAGS_isolation << std::endl; + // init mongo_connector + MongoConnector mongo_connector("mongodb://9.134.39.34:27037/admin", "testdb"); + mongo_connector.InitMongoConnector(4); + // init excute obj + CaseReader case_reader; + JobExecutor job_executor; + // create test_process_output_file's dir + if (access(FLAGS_db_type.c_str(), 0) == -1) { + mkdir(FLAGS_db_type.c_str(), S_IRWXU); + } + // create isolation dir + std::string iso_dir = "snapshot"; + if (access(iso_dir.c_str(), 0) == -1) { + mkdir(iso_dir.c_str(), S_IRWXU); + } + // read kv case test file + std::string test_path_base = "t/"; + std::string test_path = test_path_base + "mongodb"; + if (!case_reader.InitTestSequenceAndTestResultSetList(test_path, "mongodb")) { + std::cout << "init test sequence and test result set failed" << std::endl; + } + std::vector test_sequence_list = case_reader.TestSequenceList(); + std::vector test_result_set_list = case_reader.TestResultSetList(); + // execute all case + job_executor.ExecAllTestSequence(test_sequence_list, test_result_set_list, mongo_connector, job_executor); + // write test result total file + std::string ret_file = "./" + FLAGS_db_type + "/" + FLAGS_db_type + "_" + FLAGS_isolation + "_total-result.txt"; + outputter.WriteResultTotal(test_result_set_list, ret_file); + return 0; +} diff --git a/src/dbtest/src/kvtest.h b/src/dbtest/src/kvtest.h new file mode 100644 index 00000000..feaf5c30 --- /dev/null +++ b/src/dbtest/src/kvtest.h @@ -0,0 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "kv_cntl.h" +class JobExecutor { +public: + bool ExecAllTestSequence(std::vector& test_sequence_list, std::vector& test_result_set_list, + MongoConnector& mongo_connector, JobExecutor& job_executor); + bool ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, MongoConnector& mongo_connector); + bool MongoStmtExcutor(const int session_id, const int stmt_id, const std::string& stmt, + MongoConnector& mongo_connector, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, const std::string& test_process_file); +}; diff --git a/src/dbtest/src/mongodb_test.cc b/src/dbtest/src/mongodb_test.cc new file mode 100644 index 00000000..1c480ac0 --- /dev/null +++ b/src/dbtest/src/mongodb_test.cc @@ -0,0 +1,81 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using bsoncxx::builder::stream::close_array; +using bsoncxx::builder::stream::close_document; +using bsoncxx::builder::stream::document; +using bsoncxx::builder::stream::finalize; +using bsoncxx::builder::stream::open_array; +using bsoncxx::builder::stream::open_document; + +using bsoncxx::builder::basic::kvp; +using bsoncxx::builder::basic::make_document; +using bsoncxx::to_json; + +using namespace mongocxx; + +int main() { + // The mongocxx::instance constructor and destructor initialize and shut down the driver, + // respectively. Therefore, a mongocxx::instance must be created before using the driver and + // must remain alive for as long as the driver is in use. + //mongocxx::instance inst{}; + instance inst; + //mongocxx::client client{mongocxx::uri{"mongodb://9.134.39.34:27017/admin"}}; + client client{mongocxx::uri{"mongodb://9.134.39.34:27017/admin"}}; + write_concern wc_majority{}; + wc_majority.acknowledge_level(write_concern::level::k_majority); + + read_concern rc_snapshot{}; + rc_snapshot.acknowledge_level(read_concern::level::k_snapshot); + + read_preference rp_primary{}; + rp_primary.mode(read_preference::read_mode::k_primary); + + auto db = client["testdb"]; + + auto coll_old1 = client["testdb"]["coll1"]; + auto coll_old2 = client["testdb"]["coll2"]; + coll_old1.drop(wc_majority); + coll_old2.drop(wc_majority); + + auto coll1 = client["testdb"]["coll1"]; + auto coll2 = client["testdb"]["coll2"]; + + options::transaction opts; + opts.write_concern(wc_majority); + opts.read_concern(rc_snapshot); + opts.read_preference(rp_primary); + + auto session1 = client.start_session(); + session1.start_transaction(opts); + std::cout << "session1 start tx" << std::endl; + + auto session2 = client.start_session(); + session2.start_transaction(opts); + std::cout << "session2 start tx" << std::endl; + + auto doc_value1 = document{} << "k" << "0" << "v" << "0" << finalize; + auto doc_value2 = document{} << "k" << "1" << "v" << "0" << finalize; + + coll1.insert_one(session1, doc_value1.view()); + std::cout << "session1 insert k:0 v:0" << std::endl; + session1.commit_transaction(); + std::cout << "session1 commit" << std::endl; + + //coll2.insert_one(session2, doc_value2.view()); + + auto cursor = coll1.find(session2, document{} << "k" << "0" << finalize); + + for (auto&& doc : cursor) { + std::cout << "doc:" + to_json(doc) << std::endl; + } +} diff --git a/src/dbtest/src/odbc.cc b/src/dbtest/src/odbc.cc index 65b73a22..fafb5ecc 100644 --- a/src/dbtest/src/odbc.cc +++ b/src/dbtest/src/odbc.cc @@ -2,6 +2,18 @@ #include #include #include + +void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { + SQLINTEGER NativeErrorPtr = 0; + SQLSMALLINT TextLengthPtr = 0; + if ("stmt" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_STMT, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } + if ("dbc" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_DBC, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } +} + void exec_sql() { SQLHENV m_hEnviroment; SQLHDBC m_hDatabaseConnection; @@ -20,7 +32,7 @@ void exec_sql() { std::cout << "get conn failed" << std::endl; } ret = SQLConnect( m_hDatabaseConnection - ,(SQLCHAR*)"mysql", SQL_NTS + ,(SQLCHAR*)"mongodb", SQL_NTS ,(SQLCHAR*)"test123", SQL_NTS ,(SQLCHAR*)"Ly.123456", SQL_NTS); @@ -33,15 +45,27 @@ void exec_sql() { std::cout << "get stmt failed" << std::endl; } // execute sql - ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"INSERT INTO t1 VALUES (1, 1);", SQL_NTS); - ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"SELECT * from t1 WHERE k = 1;", SQL_NTS); + //ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"BEGIN TRANSACTION;", SQL_NTS); + //std::cout << "BEGIN TRANSACTION;" << std::endl; + //ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"update t1 set v=1 where k=1;", SQL_NTS); + //std::cout << "update t1 set v=1 where k=1;" << std::endl; + //ret = SQLExecDirect(m_hStatement, (SQLCHAR*)"COMMIT TRANSACTION;", SQL_NTS); + //std::cout << "COMMIT TRANSACTION;" << std::endl; + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { + std::cout << "success" << std::endl; + } else if (ret == SQL_ERROR) { + SQLCHAR ErrInfo[256]; + SQLCHAR SQLState[256]; + ErrInfoWithStmt("stmt", m_hStatement, ErrInfo, SQLState); + std::cerr << "execute sql: 'SELECT * from t1 WHERE k = 1;' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + } SQLCHAR k[20]={0}, v[20]={0}; SQLBindCol(m_hStatement, 1, SQL_C_CHAR, (void*)k, sizeof(k), &length); SQLBindCol(m_hStatement, 2, SQL_C_CHAR, (void*)v, sizeof(v), &length); // get next row - while(SQL_NO_DATA != SQLFetch(m_hStatement)) { - std::cout << "k:" << k << "v:" << v << std::endl; - } + //while(SQL_NO_DATA != SQLFetch(m_hStatement)) { + // std::cout << "k:" << k << "v:" << v << std::endl; + //} // release SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement); SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection); diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc new file mode 100644 index 00000000..eda89d81 --- /dev/null +++ b/src/dbtest/src/sql_cntl.cc @@ -0,0 +1,336 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "sql_cntl.h" + +std::string SQLCHARToStr(SQLCHAR* ch) { + char* ch_char = (char*)ch; + std::string ch_str = ch_char; + return ch_str; +} + +// handle_type: stmt and dbc +void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]) { + SQLINTEGER NativeErrorPtr = 0; + SQLSMALLINT TextLengthPtr = 0; + if ("stmt" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_STMT, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } + if ("dbc" == handle_type) { + SQLGetDiagRec(SQL_HANDLE_DBC, handle, 1, SQLState, &NativeErrorPtr, ErrInfo, 256, &TextLengthPtr); + } +} + +std::string DBConnector::SqlExecuteErr(int session_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); + std::string blank(blank_base*(session_id - 1), ' '); + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { + return ""; + } else if (ret == SQL_ERROR) { + SQLCHAR ErrInfo[256]; + SQLCHAR SQLState[256]; + DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); + std::string err_info = SQLCHARToStr(ErrInfo); + + auto index_not_exist = err_info.find("not exist"); + auto index_crdb_rollback = sql.find("ROLLBACK TRANSACTION"); + if (index_not_exist == err_info.npos && index_crdb_rollback == sql.npos) { + std::cout << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + if (!test_process) { + test_process << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + } + } else { + return ""; + } + + return err_info; + } else if (ret == SQL_NEED_DATA) { + std::cout << blank + "SQL_NEED_DATA" << std::endl; + test_process << blank + "SQL_NEED_DATA" << std::endl; + return "SQL_NEED_DATA"; + } else if (ret == SQL_STILL_EXECUTING) { + std::cout << blank + "SQL_STILL_EXECUTING" << std::endl; + test_process << blank + "SQL_STILL_EXECUTING" << std::endl; + return "SQL_STILL_EXECUTING"; + } else if (ret == SQL_NO_DATA) { + std::cout << blank + "SQL_NO_DATA" << std::endl; + test_process << blank + "SQL_NO_DATA" << std::endl; + return "SQL_NO_DATA"; + } else if (ret == SQL_INVALID_HANDLE) { + std::cout << blank + "SQL_INVALID_HANDLE" << std::endl; + test_process << blank + "SQL_INVALID_HANDLE" << std::endl; + return "SQL_INVALID_HANDLE"; + } else if (ret == SQL_PARAM_DATA_AVAILABLE) { + std::cout << blank + "SQL_PARAM_DATA_AVAILABLE" << std::endl; + test_process << blank + "SQL_PARAM_DATA_AVAILABLE" << std::endl; + return "SQL_PARAM_DATA_AVAILABLE"; + } else { + std::cout << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; + test_process << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; + return "unknow error"; + } +} + +bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int session_id, std::string test_process_file) { + SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret); + if (!err_info_stmt.empty()) { + std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; + return false; + } + // execute sql + if (sql_id != 1024) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + } + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret, test_process_file); + if (!err_info_sql.empty()) { + auto index_timeout1 = err_info_sql.find("timeout"); + auto index_timeout2 = err_info_sql.find("Timeout"); + auto index_timeout3 = err_info_sql.find("time out"); + if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + return true; + } else { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\nReason: " + err_info_sql; + test_result_set.SetResultType(info); + } + } + //return false; + } + // get error info + return true; +} + + +bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, + std::unordered_map>& cur_result_set, + int session_id, int param_num, std::string test_process_file) { + SQLRETURN ret; + SQLHSTMT m_hStatement; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); + + ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret); + if (!err_info_stmt.empty()) { + std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; + return false; + } + SQLLEN length; + SQLCHAR value[param_num][20] = {{0}}; + // execute sql + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); + // parse result + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret, test_process_file); + if(err_info_sql.empty()) { + // bind column data + for (int i = 0; i < param_num; i++) { + SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); + } + // get next row, and fill cur_sql_result_set + bool is_no_data = true; + while(SQL_NO_DATA != SQLFetch(m_hStatement)) { + std::string row = ""; + for (int i = 0; i < param_num; i++) { + std::string v_str = SQLCHARToStr(value[i]); + if (i == (param_num - 1)) { + row += v_str; + } else { + row += v_str + ","; + } + } + row = "(" + row + ")"; + if (cur_result_set.find(sql_id) != cur_result_set.end()) { + cur_result_set[sql_id].push_back(row); + } else { + std::vector sql_result; + sql_result.push_back(row); + cur_result_set[sql_id] = sql_result; + } + is_no_data = false; + } + if (is_no_data) { + cur_result_set[sql_id].push_back("null"); + } + outputter.PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, session_id, test_process_file); + return true; + } else { + auto index_timeout1 = err_info_sql.find("timeout"); + auto index_timeout2 = err_info_sql.find("Timeout"); + auto index_timeout3 = err_info_sql.find("time out"); + if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + return true; + } else { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\nReason: " + err_info_sql; + test_result_set.SetResultType(info); + } + } + //return false; + return true; + } +} + +bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { + if (sql_id != 1024) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "T" + std::to_string(session_id) + " execute opt: '" + opt + "'"; + std::cout << output_info << std::endl; + if (!test_process_file.empty()) { + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_info << std::endl; + } + } + if (db_type != "oracle") { + SQLRETURN ret; + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + if ("commit" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); + } else if ("rollback" == opt) { + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + } else { + std::cout << "unknow txn opt" << std::endl; + } + + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, opt, "dbc", m_hDatabaseConnection, ret, test_process_file); + if (!err_info_sql.empty()) { + if (test_result_set.ResultType().empty()) { + std::string info = "Rollback\n" + err_info_sql; + test_result_set.SetResultType(info); + } + } + } else { + TestResultSet test_result_set; + if (!DBConnector::ExecWriteSql(1024, opt, test_result_set, session_id, test_process_file)) { + return false; + } + } + return true; +} + +bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_process_file) { + SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; + std::ofstream test_process(test_process_file, std::ios::app); + if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "T" + std::to_string(session_id) + " start txn failed"; + std::cout << output_info << std::endl; + if (!test_process) { + test_process << output_info << std::endl; + } + return false; + } else { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_info = blank + "T" + std::to_string(session_id) + " start txn success"; + std::cout << output_info << std::endl; + if (!test_process) { + test_process << output_info << std::endl; + } + return true; + } +} + +bool DBConnector::SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt) { + SQLRETURN ret; + SQLUINTEGER autoCommit; + if (opt == 0) { + autoCommit = 0; + } else { + autoCommit = 1; + } + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)(long)autoCommit, 0); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cout << "set AutoCommit = 0 failed" << std::endl; + return false; + } + return true; +} + +bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string& db_type) { + std::string sql = "" ; + if (db_type == "sqlserver") { + sql = "SET LOCK_TIMEOUT " + timeout + "000" + ";"; + } else if (db_type == "ob") { + sql = "set session ob_trx_timeout=" + timeout + "000000;"; + } + if (!sql.empty()) { + TestResultSet test_result_set; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, conn_id)) { + return false; + } + } + + return true; +} + +bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { + if (db_type != "oracle" && db_type != "ob") { + SQLRETURN ret; + if (opt == "read-uncommitted") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); + } else if (opt == "read-committed") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + } else if (opt == "repeatable-read") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); + } else if (opt == "serializable") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); + } else { + std::cout << "unknow isolation level" << std::endl; + return false; + } + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, "set isolation", "dbc", m_hDatabaseConnection, ret, test_process_file); + if (!err_info_stmt.empty()) { + return false; + } + } else { + std::string iso; + if (opt == "read-committed") { + iso = "read committed"; + } else if (opt == "repeatable-read") { + iso = "repeatable read"; + } else if (opt == "serializable") { + iso = "serializable"; + } else { + std::cout << "unknow isolation level" << std::endl; + return false; + } + TestResultSet test_result_set; + std::string sql; + if (db_type == "oracle") { + sql = "alter session set isolation_level =" + iso; + } else if (db_type == "ob") { + sql = "set session transaction isolation level " + iso + ";"; + } + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } + return true; +} diff --git a/src/dbtest/src/sql_cntl.h b/src/dbtest/src/sql_cntl.h new file mode 100644 index 00000000..4721730e --- /dev/null +++ b/src/dbtest/src/sql_cntl.h @@ -0,0 +1,84 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include +#include +#include +#include "case_cntl.h" + +//db connector +class DBConnector { +private: + std::vector conn_pool_; +public: + bool InitDBConnector(std::string& user, std::string& passwd, std::string& db_type, int conn_pool_size) { + for (int i = 0; i < (int)conn_pool_size; i++) { + SQLHENV m_hEnviroment; + SQLHDBC m_hDatabaseConnection; + SQLRETURN ret; + // get env + ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get env failed" << std::endl; + return false; + } + + SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); + // get conn + ret = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "get conn failed" << std::endl; + return false; + } + // connect + ret = SQLConnect(m_hDatabaseConnection, + (SQLCHAR*)db_type.c_str(), SQL_NTS, + (SQLCHAR*)user.c_str(), SQL_NTS, + (SQLCHAR*)passwd.c_str(), SQL_NTS); + + std::string err_info_stmt = DBConnector::SqlExecuteErr(1, "connnected", "dbc", m_hDatabaseConnection, ret); + if (err_info_stmt != "") { + return false; + } + /* + if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { + std::cerr << "connected failed" << std::endl; + return false; + }*/ + conn_pool_.push_back(m_hDatabaseConnection); + } + std::cout << "init db_connector success" << std::endl; + return true; + }; + + bool SetAutoCommit(SQLHDBC m_hDatabaseConnection, int opt); + bool SetTimeout(int conn_id, std::string timeout, const std::string& db_type); + + bool ExecReadSql2Int(int sql_id, const std::string& sql, TestResultSet& test_result_set, std::unordered_map>& cur_result_set, int conn_id, int param_num, std::string test_process_file=""); + bool ExecWriteSql(int sql_id, const std::string& sql, TestResultSet& test_result_set, int conn_id, std::string test_process_file=""); + + void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]); + std::vector DBConnPool() {return conn_pool_;}; + std::string SqlExecuteErr(int session_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file=""); + + bool SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file=""); + bool SQLStartTxn(int session_id, int sql_id, std::string test_process_file=""); + bool SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int conn_id, const std::string& db_type, std::string test_process_file=""); + + void ReleaseConn() { + for (int i = 0; i < (int)conn_pool_.size(); i++) { + SQLFreeHandle(SQL_HANDLE_DBC, conn_pool_[i]); + } + }; + void ReleaseEnv(); + void Release() { + ReleaseConn(); + }; +}; diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc new file mode 100644 index 00000000..d971c25f --- /dev/null +++ b/src/dbtest/src/sqltest.cc @@ -0,0 +1,259 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "gflags/gflags.h" +#include "sqltest.h" + +DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); +DEFINE_string(user, "test123", "username"); +DEFINE_string(passwd, "Ly.123456", "password"); +DEFINE_string(db_name, "test", "create database name"); +DEFINE_int32(conn_pool_size, 4, "db_conn pool size"); +DEFINE_string(isolation, "serializable", "transation isolation level: read-uncommitted read-committed repeatable-read serializable"); +DEFINE_string(case_dir, "mysql", "test case dir name"); +DEFINE_string(timeout, "2", "timeout"); + +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + std::cout << test_process_file << std::endl; + std::ifstream test_process_tmp(test_process_file); + if (test_process_tmp) { + std::remove(test_process_file.c_str()); + } + std::ofstream test_process(test_process_file, std::ios::app); + + if (!test_process) { + std::cout << "create test_process_file failed" << std::endl; + } + + test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + + std::string test_case_type = test_sequence.TestCaseType(); + auto index_t = test_case_type.find_first_of("_"); + if (index_t != test_case_type.npos) { + test_case_type = test_case_type.substr(int(index_t) + 1); + } + test_process << "#### test_type: " + test_case_type + " ####" << std::endl; + test_process << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::cout << "#### test_type: " + test_case_type + " ####" << std::endl; + std::cout << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::string current_info = "current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas"; + std::string expected_info = "expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory"; + std::cout << current_info << std::endl; + std::cout << expected_info << std::endl; + test_process << current_info << std::endl; + test_process << expected_info << std::endl; + + std::cout << " " << std::endl; + test_process << " " << std::endl; + + if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { + test_process << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl; + } + + std::vector txn_sql_list = test_sequence.TxnSqlList(); + std::cout << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; + test_process << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; + //int i = 0; + std::unordered_map> cur_result_set; + std::unordered_map sql_map; + std::string table_name; + int sql_id_old; + for (auto& txn_sql : txn_sql_list) { + int sql_id = txn_sql.SqlId(); + int txn_id = txn_sql.TxnId(); + std::string sql = txn_sql.Sql(); + sql_map[sql_id] = sql; + + std::string ret_type = test_result_set.ResultType(); + auto index_T = ret_type.find("Timeout"); + auto index_R = ret_type.find("Rollback"); + if (index_T != ret_type.npos || index_R != ret_type.npos) { + for (int i = 0; i < FLAGS_conn_pool_size; i++) { + if (FLAGS_db_type != "ob") { + if (FLAGS_db_type == "crdb") { + db_connector.ExecWriteSql(1024, "ROLLBACK TRANSACTION", test_result_set, i + 1); + } else { + db_connector.SQLEndTnx("rollback", i + 1, 1024, test_result_set, FLAGS_db_type); + } + } + } + break; + } + + auto index_read = sql.find("SELECT"); + auto index_read_1 = sql.find("select"); + auto index_begin = sql.find("BEGIN"); + auto index_begin_1 = sql.find("begin"); + auto index_commit = sql.find("COMMIT"); + auto index_commit_1 = sql.find("commit"); + auto index_rollback = sql.find("ROLLBACK"); + auto index_rollback_1 = sql.find("rollback"); + + if (sql_id == 1 && sql_id_old == 0) { + std::cout << "" << std::endl; + test_process << "" << std::endl; + std::cout << dash + test_sequence.TestCaseType() + " test run" + dash << std::endl; + test_process << dash + test_sequence.TestCaseType() + " test run" + dash << std::endl; + } + if (index_read != sql.npos || index_read_1 != sql.npos) { + if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, cur_result_set, txn_id, test_sequence.ParamNum(), test_process_file)) { + return false; + } + } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { + if (FLAGS_db_type == "tidb") { + if (!db_connector.ExecWriteSql(0, "BEGIN PESSIMISTIC;", test_result_set, txn_id)) { + return false; + } + } else { + if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { + return false; + } + // set pg lock timeout + if (FLAGS_db_type == "pg") { + std::string sql_timeout = "SET LOCAL lock_timeout = '" + FLAGS_timeout + "s';"; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id)) { + return false; + } + } + } + } else { + if (FLAGS_db_type == "crdb") { + if (!db_connector.ExecWriteSql(0, "BEGIN TRANSACTION;", test_result_set, txn_id, test_process_file)) { + return false; + } + } else { + if (!db_connector.ExecWriteSql(0, "BEGIN;", test_result_set, txn_id, test_process_file)) { + return false; + } + } + } + } else if (index_commit != sql.npos || index_commit_1 != sql.npos) { + if (FLAGS_db_type != "crdb") { + if (!db_connector.SQLEndTnx("commit", txn_id, sql_id, test_result_set, test_process_file)) { + return false; + } + } else { + if (!db_connector.ExecWriteSql(0, "COMMIT TRANSACTION;", test_result_set, txn_id, test_process_file)) { + return false; + } + } + } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, test_process_file)) { + return false; + } + } else { + if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id, test_process_file)) { + return false; + } + } + sql_id_old = sql_id; + } + if (test_result_set.ResultType() == "") { + if (result_handler.IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), sql_map, test_process_file)) { + test_result_set.SetResultType("Avoid\nReason: Data anomaly did not occur and the data is consistent"); + } else { + test_result_set.SetResultType("Exception\nReason: Data anomaly is not recognized by the database, resulting in data inconsistencies"); + } + } + if(!outputter.WriteResultType(test_result_set.ResultType(), test_process_file)) { + return false; + } + return true; +} + +int main(int argc, char* argv[]) { + // parse gflags args + google::ParseCommandLineFlags(&argc, &argv, true); + std::cout << "input param-> " << std::endl; + std::cout << " db_type: " + FLAGS_db_type << std::endl; + std::cout << " user: " + FLAGS_user << std::endl; + std::cout << " passwd: " + FLAGS_passwd << std::endl; + std::cout << " isolation: " + FLAGS_isolation << std::endl; + // read test sequence + CaseReader case_reader; + std::string test_path_base = "t/"; + std::string test_path = test_path_base + FLAGS_db_type; + if (!case_reader.InitTestSequenceAndTestResultSetList(test_path, FLAGS_db_type)) { + std::cout << "init test sequence and test result set failed" << std::endl; + } + + std::vector test_sequence_list = case_reader.TestSequenceList(); + std::vector test_result_set_list = case_reader.TestResultSetList(); + + // init db_connector + std::cout << dash + "init db_connector start" + dash << std::endl; + DBConnector db_connector; + if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + std::cout << "init db_connector failed" << std::endl; + } + // init database + /* + if (FLAGS_db_type != "crdb") { + if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { + std::cout << dash + "init database start" + dash << std::endl; + TestResultSet test_rs__; + db_connector.ExecWriteSql(0, "create database if not exists " + FLAGS_db_name, test_rs__, 1); + db_connector.ExecWriteSql(0, "use " + FLAGS_db_name, test_rs__, 1); + } + }*/ + + // set TXN_ISOLATION + // crdb has only one isolation level, which is serializable by default + if (FLAGS_db_type != "crdb" && FLAGS_db_type != "mongodb") { + std::cout << dash + "set TXN_ISOLATION = " + FLAGS_isolation + dash << std::endl; + //std::cout << dash + "set TIMEOUT = " + FLAGS_timeout + dash << std::endl; + int idx = 1; + for (auto hdbc : db_connector.DBConnPool()) { + // set timeout + if (!db_connector.SetTimeout(idx, FLAGS_timeout, FLAGS_db_type)) { + return false; + } + if(!db_connector.SetIsolationLevel(hdbc, FLAGS_isolation, idx, FLAGS_db_type)) { + return false; + } + idx++; + } + std::cout << "set TXN_ISOLATION = " + FLAGS_isolation + " success"<< std::endl; + } + + // create test_process_output_file's dir + if (access(FLAGS_db_type.c_str(), 0) == -1) { + mkdir(FLAGS_db_type.c_str(), S_IRWXU); + } + // create isolation dir + std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable"}; + for (auto iso : iso_list) { + std::string iso_dir = FLAGS_db_type + "/" + iso; + if (access(iso_dir.c_str(), 0) == -1) { + mkdir(iso_dir.c_str(), S_IRWXU); + } + } + // send sql + JobExecutor job_executor; + int len = test_sequence_list.size(); + for (int i = 0; i < len; i++) { + if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { + std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; + } else { + std::string result_type = test_result_set_list[i].ResultType(); + std::cout << "Test Result: " << result_type + "\n" << std::endl; + } + } + std::string ret_file = "./" + FLAGS_db_type + "/" + FLAGS_db_type + "_" + FLAGS_isolation + "_total-result.txt"; + outputter.WriteResultTotal(test_result_set_list, ret_file); + db_connector.ReleaseConn(); + + return 0; +} diff --git a/src/dbtest/src/sqltest.h b/src/dbtest/src/sqltest.h new file mode 100644 index 00000000..eaf0d8fa --- /dev/null +++ b/src/dbtest/src/sqltest.h @@ -0,0 +1,16 @@ +/* + * Tencent is pleased to support the open source community by making 3TS available. + * + * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. The below software + * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All + * Tencent Modifications are Copyright (C) THL A29 Limited. + * + * Author: farrisli (farrisli@tencent.com) + * + */ +#include "sql_cntl.h" +class JobExecutor { +public: + bool ExecAllTestSequence(std::vector test_sequence_list); + bool ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector); +}; diff --git a/src/dbtest/src/total_permutation.cc b/src/dbtest/src/total_permutation.cc deleted file mode 100644 index c9f1f42a..00000000 --- a/src/dbtest/src/total_permutation.cc +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include -#include -#include -std::string file_name = "./long-fork-anomaly.log"; - -int main() { - std::vector txn_sequence; - txn_sequence.push_back("1;BEGIN;select * from t1 where k=0;select * from t1 where k=1;commit;"); - txn_sequence.push_back("2;BEGIN;select * from t1 where k=1;select * from t1 where k=0;commit;"); - txn_sequence.push_back("3;BEGIN;update t1 set v=1 where k=0;commit;"); - txn_sequence.push_back("4;BEGIN;update t1 set v=1 where k=1;commit;"); - while (next_permutation(txn_sequence.begin(), txn_sequence.end())) { - std::ofstream out(file_name, std::ios::app); - out << txn_sequence[0] << std::endl; - out << txn_sequence[1] << std::endl; - out << txn_sequence[2] << std::endl; - out << txn_sequence[3] << std::endl; - out << "" << std::endl; - } - return 0; -} From 709abc77ff41a52e368b300f5d00e7100264257f Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Tue, 20 Apr 2021 18:07:08 +0800 Subject: [PATCH 12/81] Update test cases --- .gitignore | 1 - src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt | 1 + src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt | 1 + src/dbtest/CMakeFiles/TargetDirectories.txt | 2 + src/dbtest/CMakeLists.txt | 64 ++++++++++ src/dbtest/do_test_list.txt | 55 +++++++++ src/dbtest/t/crdb/aborted-reads.txt | 16 +++ .../t/crdb/causality-violation-anomaly.txt | 49 ++++++++ src/dbtest/t/crdb/cross-phantom.txt | 104 +++++++++++++++++ src/dbtest/t/crdb/cross-phenomenon.txt | 106 +++++++++++++++++ src/dbtest/t/crdb/dirty-read.txt | 15 +++ src/dbtest/t/crdb/dirty-write1.txt | 17 +++ src/dbtest/t/crdb/dirty-write2.txt | 17 +++ src/dbtest/t/crdb/double-write-skew1-1.txt | 22 ++++ src/dbtest/t/crdb/double-write-skew1-2.txt | 22 ++++ src/dbtest/t/crdb/double-write-skew1-3.txt | 22 ++++ src/dbtest/t/crdb/double-write-skew2.txt | 24 ++++ src/dbtest/t/crdb/fractured-reads.txt | 29 +++++ src/dbtest/t/crdb/full-write-skew1.txt | 20 ++++ src/dbtest/t/crdb/full-write-skew2.txt | 20 ++++ .../t/crdb/half-predicate-read-skew.txt | 23 ++++ .../t/crdb/half-predicate-write-skew.txt | 24 ++++ src/dbtest/t/crdb/intermediate-reads.txt | 21 ++++ src/dbtest/t/crdb/intermediate-write1.txt | 18 +++ src/dbtest/t/crdb/intermediate-write2.txt | 18 +++ src/dbtest/t/crdb/long-fork-anomaly.txt | 106 +++++++++++++++++ src/dbtest/t/crdb/lost-self-update1.txt | 20 ++++ src/dbtest/t/crdb/lost-self-update2.txt | 20 ++++ src/dbtest/t/crdb/lost-update1.txt | 20 ++++ src/dbtest/t/crdb/lost-update2.txt | 20 ++++ src/dbtest/t/crdb/middle-read.txt | 20 ++++ src/dbtest/t/crdb/non-repeatable-read1.txt | 22 ++++ src/dbtest/t/crdb/non-repeatable-read2.txt | 22 ++++ src/dbtest/t/crdb/phantom-read.txt | 21 ++++ src/dbtest/t/crdb/predicate-sawtooth.txt | 48 ++++++++ src/dbtest/t/crdb/primary-colors.txt | 28 +++++ src/dbtest/t/crdb/primary-colors2.txt | 44 +++++++ src/dbtest/t/crdb/rat-special.txt | 52 +++++++++ src/dbtest/t/crdb/rat-special2.txt | 52 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 38 ++++++ .../t/crdb/read-only-transaction-anomaly.txt | 63 ++++++++++ src/dbtest/t/crdb/read-skew1.txt | 24 ++++ src/dbtest/t/crdb/read-skew2.txt | 24 ++++ src/dbtest/t/crdb/read-skew3.txt | 24 ++++ src/dbtest/t/crdb/read-write-skew1-1.txt | 22 ++++ src/dbtest/t/crdb/read-write-skew1-2.txt | 22 ++++ src/dbtest/t/crdb/read-write-skew2.txt | 22 ++++ src/dbtest/t/crdb/sawtooth.txt | 51 ++++++++ .../t/crdb/serial-concurrent-phenomenon.txt | 30 +++++ src/dbtest/t/crdb/step-read-skew.txt | 43 +++++++ src/dbtest/t/crdb/step-wat.txt | 73 ++++++++++++ .../t/crdb/total-diff-predicate-read-skew.txt | 22 ++++ .../crdb/total-diff-predicate-write-skew.txt | 22 ++++ .../t/crdb/total-same-predicate-read-skew.txt | 23 ++++ .../crdb/total-same-predicate-read-skew2.txt | 26 +++++ .../crdb/total-same-predicate-write-skew.txt | 22 ++++ src/dbtest/t/crdb/unnamed-anomaly.txt | 66 +++++++++++ src/dbtest/t/crdb/write-read-skew1.txt | 27 +++++ src/dbtest/t/crdb/write-read-skew2.txt | 25 ++++ src/dbtest/t/crdb/write-skew-black-white.txt | 23 ++++ .../t/crdb/write-skew-intersecting-data.txt | 27 +++++ .../crdb/write-skew-overdraft-protection.txt | 23 ++++ src/dbtest/t/crdb/write-skew.txt | 24 ++++ src/dbtest/t/mongodb/aborted-reads.txt | 16 +++ .../t/mongodb/causality-violation-anomaly.txt | 46 ++++++++ src/dbtest/t/mongodb/cross-phantom.txt | 101 ++++++++++++++++ src/dbtest/t/mongodb/cross-phenomenon.txt | 103 +++++++++++++++++ src/dbtest/t/mongodb/dirty-read.txt | 12 ++ src/dbtest/t/mongodb/dirty-write1.txt | 14 +++ src/dbtest/t/mongodb/dirty-write2.txt | 14 +++ src/dbtest/t/mongodb/double-write-skew1-1.txt | 19 +++ src/dbtest/t/mongodb/double-write-skew1-2.txt | 19 +++ src/dbtest/t/mongodb/double-write-skew1-3.txt | 19 +++ src/dbtest/t/mongodb/double-write-skew2.txt | 21 ++++ src/dbtest/t/mongodb/fractured-reads.txt | 26 +++++ src/dbtest/t/mongodb/full-write-skew1.txt | 17 +++ src/dbtest/t/mongodb/full-write-skew2.txt | 17 +++ .../t/mongodb/half-predicate-read-skew.txt | 20 ++++ .../t/mongodb/half-predicate-write-skew.txt | 20 ++++ src/dbtest/t/mongodb/intermediate-reads.txt | 18 +++ src/dbtest/t/mongodb/intermediate-write1.txt | 15 +++ src/dbtest/t/mongodb/intermediate-write2.txt | 15 +++ src/dbtest/t/mongodb/long-fork-anomaly.txt | 103 +++++++++++++++++ src/dbtest/t/mongodb/lost-self-update1.txt | 17 +++ src/dbtest/t/mongodb/lost-self-update2.txt | 17 +++ src/dbtest/t/mongodb/lost-update1.txt | 17 +++ src/dbtest/t/mongodb/lost-update2.txt | 17 +++ src/dbtest/t/mongodb/middle-read.txt | 22 ++++ src/dbtest/t/mongodb/non-repeatable-read1.txt | 19 +++ src/dbtest/t/mongodb/non-repeatable-read2.txt | 19 +++ src/dbtest/t/mongodb/phantom-read.txt | 23 ++++ src/dbtest/t/mongodb/predicate-sawtooth.txt | 45 ++++++++ src/dbtest/t/mongodb/primary-colors.txt | 27 +++++ src/dbtest/t/mongodb/primary-colors2.txt | 44 +++++++ src/dbtest/t/mongodb/rat-special.txt | 48 ++++++++ src/dbtest/t/mongodb/rat-special2.txt | 48 ++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../mongodb/read-only-transaction-anomaly.txt | 60 ++++++++++ src/dbtest/t/mongodb/read-skew1.txt | 21 ++++ src/dbtest/t/mongodb/read-skew2.txt | 21 ++++ src/dbtest/t/mongodb/read-skew3.txt | 21 ++++ src/dbtest/t/mongodb/read-write-skew1-1.txt | 19 +++ src/dbtest/t/mongodb/read-write-skew1-2.txt | 19 +++ src/dbtest/t/mongodb/read-write-skew2.txt | 19 +++ src/dbtest/t/mongodb/sawtooth.txt | 48 ++++++++ .../mongodb/serial-concurrent-phenomenon.txt | 27 +++++ src/dbtest/t/mongodb/step-read-skew.txt | 40 +++++++ src/dbtest/t/mongodb/step-wat.txt | 70 +++++++++++ .../total-diff-predicate-read-skew.txt | 19 +++ .../total-diff-predicate-write-skew.txt | 19 +++ .../total-same-predicate-read-skew.txt | 20 ++++ .../total-same-predicate-read-skew2.txt | 23 ++++ .../total-same-predicate-write-skew.txt | 19 +++ src/dbtest/t/mongodb/unnamed-anomaly.txt | 63 ++++++++++ src/dbtest/t/mongodb/write-read-skew1.txt | 21 ++++ src/dbtest/t/mongodb/write-read-skew2.txt | 22 ++++ .../t/mongodb/write-skew-black-white.txt | 20 ++++ .../mongodb/write-skew-intersecting-data.txt | 26 +++++ .../write-skew-overdraft-protection.txt | 27 +++++ src/dbtest/t/mongodb/write-skew.txt | 21 ++++ src/dbtest/t/mysql/aborted-reads.txt | 18 +++ .../t/mysql/causality-violation-anomaly.txt | 51 ++++++++ src/dbtest/t/mysql/cross-phantom.txt | 106 +++++++++++++++++ src/dbtest/t/mysql/cross-phenomenon.txt | 108 +++++++++++++++++ src/dbtest/t/mysql/dirty-read.txt | 17 +++ src/dbtest/t/mysql/dirty-write1.txt | 19 +++ src/dbtest/t/mysql/dirty-write2.txt | 19 +++ src/dbtest/t/mysql/double-write-skew1-1.txt | 24 ++++ src/dbtest/t/mysql/double-write-skew1-2.txt | 24 ++++ src/dbtest/t/mysql/double-write-skew1-3.txt | 24 ++++ src/dbtest/t/mysql/double-write-skew2.txt | 26 +++++ src/dbtest/t/mysql/fractured-reads.txt | 31 +++++ src/dbtest/t/mysql/full-write-skew1.txt | 22 ++++ src/dbtest/t/mysql/full-write-skew2.txt | 22 ++++ .../t/mysql/half-predicate-read-skew.txt | 25 ++++ .../t/mysql/half-predicate-write-skew.txt | 26 +++++ src/dbtest/t/mysql/intermediate-reads.txt | 23 ++++ src/dbtest/t/mysql/intermediate-write1.txt | 20 ++++ src/dbtest/t/mysql/intermediate-write2.txt | 20 ++++ src/dbtest/t/mysql/long-fork-anomaly.txt | 108 +++++++++++++++++ src/dbtest/t/mysql/lost-self-update1.txt | 22 ++++ src/dbtest/t/mysql/lost-self-update2.txt | 22 ++++ src/dbtest/t/mysql/lost-update1.txt | 22 ++++ src/dbtest/t/mysql/lost-update2.txt | 22 ++++ src/dbtest/t/mysql/middle-read.txt | 22 ++++ src/dbtest/t/mysql/non-repeatable-read1.txt | 24 ++++ src/dbtest/t/mysql/non-repeatable-read2.txt | 24 ++++ src/dbtest/t/mysql/phantom-read.txt | 23 ++++ src/dbtest/t/mysql/predicate-sawtooth.txt | 50 ++++++++ src/dbtest/t/mysql/primary-colors.txt | 30 +++++ src/dbtest/t/mysql/primary-colors2.txt | 44 +++++++ src/dbtest/t/mysql/rat-special.txt | 53 +++++++++ src/dbtest/t/mysql/rat-special2.txt | 53 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../t/mysql/read-only-transaction-anomaly.txt | 65 +++++++++++ src/dbtest/t/mysql/read-skew1.txt | 26 +++++ src/dbtest/t/mysql/read-skew2.txt | 26 +++++ src/dbtest/t/mysql/read-skew3.txt | 26 +++++ src/dbtest/t/mysql/read-write-skew1-1.txt | 24 ++++ src/dbtest/t/mysql/read-write-skew1-2.txt | 24 ++++ src/dbtest/t/mysql/read-write-skew2.txt | 24 ++++ src/dbtest/t/mysql/sawtooth.txt | 53 +++++++++ .../t/mysql/serial-concurrent-phenomenon.txt | 32 +++++ src/dbtest/t/mysql/step-read-skew.txt | 45 ++++++++ src/dbtest/t/mysql/step-wat.txt | 75 ++++++++++++ .../mysql/total-diff-predicate-read-skew.txt | 24 ++++ .../mysql/total-diff-predicate-write-skew.txt | 24 ++++ .../mysql/total-same-predicate-read-skew.txt | 25 ++++ .../mysql/total-same-predicate-read-skew2.txt | 28 +++++ .../mysql/total-same-predicate-write-skew.txt | 24 ++++ src/dbtest/t/mysql/unnamed-anomaly.txt | 68 +++++++++++ src/dbtest/t/mysql/write-read-skew1.txt | 29 +++++ src/dbtest/t/mysql/write-read-skew2.txt | 27 +++++ src/dbtest/t/mysql/write-skew-black-white.txt | 25 ++++ .../t/mysql/write-skew-intersecting-data.txt | 29 +++++ .../mysql/write-skew-overdraft-protection.txt | 25 ++++ src/dbtest/t/mysql/write-skew.txt | 26 +++++ src/dbtest/t/ob/aborted-reads.txt | 17 +++ .../t/ob/causality-violation-anomaly.txt | 52 +++++++++ src/dbtest/t/ob/cross-phantom.txt | 107 +++++++++++++++++ src/dbtest/t/ob/cross-phenomenon.txt | 109 ++++++++++++++++++ src/dbtest/t/ob/dirty-read.txt | 18 +++ src/dbtest/t/ob/dirty-write1.txt | 20 ++++ src/dbtest/t/ob/dirty-write2.txt | 20 ++++ src/dbtest/t/ob/double-write-skew.txt | 24 ++++ src/dbtest/t/ob/double-write-skew1-1.txt | 25 ++++ src/dbtest/t/ob/double-write-skew1-2.txt | 25 ++++ src/dbtest/t/ob/double-write-skew1-3.txt | 25 ++++ src/dbtest/t/ob/double-write-skew2.txt | 27 +++++ src/dbtest/t/ob/fractured-reads.txt | 32 +++++ src/dbtest/t/ob/full-write-skew1.txt | 23 ++++ src/dbtest/t/ob/full-write-skew2.txt | 23 ++++ src/dbtest/t/ob/half-predicate-read-skew.txt | 26 +++++ src/dbtest/t/ob/half-predicate-write-skew.txt | 27 +++++ src/dbtest/t/ob/intermediate-reads.txt | 24 ++++ src/dbtest/t/ob/intermediate-write1.txt | 21 ++++ src/dbtest/t/ob/intermediate-write2.txt | 21 ++++ src/dbtest/t/ob/long-fork-anomaly.txt | 109 ++++++++++++++++++ src/dbtest/t/ob/lost-self-update1.txt | 23 ++++ src/dbtest/t/ob/lost-self-update2.txt | 23 ++++ src/dbtest/t/ob/lost-update.txt | 22 ++++ src/dbtest/t/ob/lost-update1.txt | 23 ++++ src/dbtest/t/ob/lost-update2.txt | 23 ++++ src/dbtest/t/ob/middle-read.txt | 22 ++++ src/dbtest/t/ob/non-repeatable-read1.txt | 25 ++++ src/dbtest/t/ob/non-repeatable-read2.txt | 25 ++++ src/dbtest/t/ob/phantom-read.txt | 23 ++++ src/dbtest/t/ob/predicate-sawtooth.txt | 51 ++++++++ src/dbtest/t/ob/primary-colors.txt | 31 +++++ src/dbtest/t/ob/primary-colors2.txt | 44 +++++++ src/dbtest/t/ob/rat-special.txt | 54 +++++++++ src/dbtest/t/ob/rat-special2.txt | 54 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../t/ob/read-only-transaction-anomaly.txt | 66 +++++++++++ src/dbtest/t/ob/read-skew1.txt | 27 +++++ src/dbtest/t/ob/read-skew2.txt | 27 +++++ src/dbtest/t/ob/read-skew3.txt | 27 +++++ src/dbtest/t/ob/read-write-skew1-1.txt | 25 ++++ src/dbtest/t/ob/read-write-skew1-2.txt | 25 ++++ src/dbtest/t/ob/read-write-skew2.txt | 25 ++++ src/dbtest/t/ob/sawtooth.txt | 54 +++++++++ .../t/ob/serial-concurrent-phenomenon.txt | 33 ++++++ src/dbtest/t/ob/step-read-skew.txt | 46 ++++++++ src/dbtest/t/ob/step-wat.txt | 69 +++++++++++ .../t/ob/total-diff-predicate-read-skew.txt | 25 ++++ .../t/ob/total-diff-predicate-write-skew.txt | 25 ++++ .../t/ob/total-same-predicate-read-skew.txt | 25 ++++ .../t/ob/total-same-predicate-read-skew2.txt | 29 +++++ .../t/ob/total-same-predicate-write-skew.txt | 25 ++++ src/dbtest/t/ob/unnamed-anomaly.txt | 69 +++++++++++ src/dbtest/t/ob/unrepeatable-read.txt | 24 ++++ src/dbtest/t/ob/write-read-skew1.txt | 30 +++++ src/dbtest/t/ob/write-read-skew2.txt | 28 +++++ src/dbtest/t/ob/write-skew-black-white.txt | 26 +++++ .../t/ob/write-skew-intersecting-data.txt | 32 +++++ .../t/ob/write-skew-overdraft-protection.txt | 27 +++++ src/dbtest/t/ob/write-skew.txt | 27 +++++ src/dbtest/t/oracle/aborted-reads.txt | 17 +++ .../t/oracle/causality-violation-anomaly.txt | 52 +++++++++ src/dbtest/t/oracle/cross-phantom.txt | 107 +++++++++++++++++ src/dbtest/t/oracle/cross-phenomenon.txt | 109 ++++++++++++++++++ src/dbtest/t/oracle/dirty-read.txt | 18 +++ src/dbtest/t/oracle/dirty-write1.txt | 20 ++++ src/dbtest/t/oracle/dirty-write2.txt | 20 ++++ src/dbtest/t/oracle/double-write-skew.txt | 24 ++++ src/dbtest/t/oracle/double-write-skew1-1.txt | 25 ++++ src/dbtest/t/oracle/double-write-skew1-2.txt | 25 ++++ src/dbtest/t/oracle/double-write-skew1-3.txt | 25 ++++ src/dbtest/t/oracle/double-write-skew2.txt | 27 +++++ src/dbtest/t/oracle/fractured-reads.txt | 32 +++++ src/dbtest/t/oracle/full-write-skew1.txt | 23 ++++ src/dbtest/t/oracle/full-write-skew2.txt | 23 ++++ .../t/oracle/half-predicate-read-skew.txt | 26 +++++ .../t/oracle/half-predicate-write-skew.txt | 27 +++++ src/dbtest/t/oracle/intermediate-reads.txt | 24 ++++ src/dbtest/t/oracle/intermediate-write1.txt | 21 ++++ src/dbtest/t/oracle/intermediate-write2.txt | 21 ++++ src/dbtest/t/oracle/long-fork-anomaly.txt | 109 ++++++++++++++++++ src/dbtest/t/oracle/lost-self-update1.txt | 23 ++++ src/dbtest/t/oracle/lost-self-update2.txt | 23 ++++ src/dbtest/t/oracle/lost-update.txt | 22 ++++ src/dbtest/t/oracle/lost-update1.txt | 23 ++++ src/dbtest/t/oracle/lost-update2.txt | 23 ++++ src/dbtest/t/oracle/middle-read.txt | 22 ++++ src/dbtest/t/oracle/non-repeatable-read1.txt | 25 ++++ src/dbtest/t/oracle/non-repeatable-read2.txt | 25 ++++ src/dbtest/t/oracle/phantom-read.txt | 23 ++++ src/dbtest/t/oracle/predicate-sawtooth.txt | 51 ++++++++ src/dbtest/t/oracle/primary-colors.txt | 31 +++++ src/dbtest/t/oracle/primary-colors2.txt | 44 +++++++ src/dbtest/t/oracle/rat-special.txt | 54 +++++++++ src/dbtest/t/oracle/rat-special2.txt | 54 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../oracle/read-only-transaction-anomaly.txt | 66 +++++++++++ src/dbtest/t/oracle/read-skew1.txt | 27 +++++ src/dbtest/t/oracle/read-skew2.txt | 27 +++++ src/dbtest/t/oracle/read-skew3.txt | 27 +++++ src/dbtest/t/oracle/read-write-skew1-1.txt | 25 ++++ src/dbtest/t/oracle/read-write-skew1-2.txt | 25 ++++ src/dbtest/t/oracle/read-write-skew2.txt | 25 ++++ src/dbtest/t/oracle/sawtooth.txt | 54 +++++++++ .../t/oracle/serial-concurrent-phenomenon.txt | 33 ++++++ src/dbtest/t/oracle/step-read-skew.txt | 46 ++++++++ src/dbtest/t/oracle/step-wat.txt | 69 +++++++++++ .../oracle/total-diff-predicate-read-skew.txt | 25 ++++ .../total-diff-predicate-write-skew.txt | 25 ++++ .../oracle/total-same-predicate-read-skew.txt | 25 ++++ .../total-same-predicate-read-skew2.txt | 29 +++++ .../total-same-predicate-write-skew.txt | 25 ++++ src/dbtest/t/oracle/unnamed-anomaly.txt | 69 +++++++++++ src/dbtest/t/oracle/unrepeatable-read.txt | 24 ++++ src/dbtest/t/oracle/write-read-skew1.txt | 30 +++++ src/dbtest/t/oracle/write-read-skew2.txt | 28 +++++ .../t/oracle/write-skew-black-white.txt | 26 +++++ .../t/oracle/write-skew-intersecting-data.txt | 32 +++++ .../write-skew-overdraft-protection.txt | 27 +++++ src/dbtest/t/oracle/write-skew.txt | 27 +++++ src/dbtest/t/pg/aborted-reads.txt | 18 +++ .../t/pg/causality-violation-anomaly.txt | 51 ++++++++ src/dbtest/t/pg/cross-phantom.txt | 106 +++++++++++++++++ src/dbtest/t/pg/cross-phenomenon.txt | 108 +++++++++++++++++ src/dbtest/t/pg/dirty-read.txt | 18 +++ src/dbtest/t/pg/dirty-write.txt | 19 +++ src/dbtest/t/pg/dirty-write1.txt | 20 ++++ src/dbtest/t/pg/dirty-write2.txt | 19 +++ src/dbtest/t/pg/double-write-skew.txt | 24 ++++ src/dbtest/t/pg/double-write-skew1-1.txt | 24 ++++ src/dbtest/t/pg/double-write-skew1-2.txt | 24 ++++ src/dbtest/t/pg/double-write-skew1-3.txt | 24 ++++ src/dbtest/t/pg/double-write-skew2.txt | 26 +++++ src/dbtest/t/pg/fractured-reads.txt | 31 +++++ src/dbtest/t/pg/full-write-skew1.txt | 22 ++++ src/dbtest/t/pg/full-write-skew2.txt | 22 ++++ src/dbtest/t/pg/half-predicate-read-skew.txt | 25 ++++ src/dbtest/t/pg/half-predicate-write-skew.txt | 26 +++++ src/dbtest/t/pg/intermediate-reads.txt | 23 ++++ src/dbtest/t/pg/intermediate-write1.txt | 20 ++++ src/dbtest/t/pg/intermediate-write2.txt | 22 ++++ src/dbtest/t/pg/long-fork-anomaly.txt | 108 +++++++++++++++++ src/dbtest/t/pg/lost-self-update1.txt | 22 ++++ src/dbtest/t/pg/lost-self-update2.txt | 22 ++++ src/dbtest/t/pg/lost-update.txt | 22 ++++ src/dbtest/t/pg/lost-update1.txt | 22 ++++ src/dbtest/t/pg/lost-update2.txt | 22 ++++ src/dbtest/t/pg/middle-read.txt | 22 ++++ src/dbtest/t/pg/non-repeatable-read1.txt | 24 ++++ src/dbtest/t/pg/non-repeatable-read2.txt | 24 ++++ src/dbtest/t/pg/phantom-read.txt | 23 ++++ src/dbtest/t/pg/predicate-sawtooth.txt | 50 ++++++++ src/dbtest/t/pg/primary-colors.txt | 30 +++++ src/dbtest/t/pg/primary-colors2.txt | 44 +++++++ src/dbtest/t/pg/rat-special.txt | 53 +++++++++ src/dbtest/t/pg/rat-special2.txt | 53 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../t/pg/read-only-transaction-anomaly.txt | 65 +++++++++++ src/dbtest/t/pg/read-skew.txt | 26 +++++ src/dbtest/t/pg/read-skew1.txt | 27 +++++ src/dbtest/t/pg/read-skew2.txt | 26 +++++ src/dbtest/t/pg/read-skew3.txt | 26 +++++ src/dbtest/t/pg/read-write-skew1-1.txt | 24 ++++ src/dbtest/t/pg/read-write-skew1-2.txt | 24 ++++ src/dbtest/t/pg/read-write-skew2.txt | 24 ++++ src/dbtest/t/pg/sawtooth.txt | 53 +++++++++ .../t/pg/serial-concurrent-phenomenon.txt | 32 +++++ src/dbtest/t/pg/step-read-skew.txt | 45 ++++++++ src/dbtest/t/pg/step-wat.txt | 68 +++++++++++ .../t/pg/total-diff-predicate-read-skew.txt | 24 ++++ .../t/pg/total-diff-predicate-write-skew.txt | 24 ++++ .../t/pg/total-same-predicate-read-skew.txt | 25 ++++ .../t/pg/total-same-predicate-read-skew2.txt | 28 +++++ .../t/pg/total-same-predicate-write-skew.txt | 24 ++++ src/dbtest/t/pg/unnamed-anomaly.txt | 68 +++++++++++ src/dbtest/t/pg/unrepeatable-read.txt | 24 ++++ src/dbtest/t/pg/write-read-skew1.txt | 29 +++++ src/dbtest/t/pg/write-read-skew2.txt | 27 +++++ src/dbtest/t/pg/write-skew-black-white.txt | 25 ++++ .../t/pg/write-skew-intersecting-data.txt | 29 +++++ .../t/pg/write-skew-overdraft-protection.txt | 25 ++++ src/dbtest/t/pg/write-skew.txt | 26 +++++ src/dbtest/t/sqlserver/aborted-reads.txt | 18 +++ .../sqlserver/causality-violation-anomaly.txt | 51 ++++++++ src/dbtest/t/sqlserver/cross-phantom.txt | 106 +++++++++++++++++ src/dbtest/t/sqlserver/cross-phenomenon.txt | 108 +++++++++++++++++ src/dbtest/t/sqlserver/dirty-read.txt | 18 +++ src/dbtest/t/sqlserver/dirty-write.txt | 19 +++ src/dbtest/t/sqlserver/dirty-write1.txt | 20 ++++ src/dbtest/t/sqlserver/dirty-write2.txt | 19 +++ src/dbtest/t/sqlserver/double-write-skew.txt | 24 ++++ .../t/sqlserver/double-write-skew1-1.txt | 24 ++++ .../t/sqlserver/double-write-skew1-2.txt | 24 ++++ .../t/sqlserver/double-write-skew1-3.txt | 24 ++++ src/dbtest/t/sqlserver/double-write-skew2.txt | 26 +++++ src/dbtest/t/sqlserver/fractured-reads.txt | 31 +++++ src/dbtest/t/sqlserver/full-write-skew1.txt | 22 ++++ src/dbtest/t/sqlserver/full-write-skew2.txt | 22 ++++ .../t/sqlserver/half-predicate-read-skew.txt | 25 ++++ .../t/sqlserver/half-predicate-write-skew.txt | 26 +++++ src/dbtest/t/sqlserver/intermediate-reads.txt | 23 ++++ .../t/sqlserver/intermediate-write1.txt | 20 ++++ .../t/sqlserver/intermediate-write2.txt | 20 ++++ src/dbtest/t/sqlserver/long-fork-anomaly.txt | 108 +++++++++++++++++ src/dbtest/t/sqlserver/lost-self-update1.txt | 22 ++++ src/dbtest/t/sqlserver/lost-self-update2.txt | 22 ++++ src/dbtest/t/sqlserver/lost-update.txt | 22 ++++ src/dbtest/t/sqlserver/lost-update1.txt | 22 ++++ src/dbtest/t/sqlserver/lost-update2.txt | 22 ++++ src/dbtest/t/sqlserver/middle-read.txt | 22 ++++ .../t/sqlserver/non-repeatable-read1.txt | 24 ++++ .../t/sqlserver/non-repeatable-read2.txt | 24 ++++ src/dbtest/t/sqlserver/phantom-read.txt | 23 ++++ src/dbtest/t/sqlserver/predicate-sawtooth.txt | 50 ++++++++ src/dbtest/t/sqlserver/primary-colors.txt | 30 +++++ src/dbtest/t/sqlserver/primary-colors2.txt | 44 +++++++ src/dbtest/t/sqlserver/rat-special.txt | 53 +++++++++ src/dbtest/t/sqlserver/rat-special2.txt | 53 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../read-only-transaction-anomaly.txt | 65 +++++++++++ src/dbtest/t/sqlserver/read-skew.txt | 26 +++++ src/dbtest/t/sqlserver/read-skew1.txt | 27 +++++ src/dbtest/t/sqlserver/read-skew2.txt | 26 +++++ src/dbtest/t/sqlserver/read-skew3.txt | 26 +++++ src/dbtest/t/sqlserver/read-write-skew1-1.txt | 24 ++++ src/dbtest/t/sqlserver/read-write-skew1-2.txt | 24 ++++ src/dbtest/t/sqlserver/read-write-skew2.txt | 24 ++++ src/dbtest/t/sqlserver/sawtooth.txt | 53 +++++++++ .../serial-concurrent-phenomenon.txt | 32 +++++ src/dbtest/t/sqlserver/step-read-skew.txt | 45 ++++++++ src/dbtest/t/sqlserver/step-wat.txt | 68 +++++++++++ .../total-diff-predicate-read-skew.txt | 24 ++++ .../total-diff-predicate-write-skew.txt | 24 ++++ .../total-same-predicate-read-skew.txt | 25 ++++ .../total-same-predicate-read-skew2.txt | 28 +++++ .../total-same-predicate-write-skew.txt | 24 ++++ src/dbtest/t/sqlserver/unnamed-anomaly.txt | 68 +++++++++++ src/dbtest/t/sqlserver/unrepeatable-read.txt | 24 ++++ src/dbtest/t/sqlserver/write-read-skew1.txt | 29 +++++ src/dbtest/t/sqlserver/write-read-skew2.txt | 27 +++++ .../t/sqlserver/write-skew-black-white.txt | 25 ++++ .../write-skew-intersecting-data.txt | 29 +++++ .../write-skew-overdraft-protection.txt | 25 ++++ src/dbtest/t/sqlserver/write-skew.txt | 26 +++++ src/dbtest/t/tidb/aborted-reads.txt | 18 +++ .../t/tidb/causality-violation-anomaly.txt | 51 ++++++++ src/dbtest/t/tidb/cross-phantom.txt | 106 +++++++++++++++++ src/dbtest/t/tidb/cross-phenomenon.txt | 108 +++++++++++++++++ src/dbtest/t/tidb/dirty-read.txt | 17 +++ src/dbtest/t/tidb/dirty-write1.txt | 19 +++ src/dbtest/t/tidb/dirty-write2.txt | 19 +++ src/dbtest/t/tidb/double-write-skew1-1.txt | 24 ++++ src/dbtest/t/tidb/double-write-skew1-2.txt | 24 ++++ src/dbtest/t/tidb/double-write-skew1-3.txt | 24 ++++ src/dbtest/t/tidb/double-write-skew2.txt | 26 +++++ src/dbtest/t/tidb/fractured-reads.txt | 31 +++++ src/dbtest/t/tidb/full-write-skew1.txt | 22 ++++ src/dbtest/t/tidb/full-write-skew2.txt | 22 ++++ .../t/tidb/half-predicate-read-skew.txt | 25 ++++ .../t/tidb/half-predicate-write-skew.txt | 26 +++++ src/dbtest/t/tidb/intermediate-reads.txt | 23 ++++ src/dbtest/t/tidb/intermediate-write1.txt | 20 ++++ src/dbtest/t/tidb/intermediate-write2.txt | 20 ++++ src/dbtest/t/tidb/long-fork-anomaly.txt | 108 +++++++++++++++++ src/dbtest/t/tidb/lost-self-update1.txt | 22 ++++ src/dbtest/t/tidb/lost-self-update2.txt | 22 ++++ src/dbtest/t/tidb/lost-update1.txt | 22 ++++ src/dbtest/t/tidb/lost-update2.txt | 22 ++++ src/dbtest/t/tidb/middle-read.txt | 22 ++++ src/dbtest/t/tidb/non-repeatable-read1.txt | 24 ++++ src/dbtest/t/tidb/non-repeatable-read2.txt | 24 ++++ src/dbtest/t/tidb/phantom-read.txt | 23 ++++ src/dbtest/t/tidb/predicate-sawtooth.txt | 50 ++++++++ src/dbtest/t/tidb/primary-colors.txt | 30 +++++ src/dbtest/t/tidb/primary-colors2.txt | 44 +++++++ src/dbtest/t/tidb/rat-special.txt | 53 +++++++++ src/dbtest/t/tidb/rat-special2.txt | 53 +++++++++ ...nly-transaction-anomaly-deposit-report.txt | 40 +++++++ .../t/tidb/read-only-transaction-anomaly.txt | 65 +++++++++++ src/dbtest/t/tidb/read-skew1.txt | 26 +++++ src/dbtest/t/tidb/read-skew2.txt | 26 +++++ src/dbtest/t/tidb/read-skew3.txt | 26 +++++ src/dbtest/t/tidb/read-write-skew1-1.txt | 24 ++++ src/dbtest/t/tidb/read-write-skew1-2.txt | 24 ++++ src/dbtest/t/tidb/read-write-skew2.txt | 24 ++++ src/dbtest/t/tidb/sawtooth.txt | 53 +++++++++ .../t/tidb/serial-concurrent-phenomenon.txt | 32 +++++ src/dbtest/t/tidb/step-read-skew.txt | 45 ++++++++ src/dbtest/t/tidb/step-wat.txt | 75 ++++++++++++ .../t/tidb/total-diff-predicate-read-skew.txt | 24 ++++ .../tidb/total-diff-predicate-write-skew.txt | 24 ++++ .../t/tidb/total-same-predicate-read-skew.txt | 25 ++++ .../tidb/total-same-predicate-read-skew2.txt | 28 +++++ .../tidb/total-same-predicate-write-skew.txt | 24 ++++ src/dbtest/t/tidb/unnamed-anomaly.txt | 68 +++++++++++ src/dbtest/t/tidb/write-read-skew1.txt | 29 +++++ src/dbtest/t/tidb/write-read-skew2.txt | 27 +++++ src/dbtest/t/tidb/write-skew-black-white.txt | 25 ++++ .../t/tidb/write-skew-intersecting-data.txt | 29 +++++ .../tidb/write-skew-overdraft-protection.txt | 25 ++++ src/dbtest/t/tidb/write-skew.txt | 26 +++++ 478 files changed, 15878 insertions(+), 1 deletion(-) create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt create mode 100644 src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt create mode 100644 src/dbtest/CMakeFiles/TargetDirectories.txt create mode 100644 src/dbtest/CMakeLists.txt create mode 100644 src/dbtest/do_test_list.txt create mode 100644 src/dbtest/t/crdb/aborted-reads.txt create mode 100644 src/dbtest/t/crdb/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/crdb/cross-phantom.txt create mode 100644 src/dbtest/t/crdb/cross-phenomenon.txt create mode 100644 src/dbtest/t/crdb/dirty-read.txt create mode 100644 src/dbtest/t/crdb/dirty-write1.txt create mode 100644 src/dbtest/t/crdb/dirty-write2.txt create mode 100644 src/dbtest/t/crdb/double-write-skew1-1.txt create mode 100644 src/dbtest/t/crdb/double-write-skew1-2.txt create mode 100644 src/dbtest/t/crdb/double-write-skew1-3.txt create mode 100644 src/dbtest/t/crdb/double-write-skew2.txt create mode 100644 src/dbtest/t/crdb/fractured-reads.txt create mode 100644 src/dbtest/t/crdb/full-write-skew1.txt create mode 100644 src/dbtest/t/crdb/full-write-skew2.txt create mode 100644 src/dbtest/t/crdb/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/crdb/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/crdb/intermediate-reads.txt create mode 100644 src/dbtest/t/crdb/intermediate-write1.txt create mode 100644 src/dbtest/t/crdb/intermediate-write2.txt create mode 100644 src/dbtest/t/crdb/long-fork-anomaly.txt create mode 100644 src/dbtest/t/crdb/lost-self-update1.txt create mode 100644 src/dbtest/t/crdb/lost-self-update2.txt create mode 100644 src/dbtest/t/crdb/lost-update1.txt create mode 100644 src/dbtest/t/crdb/lost-update2.txt create mode 100644 src/dbtest/t/crdb/middle-read.txt create mode 100644 src/dbtest/t/crdb/non-repeatable-read1.txt create mode 100644 src/dbtest/t/crdb/non-repeatable-read2.txt create mode 100644 src/dbtest/t/crdb/phantom-read.txt create mode 100644 src/dbtest/t/crdb/predicate-sawtooth.txt create mode 100644 src/dbtest/t/crdb/primary-colors.txt create mode 100644 src/dbtest/t/crdb/primary-colors2.txt create mode 100644 src/dbtest/t/crdb/rat-special.txt create mode 100644 src/dbtest/t/crdb/rat-special2.txt create mode 100644 src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/crdb/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/crdb/read-skew1.txt create mode 100644 src/dbtest/t/crdb/read-skew2.txt create mode 100644 src/dbtest/t/crdb/read-skew3.txt create mode 100644 src/dbtest/t/crdb/read-write-skew1-1.txt create mode 100644 src/dbtest/t/crdb/read-write-skew1-2.txt create mode 100644 src/dbtest/t/crdb/read-write-skew2.txt create mode 100644 src/dbtest/t/crdb/sawtooth.txt create mode 100644 src/dbtest/t/crdb/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/crdb/step-read-skew.txt create mode 100644 src/dbtest/t/crdb/step-wat.txt create mode 100644 src/dbtest/t/crdb/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/crdb/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/crdb/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/crdb/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/crdb/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/crdb/unnamed-anomaly.txt create mode 100644 src/dbtest/t/crdb/write-read-skew1.txt create mode 100644 src/dbtest/t/crdb/write-read-skew2.txt create mode 100644 src/dbtest/t/crdb/write-skew-black-white.txt create mode 100644 src/dbtest/t/crdb/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/crdb/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/crdb/write-skew.txt create mode 100644 src/dbtest/t/mongodb/aborted-reads.txt create mode 100644 src/dbtest/t/mongodb/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/mongodb/cross-phantom.txt create mode 100644 src/dbtest/t/mongodb/cross-phenomenon.txt create mode 100644 src/dbtest/t/mongodb/dirty-read.txt create mode 100644 src/dbtest/t/mongodb/dirty-write1.txt create mode 100644 src/dbtest/t/mongodb/dirty-write2.txt create mode 100644 src/dbtest/t/mongodb/double-write-skew1-1.txt create mode 100644 src/dbtest/t/mongodb/double-write-skew1-2.txt create mode 100644 src/dbtest/t/mongodb/double-write-skew1-3.txt create mode 100644 src/dbtest/t/mongodb/double-write-skew2.txt create mode 100644 src/dbtest/t/mongodb/fractured-reads.txt create mode 100644 src/dbtest/t/mongodb/full-write-skew1.txt create mode 100644 src/dbtest/t/mongodb/full-write-skew2.txt create mode 100644 src/dbtest/t/mongodb/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/mongodb/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/mongodb/intermediate-reads.txt create mode 100644 src/dbtest/t/mongodb/intermediate-write1.txt create mode 100644 src/dbtest/t/mongodb/intermediate-write2.txt create mode 100644 src/dbtest/t/mongodb/long-fork-anomaly.txt create mode 100644 src/dbtest/t/mongodb/lost-self-update1.txt create mode 100644 src/dbtest/t/mongodb/lost-self-update2.txt create mode 100644 src/dbtest/t/mongodb/lost-update1.txt create mode 100644 src/dbtest/t/mongodb/lost-update2.txt create mode 100644 src/dbtest/t/mongodb/middle-read.txt create mode 100644 src/dbtest/t/mongodb/non-repeatable-read1.txt create mode 100644 src/dbtest/t/mongodb/non-repeatable-read2.txt create mode 100644 src/dbtest/t/mongodb/phantom-read.txt create mode 100644 src/dbtest/t/mongodb/predicate-sawtooth.txt create mode 100644 src/dbtest/t/mongodb/primary-colors.txt create mode 100644 src/dbtest/t/mongodb/primary-colors2.txt create mode 100644 src/dbtest/t/mongodb/rat-special.txt create mode 100644 src/dbtest/t/mongodb/rat-special2.txt create mode 100644 src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/mongodb/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/mongodb/read-skew1.txt create mode 100644 src/dbtest/t/mongodb/read-skew2.txt create mode 100644 src/dbtest/t/mongodb/read-skew3.txt create mode 100644 src/dbtest/t/mongodb/read-write-skew1-1.txt create mode 100644 src/dbtest/t/mongodb/read-write-skew1-2.txt create mode 100644 src/dbtest/t/mongodb/read-write-skew2.txt create mode 100644 src/dbtest/t/mongodb/sawtooth.txt create mode 100644 src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/mongodb/step-read-skew.txt create mode 100644 src/dbtest/t/mongodb/step-wat.txt create mode 100644 src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/mongodb/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/mongodb/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/mongodb/unnamed-anomaly.txt create mode 100644 src/dbtest/t/mongodb/write-read-skew1.txt create mode 100644 src/dbtest/t/mongodb/write-read-skew2.txt create mode 100644 src/dbtest/t/mongodb/write-skew-black-white.txt create mode 100644 src/dbtest/t/mongodb/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/mongodb/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/mongodb/write-skew.txt create mode 100644 src/dbtest/t/mysql/aborted-reads.txt create mode 100644 src/dbtest/t/mysql/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/mysql/cross-phantom.txt create mode 100644 src/dbtest/t/mysql/cross-phenomenon.txt create mode 100644 src/dbtest/t/mysql/dirty-read.txt create mode 100644 src/dbtest/t/mysql/dirty-write1.txt create mode 100644 src/dbtest/t/mysql/dirty-write2.txt create mode 100644 src/dbtest/t/mysql/double-write-skew1-1.txt create mode 100644 src/dbtest/t/mysql/double-write-skew1-2.txt create mode 100644 src/dbtest/t/mysql/double-write-skew1-3.txt create mode 100644 src/dbtest/t/mysql/double-write-skew2.txt create mode 100644 src/dbtest/t/mysql/fractured-reads.txt create mode 100644 src/dbtest/t/mysql/full-write-skew1.txt create mode 100644 src/dbtest/t/mysql/full-write-skew2.txt create mode 100644 src/dbtest/t/mysql/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/mysql/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/mysql/intermediate-reads.txt create mode 100644 src/dbtest/t/mysql/intermediate-write1.txt create mode 100644 src/dbtest/t/mysql/intermediate-write2.txt create mode 100644 src/dbtest/t/mysql/long-fork-anomaly.txt create mode 100644 src/dbtest/t/mysql/lost-self-update1.txt create mode 100644 src/dbtest/t/mysql/lost-self-update2.txt create mode 100644 src/dbtest/t/mysql/lost-update1.txt create mode 100644 src/dbtest/t/mysql/lost-update2.txt create mode 100644 src/dbtest/t/mysql/middle-read.txt create mode 100644 src/dbtest/t/mysql/non-repeatable-read1.txt create mode 100644 src/dbtest/t/mysql/non-repeatable-read2.txt create mode 100644 src/dbtest/t/mysql/phantom-read.txt create mode 100644 src/dbtest/t/mysql/predicate-sawtooth.txt create mode 100644 src/dbtest/t/mysql/primary-colors.txt create mode 100644 src/dbtest/t/mysql/primary-colors2.txt create mode 100644 src/dbtest/t/mysql/rat-special.txt create mode 100644 src/dbtest/t/mysql/rat-special2.txt create mode 100644 src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/mysql/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/mysql/read-skew1.txt create mode 100644 src/dbtest/t/mysql/read-skew2.txt create mode 100644 src/dbtest/t/mysql/read-skew3.txt create mode 100644 src/dbtest/t/mysql/read-write-skew1-1.txt create mode 100644 src/dbtest/t/mysql/read-write-skew1-2.txt create mode 100644 src/dbtest/t/mysql/read-write-skew2.txt create mode 100644 src/dbtest/t/mysql/sawtooth.txt create mode 100644 src/dbtest/t/mysql/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/mysql/step-read-skew.txt create mode 100644 src/dbtest/t/mysql/step-wat.txt create mode 100644 src/dbtest/t/mysql/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/mysql/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/mysql/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/mysql/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/mysql/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/mysql/unnamed-anomaly.txt create mode 100644 src/dbtest/t/mysql/write-read-skew1.txt create mode 100644 src/dbtest/t/mysql/write-read-skew2.txt create mode 100644 src/dbtest/t/mysql/write-skew-black-white.txt create mode 100644 src/dbtest/t/mysql/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/mysql/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/mysql/write-skew.txt create mode 100644 src/dbtest/t/ob/aborted-reads.txt create mode 100644 src/dbtest/t/ob/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/ob/cross-phantom.txt create mode 100644 src/dbtest/t/ob/cross-phenomenon.txt create mode 100644 src/dbtest/t/ob/dirty-read.txt create mode 100644 src/dbtest/t/ob/dirty-write1.txt create mode 100644 src/dbtest/t/ob/dirty-write2.txt create mode 100644 src/dbtest/t/ob/double-write-skew.txt create mode 100644 src/dbtest/t/ob/double-write-skew1-1.txt create mode 100644 src/dbtest/t/ob/double-write-skew1-2.txt create mode 100644 src/dbtest/t/ob/double-write-skew1-3.txt create mode 100644 src/dbtest/t/ob/double-write-skew2.txt create mode 100644 src/dbtest/t/ob/fractured-reads.txt create mode 100644 src/dbtest/t/ob/full-write-skew1.txt create mode 100644 src/dbtest/t/ob/full-write-skew2.txt create mode 100644 src/dbtest/t/ob/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/ob/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/ob/intermediate-reads.txt create mode 100644 src/dbtest/t/ob/intermediate-write1.txt create mode 100644 src/dbtest/t/ob/intermediate-write2.txt create mode 100644 src/dbtest/t/ob/long-fork-anomaly.txt create mode 100644 src/dbtest/t/ob/lost-self-update1.txt create mode 100644 src/dbtest/t/ob/lost-self-update2.txt create mode 100644 src/dbtest/t/ob/lost-update.txt create mode 100644 src/dbtest/t/ob/lost-update1.txt create mode 100644 src/dbtest/t/ob/lost-update2.txt create mode 100644 src/dbtest/t/ob/middle-read.txt create mode 100644 src/dbtest/t/ob/non-repeatable-read1.txt create mode 100644 src/dbtest/t/ob/non-repeatable-read2.txt create mode 100644 src/dbtest/t/ob/phantom-read.txt create mode 100644 src/dbtest/t/ob/predicate-sawtooth.txt create mode 100644 src/dbtest/t/ob/primary-colors.txt create mode 100644 src/dbtest/t/ob/primary-colors2.txt create mode 100644 src/dbtest/t/ob/rat-special.txt create mode 100644 src/dbtest/t/ob/rat-special2.txt create mode 100644 src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/ob/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/ob/read-skew1.txt create mode 100644 src/dbtest/t/ob/read-skew2.txt create mode 100644 src/dbtest/t/ob/read-skew3.txt create mode 100644 src/dbtest/t/ob/read-write-skew1-1.txt create mode 100644 src/dbtest/t/ob/read-write-skew1-2.txt create mode 100644 src/dbtest/t/ob/read-write-skew2.txt create mode 100644 src/dbtest/t/ob/sawtooth.txt create mode 100644 src/dbtest/t/ob/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/ob/step-read-skew.txt create mode 100644 src/dbtest/t/ob/step-wat.txt create mode 100644 src/dbtest/t/ob/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/ob/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/ob/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/ob/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/ob/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/ob/unnamed-anomaly.txt create mode 100644 src/dbtest/t/ob/unrepeatable-read.txt create mode 100644 src/dbtest/t/ob/write-read-skew1.txt create mode 100644 src/dbtest/t/ob/write-read-skew2.txt create mode 100644 src/dbtest/t/ob/write-skew-black-white.txt create mode 100644 src/dbtest/t/ob/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/ob/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/ob/write-skew.txt create mode 100644 src/dbtest/t/oracle/aborted-reads.txt create mode 100644 src/dbtest/t/oracle/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/oracle/cross-phantom.txt create mode 100644 src/dbtest/t/oracle/cross-phenomenon.txt create mode 100644 src/dbtest/t/oracle/dirty-read.txt create mode 100644 src/dbtest/t/oracle/dirty-write1.txt create mode 100644 src/dbtest/t/oracle/dirty-write2.txt create mode 100644 src/dbtest/t/oracle/double-write-skew.txt create mode 100644 src/dbtest/t/oracle/double-write-skew1-1.txt create mode 100644 src/dbtest/t/oracle/double-write-skew1-2.txt create mode 100644 src/dbtest/t/oracle/double-write-skew1-3.txt create mode 100644 src/dbtest/t/oracle/double-write-skew2.txt create mode 100644 src/dbtest/t/oracle/fractured-reads.txt create mode 100644 src/dbtest/t/oracle/full-write-skew1.txt create mode 100644 src/dbtest/t/oracle/full-write-skew2.txt create mode 100644 src/dbtest/t/oracle/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/oracle/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/oracle/intermediate-reads.txt create mode 100644 src/dbtest/t/oracle/intermediate-write1.txt create mode 100644 src/dbtest/t/oracle/intermediate-write2.txt create mode 100644 src/dbtest/t/oracle/long-fork-anomaly.txt create mode 100644 src/dbtest/t/oracle/lost-self-update1.txt create mode 100644 src/dbtest/t/oracle/lost-self-update2.txt create mode 100644 src/dbtest/t/oracle/lost-update.txt create mode 100644 src/dbtest/t/oracle/lost-update1.txt create mode 100644 src/dbtest/t/oracle/lost-update2.txt create mode 100644 src/dbtest/t/oracle/middle-read.txt create mode 100644 src/dbtest/t/oracle/non-repeatable-read1.txt create mode 100644 src/dbtest/t/oracle/non-repeatable-read2.txt create mode 100644 src/dbtest/t/oracle/phantom-read.txt create mode 100644 src/dbtest/t/oracle/predicate-sawtooth.txt create mode 100644 src/dbtest/t/oracle/primary-colors.txt create mode 100644 src/dbtest/t/oracle/primary-colors2.txt create mode 100644 src/dbtest/t/oracle/rat-special.txt create mode 100644 src/dbtest/t/oracle/rat-special2.txt create mode 100644 src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/oracle/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/oracle/read-skew1.txt create mode 100644 src/dbtest/t/oracle/read-skew2.txt create mode 100644 src/dbtest/t/oracle/read-skew3.txt create mode 100644 src/dbtest/t/oracle/read-write-skew1-1.txt create mode 100644 src/dbtest/t/oracle/read-write-skew1-2.txt create mode 100644 src/dbtest/t/oracle/read-write-skew2.txt create mode 100644 src/dbtest/t/oracle/sawtooth.txt create mode 100644 src/dbtest/t/oracle/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/oracle/step-read-skew.txt create mode 100644 src/dbtest/t/oracle/step-wat.txt create mode 100644 src/dbtest/t/oracle/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/oracle/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/oracle/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/oracle/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/oracle/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/oracle/unnamed-anomaly.txt create mode 100644 src/dbtest/t/oracle/unrepeatable-read.txt create mode 100644 src/dbtest/t/oracle/write-read-skew1.txt create mode 100644 src/dbtest/t/oracle/write-read-skew2.txt create mode 100644 src/dbtest/t/oracle/write-skew-black-white.txt create mode 100644 src/dbtest/t/oracle/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/oracle/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/oracle/write-skew.txt create mode 100644 src/dbtest/t/pg/aborted-reads.txt create mode 100644 src/dbtest/t/pg/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/pg/cross-phantom.txt create mode 100644 src/dbtest/t/pg/cross-phenomenon.txt create mode 100644 src/dbtest/t/pg/dirty-read.txt create mode 100644 src/dbtest/t/pg/dirty-write.txt create mode 100644 src/dbtest/t/pg/dirty-write1.txt create mode 100644 src/dbtest/t/pg/dirty-write2.txt create mode 100644 src/dbtest/t/pg/double-write-skew.txt create mode 100644 src/dbtest/t/pg/double-write-skew1-1.txt create mode 100644 src/dbtest/t/pg/double-write-skew1-2.txt create mode 100644 src/dbtest/t/pg/double-write-skew1-3.txt create mode 100644 src/dbtest/t/pg/double-write-skew2.txt create mode 100644 src/dbtest/t/pg/fractured-reads.txt create mode 100644 src/dbtest/t/pg/full-write-skew1.txt create mode 100644 src/dbtest/t/pg/full-write-skew2.txt create mode 100644 src/dbtest/t/pg/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/pg/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/pg/intermediate-reads.txt create mode 100644 src/dbtest/t/pg/intermediate-write1.txt create mode 100644 src/dbtest/t/pg/intermediate-write2.txt create mode 100644 src/dbtest/t/pg/long-fork-anomaly.txt create mode 100644 src/dbtest/t/pg/lost-self-update1.txt create mode 100644 src/dbtest/t/pg/lost-self-update2.txt create mode 100644 src/dbtest/t/pg/lost-update.txt create mode 100644 src/dbtest/t/pg/lost-update1.txt create mode 100644 src/dbtest/t/pg/lost-update2.txt create mode 100644 src/dbtest/t/pg/middle-read.txt create mode 100644 src/dbtest/t/pg/non-repeatable-read1.txt create mode 100644 src/dbtest/t/pg/non-repeatable-read2.txt create mode 100644 src/dbtest/t/pg/phantom-read.txt create mode 100644 src/dbtest/t/pg/predicate-sawtooth.txt create mode 100644 src/dbtest/t/pg/primary-colors.txt create mode 100644 src/dbtest/t/pg/primary-colors2.txt create mode 100644 src/dbtest/t/pg/rat-special.txt create mode 100644 src/dbtest/t/pg/rat-special2.txt create mode 100644 src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/pg/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/pg/read-skew.txt create mode 100644 src/dbtest/t/pg/read-skew1.txt create mode 100644 src/dbtest/t/pg/read-skew2.txt create mode 100644 src/dbtest/t/pg/read-skew3.txt create mode 100644 src/dbtest/t/pg/read-write-skew1-1.txt create mode 100644 src/dbtest/t/pg/read-write-skew1-2.txt create mode 100644 src/dbtest/t/pg/read-write-skew2.txt create mode 100644 src/dbtest/t/pg/sawtooth.txt create mode 100644 src/dbtest/t/pg/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/pg/step-read-skew.txt create mode 100644 src/dbtest/t/pg/step-wat.txt create mode 100644 src/dbtest/t/pg/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/pg/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/pg/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/pg/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/pg/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/pg/unnamed-anomaly.txt create mode 100644 src/dbtest/t/pg/unrepeatable-read.txt create mode 100644 src/dbtest/t/pg/write-read-skew1.txt create mode 100644 src/dbtest/t/pg/write-read-skew2.txt create mode 100644 src/dbtest/t/pg/write-skew-black-white.txt create mode 100644 src/dbtest/t/pg/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/pg/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/pg/write-skew.txt create mode 100644 src/dbtest/t/sqlserver/aborted-reads.txt create mode 100644 src/dbtest/t/sqlserver/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/sqlserver/cross-phantom.txt create mode 100644 src/dbtest/t/sqlserver/cross-phenomenon.txt create mode 100644 src/dbtest/t/sqlserver/dirty-read.txt create mode 100644 src/dbtest/t/sqlserver/dirty-write.txt create mode 100644 src/dbtest/t/sqlserver/dirty-write1.txt create mode 100644 src/dbtest/t/sqlserver/dirty-write2.txt create mode 100644 src/dbtest/t/sqlserver/double-write-skew.txt create mode 100644 src/dbtest/t/sqlserver/double-write-skew1-1.txt create mode 100644 src/dbtest/t/sqlserver/double-write-skew1-2.txt create mode 100644 src/dbtest/t/sqlserver/double-write-skew1-3.txt create mode 100644 src/dbtest/t/sqlserver/double-write-skew2.txt create mode 100644 src/dbtest/t/sqlserver/fractured-reads.txt create mode 100644 src/dbtest/t/sqlserver/full-write-skew1.txt create mode 100644 src/dbtest/t/sqlserver/full-write-skew2.txt create mode 100644 src/dbtest/t/sqlserver/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/sqlserver/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/sqlserver/intermediate-reads.txt create mode 100644 src/dbtest/t/sqlserver/intermediate-write1.txt create mode 100644 src/dbtest/t/sqlserver/intermediate-write2.txt create mode 100644 src/dbtest/t/sqlserver/long-fork-anomaly.txt create mode 100644 src/dbtest/t/sqlserver/lost-self-update1.txt create mode 100644 src/dbtest/t/sqlserver/lost-self-update2.txt create mode 100644 src/dbtest/t/sqlserver/lost-update.txt create mode 100644 src/dbtest/t/sqlserver/lost-update1.txt create mode 100644 src/dbtest/t/sqlserver/lost-update2.txt create mode 100644 src/dbtest/t/sqlserver/middle-read.txt create mode 100644 src/dbtest/t/sqlserver/non-repeatable-read1.txt create mode 100644 src/dbtest/t/sqlserver/non-repeatable-read2.txt create mode 100644 src/dbtest/t/sqlserver/phantom-read.txt create mode 100644 src/dbtest/t/sqlserver/predicate-sawtooth.txt create mode 100644 src/dbtest/t/sqlserver/primary-colors.txt create mode 100644 src/dbtest/t/sqlserver/primary-colors2.txt create mode 100644 src/dbtest/t/sqlserver/rat-special.txt create mode 100644 src/dbtest/t/sqlserver/rat-special2.txt create mode 100644 src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/sqlserver/read-skew.txt create mode 100644 src/dbtest/t/sqlserver/read-skew1.txt create mode 100644 src/dbtest/t/sqlserver/read-skew2.txt create mode 100644 src/dbtest/t/sqlserver/read-skew3.txt create mode 100644 src/dbtest/t/sqlserver/read-write-skew1-1.txt create mode 100644 src/dbtest/t/sqlserver/read-write-skew1-2.txt create mode 100644 src/dbtest/t/sqlserver/read-write-skew2.txt create mode 100644 src/dbtest/t/sqlserver/sawtooth.txt create mode 100644 src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/sqlserver/step-read-skew.txt create mode 100644 src/dbtest/t/sqlserver/step-wat.txt create mode 100644 src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/sqlserver/unnamed-anomaly.txt create mode 100644 src/dbtest/t/sqlserver/unrepeatable-read.txt create mode 100644 src/dbtest/t/sqlserver/write-read-skew1.txt create mode 100644 src/dbtest/t/sqlserver/write-read-skew2.txt create mode 100644 src/dbtest/t/sqlserver/write-skew-black-white.txt create mode 100644 src/dbtest/t/sqlserver/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/sqlserver/write-skew.txt create mode 100644 src/dbtest/t/tidb/aborted-reads.txt create mode 100644 src/dbtest/t/tidb/causality-violation-anomaly.txt create mode 100644 src/dbtest/t/tidb/cross-phantom.txt create mode 100644 src/dbtest/t/tidb/cross-phenomenon.txt create mode 100644 src/dbtest/t/tidb/dirty-read.txt create mode 100644 src/dbtest/t/tidb/dirty-write1.txt create mode 100644 src/dbtest/t/tidb/dirty-write2.txt create mode 100644 src/dbtest/t/tidb/double-write-skew1-1.txt create mode 100644 src/dbtest/t/tidb/double-write-skew1-2.txt create mode 100644 src/dbtest/t/tidb/double-write-skew1-3.txt create mode 100644 src/dbtest/t/tidb/double-write-skew2.txt create mode 100644 src/dbtest/t/tidb/fractured-reads.txt create mode 100644 src/dbtest/t/tidb/full-write-skew1.txt create mode 100644 src/dbtest/t/tidb/full-write-skew2.txt create mode 100644 src/dbtest/t/tidb/half-predicate-read-skew.txt create mode 100644 src/dbtest/t/tidb/half-predicate-write-skew.txt create mode 100644 src/dbtest/t/tidb/intermediate-reads.txt create mode 100644 src/dbtest/t/tidb/intermediate-write1.txt create mode 100644 src/dbtest/t/tidb/intermediate-write2.txt create mode 100644 src/dbtest/t/tidb/long-fork-anomaly.txt create mode 100644 src/dbtest/t/tidb/lost-self-update1.txt create mode 100644 src/dbtest/t/tidb/lost-self-update2.txt create mode 100644 src/dbtest/t/tidb/lost-update1.txt create mode 100644 src/dbtest/t/tidb/lost-update2.txt create mode 100644 src/dbtest/t/tidb/middle-read.txt create mode 100644 src/dbtest/t/tidb/non-repeatable-read1.txt create mode 100644 src/dbtest/t/tidb/non-repeatable-read2.txt create mode 100644 src/dbtest/t/tidb/phantom-read.txt create mode 100644 src/dbtest/t/tidb/predicate-sawtooth.txt create mode 100644 src/dbtest/t/tidb/primary-colors.txt create mode 100644 src/dbtest/t/tidb/primary-colors2.txt create mode 100644 src/dbtest/t/tidb/rat-special.txt create mode 100644 src/dbtest/t/tidb/rat-special2.txt create mode 100644 src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt create mode 100644 src/dbtest/t/tidb/read-only-transaction-anomaly.txt create mode 100644 src/dbtest/t/tidb/read-skew1.txt create mode 100644 src/dbtest/t/tidb/read-skew2.txt create mode 100644 src/dbtest/t/tidb/read-skew3.txt create mode 100644 src/dbtest/t/tidb/read-write-skew1-1.txt create mode 100644 src/dbtest/t/tidb/read-write-skew1-2.txt create mode 100644 src/dbtest/t/tidb/read-write-skew2.txt create mode 100644 src/dbtest/t/tidb/sawtooth.txt create mode 100644 src/dbtest/t/tidb/serial-concurrent-phenomenon.txt create mode 100644 src/dbtest/t/tidb/step-read-skew.txt create mode 100644 src/dbtest/t/tidb/step-wat.txt create mode 100644 src/dbtest/t/tidb/total-diff-predicate-read-skew.txt create mode 100644 src/dbtest/t/tidb/total-diff-predicate-write-skew.txt create mode 100644 src/dbtest/t/tidb/total-same-predicate-read-skew.txt create mode 100644 src/dbtest/t/tidb/total-same-predicate-read-skew2.txt create mode 100644 src/dbtest/t/tidb/total-same-predicate-write-skew.txt create mode 100644 src/dbtest/t/tidb/unnamed-anomaly.txt create mode 100644 src/dbtest/t/tidb/write-read-skew1.txt create mode 100644 src/dbtest/t/tidb/write-read-skew2.txt create mode 100644 src/dbtest/t/tidb/write-skew-black-white.txt create mode 100644 src/dbtest/t/tidb/write-skew-intersecting-data.txt create mode 100644 src/dbtest/t/tidb/write-skew-overdraft-protection.txt create mode 100644 src/dbtest/t/tidb/write-skew.txt diff --git a/.gitignore b/.gitignore index 278991cf..9771d798 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ build/* .vscode/* -*.txt *.cfg __* *.o diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt b/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt new file mode 100644 index 00000000..12a90341 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb CMakeFiles/3ts_dbtest.dir/src/common.cc.o CMakeFiles/3ts_dbtest.dir/src/case_cntl.cc.o CMakeFiles/3ts_dbtest.dir/src/sql_cntl.cc.o CMakeFiles/3ts_dbtest.dir/src/sqltest.cc.o -o 3ts_dbtest -rdynamic -lpthread /usr/local/lib/libgflags.so.2.2.2 -lodbc -lpthread -Wl,-rpath,/usr/local/lib diff --git a/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt b/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt new file mode 100644 index 00000000..2ed189b0 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_kvtest.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb CMakeFiles/3ts_kvtest.dir/src/common.cc.o CMakeFiles/3ts_kvtest.dir/src/case_cntl.cc.o CMakeFiles/3ts_kvtest.dir/src/kv_cntl.cc.o CMakeFiles/3ts_kvtest.dir/src/kvtest.cc.o -o 3ts_kvtest -rdynamic /usr/local/lib64/libmongocxx.so.3.6.2 -lpthread /usr/local/lib/libgflags.so.2.2.2 /usr/local/lib64/libbsoncxx.so.3.6.2 -lpthread -Wl,-rpath,/usr/local/lib64:/usr/local/lib diff --git a/src/dbtest/CMakeFiles/TargetDirectories.txt b/src/dbtest/CMakeFiles/TargetDirectories.txt new file mode 100644 index 00000000..fb8187a6 --- /dev/null +++ b/src/dbtest/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,2 @@ +/data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_kvtest.dir +/data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt new file mode 100644 index 00000000..39ed9667 --- /dev/null +++ b/src/dbtest/CMakeLists.txt @@ -0,0 +1,64 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +PROJECT(dbtest) + +set(CMAKE_BUILD_TYPE "Debug") +set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") +set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") +message("cmake moudle ${CMAKE_MODULE_PATH}") + +set(CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -Wno-deprecated") + +# all .h file +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) + +# ld:pthread gflags +list(APPEND THIRD_PARTIES pthread) + +find_package(gflags REQUIRED) +list(APPEND THIRD_PARTIES gflags) + +########### sql test ############# +# all .cc files +list(APPEND SOURCE_FILES_SQL + "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/sql_cntl.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/sqltest.cc" +) +# bin +add_executable(3ts_dbtest ${SOURCE_FILES_SQL}) +# ld:odbc +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") +find_package(odbc REQUIRED) +list(APPEND ODBC_LD odbc) +# link ld +target_link_libraries(3ts_dbtest ${THIRD_PARTIES}) +target_link_libraries(3ts_dbtest ${ODBC_LD}) + +########### kv test ############## +# all .cc files +list(APPEND SOURCE_FILES_KV + "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/kv_cntl.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/kvtest.cc" +) +# bin +add_executable(3ts_kvtest ${SOURCE_FILES_KV}) +# ld:bson mongo +find_package(bsoncxx REQUIRED) +find_package(mongocxx REQUIRED) +include_directories(${LIBMONGOCXX_INCLUDE_DIR}) +include_directories(${LIBBSONCXX_INCLUDE_DIR}) +# link ld +target_link_libraries(3ts_kvtest PRIVATE mongo::bsoncxx_shared) +target_link_libraries(3ts_kvtest PRIVATE mongo::mongocxx_shared) +target_link_libraries(3ts_kvtest PRIVATE ${THIRD_PARTIES}) +# third parties .h +target_include_directories(3ts_kvtest PUBLIC + "/usr/local/include/mongocxx/v_noabi" + "/usr/local/include/bsoncxx/v_noabi" + "/usr/local/include/libmongoc-1.0" + "/usr/local/include/libbson-1.0" + "/usr/local/lib" + ) diff --git a/src/dbtest/do_test_list.txt b/src/dbtest/do_test_list.txt new file mode 100644 index 00000000..f829d4b5 --- /dev/null +++ b/src/dbtest/do_test_list.txt @@ -0,0 +1,55 @@ +#### WAT +#dirty-write1 +#dirty-write2 +#intermediate-write1 +#intermediate-write2 +#lost-self-update1 +#lost-self-update2 +#lost-update1 +#double-write-skew1-1 +#double-write-skew1-2 +#double-write-skew1-3 +#read-write-skew1-1 +#read-write-skew1-2 +#full-write-skew1 +#full-write-skew2 +#step-wat +### RAT +#dirty-read +#intermediate-reads +#non-repeatable-read1 +#non-repeatable-read2 +#write-read-skew1 +#write-read-skew2 +#double-write-skew2 +#read-skew1 +#read-skew2 +#read-skew3 +#fractured-reads +#causality-violation-anomaly +#serial-concurrent-phenomenon +#cross-phenomenon +#cross-phantom +#long-fork-anomaly +#half-predicate-read-skew +#total-same-predicate-read-skew +#total-diff-predicate-read-skew +#total-same-predicate-read-skew2 +#step-read-skew +#unnamed-anomaly +#rat-special +#rat-special2 +## IAT +lost-update2 +read-write-skew2 +write-skew +write-skew-black-white +write-skew-intersecting-data +write-skew-overdraft-protection +half-predicate-write-skew +total-same-predicate-write-skew +total-diff-predicate-write-skew +read-only-transaction-anomaly +primary-colors +sawtooth +predicate-sawtooth diff --git a/src/dbtest/t/crdb/aborted-reads.txt b/src/dbtest/t/crdb/aborted-reads.txt new file mode 100644 index 00000000..14d384ee --- /dev/null +++ b/src/dbtest/t/crdb/aborted-reads.txt @@ -0,0 +1,16 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/crdb/causality-violation-anomaly.txt b/src/dbtest/t/crdb/causality-violation-anomaly.txt new file mode 100644 index 00000000..ae51bbf3 --- /dev/null +++ b/src/dbtest/t/crdb/causality-violation-anomaly.txt @@ -0,0 +1,49 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/cross-phantom.txt b/src/dbtest/t/crdb/cross-phantom.txt new file mode 100644 index 00000000..87ad5a06 --- /dev/null +++ b/src/dbtest/t/crdb/cross-phantom.txt @@ -0,0 +1,104 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/crdb/cross-phenomenon.txt b/src/dbtest/t/crdb/cross-phenomenon.txt new file mode 100644 index 00000000..8b0cc3e2 --- /dev/null +++ b/src/dbtest/t/crdb/cross-phenomenon.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/dirty-read.txt b/src/dbtest/t/crdb/dirty-read.txt new file mode 100644 index 00000000..5c6a27e7 --- /dev/null +++ b/src/dbtest/t/crdb/dirty-read.txt @@ -0,0 +1,15 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-2-BEGIN; +4-1-INSERT INTO t1 VALUES (0, 0); +5-2-SELECT * from t1 WHERE k = 0; +6-1-ROLLBACK; +7-2-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +5-null +8-null +} diff --git a/src/dbtest/t/crdb/dirty-write1.txt b/src/dbtest/t/crdb/dirty-write1.txt new file mode 100644 index 00000000..7d627b4a --- /dev/null +++ b/src/dbtest/t/crdb/dirty-write1.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/crdb/dirty-write2.txt b/src/dbtest/t/crdb/dirty-write2.txt new file mode 100644 index 00000000..fc39d037 --- /dev/null +++ b/src/dbtest/t/crdb/dirty-write2.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t1; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/crdb/double-write-skew1-1.txt b/src/dbtest/t/crdb/double-write-skew1-1.txt new file mode 100644 index 00000000..33ed770e --- /dev/null +++ b/src/dbtest/t/crdb/double-write-skew1-1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/crdb/double-write-skew1-2.txt b/src/dbtest/t/crdb/double-write-skew1-2.txt new file mode 100644 index 00000000..56e9c497 --- /dev/null +++ b/src/dbtest/t/crdb/double-write-skew1-2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/double-write-skew1-3.txt b/src/dbtest/t/crdb/double-write-skew1-3.txt new file mode 100644 index 00000000..008a0512 --- /dev/null +++ b/src/dbtest/t/crdb/double-write-skew1-3.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/double-write-skew2.txt b/src/dbtest/t/crdb/double-write-skew2.txt new file mode 100644 index 00000000..c9050aef --- /dev/null +++ b/src/dbtest/t/crdb/double-write-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/crdb/fractured-reads.txt b/src/dbtest/t/crdb/fractured-reads.txt new file mode 100644 index 00000000..2f684f22 --- /dev/null +++ b/src/dbtest/t/crdb/fractured-reads.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/crdb/full-write-skew1.txt b/src/dbtest/t/crdb/full-write-skew1.txt new file mode 100644 index 00000000..738b9fd6 --- /dev/null +++ b/src/dbtest/t/crdb/full-write-skew1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-UPDATE t1 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/crdb/full-write-skew2.txt b/src/dbtest/t/crdb/full-write-skew2.txt new file mode 100644 index 00000000..179e68cc --- /dev/null +++ b/src/dbtest/t/crdb/full-write-skew2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/crdb/half-predicate-read-skew.txt b/src/dbtest/t/crdb/half-predicate-read-skew.txt new file mode 100644 index 00000000..f847adc7 --- /dev/null +++ b/src/dbtest/t/crdb/half-predicate-read-skew.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; + +serializable { +2-null +7-1,1 +9-0,0 1,2 + +2-0,0 +7-1,2 +9-0,0 1,2 +} diff --git a/src/dbtest/t/crdb/half-predicate-write-skew.txt b/src/dbtest/t/crdb/half-predicate-write-skew.txt new file mode 100644 index 00000000..6d50402e --- /dev/null +++ b/src/dbtest/t/crdb/half-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/crdb/intermediate-reads.txt b/src/dbtest/t/crdb/intermediate-reads.txt new file mode 100644 index 00000000..10fa643e --- /dev/null +++ b/src/dbtest/t/crdb/intermediate-reads.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/crdb/intermediate-write1.txt b/src/dbtest/t/crdb/intermediate-write1.txt new file mode 100644 index 00000000..66aa54af --- /dev/null +++ b/src/dbtest/t/crdb/intermediate-write1.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/crdb/intermediate-write2.txt b/src/dbtest/t/crdb/intermediate-write2.txt new file mode 100644 index 00000000..03c74fae --- /dev/null +++ b/src/dbtest/t/crdb/intermediate-write2.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/crdb/long-fork-anomaly.txt b/src/dbtest/t/crdb/long-fork-anomaly.txt new file mode 100644 index 00000000..46722b39 --- /dev/null +++ b/src/dbtest/t/crdb/long-fork-anomaly.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/lost-self-update1.txt b/src/dbtest/t/crdb/lost-self-update1.txt new file mode 100644 index 00000000..73e98c69 --- /dev/null +++ b/src/dbtest/t/crdb/lost-self-update1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/crdb/lost-self-update2.txt b/src/dbtest/t/crdb/lost-self-update2.txt new file mode 100644 index 00000000..e3e4fb26 --- /dev/null +++ b/src/dbtest/t/crdb/lost-self-update2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/crdb/lost-update1.txt b/src/dbtest/t/crdb/lost-update1.txt new file mode 100644 index 00000000..11ee4f51 --- /dev/null +++ b/src/dbtest/t/crdb/lost-update1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/crdb/lost-update2.txt b/src/dbtest/t/crdb/lost-update2.txt new file mode 100644 index 00000000..ce0a7966 --- /dev/null +++ b/src/dbtest/t/crdb/lost-update2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/crdb/middle-read.txt b/src/dbtest/t/crdb/middle-read.txt new file mode 100644 index 00000000..c97c1252 --- /dev/null +++ b/src/dbtest/t/crdb/middle-read.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/crdb/non-repeatable-read1.txt b/src/dbtest/t/crdb/non-repeatable-read1.txt new file mode 100644 index 00000000..788e51f2 --- /dev/null +++ b/src/dbtest/t/crdb/non-repeatable-read1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/crdb/non-repeatable-read2.txt b/src/dbtest/t/crdb/non-repeatable-read2.txt new file mode 100644 index 00000000..2c354f70 --- /dev/null +++ b/src/dbtest/t/crdb/non-repeatable-read2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/crdb/phantom-read.txt b/src/dbtest/t/crdb/phantom-read.txt new file mode 100644 index 00000000..58d6615b --- /dev/null +++ b/src/dbtest/t/crdb/phantom-read.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/crdb/predicate-sawtooth.txt b/src/dbtest/t/crdb/predicate-sawtooth.txt new file mode 100644 index 00000000..3c855657 --- /dev/null +++ b/src/dbtest/t/crdb/predicate-sawtooth.txt @@ -0,0 +1,48 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/crdb/primary-colors.txt b/src/dbtest/t/crdb/primary-colors.txt new file mode 100644 index 00000000..9581e8dc --- /dev/null +++ b/src/dbtest/t/crdb/primary-colors.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key, color text not null); +0-1-insert into dots values(1, 'red'); +0-1-insert into dots values(2, 'yellow'); +0-1-insert into dots values(3, 'blue'); +0-1-insert into dots values(4, 'red'); +0-1-insert into dots values(5, 'yellow'); +0-1-insert into dots values(6, 'blue'); +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/crdb/primary-colors2.txt b/src/dbtest/t/crdb/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/crdb/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/crdb/rat-special.txt b/src/dbtest/t/crdb/rat-special.txt new file mode 100644 index 00000000..2e27bbce --- /dev/null +++ b/src/dbtest/t/crdb/rat-special.txt @@ -0,0 +1,52 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/crdb/rat-special2.txt b/src/dbtest/t/crdb/rat-special2.txt new file mode 100644 index 00000000..4093a609 --- /dev/null +++ b/src/dbtest/t/crdb/rat-special2.txt @@ -0,0 +1,52 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..b715eb1f --- /dev/null +++ b/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,38 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/crdb/read-only-transaction-anomaly.txt b/src/dbtest/t/crdb/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..8643f94d --- /dev/null +++ b/src/dbtest/t/crdb/read-only-transaction-anomaly.txt @@ -0,0 +1,63 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/crdb/read-skew1.txt b/src/dbtest/t/crdb/read-skew1.txt new file mode 100644 index 00000000..59059f0c --- /dev/null +++ b/src/dbtest/t/crdb/read-skew1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/read-skew2.txt b/src/dbtest/t/crdb/read-skew2.txt new file mode 100644 index 00000000..d9dac6fb --- /dev/null +++ b/src/dbtest/t/crdb/read-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/read-skew3.txt b/src/dbtest/t/crdb/read-skew3.txt new file mode 100644 index 00000000..05861b45 --- /dev/null +++ b/src/dbtest/t/crdb/read-skew3.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/read-write-skew1-1.txt b/src/dbtest/t/crdb/read-write-skew1-1.txt new file mode 100644 index 00000000..32296351 --- /dev/null +++ b/src/dbtest/t/crdb/read-write-skew1-1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/read-write-skew1-2.txt b/src/dbtest/t/crdb/read-write-skew1-2.txt new file mode 100644 index 00000000..cd7b3152 --- /dev/null +++ b/src/dbtest/t/crdb/read-write-skew1-2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/crdb/read-write-skew2.txt b/src/dbtest/t/crdb/read-write-skew2.txt new file mode 100644 index 00000000..3dfdcc6a --- /dev/null +++ b/src/dbtest/t/crdb/read-write-skew2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/crdb/sawtooth.txt b/src/dbtest/t/crdb/sawtooth.txt new file mode 100644 index 00000000..7038e1d3 --- /dev/null +++ b/src/dbtest/t/crdb/sawtooth.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt b/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..1039622e --- /dev/null +++ b/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/crdb/step-read-skew.txt b/src/dbtest/t/crdb/step-read-skew.txt new file mode 100644 index 00000000..193fa9df --- /dev/null +++ b/src/dbtest/t/crdb/step-read-skew.txt @@ -0,0 +1,43 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/crdb/step-wat.txt b/src/dbtest/t/crdb/step-wat.txt new file mode 100644 index 00000000..0ce7a08b --- /dev/null +++ b/src/dbtest/t/crdb/step-wat.txt @@ -0,0 +1,73 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-3-BEGIN; +9-3-update t1 set v=2 where k=0; +10-2-commit; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=1; +15-1-select * from t1 where k=2; +16-1-commit; +17-4-select * from t1; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,1 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,1 +17-0,1 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt b/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..351990ad --- /dev/null +++ b/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; + +serializable { +2-null +7-null +9-0,0 1,1 + +2-0,0 +7-1,1 +9-0,0 1,1 +} diff --git a/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt b/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..32554acd --- /dev/null +++ b/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/crdb/total-same-predicate-read-skew.txt b/src/dbtest/t/crdb/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..6e8749be --- /dev/null +++ b/src/dbtest/t/crdb/total-same-predicate-read-skew.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1; + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt b/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..c998b622 --- /dev/null +++ b/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-commit; +7-1-select * from t1; +8-1-commit; +9-3-select * from t1; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/crdb/total-same-predicate-write-skew.txt b/src/dbtest/t/crdb/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..f044d774 --- /dev/null +++ b/src/dbtest/t/crdb/total-same-predicate-write-skew.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/crdb/unnamed-anomaly.txt b/src/dbtest/t/crdb/unnamed-anomaly.txt new file mode 100644 index 00000000..7e8ddd0f --- /dev/null +++ b/src/dbtest/t/crdb/unnamed-anomaly.txt @@ -0,0 +1,66 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/crdb/write-read-skew1.txt b/src/dbtest/t/crdb/write-read-skew1.txt new file mode 100644 index 00000000..baf6df4e --- /dev/null +++ b/src/dbtest/t/crdb/write-read-skew1.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/crdb/write-read-skew2.txt b/src/dbtest/t/crdb/write-read-skew2.txt new file mode 100644 index 00000000..88c6fcc7 --- /dev/null +++ b/src/dbtest/t/crdb/write-read-skew2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/crdb/write-skew-black-white.txt b/src/dbtest/t/crdb/write-skew-black-white.txt new file mode 100644 index 00000000..b685a229 --- /dev/null +++ b/src/dbtest/t/crdb/write-skew-black-white.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS dots; +0-1-create table dots(id int not null primary key, color text not null); +0-1-insert into dots values(1, 'black'); +0-1-insert into dots values(2, 'white'); +0-1-insert into dots values(3, 'black'); +0-1-insert into dots values(4, 'white'); +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/crdb/write-skew-intersecting-data.txt b/src/dbtest/t/crdb/write-skew-intersecting-data.txt new file mode 100644 index 00000000..e193c7f7 --- /dev/null +++ b/src/dbtest/t/crdb/write-skew-intersecting-data.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +4-2-BEGIN; +6-2-INSERT INTO mytab VALUES (1, 300); +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +3-1-INSERT INTO mytab VALUES (2, 30); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/crdb/write-skew-overdraft-protection.txt b/src/dbtest/t/crdb/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..d9d5aacd --- /dev/null +++ b/src/dbtest/t/crdb/write-skew-overdraft-protection.txt @@ -0,0 +1,23 @@ +ParamNum:3 +0-1-drop table if exists account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/crdb/write-skew.txt b/src/dbtest/t/crdb/write-skew.txt new file mode 100644 index 00000000..c1dce897 --- /dev/null +++ b/src/dbtest/t/crdb/write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/aborted-reads.txt b/src/dbtest/t/mongodb/aborted-reads.txt new file mode 100644 index 00000000..206a2789 --- /dev/null +++ b/src/dbtest/t/mongodb/aborted-reads.txt @@ -0,0 +1,16 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-3-COMMIT; + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/mongodb/causality-violation-anomaly.txt b/src/dbtest/t/mongodb/causality-violation-anomaly.txt new file mode 100644 index 00000000..f2a7357c --- /dev/null +++ b/src/dbtest/t/mongodb/causality-violation-anomaly.txt @@ -0,0 +1,46 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-commit +6-3-begin +7-3-t1.get(0) +8-3-t1.put(1, 1) +9-3-commit +10-1-t1.get(1) +11-1-commit +12-4-t1.get(*) + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/cross-phantom.txt b/src/dbtest/t/mongodb/cross-phantom.txt new file mode 100644 index 00000000..ab8fabdd --- /dev/null +++ b/src/dbtest/t/mongodb/cross-phantom.txt @@ -0,0 +1,101 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.getpred(0) +5-3-begin +6-3-t1.put(0, 0) +7-3-commit +8-4-begin +9-4-t1.put(1, 0) +10-4-commit +11-2-t1.getpred(0) +12-1-t1.getpred(0) +13-2-commit +14-1-commit +15-3-t1.get(*) + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/mongodb/cross-phenomenon.txt b/src/dbtest/t/mongodb/cross-phenomenon.txt new file mode 100644 index 00000000..b613522d --- /dev/null +++ b/src/dbtest/t/mongodb/cross-phenomenon.txt @@ -0,0 +1,103 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.get(1) +5-3-begin +6-3-t1.put(0, 1) +7-3-commit +8-4-begin +9-4-t1.put(1, 1) +10-4-commit +11-2-t1.get(0) +12-2-commit +13-1-t1.get(1) +14-1-commit +15-4-t1.get(*) + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/dirty-read.txt b/src/dbtest/t/mongodb/dirty-read.txt new file mode 100644 index 00000000..e4440dcc --- /dev/null +++ b/src/dbtest/t/mongodb/dirty-read.txt @@ -0,0 +1,12 @@ +1-1-begin +2-2-begin +3-1-t1.put(0, 0) +4-2-t1.get(0) +5-1-rollback +6-2-commit +7-3-t1.get(*) + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/mongodb/dirty-write1.txt b/src/dbtest/t/mongodb/dirty-write1.txt new file mode 100644 index 00000000..28987d00 --- /dev/null +++ b/src/dbtest/t/mongodb/dirty-write1.txt @@ -0,0 +1,14 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-commit +6-1-commit +7-3-t1.get(*) + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/mongodb/dirty-write2.txt b/src/dbtest/t/mongodb/dirty-write2.txt new file mode 100644 index 00000000..082e6089 --- /dev/null +++ b/src/dbtest/t/mongodb/dirty-write2.txt @@ -0,0 +1,14 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-commit +6-1-rollback +7-3-t1.get(*) + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/mongodb/double-write-skew1-1.txt b/src/dbtest/t/mongodb/double-write-skew1-1.txt new file mode 100644 index 00000000..a69c3dd9 --- /dev/null +++ b/src/dbtest/t/mongodb/double-write-skew1-1.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.get(0) +5-2-t1.put(1, 1) +6-1-t1.put(1, 2) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/mongodb/double-write-skew1-2.txt b/src/dbtest/t/mongodb/double-write-skew1-2.txt new file mode 100644 index 00000000..d6dec4d1 --- /dev/null +++ b/src/dbtest/t/mongodb/double-write-skew1-2.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-t1.put(1, 1) +6-1-t1.get(1) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/double-write-skew1-3.txt b/src/dbtest/t/mongodb/double-write-skew1-3.txt new file mode 100644 index 00000000..e3524f58 --- /dev/null +++ b/src/dbtest/t/mongodb/double-write-skew1-3.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.get(1) +8-1-commit +9-3-t1.get(*) + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/double-write-skew2.txt b/src/dbtest/t/mongodb/double-write-skew2.txt new file mode 100644 index 00000000..0da5ba39 --- /dev/null +++ b/src/dbtest/t/mongodb/double-write-skew2.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.get(0) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.put(1, 2) +8-1-commit +9-3-t1.get(*) + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/mongodb/fractured-reads.txt b/src/dbtest/t/mongodb/fractured-reads.txt new file mode 100644 index 00000000..5cd7f8c3 --- /dev/null +++ b/src/dbtest/t/mongodb/fractured-reads.txt @@ -0,0 +1,26 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.get(0) +8-1-t1.get(1) +9-1-commit +10-3-t1.get(*) + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/mongodb/full-write-skew1.txt b/src/dbtest/t/mongodb/full-write-skew1.txt new file mode 100644 index 00000000..2ed32c2f --- /dev/null +++ b/src/dbtest/t/mongodb/full-write-skew1.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-t1.put(1, 1) +6-1-t1.put(1, 2) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/mongodb/full-write-skew2.txt b/src/dbtest/t/mongodb/full-write-skew2.txt new file mode 100644 index 00000000..9c4d3780 --- /dev/null +++ b/src/dbtest/t/mongodb/full-write-skew2.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.put(1, 2) +8-1-commit +9-3-t1.get(*) + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/mongodb/half-predicate-read-skew.txt b/src/dbtest/t/mongodb/half-predicate-read-skew.txt new file mode 100644 index 00000000..656eac8e --- /dev/null +++ b/src/dbtest/t/mongodb/half-predicate-read-skew.txt @@ -0,0 +1,20 @@ +0-1-t1.put(1, 1) +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.put(1, 2) +5-2-t1.put(0, 0) +6-2-commit +7-1-t1.get(1) +8-1-commit +9-3-t1.get(*) + +serializable { +2-null +7-1,1 +9-1,2 0,0 + +2-0,0 +7-1,2 +9-1,2 0,0 +} diff --git a/src/dbtest/t/mongodb/half-predicate-write-skew.txt b/src/dbtest/t/mongodb/half-predicate-write-skew.txt new file mode 100644 index 00000000..9c0a3654 --- /dev/null +++ b/src/dbtest/t/mongodb/half-predicate-write-skew.txt @@ -0,0 +1,20 @@ +0-1-t1.put(1, 1) +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.get(1) +5-1-t1.put(1, 2) +6-2-t1.put(0, 0) +7-1-commit +8-2-commit +9-3-t1.get(*) + +serializable { +2-null +4-1,2 +9-1,2 0,0 + +2-0,0 +4-1,1 +9-1,2 0,0 +} diff --git a/src/dbtest/t/mongodb/intermediate-reads.txt b/src/dbtest/t/mongodb/intermediate-reads.txt new file mode 100644 index 00000000..67154ebc --- /dev/null +++ b/src/dbtest/t/mongodb/intermediate-reads.txt @@ -0,0 +1,18 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.get(0) +5-2-commit +6-1-t1.put(0, 2) +7-1-commit +8-3-t1.get(*) + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/mongodb/intermediate-write1.txt b/src/dbtest/t/mongodb/intermediate-write1.txt new file mode 100644 index 00000000..5a622665 --- /dev/null +++ b/src/dbtest/t/mongodb/intermediate-write1.txt @@ -0,0 +1,15 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-1-t1.put(0, 3) +6-2-commit +7-1-commit +8-3-t1.put(*) + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/mongodb/intermediate-write2.txt b/src/dbtest/t/mongodb/intermediate-write2.txt new file mode 100644 index 00000000..c2b67f91 --- /dev/null +++ b/src/dbtest/t/mongodb/intermediate-write2.txt @@ -0,0 +1,15 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(1, 0) +3-2-begin +4-2-t1.put(0, 2) +5-2-commit +6-1-t1.put(0, 3) +7-1-commit +8-3-t1.get(*) + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/mongodb/long-fork-anomaly.txt b/src/dbtest/t/mongodb/long-fork-anomaly.txt new file mode 100644 index 00000000..f99a537e --- /dev/null +++ b/src/dbtest/t/mongodb/long-fork-anomaly.txt @@ -0,0 +1,103 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-4-begin +2-4-t1.get(0) +3-1-begin +4-1-t1.put(0, 1) +5-3-begin +6-3-t1.get(1) +7-3-t1.get(0) +8-2-begin +9-2-t1.put(1, 1) +10-4-t1.get(1) +11-1-commit +12-2-commit +13-3-commit +14-4-commit +15-4-t1.get(*) + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/lost-self-update1.txt b/src/dbtest/t/mongodb/lost-self-update1.txt new file mode 100644 index 00000000..fdbe8006 --- /dev/null +++ b/src/dbtest/t/mongodb/lost-self-update1.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-1-t1.get(0) +6-2-commit +7-1-commit +8-3-t1.get(*) + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/lost-self-update2.txt b/src/dbtest/t/mongodb/lost-self-update2.txt new file mode 100644 index 00000000..b137d979 --- /dev/null +++ b/src/dbtest/t/mongodb/lost-self-update2.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-commit +6-1-t1.get(0) +7-1-commit +8-3-t1.get(*) + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/lost-update1.txt b/src/dbtest/t/mongodb/lost-update1.txt new file mode 100644 index 00000000..854ef25e --- /dev/null +++ b/src/dbtest/t/mongodb/lost-update1.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 2) +5-1-t1.put(0, 1) +6-2-commit +7-1-commit +8-3-t1.get(*) + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/lost-update2.txt b/src/dbtest/t/mongodb/lost-update2.txt new file mode 100644 index 00000000..42b409f4 --- /dev/null +++ b/src/dbtest/t/mongodb/lost-update2.txt @@ -0,0 +1,17 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 2) +5-2-commit +6-1-t1.put(0, 1) +7-1-commit +8-3-t1.get(*) + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/middle-read.txt b/src/dbtest/t/mongodb/middle-read.txt new file mode 100644 index 00000000..f8319ec3 --- /dev/null +++ b/src/dbtest/t/mongodb/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/mongodb/non-repeatable-read1.txt b/src/dbtest/t/mongodb/non-repeatable-read1.txt new file mode 100644 index 00000000..740e0f60 --- /dev/null +++ b/src/dbtest/t/mongodb/non-repeatable-read1.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-commit +6-1-t1.get(0) +7-1-commit +8-3-t1.get(*) + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/non-repeatable-read2.txt b/src/dbtest/t/mongodb/non-repeatable-read2.txt new file mode 100644 index 00000000..d08bc72c --- /dev/null +++ b/src/dbtest/t/mongodb/non-repeatable-read2.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-1-t1.get(0) +6-2-commit +7-1-commit +8-3-t1.get(*) + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mongodb/phantom-read.txt b/src/dbtest/t/mongodb/phantom-read.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/src/dbtest/t/mongodb/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/mongodb/predicate-sawtooth.txt b/src/dbtest/t/mongodb/predicate-sawtooth.txt new file mode 100644 index 00000000..315b87fb --- /dev/null +++ b/src/dbtest/t/mongodb/predicate-sawtooth.txt @@ -0,0 +1,45 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.getpred(0) +5-3-begin +6-3-t1.getpred(0) +7-1-t1.put(0, 0) +8-2-t1.put(1, 0) +9-3-t1.put(2, 0) +10-1-commit +11-2-commit +12-3-commit +13-4-t1.get(*) + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/mongodb/primary-colors.txt b/src/dbtest/t/mongodb/primary-colors.txt new file mode 100644 index 00000000..2ba9931b --- /dev/null +++ b/src/dbtest/t/mongodb/primary-colors.txt @@ -0,0 +1,27 @@ +0-1-dots.put(1, red) +0-1-dots.put(2, yellow) +0-1-dots.put(3, blue) +0-1-dots.put(4, red) +0-1-dots.put(5, yellow) +0-1-dots.put(6, blue) +0-1-commit +1-1-begin +2-1-dots.putpred(red, yellow) +3-2-begin +4-2-dots.putpred(yellow, blue) +5-3-begin +6-3-dots.putpred(blue, red) +7-1-commit +8-2-commit +9-3-commit +10-4-dots.get(*) +11-4-commit + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/mongodb/primary-colors2.txt b/src/dbtest/t/mongodb/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/mongodb/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/mongodb/rat-special.txt b/src/dbtest/t/mongodb/rat-special.txt new file mode 100644 index 00000000..67728e53 --- /dev/null +++ b/src/dbtest/t/mongodb/rat-special.txt @@ -0,0 +1,48 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-3-begin +2-3-t1.get(0) +3-1-begin +4-1-t1.put(0, 1) +5-1-t1.put(1, 1) +6-1-commit +7-2-begin +8-2-t1.get(2) +9-3-t1.put(2, 1) +10-2-t1.get(1) +11-2-commit +12-3-commit +13-4-t1.get(*) + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mongodb/rat-special2.txt b/src/dbtest/t/mongodb/rat-special2.txt new file mode 100644 index 00000000..679c372d --- /dev/null +++ b/src/dbtest/t/mongodb/rat-special2.txt @@ -0,0 +1,48 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-3-begin +2-3-t1.get(0) +3-1-begin +4-1-t1.put(0, 1) +5-1-t1.put(1, 1) +6-1-commit +7-2-begin +8-2-t1.get(2) +9-3-t1.put(2, 1) +10-3-commit +11-2-t1.get(1) +12-2-commit +13-4-t1.get(*) + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt b/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..9e48429b --- /dev/null +++ b/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt @@ -0,0 +1,60 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-1-t1.get(1) +4-2-begin +5-2-t1.get(1) +6-2-t1.put(1, 20) +7-2-commit +8-3-begin +9-3-t1.get(0) +10-3-t1.get(1) +11-3-commit +12-1-t1.put(0, 11) +13-1-commit +14-3-t1.get(*) + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/mongodb/read-skew1.txt b/src/dbtest/t/mongodb/read-skew1.txt new file mode 100644 index 00000000..daf4c0a2 --- /dev/null +++ b/src/dbtest/t/mongodb/read-skew1.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.get(1) +8-1-commit +9-3-t1.get(*) + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/read-skew2.txt b/src/dbtest/t/mongodb/read-skew2.txt new file mode 100644 index 00000000..f9b7dd78 --- /dev/null +++ b/src/dbtest/t/mongodb/read-skew2.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 1) +6-1-t1.get(1) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/read-skew3.txt b/src/dbtest/t/mongodb/read-skew3.txt new file mode 100644 index 00000000..65768575 --- /dev/null +++ b/src/dbtest/t/mongodb/read-skew3.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.get(0) +5-2-t1.get(1) +6-1-t1.put(1, 1) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/read-write-skew1-1.txt b/src/dbtest/t/mongodb/read-write-skew1-1.txt new file mode 100644 index 00000000..a4518b85 --- /dev/null +++ b/src/dbtest/t/mongodb/read-write-skew1-1.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 2) +6-1-t1.put(1, 1) +7-1-commit +8-2-commit +9-3-t1.get(*) + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/read-write-skew1-2.txt b/src/dbtest/t/mongodb/read-write-skew1-2.txt new file mode 100644 index 00000000..191795cc --- /dev/null +++ b/src/dbtest/t/mongodb/read-write-skew1-2.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(0, 2) +5-2-t1.get(1) +6-1-t1.put(1, 1) +7-1-commit +8-2-commit +9-3-t1.get(*) + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/read-write-skew2.txt b/src/dbtest/t/mongodb/read-write-skew2.txt new file mode 100644 index 00000000..5502351f --- /dev/null +++ b/src/dbtest/t/mongodb/read-write-skew2.txt @@ -0,0 +1,19 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.put(1, 2) +8-1-commit +9-3-t1.get(*) + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/mongodb/sawtooth.txt b/src/dbtest/t/mongodb/sawtooth.txt new file mode 100644 index 00000000..7a090890 --- /dev/null +++ b/src/dbtest/t/mongodb/sawtooth.txt @@ -0,0 +1,48 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.get(1) +5-3-begin +6-3-t1.get(2) +7-1-t1.put(1, 1) +8-2-t1.put(2, 1) +9-3-t1.put(0, 1) +10-1-commit +11-2-commit +12-3-commit +13-4-t1.get(*) + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt b/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..4e56eac4 --- /dev/null +++ b/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt @@ -0,0 +1,27 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 1) +6-2-commit +7-1-t1.get(0) +8-1-t1.get(1) +9-1-commit +10-3-t1.get(*) + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/mongodb/step-read-skew.txt b/src/dbtest/t/mongodb/step-read-skew.txt new file mode 100644 index 00000000..3ea30e55 --- /dev/null +++ b/src/dbtest/t/mongodb/step-read-skew.txt @@ -0,0 +1,40 @@ +0-1-t1.put(0, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.put(0, 1) +5-2-t1.put(1, 0) +6-2-commit +7-3-begin +8-3-t1.put(1, 1) +9-3-t1.put(2, 0) +10-3-commit +11-1-t1.get(2) +12-1-commit +13-4-t1.get(*) + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/mongodb/step-wat.txt b/src/dbtest/t/mongodb/step-wat.txt new file mode 100644 index 00000000..6b572464 --- /dev/null +++ b/src/dbtest/t/mongodb/step-wat.txt @@ -0,0 +1,70 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-1-begin +2-1-t1.get(1) +3-2-begin +4-2-t1.get(0) +5-2-t1.put(0, 1) +6-2-t1.get(1) +7-2-t1.put(1, 1) +8-3-begin +9-3-t1.put(0, 2) +10-2-commit +11-3-t1.get(2) +12-3-t1.put(2, 1) +13-3-commit +14-1-t1.get(1) +15-1-t1.get(2) +16-1-commit +17-4-t1.get(*) + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,1 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,1 +17-0,1 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt b/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..d608806e --- /dev/null +++ b/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt @@ -0,0 +1,19 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.put(1, 1) +5-2-t1.put(0, 0) +6-2-commit +7-1-t1.getpred(1) +8-1-commit +9-3-t1.get(*) + +serializable { +2-null +7-null +9-0,0 1,1 + +2-0,0 +7-1,1 +9-0,0 1,1 +} diff --git a/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt b/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..e1a3202e --- /dev/null +++ b/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt @@ -0,0 +1,19 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.getpred(1) +5-1-t1.put(1, 1) +6-2-t1.put(0, 0) +7-1-commit +8-2-commit +9-3-t1.get(*) + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt b/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..e37ef229 --- /dev/null +++ b/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt @@ -0,0 +1,20 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.put(0, 0) +5-2-t1.put(1, 0) +6-2-commit +7-1-t1.getpred(0) +8-1-commit +9-3-t1.get(*) + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt b/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..8fd7d1a7 --- /dev/null +++ b/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt @@ -0,0 +1,23 @@ +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.put(1, 1) +5-2-t1.put(2, 1) +6-2-commit +7-1-t1.get(*) +8-1-commit +9-3-t1.get(*) + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt b/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..4e800853 --- /dev/null +++ b/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt @@ -0,0 +1,19 @@ +1-1-begin +2-1-t1.getpred(0) +3-2-begin +4-2-t1.getpred(0) +5-1-t1.put(1, 0) +6-2-t1.put(0, 0) +7-1-commit +8-2-commit +9-3-t1.get(*) + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/mongodb/unnamed-anomaly.txt b/src/dbtest/t/mongodb/unnamed-anomaly.txt new file mode 100644 index 00000000..a4b835df --- /dev/null +++ b/src/dbtest/t/mongodb/unnamed-anomaly.txt @@ -0,0 +1,63 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +0-1-t1.put(2, 0) +1-1-begin +2-1-t1.get(1) +3-2-begin +4-2-t1.get(0) +5-2-t1.put(0, 1) +6-2-t1.get(1) +7-2-t1.put(1,1) +8-2-commit +9-3-begin +10-3-t1.put(0, 2) +11-3-t1.get(2) +12-3-t1.put(2, 1) +13-3-commit +14-1-t1.get(2) +15-1-commit +16-4-t1.get(*) + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/mongodb/write-read-skew1.txt b/src/dbtest/t/mongodb/write-read-skew1.txt new file mode 100644 index 00000000..5a39216f --- /dev/null +++ b/src/dbtest/t/mongodb/write-read-skew1.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.put(1, 1) +5-2-t1.get(0) +6-2-commit +7-1-t1.get(1) +8-1-commit +9-3-t1.get(*) + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mongodb/write-read-skew2.txt b/src/dbtest/t/mongodb/write-read-skew2.txt new file mode 100644 index 00000000..eeb41351 --- /dev/null +++ b/src/dbtest/t/mongodb/write-read-skew2.txt @@ -0,0 +1,22 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.put(0, 1) +3-2-begin +4-2-t1.get(0) +5-2-t1.put(1, 1) +6-1-t1.get(1) +7-2-commit +8-1-commit +9-3-t1.get(*) + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/mongodb/write-skew-black-white.txt b/src/dbtest/t/mongodb/write-skew-black-white.txt new file mode 100644 index 00000000..c526a0ee --- /dev/null +++ b/src/dbtest/t/mongodb/write-skew-black-white.txt @@ -0,0 +1,20 @@ +0-1-dots.put(1, black) +0-1-dots.put(2, white) +0-1-dots.put(3, black) +0-1-dots.put(4, white) +1-1-begin +2-1-dots.putpred(white, black) +3-2-begin +4-2-dots.putpred(black, white) +5-2-commit +6-2-dots.get(*) +7-1-commit +8-3-dots.get(*) + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/mongodb/write-skew-intersecting-data.txt b/src/dbtest/t/mongodb/write-skew-intersecting-data.txt new file mode 100644 index 00000000..86e87b32 --- /dev/null +++ b/src/dbtest/t/mongodb/write-skew-intersecting-data.txt @@ -0,0 +1,26 @@ +0-1-mytab.put(10, 1) +0-1-mytab.put(20, 1) +0-1-mytab.put(100, 2) +0-1-mytab.put(200, 2) +1-1-begin +2-1-mytab.getpred(1) +4-2-begin +6-2-mytab.put(300, 1) +5-2-mytab.getpred(2) +3-1-mytab.put(30, 2) +7-2-commit +8-1-commit +9-3-mytab.getpred(1) +10-3-mytab.getpred(2) + +serializable { +2-10,1 20,1 +5-100,2 200,2 30,2 +9-10,1 20,1 300,1 +10-100,2 200,2 30,2 + +2-10,1 20,1 300,1 +5-100,2 200,2 +9-10,1 20,1 300,1 +10-100,2 200,2 30,2 +} diff --git a/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt b/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..aa388c79 --- /dev/null +++ b/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt @@ -0,0 +1,27 @@ +0-1-account.put(s, 500) +0-1-account.put(c, 500) +1-1-begin +2-1-account.get(s) +3-1-account.get(c) +4-2-begin +5-2-account.get(s) +6-2-account.get(c) +7-2-account.vinc(c, +900) +8-2-commit +9-1-account.vinc(s, +900) +10-1-commit +11-3-account.get(*) + +serializable { +2-s,500 +3-c,500 +5-s,1400 +6-c,500 +11-s,1400 c,1400 + +2-c,1400 +3-s,500 +5-s,500 +6-c,500 +11-s,1400 c,1400 +} diff --git a/src/dbtest/t/mongodb/write-skew.txt b/src/dbtest/t/mongodb/write-skew.txt new file mode 100644 index 00000000..d745e782 --- /dev/null +++ b/src/dbtest/t/mongodb/write-skew.txt @@ -0,0 +1,21 @@ +0-1-t1.put(0, 0) +0-1-t1.put(1, 0) +1-1-begin +2-1-t1.get(0) +3-2-begin +4-2-t1.get(1) +5-1-t1.put(1, 1) +6-1-commit +7-2-t1.put(0, 1) +8-2-commit +9-3-t1.get(*) + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/aborted-reads.txt b/src/dbtest/t/mysql/aborted-reads.txt new file mode 100644 index 00000000..835545bd --- /dev/null +++ b/src/dbtest/t/mysql/aborted-reads.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-3-COMMIT; + +serializable { +4-null +7-null +} +liyu diff --git a/src/dbtest/t/mysql/causality-violation-anomaly.txt b/src/dbtest/t/mysql/causality-violation-anomaly.txt new file mode 100644 index 00000000..291f51ff --- /dev/null +++ b/src/dbtest/t/mysql/causality-violation-anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/cross-phantom.txt b/src/dbtest/t/mysql/cross-phantom.txt new file mode 100644 index 00000000..c0dac7eb --- /dev/null +++ b/src/dbtest/t/mysql/cross-phantom.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/mysql/cross-phenomenon.txt b/src/dbtest/t/mysql/cross-phenomenon.txt new file mode 100644 index 00000000..0b53fcbe --- /dev/null +++ b/src/dbtest/t/mysql/cross-phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/dirty-read.txt b/src/dbtest/t/mysql/dirty-read.txt new file mode 100644 index 00000000..c374d930 --- /dev/null +++ b/src/dbtest/t/mysql/dirty-read.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +4-1-INSERT INTO t1 VALUES (0, 0); +5-2-SELECT * from t1 WHERE k = 0; +6-1-ROLLBACK; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-null +8-null +} diff --git a/src/dbtest/t/mysql/dirty-write1.txt b/src/dbtest/t/mysql/dirty-write1.txt new file mode 100644 index 00000000..54fcbfb8 --- /dev/null +++ b/src/dbtest/t/mysql/dirty-write1.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/mysql/dirty-write2.txt b/src/dbtest/t/mysql/dirty-write2.txt new file mode 100644 index 00000000..507f8d52 --- /dev/null +++ b/src/dbtest/t/mysql/dirty-write2.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/mysql/double-write-skew1-1.txt b/src/dbtest/t/mysql/double-write-skew1-1.txt new file mode 100644 index 00000000..4b09edc5 --- /dev/null +++ b/src/dbtest/t/mysql/double-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/mysql/double-write-skew1-2.txt b/src/dbtest/t/mysql/double-write-skew1-2.txt new file mode 100644 index 00000000..22fcab9e --- /dev/null +++ b/src/dbtest/t/mysql/double-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/double-write-skew1-3.txt b/src/dbtest/t/mysql/double-write-skew1-3.txt new file mode 100644 index 00000000..dd265dde --- /dev/null +++ b/src/dbtest/t/mysql/double-write-skew1-3.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/double-write-skew2.txt b/src/dbtest/t/mysql/double-write-skew2.txt new file mode 100644 index 00000000..08e18580 --- /dev/null +++ b/src/dbtest/t/mysql/double-write-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/mysql/fractured-reads.txt b/src/dbtest/t/mysql/fractured-reads.txt new file mode 100644 index 00000000..31d8850e --- /dev/null +++ b/src/dbtest/t/mysql/fractured-reads.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/mysql/full-write-skew1.txt b/src/dbtest/t/mysql/full-write-skew1.txt new file mode 100644 index 00000000..bfd24587 --- /dev/null +++ b/src/dbtest/t/mysql/full-write-skew1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-UPDATE t1 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/mysql/full-write-skew2.txt b/src/dbtest/t/mysql/full-write-skew2.txt new file mode 100644 index 00000000..3917320f --- /dev/null +++ b/src/dbtest/t/mysql/full-write-skew2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/mysql/half-predicate-read-skew.txt b/src/dbtest/t/mysql/half-predicate-read-skew.txt new file mode 100644 index 00000000..bcfad45b --- /dev/null +++ b/src/dbtest/t/mysql/half-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-1,1 +9-0,0 1,2 + +2-0,0 +7-1,2 +9-0,0 1,2 +} diff --git a/src/dbtest/t/mysql/half-predicate-write-skew.txt b/src/dbtest/t/mysql/half-predicate-write-skew.txt new file mode 100644 index 00000000..d8d3056c --- /dev/null +++ b/src/dbtest/t/mysql/half-predicate-write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/mysql/intermediate-reads.txt b/src/dbtest/t/mysql/intermediate-reads.txt new file mode 100644 index 00000000..cd9132fe --- /dev/null +++ b/src/dbtest/t/mysql/intermediate-reads.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/mysql/intermediate-write1.txt b/src/dbtest/t/mysql/intermediate-write1.txt new file mode 100644 index 00000000..c5c3ea3a --- /dev/null +++ b/src/dbtest/t/mysql/intermediate-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/mysql/intermediate-write2.txt b/src/dbtest/t/mysql/intermediate-write2.txt new file mode 100644 index 00000000..7faf77b0 --- /dev/null +++ b/src/dbtest/t/mysql/intermediate-write2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/mysql/long-fork-anomaly.txt b/src/dbtest/t/mysql/long-fork-anomaly.txt new file mode 100644 index 00000000..727c16f0 --- /dev/null +++ b/src/dbtest/t/mysql/long-fork-anomaly.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/lost-self-update1.txt b/src/dbtest/t/mysql/lost-self-update1.txt new file mode 100644 index 00000000..ad197022 --- /dev/null +++ b/src/dbtest/t/mysql/lost-self-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mysql/lost-self-update2.txt b/src/dbtest/t/mysql/lost-self-update2.txt new file mode 100644 index 00000000..7b8a0059 --- /dev/null +++ b/src/dbtest/t/mysql/lost-self-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mysql/lost-update1.txt b/src/dbtest/t/mysql/lost-update1.txt new file mode 100644 index 00000000..26240f28 --- /dev/null +++ b/src/dbtest/t/mysql/lost-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/mysql/lost-update2.txt b/src/dbtest/t/mysql/lost-update2.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/mysql/lost-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/mysql/middle-read.txt b/src/dbtest/t/mysql/middle-read.txt new file mode 100644 index 00000000..f8319ec3 --- /dev/null +++ b/src/dbtest/t/mysql/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/mysql/non-repeatable-read1.txt b/src/dbtest/t/mysql/non-repeatable-read1.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/mysql/non-repeatable-read1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mysql/non-repeatable-read2.txt b/src/dbtest/t/mysql/non-repeatable-read2.txt new file mode 100644 index 00000000..16a4b884 --- /dev/null +++ b/src/dbtest/t/mysql/non-repeatable-read2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/mysql/phantom-read.txt b/src/dbtest/t/mysql/phantom-read.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/src/dbtest/t/mysql/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/mysql/predicate-sawtooth.txt b/src/dbtest/t/mysql/predicate-sawtooth.txt new file mode 100644 index 00000000..07277c6d --- /dev/null +++ b/src/dbtest/t/mysql/predicate-sawtooth.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/mysql/primary-colors.txt b/src/dbtest/t/mysql/primary-colors.txt new file mode 100644 index 00000000..9c35d985 --- /dev/null +++ b/src/dbtest/t/mysql/primary-colors.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('red'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('red'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/mysql/primary-colors2.txt b/src/dbtest/t/mysql/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/mysql/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/mysql/rat-special.txt b/src/dbtest/t/mysql/rat-special.txt new file mode 100644 index 00000000..2ab8db87 --- /dev/null +++ b/src/dbtest/t/mysql/rat-special.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mysql/rat-special2.txt b/src/dbtest/t/mysql/rat-special2.txt new file mode 100644 index 00000000..d99cfc58 --- /dev/null +++ b/src/dbtest/t/mysql/rat-special2.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/mysql/read-only-transaction-anomaly.txt b/src/dbtest/t/mysql/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..a684704c --- /dev/null +++ b/src/dbtest/t/mysql/read-only-transaction-anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/mysql/read-skew1.txt b/src/dbtest/t/mysql/read-skew1.txt new file mode 100644 index 00000000..2a500247 --- /dev/null +++ b/src/dbtest/t/mysql/read-skew1.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/read-skew2.txt b/src/dbtest/t/mysql/read-skew2.txt new file mode 100644 index 00000000..0075542e --- /dev/null +++ b/src/dbtest/t/mysql/read-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/read-skew3.txt b/src/dbtest/t/mysql/read-skew3.txt new file mode 100644 index 00000000..16031984 --- /dev/null +++ b/src/dbtest/t/mysql/read-skew3.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/read-write-skew1-1.txt b/src/dbtest/t/mysql/read-write-skew1-1.txt new file mode 100644 index 00000000..0ded781d --- /dev/null +++ b/src/dbtest/t/mysql/read-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/read-write-skew1-2.txt b/src/dbtest/t/mysql/read-write-skew1-2.txt new file mode 100644 index 00000000..2ae13088 --- /dev/null +++ b/src/dbtest/t/mysql/read-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/mysql/read-write-skew2.txt b/src/dbtest/t/mysql/read-write-skew2.txt new file mode 100644 index 00000000..6c82b70c --- /dev/null +++ b/src/dbtest/t/mysql/read-write-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/mysql/sawtooth.txt b/src/dbtest/t/mysql/sawtooth.txt new file mode 100644 index 00000000..4e57bfc5 --- /dev/null +++ b/src/dbtest/t/mysql/sawtooth.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt b/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..e0135311 --- /dev/null +++ b/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/mysql/step-read-skew.txt b/src/dbtest/t/mysql/step-read-skew.txt new file mode 100644 index 00000000..7b1c68f5 --- /dev/null +++ b/src/dbtest/t/mysql/step-read-skew.txt @@ -0,0 +1,45 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/mysql/step-wat.txt b/src/dbtest/t/mysql/step-wat.txt new file mode 100644 index 00000000..807ef480 --- /dev/null +++ b/src/dbtest/t/mysql/step-wat.txt @@ -0,0 +1,75 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-3-BEGIN; +9-3-update t1 set v=2 where k=0; +10-2-commit; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=1; +15-1-select * from t1 where k=2; +16-1-commit; +17-4-select * from t1; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,1 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,1 +17-0,1 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt b/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..74701f0c --- /dev/null +++ b/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,1 + +2-0,0 +7-1,1 +9-0,0 1,1 +} diff --git a/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt b/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..560206ed --- /dev/null +++ b/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/mysql/total-same-predicate-read-skew.txt b/src/dbtest/t/mysql/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..0c39b464 --- /dev/null +++ b/src/dbtest/t/mysql/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt b/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..3456462b --- /dev/null +++ b/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-commit; +7-1-select * from t1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/mysql/total-same-predicate-write-skew.txt b/src/dbtest/t/mysql/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..5174028f --- /dev/null +++ b/src/dbtest/t/mysql/total-same-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/mysql/unnamed-anomaly.txt b/src/dbtest/t/mysql/unnamed-anomaly.txt new file mode 100644 index 00000000..0cac37c6 --- /dev/null +++ b/src/dbtest/t/mysql/unnamed-anomaly.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/mysql/write-read-skew1.txt b/src/dbtest/t/mysql/write-read-skew1.txt new file mode 100644 index 00000000..95c25f23 --- /dev/null +++ b/src/dbtest/t/mysql/write-read-skew1.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/mysql/write-read-skew2.txt b/src/dbtest/t/mysql/write-read-skew2.txt new file mode 100644 index 00000000..ed383947 --- /dev/null +++ b/src/dbtest/t/mysql/write-read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/mysql/write-skew-black-white.txt b/src/dbtest/t/mysql/write-skew-black-white.txt new file mode 100644 index 00000000..231a0111 --- /dev/null +++ b/src/dbtest/t/mysql/write-skew-black-white.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('black'); +0-1-insert into dots(color) values('white'); +0-1-insert into dots(color) values('black'); +0-1-insert into dots(color) values('white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/mysql/write-skew-intersecting-data.txt b/src/dbtest/t/mysql/write-skew-intersecting-data.txt new file mode 100644 index 00000000..8087ed2a --- /dev/null +++ b/src/dbtest/t/mysql/write-skew-intersecting-data.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +4-2-BEGIN; +6-2-INSERT INTO mytab VALUES (1, 300); +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +3-1-INSERT INTO mytab VALUES (2, 30); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-COMMIT; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/mysql/write-skew-overdraft-protection.txt b/src/dbtest/t/mysql/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..615c4e7c --- /dev/null +++ b/src/dbtest/t/mysql/write-skew-overdraft-protection.txt @@ -0,0 +1,25 @@ +ParamNum:3 +0-1-drop table if exists account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/mysql/write-skew.txt b/src/dbtest/t/mysql/write-skew.txt new file mode 100644 index 00000000..51eb55df --- /dev/null +++ b/src/dbtest/t/mysql/write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/aborted-reads.txt b/src/dbtest/t/ob/aborted-reads.txt new file mode 100644 index 00000000..c5b92ea7 --- /dev/null +++ b/src/dbtest/t/ob/aborted-reads.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-3-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-2-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/ob/causality-violation-anomaly.txt b/src/dbtest/t/ob/causality-violation-anomaly.txt new file mode 100644 index 00000000..13e6adc1 --- /dev/null +++ b/src/dbtest/t/ob/causality-violation-anomaly.txt @@ -0,0 +1,52 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-DROP TABLE t1; +14-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/ob/cross-phantom.txt b/src/dbtest/t/ob/cross-phantom.txt new file mode 100644 index 00000000..3e83d239 --- /dev/null +++ b/src/dbtest/t/ob/cross-phantom.txt @@ -0,0 +1,107 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-DROP TABLE t1; +17-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/ob/cross-phenomenon.txt b/src/dbtest/t/ob/cross-phenomenon.txt new file mode 100644 index 00000000..558ded18 --- /dev/null +++ b/src/dbtest/t/ob/cross-phenomenon.txt @@ -0,0 +1,109 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-DROP TABLE t1; +17-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/ob/dirty-read.txt b/src/dbtest/t/ob/dirty-read.txt new file mode 100644 index 00000000..11978bd0 --- /dev/null +++ b/src/dbtest/t/ob/dirty-read.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-INSERT INTO t1 VALUES (0, 0); +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/ob/dirty-write1.txt b/src/dbtest/t/ob/dirty-write1.txt new file mode 100644 index 00000000..7f2ce606 --- /dev/null +++ b/src/dbtest/t/ob/dirty-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/ob/dirty-write2.txt b/src/dbtest/t/ob/dirty-write2.txt new file mode 100644 index 00000000..5fc0eb32 --- /dev/null +++ b/src/dbtest/t/ob/dirty-write2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t2 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t2 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t2; +8-3-DROP TABLE t2; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/ob/double-write-skew.txt b/src/dbtest/t/ob/double-write-skew.txt new file mode 100644 index 00000000..d47d04af --- /dev/null +++ b/src/dbtest/t/ob/double-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/ob/double-write-skew1-1.txt b/src/dbtest/t/ob/double-write-skew1-1.txt new file mode 100644 index 00000000..31338a02 --- /dev/null +++ b/src/dbtest/t/ob/double-write-skew1-1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/ob/double-write-skew1-2.txt b/src/dbtest/t/ob/double-write-skew1-2.txt new file mode 100644 index 00000000..9e6e5e2f --- /dev/null +++ b/src/dbtest/t/ob/double-write-skew1-2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t8; +0-1-CREATE TABLE t8 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t8 VALUES (0, 0); +0-1-INSERT INTO t8 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t8 set v=1 where k=0; +3-2-begin; +4-2-update t8 set v=2 where k=0; +5-2-update t8 set v=1 where k=1; +6-1-select * from t8 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t8; +10-3-DROP TABLE t8; +11-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/double-write-skew1-3.txt b/src/dbtest/t/ob/double-write-skew1-3.txt new file mode 100644 index 00000000..dc7344e5 --- /dev/null +++ b/src/dbtest/t/ob/double-write-skew1-3.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/double-write-skew2.txt b/src/dbtest/t/ob/double-write-skew2.txt new file mode 100644 index 00000000..15088618 --- /dev/null +++ b/src/dbtest/t/ob/double-write-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/ob/fractured-reads.txt b/src/dbtest/t/ob/fractured-reads.txt new file mode 100644 index 00000000..6f1a1f74 --- /dev/null +++ b/src/dbtest/t/ob/fractured-reads.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-DROP TABLE t1; +12-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/ob/full-write-skew1.txt b/src/dbtest/t/ob/full-write-skew1.txt new file mode 100644 index 00000000..f8b6aceb --- /dev/null +++ b/src/dbtest/t/ob/full-write-skew1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t12; +0-1-CREATE TABLE t12 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t12 VALUES (0, 0); +0-1-INSERT INTO t12 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t12 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t12 SET v=2 WHERE k=0; +5-2-UPDATE t12 SET v=1 WHERE k=1; +6-1-UPDATE t12 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t12; +10-3-DROP TABLE t12; +11-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/ob/full-write-skew2.txt b/src/dbtest/t/ob/full-write-skew2.txt new file mode 100644 index 00000000..5d20a957 --- /dev/null +++ b/src/dbtest/t/ob/full-write-skew2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t13; +0-1-CREATE TABLE t13 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t13 VALUES (0, 0); +0-1-INSERT INTO t13 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t13 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t13 SET v=2 WHERE k=0; +5-2-UPDATE t13 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t13 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t13; +10-3-DROP TABLE t13; +11-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/ob/half-predicate-read-skew.txt b/src/dbtest/t/ob/half-predicate-read-skew.txt new file mode 100644 index 00000000..6694025a --- /dev/null +++ b/src/dbtest/t/ob/half-predicate-read-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT;; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-1,1 +9-1,2 0,0 + +2-0,0 +7-1,2 +9-1,2 0,0 +} diff --git a/src/dbtest/t/ob/half-predicate-write-skew.txt b/src/dbtest/t/ob/half-predicate-write-skew.txt new file mode 100644 index 00000000..66cfbe16 --- /dev/null +++ b/src/dbtest/t/ob/half-predicate-write-skew.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/ob/intermediate-reads.txt b/src/dbtest/t/ob/intermediate-reads.txt new file mode 100644 index 00000000..905df765 --- /dev/null +++ b/src/dbtest/t/ob/intermediate-reads.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-drop table t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-drop table t1; +10-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/ob/intermediate-write1.txt b/src/dbtest/t/ob/intermediate-write1.txt new file mode 100644 index 00000000..ea77a0de --- /dev/null +++ b/src/dbtest/t/ob/intermediate-write1.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE t3; +0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t3 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t3 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t3 SET v=2 WHERE k=0; +5-1-UPDATE t3 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t3; +9-3-DROP TABLE t3; +10-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/ob/intermediate-write2.txt b/src/dbtest/t/ob/intermediate-write2.txt new file mode 100644 index 00000000..f827b424 --- /dev/null +++ b/src/dbtest/t/ob/intermediate-write2.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE t4; +0-1-CREATE TABLE t4 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t4 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t4 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t4 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t4 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t4; +9-3-DROP TABLE t4; +10-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/ob/long-fork-anomaly.txt b/src/dbtest/t/ob/long-fork-anomaly.txt new file mode 100644 index 00000000..fbd7d224 --- /dev/null +++ b/src/dbtest/t/ob/long-fork-anomaly.txt @@ -0,0 +1,109 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-DROP TABLE t1; +17-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/ob/lost-self-update1.txt b/src/dbtest/t/ob/lost-self-update1.txt new file mode 100644 index 00000000..de58b8b0 --- /dev/null +++ b/src/dbtest/t/ob/lost-self-update1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/ob/lost-self-update2.txt b/src/dbtest/t/ob/lost-self-update2.txt new file mode 100644 index 00000000..f0a2cb68 --- /dev/null +++ b/src/dbtest/t/ob/lost-self-update2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/ob/lost-update.txt b/src/dbtest/t/ob/lost-update.txt new file mode 100644 index 00000000..c9fc1ec3 --- /dev/null +++ b/src/dbtest/t/ob/lost-update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/ob/lost-update1.txt b/src/dbtest/t/ob/lost-update1.txt new file mode 100644 index 00000000..7c9797b1 --- /dev/null +++ b/src/dbtest/t/ob/lost-update1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/ob/lost-update2.txt b/src/dbtest/t/ob/lost-update2.txt new file mode 100644 index 00000000..f15615ef --- /dev/null +++ b/src/dbtest/t/ob/lost-update2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-1-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/ob/middle-read.txt b/src/dbtest/t/ob/middle-read.txt new file mode 100644 index 00000000..6a6e155a --- /dev/null +++ b/src/dbtest/t/ob/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/ob/non-repeatable-read1.txt b/src/dbtest/t/ob/non-repeatable-read1.txt new file mode 100644 index 00000000..2758b374 --- /dev/null +++ b/src/dbtest/t/ob/non-repeatable-read1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/ob/non-repeatable-read2.txt b/src/dbtest/t/ob/non-repeatable-read2.txt new file mode 100644 index 00000000..f1a126d5 --- /dev/null +++ b/src/dbtest/t/ob/non-repeatable-read2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/ob/phantom-read.txt b/src/dbtest/t/ob/phantom-read.txt new file mode 100644 index 00000000..28a8dd28 --- /dev/null +++ b/src/dbtest/t/ob/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/ob/predicate-sawtooth.txt b/src/dbtest/t/ob/predicate-sawtooth.txt new file mode 100644 index 00000000..1985e507 --- /dev/null +++ b/src/dbtest/t/ob/predicate-sawtooth.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/ob/primary-colors.txt b/src/dbtest/t/ob/primary-colors.txt new file mode 100644 index 00000000..ae93ed7a --- /dev/null +++ b/src/dbtest/t/ob/primary-colors.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-drop table dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'red'); +0-1-insert into dots values(2, 'yellow'); +0-1-insert into dots values(3, 'blue'); +0-1-insert into dots values(4, 'red'); +0-1-insert into dots values(5, 'yellow'); +0-1-insert into dots values(6, 'blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-drop table dots; +12-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/ob/primary-colors2.txt b/src/dbtest/t/ob/primary-colors2.txt new file mode 100644 index 00000000..66dd47e3 --- /dev/null +++ b/src/dbtest/t/ob/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-drop table dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/ob/rat-special.txt b/src/dbtest/t/ob/rat-special.txt new file mode 100644 index 00000000..92d342da --- /dev/null +++ b/src/dbtest/t/ob/rat-special.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/ob/rat-special2.txt b/src/dbtest/t/ob/rat-special2.txt new file mode 100644 index 00000000..d980b0ca --- /dev/null +++ b/src/dbtest/t/ob/rat-special2.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/ob/read-only-transaction-anomaly.txt b/src/dbtest/t/ob/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..8820ce84 --- /dev/null +++ b/src/dbtest/t/ob/read-only-transaction-anomaly.txt @@ -0,0 +1,66 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-DROP TABLE t1; +16-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/ob/read-skew1.txt b/src/dbtest/t/ob/read-skew1.txt new file mode 100644 index 00000000..ecc427ea --- /dev/null +++ b/src/dbtest/t/ob/read-skew1.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/read-skew2.txt b/src/dbtest/t/ob/read-skew2.txt new file mode 100644 index 00000000..d335f57a --- /dev/null +++ b/src/dbtest/t/ob/read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-INSERT INTO t2 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t2 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t2 SET v=1 WHERE k=0; +5-2-UPDATE t2 SET v=1 WHERE k=1; +6-1-SELECT * from t2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t2; +10-3-DROP TABLE t2; +11-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/read-skew3.txt b/src/dbtest/t/ob/read-skew3.txt new file mode 100644 index 00000000..6331ea2e --- /dev/null +++ b/src/dbtest/t/ob/read-skew3.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-INSERT INTO t2 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t2 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t2 WHERE k=0; +5-2-SELECT * from t2 WHERE k=1; +6-1-UPDATE t2 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t2; +10-3-DROP TABLE t2; +11-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/read-write-skew1-1.txt b/src/dbtest/t/ob/read-write-skew1-1.txt new file mode 100644 index 00000000..8424ebdf --- /dev/null +++ b/src/dbtest/t/ob/read-write-skew1-1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t10; +0-1-CREATE TABLE t10 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t10 VALUES (0, 0); +0-1-INSERT INTO t10 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t10 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t10 SET v=1 WHERE k=0; +5-2-UPDATE t10 SET v=2 WHERE k=1; +6-1-UPDATE t10 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t10; +10-3-DROP TABLE t10; +11-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/read-write-skew1-2.txt b/src/dbtest/t/ob/read-write-skew1-2.txt new file mode 100644 index 00000000..241b5345 --- /dev/null +++ b/src/dbtest/t/ob/read-write-skew1-2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t11; +0-1-CREATE TABLE t11 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t11 VALUES (0, 0); +0-1-INSERT INTO t11 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t11 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t11 SET v=2 WHERE k=0; +5-2-SELECT * from t11 WHERE k=1; +6-1-UPDATE t11 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t11; +10-3-DROP TABLE t11; +11-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/ob/read-write-skew2.txt b/src/dbtest/t/ob/read-write-skew2.txt new file mode 100644 index 00000000..12e8529c --- /dev/null +++ b/src/dbtest/t/ob/read-write-skew2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/ob/sawtooth.txt b/src/dbtest/t/ob/sawtooth.txt new file mode 100644 index 00000000..921d3dce --- /dev/null +++ b/src/dbtest/t/ob/sawtooth.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/ob/serial-concurrent-phenomenon.txt b/src/dbtest/t/ob/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..62a08674 --- /dev/null +++ b/src/dbtest/t/ob/serial-concurrent-phenomenon.txt @@ -0,0 +1,33 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-DROP TABLE t1; +12-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/ob/step-read-skew.txt b/src/dbtest/t/ob/step-read-skew.txt new file mode 100644 index 00000000..b26799e0 --- /dev/null +++ b/src/dbtest/t/ob/step-read-skew.txt @@ -0,0 +1,46 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/ob/step-wat.txt b/src/dbtest/t/ob/step-wat.txt new file mode 100644 index 00000000..1acfbc43 --- /dev/null +++ b/src/dbtest/t/ob/step-wat.txt @@ -0,0 +1,69 @@ +ParamNum:2 +0-1-drop table t14; +0-1-CREATE TABLE t14 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t14 VALUES (0, 0); +0-1-INSERT INTO t14 VALUES (1, 0); +0-1-INSERT INTO t14 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t14 where k=1; +3-2-BEGIN; +4-2-select * from t14 where k=0; +5-2-update t14 set v=1 where k=0; +6-2-select * from t14 where k=1; +7-2-update t14 set v=1 where k=1; +8-3-BEGIN; +9-3-update t14 set v=2 where k=0; +10-2-commit; +11-3-select * from t14 where k=2; +12-3-update t14 set v=1 where k=2; +13-3-commit; +14-1-select * from t14 where k=2; +15-1-commit; +16-4-select * from t14; +17-4-drop table t14; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/ob/total-diff-predicate-read-skew.txt b/src/dbtest/t/ob/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..b9b63110 --- /dev/null +++ b/src/dbtest/t/ob/total-diff-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-commit; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-null +9-1,1 0,0 + +2-0,0 +7-1,1 +9-1,1 0,0 +} diff --git a/src/dbtest/t/ob/total-diff-predicate-write-skew.txt b/src/dbtest/t/ob/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..60993d01 --- /dev/null +++ b/src/dbtest/t/ob/total-diff-predicate-write-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/ob/total-same-predicate-read-skew.txt b/src/dbtest/t/ob/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..471c53b2 --- /dev/null +++ b/src/dbtest/t/ob/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-commit; +7-1-select * from t1 where v=0; +8-1-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/ob/total-same-predicate-read-skew2.txt b/src/dbtest/t/ob/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..7095bccd --- /dev/null +++ b/src/dbtest/t/ob/total-same-predicate-read-skew2.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-COMMIT; +7-1-select * from t1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/ob/total-same-predicate-write-skew.txt b/src/dbtest/t/ob/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..613944d4 --- /dev/null +++ b/src/dbtest/t/ob/total-same-predicate-write-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/ob/unnamed-anomaly.txt b/src/dbtest/t/ob/unnamed-anomaly.txt new file mode 100644 index 00000000..c504ec08 --- /dev/null +++ b/src/dbtest/t/ob/unnamed-anomaly.txt @@ -0,0 +1,69 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-DROP TABLE t1; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/ob/unrepeatable-read.txt b/src/dbtest/t/ob/unrepeatable-read.txt new file mode 100644 index 00000000..09dddb61 --- /dev/null +++ b/src/dbtest/t/ob/unrepeatable-read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/ob/write-read-skew1.txt b/src/dbtest/t/ob/write-read-skew1.txt new file mode 100644 index 00000000..d186f79f --- /dev/null +++ b/src/dbtest/t/ob/write-read-skew1.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/ob/write-read-skew2.txt b/src/dbtest/t/ob/write-read-skew2.txt new file mode 100644 index 00000000..f20ddfb4 --- /dev/null +++ b/src/dbtest/t/ob/write-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE t3; +0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t3 VALUES (0, 0); +0-1-INSERT INTO t3 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t3 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t3 where k=0; +5-2-update t3 set v=1 where k=1; +6-1-select * from t3 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t3; +10-3-DROP TABLE t3; +11-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/ob/write-skew-black-white.txt b/src/dbtest/t/ob/write-skew-black-white.txt new file mode 100644 index 00000000..e4d4b497 --- /dev/null +++ b/src/dbtest/t/ob/write-skew-black-white.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'black'); +0-1-insert into dots values(2, 'white'); +0-1-insert into dots values(3, 'black'); +0-1-insert into dots values(4, 'white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-4-DROP TABLE dots; +10-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/ob/write-skew-intersecting-data.txt b/src/dbtest/t/ob/write-skew-intersecting-data.txt new file mode 100644 index 00000000..91577120 --- /dev/null +++ b/src/dbtest/t/ob/write-skew-intersecting-data.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10); +0-1-INSERT INTO mytab VALUES(1, 20); +0-1-INSERT INTO mytab VALUES(2, 100); +0-1-INSERT INTO mytab VALUES(2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-commit; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/ob/write-skew-overdraft-protection.txt b/src/dbtest/t/ob/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..87c9bc05 --- /dev/null +++ b/src/dbtest/t/ob/write-skew-overdraft-protection.txt @@ -0,0 +1,27 @@ +ParamNum:3 +0-1-drop table account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500); +0-1-insert into account values('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-drop table account; +12-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/ob/write-skew.txt b/src/dbtest/t/ob/write-skew.txt new file mode 100644 index 00000000..cf78e763 --- /dev/null +++ b/src/dbtest/t/ob/write-skew.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/aborted-reads.txt b/src/dbtest/t/oracle/aborted-reads.txt new file mode 100644 index 00000000..c5b92ea7 --- /dev/null +++ b/src/dbtest/t/oracle/aborted-reads.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-3-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-2-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/oracle/causality-violation-anomaly.txt b/src/dbtest/t/oracle/causality-violation-anomaly.txt new file mode 100644 index 00000000..13e6adc1 --- /dev/null +++ b/src/dbtest/t/oracle/causality-violation-anomaly.txt @@ -0,0 +1,52 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-DROP TABLE t1; +14-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/cross-phantom.txt b/src/dbtest/t/oracle/cross-phantom.txt new file mode 100644 index 00000000..3e83d239 --- /dev/null +++ b/src/dbtest/t/oracle/cross-phantom.txt @@ -0,0 +1,107 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-DROP TABLE t1; +17-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/oracle/cross-phenomenon.txt b/src/dbtest/t/oracle/cross-phenomenon.txt new file mode 100644 index 00000000..558ded18 --- /dev/null +++ b/src/dbtest/t/oracle/cross-phenomenon.txt @@ -0,0 +1,109 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-DROP TABLE t1; +17-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/dirty-read.txt b/src/dbtest/t/oracle/dirty-read.txt new file mode 100644 index 00000000..11978bd0 --- /dev/null +++ b/src/dbtest/t/oracle/dirty-read.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-INSERT INTO t1 VALUES (0, 0); +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/oracle/dirty-write1.txt b/src/dbtest/t/oracle/dirty-write1.txt new file mode 100644 index 00000000..7f2ce606 --- /dev/null +++ b/src/dbtest/t/oracle/dirty-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/oracle/dirty-write2.txt b/src/dbtest/t/oracle/dirty-write2.txt new file mode 100644 index 00000000..5fc0eb32 --- /dev/null +++ b/src/dbtest/t/oracle/dirty-write2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t2 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t2 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t2; +8-3-DROP TABLE t2; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/oracle/double-write-skew.txt b/src/dbtest/t/oracle/double-write-skew.txt new file mode 100644 index 00000000..d47d04af --- /dev/null +++ b/src/dbtest/t/oracle/double-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/oracle/double-write-skew1-1.txt b/src/dbtest/t/oracle/double-write-skew1-1.txt new file mode 100644 index 00000000..31338a02 --- /dev/null +++ b/src/dbtest/t/oracle/double-write-skew1-1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/oracle/double-write-skew1-2.txt b/src/dbtest/t/oracle/double-write-skew1-2.txt new file mode 100644 index 00000000..9e6e5e2f --- /dev/null +++ b/src/dbtest/t/oracle/double-write-skew1-2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t8; +0-1-CREATE TABLE t8 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t8 VALUES (0, 0); +0-1-INSERT INTO t8 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t8 set v=1 where k=0; +3-2-begin; +4-2-update t8 set v=2 where k=0; +5-2-update t8 set v=1 where k=1; +6-1-select * from t8 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t8; +10-3-DROP TABLE t8; +11-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/double-write-skew1-3.txt b/src/dbtest/t/oracle/double-write-skew1-3.txt new file mode 100644 index 00000000..dc7344e5 --- /dev/null +++ b/src/dbtest/t/oracle/double-write-skew1-3.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/double-write-skew2.txt b/src/dbtest/t/oracle/double-write-skew2.txt new file mode 100644 index 00000000..15088618 --- /dev/null +++ b/src/dbtest/t/oracle/double-write-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/oracle/fractured-reads.txt b/src/dbtest/t/oracle/fractured-reads.txt new file mode 100644 index 00000000..6f1a1f74 --- /dev/null +++ b/src/dbtest/t/oracle/fractured-reads.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-DROP TABLE t1; +12-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/oracle/full-write-skew1.txt b/src/dbtest/t/oracle/full-write-skew1.txt new file mode 100644 index 00000000..f8b6aceb --- /dev/null +++ b/src/dbtest/t/oracle/full-write-skew1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t12; +0-1-CREATE TABLE t12 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t12 VALUES (0, 0); +0-1-INSERT INTO t12 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t12 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t12 SET v=2 WHERE k=0; +5-2-UPDATE t12 SET v=1 WHERE k=1; +6-1-UPDATE t12 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t12; +10-3-DROP TABLE t12; +11-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/oracle/full-write-skew2.txt b/src/dbtest/t/oracle/full-write-skew2.txt new file mode 100644 index 00000000..5d20a957 --- /dev/null +++ b/src/dbtest/t/oracle/full-write-skew2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t13; +0-1-CREATE TABLE t13 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t13 VALUES (0, 0); +0-1-INSERT INTO t13 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t13 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t13 SET v=2 WHERE k=0; +5-2-UPDATE t13 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t13 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t13; +10-3-DROP TABLE t13; +11-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/oracle/half-predicate-read-skew.txt b/src/dbtest/t/oracle/half-predicate-read-skew.txt new file mode 100644 index 00000000..6694025a --- /dev/null +++ b/src/dbtest/t/oracle/half-predicate-read-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT;; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-1,1 +9-1,2 0,0 + +2-0,0 +7-1,2 +9-1,2 0,0 +} diff --git a/src/dbtest/t/oracle/half-predicate-write-skew.txt b/src/dbtest/t/oracle/half-predicate-write-skew.txt new file mode 100644 index 00000000..66cfbe16 --- /dev/null +++ b/src/dbtest/t/oracle/half-predicate-write-skew.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/oracle/intermediate-reads.txt b/src/dbtest/t/oracle/intermediate-reads.txt new file mode 100644 index 00000000..905df765 --- /dev/null +++ b/src/dbtest/t/oracle/intermediate-reads.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-drop table t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-drop table t1; +10-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/oracle/intermediate-write1.txt b/src/dbtest/t/oracle/intermediate-write1.txt new file mode 100644 index 00000000..ea77a0de --- /dev/null +++ b/src/dbtest/t/oracle/intermediate-write1.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE t3; +0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t3 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t3 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t3 SET v=2 WHERE k=0; +5-1-UPDATE t3 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t3; +9-3-DROP TABLE t3; +10-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/oracle/intermediate-write2.txt b/src/dbtest/t/oracle/intermediate-write2.txt new file mode 100644 index 00000000..f827b424 --- /dev/null +++ b/src/dbtest/t/oracle/intermediate-write2.txt @@ -0,0 +1,21 @@ +ParamNum:2 +0-1-DROP TABLE t4; +0-1-CREATE TABLE t4 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t4 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t4 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t4 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t4 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t4; +9-3-DROP TABLE t4; +10-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/oracle/long-fork-anomaly.txt b/src/dbtest/t/oracle/long-fork-anomaly.txt new file mode 100644 index 00000000..fbd7d224 --- /dev/null +++ b/src/dbtest/t/oracle/long-fork-anomaly.txt @@ -0,0 +1,109 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-DROP TABLE t1; +17-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/lost-self-update1.txt b/src/dbtest/t/oracle/lost-self-update1.txt new file mode 100644 index 00000000..de58b8b0 --- /dev/null +++ b/src/dbtest/t/oracle/lost-self-update1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/oracle/lost-self-update2.txt b/src/dbtest/t/oracle/lost-self-update2.txt new file mode 100644 index 00000000..f0a2cb68 --- /dev/null +++ b/src/dbtest/t/oracle/lost-self-update2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/oracle/lost-update.txt b/src/dbtest/t/oracle/lost-update.txt new file mode 100644 index 00000000..c9fc1ec3 --- /dev/null +++ b/src/dbtest/t/oracle/lost-update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/oracle/lost-update1.txt b/src/dbtest/t/oracle/lost-update1.txt new file mode 100644 index 00000000..7c9797b1 --- /dev/null +++ b/src/dbtest/t/oracle/lost-update1.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/oracle/lost-update2.txt b/src/dbtest/t/oracle/lost-update2.txt new file mode 100644 index 00000000..f15615ef --- /dev/null +++ b/src/dbtest/t/oracle/lost-update2.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-1-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/oracle/middle-read.txt b/src/dbtest/t/oracle/middle-read.txt new file mode 100644 index 00000000..6a6e155a --- /dev/null +++ b/src/dbtest/t/oracle/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/oracle/non-repeatable-read1.txt b/src/dbtest/t/oracle/non-repeatable-read1.txt new file mode 100644 index 00000000..2758b374 --- /dev/null +++ b/src/dbtest/t/oracle/non-repeatable-read1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/oracle/non-repeatable-read2.txt b/src/dbtest/t/oracle/non-repeatable-read2.txt new file mode 100644 index 00000000..f1a126d5 --- /dev/null +++ b/src/dbtest/t/oracle/non-repeatable-read2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/oracle/phantom-read.txt b/src/dbtest/t/oracle/phantom-read.txt new file mode 100644 index 00000000..28a8dd28 --- /dev/null +++ b/src/dbtest/t/oracle/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/oracle/predicate-sawtooth.txt b/src/dbtest/t/oracle/predicate-sawtooth.txt new file mode 100644 index 00000000..1985e507 --- /dev/null +++ b/src/dbtest/t/oracle/predicate-sawtooth.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/oracle/primary-colors.txt b/src/dbtest/t/oracle/primary-colors.txt new file mode 100644 index 00000000..ae93ed7a --- /dev/null +++ b/src/dbtest/t/oracle/primary-colors.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-drop table dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'red'); +0-1-insert into dots values(2, 'yellow'); +0-1-insert into dots values(3, 'blue'); +0-1-insert into dots values(4, 'red'); +0-1-insert into dots values(5, 'yellow'); +0-1-insert into dots values(6, 'blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-drop table dots; +12-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/oracle/primary-colors2.txt b/src/dbtest/t/oracle/primary-colors2.txt new file mode 100644 index 00000000..66dd47e3 --- /dev/null +++ b/src/dbtest/t/oracle/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-drop table dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/oracle/rat-special.txt b/src/dbtest/t/oracle/rat-special.txt new file mode 100644 index 00000000..92d342da --- /dev/null +++ b/src/dbtest/t/oracle/rat-special.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/oracle/rat-special2.txt b/src/dbtest/t/oracle/rat-special2.txt new file mode 100644 index 00000000..d980b0ca --- /dev/null +++ b/src/dbtest/t/oracle/rat-special2.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/oracle/read-only-transaction-anomaly.txt b/src/dbtest/t/oracle/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..8820ce84 --- /dev/null +++ b/src/dbtest/t/oracle/read-only-transaction-anomaly.txt @@ -0,0 +1,66 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-DROP TABLE t1; +16-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/oracle/read-skew1.txt b/src/dbtest/t/oracle/read-skew1.txt new file mode 100644 index 00000000..ecc427ea --- /dev/null +++ b/src/dbtest/t/oracle/read-skew1.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/read-skew2.txt b/src/dbtest/t/oracle/read-skew2.txt new file mode 100644 index 00000000..d335f57a --- /dev/null +++ b/src/dbtest/t/oracle/read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-INSERT INTO t2 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t2 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t2 SET v=1 WHERE k=0; +5-2-UPDATE t2 SET v=1 WHERE k=1; +6-1-SELECT * from t2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t2; +10-3-DROP TABLE t2; +11-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/read-skew3.txt b/src/dbtest/t/oracle/read-skew3.txt new file mode 100644 index 00000000..6331ea2e --- /dev/null +++ b/src/dbtest/t/oracle/read-skew3.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t2; +0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t2 VALUES (0, 0); +0-1-INSERT INTO t2 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t2 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t2 WHERE k=0; +5-2-SELECT * from t2 WHERE k=1; +6-1-UPDATE t2 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t2; +10-3-DROP TABLE t2; +11-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/read-write-skew1-1.txt b/src/dbtest/t/oracle/read-write-skew1-1.txt new file mode 100644 index 00000000..8424ebdf --- /dev/null +++ b/src/dbtest/t/oracle/read-write-skew1-1.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t10; +0-1-CREATE TABLE t10 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t10 VALUES (0, 0); +0-1-INSERT INTO t10 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t10 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t10 SET v=1 WHERE k=0; +5-2-UPDATE t10 SET v=2 WHERE k=1; +6-1-UPDATE t10 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t10; +10-3-DROP TABLE t10; +11-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/read-write-skew1-2.txt b/src/dbtest/t/oracle/read-write-skew1-2.txt new file mode 100644 index 00000000..241b5345 --- /dev/null +++ b/src/dbtest/t/oracle/read-write-skew1-2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t11; +0-1-CREATE TABLE t11 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t11 VALUES (0, 0); +0-1-INSERT INTO t11 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t11 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t11 SET v=2 WHERE k=0; +5-2-SELECT * from t11 WHERE k=1; +6-1-UPDATE t11 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t11; +10-3-DROP TABLE t11; +11-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/oracle/read-write-skew2.txt b/src/dbtest/t/oracle/read-write-skew2.txt new file mode 100644 index 00000000..12e8529c --- /dev/null +++ b/src/dbtest/t/oracle/read-write-skew2.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/oracle/sawtooth.txt b/src/dbtest/t/oracle/sawtooth.txt new file mode 100644 index 00000000..921d3dce --- /dev/null +++ b/src/dbtest/t/oracle/sawtooth.txt @@ -0,0 +1,54 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt b/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..62a08674 --- /dev/null +++ b/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt @@ -0,0 +1,33 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-DROP TABLE t1; +12-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/oracle/step-read-skew.txt b/src/dbtest/t/oracle/step-read-skew.txt new file mode 100644 index 00000000..b26799e0 --- /dev/null +++ b/src/dbtest/t/oracle/step-read-skew.txt @@ -0,0 +1,46 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-DROP TABLE t1; +15-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/oracle/step-wat.txt b/src/dbtest/t/oracle/step-wat.txt new file mode 100644 index 00000000..1acfbc43 --- /dev/null +++ b/src/dbtest/t/oracle/step-wat.txt @@ -0,0 +1,69 @@ +ParamNum:2 +0-1-drop table t14; +0-1-CREATE TABLE t14 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t14 VALUES (0, 0); +0-1-INSERT INTO t14 VALUES (1, 0); +0-1-INSERT INTO t14 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t14 where k=1; +3-2-BEGIN; +4-2-select * from t14 where k=0; +5-2-update t14 set v=1 where k=0; +6-2-select * from t14 where k=1; +7-2-update t14 set v=1 where k=1; +8-3-BEGIN; +9-3-update t14 set v=2 where k=0; +10-2-commit; +11-3-select * from t14 where k=2; +12-3-update t14 set v=1 where k=2; +13-3-commit; +14-1-select * from t14 where k=2; +15-1-commit; +16-4-select * from t14; +17-4-drop table t14; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt b/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..b9b63110 --- /dev/null +++ b/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-commit; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-null +9-1,1 0,0 + +2-0,0 +7-1,1 +9-1,1 0,0 +} diff --git a/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt b/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..60993d01 --- /dev/null +++ b/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/oracle/total-same-predicate-read-skew.txt b/src/dbtest/t/oracle/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..471c53b2 --- /dev/null +++ b/src/dbtest/t/oracle/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-commit; +7-1-select * from t1 where v=0; +8-1-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt b/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..7095bccd --- /dev/null +++ b/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-COMMIT; +7-1-select * from t1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/oracle/total-same-predicate-write-skew.txt b/src/dbtest/t/oracle/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..613944d4 --- /dev/null +++ b/src/dbtest/t/oracle/total-same-predicate-write-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/oracle/unnamed-anomaly.txt b/src/dbtest/t/oracle/unnamed-anomaly.txt new file mode 100644 index 00000000..c504ec08 --- /dev/null +++ b/src/dbtest/t/oracle/unnamed-anomaly.txt @@ -0,0 +1,69 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-DROP TABLE t1; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/oracle/unrepeatable-read.txt b/src/dbtest/t/oracle/unrepeatable-read.txt new file mode 100644 index 00000000..09dddb61 --- /dev/null +++ b/src/dbtest/t/oracle/unrepeatable-read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-DROP TABLE t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/oracle/write-read-skew1.txt b/src/dbtest/t/oracle/write-read-skew1.txt new file mode 100644 index 00000000..d186f79f --- /dev/null +++ b/src/dbtest/t/oracle/write-read-skew1.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/oracle/write-read-skew2.txt b/src/dbtest/t/oracle/write-read-skew2.txt new file mode 100644 index 00000000..f20ddfb4 --- /dev/null +++ b/src/dbtest/t/oracle/write-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE t3; +0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t3 VALUES (0, 0); +0-1-INSERT INTO t3 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t3 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t3 where k=0; +5-2-update t3 set v=1 where k=1; +6-1-select * from t3 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t3; +10-3-DROP TABLE t3; +11-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/oracle/write-skew-black-white.txt b/src/dbtest/t/oracle/write-skew-black-white.txt new file mode 100644 index 00000000..e4d4b497 --- /dev/null +++ b/src/dbtest/t/oracle/write-skew-black-white.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'black'); +0-1-insert into dots values(2, 'white'); +0-1-insert into dots values(3, 'black'); +0-1-insert into dots values(4, 'white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-4-DROP TABLE dots; +10-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/oracle/write-skew-intersecting-data.txt b/src/dbtest/t/oracle/write-skew-intersecting-data.txt new file mode 100644 index 00000000..91577120 --- /dev/null +++ b/src/dbtest/t/oracle/write-skew-intersecting-data.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10); +0-1-INSERT INTO mytab VALUES(1, 20); +0-1-INSERT INTO mytab VALUES(2, 100); +0-1-INSERT INTO mytab VALUES(2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-commit; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/oracle/write-skew-overdraft-protection.txt b/src/dbtest/t/oracle/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..87c9bc05 --- /dev/null +++ b/src/dbtest/t/oracle/write-skew-overdraft-protection.txt @@ -0,0 +1,27 @@ +ParamNum:3 +0-1-drop table account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500); +0-1-insert into account values('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-drop table account; +12-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/oracle/write-skew.txt b/src/dbtest/t/oracle/write-skew.txt new file mode 100644 index 00000000..cf78e763 --- /dev/null +++ b/src/dbtest/t/oracle/write-skew.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/aborted-reads.txt b/src/dbtest/t/pg/aborted-reads.txt new file mode 100644 index 00000000..c1a19b85 --- /dev/null +++ b/src/dbtest/t/pg/aborted-reads.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-3-COMMIT; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/pg/causality-violation-anomaly.txt b/src/dbtest/t/pg/causality-violation-anomaly.txt new file mode 100644 index 00000000..291f51ff --- /dev/null +++ b/src/dbtest/t/pg/causality-violation-anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/pg/cross-phantom.txt b/src/dbtest/t/pg/cross-phantom.txt new file mode 100644 index 00000000..c0dac7eb --- /dev/null +++ b/src/dbtest/t/pg/cross-phantom.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/pg/cross-phenomenon.txt b/src/dbtest/t/pg/cross-phenomenon.txt new file mode 100644 index 00000000..0b53fcbe --- /dev/null +++ b/src/dbtest/t/pg/cross-phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/pg/dirty-read.txt b/src/dbtest/t/pg/dirty-read.txt new file mode 100644 index 00000000..6e50dd41 --- /dev/null +++ b/src/dbtest/t/pg/dirty-read.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-INSERT INTO t1 VALUES (0, 0); +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/pg/dirty-write.txt b/src/dbtest/t/pg/dirty-write.txt new file mode 100644 index 00000000..54fcbfb8 --- /dev/null +++ b/src/dbtest/t/pg/dirty-write.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/pg/dirty-write1.txt b/src/dbtest/t/pg/dirty-write1.txt new file mode 100644 index 00000000..34f0e9dc --- /dev/null +++ b/src/dbtest/t/pg/dirty-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/pg/dirty-write2.txt b/src/dbtest/t/pg/dirty-write2.txt new file mode 100644 index 00000000..507f8d52 --- /dev/null +++ b/src/dbtest/t/pg/dirty-write2.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/pg/double-write-skew.txt b/src/dbtest/t/pg/double-write-skew.txt new file mode 100644 index 00000000..a14ca9ec --- /dev/null +++ b/src/dbtest/t/pg/double-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/double-write-skew1-1.txt b/src/dbtest/t/pg/double-write-skew1-1.txt new file mode 100644 index 00000000..4b09edc5 --- /dev/null +++ b/src/dbtest/t/pg/double-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/double-write-skew1-2.txt b/src/dbtest/t/pg/double-write-skew1-2.txt new file mode 100644 index 00000000..22fcab9e --- /dev/null +++ b/src/dbtest/t/pg/double-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/double-write-skew1-3.txt b/src/dbtest/t/pg/double-write-skew1-3.txt new file mode 100644 index 00000000..dd265dde --- /dev/null +++ b/src/dbtest/t/pg/double-write-skew1-3.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/double-write-skew2.txt b/src/dbtest/t/pg/double-write-skew2.txt new file mode 100644 index 00000000..08e18580 --- /dev/null +++ b/src/dbtest/t/pg/double-write-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/pg/fractured-reads.txt b/src/dbtest/t/pg/fractured-reads.txt new file mode 100644 index 00000000..31d8850e --- /dev/null +++ b/src/dbtest/t/pg/fractured-reads.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/pg/full-write-skew1.txt b/src/dbtest/t/pg/full-write-skew1.txt new file mode 100644 index 00000000..bfd24587 --- /dev/null +++ b/src/dbtest/t/pg/full-write-skew1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-UPDATE t1 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/full-write-skew2.txt b/src/dbtest/t/pg/full-write-skew2.txt new file mode 100644 index 00000000..3917320f --- /dev/null +++ b/src/dbtest/t/pg/full-write-skew2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/half-predicate-read-skew.txt b/src/dbtest/t/pg/half-predicate-read-skew.txt new file mode 100644 index 00000000..5cd208d8 --- /dev/null +++ b/src/dbtest/t/pg/half-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-1,1 +9-1,2 0,0 + +2-0,0 +7-1,2 +9-1,2 0,0 +} diff --git a/src/dbtest/t/pg/half-predicate-write-skew.txt b/src/dbtest/t/pg/half-predicate-write-skew.txt new file mode 100644 index 00000000..d8d3056c --- /dev/null +++ b/src/dbtest/t/pg/half-predicate-write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/pg/intermediate-reads.txt b/src/dbtest/t/pg/intermediate-reads.txt new file mode 100644 index 00000000..cd9132fe --- /dev/null +++ b/src/dbtest/t/pg/intermediate-reads.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/pg/intermediate-write1.txt b/src/dbtest/t/pg/intermediate-write1.txt new file mode 100644 index 00000000..c5c3ea3a --- /dev/null +++ b/src/dbtest/t/pg/intermediate-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/pg/intermediate-write2.txt b/src/dbtest/t/pg/intermediate-write2.txt new file mode 100644 index 00000000..adb4adeb --- /dev/null +++ b/src/dbtest/t/pg/intermediate-write2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +0-1-SET LOCAL lock_timeout = '1s'; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +0-2-SET LOCAL lock_timeout = '1s'; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/pg/long-fork-anomaly.txt b/src/dbtest/t/pg/long-fork-anomaly.txt new file mode 100644 index 00000000..727c16f0 --- /dev/null +++ b/src/dbtest/t/pg/long-fork-anomaly.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/pg/lost-self-update1.txt b/src/dbtest/t/pg/lost-self-update1.txt new file mode 100644 index 00000000..ad197022 --- /dev/null +++ b/src/dbtest/t/pg/lost-self-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/lost-self-update2.txt b/src/dbtest/t/pg/lost-self-update2.txt new file mode 100644 index 00000000..7b8a0059 --- /dev/null +++ b/src/dbtest/t/pg/lost-self-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/lost-update.txt b/src/dbtest/t/pg/lost-update.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/pg/lost-update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/pg/lost-update1.txt b/src/dbtest/t/pg/lost-update1.txt new file mode 100644 index 00000000..26240f28 --- /dev/null +++ b/src/dbtest/t/pg/lost-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/pg/lost-update2.txt b/src/dbtest/t/pg/lost-update2.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/pg/lost-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/pg/middle-read.txt b/src/dbtest/t/pg/middle-read.txt new file mode 100644 index 00000000..f8319ec3 --- /dev/null +++ b/src/dbtest/t/pg/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/pg/non-repeatable-read1.txt b/src/dbtest/t/pg/non-repeatable-read1.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/pg/non-repeatable-read1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/non-repeatable-read2.txt b/src/dbtest/t/pg/non-repeatable-read2.txt new file mode 100644 index 00000000..16a4b884 --- /dev/null +++ b/src/dbtest/t/pg/non-repeatable-read2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/phantom-read.txt b/src/dbtest/t/pg/phantom-read.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/src/dbtest/t/pg/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/pg/predicate-sawtooth.txt b/src/dbtest/t/pg/predicate-sawtooth.txt new file mode 100644 index 00000000..07277c6d --- /dev/null +++ b/src/dbtest/t/pg/predicate-sawtooth.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/pg/primary-colors.txt b/src/dbtest/t/pg/primary-colors.txt new file mode 100644 index 00000000..95e71521 --- /dev/null +++ b/src/dbtest/t/pg/primary-colors.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'red'); +0-1-insert into dots values(2, 'yellow'); +0-1-insert into dots values(3, 'blue'); +0-1-insert into dots values(4, 'red'); +0-1-insert into dots values(5, 'yellow'); +0-1-insert into dots values(6, 'blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/pg/primary-colors2.txt b/src/dbtest/t/pg/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/pg/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/pg/rat-special.txt b/src/dbtest/t/pg/rat-special.txt new file mode 100644 index 00000000..2ab8db87 --- /dev/null +++ b/src/dbtest/t/pg/rat-special.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/rat-special2.txt b/src/dbtest/t/pg/rat-special2.txt new file mode 100644 index 00000000..d99cfc58 --- /dev/null +++ b/src/dbtest/t/pg/rat-special2.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/pg/read-only-transaction-anomaly.txt b/src/dbtest/t/pg/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..a684704c --- /dev/null +++ b/src/dbtest/t/pg/read-only-transaction-anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/pg/read-skew.txt b/src/dbtest/t/pg/read-skew.txt new file mode 100644 index 00000000..2a500247 --- /dev/null +++ b/src/dbtest/t/pg/read-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-skew1.txt b/src/dbtest/t/pg/read-skew1.txt new file mode 100644 index 00000000..7519b18a --- /dev/null +++ b/src/dbtest/t/pg/read-skew1.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-skew2.txt b/src/dbtest/t/pg/read-skew2.txt new file mode 100644 index 00000000..0075542e --- /dev/null +++ b/src/dbtest/t/pg/read-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-skew3.txt b/src/dbtest/t/pg/read-skew3.txt new file mode 100644 index 00000000..16031984 --- /dev/null +++ b/src/dbtest/t/pg/read-skew3.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-write-skew1-1.txt b/src/dbtest/t/pg/read-write-skew1-1.txt new file mode 100644 index 00000000..0ded781d --- /dev/null +++ b/src/dbtest/t/pg/read-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-write-skew1-2.txt b/src/dbtest/t/pg/read-write-skew1-2.txt new file mode 100644 index 00000000..2ae13088 --- /dev/null +++ b/src/dbtest/t/pg/read-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/read-write-skew2.txt b/src/dbtest/t/pg/read-write-skew2.txt new file mode 100644 index 00000000..6c82b70c --- /dev/null +++ b/src/dbtest/t/pg/read-write-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/sawtooth.txt b/src/dbtest/t/pg/sawtooth.txt new file mode 100644 index 00000000..4e57bfc5 --- /dev/null +++ b/src/dbtest/t/pg/sawtooth.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/serial-concurrent-phenomenon.txt b/src/dbtest/t/pg/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..e0135311 --- /dev/null +++ b/src/dbtest/t/pg/serial-concurrent-phenomenon.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/pg/step-read-skew.txt b/src/dbtest/t/pg/step-read-skew.txt new file mode 100644 index 00000000..7b1c68f5 --- /dev/null +++ b/src/dbtest/t/pg/step-read-skew.txt @@ -0,0 +1,45 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/pg/step-wat.txt b/src/dbtest/t/pg/step-wat.txt new file mode 100644 index 00000000..c80fdf28 --- /dev/null +++ b/src/dbtest/t/pg/step-wat.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-3-BEGIN; +9-3-update t1 set v=2 where k=0; +10-2-commit; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/pg/total-diff-predicate-read-skew.txt b/src/dbtest/t/pg/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..aa89d7e3 --- /dev/null +++ b/src/dbtest/t/pg/total-diff-predicate-read-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-1,1 0,0 + +2-0,0 +7-1,1 +9-1,1 0,0 +} diff --git a/src/dbtest/t/pg/total-diff-predicate-write-skew.txt b/src/dbtest/t/pg/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..560206ed --- /dev/null +++ b/src/dbtest/t/pg/total-diff-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/pg/total-same-predicate-read-skew.txt b/src/dbtest/t/pg/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..0c39b464 --- /dev/null +++ b/src/dbtest/t/pg/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/pg/total-same-predicate-read-skew2.txt b/src/dbtest/t/pg/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..3456462b --- /dev/null +++ b/src/dbtest/t/pg/total-same-predicate-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-commit; +7-1-select * from t1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/pg/total-same-predicate-write-skew.txt b/src/dbtest/t/pg/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..5174028f --- /dev/null +++ b/src/dbtest/t/pg/total-same-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/pg/unnamed-anomaly.txt b/src/dbtest/t/pg/unnamed-anomaly.txt new file mode 100644 index 00000000..b0eeff37 --- /dev/null +++ b/src/dbtest/t/pg/unnamed-anomaly.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-1,1 0,2 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-1,1 0,2 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-1,1 0,2 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-1,1 0,2 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-1,1 0,2 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-1,1 0,2 2,1 +} diff --git a/src/dbtest/t/pg/unrepeatable-read.txt b/src/dbtest/t/pg/unrepeatable-read.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/pg/unrepeatable-read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/write-read-skew1.txt b/src/dbtest/t/pg/write-read-skew1.txt new file mode 100644 index 00000000..95c25f23 --- /dev/null +++ b/src/dbtest/t/pg/write-read-skew1.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/pg/write-read-skew2.txt b/src/dbtest/t/pg/write-read-skew2.txt new file mode 100644 index 00000000..ed383947 --- /dev/null +++ b/src/dbtest/t/pg/write-read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/pg/write-skew-black-white.txt b/src/dbtest/t/pg/write-skew-black-white.txt new file mode 100644 index 00000000..087f5dc7 --- /dev/null +++ b/src/dbtest/t/pg/write-skew-black-white.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'black'); +0-1-insert into dots values(2, 'white'); +0-1-insert into dots values(3, 'black'); +0-1-insert into dots values(4, 'white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/pg/write-skew-intersecting-data.txt b/src/dbtest/t/pg/write-skew-intersecting-data.txt new file mode 100644 index 00000000..29bd101a --- /dev/null +++ b/src/dbtest/t/pg/write-skew-intersecting-data.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-COMMIT; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/pg/write-skew-overdraft-protection.txt b/src/dbtest/t/pg/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..615c4e7c --- /dev/null +++ b/src/dbtest/t/pg/write-skew-overdraft-protection.txt @@ -0,0 +1,25 @@ +ParamNum:3 +0-1-drop table if exists account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/pg/write-skew.txt b/src/dbtest/t/pg/write-skew.txt new file mode 100644 index 00000000..51eb55df --- /dev/null +++ b/src/dbtest/t/pg/write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/aborted-reads.txt b/src/dbtest/t/sqlserver/aborted-reads.txt new file mode 100644 index 00000000..c1a19b85 --- /dev/null +++ b/src/dbtest/t/sqlserver/aborted-reads.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-3-COMMIT; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/sqlserver/causality-violation-anomaly.txt b/src/dbtest/t/sqlserver/causality-violation-anomaly.txt new file mode 100644 index 00000000..291f51ff --- /dev/null +++ b/src/dbtest/t/sqlserver/causality-violation-anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/cross-phantom.txt b/src/dbtest/t/sqlserver/cross-phantom.txt new file mode 100644 index 00000000..c0dac7eb --- /dev/null +++ b/src/dbtest/t/sqlserver/cross-phantom.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/sqlserver/cross-phenomenon.txt b/src/dbtest/t/sqlserver/cross-phenomenon.txt new file mode 100644 index 00000000..0b53fcbe --- /dev/null +++ b/src/dbtest/t/sqlserver/cross-phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/dirty-read.txt b/src/dbtest/t/sqlserver/dirty-read.txt new file mode 100644 index 00000000..6e50dd41 --- /dev/null +++ b/src/dbtest/t/sqlserver/dirty-read.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-INSERT INTO t1 VALUES (0, 0); +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-null +7-null +} diff --git a/src/dbtest/t/sqlserver/dirty-write.txt b/src/dbtest/t/sqlserver/dirty-write.txt new file mode 100644 index 00000000..54fcbfb8 --- /dev/null +++ b/src/dbtest/t/sqlserver/dirty-write.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/sqlserver/dirty-write1.txt b/src/dbtest/t/sqlserver/dirty-write1.txt new file mode 100644 index 00000000..34f0e9dc --- /dev/null +++ b/src/dbtest/t/sqlserver/dirty-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/sqlserver/dirty-write2.txt b/src/dbtest/t/sqlserver/dirty-write2.txt new file mode 100644 index 00000000..507f8d52 --- /dev/null +++ b/src/dbtest/t/sqlserver/dirty-write2.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/sqlserver/double-write-skew.txt b/src/dbtest/t/sqlserver/double-write-skew.txt new file mode 100644 index 00000000..a14ca9ec --- /dev/null +++ b/src/dbtest/t/sqlserver/double-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-1.txt b/src/dbtest/t/sqlserver/double-write-skew1-1.txt new file mode 100644 index 00000000..4b09edc5 --- /dev/null +++ b/src/dbtest/t/sqlserver/double-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-2.txt b/src/dbtest/t/sqlserver/double-write-skew1-2.txt new file mode 100644 index 00000000..22fcab9e --- /dev/null +++ b/src/dbtest/t/sqlserver/double-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-3.txt b/src/dbtest/t/sqlserver/double-write-skew1-3.txt new file mode 100644 index 00000000..dd265dde --- /dev/null +++ b/src/dbtest/t/sqlserver/double-write-skew1-3.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/double-write-skew2.txt b/src/dbtest/t/sqlserver/double-write-skew2.txt new file mode 100644 index 00000000..08e18580 --- /dev/null +++ b/src/dbtest/t/sqlserver/double-write-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/sqlserver/fractured-reads.txt b/src/dbtest/t/sqlserver/fractured-reads.txt new file mode 100644 index 00000000..31d8850e --- /dev/null +++ b/src/dbtest/t/sqlserver/fractured-reads.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/sqlserver/full-write-skew1.txt b/src/dbtest/t/sqlserver/full-write-skew1.txt new file mode 100644 index 00000000..bfd24587 --- /dev/null +++ b/src/dbtest/t/sqlserver/full-write-skew1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-UPDATE t1 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/sqlserver/full-write-skew2.txt b/src/dbtest/t/sqlserver/full-write-skew2.txt new file mode 100644 index 00000000..3917320f --- /dev/null +++ b/src/dbtest/t/sqlserver/full-write-skew2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/sqlserver/half-predicate-read-skew.txt b/src/dbtest/t/sqlserver/half-predicate-read-skew.txt new file mode 100644 index 00000000..bcfad45b --- /dev/null +++ b/src/dbtest/t/sqlserver/half-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-1,1 +9-0,0 1,2 + +2-0,0 +7-1,2 +9-0,0 1,2 +} diff --git a/src/dbtest/t/sqlserver/half-predicate-write-skew.txt b/src/dbtest/t/sqlserver/half-predicate-write-skew.txt new file mode 100644 index 00000000..d8d3056c --- /dev/null +++ b/src/dbtest/t/sqlserver/half-predicate-write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/sqlserver/intermediate-reads.txt b/src/dbtest/t/sqlserver/intermediate-reads.txt new file mode 100644 index 00000000..cd9132fe --- /dev/null +++ b/src/dbtest/t/sqlserver/intermediate-reads.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/sqlserver/intermediate-write1.txt b/src/dbtest/t/sqlserver/intermediate-write1.txt new file mode 100644 index 00000000..c5c3ea3a --- /dev/null +++ b/src/dbtest/t/sqlserver/intermediate-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/sqlserver/intermediate-write2.txt b/src/dbtest/t/sqlserver/intermediate-write2.txt new file mode 100644 index 00000000..7faf77b0 --- /dev/null +++ b/src/dbtest/t/sqlserver/intermediate-write2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/sqlserver/long-fork-anomaly.txt b/src/dbtest/t/sqlserver/long-fork-anomaly.txt new file mode 100644 index 00000000..727c16f0 --- /dev/null +++ b/src/dbtest/t/sqlserver/long-fork-anomaly.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/lost-self-update1.txt b/src/dbtest/t/sqlserver/lost-self-update1.txt new file mode 100644 index 00000000..ad197022 --- /dev/null +++ b/src/dbtest/t/sqlserver/lost-self-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/lost-self-update2.txt b/src/dbtest/t/sqlserver/lost-self-update2.txt new file mode 100644 index 00000000..7b8a0059 --- /dev/null +++ b/src/dbtest/t/sqlserver/lost-self-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/lost-update.txt b/src/dbtest/t/sqlserver/lost-update.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/sqlserver/lost-update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/lost-update1.txt b/src/dbtest/t/sqlserver/lost-update1.txt new file mode 100644 index 00000000..26240f28 --- /dev/null +++ b/src/dbtest/t/sqlserver/lost-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/lost-update2.txt b/src/dbtest/t/sqlserver/lost-update2.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/sqlserver/lost-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/middle-read.txt b/src/dbtest/t/sqlserver/middle-read.txt new file mode 100644 index 00000000..f8319ec3 --- /dev/null +++ b/src/dbtest/t/sqlserver/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/sqlserver/non-repeatable-read1.txt b/src/dbtest/t/sqlserver/non-repeatable-read1.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/sqlserver/non-repeatable-read1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/non-repeatable-read2.txt b/src/dbtest/t/sqlserver/non-repeatable-read2.txt new file mode 100644 index 00000000..16a4b884 --- /dev/null +++ b/src/dbtest/t/sqlserver/non-repeatable-read2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/phantom-read.txt b/src/dbtest/t/sqlserver/phantom-read.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/src/dbtest/t/sqlserver/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/sqlserver/predicate-sawtooth.txt b/src/dbtest/t/sqlserver/predicate-sawtooth.txt new file mode 100644 index 00000000..07277c6d --- /dev/null +++ b/src/dbtest/t/sqlserver/predicate-sawtooth.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/sqlserver/primary-colors.txt b/src/dbtest/t/sqlserver/primary-colors.txt new file mode 100644 index 00000000..95e71521 --- /dev/null +++ b/src/dbtest/t/sqlserver/primary-colors.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'red'); +0-1-insert into dots values(2, 'yellow'); +0-1-insert into dots values(3, 'blue'); +0-1-insert into dots values(4, 'red'); +0-1-insert into dots values(5, 'yellow'); +0-1-insert into dots values(6, 'blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/sqlserver/primary-colors2.txt b/src/dbtest/t/sqlserver/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/sqlserver/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/sqlserver/rat-special.txt b/src/dbtest/t/sqlserver/rat-special.txt new file mode 100644 index 00000000..2ab8db87 --- /dev/null +++ b/src/dbtest/t/sqlserver/rat-special.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/sqlserver/rat-special2.txt b/src/dbtest/t/sqlserver/rat-special2.txt new file mode 100644 index 00000000..d99cfc58 --- /dev/null +++ b/src/dbtest/t/sqlserver/rat-special2.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt b/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..a684704c --- /dev/null +++ b/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/sqlserver/read-skew.txt b/src/dbtest/t/sqlserver/read-skew.txt new file mode 100644 index 00000000..2a500247 --- /dev/null +++ b/src/dbtest/t/sqlserver/read-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-skew1.txt b/src/dbtest/t/sqlserver/read-skew1.txt new file mode 100644 index 00000000..7519b18a --- /dev/null +++ b/src/dbtest/t/sqlserver/read-skew1.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-DROP TABLE t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-skew2.txt b/src/dbtest/t/sqlserver/read-skew2.txt new file mode 100644 index 00000000..0075542e --- /dev/null +++ b/src/dbtest/t/sqlserver/read-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-skew3.txt b/src/dbtest/t/sqlserver/read-skew3.txt new file mode 100644 index 00000000..16031984 --- /dev/null +++ b/src/dbtest/t/sqlserver/read-skew3.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-write-skew1-1.txt b/src/dbtest/t/sqlserver/read-write-skew1-1.txt new file mode 100644 index 00000000..0ded781d --- /dev/null +++ b/src/dbtest/t/sqlserver/read-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-write-skew1-2.txt b/src/dbtest/t/sqlserver/read-write-skew1-2.txt new file mode 100644 index 00000000..2ae13088 --- /dev/null +++ b/src/dbtest/t/sqlserver/read-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/sqlserver/read-write-skew2.txt b/src/dbtest/t/sqlserver/read-write-skew2.txt new file mode 100644 index 00000000..6c82b70c --- /dev/null +++ b/src/dbtest/t/sqlserver/read-write-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/sqlserver/sawtooth.txt b/src/dbtest/t/sqlserver/sawtooth.txt new file mode 100644 index 00000000..4e57bfc5 --- /dev/null +++ b/src/dbtest/t/sqlserver/sawtooth.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt b/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..e0135311 --- /dev/null +++ b/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/sqlserver/step-read-skew.txt b/src/dbtest/t/sqlserver/step-read-skew.txt new file mode 100644 index 00000000..7b1c68f5 --- /dev/null +++ b/src/dbtest/t/sqlserver/step-read-skew.txt @@ -0,0 +1,45 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/sqlserver/step-wat.txt b/src/dbtest/t/sqlserver/step-wat.txt new file mode 100644 index 00000000..c80fdf28 --- /dev/null +++ b/src/dbtest/t/sqlserver/step-wat.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-3-BEGIN; +9-3-update t1 set v=2 where k=0; +10-2-commit; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt b/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..74701f0c --- /dev/null +++ b/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,1 + +2-0,0 +7-1,1 +9-0,0 1,1 +} diff --git a/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt b/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..560206ed --- /dev/null +++ b/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt b/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..0c39b464 --- /dev/null +++ b/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt b/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..3456462b --- /dev/null +++ b/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-commit; +7-1-select * from t1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt b/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..5174028f --- /dev/null +++ b/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/sqlserver/unnamed-anomaly.txt b/src/dbtest/t/sqlserver/unnamed-anomaly.txt new file mode 100644 index 00000000..0cac37c6 --- /dev/null +++ b/src/dbtest/t/sqlserver/unnamed-anomaly.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/sqlserver/unrepeatable-read.txt b/src/dbtest/t/sqlserver/unrepeatable-read.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/sqlserver/unrepeatable-read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/sqlserver/write-read-skew1.txt b/src/dbtest/t/sqlserver/write-read-skew1.txt new file mode 100644 index 00000000..95c25f23 --- /dev/null +++ b/src/dbtest/t/sqlserver/write-read-skew1.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/sqlserver/write-read-skew2.txt b/src/dbtest/t/sqlserver/write-read-skew2.txt new file mode 100644 index 00000000..ed383947 --- /dev/null +++ b/src/dbtest/t/sqlserver/write-read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/sqlserver/write-skew-black-white.txt b/src/dbtest/t/sqlserver/write-skew-black-white.txt new file mode 100644 index 00000000..087f5dc7 --- /dev/null +++ b/src/dbtest/t/sqlserver/write-skew-black-white.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS dots; +0-1-create table dots(id int not null primary key, color varchar(255) not null); +0-1-insert into dots values(1, 'black'); +0-1-insert into dots values(2, 'white'); +0-1-insert into dots values(3, 'black'); +0-1-insert into dots values(4, 'white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt b/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt new file mode 100644 index 00000000..29bd101a --- /dev/null +++ b/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-COMMIT; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt b/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..615c4e7c --- /dev/null +++ b/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt @@ -0,0 +1,25 @@ +ParamNum:3 +0-1-drop table if exists account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/sqlserver/write-skew.txt b/src/dbtest/t/sqlserver/write-skew.txt new file mode 100644 index 00000000..51eb55df --- /dev/null +++ b/src/dbtest/t/sqlserver/write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/aborted-reads.txt b/src/dbtest/t/tidb/aborted-reads.txt new file mode 100644 index 00000000..c1a19b85 --- /dev/null +++ b/src/dbtest/t/tidb/aborted-reads.txt @@ -0,0 +1,18 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-INSERT INTO t1 VALUES (0, 0); +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k = 0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * from t1; +8-3-COMMIT; + +serializable { +4-null +7-null +} + diff --git a/src/dbtest/t/tidb/causality-violation-anomaly.txt b/src/dbtest/t/tidb/causality-violation-anomaly.txt new file mode 100644 index 00000000..291f51ff --- /dev/null +++ b/src/dbtest/t/tidb/causality-violation-anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=0; +5-2-commit; +6-3-BEGIN; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1; +13-4-commit; + +serializable { +2-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +2-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +2-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/cross-phantom.txt b/src/dbtest/t/tidb/cross-phantom.txt new file mode 100644 index 00000000..c0dac7eb --- /dev/null +++ b/src/dbtest/t/tidb/cross-phantom.txt @@ -0,0 +1,106 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-3-BEGIN; +6-3-insert into t1 values(0,0); +7-3-commit; +8-4-BEGIN; +9-4-insert into t1 values(1,0); +10-4-commit; +11-2-select * from t1 where v=0; +12-1-select * from t1 where v=0; +13-2-commit; +14-1-commit; +15-3-select * from t1; +16-3-commit; + +serializable { +2-null +4-null +11-null +12-null +15-0,0 1,0 + +2-null +4-0,0 +11-null +12-0,0 +15-0,0 1,0 + +2-null +4-1,0 +11-null +12-1,0 +15-0,0 1,0 + +2-null +4-0,0 1,0 +11-null +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-null +11-0,0 +12-null +15-0,0 1,0 + +2-1,0 +4-null +11-1,0 +12-null +15-0,0 1,0 + +2-0,0 1,0 +4-null +11-0,0 1,0 +12-null +15-0,0 1,0 + +2-0,0 +4-0,0 +11-0,0 +12-0,0 +15-0,0 1,0 + +2-1,0 +4-1,0 +11-1,0 +12-1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 1,0 +11-0,0 1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 +4-0,0 1,0 +11-0,0 +12-0,0 1,0 +15-0,0 1,0 + +2-1,0 +4-0,0 1,0 +11-1,0 +12-0,0 1,0 +15-0,0 1,0 + +2-0,0 1,0 +4-0,0 +11-0,0 1,0 +12-0,0 +15-0,0 1,0 + +2-0,0 1,0 +4-1,0 +11-0,0 1,0 +12-1,0 +15-0,0 1,0 +} diff --git a/src/dbtest/t/tidb/cross-phenomenon.txt b/src/dbtest/t/tidb/cross-phenomenon.txt new file mode 100644 index 00000000..0b53fcbe --- /dev/null +++ b/src/dbtest/t/tidb/cross-phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,0 +4-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +2-0,1 +4-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +2-0,1 +4-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/dirty-read.txt b/src/dbtest/t/tidb/dirty-read.txt new file mode 100644 index 00000000..c374d930 --- /dev/null +++ b/src/dbtest/t/tidb/dirty-read.txt @@ -0,0 +1,17 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +4-1-INSERT INTO t1 VALUES (0, 0); +5-2-SELECT * from t1 WHERE k = 0; +6-1-ROLLBACK; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-null +8-null +} diff --git a/src/dbtest/t/tidb/dirty-write1.txt b/src/dbtest/t/tidb/dirty-write1.txt new file mode 100644 index 00000000..54fcbfb8 --- /dev/null +++ b/src/dbtest/t/tidb/dirty-write1.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/tidb/dirty-write2.txt b/src/dbtest/t/tidb/dirty-write2.txt new file mode 100644 index 00000000..507f8d52 --- /dev/null +++ b/src/dbtest/t/tidb/dirty-write2.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-ROLLBACK; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/tidb/double-write-skew1-1.txt b/src/dbtest/t/tidb/double-write-skew1-1.txt new file mode 100644 index 00000000..4b09edc5 --- /dev/null +++ b/src/dbtest/t/tidb/double-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/tidb/double-write-skew1-2.txt b/src/dbtest/t/tidb/double-write-skew1-2.txt new file mode 100644 index 00000000..22fcab9e --- /dev/null +++ b/src/dbtest/t/tidb/double-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/double-write-skew1-3.txt b/src/dbtest/t/tidb/double-write-skew1-3.txt new file mode 100644 index 00000000..dd265dde --- /dev/null +++ b/src/dbtest/t/tidb/double-write-skew1-3.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-update t1 set v=2 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/double-write-skew2.txt b/src/dbtest/t/tidb/double-write-skew2.txt new file mode 100644 index 00000000..08e18580 --- /dev/null +++ b/src/dbtest/t/tidb/double-write-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-1-update t1 set v=1 where k=0; +3-2-begin; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +9-0,1 1,1 + +4-0,0 +9-0,1 1,2 +} + + diff --git a/src/dbtest/t/tidb/fractured-reads.txt b/src/dbtest/t/tidb/fractured-reads.txt new file mode 100644 index 00000000..31d8850e --- /dev/null +++ b/src/dbtest/t/tidb/fractured-reads.txt @@ -0,0 +1,31 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + diff --git a/src/dbtest/t/tidb/full-write-skew1.txt b/src/dbtest/t/tidb/full-write-skew1.txt new file mode 100644 index 00000000..bfd24587 --- /dev/null +++ b/src/dbtest/t/tidb/full-write-skew1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-UPDATE t1 SET v=2 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/tidb/full-write-skew2.txt b/src/dbtest/t/tidb/full-write-skew2.txt new file mode 100644 index 00000000..3917320f --- /dev/null +++ b/src/dbtest/t/tidb/full-write-skew2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/tidb/half-predicate-read-skew.txt b/src/dbtest/t/tidb/half-predicate-read-skew.txt new file mode 100644 index 00000000..bcfad45b --- /dev/null +++ b/src/dbtest/t/tidb/half-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-1,1 +9-0,0 1,2 + +2-0,0 +7-1,2 +9-0,0 1,2 +} diff --git a/src/dbtest/t/tidb/half-predicate-write-skew.txt b/src/dbtest/t/tidb/half-predicate-write-skew.txt new file mode 100644 index 00000000..d8d3056c --- /dev/null +++ b/src/dbtest/t/tidb/half-predicate-write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=2 where k=1; +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,2 +9-0,0 1,2 + +2-0,0 +4-1,1 +9-0,0 1,2 + +} diff --git a/src/dbtest/t/tidb/intermediate-reads.txt b/src/dbtest/t/tidb/intermediate-reads.txt new file mode 100644 index 00000000..cd9132fe --- /dev/null +++ b/src/dbtest/t/tidb/intermediate-reads.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/tidb/intermediate-write1.txt b/src/dbtest/t/tidb/intermediate-write1.txt new file mode 100644 index 00000000..c5c3ea3a --- /dev/null +++ b/src/dbtest/t/tidb/intermediate-write1.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/tidb/intermediate-write2.txt b/src/dbtest/t/tidb/intermediate-write2.txt new file mode 100644 index 00000000..7faf77b0 --- /dev/null +++ b/src/dbtest/t/tidb/intermediate-write2.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/tidb/long-fork-anomaly.txt b/src/dbtest/t/tidb/long-fork-anomaly.txt new file mode 100644 index 00000000..727c16f0 --- /dev/null +++ b/src/dbtest/t/tidb/long-fork-anomaly.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1; +16-4-commit; + +serializable { +2-0,0 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,1 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,1 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,0 +10-1,1 +15-0,1 1,1 + +2-0,1 +6-1,0 +7-0,0 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,0 +7-0,1 +10-1,0 +15-0,1 1,1 + +2-0,0 +6-1,1 +7-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/lost-self-update1.txt b/src/dbtest/t/tidb/lost-self-update1.txt new file mode 100644 index 00000000..ad197022 --- /dev/null +++ b/src/dbtest/t/tidb/lost-self-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/tidb/lost-self-update2.txt b/src/dbtest/t/tidb/lost-self-update2.txt new file mode 100644 index 00000000..7b8a0059 --- /dev/null +++ b/src/dbtest/t/tidb/lost-self-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/tidb/lost-update1.txt b/src/dbtest/t/tidb/lost-update1.txt new file mode 100644 index 00000000..26240f28 --- /dev/null +++ b/src/dbtest/t/tidb/lost-update1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/tidb/lost-update2.txt b/src/dbtest/t/tidb/lost-update2.txt new file mode 100644 index 00000000..b8ecf732 --- /dev/null +++ b/src/dbtest/t/tidb/lost-update2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +8-0,2 + +2-0,2 +8-0,1 +} diff --git a/src/dbtest/t/tidb/middle-read.txt b/src/dbtest/t/tidb/middle-read.txt new file mode 100644 index 00000000..f8319ec3 --- /dev/null +++ b/src/dbtest/t/tidb/middle-read.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} diff --git a/src/dbtest/t/tidb/non-repeatable-read1.txt b/src/dbtest/t/tidb/non-repeatable-read1.txt new file mode 100644 index 00000000..6d426072 --- /dev/null +++ b/src/dbtest/t/tidb/non-repeatable-read1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +6-0,0 +8-0,1 + +2-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/tidb/non-repeatable-read2.txt b/src/dbtest/t/tidb/non-repeatable-read2.txt new file mode 100644 index 00000000..16a4b884 --- /dev/null +++ b/src/dbtest/t/tidb/non-repeatable-read2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-0,0 +5-0,0 +8-0,1 + +2-0,1 +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/tidb/phantom-read.txt b/src/dbtest/t/tidb/phantom-read.txt new file mode 100644 index 00000000..408f7737 --- /dev/null +++ b/src/dbtest/t/tidb/phantom-read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +2-null +6-null +8-0,0 + +2-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/tidb/predicate-sawtooth.txt b/src/dbtest/t/tidb/predicate-sawtooth.txt new file mode 100644 index 00000000..07277c6d --- /dev/null +++ b/src/dbtest/t/tidb/predicate-sawtooth.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where v=0; +3-2-begin; +4-2-select * from t1 where v=0; +5-3-begin; +6-3-select * from t1 where v=0; +7-1-insert into t1 values(0,0); +8-2-insert into t1 values(1,0); +9-3-insert into t1 values(2,0); +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-null +4-0,0 +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-null +4-0,0 2,0 +6-0,0 +13-0,0 1,0 2,0 + +2-1,0 +4-null +6-0,0 1,0 +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-null +6-1,0 +13-0,0 1,0 2,0 + +2-2,0 +4-0,0 2,0 +6-null +13-0,0 1,0 2,0 + +2-1,0 2,0 +4-2,0 +6-null +13-0,0 1,0 2,0 +} diff --git a/src/dbtest/t/tidb/primary-colors.txt b/src/dbtest/t/tidb/primary-colors.txt new file mode 100644 index 00000000..9c35d985 --- /dev/null +++ b/src/dbtest/t/tidb/primary-colors.txt @@ -0,0 +1,30 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('red'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('red'); +0-1-insert into dots(color) values('yellow'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'red'; +3-2-begin; +4-2-update dots set color = 'blue' where color = 'yellow'; +5-3-begin; +6-3-update dots set color = 'red' where color = 'blue'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/tidb/primary-colors2.txt b/src/dbtest/t/tidb/primary-colors2.txt new file mode 100644 index 00000000..d1ef3957 --- /dev/null +++ b/src/dbtest/t/tidb/primary-colors2.txt @@ -0,0 +1,44 @@ +ParamNum:2 +0-1-drop table if exists dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('redredreda'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) values('yellowabcd'); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) (select color from dots); +0-1-insert into dots(color) values('blue'); +0-1-insert into dots(color) values('blue'); +0-1-COMMIT; +1-1-begin; +2-1-update dots set color = 'yellow' where color = 'redredreda'; +3-2-begin; +4-2-update dots set color = 'red' where color = 'blue'; +5-3-begin; +6-3-update dots set color = 'blue' where color = 'yellow'; +7-1-commit; +8-2-commit; +9-3-commit; +10-4-select * from dots; +11-4-commit; + +serializable { +10-1,red 2,red 3,red 4,red 5,red 6,red +10-1,blue 2,blue 3,red 4,blue 5,blue 6,red +10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow +10-1,yellow 2,red 3,red 4,yellow 5,red 6,red +10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue +10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow +} diff --git a/src/dbtest/t/tidb/rat-special.txt b/src/dbtest/t/tidb/rat-special.txt new file mode 100644 index 00000000..2ab8db87 --- /dev/null +++ b/src/dbtest/t/tidb/rat-special.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-2-select * from t1 where k=1; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +10-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +10-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +10-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/tidb/rat-special2.txt b/src/dbtest/t/tidb/rat-special2.txt new file mode 100644 index 00000000..d99cfc58 --- /dev/null +++ b/src/dbtest/t/tidb/rat-special2.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-3-BEGIN; +2-3-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-BEGIN; +8-2-select * from t1 where k=2; +9-3-update t1 set v=1 where k=2; +10-3-COMMIT; +11-2-select * from t1 where k=1; +12-2-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 + +2-0,0 +8-2,1 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,0 +8-2,0 +11-1,0 +13-0,1 1,1 2,1 + +2-0,1 +8-2,0 +11-1,1 +13-0,1 1,1 2,1 + +2-0,1 +8-2,1 +11-1,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt new file mode 100644 index 00000000..30e1cf70 --- /dev/null +++ b/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt @@ -0,0 +1,40 @@ +ParamNum:4 +0-1-drop table if exists control; +0-1-drop table if exists receipt; +0-1-create table control(deposit_no int not null); +0-1-insert into control values (1); +0-1-commit; +0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); +0-2-commit; +0-2-insert into receipt values (1, 1, 'Crosby', '100'); +0-2-insert into receipt values (2, 1, 'Stills', '200'); +0-2-insert into receipt values (3, 1, 'Nash', '300'); +0-2-commit; +1-1-BEGIN; +2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); +3-1-select * from receipt; +4-2-BEGIN; +5-2-select deposit_no from control; +6-2-update control set deposit_no = 2; +7-2-COMMIT; +8-3-BEGIN; +9-3-select * from receipt where deposit_no = 1; +10-1-COMMIT; +11-3-COMMIT; +12-4-select * from receipt; +13-4-select * from control; +14-4-COMMIT; + +serializable { +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 +13-2,,, + +3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +5-1,,, +9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 +12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 +13-2,,, +} diff --git a/src/dbtest/t/tidb/read-only-transaction-anomaly.txt b/src/dbtest/t/tidb/read-only-transaction-anomaly.txt new file mode 100644 index 00000000..a684704c --- /dev/null +++ b/src/dbtest/t/tidb/read-only-transaction-anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +8-3-BEGIN; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1; +15-3-commit; + +serializable { +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +2-0,0 +3-1,0 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +2-0,0 +3-1,20 +5-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/tidb/read-skew1.txt b/src/dbtest/t/tidb/read-skew1.txt new file mode 100644 index 00000000..2a500247 --- /dev/null +++ b/src/dbtest/t/tidb/read-skew1.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +7-1,0 +9-0,1 1,1 + +2-0,1 +7-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/read-skew2.txt b/src/dbtest/t/tidb/read-skew2.txt new file mode 100644 index 00000000..0075542e --- /dev/null +++ b/src/dbtest/t/tidb/read-skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +6-1,0 +9-0,1 1,1 + +2-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/read-skew3.txt b/src/dbtest/t/tidb/read-skew3.txt new file mode 100644 index 00000000..16031984 --- /dev/null +++ b/src/dbtest/t/tidb/read-skew3.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-SELECT * from t1 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +4-0,1 +5-1,1 +9-0,1 1,1 + +4-0,0 +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/read-write-skew1-1.txt b/src/dbtest/t/tidb/read-write-skew1-1.txt new file mode 100644 index 00000000..0ded781d --- /dev/null +++ b/src/dbtest/t/tidb/read-write-skew1-1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=2 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,2 + +2-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/read-write-skew1-2.txt b/src/dbtest/t/tidb/read-write-skew1-2.txt new file mode 100644 index 00000000..2ae13088 --- /dev/null +++ b/src/dbtest/t/tidb/read-write-skew1-2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-SELECT * from t1 WHERE k=1; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +5-1,1 +9-0,2 1,1 + +5-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/tidb/read-write-skew2.txt b/src/dbtest/t/tidb/read-write-skew2.txt new file mode 100644 index 00000000..6c82b70c --- /dev/null +++ b/src/dbtest/t/tidb/read-write-skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-UPDATE t1 SET v=2 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +9-0,1 1,1 + +2-0,1 +9-0,1 1,2 +} diff --git a/src/dbtest/t/tidb/sawtooth.txt b/src/dbtest/t/tidb/sawtooth.txt new file mode 100644 index 00000000..4e57bfc5 --- /dev/null +++ b/src/dbtest/t/tidb/sawtooth.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-select * from t1 where k=1; +5-3-begin; +6-3-select * from t1 where k=2; +7-1-update t1 set v=1 where k=1; +8-2-update t1 set v=1 where k=2; +9-3-update t1 set v=1 where k=0; +10-1-commit; +11-2-commit; +12-3-commit; +13-4-SELECT * from t1; +14-4-COMMIT; + +serializable { +2-0,0 +4-1,1 +6-2,1 +13-0,1 1,1 2,1 + +2-0,0 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,0 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,1 +13-0,1 1,1 2,1 + +2-0,1 +4-1,1 +6-2,0 +13-0,1 1,1 2,1 + +2-0,1 +4-1,0 +6-2,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt b/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt new file mode 100644 index 00000000..e0135311 --- /dev/null +++ b/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-UPDATE t1 SET v=1 WHERE k=1; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=0; +8-1-SELECT * from t1 WHERE k=1; +9-1-COMMIT; +10-3-SELECT * from t1; +11-3-COMMIT; + +serializable { +2-0,0 +7-0,0 +8-1,0 +10-0,1 1,1 + +2-0,1 +7-0,1 +8-1,1 +10-0,1 1,1 +} + + + diff --git a/src/dbtest/t/tidb/step-read-skew.txt b/src/dbtest/t/tidb/step-read-skew.txt new file mode 100644 index 00000000..7b1c68f5 --- /dev/null +++ b/src/dbtest/t/tidb/step-read-skew.txt @@ -0,0 +1,45 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-begin; +2-1-select * from t1 where k=0; +3-2-begin; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-INSERT INTO t1 VALUES (1, 0); +6-2-commit; +7-3-begin; +8-3-UPDATE t1 SET v=1 WHERE k=1; +9-3-INSERT INTO t1 VALUES (2, 0); +10-3-commit; +11-1-SELECT * from t1 WHERE k=2; +12-1-commit; +13-4-SELECT * FROM t1; +14-4-COMMIT; + +serializable { +2-0,0 +11-null +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,1 2,0 + +2-0,1 +11-2,0 +13-0,1 1,1 2,0 + +2-0,0 +11-null +13-0,1 1,0 + +2-0,1 +11-null +13-0,1 1,0 +} diff --git a/src/dbtest/t/tidb/step-wat.txt b/src/dbtest/t/tidb/step-wat.txt new file mode 100644 index 00000000..807ef480 --- /dev/null +++ b/src/dbtest/t/tidb/step-wat.txt @@ -0,0 +1,75 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-3-BEGIN; +9-3-update t1 set v=2 where k=0; +10-2-commit; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=1; +15-1-select * from t1 where k=2; +16-1-commit; +17-4-select * from t1; +18-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,0 +17-0,1 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,0 +17-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-1,0 +15-2,1 +17-0,1 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-1,1 +15-2,1 +17-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt b/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt new file mode 100644 index 00000000..74701f0c --- /dev/null +++ b/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(1,1); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,1 + +2-0,0 +7-1,1 +9-0,0 1,1 +} diff --git a/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt b/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt new file mode 100644 index 00000000..560206ed --- /dev/null +++ b/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=1; +5-1-insert into t1 values(1,1); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,1 +9-0,0 1,1 + +2-0,0 +4-null +9-0,0 1,1 +} diff --git a/src/dbtest/t/tidb/total-same-predicate-read-skew.txt b/src/dbtest/t/tidb/total-same-predicate-read-skew.txt new file mode 100644 index 00000000..0c39b464 --- /dev/null +++ b/src/dbtest/t/tidb/total-same-predicate-read-skew.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-insert into t1 values(0,0); +5-2-insert into t1 values(1,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +7-null +9-0,0 1,0 + + +2-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt b/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt new file mode 100644 index 00000000..3456462b --- /dev/null +++ b/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt @@ -0,0 +1,28 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=2; +6-2-commit; +7-1-select * from t1; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +2-1,0 2,0 +7-1,0 2,0 +9-1,1 2,1 + +2-null +7-1,1 2,1 +9-1,1 2,1 +} + + diff --git a/src/dbtest/t/tidb/total-same-predicate-write-skew.txt b/src/dbtest/t/tidb/total-same-predicate-write-skew.txt new file mode 100644 index 00000000..5174028f --- /dev/null +++ b/src/dbtest/t/tidb/total-same-predicate-write-skew.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where v=0; +3-2-BEGIN; +4-2-select * from t1 where v=0; +5-1-insert into t1 values(1,0); +6-2-insert into t1 values(0,0); +7-1-commit; +8-2-commit; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-null +4-1,0 +9-0,0 1,0 + +2-0,0 +4-null +9-0,0 1,0 +} diff --git a/src/dbtest/t/tidb/unnamed-anomaly.txt b/src/dbtest/t/tidb/unnamed-anomaly.txt new file mode 100644 index 00000000..0cac37c6 --- /dev/null +++ b/src/dbtest/t/tidb/unnamed-anomaly.txt @@ -0,0 +1,68 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; +10-3-update t1 set v=2 where k=0; +11-3-select * from t1 where k=2; +12-3-update t1 set v=1 where k=2; +13-3-commit; +14-1-select * from t1 where k=2; +15-1-commit; +16-4-select * from t1; +17-4-commit; + +serializable { +2-1,0 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,0 +6-1,0 +11-2,0 +14-2,0 +16-0,2 1,1 2,1 + +2-1,0 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 + +2-1,1 +4-0,2 +6-1,0 +11-2,0 +14-2,1 +16-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/tidb/write-read-skew1.txt b/src/dbtest/t/tidb/write-read-skew1.txt new file mode 100644 index 00000000..95c25f23 --- /dev/null +++ b/src/dbtest/t/tidb/write-read-skew1.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +5-0,0 +7-1,1 +9-0,1 1,1 + +5-0,1 +7-1,0 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/tidb/write-read-skew2.txt b/src/dbtest/t/tidb/write-read-skew2.txt new file mode 100644 index 00000000..ed383947 --- /dev/null +++ b/src/dbtest/t/tidb/write-read-skew2.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=1; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1; +10-3-commit; + +serializable { +4-0,1 +6-1,0 +9-0,1 1,1 + +4-0,0 +6-1,1 +9-0,1 1,1 +} + diff --git a/src/dbtest/t/tidb/write-skew-black-white.txt b/src/dbtest/t/tidb/write-skew-black-white.txt new file mode 100644 index 00000000..231a0111 --- /dev/null +++ b/src/dbtest/t/tidb/write-skew-black-white.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS dots; +0-1-create table dots(id int not null primary key auto_increment, color text not null); +0-1-insert into dots(color) values('black'); +0-1-insert into dots(color) values('white'); +0-1-insert into dots(color) values('black'); +0-1-insert into dots(color) values('white'); +0-1-COMMIT; +1-1-BEGIN; +2-1-update dots set color = 'black' where color = 'white'; +3-2-BEGIN; +4-2-update dots set color = 'white' where color = 'black'; +5-2-COMMIT; +6-2-select * from dots order by id; +7-1-COMMIT; +8-3-select * from dots; +9-3-COMMIT: + +serializable { +6-1,white 2,white 3,white 4,white +8-1,white 2,white 3,white 4,white + +6-1,white 2,white 3,white 4,white +8-1,black 2,black 3,black 4,black +} diff --git a/src/dbtest/t/tidb/write-skew-intersecting-data.txt b/src/dbtest/t/tidb/write-skew-intersecting-data.txt new file mode 100644 index 00000000..8087ed2a --- /dev/null +++ b/src/dbtest/t/tidb/write-skew-intersecting-data.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +4-2-BEGIN; +6-2-INSERT INTO mytab VALUES (1, 300); +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +3-1-INSERT INTO mytab VALUES (2, 30); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-COMMIT; + +serializable { +2-30, +5-330, +9-330, +10-330, + +2-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/tidb/write-skew-overdraft-protection.txt b/src/dbtest/t/tidb/write-skew-overdraft-protection.txt new file mode 100644 index 00000000..615c4e7c --- /dev/null +++ b/src/dbtest/t/tidb/write-skew-overdraft-protection.txt @@ -0,0 +1,25 @@ +ParamNum:3 +0-1-drop table if exists account; +0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-COMMIT; + +serializable { +2-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +2-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/tidb/write-skew.txt b/src/dbtest/t/tidb/write-skew.txt new file mode 100644 index 00000000..51eb55df --- /dev/null +++ b/src/dbtest/t/tidb/write-skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-1-update t1 set v=1 where k=1; +6-1-COMMIT; +7-2-update t1 set v=1 where k=0; +8-2-COMMIT; +9-3-select * from t1; +10-3-COMMIT; + +serializable { +2-0,0 +4-1,1 +9-0,1 1,1 + +2-0,1 +4-1,0 +9-0,1 1,1 +} From 1f56a9eb7999560018b323f33c03d5470f437376 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Feb 2022 16:01:49 +0800 Subject: [PATCH 13/81] Remove old test cases --- src/dbtest/t/crdb/aborted-reads.txt | 16 --- .../t/crdb/causality-violation-anomaly.txt | 49 -------- src/dbtest/t/crdb/cross-phantom.txt | 104 ----------------- src/dbtest/t/crdb/cross-phenomenon.txt | 106 ----------------- src/dbtest/t/crdb/dirty-read.txt | 15 --- src/dbtest/t/crdb/dirty-write1.txt | 17 --- src/dbtest/t/crdb/dirty-write2.txt | 17 --- src/dbtest/t/crdb/double-write-skew1-1.txt | 22 ---- src/dbtest/t/crdb/double-write-skew1-2.txt | 22 ---- src/dbtest/t/crdb/double-write-skew1-3.txt | 22 ---- src/dbtest/t/crdb/double-write-skew2.txt | 24 ---- src/dbtest/t/crdb/fractured-reads.txt | 29 ----- src/dbtest/t/crdb/full-write-skew1.txt | 20 ---- src/dbtest/t/crdb/full-write-skew2.txt | 20 ---- .../t/crdb/half-predicate-read-skew.txt | 23 ---- .../t/crdb/half-predicate-write-skew.txt | 24 ---- src/dbtest/t/crdb/intermediate-reads.txt | 21 ---- src/dbtest/t/crdb/intermediate-write1.txt | 18 --- src/dbtest/t/crdb/intermediate-write2.txt | 18 --- src/dbtest/t/crdb/long-fork-anomaly.txt | 106 ----------------- src/dbtest/t/crdb/lost-self-update1.txt | 20 ---- src/dbtest/t/crdb/lost-self-update2.txt | 20 ---- src/dbtest/t/crdb/lost-update1.txt | 20 ---- src/dbtest/t/crdb/lost-update2.txt | 20 ---- src/dbtest/t/crdb/middle-read.txt | 20 ---- src/dbtest/t/crdb/non-repeatable-read1.txt | 22 ---- src/dbtest/t/crdb/non-repeatable-read2.txt | 22 ---- src/dbtest/t/crdb/phantom-read.txt | 21 ---- src/dbtest/t/crdb/predicate-sawtooth.txt | 48 -------- src/dbtest/t/crdb/primary-colors.txt | 28 ----- src/dbtest/t/crdb/primary-colors2.txt | 44 ------- src/dbtest/t/crdb/rat-special.txt | 52 --------- src/dbtest/t/crdb/rat-special2.txt | 52 --------- ...nly-transaction-anomaly-deposit-report.txt | 38 ------ .../t/crdb/read-only-transaction-anomaly.txt | 63 ---------- src/dbtest/t/crdb/read-skew1.txt | 24 ---- src/dbtest/t/crdb/read-skew2.txt | 24 ---- src/dbtest/t/crdb/read-skew3.txt | 24 ---- src/dbtest/t/crdb/read-write-skew1-1.txt | 22 ---- src/dbtest/t/crdb/read-write-skew1-2.txt | 22 ---- src/dbtest/t/crdb/read-write-skew2.txt | 22 ---- src/dbtest/t/crdb/sawtooth.txt | 51 -------- .../t/crdb/serial-concurrent-phenomenon.txt | 30 ----- src/dbtest/t/crdb/step-read-skew.txt | 43 ------- src/dbtest/t/crdb/step-wat.txt | 73 ------------ .../t/crdb/total-diff-predicate-read-skew.txt | 22 ---- .../crdb/total-diff-predicate-write-skew.txt | 22 ---- .../t/crdb/total-same-predicate-read-skew.txt | 23 ---- .../crdb/total-same-predicate-read-skew2.txt | 26 ----- .../crdb/total-same-predicate-write-skew.txt | 22 ---- src/dbtest/t/crdb/unnamed-anomaly.txt | 66 ----------- src/dbtest/t/crdb/write-read-skew1.txt | 27 ----- src/dbtest/t/crdb/write-read-skew2.txt | 25 ---- src/dbtest/t/crdb/write-skew-black-white.txt | 23 ---- .../t/crdb/write-skew-intersecting-data.txt | 27 ----- .../crdb/write-skew-overdraft-protection.txt | 23 ---- src/dbtest/t/crdb/write-skew.txt | 24 ---- src/dbtest/t/mongodb/aborted-reads.txt | 16 --- .../t/mongodb/causality-violation-anomaly.txt | 46 -------- src/dbtest/t/mongodb/cross-phantom.txt | 101 ---------------- src/dbtest/t/mongodb/cross-phenomenon.txt | 103 ----------------- src/dbtest/t/mongodb/dirty-read.txt | 12 -- src/dbtest/t/mongodb/dirty-write1.txt | 14 --- src/dbtest/t/mongodb/dirty-write2.txt | 14 --- src/dbtest/t/mongodb/double-write-skew1-1.txt | 19 --- src/dbtest/t/mongodb/double-write-skew1-2.txt | 19 --- src/dbtest/t/mongodb/double-write-skew1-3.txt | 19 --- src/dbtest/t/mongodb/double-write-skew2.txt | 21 ---- src/dbtest/t/mongodb/fractured-reads.txt | 26 ----- src/dbtest/t/mongodb/full-write-skew1.txt | 17 --- src/dbtest/t/mongodb/full-write-skew2.txt | 17 --- .../t/mongodb/half-predicate-read-skew.txt | 20 ---- .../t/mongodb/half-predicate-write-skew.txt | 20 ---- src/dbtest/t/mongodb/intermediate-reads.txt | 18 --- src/dbtest/t/mongodb/intermediate-write1.txt | 15 --- src/dbtest/t/mongodb/intermediate-write2.txt | 15 --- src/dbtest/t/mongodb/long-fork-anomaly.txt | 103 ----------------- src/dbtest/t/mongodb/lost-self-update1.txt | 17 --- src/dbtest/t/mongodb/lost-self-update2.txt | 17 --- src/dbtest/t/mongodb/lost-update1.txt | 17 --- src/dbtest/t/mongodb/lost-update2.txt | 17 --- src/dbtest/t/mongodb/middle-read.txt | 22 ---- src/dbtest/t/mongodb/non-repeatable-read1.txt | 19 --- src/dbtest/t/mongodb/non-repeatable-read2.txt | 19 --- src/dbtest/t/mongodb/phantom-read.txt | 23 ---- src/dbtest/t/mongodb/predicate-sawtooth.txt | 45 -------- src/dbtest/t/mongodb/primary-colors.txt | 27 ----- src/dbtest/t/mongodb/primary-colors2.txt | 44 ------- src/dbtest/t/mongodb/rat-special.txt | 48 -------- src/dbtest/t/mongodb/rat-special2.txt | 48 -------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../mongodb/read-only-transaction-anomaly.txt | 60 ---------- src/dbtest/t/mongodb/read-skew1.txt | 21 ---- src/dbtest/t/mongodb/read-skew2.txt | 21 ---- src/dbtest/t/mongodb/read-skew3.txt | 21 ---- src/dbtest/t/mongodb/read-write-skew1-1.txt | 19 --- src/dbtest/t/mongodb/read-write-skew1-2.txt | 19 --- src/dbtest/t/mongodb/read-write-skew2.txt | 19 --- src/dbtest/t/mongodb/sawtooth.txt | 48 -------- .../mongodb/serial-concurrent-phenomenon.txt | 27 ----- src/dbtest/t/mongodb/step-read-skew.txt | 40 ------- src/dbtest/t/mongodb/step-wat.txt | 70 ----------- .../total-diff-predicate-read-skew.txt | 19 --- .../total-diff-predicate-write-skew.txt | 19 --- .../total-same-predicate-read-skew.txt | 20 ---- .../total-same-predicate-read-skew2.txt | 23 ---- .../total-same-predicate-write-skew.txt | 19 --- src/dbtest/t/mongodb/unnamed-anomaly.txt | 63 ---------- src/dbtest/t/mongodb/write-read-skew1.txt | 21 ---- src/dbtest/t/mongodb/write-read-skew2.txt | 22 ---- .../t/mongodb/write-skew-black-white.txt | 20 ---- .../mongodb/write-skew-intersecting-data.txt | 26 ----- .../write-skew-overdraft-protection.txt | 27 ----- src/dbtest/t/mongodb/write-skew.txt | 21 ---- src/dbtest/t/mysql/aborted-reads.txt | 18 --- .../t/mysql/causality-violation-anomaly.txt | 51 -------- src/dbtest/t/mysql/cross-phantom.txt | 106 ----------------- src/dbtest/t/mysql/cross-phenomenon.txt | 108 ----------------- src/dbtest/t/mysql/dirty-read.txt | 17 --- src/dbtest/t/mysql/dirty-write1.txt | 19 --- src/dbtest/t/mysql/dirty-write2.txt | 19 --- src/dbtest/t/mysql/double-write-skew1-1.txt | 24 ---- src/dbtest/t/mysql/double-write-skew1-2.txt | 24 ---- src/dbtest/t/mysql/double-write-skew1-3.txt | 24 ---- src/dbtest/t/mysql/double-write-skew2.txt | 26 ----- src/dbtest/t/mysql/fractured-reads.txt | 31 ----- src/dbtest/t/mysql/full-write-skew1.txt | 22 ---- src/dbtest/t/mysql/full-write-skew2.txt | 22 ---- .../t/mysql/half-predicate-read-skew.txt | 25 ---- .../t/mysql/half-predicate-write-skew.txt | 26 ----- src/dbtest/t/mysql/intermediate-reads.txt | 23 ---- src/dbtest/t/mysql/intermediate-write1.txt | 20 ---- src/dbtest/t/mysql/intermediate-write2.txt | 20 ---- src/dbtest/t/mysql/long-fork-anomaly.txt | 108 ----------------- src/dbtest/t/mysql/lost-self-update1.txt | 22 ---- src/dbtest/t/mysql/lost-self-update2.txt | 22 ---- src/dbtest/t/mysql/lost-update1.txt | 22 ---- src/dbtest/t/mysql/lost-update2.txt | 22 ---- src/dbtest/t/mysql/middle-read.txt | 22 ---- src/dbtest/t/mysql/non-repeatable-read1.txt | 24 ---- src/dbtest/t/mysql/non-repeatable-read2.txt | 24 ---- src/dbtest/t/mysql/phantom-read.txt | 23 ---- src/dbtest/t/mysql/predicate-sawtooth.txt | 50 -------- src/dbtest/t/mysql/primary-colors.txt | 30 ----- src/dbtest/t/mysql/primary-colors2.txt | 44 ------- src/dbtest/t/mysql/rat-special.txt | 53 --------- src/dbtest/t/mysql/rat-special2.txt | 53 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../t/mysql/read-only-transaction-anomaly.txt | 65 ----------- src/dbtest/t/mysql/read-skew1.txt | 26 ----- src/dbtest/t/mysql/read-skew2.txt | 26 ----- src/dbtest/t/mysql/read-skew3.txt | 26 ----- src/dbtest/t/mysql/read-write-skew1-1.txt | 24 ---- src/dbtest/t/mysql/read-write-skew1-2.txt | 24 ---- src/dbtest/t/mysql/read-write-skew2.txt | 24 ---- src/dbtest/t/mysql/sawtooth.txt | 53 --------- .../t/mysql/serial-concurrent-phenomenon.txt | 32 ----- src/dbtest/t/mysql/step-read-skew.txt | 45 -------- src/dbtest/t/mysql/step-wat.txt | 75 ------------ .../mysql/total-diff-predicate-read-skew.txt | 24 ---- .../mysql/total-diff-predicate-write-skew.txt | 24 ---- .../mysql/total-same-predicate-read-skew.txt | 25 ---- .../mysql/total-same-predicate-read-skew2.txt | 28 ----- .../mysql/total-same-predicate-write-skew.txt | 24 ---- src/dbtest/t/mysql/unnamed-anomaly.txt | 68 ----------- src/dbtest/t/mysql/write-read-skew1.txt | 29 ----- src/dbtest/t/mysql/write-read-skew2.txt | 27 ----- src/dbtest/t/mysql/write-skew-black-white.txt | 25 ---- .../t/mysql/write-skew-intersecting-data.txt | 29 ----- .../mysql/write-skew-overdraft-protection.txt | 25 ---- src/dbtest/t/mysql/write-skew.txt | 26 ----- src/dbtest/t/ob/aborted-reads.txt | 17 --- .../t/ob/causality-violation-anomaly.txt | 52 --------- src/dbtest/t/ob/cross-phantom.txt | 107 ----------------- src/dbtest/t/ob/cross-phenomenon.txt | 109 ------------------ src/dbtest/t/ob/dirty-read.txt | 18 --- src/dbtest/t/ob/dirty-write1.txt | 20 ---- src/dbtest/t/ob/dirty-write2.txt | 20 ---- src/dbtest/t/ob/double-write-skew.txt | 24 ---- src/dbtest/t/ob/double-write-skew1-1.txt | 25 ---- src/dbtest/t/ob/double-write-skew1-2.txt | 25 ---- src/dbtest/t/ob/double-write-skew1-3.txt | 25 ---- src/dbtest/t/ob/double-write-skew2.txt | 27 ----- src/dbtest/t/ob/fractured-reads.txt | 32 ----- src/dbtest/t/ob/full-write-skew1.txt | 23 ---- src/dbtest/t/ob/full-write-skew2.txt | 23 ---- src/dbtest/t/ob/half-predicate-read-skew.txt | 26 ----- src/dbtest/t/ob/half-predicate-write-skew.txt | 27 ----- src/dbtest/t/ob/intermediate-reads.txt | 24 ---- src/dbtest/t/ob/intermediate-write1.txt | 21 ---- src/dbtest/t/ob/intermediate-write2.txt | 21 ---- src/dbtest/t/ob/long-fork-anomaly.txt | 109 ------------------ src/dbtest/t/ob/lost-self-update1.txt | 23 ---- src/dbtest/t/ob/lost-self-update2.txt | 23 ---- src/dbtest/t/ob/lost-update.txt | 22 ---- src/dbtest/t/ob/lost-update1.txt | 23 ---- src/dbtest/t/ob/lost-update2.txt | 23 ---- src/dbtest/t/ob/middle-read.txt | 22 ---- src/dbtest/t/ob/non-repeatable-read1.txt | 25 ---- src/dbtest/t/ob/non-repeatable-read2.txt | 25 ---- src/dbtest/t/ob/phantom-read.txt | 23 ---- src/dbtest/t/ob/predicate-sawtooth.txt | 51 -------- src/dbtest/t/ob/primary-colors.txt | 31 ----- src/dbtest/t/ob/primary-colors2.txt | 44 ------- src/dbtest/t/ob/rat-special.txt | 54 --------- src/dbtest/t/ob/rat-special2.txt | 54 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../t/ob/read-only-transaction-anomaly.txt | 66 ----------- src/dbtest/t/ob/read-skew1.txt | 27 ----- src/dbtest/t/ob/read-skew2.txt | 27 ----- src/dbtest/t/ob/read-skew3.txt | 27 ----- src/dbtest/t/ob/read-write-skew1-1.txt | 25 ---- src/dbtest/t/ob/read-write-skew1-2.txt | 25 ---- src/dbtest/t/ob/read-write-skew2.txt | 25 ---- src/dbtest/t/ob/sawtooth.txt | 54 --------- .../t/ob/serial-concurrent-phenomenon.txt | 33 ------ src/dbtest/t/ob/step-read-skew.txt | 46 -------- src/dbtest/t/ob/step-wat.txt | 69 ----------- .../t/ob/total-diff-predicate-read-skew.txt | 25 ---- .../t/ob/total-diff-predicate-write-skew.txt | 25 ---- .../t/ob/total-same-predicate-read-skew.txt | 25 ---- .../t/ob/total-same-predicate-read-skew2.txt | 29 ----- .../t/ob/total-same-predicate-write-skew.txt | 25 ---- src/dbtest/t/ob/unnamed-anomaly.txt | 69 ----------- src/dbtest/t/ob/unrepeatable-read.txt | 24 ---- src/dbtest/t/ob/write-read-skew1.txt | 30 ----- src/dbtest/t/ob/write-read-skew2.txt | 28 ----- src/dbtest/t/ob/write-skew-black-white.txt | 26 ----- .../t/ob/write-skew-intersecting-data.txt | 32 ----- .../t/ob/write-skew-overdraft-protection.txt | 27 ----- src/dbtest/t/ob/write-skew.txt | 27 ----- src/dbtest/t/oracle/aborted-reads.txt | 17 --- .../t/oracle/causality-violation-anomaly.txt | 52 --------- src/dbtest/t/oracle/cross-phantom.txt | 107 ----------------- src/dbtest/t/oracle/cross-phenomenon.txt | 109 ------------------ src/dbtest/t/oracle/dirty-read.txt | 18 --- src/dbtest/t/oracle/dirty-write1.txt | 20 ---- src/dbtest/t/oracle/dirty-write2.txt | 20 ---- src/dbtest/t/oracle/double-write-skew.txt | 24 ---- src/dbtest/t/oracle/double-write-skew1-1.txt | 25 ---- src/dbtest/t/oracle/double-write-skew1-2.txt | 25 ---- src/dbtest/t/oracle/double-write-skew1-3.txt | 25 ---- src/dbtest/t/oracle/double-write-skew2.txt | 27 ----- src/dbtest/t/oracle/fractured-reads.txt | 32 ----- src/dbtest/t/oracle/full-write-skew1.txt | 23 ---- src/dbtest/t/oracle/full-write-skew2.txt | 23 ---- .../t/oracle/half-predicate-read-skew.txt | 26 ----- .../t/oracle/half-predicate-write-skew.txt | 27 ----- src/dbtest/t/oracle/intermediate-reads.txt | 24 ---- src/dbtest/t/oracle/intermediate-write1.txt | 21 ---- src/dbtest/t/oracle/intermediate-write2.txt | 21 ---- src/dbtest/t/oracle/long-fork-anomaly.txt | 109 ------------------ src/dbtest/t/oracle/lost-self-update1.txt | 23 ---- src/dbtest/t/oracle/lost-self-update2.txt | 23 ---- src/dbtest/t/oracle/lost-update.txt | 22 ---- src/dbtest/t/oracle/lost-update1.txt | 23 ---- src/dbtest/t/oracle/lost-update2.txt | 23 ---- src/dbtest/t/oracle/middle-read.txt | 22 ---- src/dbtest/t/oracle/non-repeatable-read1.txt | 25 ---- src/dbtest/t/oracle/non-repeatable-read2.txt | 25 ---- src/dbtest/t/oracle/phantom-read.txt | 23 ---- src/dbtest/t/oracle/predicate-sawtooth.txt | 51 -------- src/dbtest/t/oracle/primary-colors.txt | 31 ----- src/dbtest/t/oracle/primary-colors2.txt | 44 ------- src/dbtest/t/oracle/rat-special.txt | 54 --------- src/dbtest/t/oracle/rat-special2.txt | 54 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../oracle/read-only-transaction-anomaly.txt | 66 ----------- src/dbtest/t/oracle/read-skew1.txt | 27 ----- src/dbtest/t/oracle/read-skew2.txt | 27 ----- src/dbtest/t/oracle/read-skew3.txt | 27 ----- src/dbtest/t/oracle/read-write-skew1-1.txt | 25 ---- src/dbtest/t/oracle/read-write-skew1-2.txt | 25 ---- src/dbtest/t/oracle/read-write-skew2.txt | 25 ---- src/dbtest/t/oracle/sawtooth.txt | 54 --------- .../t/oracle/serial-concurrent-phenomenon.txt | 33 ------ src/dbtest/t/oracle/step-read-skew.txt | 46 -------- src/dbtest/t/oracle/step-wat.txt | 69 ----------- .../oracle/total-diff-predicate-read-skew.txt | 25 ---- .../total-diff-predicate-write-skew.txt | 25 ---- .../oracle/total-same-predicate-read-skew.txt | 25 ---- .../total-same-predicate-read-skew2.txt | 29 ----- .../total-same-predicate-write-skew.txt | 25 ---- src/dbtest/t/oracle/unnamed-anomaly.txt | 69 ----------- src/dbtest/t/oracle/unrepeatable-read.txt | 24 ---- src/dbtest/t/oracle/write-read-skew1.txt | 30 ----- src/dbtest/t/oracle/write-read-skew2.txt | 28 ----- .../t/oracle/write-skew-black-white.txt | 26 ----- .../t/oracle/write-skew-intersecting-data.txt | 32 ----- .../write-skew-overdraft-protection.txt | 27 ----- src/dbtest/t/oracle/write-skew.txt | 27 ----- src/dbtest/t/pg/aborted-reads.txt | 18 --- .../t/pg/causality-violation-anomaly.txt | 51 -------- src/dbtest/t/pg/cross-phantom.txt | 106 ----------------- src/dbtest/t/pg/cross-phenomenon.txt | 108 ----------------- src/dbtest/t/pg/dirty-read.txt | 18 --- src/dbtest/t/pg/dirty-write.txt | 19 --- src/dbtest/t/pg/dirty-write1.txt | 20 ---- src/dbtest/t/pg/dirty-write2.txt | 19 --- src/dbtest/t/pg/double-write-skew.txt | 24 ---- src/dbtest/t/pg/double-write-skew1-1.txt | 24 ---- src/dbtest/t/pg/double-write-skew1-2.txt | 24 ---- src/dbtest/t/pg/double-write-skew1-3.txt | 24 ---- src/dbtest/t/pg/double-write-skew2.txt | 26 ----- src/dbtest/t/pg/fractured-reads.txt | 31 ----- src/dbtest/t/pg/full-write-skew1.txt | 22 ---- src/dbtest/t/pg/full-write-skew2.txt | 22 ---- src/dbtest/t/pg/half-predicate-read-skew.txt | 25 ---- src/dbtest/t/pg/half-predicate-write-skew.txt | 26 ----- src/dbtest/t/pg/intermediate-reads.txt | 23 ---- src/dbtest/t/pg/intermediate-write1.txt | 20 ---- src/dbtest/t/pg/intermediate-write2.txt | 22 ---- src/dbtest/t/pg/long-fork-anomaly.txt | 108 ----------------- src/dbtest/t/pg/lost-self-update1.txt | 22 ---- src/dbtest/t/pg/lost-self-update2.txt | 22 ---- src/dbtest/t/pg/lost-update.txt | 22 ---- src/dbtest/t/pg/lost-update1.txt | 22 ---- src/dbtest/t/pg/lost-update2.txt | 22 ---- src/dbtest/t/pg/middle-read.txt | 22 ---- src/dbtest/t/pg/non-repeatable-read1.txt | 24 ---- src/dbtest/t/pg/non-repeatable-read2.txt | 24 ---- src/dbtest/t/pg/phantom-read.txt | 23 ---- src/dbtest/t/pg/predicate-sawtooth.txt | 50 -------- src/dbtest/t/pg/primary-colors.txt | 30 ----- src/dbtest/t/pg/primary-colors2.txt | 44 ------- src/dbtest/t/pg/rat-special.txt | 53 --------- src/dbtest/t/pg/rat-special2.txt | 53 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../t/pg/read-only-transaction-anomaly.txt | 65 ----------- src/dbtest/t/pg/read-skew.txt | 26 ----- src/dbtest/t/pg/read-skew1.txt | 27 ----- src/dbtest/t/pg/read-skew2.txt | 26 ----- src/dbtest/t/pg/read-skew3.txt | 26 ----- src/dbtest/t/pg/read-write-skew1-1.txt | 24 ---- src/dbtest/t/pg/read-write-skew1-2.txt | 24 ---- src/dbtest/t/pg/read-write-skew2.txt | 24 ---- src/dbtest/t/pg/sawtooth.txt | 53 --------- .../t/pg/serial-concurrent-phenomenon.txt | 32 ----- src/dbtest/t/pg/step-read-skew.txt | 45 -------- src/dbtest/t/pg/step-wat.txt | 68 ----------- .../t/pg/total-diff-predicate-read-skew.txt | 24 ---- .../t/pg/total-diff-predicate-write-skew.txt | 24 ---- .../t/pg/total-same-predicate-read-skew.txt | 25 ---- .../t/pg/total-same-predicate-read-skew2.txt | 28 ----- .../t/pg/total-same-predicate-write-skew.txt | 24 ---- src/dbtest/t/pg/unnamed-anomaly.txt | 68 ----------- src/dbtest/t/pg/unrepeatable-read.txt | 24 ---- src/dbtest/t/pg/write-read-skew1.txt | 29 ----- src/dbtest/t/pg/write-read-skew2.txt | 27 ----- src/dbtest/t/pg/write-skew-black-white.txt | 25 ---- .../t/pg/write-skew-intersecting-data.txt | 29 ----- .../t/pg/write-skew-overdraft-protection.txt | 25 ---- src/dbtest/t/pg/write-skew.txt | 26 ----- src/dbtest/t/sqlserver/aborted-reads.txt | 18 --- .../sqlserver/causality-violation-anomaly.txt | 51 -------- src/dbtest/t/sqlserver/cross-phantom.txt | 106 ----------------- src/dbtest/t/sqlserver/cross-phenomenon.txt | 108 ----------------- src/dbtest/t/sqlserver/dirty-read.txt | 18 --- src/dbtest/t/sqlserver/dirty-write.txt | 19 --- src/dbtest/t/sqlserver/dirty-write1.txt | 20 ---- src/dbtest/t/sqlserver/dirty-write2.txt | 19 --- src/dbtest/t/sqlserver/double-write-skew.txt | 24 ---- .../t/sqlserver/double-write-skew1-1.txt | 24 ---- .../t/sqlserver/double-write-skew1-2.txt | 24 ---- .../t/sqlserver/double-write-skew1-3.txt | 24 ---- src/dbtest/t/sqlserver/double-write-skew2.txt | 26 ----- src/dbtest/t/sqlserver/fractured-reads.txt | 31 ----- src/dbtest/t/sqlserver/full-write-skew1.txt | 22 ---- src/dbtest/t/sqlserver/full-write-skew2.txt | 22 ---- .../t/sqlserver/half-predicate-read-skew.txt | 25 ---- .../t/sqlserver/half-predicate-write-skew.txt | 26 ----- src/dbtest/t/sqlserver/intermediate-reads.txt | 23 ---- .../t/sqlserver/intermediate-write1.txt | 20 ---- .../t/sqlserver/intermediate-write2.txt | 20 ---- src/dbtest/t/sqlserver/long-fork-anomaly.txt | 108 ----------------- src/dbtest/t/sqlserver/lost-self-update1.txt | 22 ---- src/dbtest/t/sqlserver/lost-self-update2.txt | 22 ---- src/dbtest/t/sqlserver/lost-update.txt | 22 ---- src/dbtest/t/sqlserver/lost-update1.txt | 22 ---- src/dbtest/t/sqlserver/lost-update2.txt | 22 ---- src/dbtest/t/sqlserver/middle-read.txt | 22 ---- .../t/sqlserver/non-repeatable-read1.txt | 24 ---- .../t/sqlserver/non-repeatable-read2.txt | 24 ---- src/dbtest/t/sqlserver/phantom-read.txt | 23 ---- src/dbtest/t/sqlserver/predicate-sawtooth.txt | 50 -------- src/dbtest/t/sqlserver/primary-colors.txt | 30 ----- src/dbtest/t/sqlserver/primary-colors2.txt | 44 ------- src/dbtest/t/sqlserver/rat-special.txt | 53 --------- src/dbtest/t/sqlserver/rat-special2.txt | 53 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../read-only-transaction-anomaly.txt | 65 ----------- src/dbtest/t/sqlserver/read-skew.txt | 26 ----- src/dbtest/t/sqlserver/read-skew1.txt | 27 ----- src/dbtest/t/sqlserver/read-skew2.txt | 26 ----- src/dbtest/t/sqlserver/read-skew3.txt | 26 ----- src/dbtest/t/sqlserver/read-write-skew1-1.txt | 24 ---- src/dbtest/t/sqlserver/read-write-skew1-2.txt | 24 ---- src/dbtest/t/sqlserver/read-write-skew2.txt | 24 ---- src/dbtest/t/sqlserver/sawtooth.txt | 53 --------- .../serial-concurrent-phenomenon.txt | 32 ----- src/dbtest/t/sqlserver/step-read-skew.txt | 45 -------- src/dbtest/t/sqlserver/step-wat.txt | 68 ----------- .../total-diff-predicate-read-skew.txt | 24 ---- .../total-diff-predicate-write-skew.txt | 24 ---- .../total-same-predicate-read-skew.txt | 25 ---- .../total-same-predicate-read-skew2.txt | 28 ----- .../total-same-predicate-write-skew.txt | 24 ---- src/dbtest/t/sqlserver/unnamed-anomaly.txt | 68 ----------- src/dbtest/t/sqlserver/unrepeatable-read.txt | 24 ---- src/dbtest/t/sqlserver/write-read-skew1.txt | 29 ----- src/dbtest/t/sqlserver/write-read-skew2.txt | 27 ----- .../t/sqlserver/write-skew-black-white.txt | 25 ---- .../write-skew-intersecting-data.txt | 29 ----- .../write-skew-overdraft-protection.txt | 25 ---- src/dbtest/t/sqlserver/write-skew.txt | 26 ----- src/dbtest/t/tidb/aborted-reads.txt | 18 --- .../t/tidb/causality-violation-anomaly.txt | 51 -------- src/dbtest/t/tidb/cross-phantom.txt | 106 ----------------- src/dbtest/t/tidb/cross-phenomenon.txt | 108 ----------------- src/dbtest/t/tidb/dirty-read.txt | 17 --- src/dbtest/t/tidb/dirty-write1.txt | 19 --- src/dbtest/t/tidb/dirty-write2.txt | 19 --- src/dbtest/t/tidb/double-write-skew1-1.txt | 24 ---- src/dbtest/t/tidb/double-write-skew1-2.txt | 24 ---- src/dbtest/t/tidb/double-write-skew1-3.txt | 24 ---- src/dbtest/t/tidb/double-write-skew2.txt | 26 ----- src/dbtest/t/tidb/fractured-reads.txt | 31 ----- src/dbtest/t/tidb/full-write-skew1.txt | 22 ---- src/dbtest/t/tidb/full-write-skew2.txt | 22 ---- .../t/tidb/half-predicate-read-skew.txt | 25 ---- .../t/tidb/half-predicate-write-skew.txt | 26 ----- src/dbtest/t/tidb/intermediate-reads.txt | 23 ---- src/dbtest/t/tidb/intermediate-write1.txt | 20 ---- src/dbtest/t/tidb/intermediate-write2.txt | 20 ---- src/dbtest/t/tidb/long-fork-anomaly.txt | 108 ----------------- src/dbtest/t/tidb/lost-self-update1.txt | 22 ---- src/dbtest/t/tidb/lost-self-update2.txt | 22 ---- src/dbtest/t/tidb/lost-update1.txt | 22 ---- src/dbtest/t/tidb/lost-update2.txt | 22 ---- src/dbtest/t/tidb/middle-read.txt | 22 ---- src/dbtest/t/tidb/non-repeatable-read1.txt | 24 ---- src/dbtest/t/tidb/non-repeatable-read2.txt | 24 ---- src/dbtest/t/tidb/phantom-read.txt | 23 ---- src/dbtest/t/tidb/predicate-sawtooth.txt | 50 -------- src/dbtest/t/tidb/primary-colors.txt | 30 ----- src/dbtest/t/tidb/primary-colors2.txt | 44 ------- src/dbtest/t/tidb/rat-special.txt | 53 --------- src/dbtest/t/tidb/rat-special2.txt | 53 --------- ...nly-transaction-anomaly-deposit-report.txt | 40 ------- .../t/tidb/read-only-transaction-anomaly.txt | 65 ----------- src/dbtest/t/tidb/read-skew1.txt | 26 ----- src/dbtest/t/tidb/read-skew2.txt | 26 ----- src/dbtest/t/tidb/read-skew3.txt | 26 ----- src/dbtest/t/tidb/read-write-skew1-1.txt | 24 ---- src/dbtest/t/tidb/read-write-skew1-2.txt | 24 ---- src/dbtest/t/tidb/read-write-skew2.txt | 24 ---- src/dbtest/t/tidb/sawtooth.txt | 53 --------- .../t/tidb/serial-concurrent-phenomenon.txt | 32 ----- src/dbtest/t/tidb/step-read-skew.txt | 45 -------- src/dbtest/t/tidb/step-wat.txt | 75 ------------ .../t/tidb/total-diff-predicate-read-skew.txt | 24 ---- .../tidb/total-diff-predicate-write-skew.txt | 24 ---- .../t/tidb/total-same-predicate-read-skew.txt | 25 ---- .../tidb/total-same-predicate-read-skew2.txt | 28 ----- .../tidb/total-same-predicate-write-skew.txt | 24 ---- src/dbtest/t/tidb/unnamed-anomaly.txt | 68 ----------- src/dbtest/t/tidb/write-read-skew1.txt | 29 ----- src/dbtest/t/tidb/write-read-skew2.txt | 27 ----- src/dbtest/t/tidb/write-skew-black-white.txt | 25 ---- .../t/tidb/write-skew-intersecting-data.txt | 29 ----- .../tidb/write-skew-overdraft-protection.txt | 25 ---- src/dbtest/t/tidb/write-skew.txt | 26 ----- 472 files changed, 15755 deletions(-) delete mode 100644 src/dbtest/t/crdb/aborted-reads.txt delete mode 100644 src/dbtest/t/crdb/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/crdb/cross-phantom.txt delete mode 100644 src/dbtest/t/crdb/cross-phenomenon.txt delete mode 100644 src/dbtest/t/crdb/dirty-read.txt delete mode 100644 src/dbtest/t/crdb/dirty-write1.txt delete mode 100644 src/dbtest/t/crdb/dirty-write2.txt delete mode 100644 src/dbtest/t/crdb/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/crdb/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/crdb/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/crdb/double-write-skew2.txt delete mode 100644 src/dbtest/t/crdb/fractured-reads.txt delete mode 100644 src/dbtest/t/crdb/full-write-skew1.txt delete mode 100644 src/dbtest/t/crdb/full-write-skew2.txt delete mode 100644 src/dbtest/t/crdb/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/crdb/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/crdb/intermediate-reads.txt delete mode 100644 src/dbtest/t/crdb/intermediate-write1.txt delete mode 100644 src/dbtest/t/crdb/intermediate-write2.txt delete mode 100644 src/dbtest/t/crdb/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/crdb/lost-self-update1.txt delete mode 100644 src/dbtest/t/crdb/lost-self-update2.txt delete mode 100644 src/dbtest/t/crdb/lost-update1.txt delete mode 100644 src/dbtest/t/crdb/lost-update2.txt delete mode 100644 src/dbtest/t/crdb/middle-read.txt delete mode 100644 src/dbtest/t/crdb/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/crdb/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/crdb/phantom-read.txt delete mode 100644 src/dbtest/t/crdb/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/crdb/primary-colors.txt delete mode 100644 src/dbtest/t/crdb/primary-colors2.txt delete mode 100644 src/dbtest/t/crdb/rat-special.txt delete mode 100644 src/dbtest/t/crdb/rat-special2.txt delete mode 100644 src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/crdb/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/crdb/read-skew1.txt delete mode 100644 src/dbtest/t/crdb/read-skew2.txt delete mode 100644 src/dbtest/t/crdb/read-skew3.txt delete mode 100644 src/dbtest/t/crdb/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/crdb/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/crdb/read-write-skew2.txt delete mode 100644 src/dbtest/t/crdb/sawtooth.txt delete mode 100644 src/dbtest/t/crdb/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/crdb/step-read-skew.txt delete mode 100644 src/dbtest/t/crdb/step-wat.txt delete mode 100644 src/dbtest/t/crdb/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/crdb/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/crdb/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/crdb/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/crdb/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/crdb/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/crdb/write-read-skew1.txt delete mode 100644 src/dbtest/t/crdb/write-read-skew2.txt delete mode 100644 src/dbtest/t/crdb/write-skew-black-white.txt delete mode 100644 src/dbtest/t/crdb/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/crdb/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/crdb/write-skew.txt delete mode 100644 src/dbtest/t/mongodb/aborted-reads.txt delete mode 100644 src/dbtest/t/mongodb/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/mongodb/cross-phantom.txt delete mode 100644 src/dbtest/t/mongodb/cross-phenomenon.txt delete mode 100644 src/dbtest/t/mongodb/dirty-read.txt delete mode 100644 src/dbtest/t/mongodb/dirty-write1.txt delete mode 100644 src/dbtest/t/mongodb/dirty-write2.txt delete mode 100644 src/dbtest/t/mongodb/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/mongodb/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/mongodb/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/mongodb/double-write-skew2.txt delete mode 100644 src/dbtest/t/mongodb/fractured-reads.txt delete mode 100644 src/dbtest/t/mongodb/full-write-skew1.txt delete mode 100644 src/dbtest/t/mongodb/full-write-skew2.txt delete mode 100644 src/dbtest/t/mongodb/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mongodb/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mongodb/intermediate-reads.txt delete mode 100644 src/dbtest/t/mongodb/intermediate-write1.txt delete mode 100644 src/dbtest/t/mongodb/intermediate-write2.txt delete mode 100644 src/dbtest/t/mongodb/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/mongodb/lost-self-update1.txt delete mode 100644 src/dbtest/t/mongodb/lost-self-update2.txt delete mode 100644 src/dbtest/t/mongodb/lost-update1.txt delete mode 100644 src/dbtest/t/mongodb/lost-update2.txt delete mode 100644 src/dbtest/t/mongodb/middle-read.txt delete mode 100644 src/dbtest/t/mongodb/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/mongodb/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/mongodb/phantom-read.txt delete mode 100644 src/dbtest/t/mongodb/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/mongodb/primary-colors.txt delete mode 100644 src/dbtest/t/mongodb/primary-colors2.txt delete mode 100644 src/dbtest/t/mongodb/rat-special.txt delete mode 100644 src/dbtest/t/mongodb/rat-special2.txt delete mode 100644 src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/mongodb/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/mongodb/read-skew1.txt delete mode 100644 src/dbtest/t/mongodb/read-skew2.txt delete mode 100644 src/dbtest/t/mongodb/read-skew3.txt delete mode 100644 src/dbtest/t/mongodb/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/mongodb/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/mongodb/read-write-skew2.txt delete mode 100644 src/dbtest/t/mongodb/sawtooth.txt delete mode 100644 src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/mongodb/step-read-skew.txt delete mode 100644 src/dbtest/t/mongodb/step-wat.txt delete mode 100644 src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mongodb/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/mongodb/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mongodb/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/mongodb/write-read-skew1.txt delete mode 100644 src/dbtest/t/mongodb/write-read-skew2.txt delete mode 100644 src/dbtest/t/mongodb/write-skew-black-white.txt delete mode 100644 src/dbtest/t/mongodb/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/mongodb/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/mongodb/write-skew.txt delete mode 100644 src/dbtest/t/mysql/aborted-reads.txt delete mode 100644 src/dbtest/t/mysql/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/mysql/cross-phantom.txt delete mode 100644 src/dbtest/t/mysql/cross-phenomenon.txt delete mode 100644 src/dbtest/t/mysql/dirty-read.txt delete mode 100644 src/dbtest/t/mysql/dirty-write1.txt delete mode 100644 src/dbtest/t/mysql/dirty-write2.txt delete mode 100644 src/dbtest/t/mysql/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/mysql/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/mysql/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/mysql/double-write-skew2.txt delete mode 100644 src/dbtest/t/mysql/fractured-reads.txt delete mode 100644 src/dbtest/t/mysql/full-write-skew1.txt delete mode 100644 src/dbtest/t/mysql/full-write-skew2.txt delete mode 100644 src/dbtest/t/mysql/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mysql/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mysql/intermediate-reads.txt delete mode 100644 src/dbtest/t/mysql/intermediate-write1.txt delete mode 100644 src/dbtest/t/mysql/intermediate-write2.txt delete mode 100644 src/dbtest/t/mysql/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/mysql/lost-self-update1.txt delete mode 100644 src/dbtest/t/mysql/lost-self-update2.txt delete mode 100644 src/dbtest/t/mysql/lost-update1.txt delete mode 100644 src/dbtest/t/mysql/lost-update2.txt delete mode 100644 src/dbtest/t/mysql/middle-read.txt delete mode 100644 src/dbtest/t/mysql/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/mysql/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/mysql/phantom-read.txt delete mode 100644 src/dbtest/t/mysql/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/mysql/primary-colors.txt delete mode 100644 src/dbtest/t/mysql/primary-colors2.txt delete mode 100644 src/dbtest/t/mysql/rat-special.txt delete mode 100644 src/dbtest/t/mysql/rat-special2.txt delete mode 100644 src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/mysql/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/mysql/read-skew1.txt delete mode 100644 src/dbtest/t/mysql/read-skew2.txt delete mode 100644 src/dbtest/t/mysql/read-skew3.txt delete mode 100644 src/dbtest/t/mysql/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/mysql/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/mysql/read-write-skew2.txt delete mode 100644 src/dbtest/t/mysql/sawtooth.txt delete mode 100644 src/dbtest/t/mysql/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/mysql/step-read-skew.txt delete mode 100644 src/dbtest/t/mysql/step-wat.txt delete mode 100644 src/dbtest/t/mysql/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mysql/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mysql/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/mysql/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/mysql/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/mysql/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/mysql/write-read-skew1.txt delete mode 100644 src/dbtest/t/mysql/write-read-skew2.txt delete mode 100644 src/dbtest/t/mysql/write-skew-black-white.txt delete mode 100644 src/dbtest/t/mysql/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/mysql/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/mysql/write-skew.txt delete mode 100644 src/dbtest/t/ob/aborted-reads.txt delete mode 100644 src/dbtest/t/ob/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/ob/cross-phantom.txt delete mode 100644 src/dbtest/t/ob/cross-phenomenon.txt delete mode 100644 src/dbtest/t/ob/dirty-read.txt delete mode 100644 src/dbtest/t/ob/dirty-write1.txt delete mode 100644 src/dbtest/t/ob/dirty-write2.txt delete mode 100644 src/dbtest/t/ob/double-write-skew.txt delete mode 100644 src/dbtest/t/ob/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/ob/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/ob/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/ob/double-write-skew2.txt delete mode 100644 src/dbtest/t/ob/fractured-reads.txt delete mode 100644 src/dbtest/t/ob/full-write-skew1.txt delete mode 100644 src/dbtest/t/ob/full-write-skew2.txt delete mode 100644 src/dbtest/t/ob/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/ob/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/ob/intermediate-reads.txt delete mode 100644 src/dbtest/t/ob/intermediate-write1.txt delete mode 100644 src/dbtest/t/ob/intermediate-write2.txt delete mode 100644 src/dbtest/t/ob/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/ob/lost-self-update1.txt delete mode 100644 src/dbtest/t/ob/lost-self-update2.txt delete mode 100644 src/dbtest/t/ob/lost-update.txt delete mode 100644 src/dbtest/t/ob/lost-update1.txt delete mode 100644 src/dbtest/t/ob/lost-update2.txt delete mode 100644 src/dbtest/t/ob/middle-read.txt delete mode 100644 src/dbtest/t/ob/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/ob/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/ob/phantom-read.txt delete mode 100644 src/dbtest/t/ob/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/ob/primary-colors.txt delete mode 100644 src/dbtest/t/ob/primary-colors2.txt delete mode 100644 src/dbtest/t/ob/rat-special.txt delete mode 100644 src/dbtest/t/ob/rat-special2.txt delete mode 100644 src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/ob/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/ob/read-skew1.txt delete mode 100644 src/dbtest/t/ob/read-skew2.txt delete mode 100644 src/dbtest/t/ob/read-skew3.txt delete mode 100644 src/dbtest/t/ob/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/ob/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/ob/read-write-skew2.txt delete mode 100644 src/dbtest/t/ob/sawtooth.txt delete mode 100644 src/dbtest/t/ob/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/ob/step-read-skew.txt delete mode 100644 src/dbtest/t/ob/step-wat.txt delete mode 100644 src/dbtest/t/ob/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/ob/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/ob/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/ob/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/ob/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/ob/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/ob/unrepeatable-read.txt delete mode 100644 src/dbtest/t/ob/write-read-skew1.txt delete mode 100644 src/dbtest/t/ob/write-read-skew2.txt delete mode 100644 src/dbtest/t/ob/write-skew-black-white.txt delete mode 100644 src/dbtest/t/ob/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/ob/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/ob/write-skew.txt delete mode 100644 src/dbtest/t/oracle/aborted-reads.txt delete mode 100644 src/dbtest/t/oracle/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/oracle/cross-phantom.txt delete mode 100644 src/dbtest/t/oracle/cross-phenomenon.txt delete mode 100644 src/dbtest/t/oracle/dirty-read.txt delete mode 100644 src/dbtest/t/oracle/dirty-write1.txt delete mode 100644 src/dbtest/t/oracle/dirty-write2.txt delete mode 100644 src/dbtest/t/oracle/double-write-skew.txt delete mode 100644 src/dbtest/t/oracle/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/oracle/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/oracle/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/oracle/double-write-skew2.txt delete mode 100644 src/dbtest/t/oracle/fractured-reads.txt delete mode 100644 src/dbtest/t/oracle/full-write-skew1.txt delete mode 100644 src/dbtest/t/oracle/full-write-skew2.txt delete mode 100644 src/dbtest/t/oracle/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/oracle/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/oracle/intermediate-reads.txt delete mode 100644 src/dbtest/t/oracle/intermediate-write1.txt delete mode 100644 src/dbtest/t/oracle/intermediate-write2.txt delete mode 100644 src/dbtest/t/oracle/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/oracle/lost-self-update1.txt delete mode 100644 src/dbtest/t/oracle/lost-self-update2.txt delete mode 100644 src/dbtest/t/oracle/lost-update.txt delete mode 100644 src/dbtest/t/oracle/lost-update1.txt delete mode 100644 src/dbtest/t/oracle/lost-update2.txt delete mode 100644 src/dbtest/t/oracle/middle-read.txt delete mode 100644 src/dbtest/t/oracle/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/oracle/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/oracle/phantom-read.txt delete mode 100644 src/dbtest/t/oracle/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/oracle/primary-colors.txt delete mode 100644 src/dbtest/t/oracle/primary-colors2.txt delete mode 100644 src/dbtest/t/oracle/rat-special.txt delete mode 100644 src/dbtest/t/oracle/rat-special2.txt delete mode 100644 src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/oracle/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/oracle/read-skew1.txt delete mode 100644 src/dbtest/t/oracle/read-skew2.txt delete mode 100644 src/dbtest/t/oracle/read-skew3.txt delete mode 100644 src/dbtest/t/oracle/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/oracle/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/oracle/read-write-skew2.txt delete mode 100644 src/dbtest/t/oracle/sawtooth.txt delete mode 100644 src/dbtest/t/oracle/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/oracle/step-read-skew.txt delete mode 100644 src/dbtest/t/oracle/step-wat.txt delete mode 100644 src/dbtest/t/oracle/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/oracle/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/oracle/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/oracle/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/oracle/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/oracle/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/oracle/unrepeatable-read.txt delete mode 100644 src/dbtest/t/oracle/write-read-skew1.txt delete mode 100644 src/dbtest/t/oracle/write-read-skew2.txt delete mode 100644 src/dbtest/t/oracle/write-skew-black-white.txt delete mode 100644 src/dbtest/t/oracle/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/oracle/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/oracle/write-skew.txt delete mode 100644 src/dbtest/t/pg/aborted-reads.txt delete mode 100644 src/dbtest/t/pg/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/pg/cross-phantom.txt delete mode 100644 src/dbtest/t/pg/cross-phenomenon.txt delete mode 100644 src/dbtest/t/pg/dirty-read.txt delete mode 100644 src/dbtest/t/pg/dirty-write.txt delete mode 100644 src/dbtest/t/pg/dirty-write1.txt delete mode 100644 src/dbtest/t/pg/dirty-write2.txt delete mode 100644 src/dbtest/t/pg/double-write-skew.txt delete mode 100644 src/dbtest/t/pg/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/pg/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/pg/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/pg/double-write-skew2.txt delete mode 100644 src/dbtest/t/pg/fractured-reads.txt delete mode 100644 src/dbtest/t/pg/full-write-skew1.txt delete mode 100644 src/dbtest/t/pg/full-write-skew2.txt delete mode 100644 src/dbtest/t/pg/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/pg/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/pg/intermediate-reads.txt delete mode 100644 src/dbtest/t/pg/intermediate-write1.txt delete mode 100644 src/dbtest/t/pg/intermediate-write2.txt delete mode 100644 src/dbtest/t/pg/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/pg/lost-self-update1.txt delete mode 100644 src/dbtest/t/pg/lost-self-update2.txt delete mode 100644 src/dbtest/t/pg/lost-update.txt delete mode 100644 src/dbtest/t/pg/lost-update1.txt delete mode 100644 src/dbtest/t/pg/lost-update2.txt delete mode 100644 src/dbtest/t/pg/middle-read.txt delete mode 100644 src/dbtest/t/pg/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/pg/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/pg/phantom-read.txt delete mode 100644 src/dbtest/t/pg/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/pg/primary-colors.txt delete mode 100644 src/dbtest/t/pg/primary-colors2.txt delete mode 100644 src/dbtest/t/pg/rat-special.txt delete mode 100644 src/dbtest/t/pg/rat-special2.txt delete mode 100644 src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/pg/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/pg/read-skew.txt delete mode 100644 src/dbtest/t/pg/read-skew1.txt delete mode 100644 src/dbtest/t/pg/read-skew2.txt delete mode 100644 src/dbtest/t/pg/read-skew3.txt delete mode 100644 src/dbtest/t/pg/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/pg/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/pg/read-write-skew2.txt delete mode 100644 src/dbtest/t/pg/sawtooth.txt delete mode 100644 src/dbtest/t/pg/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/pg/step-read-skew.txt delete mode 100644 src/dbtest/t/pg/step-wat.txt delete mode 100644 src/dbtest/t/pg/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/pg/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/pg/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/pg/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/pg/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/pg/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/pg/unrepeatable-read.txt delete mode 100644 src/dbtest/t/pg/write-read-skew1.txt delete mode 100644 src/dbtest/t/pg/write-read-skew2.txt delete mode 100644 src/dbtest/t/pg/write-skew-black-white.txt delete mode 100644 src/dbtest/t/pg/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/pg/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/pg/write-skew.txt delete mode 100644 src/dbtest/t/sqlserver/aborted-reads.txt delete mode 100644 src/dbtest/t/sqlserver/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/sqlserver/cross-phantom.txt delete mode 100644 src/dbtest/t/sqlserver/cross-phenomenon.txt delete mode 100644 src/dbtest/t/sqlserver/dirty-read.txt delete mode 100644 src/dbtest/t/sqlserver/dirty-write.txt delete mode 100644 src/dbtest/t/sqlserver/dirty-write1.txt delete mode 100644 src/dbtest/t/sqlserver/dirty-write2.txt delete mode 100644 src/dbtest/t/sqlserver/double-write-skew.txt delete mode 100644 src/dbtest/t/sqlserver/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/sqlserver/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/sqlserver/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/sqlserver/double-write-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/fractured-reads.txt delete mode 100644 src/dbtest/t/sqlserver/full-write-skew1.txt delete mode 100644 src/dbtest/t/sqlserver/full-write-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/sqlserver/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/sqlserver/intermediate-reads.txt delete mode 100644 src/dbtest/t/sqlserver/intermediate-write1.txt delete mode 100644 src/dbtest/t/sqlserver/intermediate-write2.txt delete mode 100644 src/dbtest/t/sqlserver/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/sqlserver/lost-self-update1.txt delete mode 100644 src/dbtest/t/sqlserver/lost-self-update2.txt delete mode 100644 src/dbtest/t/sqlserver/lost-update.txt delete mode 100644 src/dbtest/t/sqlserver/lost-update1.txt delete mode 100644 src/dbtest/t/sqlserver/lost-update2.txt delete mode 100644 src/dbtest/t/sqlserver/middle-read.txt delete mode 100644 src/dbtest/t/sqlserver/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/sqlserver/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/sqlserver/phantom-read.txt delete mode 100644 src/dbtest/t/sqlserver/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/sqlserver/primary-colors.txt delete mode 100644 src/dbtest/t/sqlserver/primary-colors2.txt delete mode 100644 src/dbtest/t/sqlserver/rat-special.txt delete mode 100644 src/dbtest/t/sqlserver/rat-special2.txt delete mode 100644 src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/sqlserver/read-skew.txt delete mode 100644 src/dbtest/t/sqlserver/read-skew1.txt delete mode 100644 src/dbtest/t/sqlserver/read-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/read-skew3.txt delete mode 100644 src/dbtest/t/sqlserver/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/sqlserver/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/sqlserver/read-write-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/sawtooth.txt delete mode 100644 src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/sqlserver/step-read-skew.txt delete mode 100644 src/dbtest/t/sqlserver/step-wat.txt delete mode 100644 src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/sqlserver/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/sqlserver/unrepeatable-read.txt delete mode 100644 src/dbtest/t/sqlserver/write-read-skew1.txt delete mode 100644 src/dbtest/t/sqlserver/write-read-skew2.txt delete mode 100644 src/dbtest/t/sqlserver/write-skew-black-white.txt delete mode 100644 src/dbtest/t/sqlserver/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/sqlserver/write-skew.txt delete mode 100644 src/dbtest/t/tidb/aborted-reads.txt delete mode 100644 src/dbtest/t/tidb/causality-violation-anomaly.txt delete mode 100644 src/dbtest/t/tidb/cross-phantom.txt delete mode 100644 src/dbtest/t/tidb/cross-phenomenon.txt delete mode 100644 src/dbtest/t/tidb/dirty-read.txt delete mode 100644 src/dbtest/t/tidb/dirty-write1.txt delete mode 100644 src/dbtest/t/tidb/dirty-write2.txt delete mode 100644 src/dbtest/t/tidb/double-write-skew1-1.txt delete mode 100644 src/dbtest/t/tidb/double-write-skew1-2.txt delete mode 100644 src/dbtest/t/tidb/double-write-skew1-3.txt delete mode 100644 src/dbtest/t/tidb/double-write-skew2.txt delete mode 100644 src/dbtest/t/tidb/fractured-reads.txt delete mode 100644 src/dbtest/t/tidb/full-write-skew1.txt delete mode 100644 src/dbtest/t/tidb/full-write-skew2.txt delete mode 100644 src/dbtest/t/tidb/half-predicate-read-skew.txt delete mode 100644 src/dbtest/t/tidb/half-predicate-write-skew.txt delete mode 100644 src/dbtest/t/tidb/intermediate-reads.txt delete mode 100644 src/dbtest/t/tidb/intermediate-write1.txt delete mode 100644 src/dbtest/t/tidb/intermediate-write2.txt delete mode 100644 src/dbtest/t/tidb/long-fork-anomaly.txt delete mode 100644 src/dbtest/t/tidb/lost-self-update1.txt delete mode 100644 src/dbtest/t/tidb/lost-self-update2.txt delete mode 100644 src/dbtest/t/tidb/lost-update1.txt delete mode 100644 src/dbtest/t/tidb/lost-update2.txt delete mode 100644 src/dbtest/t/tidb/middle-read.txt delete mode 100644 src/dbtest/t/tidb/non-repeatable-read1.txt delete mode 100644 src/dbtest/t/tidb/non-repeatable-read2.txt delete mode 100644 src/dbtest/t/tidb/phantom-read.txt delete mode 100644 src/dbtest/t/tidb/predicate-sawtooth.txt delete mode 100644 src/dbtest/t/tidb/primary-colors.txt delete mode 100644 src/dbtest/t/tidb/primary-colors2.txt delete mode 100644 src/dbtest/t/tidb/rat-special.txt delete mode 100644 src/dbtest/t/tidb/rat-special2.txt delete mode 100644 src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt delete mode 100644 src/dbtest/t/tidb/read-only-transaction-anomaly.txt delete mode 100644 src/dbtest/t/tidb/read-skew1.txt delete mode 100644 src/dbtest/t/tidb/read-skew2.txt delete mode 100644 src/dbtest/t/tidb/read-skew3.txt delete mode 100644 src/dbtest/t/tidb/read-write-skew1-1.txt delete mode 100644 src/dbtest/t/tidb/read-write-skew1-2.txt delete mode 100644 src/dbtest/t/tidb/read-write-skew2.txt delete mode 100644 src/dbtest/t/tidb/sawtooth.txt delete mode 100644 src/dbtest/t/tidb/serial-concurrent-phenomenon.txt delete mode 100644 src/dbtest/t/tidb/step-read-skew.txt delete mode 100644 src/dbtest/t/tidb/step-wat.txt delete mode 100644 src/dbtest/t/tidb/total-diff-predicate-read-skew.txt delete mode 100644 src/dbtest/t/tidb/total-diff-predicate-write-skew.txt delete mode 100644 src/dbtest/t/tidb/total-same-predicate-read-skew.txt delete mode 100644 src/dbtest/t/tidb/total-same-predicate-read-skew2.txt delete mode 100644 src/dbtest/t/tidb/total-same-predicate-write-skew.txt delete mode 100644 src/dbtest/t/tidb/unnamed-anomaly.txt delete mode 100644 src/dbtest/t/tidb/write-read-skew1.txt delete mode 100644 src/dbtest/t/tidb/write-read-skew2.txt delete mode 100644 src/dbtest/t/tidb/write-skew-black-white.txt delete mode 100644 src/dbtest/t/tidb/write-skew-intersecting-data.txt delete mode 100644 src/dbtest/t/tidb/write-skew-overdraft-protection.txt delete mode 100644 src/dbtest/t/tidb/write-skew.txt diff --git a/src/dbtest/t/crdb/aborted-reads.txt b/src/dbtest/t/crdb/aborted-reads.txt deleted file mode 100644 index 14d384ee..00000000 --- a/src/dbtest/t/crdb/aborted-reads.txt +++ /dev/null @@ -1,16 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/crdb/causality-violation-anomaly.txt b/src/dbtest/t/crdb/causality-violation-anomaly.txt deleted file mode 100644 index ae51bbf3..00000000 --- a/src/dbtest/t/crdb/causality-violation-anomaly.txt +++ /dev/null @@ -1,49 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/cross-phantom.txt b/src/dbtest/t/crdb/cross-phantom.txt deleted file mode 100644 index 87ad5a06..00000000 --- a/src/dbtest/t/crdb/cross-phantom.txt +++ /dev/null @@ -1,104 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/crdb/cross-phenomenon.txt b/src/dbtest/t/crdb/cross-phenomenon.txt deleted file mode 100644 index 8b0cc3e2..00000000 --- a/src/dbtest/t/crdb/cross-phenomenon.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/dirty-read.txt b/src/dbtest/t/crdb/dirty-read.txt deleted file mode 100644 index 5c6a27e7..00000000 --- a/src/dbtest/t/crdb/dirty-read.txt +++ /dev/null @@ -1,15 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-2-BEGIN; -4-1-INSERT INTO t1 VALUES (0, 0); -5-2-SELECT * from t1 WHERE k = 0; -6-1-ROLLBACK; -7-2-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -5-null -8-null -} diff --git a/src/dbtest/t/crdb/dirty-write1.txt b/src/dbtest/t/crdb/dirty-write1.txt deleted file mode 100644 index 7d627b4a..00000000 --- a/src/dbtest/t/crdb/dirty-write1.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/crdb/dirty-write2.txt b/src/dbtest/t/crdb/dirty-write2.txt deleted file mode 100644 index fc39d037..00000000 --- a/src/dbtest/t/crdb/dirty-write2.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t1; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/crdb/double-write-skew1-1.txt b/src/dbtest/t/crdb/double-write-skew1-1.txt deleted file mode 100644 index 33ed770e..00000000 --- a/src/dbtest/t/crdb/double-write-skew1-1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/crdb/double-write-skew1-2.txt b/src/dbtest/t/crdb/double-write-skew1-2.txt deleted file mode 100644 index 56e9c497..00000000 --- a/src/dbtest/t/crdb/double-write-skew1-2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/double-write-skew1-3.txt b/src/dbtest/t/crdb/double-write-skew1-3.txt deleted file mode 100644 index 008a0512..00000000 --- a/src/dbtest/t/crdb/double-write-skew1-3.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/double-write-skew2.txt b/src/dbtest/t/crdb/double-write-skew2.txt deleted file mode 100644 index c9050aef..00000000 --- a/src/dbtest/t/crdb/double-write-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/crdb/fractured-reads.txt b/src/dbtest/t/crdb/fractured-reads.txt deleted file mode 100644 index 2f684f22..00000000 --- a/src/dbtest/t/crdb/fractured-reads.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/crdb/full-write-skew1.txt b/src/dbtest/t/crdb/full-write-skew1.txt deleted file mode 100644 index 738b9fd6..00000000 --- a/src/dbtest/t/crdb/full-write-skew1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-UPDATE t1 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/crdb/full-write-skew2.txt b/src/dbtest/t/crdb/full-write-skew2.txt deleted file mode 100644 index 179e68cc..00000000 --- a/src/dbtest/t/crdb/full-write-skew2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/crdb/half-predicate-read-skew.txt b/src/dbtest/t/crdb/half-predicate-read-skew.txt deleted file mode 100644 index f847adc7..00000000 --- a/src/dbtest/t/crdb/half-predicate-read-skew.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; - -serializable { -2-null -7-1,1 -9-0,0 1,2 - -2-0,0 -7-1,2 -9-0,0 1,2 -} diff --git a/src/dbtest/t/crdb/half-predicate-write-skew.txt b/src/dbtest/t/crdb/half-predicate-write-skew.txt deleted file mode 100644 index 6d50402e..00000000 --- a/src/dbtest/t/crdb/half-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/crdb/intermediate-reads.txt b/src/dbtest/t/crdb/intermediate-reads.txt deleted file mode 100644 index 10fa643e..00000000 --- a/src/dbtest/t/crdb/intermediate-reads.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/crdb/intermediate-write1.txt b/src/dbtest/t/crdb/intermediate-write1.txt deleted file mode 100644 index 66aa54af..00000000 --- a/src/dbtest/t/crdb/intermediate-write1.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/crdb/intermediate-write2.txt b/src/dbtest/t/crdb/intermediate-write2.txt deleted file mode 100644 index 03c74fae..00000000 --- a/src/dbtest/t/crdb/intermediate-write2.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/crdb/long-fork-anomaly.txt b/src/dbtest/t/crdb/long-fork-anomaly.txt deleted file mode 100644 index 46722b39..00000000 --- a/src/dbtest/t/crdb/long-fork-anomaly.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/lost-self-update1.txt b/src/dbtest/t/crdb/lost-self-update1.txt deleted file mode 100644 index 73e98c69..00000000 --- a/src/dbtest/t/crdb/lost-self-update1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/crdb/lost-self-update2.txt b/src/dbtest/t/crdb/lost-self-update2.txt deleted file mode 100644 index e3e4fb26..00000000 --- a/src/dbtest/t/crdb/lost-self-update2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/crdb/lost-update1.txt b/src/dbtest/t/crdb/lost-update1.txt deleted file mode 100644 index 11ee4f51..00000000 --- a/src/dbtest/t/crdb/lost-update1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/crdb/lost-update2.txt b/src/dbtest/t/crdb/lost-update2.txt deleted file mode 100644 index ce0a7966..00000000 --- a/src/dbtest/t/crdb/lost-update2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/crdb/middle-read.txt b/src/dbtest/t/crdb/middle-read.txt deleted file mode 100644 index c97c1252..00000000 --- a/src/dbtest/t/crdb/middle-read.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/crdb/non-repeatable-read1.txt b/src/dbtest/t/crdb/non-repeatable-read1.txt deleted file mode 100644 index 788e51f2..00000000 --- a/src/dbtest/t/crdb/non-repeatable-read1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/crdb/non-repeatable-read2.txt b/src/dbtest/t/crdb/non-repeatable-read2.txt deleted file mode 100644 index 2c354f70..00000000 --- a/src/dbtest/t/crdb/non-repeatable-read2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/crdb/phantom-read.txt b/src/dbtest/t/crdb/phantom-read.txt deleted file mode 100644 index 58d6615b..00000000 --- a/src/dbtest/t/crdb/phantom-read.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/crdb/predicate-sawtooth.txt b/src/dbtest/t/crdb/predicate-sawtooth.txt deleted file mode 100644 index 3c855657..00000000 --- a/src/dbtest/t/crdb/predicate-sawtooth.txt +++ /dev/null @@ -1,48 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/crdb/primary-colors.txt b/src/dbtest/t/crdb/primary-colors.txt deleted file mode 100644 index 9581e8dc..00000000 --- a/src/dbtest/t/crdb/primary-colors.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key, color text not null); -0-1-insert into dots values(1, 'red'); -0-1-insert into dots values(2, 'yellow'); -0-1-insert into dots values(3, 'blue'); -0-1-insert into dots values(4, 'red'); -0-1-insert into dots values(5, 'yellow'); -0-1-insert into dots values(6, 'blue'); -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/crdb/primary-colors2.txt b/src/dbtest/t/crdb/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/crdb/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/crdb/rat-special.txt b/src/dbtest/t/crdb/rat-special.txt deleted file mode 100644 index 2e27bbce..00000000 --- a/src/dbtest/t/crdb/rat-special.txt +++ /dev/null @@ -1,52 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/crdb/rat-special2.txt b/src/dbtest/t/crdb/rat-special2.txt deleted file mode 100644 index 4093a609..00000000 --- a/src/dbtest/t/crdb/rat-special2.txt +++ /dev/null @@ -1,52 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index b715eb1f..00000000 --- a/src/dbtest/t/crdb/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,38 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/crdb/read-only-transaction-anomaly.txt b/src/dbtest/t/crdb/read-only-transaction-anomaly.txt deleted file mode 100644 index 8643f94d..00000000 --- a/src/dbtest/t/crdb/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,63 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/crdb/read-skew1.txt b/src/dbtest/t/crdb/read-skew1.txt deleted file mode 100644 index 59059f0c..00000000 --- a/src/dbtest/t/crdb/read-skew1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/read-skew2.txt b/src/dbtest/t/crdb/read-skew2.txt deleted file mode 100644 index d9dac6fb..00000000 --- a/src/dbtest/t/crdb/read-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-SELECT * from t1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/read-skew3.txt b/src/dbtest/t/crdb/read-skew3.txt deleted file mode 100644 index 05861b45..00000000 --- a/src/dbtest/t/crdb/read-skew3.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/read-write-skew1-1.txt b/src/dbtest/t/crdb/read-write-skew1-1.txt deleted file mode 100644 index 32296351..00000000 --- a/src/dbtest/t/crdb/read-write-skew1-1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=2 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/read-write-skew1-2.txt b/src/dbtest/t/crdb/read-write-skew1-2.txt deleted file mode 100644 index cd7b3152..00000000 --- a/src/dbtest/t/crdb/read-write-skew1-2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/crdb/read-write-skew2.txt b/src/dbtest/t/crdb/read-write-skew2.txt deleted file mode 100644 index 3dfdcc6a..00000000 --- a/src/dbtest/t/crdb/read-write-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/crdb/sawtooth.txt b/src/dbtest/t/crdb/sawtooth.txt deleted file mode 100644 index 7038e1d3..00000000 --- a/src/dbtest/t/crdb/sawtooth.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt b/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt deleted file mode 100644 index 1039622e..00000000 --- a/src/dbtest/t/crdb/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/crdb/step-read-skew.txt b/src/dbtest/t/crdb/step-read-skew.txt deleted file mode 100644 index 193fa9df..00000000 --- a/src/dbtest/t/crdb/step-read-skew.txt +++ /dev/null @@ -1,43 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/crdb/step-wat.txt b/src/dbtest/t/crdb/step-wat.txt deleted file mode 100644 index 0ce7a08b..00000000 --- a/src/dbtest/t/crdb/step-wat.txt +++ /dev/null @@ -1,73 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-3-BEGIN; -9-3-update t1 set v=2 where k=0; -10-2-commit; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=1; -15-1-select * from t1 where k=2; -16-1-commit; -17-4-select * from t1; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,1 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,0 -17-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,1 -17-0,1 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt b/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt deleted file mode 100644 index 351990ad..00000000 --- a/src/dbtest/t/crdb/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; - -serializable { -2-null -7-null -9-0,0 1,1 - -2-0,0 -7-1,1 -9-0,0 1,1 -} diff --git a/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt b/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt deleted file mode 100644 index 32554acd..00000000 --- a/src/dbtest/t/crdb/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/crdb/total-same-predicate-read-skew.txt b/src/dbtest/t/crdb/total-same-predicate-read-skew.txt deleted file mode 100644 index 6e8749be..00000000 --- a/src/dbtest/t/crdb/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-COMMIT; -7-1-select * from t1 where v=0; -8-1-COMMIT: -9-3-select * from t1; - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt b/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt deleted file mode 100644 index c998b622..00000000 --- a/src/dbtest/t/crdb/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-commit; -7-1-select * from t1; -8-1-commit; -9-3-select * from t1; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/crdb/total-same-predicate-write-skew.txt b/src/dbtest/t/crdb/total-same-predicate-write-skew.txt deleted file mode 100644 index f044d774..00000000 --- a/src/dbtest/t/crdb/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/crdb/unnamed-anomaly.txt b/src/dbtest/t/crdb/unnamed-anomaly.txt deleted file mode 100644 index 7e8ddd0f..00000000 --- a/src/dbtest/t/crdb/unnamed-anomaly.txt +++ /dev/null @@ -1,66 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/crdb/write-read-skew1.txt b/src/dbtest/t/crdb/write-read-skew1.txt deleted file mode 100644 index baf6df4e..00000000 --- a/src/dbtest/t/crdb/write-read-skew1.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/crdb/write-read-skew2.txt b/src/dbtest/t/crdb/write-read-skew2.txt deleted file mode 100644 index 88c6fcc7..00000000 --- a/src/dbtest/t/crdb/write-read-skew2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t1; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/crdb/write-skew-black-white.txt b/src/dbtest/t/crdb/write-skew-black-white.txt deleted file mode 100644 index b685a229..00000000 --- a/src/dbtest/t/crdb/write-skew-black-white.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS dots; -0-1-create table dots(id int not null primary key, color text not null); -0-1-insert into dots values(1, 'black'); -0-1-insert into dots values(2, 'white'); -0-1-insert into dots values(3, 'black'); -0-1-insert into dots values(4, 'white'); -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/crdb/write-skew-intersecting-data.txt b/src/dbtest/t/crdb/write-skew-intersecting-data.txt deleted file mode 100644 index e193c7f7..00000000 --- a/src/dbtest/t/crdb/write-skew-intersecting-data.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS mytab; -0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -4-2-BEGIN; -6-2-INSERT INTO mytab VALUES (1, 300); -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -3-1-INSERT INTO mytab VALUES (2, 30); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/crdb/write-skew-overdraft-protection.txt b/src/dbtest/t/crdb/write-skew-overdraft-protection.txt deleted file mode 100644 index d9d5aacd..00000000 --- a/src/dbtest/t/crdb/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:3 -0-1-drop table if exists account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/crdb/write-skew.txt b/src/dbtest/t/crdb/write-skew.txt deleted file mode 100644 index c1dce897..00000000 --- a/src/dbtest/t/crdb/write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/aborted-reads.txt b/src/dbtest/t/mongodb/aborted-reads.txt deleted file mode 100644 index 206a2789..00000000 --- a/src/dbtest/t/mongodb/aborted-reads.txt +++ /dev/null @@ -1,16 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-3-COMMIT; - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/mongodb/causality-violation-anomaly.txt b/src/dbtest/t/mongodb/causality-violation-anomaly.txt deleted file mode 100644 index f2a7357c..00000000 --- a/src/dbtest/t/mongodb/causality-violation-anomaly.txt +++ /dev/null @@ -1,46 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-commit -6-3-begin -7-3-t1.get(0) -8-3-t1.put(1, 1) -9-3-commit -10-1-t1.get(1) -11-1-commit -12-4-t1.get(*) - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/cross-phantom.txt b/src/dbtest/t/mongodb/cross-phantom.txt deleted file mode 100644 index ab8fabdd..00000000 --- a/src/dbtest/t/mongodb/cross-phantom.txt +++ /dev/null @@ -1,101 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.getpred(0) -5-3-begin -6-3-t1.put(0, 0) -7-3-commit -8-4-begin -9-4-t1.put(1, 0) -10-4-commit -11-2-t1.getpred(0) -12-1-t1.getpred(0) -13-2-commit -14-1-commit -15-3-t1.get(*) - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/mongodb/cross-phenomenon.txt b/src/dbtest/t/mongodb/cross-phenomenon.txt deleted file mode 100644 index b613522d..00000000 --- a/src/dbtest/t/mongodb/cross-phenomenon.txt +++ /dev/null @@ -1,103 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.get(1) -5-3-begin -6-3-t1.put(0, 1) -7-3-commit -8-4-begin -9-4-t1.put(1, 1) -10-4-commit -11-2-t1.get(0) -12-2-commit -13-1-t1.get(1) -14-1-commit -15-4-t1.get(*) - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/dirty-read.txt b/src/dbtest/t/mongodb/dirty-read.txt deleted file mode 100644 index e4440dcc..00000000 --- a/src/dbtest/t/mongodb/dirty-read.txt +++ /dev/null @@ -1,12 +0,0 @@ -1-1-begin -2-2-begin -3-1-t1.put(0, 0) -4-2-t1.get(0) -5-1-rollback -6-2-commit -7-3-t1.get(*) - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/mongodb/dirty-write1.txt b/src/dbtest/t/mongodb/dirty-write1.txt deleted file mode 100644 index 28987d00..00000000 --- a/src/dbtest/t/mongodb/dirty-write1.txt +++ /dev/null @@ -1,14 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-commit -6-1-commit -7-3-t1.get(*) - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/mongodb/dirty-write2.txt b/src/dbtest/t/mongodb/dirty-write2.txt deleted file mode 100644 index 082e6089..00000000 --- a/src/dbtest/t/mongodb/dirty-write2.txt +++ /dev/null @@ -1,14 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-commit -6-1-rollback -7-3-t1.get(*) - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/mongodb/double-write-skew1-1.txt b/src/dbtest/t/mongodb/double-write-skew1-1.txt deleted file mode 100644 index a69c3dd9..00000000 --- a/src/dbtest/t/mongodb/double-write-skew1-1.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.get(0) -5-2-t1.put(1, 1) -6-1-t1.put(1, 2) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/mongodb/double-write-skew1-2.txt b/src/dbtest/t/mongodb/double-write-skew1-2.txt deleted file mode 100644 index d6dec4d1..00000000 --- a/src/dbtest/t/mongodb/double-write-skew1-2.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-t1.put(1, 1) -6-1-t1.get(1) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/double-write-skew1-3.txt b/src/dbtest/t/mongodb/double-write-skew1-3.txt deleted file mode 100644 index e3524f58..00000000 --- a/src/dbtest/t/mongodb/double-write-skew1-3.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.get(1) -8-1-commit -9-3-t1.get(*) - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/double-write-skew2.txt b/src/dbtest/t/mongodb/double-write-skew2.txt deleted file mode 100644 index 0da5ba39..00000000 --- a/src/dbtest/t/mongodb/double-write-skew2.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.get(0) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.put(1, 2) -8-1-commit -9-3-t1.get(*) - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/mongodb/fractured-reads.txt b/src/dbtest/t/mongodb/fractured-reads.txt deleted file mode 100644 index 5cd7f8c3..00000000 --- a/src/dbtest/t/mongodb/fractured-reads.txt +++ /dev/null @@ -1,26 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.get(0) -8-1-t1.get(1) -9-1-commit -10-3-t1.get(*) - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/mongodb/full-write-skew1.txt b/src/dbtest/t/mongodb/full-write-skew1.txt deleted file mode 100644 index 2ed32c2f..00000000 --- a/src/dbtest/t/mongodb/full-write-skew1.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-t1.put(1, 1) -6-1-t1.put(1, 2) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/mongodb/full-write-skew2.txt b/src/dbtest/t/mongodb/full-write-skew2.txt deleted file mode 100644 index 9c4d3780..00000000 --- a/src/dbtest/t/mongodb/full-write-skew2.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.put(1, 2) -8-1-commit -9-3-t1.get(*) - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/mongodb/half-predicate-read-skew.txt b/src/dbtest/t/mongodb/half-predicate-read-skew.txt deleted file mode 100644 index 656eac8e..00000000 --- a/src/dbtest/t/mongodb/half-predicate-read-skew.txt +++ /dev/null @@ -1,20 +0,0 @@ -0-1-t1.put(1, 1) -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.put(1, 2) -5-2-t1.put(0, 0) -6-2-commit -7-1-t1.get(1) -8-1-commit -9-3-t1.get(*) - -serializable { -2-null -7-1,1 -9-1,2 0,0 - -2-0,0 -7-1,2 -9-1,2 0,0 -} diff --git a/src/dbtest/t/mongodb/half-predicate-write-skew.txt b/src/dbtest/t/mongodb/half-predicate-write-skew.txt deleted file mode 100644 index 9c0a3654..00000000 --- a/src/dbtest/t/mongodb/half-predicate-write-skew.txt +++ /dev/null @@ -1,20 +0,0 @@ -0-1-t1.put(1, 1) -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.get(1) -5-1-t1.put(1, 2) -6-2-t1.put(0, 0) -7-1-commit -8-2-commit -9-3-t1.get(*) - -serializable { -2-null -4-1,2 -9-1,2 0,0 - -2-0,0 -4-1,1 -9-1,2 0,0 -} diff --git a/src/dbtest/t/mongodb/intermediate-reads.txt b/src/dbtest/t/mongodb/intermediate-reads.txt deleted file mode 100644 index 67154ebc..00000000 --- a/src/dbtest/t/mongodb/intermediate-reads.txt +++ /dev/null @@ -1,18 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.get(0) -5-2-commit -6-1-t1.put(0, 2) -7-1-commit -8-3-t1.get(*) - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/mongodb/intermediate-write1.txt b/src/dbtest/t/mongodb/intermediate-write1.txt deleted file mode 100644 index 5a622665..00000000 --- a/src/dbtest/t/mongodb/intermediate-write1.txt +++ /dev/null @@ -1,15 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-1-t1.put(0, 3) -6-2-commit -7-1-commit -8-3-t1.put(*) - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/mongodb/intermediate-write2.txt b/src/dbtest/t/mongodb/intermediate-write2.txt deleted file mode 100644 index c2b67f91..00000000 --- a/src/dbtest/t/mongodb/intermediate-write2.txt +++ /dev/null @@ -1,15 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(1, 0) -3-2-begin -4-2-t1.put(0, 2) -5-2-commit -6-1-t1.put(0, 3) -7-1-commit -8-3-t1.get(*) - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/mongodb/long-fork-anomaly.txt b/src/dbtest/t/mongodb/long-fork-anomaly.txt deleted file mode 100644 index f99a537e..00000000 --- a/src/dbtest/t/mongodb/long-fork-anomaly.txt +++ /dev/null @@ -1,103 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-4-begin -2-4-t1.get(0) -3-1-begin -4-1-t1.put(0, 1) -5-3-begin -6-3-t1.get(1) -7-3-t1.get(0) -8-2-begin -9-2-t1.put(1, 1) -10-4-t1.get(1) -11-1-commit -12-2-commit -13-3-commit -14-4-commit -15-4-t1.get(*) - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/lost-self-update1.txt b/src/dbtest/t/mongodb/lost-self-update1.txt deleted file mode 100644 index fdbe8006..00000000 --- a/src/dbtest/t/mongodb/lost-self-update1.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-1-t1.get(0) -6-2-commit -7-1-commit -8-3-t1.get(*) - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/lost-self-update2.txt b/src/dbtest/t/mongodb/lost-self-update2.txt deleted file mode 100644 index b137d979..00000000 --- a/src/dbtest/t/mongodb/lost-self-update2.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-commit -6-1-t1.get(0) -7-1-commit -8-3-t1.get(*) - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/lost-update1.txt b/src/dbtest/t/mongodb/lost-update1.txt deleted file mode 100644 index 854ef25e..00000000 --- a/src/dbtest/t/mongodb/lost-update1.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 2) -5-1-t1.put(0, 1) -6-2-commit -7-1-commit -8-3-t1.get(*) - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/lost-update2.txt b/src/dbtest/t/mongodb/lost-update2.txt deleted file mode 100644 index 42b409f4..00000000 --- a/src/dbtest/t/mongodb/lost-update2.txt +++ /dev/null @@ -1,17 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 2) -5-2-commit -6-1-t1.put(0, 1) -7-1-commit -8-3-t1.get(*) - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/middle-read.txt b/src/dbtest/t/mongodb/middle-read.txt deleted file mode 100644 index f8319ec3..00000000 --- a/src/dbtest/t/mongodb/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/mongodb/non-repeatable-read1.txt b/src/dbtest/t/mongodb/non-repeatable-read1.txt deleted file mode 100644 index 740e0f60..00000000 --- a/src/dbtest/t/mongodb/non-repeatable-read1.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-commit -6-1-t1.get(0) -7-1-commit -8-3-t1.get(*) - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/non-repeatable-read2.txt b/src/dbtest/t/mongodb/non-repeatable-read2.txt deleted file mode 100644 index d08bc72c..00000000 --- a/src/dbtest/t/mongodb/non-repeatable-read2.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-1-t1.get(0) -6-2-commit -7-1-commit -8-3-t1.get(*) - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mongodb/phantom-read.txt b/src/dbtest/t/mongodb/phantom-read.txt deleted file mode 100644 index 408f7737..00000000 --- a/src/dbtest/t/mongodb/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/mongodb/predicate-sawtooth.txt b/src/dbtest/t/mongodb/predicate-sawtooth.txt deleted file mode 100644 index 315b87fb..00000000 --- a/src/dbtest/t/mongodb/predicate-sawtooth.txt +++ /dev/null @@ -1,45 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.getpred(0) -5-3-begin -6-3-t1.getpred(0) -7-1-t1.put(0, 0) -8-2-t1.put(1, 0) -9-3-t1.put(2, 0) -10-1-commit -11-2-commit -12-3-commit -13-4-t1.get(*) - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/mongodb/primary-colors.txt b/src/dbtest/t/mongodb/primary-colors.txt deleted file mode 100644 index 2ba9931b..00000000 --- a/src/dbtest/t/mongodb/primary-colors.txt +++ /dev/null @@ -1,27 +0,0 @@ -0-1-dots.put(1, red) -0-1-dots.put(2, yellow) -0-1-dots.put(3, blue) -0-1-dots.put(4, red) -0-1-dots.put(5, yellow) -0-1-dots.put(6, blue) -0-1-commit -1-1-begin -2-1-dots.putpred(red, yellow) -3-2-begin -4-2-dots.putpred(yellow, blue) -5-3-begin -6-3-dots.putpred(blue, red) -7-1-commit -8-2-commit -9-3-commit -10-4-dots.get(*) -11-4-commit - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/mongodb/primary-colors2.txt b/src/dbtest/t/mongodb/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/mongodb/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/mongodb/rat-special.txt b/src/dbtest/t/mongodb/rat-special.txt deleted file mode 100644 index 67728e53..00000000 --- a/src/dbtest/t/mongodb/rat-special.txt +++ /dev/null @@ -1,48 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-3-begin -2-3-t1.get(0) -3-1-begin -4-1-t1.put(0, 1) -5-1-t1.put(1, 1) -6-1-commit -7-2-begin -8-2-t1.get(2) -9-3-t1.put(2, 1) -10-2-t1.get(1) -11-2-commit -12-3-commit -13-4-t1.get(*) - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mongodb/rat-special2.txt b/src/dbtest/t/mongodb/rat-special2.txt deleted file mode 100644 index 679c372d..00000000 --- a/src/dbtest/t/mongodb/rat-special2.txt +++ /dev/null @@ -1,48 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-3-begin -2-3-t1.get(0) -3-1-begin -4-1-t1.put(0, 1) -5-1-t1.put(1, 1) -6-1-commit -7-2-begin -8-2-t1.get(2) -9-3-t1.put(2, 1) -10-3-commit -11-2-t1.get(1) -12-2-commit -13-4-t1.get(*) - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/mongodb/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt b/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt deleted file mode 100644 index 9e48429b..00000000 --- a/src/dbtest/t/mongodb/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,60 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-1-t1.get(1) -4-2-begin -5-2-t1.get(1) -6-2-t1.put(1, 20) -7-2-commit -8-3-begin -9-3-t1.get(0) -10-3-t1.get(1) -11-3-commit -12-1-t1.put(0, 11) -13-1-commit -14-3-t1.get(*) - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/mongodb/read-skew1.txt b/src/dbtest/t/mongodb/read-skew1.txt deleted file mode 100644 index daf4c0a2..00000000 --- a/src/dbtest/t/mongodb/read-skew1.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.get(1) -8-1-commit -9-3-t1.get(*) - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/read-skew2.txt b/src/dbtest/t/mongodb/read-skew2.txt deleted file mode 100644 index f9b7dd78..00000000 --- a/src/dbtest/t/mongodb/read-skew2.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 1) -6-1-t1.get(1) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/read-skew3.txt b/src/dbtest/t/mongodb/read-skew3.txt deleted file mode 100644 index 65768575..00000000 --- a/src/dbtest/t/mongodb/read-skew3.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.get(0) -5-2-t1.get(1) -6-1-t1.put(1, 1) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/read-write-skew1-1.txt b/src/dbtest/t/mongodb/read-write-skew1-1.txt deleted file mode 100644 index a4518b85..00000000 --- a/src/dbtest/t/mongodb/read-write-skew1-1.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 2) -6-1-t1.put(1, 1) -7-1-commit -8-2-commit -9-3-t1.get(*) - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/read-write-skew1-2.txt b/src/dbtest/t/mongodb/read-write-skew1-2.txt deleted file mode 100644 index 191795cc..00000000 --- a/src/dbtest/t/mongodb/read-write-skew1-2.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(0, 2) -5-2-t1.get(1) -6-1-t1.put(1, 1) -7-1-commit -8-2-commit -9-3-t1.get(*) - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/read-write-skew2.txt b/src/dbtest/t/mongodb/read-write-skew2.txt deleted file mode 100644 index 5502351f..00000000 --- a/src/dbtest/t/mongodb/read-write-skew2.txt +++ /dev/null @@ -1,19 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.put(1, 2) -8-1-commit -9-3-t1.get(*) - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/mongodb/sawtooth.txt b/src/dbtest/t/mongodb/sawtooth.txt deleted file mode 100644 index 7a090890..00000000 --- a/src/dbtest/t/mongodb/sawtooth.txt +++ /dev/null @@ -1,48 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.get(1) -5-3-begin -6-3-t1.get(2) -7-1-t1.put(1, 1) -8-2-t1.put(2, 1) -9-3-t1.put(0, 1) -10-1-commit -11-2-commit -12-3-commit -13-4-t1.get(*) - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt b/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt deleted file mode 100644 index 4e56eac4..00000000 --- a/src/dbtest/t/mongodb/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,27 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 1) -6-2-commit -7-1-t1.get(0) -8-1-t1.get(1) -9-1-commit -10-3-t1.get(*) - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/mongodb/step-read-skew.txt b/src/dbtest/t/mongodb/step-read-skew.txt deleted file mode 100644 index 3ea30e55..00000000 --- a/src/dbtest/t/mongodb/step-read-skew.txt +++ /dev/null @@ -1,40 +0,0 @@ -0-1-t1.put(0, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.put(0, 1) -5-2-t1.put(1, 0) -6-2-commit -7-3-begin -8-3-t1.put(1, 1) -9-3-t1.put(2, 0) -10-3-commit -11-1-t1.get(2) -12-1-commit -13-4-t1.get(*) - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/mongodb/step-wat.txt b/src/dbtest/t/mongodb/step-wat.txt deleted file mode 100644 index 6b572464..00000000 --- a/src/dbtest/t/mongodb/step-wat.txt +++ /dev/null @@ -1,70 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-1-begin -2-1-t1.get(1) -3-2-begin -4-2-t1.get(0) -5-2-t1.put(0, 1) -6-2-t1.get(1) -7-2-t1.put(1, 1) -8-3-begin -9-3-t1.put(0, 2) -10-2-commit -11-3-t1.get(2) -12-3-t1.put(2, 1) -13-3-commit -14-1-t1.get(1) -15-1-t1.get(2) -16-1-commit -17-4-t1.get(*) - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,1 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,0 -17-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,1 -17-0,1 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt b/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt deleted file mode 100644 index d608806e..00000000 --- a/src/dbtest/t/mongodb/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,19 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.put(1, 1) -5-2-t1.put(0, 0) -6-2-commit -7-1-t1.getpred(1) -8-1-commit -9-3-t1.get(*) - -serializable { -2-null -7-null -9-0,0 1,1 - -2-0,0 -7-1,1 -9-0,0 1,1 -} diff --git a/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt b/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt deleted file mode 100644 index e1a3202e..00000000 --- a/src/dbtest/t/mongodb/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,19 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.getpred(1) -5-1-t1.put(1, 1) -6-2-t1.put(0, 0) -7-1-commit -8-2-commit -9-3-t1.get(*) - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt b/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt deleted file mode 100644 index e37ef229..00000000 --- a/src/dbtest/t/mongodb/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,20 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.put(0, 0) -5-2-t1.put(1, 0) -6-2-commit -7-1-t1.getpred(0) -8-1-commit -9-3-t1.get(*) - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt b/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt deleted file mode 100644 index 8fd7d1a7..00000000 --- a/src/dbtest/t/mongodb/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,23 +0,0 @@ -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.put(1, 1) -5-2-t1.put(2, 1) -6-2-commit -7-1-t1.get(*) -8-1-commit -9-3-t1.get(*) - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt b/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt deleted file mode 100644 index 4e800853..00000000 --- a/src/dbtest/t/mongodb/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,19 +0,0 @@ -1-1-begin -2-1-t1.getpred(0) -3-2-begin -4-2-t1.getpred(0) -5-1-t1.put(1, 0) -6-2-t1.put(0, 0) -7-1-commit -8-2-commit -9-3-t1.get(*) - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/mongodb/unnamed-anomaly.txt b/src/dbtest/t/mongodb/unnamed-anomaly.txt deleted file mode 100644 index a4b835df..00000000 --- a/src/dbtest/t/mongodb/unnamed-anomaly.txt +++ /dev/null @@ -1,63 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -0-1-t1.put(2, 0) -1-1-begin -2-1-t1.get(1) -3-2-begin -4-2-t1.get(0) -5-2-t1.put(0, 1) -6-2-t1.get(1) -7-2-t1.put(1,1) -8-2-commit -9-3-begin -10-3-t1.put(0, 2) -11-3-t1.get(2) -12-3-t1.put(2, 1) -13-3-commit -14-1-t1.get(2) -15-1-commit -16-4-t1.get(*) - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/mongodb/write-read-skew1.txt b/src/dbtest/t/mongodb/write-read-skew1.txt deleted file mode 100644 index 5a39216f..00000000 --- a/src/dbtest/t/mongodb/write-read-skew1.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.put(1, 1) -5-2-t1.get(0) -6-2-commit -7-1-t1.get(1) -8-1-commit -9-3-t1.get(*) - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mongodb/write-read-skew2.txt b/src/dbtest/t/mongodb/write-read-skew2.txt deleted file mode 100644 index eeb41351..00000000 --- a/src/dbtest/t/mongodb/write-read-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.put(0, 1) -3-2-begin -4-2-t1.get(0) -5-2-t1.put(1, 1) -6-1-t1.get(1) -7-2-commit -8-1-commit -9-3-t1.get(*) - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/mongodb/write-skew-black-white.txt b/src/dbtest/t/mongodb/write-skew-black-white.txt deleted file mode 100644 index c526a0ee..00000000 --- a/src/dbtest/t/mongodb/write-skew-black-white.txt +++ /dev/null @@ -1,20 +0,0 @@ -0-1-dots.put(1, black) -0-1-dots.put(2, white) -0-1-dots.put(3, black) -0-1-dots.put(4, white) -1-1-begin -2-1-dots.putpred(white, black) -3-2-begin -4-2-dots.putpred(black, white) -5-2-commit -6-2-dots.get(*) -7-1-commit -8-3-dots.get(*) - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/mongodb/write-skew-intersecting-data.txt b/src/dbtest/t/mongodb/write-skew-intersecting-data.txt deleted file mode 100644 index 86e87b32..00000000 --- a/src/dbtest/t/mongodb/write-skew-intersecting-data.txt +++ /dev/null @@ -1,26 +0,0 @@ -0-1-mytab.put(10, 1) -0-1-mytab.put(20, 1) -0-1-mytab.put(100, 2) -0-1-mytab.put(200, 2) -1-1-begin -2-1-mytab.getpred(1) -4-2-begin -6-2-mytab.put(300, 1) -5-2-mytab.getpred(2) -3-1-mytab.put(30, 2) -7-2-commit -8-1-commit -9-3-mytab.getpred(1) -10-3-mytab.getpred(2) - -serializable { -2-10,1 20,1 -5-100,2 200,2 30,2 -9-10,1 20,1 300,1 -10-100,2 200,2 30,2 - -2-10,1 20,1 300,1 -5-100,2 200,2 -9-10,1 20,1 300,1 -10-100,2 200,2 30,2 -} diff --git a/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt b/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt deleted file mode 100644 index aa388c79..00000000 --- a/src/dbtest/t/mongodb/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,27 +0,0 @@ -0-1-account.put(s, 500) -0-1-account.put(c, 500) -1-1-begin -2-1-account.get(s) -3-1-account.get(c) -4-2-begin -5-2-account.get(s) -6-2-account.get(c) -7-2-account.vinc(c, +900) -8-2-commit -9-1-account.vinc(s, +900) -10-1-commit -11-3-account.get(*) - -serializable { -2-s,500 -3-c,500 -5-s,1400 -6-c,500 -11-s,1400 c,1400 - -2-c,1400 -3-s,500 -5-s,500 -6-c,500 -11-s,1400 c,1400 -} diff --git a/src/dbtest/t/mongodb/write-skew.txt b/src/dbtest/t/mongodb/write-skew.txt deleted file mode 100644 index d745e782..00000000 --- a/src/dbtest/t/mongodb/write-skew.txt +++ /dev/null @@ -1,21 +0,0 @@ -0-1-t1.put(0, 0) -0-1-t1.put(1, 0) -1-1-begin -2-1-t1.get(0) -3-2-begin -4-2-t1.get(1) -5-1-t1.put(1, 1) -6-1-commit -7-2-t1.put(0, 1) -8-2-commit -9-3-t1.get(*) - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/aborted-reads.txt b/src/dbtest/t/mysql/aborted-reads.txt deleted file mode 100644 index 835545bd..00000000 --- a/src/dbtest/t/mysql/aborted-reads.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-3-COMMIT; - -serializable { -4-null -7-null -} -liyu diff --git a/src/dbtest/t/mysql/causality-violation-anomaly.txt b/src/dbtest/t/mysql/causality-violation-anomaly.txt deleted file mode 100644 index 291f51ff..00000000 --- a/src/dbtest/t/mysql/causality-violation-anomaly.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/cross-phantom.txt b/src/dbtest/t/mysql/cross-phantom.txt deleted file mode 100644 index c0dac7eb..00000000 --- a/src/dbtest/t/mysql/cross-phantom.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/mysql/cross-phenomenon.txt b/src/dbtest/t/mysql/cross-phenomenon.txt deleted file mode 100644 index 0b53fcbe..00000000 --- a/src/dbtest/t/mysql/cross-phenomenon.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/dirty-read.txt b/src/dbtest/t/mysql/dirty-read.txt deleted file mode 100644 index c374d930..00000000 --- a/src/dbtest/t/mysql/dirty-read.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -4-1-INSERT INTO t1 VALUES (0, 0); -5-2-SELECT * from t1 WHERE k = 0; -6-1-ROLLBACK; -7-2-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-null -8-null -} diff --git a/src/dbtest/t/mysql/dirty-write1.txt b/src/dbtest/t/mysql/dirty-write1.txt deleted file mode 100644 index 54fcbfb8..00000000 --- a/src/dbtest/t/mysql/dirty-write1.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/mysql/dirty-write2.txt b/src/dbtest/t/mysql/dirty-write2.txt deleted file mode 100644 index 507f8d52..00000000 --- a/src/dbtest/t/mysql/dirty-write2.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/mysql/double-write-skew1-1.txt b/src/dbtest/t/mysql/double-write-skew1-1.txt deleted file mode 100644 index 4b09edc5..00000000 --- a/src/dbtest/t/mysql/double-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/mysql/double-write-skew1-2.txt b/src/dbtest/t/mysql/double-write-skew1-2.txt deleted file mode 100644 index 22fcab9e..00000000 --- a/src/dbtest/t/mysql/double-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/double-write-skew1-3.txt b/src/dbtest/t/mysql/double-write-skew1-3.txt deleted file mode 100644 index dd265dde..00000000 --- a/src/dbtest/t/mysql/double-write-skew1-3.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/double-write-skew2.txt b/src/dbtest/t/mysql/double-write-skew2.txt deleted file mode 100644 index 08e18580..00000000 --- a/src/dbtest/t/mysql/double-write-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/mysql/fractured-reads.txt b/src/dbtest/t/mysql/fractured-reads.txt deleted file mode 100644 index 31d8850e..00000000 --- a/src/dbtest/t/mysql/fractured-reads.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/mysql/full-write-skew1.txt b/src/dbtest/t/mysql/full-write-skew1.txt deleted file mode 100644 index bfd24587..00000000 --- a/src/dbtest/t/mysql/full-write-skew1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-UPDATE t1 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/mysql/full-write-skew2.txt b/src/dbtest/t/mysql/full-write-skew2.txt deleted file mode 100644 index 3917320f..00000000 --- a/src/dbtest/t/mysql/full-write-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/mysql/half-predicate-read-skew.txt b/src/dbtest/t/mysql/half-predicate-read-skew.txt deleted file mode 100644 index bcfad45b..00000000 --- a/src/dbtest/t/mysql/half-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-1,1 -9-0,0 1,2 - -2-0,0 -7-1,2 -9-0,0 1,2 -} diff --git a/src/dbtest/t/mysql/half-predicate-write-skew.txt b/src/dbtest/t/mysql/half-predicate-write-skew.txt deleted file mode 100644 index d8d3056c..00000000 --- a/src/dbtest/t/mysql/half-predicate-write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/mysql/intermediate-reads.txt b/src/dbtest/t/mysql/intermediate-reads.txt deleted file mode 100644 index cd9132fe..00000000 --- a/src/dbtest/t/mysql/intermediate-reads.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/mysql/intermediate-write1.txt b/src/dbtest/t/mysql/intermediate-write1.txt deleted file mode 100644 index c5c3ea3a..00000000 --- a/src/dbtest/t/mysql/intermediate-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/mysql/intermediate-write2.txt b/src/dbtest/t/mysql/intermediate-write2.txt deleted file mode 100644 index 7faf77b0..00000000 --- a/src/dbtest/t/mysql/intermediate-write2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/mysql/long-fork-anomaly.txt b/src/dbtest/t/mysql/long-fork-anomaly.txt deleted file mode 100644 index 727c16f0..00000000 --- a/src/dbtest/t/mysql/long-fork-anomaly.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/lost-self-update1.txt b/src/dbtest/t/mysql/lost-self-update1.txt deleted file mode 100644 index ad197022..00000000 --- a/src/dbtest/t/mysql/lost-self-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mysql/lost-self-update2.txt b/src/dbtest/t/mysql/lost-self-update2.txt deleted file mode 100644 index 7b8a0059..00000000 --- a/src/dbtest/t/mysql/lost-self-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mysql/lost-update1.txt b/src/dbtest/t/mysql/lost-update1.txt deleted file mode 100644 index 26240f28..00000000 --- a/src/dbtest/t/mysql/lost-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/mysql/lost-update2.txt b/src/dbtest/t/mysql/lost-update2.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/mysql/lost-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/mysql/middle-read.txt b/src/dbtest/t/mysql/middle-read.txt deleted file mode 100644 index f8319ec3..00000000 --- a/src/dbtest/t/mysql/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/mysql/non-repeatable-read1.txt b/src/dbtest/t/mysql/non-repeatable-read1.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/mysql/non-repeatable-read1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mysql/non-repeatable-read2.txt b/src/dbtest/t/mysql/non-repeatable-read2.txt deleted file mode 100644 index 16a4b884..00000000 --- a/src/dbtest/t/mysql/non-repeatable-read2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/mysql/phantom-read.txt b/src/dbtest/t/mysql/phantom-read.txt deleted file mode 100644 index 408f7737..00000000 --- a/src/dbtest/t/mysql/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/mysql/predicate-sawtooth.txt b/src/dbtest/t/mysql/predicate-sawtooth.txt deleted file mode 100644 index 07277c6d..00000000 --- a/src/dbtest/t/mysql/predicate-sawtooth.txt +++ /dev/null @@ -1,50 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/mysql/primary-colors.txt b/src/dbtest/t/mysql/primary-colors.txt deleted file mode 100644 index 9c35d985..00000000 --- a/src/dbtest/t/mysql/primary-colors.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('red'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('red'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/mysql/primary-colors2.txt b/src/dbtest/t/mysql/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/mysql/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/mysql/rat-special.txt b/src/dbtest/t/mysql/rat-special.txt deleted file mode 100644 index 2ab8db87..00000000 --- a/src/dbtest/t/mysql/rat-special.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mysql/rat-special2.txt b/src/dbtest/t/mysql/rat-special2.txt deleted file mode 100644 index d99cfc58..00000000 --- a/src/dbtest/t/mysql/rat-special2.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/mysql/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/mysql/read-only-transaction-anomaly.txt b/src/dbtest/t/mysql/read-only-transaction-anomaly.txt deleted file mode 100644 index a684704c..00000000 --- a/src/dbtest/t/mysql/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,65 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/mysql/read-skew1.txt b/src/dbtest/t/mysql/read-skew1.txt deleted file mode 100644 index 2a500247..00000000 --- a/src/dbtest/t/mysql/read-skew1.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/read-skew2.txt b/src/dbtest/t/mysql/read-skew2.txt deleted file mode 100644 index 0075542e..00000000 --- a/src/dbtest/t/mysql/read-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-SELECT * from t1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/read-skew3.txt b/src/dbtest/t/mysql/read-skew3.txt deleted file mode 100644 index 16031984..00000000 --- a/src/dbtest/t/mysql/read-skew3.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/read-write-skew1-1.txt b/src/dbtest/t/mysql/read-write-skew1-1.txt deleted file mode 100644 index 0ded781d..00000000 --- a/src/dbtest/t/mysql/read-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=2 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/read-write-skew1-2.txt b/src/dbtest/t/mysql/read-write-skew1-2.txt deleted file mode 100644 index 2ae13088..00000000 --- a/src/dbtest/t/mysql/read-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/mysql/read-write-skew2.txt b/src/dbtest/t/mysql/read-write-skew2.txt deleted file mode 100644 index 6c82b70c..00000000 --- a/src/dbtest/t/mysql/read-write-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/mysql/sawtooth.txt b/src/dbtest/t/mysql/sawtooth.txt deleted file mode 100644 index 4e57bfc5..00000000 --- a/src/dbtest/t/mysql/sawtooth.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt b/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt deleted file mode 100644 index e0135311..00000000 --- a/src/dbtest/t/mysql/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/mysql/step-read-skew.txt b/src/dbtest/t/mysql/step-read-skew.txt deleted file mode 100644 index 7b1c68f5..00000000 --- a/src/dbtest/t/mysql/step-read-skew.txt +++ /dev/null @@ -1,45 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/mysql/step-wat.txt b/src/dbtest/t/mysql/step-wat.txt deleted file mode 100644 index 807ef480..00000000 --- a/src/dbtest/t/mysql/step-wat.txt +++ /dev/null @@ -1,75 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-3-BEGIN; -9-3-update t1 set v=2 where k=0; -10-2-commit; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=1; -15-1-select * from t1 where k=2; -16-1-commit; -17-4-select * from t1; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,1 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,0 -17-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,1 -17-0,1 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt b/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt deleted file mode 100644 index 74701f0c..00000000 --- a/src/dbtest/t/mysql/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,1 - -2-0,0 -7-1,1 -9-0,0 1,1 -} diff --git a/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt b/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt deleted file mode 100644 index 560206ed..00000000 --- a/src/dbtest/t/mysql/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/mysql/total-same-predicate-read-skew.txt b/src/dbtest/t/mysql/total-same-predicate-read-skew.txt deleted file mode 100644 index 0c39b464..00000000 --- a/src/dbtest/t/mysql/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-COMMIT; -7-1-select * from t1 where v=0; -8-1-COMMIT: -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt b/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt deleted file mode 100644 index 3456462b..00000000 --- a/src/dbtest/t/mysql/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-commit; -7-1-select * from t1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/mysql/total-same-predicate-write-skew.txt b/src/dbtest/t/mysql/total-same-predicate-write-skew.txt deleted file mode 100644 index 5174028f..00000000 --- a/src/dbtest/t/mysql/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/mysql/unnamed-anomaly.txt b/src/dbtest/t/mysql/unnamed-anomaly.txt deleted file mode 100644 index 0cac37c6..00000000 --- a/src/dbtest/t/mysql/unnamed-anomaly.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/mysql/write-read-skew1.txt b/src/dbtest/t/mysql/write-read-skew1.txt deleted file mode 100644 index 95c25f23..00000000 --- a/src/dbtest/t/mysql/write-read-skew1.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/mysql/write-read-skew2.txt b/src/dbtest/t/mysql/write-read-skew2.txt deleted file mode 100644 index ed383947..00000000 --- a/src/dbtest/t/mysql/write-read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/mysql/write-skew-black-white.txt b/src/dbtest/t/mysql/write-skew-black-white.txt deleted file mode 100644 index 231a0111..00000000 --- a/src/dbtest/t/mysql/write-skew-black-white.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('black'); -0-1-insert into dots(color) values('white'); -0-1-insert into dots(color) values('black'); -0-1-insert into dots(color) values('white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/mysql/write-skew-intersecting-data.txt b/src/dbtest/t/mysql/write-skew-intersecting-data.txt deleted file mode 100644 index 8087ed2a..00000000 --- a/src/dbtest/t/mysql/write-skew-intersecting-data.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS mytab; -0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -4-2-BEGIN; -6-2-INSERT INTO mytab VALUES (1, 300); -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -3-1-INSERT INTO mytab VALUES (2, 30); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-COMMIT; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/mysql/write-skew-overdraft-protection.txt b/src/dbtest/t/mysql/write-skew-overdraft-protection.txt deleted file mode 100644 index 615c4e7c..00000000 --- a/src/dbtest/t/mysql/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:3 -0-1-drop table if exists account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/mysql/write-skew.txt b/src/dbtest/t/mysql/write-skew.txt deleted file mode 100644 index 51eb55df..00000000 --- a/src/dbtest/t/mysql/write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/aborted-reads.txt b/src/dbtest/t/ob/aborted-reads.txt deleted file mode 100644 index c5b92ea7..00000000 --- a/src/dbtest/t/ob/aborted-reads.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-3-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-2-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/ob/causality-violation-anomaly.txt b/src/dbtest/t/ob/causality-violation-anomaly.txt deleted file mode 100644 index 13e6adc1..00000000 --- a/src/dbtest/t/ob/causality-violation-anomaly.txt +++ /dev/null @@ -1,52 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-DROP TABLE t1; -14-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/ob/cross-phantom.txt b/src/dbtest/t/ob/cross-phantom.txt deleted file mode 100644 index 3e83d239..00000000 --- a/src/dbtest/t/ob/cross-phantom.txt +++ /dev/null @@ -1,107 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-DROP TABLE t1; -17-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/ob/cross-phenomenon.txt b/src/dbtest/t/ob/cross-phenomenon.txt deleted file mode 100644 index 558ded18..00000000 --- a/src/dbtest/t/ob/cross-phenomenon.txt +++ /dev/null @@ -1,109 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-DROP TABLE t1; -17-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/ob/dirty-read.txt b/src/dbtest/t/ob/dirty-read.txt deleted file mode 100644 index 11978bd0..00000000 --- a/src/dbtest/t/ob/dirty-read.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -3-1-INSERT INTO t1 VALUES (0, 0); -4-2-SELECT * from t1 WHERE k = 0; -5-1-ROLLBACK; -6-2-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/ob/dirty-write1.txt b/src/dbtest/t/ob/dirty-write1.txt deleted file mode 100644 index 7f2ce606..00000000 --- a/src/dbtest/t/ob/dirty-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/ob/dirty-write2.txt b/src/dbtest/t/ob/dirty-write2.txt deleted file mode 100644 index 5fc0eb32..00000000 --- a/src/dbtest/t/ob/dirty-write2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t2 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t2 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t2; -8-3-DROP TABLE t2; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/ob/double-write-skew.txt b/src/dbtest/t/ob/double-write-skew.txt deleted file mode 100644 index d47d04af..00000000 --- a/src/dbtest/t/ob/double-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -5-0,1 -9-0,1 1,1 - -5-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/ob/double-write-skew1-1.txt b/src/dbtest/t/ob/double-write-skew1-1.txt deleted file mode 100644 index 31338a02..00000000 --- a/src/dbtest/t/ob/double-write-skew1-1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/ob/double-write-skew1-2.txt b/src/dbtest/t/ob/double-write-skew1-2.txt deleted file mode 100644 index 9e6e5e2f..00000000 --- a/src/dbtest/t/ob/double-write-skew1-2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t8; -0-1-CREATE TABLE t8 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t8 VALUES (0, 0); -0-1-INSERT INTO t8 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t8 set v=1 where k=0; -3-2-begin; -4-2-update t8 set v=2 where k=0; -5-2-update t8 set v=1 where k=1; -6-1-select * from t8 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t8; -10-3-DROP TABLE t8; -11-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/double-write-skew1-3.txt b/src/dbtest/t/ob/double-write-skew1-3.txt deleted file mode 100644 index dc7344e5..00000000 --- a/src/dbtest/t/ob/double-write-skew1-3.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/double-write-skew2.txt b/src/dbtest/t/ob/double-write-skew2.txt deleted file mode 100644 index 15088618..00000000 --- a/src/dbtest/t/ob/double-write-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/ob/fractured-reads.txt b/src/dbtest/t/ob/fractured-reads.txt deleted file mode 100644 index 6f1a1f74..00000000 --- a/src/dbtest/t/ob/fractured-reads.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-DROP TABLE t1; -12-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/ob/full-write-skew1.txt b/src/dbtest/t/ob/full-write-skew1.txt deleted file mode 100644 index f8b6aceb..00000000 --- a/src/dbtest/t/ob/full-write-skew1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t12; -0-1-CREATE TABLE t12 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t12 VALUES (0, 0); -0-1-INSERT INTO t12 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t12 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t12 SET v=2 WHERE k=0; -5-2-UPDATE t12 SET v=1 WHERE k=1; -6-1-UPDATE t12 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t12; -10-3-DROP TABLE t12; -11-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/ob/full-write-skew2.txt b/src/dbtest/t/ob/full-write-skew2.txt deleted file mode 100644 index 5d20a957..00000000 --- a/src/dbtest/t/ob/full-write-skew2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t13; -0-1-CREATE TABLE t13 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t13 VALUES (0, 0); -0-1-INSERT INTO t13 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t13 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t13 SET v=2 WHERE k=0; -5-2-UPDATE t13 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t13 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t13; -10-3-DROP TABLE t13; -11-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/ob/half-predicate-read-skew.txt b/src/dbtest/t/ob/half-predicate-read-skew.txt deleted file mode 100644 index 6694025a..00000000 --- a/src/dbtest/t/ob/half-predicate-read-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT;; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-1,1 -9-1,2 0,0 - -2-0,0 -7-1,2 -9-1,2 0,0 -} diff --git a/src/dbtest/t/ob/half-predicate-write-skew.txt b/src/dbtest/t/ob/half-predicate-write-skew.txt deleted file mode 100644 index 66cfbe16..00000000 --- a/src/dbtest/t/ob/half-predicate-write-skew.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/ob/intermediate-reads.txt b/src/dbtest/t/ob/intermediate-reads.txt deleted file mode 100644 index 905df765..00000000 --- a/src/dbtest/t/ob/intermediate-reads.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-drop table t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-drop table t1; -10-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/ob/intermediate-write1.txt b/src/dbtest/t/ob/intermediate-write1.txt deleted file mode 100644 index ea77a0de..00000000 --- a/src/dbtest/t/ob/intermediate-write1.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t3; -0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t3 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t3 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t3 SET v=2 WHERE k=0; -5-1-UPDATE t3 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t3; -9-3-DROP TABLE t3; -10-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/ob/intermediate-write2.txt b/src/dbtest/t/ob/intermediate-write2.txt deleted file mode 100644 index f827b424..00000000 --- a/src/dbtest/t/ob/intermediate-write2.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t4; -0-1-CREATE TABLE t4 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t4 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t4 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t4 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t4 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t4; -9-3-DROP TABLE t4; -10-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/ob/long-fork-anomaly.txt b/src/dbtest/t/ob/long-fork-anomaly.txt deleted file mode 100644 index fbd7d224..00000000 --- a/src/dbtest/t/ob/long-fork-anomaly.txt +++ /dev/null @@ -1,109 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-DROP TABLE t1; -17-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/ob/lost-self-update1.txt b/src/dbtest/t/ob/lost-self-update1.txt deleted file mode 100644 index de58b8b0..00000000 --- a/src/dbtest/t/ob/lost-self-update1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/ob/lost-self-update2.txt b/src/dbtest/t/ob/lost-self-update2.txt deleted file mode 100644 index f0a2cb68..00000000 --- a/src/dbtest/t/ob/lost-self-update2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/ob/lost-update.txt b/src/dbtest/t/ob/lost-update.txt deleted file mode 100644 index c9fc1ec3..00000000 --- a/src/dbtest/t/ob/lost-update.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/ob/lost-update1.txt b/src/dbtest/t/ob/lost-update1.txt deleted file mode 100644 index 7c9797b1..00000000 --- a/src/dbtest/t/ob/lost-update1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/ob/lost-update2.txt b/src/dbtest/t/ob/lost-update2.txt deleted file mode 100644 index f15615ef..00000000 --- a/src/dbtest/t/ob/lost-update2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-1-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/ob/middle-read.txt b/src/dbtest/t/ob/middle-read.txt deleted file mode 100644 index 6a6e155a..00000000 --- a/src/dbtest/t/ob/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/ob/non-repeatable-read1.txt b/src/dbtest/t/ob/non-repeatable-read1.txt deleted file mode 100644 index 2758b374..00000000 --- a/src/dbtest/t/ob/non-repeatable-read1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/ob/non-repeatable-read2.txt b/src/dbtest/t/ob/non-repeatable-read2.txt deleted file mode 100644 index f1a126d5..00000000 --- a/src/dbtest/t/ob/non-repeatable-read2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/ob/phantom-read.txt b/src/dbtest/t/ob/phantom-read.txt deleted file mode 100644 index 28a8dd28..00000000 --- a/src/dbtest/t/ob/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/ob/predicate-sawtooth.txt b/src/dbtest/t/ob/predicate-sawtooth.txt deleted file mode 100644 index 1985e507..00000000 --- a/src/dbtest/t/ob/predicate-sawtooth.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/ob/primary-colors.txt b/src/dbtest/t/ob/primary-colors.txt deleted file mode 100644 index ae93ed7a..00000000 --- a/src/dbtest/t/ob/primary-colors.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-drop table dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'red'); -0-1-insert into dots values(2, 'yellow'); -0-1-insert into dots values(3, 'blue'); -0-1-insert into dots values(4, 'red'); -0-1-insert into dots values(5, 'yellow'); -0-1-insert into dots values(6, 'blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-drop table dots; -12-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/ob/primary-colors2.txt b/src/dbtest/t/ob/primary-colors2.txt deleted file mode 100644 index 66dd47e3..00000000 --- a/src/dbtest/t/ob/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-drop table dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/ob/rat-special.txt b/src/dbtest/t/ob/rat-special.txt deleted file mode 100644 index 92d342da..00000000 --- a/src/dbtest/t/ob/rat-special.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/ob/rat-special2.txt b/src/dbtest/t/ob/rat-special2.txt deleted file mode 100644 index d980b0ca..00000000 --- a/src/dbtest/t/ob/rat-special2.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/ob/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/ob/read-only-transaction-anomaly.txt b/src/dbtest/t/ob/read-only-transaction-anomaly.txt deleted file mode 100644 index 8820ce84..00000000 --- a/src/dbtest/t/ob/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,66 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-DROP TABLE t1; -16-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/ob/read-skew1.txt b/src/dbtest/t/ob/read-skew1.txt deleted file mode 100644 index ecc427ea..00000000 --- a/src/dbtest/t/ob/read-skew1.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/read-skew2.txt b/src/dbtest/t/ob/read-skew2.txt deleted file mode 100644 index d335f57a..00000000 --- a/src/dbtest/t/ob/read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-INSERT INTO t2 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t2 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t2 SET v=1 WHERE k=0; -5-2-UPDATE t2 SET v=1 WHERE k=1; -6-1-SELECT * from t2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t2; -10-3-DROP TABLE t2; -11-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/read-skew3.txt b/src/dbtest/t/ob/read-skew3.txt deleted file mode 100644 index 6331ea2e..00000000 --- a/src/dbtest/t/ob/read-skew3.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-INSERT INTO t2 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t2 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t2 WHERE k=0; -5-2-SELECT * from t2 WHERE k=1; -6-1-UPDATE t2 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t2; -10-3-DROP TABLE t2; -11-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/read-write-skew1-1.txt b/src/dbtest/t/ob/read-write-skew1-1.txt deleted file mode 100644 index 8424ebdf..00000000 --- a/src/dbtest/t/ob/read-write-skew1-1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t10; -0-1-CREATE TABLE t10 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t10 VALUES (0, 0); -0-1-INSERT INTO t10 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t10 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t10 SET v=1 WHERE k=0; -5-2-UPDATE t10 SET v=2 WHERE k=1; -6-1-UPDATE t10 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t10; -10-3-DROP TABLE t10; -11-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/read-write-skew1-2.txt b/src/dbtest/t/ob/read-write-skew1-2.txt deleted file mode 100644 index 241b5345..00000000 --- a/src/dbtest/t/ob/read-write-skew1-2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t11; -0-1-CREATE TABLE t11 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t11 VALUES (0, 0); -0-1-INSERT INTO t11 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t11 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t11 SET v=2 WHERE k=0; -5-2-SELECT * from t11 WHERE k=1; -6-1-UPDATE t11 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t11; -10-3-DROP TABLE t11; -11-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/ob/read-write-skew2.txt b/src/dbtest/t/ob/read-write-skew2.txt deleted file mode 100644 index 12e8529c..00000000 --- a/src/dbtest/t/ob/read-write-skew2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/ob/sawtooth.txt b/src/dbtest/t/ob/sawtooth.txt deleted file mode 100644 index 921d3dce..00000000 --- a/src/dbtest/t/ob/sawtooth.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/ob/serial-concurrent-phenomenon.txt b/src/dbtest/t/ob/serial-concurrent-phenomenon.txt deleted file mode 100644 index 62a08674..00000000 --- a/src/dbtest/t/ob/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,33 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-DROP TABLE t1; -12-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/ob/step-read-skew.txt b/src/dbtest/t/ob/step-read-skew.txt deleted file mode 100644 index b26799e0..00000000 --- a/src/dbtest/t/ob/step-read-skew.txt +++ /dev/null @@ -1,46 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/ob/step-wat.txt b/src/dbtest/t/ob/step-wat.txt deleted file mode 100644 index 1acfbc43..00000000 --- a/src/dbtest/t/ob/step-wat.txt +++ /dev/null @@ -1,69 +0,0 @@ -ParamNum:2 -0-1-drop table t14; -0-1-CREATE TABLE t14 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t14 VALUES (0, 0); -0-1-INSERT INTO t14 VALUES (1, 0); -0-1-INSERT INTO t14 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t14 where k=1; -3-2-BEGIN; -4-2-select * from t14 where k=0; -5-2-update t14 set v=1 where k=0; -6-2-select * from t14 where k=1; -7-2-update t14 set v=1 where k=1; -8-3-BEGIN; -9-3-update t14 set v=2 where k=0; -10-2-commit; -11-3-select * from t14 where k=2; -12-3-update t14 set v=1 where k=2; -13-3-commit; -14-1-select * from t14 where k=2; -15-1-commit; -16-4-select * from t14; -17-4-drop table t14; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/ob/total-diff-predicate-read-skew.txt b/src/dbtest/t/ob/total-diff-predicate-read-skew.txt deleted file mode 100644 index b9b63110..00000000 --- a/src/dbtest/t/ob/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-commit; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-null -9-1,1 0,0 - -2-0,0 -7-1,1 -9-1,1 0,0 -} diff --git a/src/dbtest/t/ob/total-diff-predicate-write-skew.txt b/src/dbtest/t/ob/total-diff-predicate-write-skew.txt deleted file mode 100644 index 60993d01..00000000 --- a/src/dbtest/t/ob/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/ob/total-same-predicate-read-skew.txt b/src/dbtest/t/ob/total-same-predicate-read-skew.txt deleted file mode 100644 index 471c53b2..00000000 --- a/src/dbtest/t/ob/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-commit; -7-1-select * from t1 where v=0; -8-1-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/ob/total-same-predicate-read-skew2.txt b/src/dbtest/t/ob/total-same-predicate-read-skew2.txt deleted file mode 100644 index 7095bccd..00000000 --- a/src/dbtest/t/ob/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-COMMIT; -7-1-select * from t1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/ob/total-same-predicate-write-skew.txt b/src/dbtest/t/ob/total-same-predicate-write-skew.txt deleted file mode 100644 index 613944d4..00000000 --- a/src/dbtest/t/ob/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/ob/unnamed-anomaly.txt b/src/dbtest/t/ob/unnamed-anomaly.txt deleted file mode 100644 index c504ec08..00000000 --- a/src/dbtest/t/ob/unnamed-anomaly.txt +++ /dev/null @@ -1,69 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-DROP TABLE t1; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/ob/unrepeatable-read.txt b/src/dbtest/t/ob/unrepeatable-read.txt deleted file mode 100644 index 09dddb61..00000000 --- a/src/dbtest/t/ob/unrepeatable-read.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/ob/write-read-skew1.txt b/src/dbtest/t/ob/write-read-skew1.txt deleted file mode 100644 index d186f79f..00000000 --- a/src/dbtest/t/ob/write-read-skew1.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/ob/write-read-skew2.txt b/src/dbtest/t/ob/write-read-skew2.txt deleted file mode 100644 index f20ddfb4..00000000 --- a/src/dbtest/t/ob/write-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t3; -0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t3 VALUES (0, 0); -0-1-INSERT INTO t3 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t3 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t3 where k=0; -5-2-update t3 set v=1 where k=1; -6-1-select * from t3 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t3; -10-3-DROP TABLE t3; -11-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/ob/write-skew-black-white.txt b/src/dbtest/t/ob/write-skew-black-white.txt deleted file mode 100644 index e4d4b497..00000000 --- a/src/dbtest/t/ob/write-skew-black-white.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'black'); -0-1-insert into dots values(2, 'white'); -0-1-insert into dots values(3, 'black'); -0-1-insert into dots values(4, 'white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-4-DROP TABLE dots; -10-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/ob/write-skew-intersecting-data.txt b/src/dbtest/t/ob/write-skew-intersecting-data.txt deleted file mode 100644 index 91577120..00000000 --- a/src/dbtest/t/ob/write-skew-intersecting-data.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE mytab; -0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10); -0-1-INSERT INTO mytab VALUES(1, 20); -0-1-INSERT INTO mytab VALUES(2, 100); -0-1-INSERT INTO mytab VALUES(2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -3-1-INSERT INTO mytab VALUES (2, 30); -4-2-BEGIN; -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -6-2-INSERT INTO mytab VALUES (1, 300); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-commit; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/ob/write-skew-overdraft-protection.txt b/src/dbtest/t/ob/write-skew-overdraft-protection.txt deleted file mode 100644 index 87c9bc05..00000000 --- a/src/dbtest/t/ob/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:3 -0-1-drop table account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500); -0-1-insert into account values('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-drop table account; -12-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/ob/write-skew.txt b/src/dbtest/t/ob/write-skew.txt deleted file mode 100644 index cf78e763..00000000 --- a/src/dbtest/t/ob/write-skew.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/aborted-reads.txt b/src/dbtest/t/oracle/aborted-reads.txt deleted file mode 100644 index c5b92ea7..00000000 --- a/src/dbtest/t/oracle/aborted-reads.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-3-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-2-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/oracle/causality-violation-anomaly.txt b/src/dbtest/t/oracle/causality-violation-anomaly.txt deleted file mode 100644 index 13e6adc1..00000000 --- a/src/dbtest/t/oracle/causality-violation-anomaly.txt +++ /dev/null @@ -1,52 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-DROP TABLE t1; -14-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/cross-phantom.txt b/src/dbtest/t/oracle/cross-phantom.txt deleted file mode 100644 index 3e83d239..00000000 --- a/src/dbtest/t/oracle/cross-phantom.txt +++ /dev/null @@ -1,107 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-DROP TABLE t1; -17-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/oracle/cross-phenomenon.txt b/src/dbtest/t/oracle/cross-phenomenon.txt deleted file mode 100644 index 558ded18..00000000 --- a/src/dbtest/t/oracle/cross-phenomenon.txt +++ /dev/null @@ -1,109 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-DROP TABLE t1; -17-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/dirty-read.txt b/src/dbtest/t/oracle/dirty-read.txt deleted file mode 100644 index 11978bd0..00000000 --- a/src/dbtest/t/oracle/dirty-read.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -3-1-INSERT INTO t1 VALUES (0, 0); -4-2-SELECT * from t1 WHERE k = 0; -5-1-ROLLBACK; -6-2-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/oracle/dirty-write1.txt b/src/dbtest/t/oracle/dirty-write1.txt deleted file mode 100644 index 7f2ce606..00000000 --- a/src/dbtest/t/oracle/dirty-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/oracle/dirty-write2.txt b/src/dbtest/t/oracle/dirty-write2.txt deleted file mode 100644 index 5fc0eb32..00000000 --- a/src/dbtest/t/oracle/dirty-write2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t2 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t2 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t2; -8-3-DROP TABLE t2; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/oracle/double-write-skew.txt b/src/dbtest/t/oracle/double-write-skew.txt deleted file mode 100644 index d47d04af..00000000 --- a/src/dbtest/t/oracle/double-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -5-0,1 -9-0,1 1,1 - -5-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/oracle/double-write-skew1-1.txt b/src/dbtest/t/oracle/double-write-skew1-1.txt deleted file mode 100644 index 31338a02..00000000 --- a/src/dbtest/t/oracle/double-write-skew1-1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/oracle/double-write-skew1-2.txt b/src/dbtest/t/oracle/double-write-skew1-2.txt deleted file mode 100644 index 9e6e5e2f..00000000 --- a/src/dbtest/t/oracle/double-write-skew1-2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t8; -0-1-CREATE TABLE t8 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t8 VALUES (0, 0); -0-1-INSERT INTO t8 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t8 set v=1 where k=0; -3-2-begin; -4-2-update t8 set v=2 where k=0; -5-2-update t8 set v=1 where k=1; -6-1-select * from t8 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t8; -10-3-DROP TABLE t8; -11-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/double-write-skew1-3.txt b/src/dbtest/t/oracle/double-write-skew1-3.txt deleted file mode 100644 index dc7344e5..00000000 --- a/src/dbtest/t/oracle/double-write-skew1-3.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/double-write-skew2.txt b/src/dbtest/t/oracle/double-write-skew2.txt deleted file mode 100644 index 15088618..00000000 --- a/src/dbtest/t/oracle/double-write-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/oracle/fractured-reads.txt b/src/dbtest/t/oracle/fractured-reads.txt deleted file mode 100644 index 6f1a1f74..00000000 --- a/src/dbtest/t/oracle/fractured-reads.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-DROP TABLE t1; -12-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/oracle/full-write-skew1.txt b/src/dbtest/t/oracle/full-write-skew1.txt deleted file mode 100644 index f8b6aceb..00000000 --- a/src/dbtest/t/oracle/full-write-skew1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t12; -0-1-CREATE TABLE t12 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t12 VALUES (0, 0); -0-1-INSERT INTO t12 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t12 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t12 SET v=2 WHERE k=0; -5-2-UPDATE t12 SET v=1 WHERE k=1; -6-1-UPDATE t12 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t12; -10-3-DROP TABLE t12; -11-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/oracle/full-write-skew2.txt b/src/dbtest/t/oracle/full-write-skew2.txt deleted file mode 100644 index 5d20a957..00000000 --- a/src/dbtest/t/oracle/full-write-skew2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t13; -0-1-CREATE TABLE t13 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t13 VALUES (0, 0); -0-1-INSERT INTO t13 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t13 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t13 SET v=2 WHERE k=0; -5-2-UPDATE t13 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t13 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t13; -10-3-DROP TABLE t13; -11-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/oracle/half-predicate-read-skew.txt b/src/dbtest/t/oracle/half-predicate-read-skew.txt deleted file mode 100644 index 6694025a..00000000 --- a/src/dbtest/t/oracle/half-predicate-read-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT;; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-1,1 -9-1,2 0,0 - -2-0,0 -7-1,2 -9-1,2 0,0 -} diff --git a/src/dbtest/t/oracle/half-predicate-write-skew.txt b/src/dbtest/t/oracle/half-predicate-write-skew.txt deleted file mode 100644 index 66cfbe16..00000000 --- a/src/dbtest/t/oracle/half-predicate-write-skew.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/oracle/intermediate-reads.txt b/src/dbtest/t/oracle/intermediate-reads.txt deleted file mode 100644 index 905df765..00000000 --- a/src/dbtest/t/oracle/intermediate-reads.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-drop table t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-drop table t1; -10-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/oracle/intermediate-write1.txt b/src/dbtest/t/oracle/intermediate-write1.txt deleted file mode 100644 index ea77a0de..00000000 --- a/src/dbtest/t/oracle/intermediate-write1.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t3; -0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t3 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t3 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t3 SET v=2 WHERE k=0; -5-1-UPDATE t3 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t3; -9-3-DROP TABLE t3; -10-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/oracle/intermediate-write2.txt b/src/dbtest/t/oracle/intermediate-write2.txt deleted file mode 100644 index f827b424..00000000 --- a/src/dbtest/t/oracle/intermediate-write2.txt +++ /dev/null @@ -1,21 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t4; -0-1-CREATE TABLE t4 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t4 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t4 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t4 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t4 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t4; -9-3-DROP TABLE t4; -10-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/oracle/long-fork-anomaly.txt b/src/dbtest/t/oracle/long-fork-anomaly.txt deleted file mode 100644 index fbd7d224..00000000 --- a/src/dbtest/t/oracle/long-fork-anomaly.txt +++ /dev/null @@ -1,109 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-DROP TABLE t1; -17-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/lost-self-update1.txt b/src/dbtest/t/oracle/lost-self-update1.txt deleted file mode 100644 index de58b8b0..00000000 --- a/src/dbtest/t/oracle/lost-self-update1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/oracle/lost-self-update2.txt b/src/dbtest/t/oracle/lost-self-update2.txt deleted file mode 100644 index f0a2cb68..00000000 --- a/src/dbtest/t/oracle/lost-self-update2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/oracle/lost-update.txt b/src/dbtest/t/oracle/lost-update.txt deleted file mode 100644 index c9fc1ec3..00000000 --- a/src/dbtest/t/oracle/lost-update.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/oracle/lost-update1.txt b/src/dbtest/t/oracle/lost-update1.txt deleted file mode 100644 index 7c9797b1..00000000 --- a/src/dbtest/t/oracle/lost-update1.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/oracle/lost-update2.txt b/src/dbtest/t/oracle/lost-update2.txt deleted file mode 100644 index f15615ef..00000000 --- a/src/dbtest/t/oracle/lost-update2.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-1-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/oracle/middle-read.txt b/src/dbtest/t/oracle/middle-read.txt deleted file mode 100644 index 6a6e155a..00000000 --- a/src/dbtest/t/oracle/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/oracle/non-repeatable-read1.txt b/src/dbtest/t/oracle/non-repeatable-read1.txt deleted file mode 100644 index 2758b374..00000000 --- a/src/dbtest/t/oracle/non-repeatable-read1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/oracle/non-repeatable-read2.txt b/src/dbtest/t/oracle/non-repeatable-read2.txt deleted file mode 100644 index f1a126d5..00000000 --- a/src/dbtest/t/oracle/non-repeatable-read2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/oracle/phantom-read.txt b/src/dbtest/t/oracle/phantom-read.txt deleted file mode 100644 index 28a8dd28..00000000 --- a/src/dbtest/t/oracle/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/oracle/predicate-sawtooth.txt b/src/dbtest/t/oracle/predicate-sawtooth.txt deleted file mode 100644 index 1985e507..00000000 --- a/src/dbtest/t/oracle/predicate-sawtooth.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/oracle/primary-colors.txt b/src/dbtest/t/oracle/primary-colors.txt deleted file mode 100644 index ae93ed7a..00000000 --- a/src/dbtest/t/oracle/primary-colors.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-drop table dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'red'); -0-1-insert into dots values(2, 'yellow'); -0-1-insert into dots values(3, 'blue'); -0-1-insert into dots values(4, 'red'); -0-1-insert into dots values(5, 'yellow'); -0-1-insert into dots values(6, 'blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-drop table dots; -12-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/oracle/primary-colors2.txt b/src/dbtest/t/oracle/primary-colors2.txt deleted file mode 100644 index 66dd47e3..00000000 --- a/src/dbtest/t/oracle/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-drop table dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/oracle/rat-special.txt b/src/dbtest/t/oracle/rat-special.txt deleted file mode 100644 index 92d342da..00000000 --- a/src/dbtest/t/oracle/rat-special.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/oracle/rat-special2.txt b/src/dbtest/t/oracle/rat-special2.txt deleted file mode 100644 index d980b0ca..00000000 --- a/src/dbtest/t/oracle/rat-special2.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/oracle/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/oracle/read-only-transaction-anomaly.txt b/src/dbtest/t/oracle/read-only-transaction-anomaly.txt deleted file mode 100644 index 8820ce84..00000000 --- a/src/dbtest/t/oracle/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,66 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-DROP TABLE t1; -16-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/oracle/read-skew1.txt b/src/dbtest/t/oracle/read-skew1.txt deleted file mode 100644 index ecc427ea..00000000 --- a/src/dbtest/t/oracle/read-skew1.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/read-skew2.txt b/src/dbtest/t/oracle/read-skew2.txt deleted file mode 100644 index d335f57a..00000000 --- a/src/dbtest/t/oracle/read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-INSERT INTO t2 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t2 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t2 SET v=1 WHERE k=0; -5-2-UPDATE t2 SET v=1 WHERE k=1; -6-1-SELECT * from t2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t2; -10-3-DROP TABLE t2; -11-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/read-skew3.txt b/src/dbtest/t/oracle/read-skew3.txt deleted file mode 100644 index 6331ea2e..00000000 --- a/src/dbtest/t/oracle/read-skew3.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t2; -0-1-CREATE TABLE t2 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t2 VALUES (0, 0); -0-1-INSERT INTO t2 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t2 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t2 WHERE k=0; -5-2-SELECT * from t2 WHERE k=1; -6-1-UPDATE t2 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t2; -10-3-DROP TABLE t2; -11-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/read-write-skew1-1.txt b/src/dbtest/t/oracle/read-write-skew1-1.txt deleted file mode 100644 index 8424ebdf..00000000 --- a/src/dbtest/t/oracle/read-write-skew1-1.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t10; -0-1-CREATE TABLE t10 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t10 VALUES (0, 0); -0-1-INSERT INTO t10 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t10 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t10 SET v=1 WHERE k=0; -5-2-UPDATE t10 SET v=2 WHERE k=1; -6-1-UPDATE t10 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t10; -10-3-DROP TABLE t10; -11-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/read-write-skew1-2.txt b/src/dbtest/t/oracle/read-write-skew1-2.txt deleted file mode 100644 index 241b5345..00000000 --- a/src/dbtest/t/oracle/read-write-skew1-2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t11; -0-1-CREATE TABLE t11 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t11 VALUES (0, 0); -0-1-INSERT INTO t11 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t11 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t11 SET v=2 WHERE k=0; -5-2-SELECT * from t11 WHERE k=1; -6-1-UPDATE t11 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t11; -10-3-DROP TABLE t11; -11-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/oracle/read-write-skew2.txt b/src/dbtest/t/oracle/read-write-skew2.txt deleted file mode 100644 index 12e8529c..00000000 --- a/src/dbtest/t/oracle/read-write-skew2.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/oracle/sawtooth.txt b/src/dbtest/t/oracle/sawtooth.txt deleted file mode 100644 index 921d3dce..00000000 --- a/src/dbtest/t/oracle/sawtooth.txt +++ /dev/null @@ -1,54 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt b/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt deleted file mode 100644 index 62a08674..00000000 --- a/src/dbtest/t/oracle/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,33 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-DROP TABLE t1; -12-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/oracle/step-read-skew.txt b/src/dbtest/t/oracle/step-read-skew.txt deleted file mode 100644 index b26799e0..00000000 --- a/src/dbtest/t/oracle/step-read-skew.txt +++ /dev/null @@ -1,46 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-DROP TABLE t1; -15-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/oracle/step-wat.txt b/src/dbtest/t/oracle/step-wat.txt deleted file mode 100644 index 1acfbc43..00000000 --- a/src/dbtest/t/oracle/step-wat.txt +++ /dev/null @@ -1,69 +0,0 @@ -ParamNum:2 -0-1-drop table t14; -0-1-CREATE TABLE t14 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t14 VALUES (0, 0); -0-1-INSERT INTO t14 VALUES (1, 0); -0-1-INSERT INTO t14 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t14 where k=1; -3-2-BEGIN; -4-2-select * from t14 where k=0; -5-2-update t14 set v=1 where k=0; -6-2-select * from t14 where k=1; -7-2-update t14 set v=1 where k=1; -8-3-BEGIN; -9-3-update t14 set v=2 where k=0; -10-2-commit; -11-3-select * from t14 where k=2; -12-3-update t14 set v=1 where k=2; -13-3-commit; -14-1-select * from t14 where k=2; -15-1-commit; -16-4-select * from t14; -17-4-drop table t14; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt b/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt deleted file mode 100644 index b9b63110..00000000 --- a/src/dbtest/t/oracle/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-commit; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-null -9-1,1 0,0 - -2-0,0 -7-1,1 -9-1,1 0,0 -} diff --git a/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt b/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt deleted file mode 100644 index 60993d01..00000000 --- a/src/dbtest/t/oracle/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/oracle/total-same-predicate-read-skew.txt b/src/dbtest/t/oracle/total-same-predicate-read-skew.txt deleted file mode 100644 index 471c53b2..00000000 --- a/src/dbtest/t/oracle/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-commit; -7-1-select * from t1 where v=0; -8-1-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt b/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt deleted file mode 100644 index 7095bccd..00000000 --- a/src/dbtest/t/oracle/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-COMMIT; -7-1-select * from t1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/oracle/total-same-predicate-write-skew.txt b/src/dbtest/t/oracle/total-same-predicate-write-skew.txt deleted file mode 100644 index 613944d4..00000000 --- a/src/dbtest/t/oracle/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/oracle/unnamed-anomaly.txt b/src/dbtest/t/oracle/unnamed-anomaly.txt deleted file mode 100644 index c504ec08..00000000 --- a/src/dbtest/t/oracle/unnamed-anomaly.txt +++ /dev/null @@ -1,69 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-DROP TABLE t1; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/oracle/unrepeatable-read.txt b/src/dbtest/t/oracle/unrepeatable-read.txt deleted file mode 100644 index 09dddb61..00000000 --- a/src/dbtest/t/oracle/unrepeatable-read.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-DROP TABLE t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/oracle/write-read-skew1.txt b/src/dbtest/t/oracle/write-read-skew1.txt deleted file mode 100644 index d186f79f..00000000 --- a/src/dbtest/t/oracle/write-read-skew1.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/oracle/write-read-skew2.txt b/src/dbtest/t/oracle/write-read-skew2.txt deleted file mode 100644 index f20ddfb4..00000000 --- a/src/dbtest/t/oracle/write-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t3; -0-1-CREATE TABLE t3 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t3 VALUES (0, 0); -0-1-INSERT INTO t3 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t3 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t3 where k=0; -5-2-update t3 set v=1 where k=1; -6-1-select * from t3 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t3; -10-3-DROP TABLE t3; -11-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/oracle/write-skew-black-white.txt b/src/dbtest/t/oracle/write-skew-black-white.txt deleted file mode 100644 index e4d4b497..00000000 --- a/src/dbtest/t/oracle/write-skew-black-white.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'black'); -0-1-insert into dots values(2, 'white'); -0-1-insert into dots values(3, 'black'); -0-1-insert into dots values(4, 'white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-4-DROP TABLE dots; -10-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/oracle/write-skew-intersecting-data.txt b/src/dbtest/t/oracle/write-skew-intersecting-data.txt deleted file mode 100644 index 91577120..00000000 --- a/src/dbtest/t/oracle/write-skew-intersecting-data.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE mytab; -0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10); -0-1-INSERT INTO mytab VALUES(1, 20); -0-1-INSERT INTO mytab VALUES(2, 100); -0-1-INSERT INTO mytab VALUES(2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -3-1-INSERT INTO mytab VALUES (2, 30); -4-2-BEGIN; -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -6-2-INSERT INTO mytab VALUES (1, 300); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-commit; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/oracle/write-skew-overdraft-protection.txt b/src/dbtest/t/oracle/write-skew-overdraft-protection.txt deleted file mode 100644 index 87c9bc05..00000000 --- a/src/dbtest/t/oracle/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:3 -0-1-drop table account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500); -0-1-insert into account values('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-drop table account; -12-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/oracle/write-skew.txt b/src/dbtest/t/oracle/write-skew.txt deleted file mode 100644 index cf78e763..00000000 --- a/src/dbtest/t/oracle/write-skew.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/aborted-reads.txt b/src/dbtest/t/pg/aborted-reads.txt deleted file mode 100644 index c1a19b85..00000000 --- a/src/dbtest/t/pg/aborted-reads.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-3-COMMIT; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/pg/causality-violation-anomaly.txt b/src/dbtest/t/pg/causality-violation-anomaly.txt deleted file mode 100644 index 291f51ff..00000000 --- a/src/dbtest/t/pg/causality-violation-anomaly.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/pg/cross-phantom.txt b/src/dbtest/t/pg/cross-phantom.txt deleted file mode 100644 index c0dac7eb..00000000 --- a/src/dbtest/t/pg/cross-phantom.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/pg/cross-phenomenon.txt b/src/dbtest/t/pg/cross-phenomenon.txt deleted file mode 100644 index 0b53fcbe..00000000 --- a/src/dbtest/t/pg/cross-phenomenon.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/pg/dirty-read.txt b/src/dbtest/t/pg/dirty-read.txt deleted file mode 100644 index 6e50dd41..00000000 --- a/src/dbtest/t/pg/dirty-read.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -3-1-INSERT INTO t1 VALUES (0, 0); -4-2-SELECT * from t1 WHERE k = 0; -5-1-ROLLBACK; -6-2-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/pg/dirty-write.txt b/src/dbtest/t/pg/dirty-write.txt deleted file mode 100644 index 54fcbfb8..00000000 --- a/src/dbtest/t/pg/dirty-write.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/pg/dirty-write1.txt b/src/dbtest/t/pg/dirty-write1.txt deleted file mode 100644 index 34f0e9dc..00000000 --- a/src/dbtest/t/pg/dirty-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/pg/dirty-write2.txt b/src/dbtest/t/pg/dirty-write2.txt deleted file mode 100644 index 507f8d52..00000000 --- a/src/dbtest/t/pg/dirty-write2.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/pg/double-write-skew.txt b/src/dbtest/t/pg/double-write-skew.txt deleted file mode 100644 index a14ca9ec..00000000 --- a/src/dbtest/t/pg/double-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -5-0,1 -9-0,1 1,1 - -5-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/pg/double-write-skew1-1.txt b/src/dbtest/t/pg/double-write-skew1-1.txt deleted file mode 100644 index 4b09edc5..00000000 --- a/src/dbtest/t/pg/double-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/pg/double-write-skew1-2.txt b/src/dbtest/t/pg/double-write-skew1-2.txt deleted file mode 100644 index 22fcab9e..00000000 --- a/src/dbtest/t/pg/double-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/double-write-skew1-3.txt b/src/dbtest/t/pg/double-write-skew1-3.txt deleted file mode 100644 index dd265dde..00000000 --- a/src/dbtest/t/pg/double-write-skew1-3.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/double-write-skew2.txt b/src/dbtest/t/pg/double-write-skew2.txt deleted file mode 100644 index 08e18580..00000000 --- a/src/dbtest/t/pg/double-write-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/pg/fractured-reads.txt b/src/dbtest/t/pg/fractured-reads.txt deleted file mode 100644 index 31d8850e..00000000 --- a/src/dbtest/t/pg/fractured-reads.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/pg/full-write-skew1.txt b/src/dbtest/t/pg/full-write-skew1.txt deleted file mode 100644 index bfd24587..00000000 --- a/src/dbtest/t/pg/full-write-skew1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-UPDATE t1 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/pg/full-write-skew2.txt b/src/dbtest/t/pg/full-write-skew2.txt deleted file mode 100644 index 3917320f..00000000 --- a/src/dbtest/t/pg/full-write-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/pg/half-predicate-read-skew.txt b/src/dbtest/t/pg/half-predicate-read-skew.txt deleted file mode 100644 index 5cd208d8..00000000 --- a/src/dbtest/t/pg/half-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-1,1 -9-1,2 0,0 - -2-0,0 -7-1,2 -9-1,2 0,0 -} diff --git a/src/dbtest/t/pg/half-predicate-write-skew.txt b/src/dbtest/t/pg/half-predicate-write-skew.txt deleted file mode 100644 index d8d3056c..00000000 --- a/src/dbtest/t/pg/half-predicate-write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/pg/intermediate-reads.txt b/src/dbtest/t/pg/intermediate-reads.txt deleted file mode 100644 index cd9132fe..00000000 --- a/src/dbtest/t/pg/intermediate-reads.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/pg/intermediate-write1.txt b/src/dbtest/t/pg/intermediate-write1.txt deleted file mode 100644 index c5c3ea3a..00000000 --- a/src/dbtest/t/pg/intermediate-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/pg/intermediate-write2.txt b/src/dbtest/t/pg/intermediate-write2.txt deleted file mode 100644 index adb4adeb..00000000 --- a/src/dbtest/t/pg/intermediate-write2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -0-1-SET LOCAL lock_timeout = '1s'; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -0-2-SET LOCAL lock_timeout = '1s'; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/pg/long-fork-anomaly.txt b/src/dbtest/t/pg/long-fork-anomaly.txt deleted file mode 100644 index 727c16f0..00000000 --- a/src/dbtest/t/pg/long-fork-anomaly.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/pg/lost-self-update1.txt b/src/dbtest/t/pg/lost-self-update1.txt deleted file mode 100644 index ad197022..00000000 --- a/src/dbtest/t/pg/lost-self-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/pg/lost-self-update2.txt b/src/dbtest/t/pg/lost-self-update2.txt deleted file mode 100644 index 7b8a0059..00000000 --- a/src/dbtest/t/pg/lost-self-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/pg/lost-update.txt b/src/dbtest/t/pg/lost-update.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/pg/lost-update.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/pg/lost-update1.txt b/src/dbtest/t/pg/lost-update1.txt deleted file mode 100644 index 26240f28..00000000 --- a/src/dbtest/t/pg/lost-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/pg/lost-update2.txt b/src/dbtest/t/pg/lost-update2.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/pg/lost-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/pg/middle-read.txt b/src/dbtest/t/pg/middle-read.txt deleted file mode 100644 index f8319ec3..00000000 --- a/src/dbtest/t/pg/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/pg/non-repeatable-read1.txt b/src/dbtest/t/pg/non-repeatable-read1.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/pg/non-repeatable-read1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/pg/non-repeatable-read2.txt b/src/dbtest/t/pg/non-repeatable-read2.txt deleted file mode 100644 index 16a4b884..00000000 --- a/src/dbtest/t/pg/non-repeatable-read2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/pg/phantom-read.txt b/src/dbtest/t/pg/phantom-read.txt deleted file mode 100644 index 408f7737..00000000 --- a/src/dbtest/t/pg/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/pg/predicate-sawtooth.txt b/src/dbtest/t/pg/predicate-sawtooth.txt deleted file mode 100644 index 07277c6d..00000000 --- a/src/dbtest/t/pg/predicate-sawtooth.txt +++ /dev/null @@ -1,50 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/pg/primary-colors.txt b/src/dbtest/t/pg/primary-colors.txt deleted file mode 100644 index 95e71521..00000000 --- a/src/dbtest/t/pg/primary-colors.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'red'); -0-1-insert into dots values(2, 'yellow'); -0-1-insert into dots values(3, 'blue'); -0-1-insert into dots values(4, 'red'); -0-1-insert into dots values(5, 'yellow'); -0-1-insert into dots values(6, 'blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/pg/primary-colors2.txt b/src/dbtest/t/pg/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/pg/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/pg/rat-special.txt b/src/dbtest/t/pg/rat-special.txt deleted file mode 100644 index 2ab8db87..00000000 --- a/src/dbtest/t/pg/rat-special.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/pg/rat-special2.txt b/src/dbtest/t/pg/rat-special2.txt deleted file mode 100644 index d99cfc58..00000000 --- a/src/dbtest/t/pg/rat-special2.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/pg/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/pg/read-only-transaction-anomaly.txt b/src/dbtest/t/pg/read-only-transaction-anomaly.txt deleted file mode 100644 index a684704c..00000000 --- a/src/dbtest/t/pg/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,65 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/pg/read-skew.txt b/src/dbtest/t/pg/read-skew.txt deleted file mode 100644 index 2a500247..00000000 --- a/src/dbtest/t/pg/read-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-skew1.txt b/src/dbtest/t/pg/read-skew1.txt deleted file mode 100644 index 7519b18a..00000000 --- a/src/dbtest/t/pg/read-skew1.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-skew2.txt b/src/dbtest/t/pg/read-skew2.txt deleted file mode 100644 index 0075542e..00000000 --- a/src/dbtest/t/pg/read-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-SELECT * from t1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-skew3.txt b/src/dbtest/t/pg/read-skew3.txt deleted file mode 100644 index 16031984..00000000 --- a/src/dbtest/t/pg/read-skew3.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-write-skew1-1.txt b/src/dbtest/t/pg/read-write-skew1-1.txt deleted file mode 100644 index 0ded781d..00000000 --- a/src/dbtest/t/pg/read-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=2 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-write-skew1-2.txt b/src/dbtest/t/pg/read-write-skew1-2.txt deleted file mode 100644 index 2ae13088..00000000 --- a/src/dbtest/t/pg/read-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/pg/read-write-skew2.txt b/src/dbtest/t/pg/read-write-skew2.txt deleted file mode 100644 index 6c82b70c..00000000 --- a/src/dbtest/t/pg/read-write-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/pg/sawtooth.txt b/src/dbtest/t/pg/sawtooth.txt deleted file mode 100644 index 4e57bfc5..00000000 --- a/src/dbtest/t/pg/sawtooth.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/pg/serial-concurrent-phenomenon.txt b/src/dbtest/t/pg/serial-concurrent-phenomenon.txt deleted file mode 100644 index e0135311..00000000 --- a/src/dbtest/t/pg/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/pg/step-read-skew.txt b/src/dbtest/t/pg/step-read-skew.txt deleted file mode 100644 index 7b1c68f5..00000000 --- a/src/dbtest/t/pg/step-read-skew.txt +++ /dev/null @@ -1,45 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/pg/step-wat.txt b/src/dbtest/t/pg/step-wat.txt deleted file mode 100644 index c80fdf28..00000000 --- a/src/dbtest/t/pg/step-wat.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-3-BEGIN; -9-3-update t1 set v=2 where k=0; -10-2-commit; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/pg/total-diff-predicate-read-skew.txt b/src/dbtest/t/pg/total-diff-predicate-read-skew.txt deleted file mode 100644 index aa89d7e3..00000000 --- a/src/dbtest/t/pg/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-1,1 0,0 - -2-0,0 -7-1,1 -9-1,1 0,0 -} diff --git a/src/dbtest/t/pg/total-diff-predicate-write-skew.txt b/src/dbtest/t/pg/total-diff-predicate-write-skew.txt deleted file mode 100644 index 560206ed..00000000 --- a/src/dbtest/t/pg/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/pg/total-same-predicate-read-skew.txt b/src/dbtest/t/pg/total-same-predicate-read-skew.txt deleted file mode 100644 index 0c39b464..00000000 --- a/src/dbtest/t/pg/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-COMMIT; -7-1-select * from t1 where v=0; -8-1-COMMIT: -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/pg/total-same-predicate-read-skew2.txt b/src/dbtest/t/pg/total-same-predicate-read-skew2.txt deleted file mode 100644 index 3456462b..00000000 --- a/src/dbtest/t/pg/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-commit; -7-1-select * from t1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/pg/total-same-predicate-write-skew.txt b/src/dbtest/t/pg/total-same-predicate-write-skew.txt deleted file mode 100644 index 5174028f..00000000 --- a/src/dbtest/t/pg/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/pg/unnamed-anomaly.txt b/src/dbtest/t/pg/unnamed-anomaly.txt deleted file mode 100644 index b0eeff37..00000000 --- a/src/dbtest/t/pg/unnamed-anomaly.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-1,1 0,2 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-1,1 0,2 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-1,1 0,2 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-1,1 0,2 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-1,1 0,2 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-1,1 0,2 2,1 -} diff --git a/src/dbtest/t/pg/unrepeatable-read.txt b/src/dbtest/t/pg/unrepeatable-read.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/pg/unrepeatable-read.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/pg/write-read-skew1.txt b/src/dbtest/t/pg/write-read-skew1.txt deleted file mode 100644 index 95c25f23..00000000 --- a/src/dbtest/t/pg/write-read-skew1.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/pg/write-read-skew2.txt b/src/dbtest/t/pg/write-read-skew2.txt deleted file mode 100644 index ed383947..00000000 --- a/src/dbtest/t/pg/write-read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/pg/write-skew-black-white.txt b/src/dbtest/t/pg/write-skew-black-white.txt deleted file mode 100644 index 087f5dc7..00000000 --- a/src/dbtest/t/pg/write-skew-black-white.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'black'); -0-1-insert into dots values(2, 'white'); -0-1-insert into dots values(3, 'black'); -0-1-insert into dots values(4, 'white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/pg/write-skew-intersecting-data.txt b/src/dbtest/t/pg/write-skew-intersecting-data.txt deleted file mode 100644 index 29bd101a..00000000 --- a/src/dbtest/t/pg/write-skew-intersecting-data.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS mytab; -0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -3-1-INSERT INTO mytab VALUES (2, 30); -4-2-BEGIN; -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -6-2-INSERT INTO mytab VALUES (1, 300); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-COMMIT; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/pg/write-skew-overdraft-protection.txt b/src/dbtest/t/pg/write-skew-overdraft-protection.txt deleted file mode 100644 index 615c4e7c..00000000 --- a/src/dbtest/t/pg/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:3 -0-1-drop table if exists account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/pg/write-skew.txt b/src/dbtest/t/pg/write-skew.txt deleted file mode 100644 index 51eb55df..00000000 --- a/src/dbtest/t/pg/write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/aborted-reads.txt b/src/dbtest/t/sqlserver/aborted-reads.txt deleted file mode 100644 index c1a19b85..00000000 --- a/src/dbtest/t/sqlserver/aborted-reads.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-3-COMMIT; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/sqlserver/causality-violation-anomaly.txt b/src/dbtest/t/sqlserver/causality-violation-anomaly.txt deleted file mode 100644 index 291f51ff..00000000 --- a/src/dbtest/t/sqlserver/causality-violation-anomaly.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/cross-phantom.txt b/src/dbtest/t/sqlserver/cross-phantom.txt deleted file mode 100644 index c0dac7eb..00000000 --- a/src/dbtest/t/sqlserver/cross-phantom.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/sqlserver/cross-phenomenon.txt b/src/dbtest/t/sqlserver/cross-phenomenon.txt deleted file mode 100644 index 0b53fcbe..00000000 --- a/src/dbtest/t/sqlserver/cross-phenomenon.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/dirty-read.txt b/src/dbtest/t/sqlserver/dirty-read.txt deleted file mode 100644 index 6e50dd41..00000000 --- a/src/dbtest/t/sqlserver/dirty-read.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -3-1-INSERT INTO t1 VALUES (0, 0); -4-2-SELECT * from t1 WHERE k = 0; -5-1-ROLLBACK; -6-2-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -4-null -7-null -} diff --git a/src/dbtest/t/sqlserver/dirty-write.txt b/src/dbtest/t/sqlserver/dirty-write.txt deleted file mode 100644 index 54fcbfb8..00000000 --- a/src/dbtest/t/sqlserver/dirty-write.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/sqlserver/dirty-write1.txt b/src/dbtest/t/sqlserver/dirty-write1.txt deleted file mode 100644 index 34f0e9dc..00000000 --- a/src/dbtest/t/sqlserver/dirty-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/sqlserver/dirty-write2.txt b/src/dbtest/t/sqlserver/dirty-write2.txt deleted file mode 100644 index 507f8d52..00000000 --- a/src/dbtest/t/sqlserver/dirty-write2.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/sqlserver/double-write-skew.txt b/src/dbtest/t/sqlserver/double-write-skew.txt deleted file mode 100644 index a14ca9ec..00000000 --- a/src/dbtest/t/sqlserver/double-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -5-0,1 -9-0,1 1,1 - -5-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-1.txt b/src/dbtest/t/sqlserver/double-write-skew1-1.txt deleted file mode 100644 index 4b09edc5..00000000 --- a/src/dbtest/t/sqlserver/double-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-2.txt b/src/dbtest/t/sqlserver/double-write-skew1-2.txt deleted file mode 100644 index 22fcab9e..00000000 --- a/src/dbtest/t/sqlserver/double-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/double-write-skew1-3.txt b/src/dbtest/t/sqlserver/double-write-skew1-3.txt deleted file mode 100644 index dd265dde..00000000 --- a/src/dbtest/t/sqlserver/double-write-skew1-3.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/double-write-skew2.txt b/src/dbtest/t/sqlserver/double-write-skew2.txt deleted file mode 100644 index 08e18580..00000000 --- a/src/dbtest/t/sqlserver/double-write-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/sqlserver/fractured-reads.txt b/src/dbtest/t/sqlserver/fractured-reads.txt deleted file mode 100644 index 31d8850e..00000000 --- a/src/dbtest/t/sqlserver/fractured-reads.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/sqlserver/full-write-skew1.txt b/src/dbtest/t/sqlserver/full-write-skew1.txt deleted file mode 100644 index bfd24587..00000000 --- a/src/dbtest/t/sqlserver/full-write-skew1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-UPDATE t1 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/sqlserver/full-write-skew2.txt b/src/dbtest/t/sqlserver/full-write-skew2.txt deleted file mode 100644 index 3917320f..00000000 --- a/src/dbtest/t/sqlserver/full-write-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/sqlserver/half-predicate-read-skew.txt b/src/dbtest/t/sqlserver/half-predicate-read-skew.txt deleted file mode 100644 index bcfad45b..00000000 --- a/src/dbtest/t/sqlserver/half-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-1,1 -9-0,0 1,2 - -2-0,0 -7-1,2 -9-0,0 1,2 -} diff --git a/src/dbtest/t/sqlserver/half-predicate-write-skew.txt b/src/dbtest/t/sqlserver/half-predicate-write-skew.txt deleted file mode 100644 index d8d3056c..00000000 --- a/src/dbtest/t/sqlserver/half-predicate-write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/sqlserver/intermediate-reads.txt b/src/dbtest/t/sqlserver/intermediate-reads.txt deleted file mode 100644 index cd9132fe..00000000 --- a/src/dbtest/t/sqlserver/intermediate-reads.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/sqlserver/intermediate-write1.txt b/src/dbtest/t/sqlserver/intermediate-write1.txt deleted file mode 100644 index c5c3ea3a..00000000 --- a/src/dbtest/t/sqlserver/intermediate-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/sqlserver/intermediate-write2.txt b/src/dbtest/t/sqlserver/intermediate-write2.txt deleted file mode 100644 index 7faf77b0..00000000 --- a/src/dbtest/t/sqlserver/intermediate-write2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/sqlserver/long-fork-anomaly.txt b/src/dbtest/t/sqlserver/long-fork-anomaly.txt deleted file mode 100644 index 727c16f0..00000000 --- a/src/dbtest/t/sqlserver/long-fork-anomaly.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/lost-self-update1.txt b/src/dbtest/t/sqlserver/lost-self-update1.txt deleted file mode 100644 index ad197022..00000000 --- a/src/dbtest/t/sqlserver/lost-self-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/lost-self-update2.txt b/src/dbtest/t/sqlserver/lost-self-update2.txt deleted file mode 100644 index 7b8a0059..00000000 --- a/src/dbtest/t/sqlserver/lost-self-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/lost-update.txt b/src/dbtest/t/sqlserver/lost-update.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/sqlserver/lost-update.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/lost-update1.txt b/src/dbtest/t/sqlserver/lost-update1.txt deleted file mode 100644 index 26240f28..00000000 --- a/src/dbtest/t/sqlserver/lost-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/lost-update2.txt b/src/dbtest/t/sqlserver/lost-update2.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/sqlserver/lost-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/middle-read.txt b/src/dbtest/t/sqlserver/middle-read.txt deleted file mode 100644 index f8319ec3..00000000 --- a/src/dbtest/t/sqlserver/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/sqlserver/non-repeatable-read1.txt b/src/dbtest/t/sqlserver/non-repeatable-read1.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/sqlserver/non-repeatable-read1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/non-repeatable-read2.txt b/src/dbtest/t/sqlserver/non-repeatable-read2.txt deleted file mode 100644 index 16a4b884..00000000 --- a/src/dbtest/t/sqlserver/non-repeatable-read2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/phantom-read.txt b/src/dbtest/t/sqlserver/phantom-read.txt deleted file mode 100644 index 408f7737..00000000 --- a/src/dbtest/t/sqlserver/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/sqlserver/predicate-sawtooth.txt b/src/dbtest/t/sqlserver/predicate-sawtooth.txt deleted file mode 100644 index 07277c6d..00000000 --- a/src/dbtest/t/sqlserver/predicate-sawtooth.txt +++ /dev/null @@ -1,50 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/sqlserver/primary-colors.txt b/src/dbtest/t/sqlserver/primary-colors.txt deleted file mode 100644 index 95e71521..00000000 --- a/src/dbtest/t/sqlserver/primary-colors.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'red'); -0-1-insert into dots values(2, 'yellow'); -0-1-insert into dots values(3, 'blue'); -0-1-insert into dots values(4, 'red'); -0-1-insert into dots values(5, 'yellow'); -0-1-insert into dots values(6, 'blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/sqlserver/primary-colors2.txt b/src/dbtest/t/sqlserver/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/sqlserver/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/sqlserver/rat-special.txt b/src/dbtest/t/sqlserver/rat-special.txt deleted file mode 100644 index 2ab8db87..00000000 --- a/src/dbtest/t/sqlserver/rat-special.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/sqlserver/rat-special2.txt b/src/dbtest/t/sqlserver/rat-special2.txt deleted file mode 100644 index d99cfc58..00000000 --- a/src/dbtest/t/sqlserver/rat-special2.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/sqlserver/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt b/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt deleted file mode 100644 index a684704c..00000000 --- a/src/dbtest/t/sqlserver/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,65 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/sqlserver/read-skew.txt b/src/dbtest/t/sqlserver/read-skew.txt deleted file mode 100644 index 2a500247..00000000 --- a/src/dbtest/t/sqlserver/read-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-skew1.txt b/src/dbtest/t/sqlserver/read-skew1.txt deleted file mode 100644 index 7519b18a..00000000 --- a/src/dbtest/t/sqlserver/read-skew1.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-DROP TABLE t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-skew2.txt b/src/dbtest/t/sqlserver/read-skew2.txt deleted file mode 100644 index 0075542e..00000000 --- a/src/dbtest/t/sqlserver/read-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-SELECT * from t1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-skew3.txt b/src/dbtest/t/sqlserver/read-skew3.txt deleted file mode 100644 index 16031984..00000000 --- a/src/dbtest/t/sqlserver/read-skew3.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-write-skew1-1.txt b/src/dbtest/t/sqlserver/read-write-skew1-1.txt deleted file mode 100644 index 0ded781d..00000000 --- a/src/dbtest/t/sqlserver/read-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=2 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-write-skew1-2.txt b/src/dbtest/t/sqlserver/read-write-skew1-2.txt deleted file mode 100644 index 2ae13088..00000000 --- a/src/dbtest/t/sqlserver/read-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/sqlserver/read-write-skew2.txt b/src/dbtest/t/sqlserver/read-write-skew2.txt deleted file mode 100644 index 6c82b70c..00000000 --- a/src/dbtest/t/sqlserver/read-write-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/sqlserver/sawtooth.txt b/src/dbtest/t/sqlserver/sawtooth.txt deleted file mode 100644 index 4e57bfc5..00000000 --- a/src/dbtest/t/sqlserver/sawtooth.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt b/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt deleted file mode 100644 index e0135311..00000000 --- a/src/dbtest/t/sqlserver/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/sqlserver/step-read-skew.txt b/src/dbtest/t/sqlserver/step-read-skew.txt deleted file mode 100644 index 7b1c68f5..00000000 --- a/src/dbtest/t/sqlserver/step-read-skew.txt +++ /dev/null @@ -1,45 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/sqlserver/step-wat.txt b/src/dbtest/t/sqlserver/step-wat.txt deleted file mode 100644 index c80fdf28..00000000 --- a/src/dbtest/t/sqlserver/step-wat.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-3-BEGIN; -9-3-update t1 set v=2 where k=0; -10-2-commit; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt b/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt deleted file mode 100644 index 74701f0c..00000000 --- a/src/dbtest/t/sqlserver/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,1 - -2-0,0 -7-1,1 -9-0,0 1,1 -} diff --git a/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt b/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt deleted file mode 100644 index 560206ed..00000000 --- a/src/dbtest/t/sqlserver/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt b/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt deleted file mode 100644 index 0c39b464..00000000 --- a/src/dbtest/t/sqlserver/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-COMMIT; -7-1-select * from t1 where v=0; -8-1-COMMIT: -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt b/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt deleted file mode 100644 index 3456462b..00000000 --- a/src/dbtest/t/sqlserver/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-commit; -7-1-select * from t1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt b/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt deleted file mode 100644 index 5174028f..00000000 --- a/src/dbtest/t/sqlserver/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/sqlserver/unnamed-anomaly.txt b/src/dbtest/t/sqlserver/unnamed-anomaly.txt deleted file mode 100644 index 0cac37c6..00000000 --- a/src/dbtest/t/sqlserver/unnamed-anomaly.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/sqlserver/unrepeatable-read.txt b/src/dbtest/t/sqlserver/unrepeatable-read.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/sqlserver/unrepeatable-read.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/sqlserver/write-read-skew1.txt b/src/dbtest/t/sqlserver/write-read-skew1.txt deleted file mode 100644 index 95c25f23..00000000 --- a/src/dbtest/t/sqlserver/write-read-skew1.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/sqlserver/write-read-skew2.txt b/src/dbtest/t/sqlserver/write-read-skew2.txt deleted file mode 100644 index ed383947..00000000 --- a/src/dbtest/t/sqlserver/write-read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/sqlserver/write-skew-black-white.txt b/src/dbtest/t/sqlserver/write-skew-black-white.txt deleted file mode 100644 index 087f5dc7..00000000 --- a/src/dbtest/t/sqlserver/write-skew-black-white.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS dots; -0-1-create table dots(id int not null primary key, color varchar(255) not null); -0-1-insert into dots values(1, 'black'); -0-1-insert into dots values(2, 'white'); -0-1-insert into dots values(3, 'black'); -0-1-insert into dots values(4, 'white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt b/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt deleted file mode 100644 index 29bd101a..00000000 --- a/src/dbtest/t/sqlserver/write-skew-intersecting-data.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS mytab; -0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -3-1-INSERT INTO mytab VALUES (2, 30); -4-2-BEGIN; -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -6-2-INSERT INTO mytab VALUES (1, 300); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-COMMIT; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt b/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt deleted file mode 100644 index 615c4e7c..00000000 --- a/src/dbtest/t/sqlserver/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:3 -0-1-drop table if exists account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/sqlserver/write-skew.txt b/src/dbtest/t/sqlserver/write-skew.txt deleted file mode 100644 index 51eb55df..00000000 --- a/src/dbtest/t/sqlserver/write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/aborted-reads.txt b/src/dbtest/t/tidb/aborted-reads.txt deleted file mode 100644 index c1a19b85..00000000 --- a/src/dbtest/t/tidb/aborted-reads.txt +++ /dev/null @@ -1,18 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-INSERT INTO t1 VALUES (0, 0); -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k = 0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * from t1; -8-3-COMMIT; - -serializable { -4-null -7-null -} - diff --git a/src/dbtest/t/tidb/causality-violation-anomaly.txt b/src/dbtest/t/tidb/causality-violation-anomaly.txt deleted file mode 100644 index 291f51ff..00000000 --- a/src/dbtest/t/tidb/causality-violation-anomaly.txt +++ /dev/null @@ -1,51 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=0; -5-2-commit; -6-3-BEGIN; -7-3-select * from t1 where k=0; -8-3-update t1 set v=1 where k=1; -9-3-commit; -10-1-select * from t1 where k=1; -11-1-commit; -12-4-select * from t1; -13-4-commit; - -serializable { -2-0,0 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,0 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,1 -10-1,0 -12-0,1 1,1 - -2-0,0 -7-0,0 -10-1,1 -12-0,1 1,1 - -2-0,1 -7-0,0 -10-1,1 -12-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/cross-phantom.txt b/src/dbtest/t/tidb/cross-phantom.txt deleted file mode 100644 index c0dac7eb..00000000 --- a/src/dbtest/t/tidb/cross-phantom.txt +++ /dev/null @@ -1,106 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-3-BEGIN; -6-3-insert into t1 values(0,0); -7-3-commit; -8-4-BEGIN; -9-4-insert into t1 values(1,0); -10-4-commit; -11-2-select * from t1 where v=0; -12-1-select * from t1 where v=0; -13-2-commit; -14-1-commit; -15-3-select * from t1; -16-3-commit; - -serializable { -2-null -4-null -11-null -12-null -15-0,0 1,0 - -2-null -4-0,0 -11-null -12-0,0 -15-0,0 1,0 - -2-null -4-1,0 -11-null -12-1,0 -15-0,0 1,0 - -2-null -4-0,0 1,0 -11-null -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-null -11-0,0 -12-null -15-0,0 1,0 - -2-1,0 -4-null -11-1,0 -12-null -15-0,0 1,0 - -2-0,0 1,0 -4-null -11-0,0 1,0 -12-null -15-0,0 1,0 - -2-0,0 -4-0,0 -11-0,0 -12-0,0 -15-0,0 1,0 - -2-1,0 -4-1,0 -11-1,0 -12-1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 1,0 -11-0,0 1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 -4-0,0 1,0 -11-0,0 -12-0,0 1,0 -15-0,0 1,0 - -2-1,0 -4-0,0 1,0 -11-1,0 -12-0,0 1,0 -15-0,0 1,0 - -2-0,0 1,0 -4-0,0 -11-0,0 1,0 -12-0,0 -15-0,0 1,0 - -2-0,0 1,0 -4-1,0 -11-0,0 1,0 -12-1,0 -15-0,0 1,0 -} diff --git a/src/dbtest/t/tidb/cross-phenomenon.txt b/src/dbtest/t/tidb/cross-phenomenon.txt deleted file mode 100644 index 0b53fcbe..00000000 --- a/src/dbtest/t/tidb/cross-phenomenon.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-3-BEGIN; -6-3-update t1 set v=1 where k=0; -7-3-commit; -8-4-BEGIN; -9-4-update t1 set v=1 where k=1; -10-4-commit; -11-2-select * from t1 where k=0; -12-2-commit; -13-1-select * from t1 where k=1; -14-1-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,0 -4-1,1 -13-1,1 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,1 -11-0,0 -15-0,1 1,1 - -2-0,1 -4-1,1 -13-1,0 -11-0,1 -15-0,1 1,1 - -2-0,1 -4-1,0 -13-1,1 -11-0,1 -15-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/dirty-read.txt b/src/dbtest/t/tidb/dirty-read.txt deleted file mode 100644 index c374d930..00000000 --- a/src/dbtest/t/tidb/dirty-read.txt +++ /dev/null @@ -1,17 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-2-BEGIN; -4-1-INSERT INTO t1 VALUES (0, 0); -5-2-SELECT * from t1 WHERE k = 0; -6-1-ROLLBACK; -7-2-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-null -8-null -} diff --git a/src/dbtest/t/tidb/dirty-write1.txt b/src/dbtest/t/tidb/dirty-write1.txt deleted file mode 100644 index 54fcbfb8..00000000 --- a/src/dbtest/t/tidb/dirty-write1.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-COMMIT; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/tidb/dirty-write2.txt b/src/dbtest/t/tidb/dirty-write2.txt deleted file mode 100644 index 507f8d52..00000000 --- a/src/dbtest/t/tidb/dirty-write2.txt +++ /dev/null @@ -1,19 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-ROLLBACK; -7-3-SELECT * FROM t1; -8-3-COMMIT; - -serializable { -7-0,1 - -7-0,2 -} diff --git a/src/dbtest/t/tidb/double-write-skew1-1.txt b/src/dbtest/t/tidb/double-write-skew1-1.txt deleted file mode 100644 index 4b09edc5..00000000 --- a/src/dbtest/t/tidb/double-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-update t1 set v=2 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} diff --git a/src/dbtest/t/tidb/double-write-skew1-2.txt b/src/dbtest/t/tidb/double-write-skew1-2.txt deleted file mode 100644 index 22fcab9e..00000000 --- a/src/dbtest/t/tidb/double-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-commit; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -6-1,0 -9-0,2 1,1 - -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/double-write-skew1-3.txt b/src/dbtest/t/tidb/double-write-skew1-3.txt deleted file mode 100644 index dd265dde..00000000 --- a/src/dbtest/t/tidb/double-write-skew1-3.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-update t1 set v=2 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-select * from t1 where k=1; -8-1-commit; -9-3-SELECT * FROM t1; -10-3-COMMIT; - -serializable { -7-1,0 -9-0,2 1,1 - -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/double-write-skew2.txt b/src/dbtest/t/tidb/double-write-skew2.txt deleted file mode 100644 index 08e18580..00000000 --- a/src/dbtest/t/tidb/double-write-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-begin; -2-1-update t1 set v=1 where k=0; -3-2-begin; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-commit; -7-1-update t1 set v=2 where k=1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -9-0,1 1,1 - -4-0,0 -9-0,1 1,2 -} - - diff --git a/src/dbtest/t/tidb/fractured-reads.txt b/src/dbtest/t/tidb/fractured-reads.txt deleted file mode 100644 index 31d8850e..00000000 --- a/src/dbtest/t/tidb/fractured-reads.txt +++ /dev/null @@ -1,31 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - diff --git a/src/dbtest/t/tidb/full-write-skew1.txt b/src/dbtest/t/tidb/full-write-skew1.txt deleted file mode 100644 index bfd24587..00000000 --- a/src/dbtest/t/tidb/full-write-skew1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-UPDATE t1 SET v=2 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/tidb/full-write-skew2.txt b/src/dbtest/t/tidb/full-write-skew2.txt deleted file mode 100644 index 3917320f..00000000 --- a/src/dbtest/t/tidb/full-write-skew2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -9-0,2 1,1 - -9-0,1 1,2 -} diff --git a/src/dbtest/t/tidb/half-predicate-read-skew.txt b/src/dbtest/t/tidb/half-predicate-read-skew.txt deleted file mode 100644 index bcfad45b..00000000 --- a/src/dbtest/t/tidb/half-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-update t1 set v=2 where k=1; -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-1,1 -9-0,0 1,2 - -2-0,0 -7-1,2 -9-0,0 1,2 -} diff --git a/src/dbtest/t/tidb/half-predicate-write-skew.txt b/src/dbtest/t/tidb/half-predicate-write-skew.txt deleted file mode 100644 index d8d3056c..00000000 --- a/src/dbtest/t/tidb/half-predicate-write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 1); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=2 where k=1; -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,2 -9-0,0 1,2 - -2-0,0 -4-1,1 -9-0,0 1,2 - -} diff --git a/src/dbtest/t/tidb/intermediate-reads.txt b/src/dbtest/t/tidb/intermediate-reads.txt deleted file mode 100644 index cd9132fe..00000000 --- a/src/dbtest/t/tidb/intermediate-reads.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * from t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} - diff --git a/src/dbtest/t/tidb/intermediate-write1.txt b/src/dbtest/t/tidb/intermediate-write1.txt deleted file mode 100644 index c5c3ea3a..00000000 --- a/src/dbtest/t/tidb/intermediate-write1.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=3 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/tidb/intermediate-write2.txt b/src/dbtest/t/tidb/intermediate-write2.txt deleted file mode 100644 index 7faf77b0..00000000 --- a/src/dbtest/t/tidb/intermediate-write2.txt +++ /dev/null @@ -1,20 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=3 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -8-0,2 - -8-0,3 -} diff --git a/src/dbtest/t/tidb/long-fork-anomaly.txt b/src/dbtest/t/tidb/long-fork-anomaly.txt deleted file mode 100644 index 727c16f0..00000000 --- a/src/dbtest/t/tidb/long-fork-anomaly.txt +++ /dev/null @@ -1,108 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-4-BEGIN; -2-4-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-3-BEGIN; -6-3-select * from t1 where k=1; -7-3-select * from t1 where k=0; -8-2-BEGIN; -9-2-update t1 set v=1 where k=1; -10-4-select * from t1 where k=1; -11-1-commit; -12-2-commit; -13-3-commit; -14-4-commit; -15-4-select * from t1; -16-4-commit; - -serializable { -2-0,0 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,1 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,1 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,0 -10-1,1 -15-0,1 1,1 - -2-0,1 -6-1,0 -7-0,0 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,0 -7-0,1 -10-1,0 -15-0,1 1,1 - -2-0,0 -6-1,1 -7-0,0 -10-1,0 -15-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/lost-self-update1.txt b/src/dbtest/t/tidb/lost-self-update1.txt deleted file mode 100644 index ad197022..00000000 --- a/src/dbtest/t/tidb/lost-self-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -5-0,1 -8-0,2 - -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/tidb/lost-self-update2.txt b/src/dbtest/t/tidb/lost-self-update2.txt deleted file mode 100644 index 7b8a0059..00000000 --- a/src/dbtest/t/tidb/lost-self-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -6-0,1 -8-0,2 - -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/tidb/lost-update1.txt b/src/dbtest/t/tidb/lost-update1.txt deleted file mode 100644 index 26240f28..00000000 --- a/src/dbtest/t/tidb/lost-update1.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-1-UPDATE t1 SET v=1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/tidb/lost-update2.txt b/src/dbtest/t/tidb/lost-update2.txt deleted file mode 100644 index b8ecf732..00000000 --- a/src/dbtest/t/tidb/lost-update2.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -8-0,2 - -2-0,2 -8-0,1 -} diff --git a/src/dbtest/t/tidb/middle-read.txt b/src/dbtest/t/tidb/middle-read.txt deleted file mode 100644 index f8319ec3..00000000 --- a/src/dbtest/t/tidb/middle-read.txt +++ /dev/null @@ -1,22 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-COMMIT; -6-1-UPDATE t1 SET v=2 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -4-0,2 -8-0,2 - -4-0,0 -8-0,2 -} diff --git a/src/dbtest/t/tidb/non-repeatable-read1.txt b/src/dbtest/t/tidb/non-repeatable-read1.txt deleted file mode 100644 index 6d426072..00000000 --- a/src/dbtest/t/tidb/non-repeatable-read1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-COMMIT; -6-1-SELECT * from t1 WHERE k=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -6-0,0 -8-0,1 - -2-0,1 -6-0,1 -8-0,1 -} diff --git a/src/dbtest/t/tidb/non-repeatable-read2.txt b/src/dbtest/t/tidb/non-repeatable-read2.txt deleted file mode 100644 index 16a4b884..00000000 --- a/src/dbtest/t/tidb/non-repeatable-read2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN;; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-1-SELECT * from t1 WHERE k=0; -6-2-COMMIT; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-0,0 -5-0,0 -8-0,1 - -2-0,1 -5-0,1 -8-0,1 -} diff --git a/src/dbtest/t/tidb/phantom-read.txt b/src/dbtest/t/tidb/phantom-read.txt deleted file mode 100644 index 408f7737..00000000 --- a/src/dbtest/t/tidb/phantom-read.txt +++ /dev/null @@ -1,23 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE v=0; -3-2-BEGIN; -4-2-INSERT INTO t1 VALUES (0, 0); -5-2-COMMIT; -6-1-SELECT * from t1 WHERE v=0; -7-1-COMMIT; -8-3-SELECT * FROM t1; -9-3-COMMIT; - -serializable { -2-null -6-null -8-0,0 - -2-0,0 -6-0,0 -8-0,0 -} diff --git a/src/dbtest/t/tidb/predicate-sawtooth.txt b/src/dbtest/t/tidb/predicate-sawtooth.txt deleted file mode 100644 index 07277c6d..00000000 --- a/src/dbtest/t/tidb/predicate-sawtooth.txt +++ /dev/null @@ -1,50 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where v=0; -3-2-begin; -4-2-select * from t1 where v=0; -5-3-begin; -6-3-select * from t1 where v=0; -7-1-insert into t1 values(0,0); -8-2-insert into t1 values(1,0); -9-3-insert into t1 values(2,0); -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-null -4-0,0 -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-null -4-0,0 2,0 -6-0,0 -13-0,0 1,0 2,0 - -2-1,0 -4-null -6-0,0 1,0 -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-null -6-1,0 -13-0,0 1,0 2,0 - -2-2,0 -4-0,0 2,0 -6-null -13-0,0 1,0 2,0 - -2-1,0 2,0 -4-2,0 -6-null -13-0,0 1,0 2,0 -} diff --git a/src/dbtest/t/tidb/primary-colors.txt b/src/dbtest/t/tidb/primary-colors.txt deleted file mode 100644 index 9c35d985..00000000 --- a/src/dbtest/t/tidb/primary-colors.txt +++ /dev/null @@ -1,30 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('red'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('red'); -0-1-insert into dots(color) values('yellow'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'red'; -3-2-begin; -4-2-update dots set color = 'blue' where color = 'yellow'; -5-3-begin; -6-3-update dots set color = 'red' where color = 'blue'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/tidb/primary-colors2.txt b/src/dbtest/t/tidb/primary-colors2.txt deleted file mode 100644 index d1ef3957..00000000 --- a/src/dbtest/t/tidb/primary-colors2.txt +++ /dev/null @@ -1,44 +0,0 @@ -ParamNum:2 -0-1-drop table if exists dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('redredreda'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) values('yellowabcd'); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) (select color from dots); -0-1-insert into dots(color) values('blue'); -0-1-insert into dots(color) values('blue'); -0-1-COMMIT; -1-1-begin; -2-1-update dots set color = 'yellow' where color = 'redredreda'; -3-2-begin; -4-2-update dots set color = 'red' where color = 'blue'; -5-3-begin; -6-3-update dots set color = 'blue' where color = 'yellow'; -7-1-commit; -8-2-commit; -9-3-commit; -10-4-select * from dots; -11-4-commit; - -serializable { -10-1,red 2,red 3,red 4,red 5,red 6,red -10-1,blue 2,blue 3,red 4,blue 5,blue 6,red -10-1,yellow 2,yellow 3,yellow 4,yellow 5,yellow 6,yellow -10-1,yellow 2,red 3,red 4,yellow 5,red 6,red -10-1,blue 2,blue 3,blue 4,blue 5,blue 6,blue -10-1,yellow 2,blue 3,yellow 4,yellow 5,blue 6,yellow -} diff --git a/src/dbtest/t/tidb/rat-special.txt b/src/dbtest/t/tidb/rat-special.txt deleted file mode 100644 index 2ab8db87..00000000 --- a/src/dbtest/t/tidb/rat-special.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-2-select * from t1 where k=1; -11-2-COMMIT; -12-3-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -10-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -10-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -10-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/tidb/rat-special2.txt b/src/dbtest/t/tidb/rat-special2.txt deleted file mode 100644 index d99cfc58..00000000 --- a/src/dbtest/t/tidb/rat-special2.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-3-BEGIN; -2-3-select * from t1 where k=0; -3-1-BEGIN; -4-1-update t1 set v=1 where k=0; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-BEGIN; -8-2-select * from t1 where k=2; -9-3-update t1 set v=1 where k=2; -10-3-COMMIT; -11-2-select * from t1 where k=1; -12-2-COMMIT; -13-4-select * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 - -2-0,0 -8-2,1 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,0 -8-2,0 -11-1,0 -13-0,1 1,1 2,1 - -2-0,1 -8-2,0 -11-1,1 -13-0,1 1,1 2,1 - -2-0,1 -8-2,1 -11-1,1 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt b/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt deleted file mode 100644 index 30e1cf70..00000000 --- a/src/dbtest/t/tidb/read-only-transaction-anomaly-deposit-report.txt +++ /dev/null @@ -1,40 +0,0 @@ -ParamNum:4 -0-1-drop table if exists control; -0-1-drop table if exists receipt; -0-1-create table control(deposit_no int not null); -0-1-insert into control values (1); -0-1-commit; -0-2-create table receipt (receipt_no int primary key, deposit_no int not null, payee varchar(255) not null, amount int not null); -0-2-commit; -0-2-insert into receipt values (1, 1, 'Crosby', '100'); -0-2-insert into receipt values (2, 1, 'Stills', '200'); -0-2-insert into receipt values (3, 1, 'Nash', '300'); -0-2-commit; -1-1-BEGIN; -2-1-insert into receipt values (4, (select deposit_no from control), 'Young', '100'); -3-1-select * from receipt; -4-2-BEGIN; -5-2-select deposit_no from control; -6-2-update control set deposit_no = 2; -7-2-COMMIT; -8-3-BEGIN; -9-3-select * from receipt where deposit_no = 1; -10-1-COMMIT; -11-3-COMMIT; -12-4-select * from receipt; -13-4-select * from control; -14-4-COMMIT; - -serializable { -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,1,Young,100 -13-2,,, - -3-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -5-1,,, -9-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 -12-1,1,Crosby,100 2,1,Stills,200 3,1,Nash,300 4,2,Young,100 -13-2,,, -} diff --git a/src/dbtest/t/tidb/read-only-transaction-anomaly.txt b/src/dbtest/t/tidb/read-only-transaction-anomaly.txt deleted file mode 100644 index a684704c..00000000 --- a/src/dbtest/t/tidb/read-only-transaction-anomaly.txt +++ /dev/null @@ -1,65 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-1-select * from t1 where k=1; -4-2-BEGIN; -5-2-select * from t1 where k=1; -6-2-update t1 set v=20 where k=1; -7-2-commit; -8-3-BEGIN; -9-3-select * from t1 where k=0; -10-3-select * from t1 where k=1; -11-3-commit; -12-1-update t1 set v=11 where k=0; -13-1-commit; -14-3-select * from t1; -15-3-commit; - -serializable { -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,11 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,11 -10-1,20 -14-0,11 1,20 - -2-0,0 -3-1,0 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 - -2-0,0 -3-1,20 -5-1,0 -9-0,0 -10-1,0 -14-0,11 1,20 -} diff --git a/src/dbtest/t/tidb/read-skew1.txt b/src/dbtest/t/tidb/read-skew1.txt deleted file mode 100644 index 2a500247..00000000 --- a/src/dbtest/t/tidb/read-skew1.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -7-1,0 -9-0,1 1,1 - -2-0,1 -7-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/read-skew2.txt b/src/dbtest/t/tidb/read-skew2.txt deleted file mode 100644 index 0075542e..00000000 --- a/src/dbtest/t/tidb/read-skew2.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-1-SELECT * from t1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -6-1,0 -9-0,1 1,1 - -2-0,1 -6-1,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/read-skew3.txt b/src/dbtest/t/tidb/read-skew3.txt deleted file mode 100644 index 16031984..00000000 --- a/src/dbtest/t/tidb/read-skew3.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-SELECT * from t1 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -4-0,1 -5-1,1 -9-0,1 1,1 - -4-0,0 -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/read-write-skew1-1.txt b/src/dbtest/t/tidb/read-write-skew1-1.txt deleted file mode 100644 index 0ded781d..00000000 --- a/src/dbtest/t/tidb/read-write-skew1-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=2 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,2 - -2-0,1 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/read-write-skew1-2.txt b/src/dbtest/t/tidb/read-write-skew1-2.txt deleted file mode 100644 index 2ae13088..00000000 --- a/src/dbtest/t/tidb/read-write-skew1-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-UPDATE t1 SET v=1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=2 WHERE k=0; -5-2-SELECT * from t1 WHERE k=1; -6-1-UPDATE t1 SET v=1 WHERE k=1; -7-1-COMMIT; -8-2-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -5-1,1 -9-0,2 1,1 - -5-1,0 -9-0,1 1,1 -} diff --git a/src/dbtest/t/tidb/read-write-skew2.txt b/src/dbtest/t/tidb/read-write-skew2.txt deleted file mode 100644 index 6c82b70c..00000000 --- a/src/dbtest/t/tidb/read-write-skew2.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-UPDATE t1 SET v=2 WHERE k=1; -8-1-COMMIT; -9-3-SELECT * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -9-0,1 1,1 - -2-0,1 -9-0,1 1,2 -} diff --git a/src/dbtest/t/tidb/sawtooth.txt b/src/dbtest/t/tidb/sawtooth.txt deleted file mode 100644 index 4e57bfc5..00000000 --- a/src/dbtest/t/tidb/sawtooth.txt +++ /dev/null @@ -1,53 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-select * from t1 where k=1; -5-3-begin; -6-3-select * from t1 where k=2; -7-1-update t1 set v=1 where k=1; -8-2-update t1 set v=1 where k=2; -9-3-update t1 set v=1 where k=0; -10-1-commit; -11-2-commit; -12-3-commit; -13-4-SELECT * from t1; -14-4-COMMIT; - -serializable { -2-0,0 -4-1,1 -6-2,1 -13-0,1 1,1 2,1 - -2-0,0 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,0 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,1 -13-0,1 1,1 2,1 - -2-0,1 -4-1,1 -6-2,0 -13-0,1 1,1 2,1 - -2-0,1 -4-1,0 -6-2,0 -13-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt b/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt deleted file mode 100644 index e0135311..00000000 --- a/src/dbtest/t/tidb/serial-concurrent-phenomenon.txt +++ /dev/null @@ -1,32 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT * from t1 WHERE k=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-UPDATE t1 SET v=1 WHERE k=1; -6-2-COMMIT; -7-1-SELECT * from t1 WHERE k=0; -8-1-SELECT * from t1 WHERE k=1; -9-1-COMMIT; -10-3-SELECT * from t1; -11-3-COMMIT; - -serializable { -2-0,0 -7-0,0 -8-1,0 -10-0,1 1,1 - -2-0,1 -7-0,1 -8-1,1 -10-0,1 1,1 -} - - - diff --git a/src/dbtest/t/tidb/step-read-skew.txt b/src/dbtest/t/tidb/step-read-skew.txt deleted file mode 100644 index 7b1c68f5..00000000 --- a/src/dbtest/t/tidb/step-read-skew.txt +++ /dev/null @@ -1,45 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-COMMIT; -1-1-begin; -2-1-select * from t1 where k=0; -3-2-begin; -4-2-UPDATE t1 SET v=1 WHERE k=0; -5-2-INSERT INTO t1 VALUES (1, 0); -6-2-commit; -7-3-begin; -8-3-UPDATE t1 SET v=1 WHERE k=1; -9-3-INSERT INTO t1 VALUES (2, 0); -10-3-commit; -11-1-SELECT * from t1 WHERE k=2; -12-1-commit; -13-4-SELECT * FROM t1; -14-4-COMMIT; - -serializable { -2-0,0 -11-null -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,1 2,0 - -2-0,1 -11-2,0 -13-0,1 1,1 2,0 - -2-0,0 -11-null -13-0,1 1,0 - -2-0,1 -11-null -13-0,1 1,0 -} diff --git a/src/dbtest/t/tidb/step-wat.txt b/src/dbtest/t/tidb/step-wat.txt deleted file mode 100644 index 807ef480..00000000 --- a/src/dbtest/t/tidb/step-wat.txt +++ /dev/null @@ -1,75 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-3-BEGIN; -9-3-update t1 set v=2 where k=0; -10-2-commit; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=1; -15-1-select * from t1 where k=2; -16-1-commit; -17-4-select * from t1; -18-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,0 -17-0,1 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,0 -17-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-1,0 -15-2,1 -17-0,1 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-1,1 -15-2,1 -17-0,1 1,1 2,1 -} diff --git a/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt b/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt deleted file mode 100644 index 74701f0c..00000000 --- a/src/dbtest/t/tidb/total-diff-predicate-read-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(1,1); -5-2-insert into t1 values(0,0); -6-2-COMMIT; -7-1-select * from t1 where v=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,1 - -2-0,0 -7-1,1 -9-0,0 1,1 -} diff --git a/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt b/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt deleted file mode 100644 index 560206ed..00000000 --- a/src/dbtest/t/tidb/total-diff-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=1; -5-1-insert into t1 values(1,1); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,1 -9-0,0 1,1 - -2-0,0 -4-null -9-0,0 1,1 -} diff --git a/src/dbtest/t/tidb/total-same-predicate-read-skew.txt b/src/dbtest/t/tidb/total-same-predicate-read-skew.txt deleted file mode 100644 index 0c39b464..00000000 --- a/src/dbtest/t/tidb/total-same-predicate-read-skew.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-insert into t1 values(0,0); -5-2-insert into t1 values(1,0); -6-2-COMMIT; -7-1-select * from t1 where v=0; -8-1-COMMIT: -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -7-null -9-0,0 1,0 - - -2-0,0 1,0 -7-0,0 1,0 -9-0,0 1,0 -} diff --git a/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt b/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt deleted file mode 100644 index 3456462b..00000000 --- a/src/dbtest/t/tidb/total-same-predicate-read-skew2.txt +++ /dev/null @@ -1,28 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-UPDATE t1 SET v=1 WHERE k=1; -5-2-UPDATE t1 SET v=1 WHERE k=2; -6-2-commit; -7-1-select * from t1; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -2-1,0 2,0 -7-1,0 2,0 -9-1,1 2,1 - -2-null -7-1,1 2,1 -9-1,1 2,1 -} - - diff --git a/src/dbtest/t/tidb/total-same-predicate-write-skew.txt b/src/dbtest/t/tidb/total-same-predicate-write-skew.txt deleted file mode 100644 index 5174028f..00000000 --- a/src/dbtest/t/tidb/total-same-predicate-write-skew.txt +++ /dev/null @@ -1,24 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where v=0; -3-2-BEGIN; -4-2-select * from t1 where v=0; -5-1-insert into t1 values(1,0); -6-2-insert into t1 values(0,0); -7-1-commit; -8-2-commit; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-null -4-1,0 -9-0,0 1,0 - -2-0,0 -4-null -9-0,0 1,0 -} diff --git a/src/dbtest/t/tidb/unnamed-anomaly.txt b/src/dbtest/t/tidb/unnamed-anomaly.txt deleted file mode 100644 index 0cac37c6..00000000 --- a/src/dbtest/t/tidb/unnamed-anomaly.txt +++ /dev/null @@ -1,68 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-INSERT INTO t1 VALUES (2, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=1; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=0; -6-2-select * from t1 where k=1; -7-2-update t1 set v=1 where k=1; -8-2-commit; -9-3-BEGIN; -10-3-update t1 set v=2 where k=0; -11-3-select * from t1 where k=2; -12-3-update t1 set v=1 where k=2; -13-3-commit; -14-1-select * from t1 where k=2; -15-1-commit; -16-4-select * from t1; -17-4-commit; - -serializable { -2-1,0 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,0 -6-1,0 -11-2,0 -14-2,0 -16-0,2 1,1 2,1 - -2-1,0 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 - -2-1,1 -4-0,2 -6-1,0 -11-2,0 -14-2,1 -16-0,2 1,1 2,1 -} diff --git a/src/dbtest/t/tidb/write-read-skew1.txt b/src/dbtest/t/tidb/write-read-skew1.txt deleted file mode 100644 index 95c25f23..00000000 --- a/src/dbtest/t/tidb/write-read-skew1.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-update t1 set v=1 where k=1; -5-2-select * from t1 where k=0; -6-2-COMMIT; -7-1-select * from t1 where k=1; -8-1-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -5-0,0 -7-1,1 -9-0,1 1,1 - -5-0,1 -7-1,0 -9-0,1 1,1 -} - - - diff --git a/src/dbtest/t/tidb/write-read-skew2.txt b/src/dbtest/t/tidb/write-read-skew2.txt deleted file mode 100644 index ed383947..00000000 --- a/src/dbtest/t/tidb/write-read-skew2.txt +++ /dev/null @@ -1,27 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-update t1 set v=1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=0; -5-2-update t1 set v=1 where k=1; -6-1-select * from t1 where k=1; -7-2-COMMIT; -8-1-commit; -9-3-select * from t1; -10-3-commit; - -serializable { -4-0,1 -6-1,0 -9-0,1 1,1 - -4-0,0 -6-1,1 -9-0,1 1,1 -} - diff --git a/src/dbtest/t/tidb/write-skew-black-white.txt b/src/dbtest/t/tidb/write-skew-black-white.txt deleted file mode 100644 index 231a0111..00000000 --- a/src/dbtest/t/tidb/write-skew-black-white.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS dots; -0-1-create table dots(id int not null primary key auto_increment, color text not null); -0-1-insert into dots(color) values('black'); -0-1-insert into dots(color) values('white'); -0-1-insert into dots(color) values('black'); -0-1-insert into dots(color) values('white'); -0-1-COMMIT; -1-1-BEGIN; -2-1-update dots set color = 'black' where color = 'white'; -3-2-BEGIN; -4-2-update dots set color = 'white' where color = 'black'; -5-2-COMMIT; -6-2-select * from dots order by id; -7-1-COMMIT; -8-3-select * from dots; -9-3-COMMIT: - -serializable { -6-1,white 2,white 3,white 4,white -8-1,white 2,white 3,white 4,white - -6-1,white 2,white 3,white 4,white -8-1,black 2,black 3,black 4,black -} diff --git a/src/dbtest/t/tidb/write-skew-intersecting-data.txt b/src/dbtest/t/tidb/write-skew-intersecting-data.txt deleted file mode 100644 index 8087ed2a..00000000 --- a/src/dbtest/t/tidb/write-skew-intersecting-data.txt +++ /dev/null @@ -1,29 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS mytab; -0-1-CREATE TABLE IF NOT EXISTS mytab(class int NOT NULL, value int NOT NULL); -0-1-INSERT INTO mytab VALUES(1, 10), (1, 20), (2, 100), (2, 200); -0-1-COMMIT; -1-1-BEGIN; -2-1-SELECT SUM(value) FROM mytab WHERE class = 1; -4-2-BEGIN; -6-2-INSERT INTO mytab VALUES (1, 300); -5-2-SELECT SUM(value) FROM mytab WHERE class = 2; -3-1-INSERT INTO mytab VALUES (2, 30); -7-2-COMMIT; -8-1-COMMIT; -9-3-SELECT SUM(value) FROM mytab WHERE class = 1; -10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; -12-3-COMMIT; - -serializable { -2-30, -5-330, -9-330, -10-330, - -2-330, -5-300, -9-330, -10-330, -} diff --git a/src/dbtest/t/tidb/write-skew-overdraft-protection.txt b/src/dbtest/t/tidb/write-skew-overdraft-protection.txt deleted file mode 100644 index 615c4e7c..00000000 --- a/src/dbtest/t/tidb/write-skew-overdraft-protection.txt +++ /dev/null @@ -1,25 +0,0 @@ -ParamNum:3 -0-1-drop table if exists account; -0-1-create table account(name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); -0-1-insert into account values('kevin','saving', 500), ('kevin','checking', 500); -0-1-COMMIT; -1-1-BEGIN; -2-1-select type, balance from account where name = 'kevin'; -3-2-BEGIN; -4-2-select type, balance from account where name = 'kevin'; -5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; -6-2-COMMIT; -7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; -8-1-COMMIT: -10-3-select * from account; -11-3-COMMIT; - -serializable { -2-checking,500, saving,500, -4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 - -2-checking,1400, saving,500, -4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 -} diff --git a/src/dbtest/t/tidb/write-skew.txt b/src/dbtest/t/tidb/write-skew.txt deleted file mode 100644 index 51eb55df..00000000 --- a/src/dbtest/t/tidb/write-skew.txt +++ /dev/null @@ -1,26 +0,0 @@ -ParamNum:2 -0-1-DROP TABLE IF EXISTS t1; -0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); -0-1-INSERT INTO t1 VALUES (0, 0); -0-1-INSERT INTO t1 VALUES (1, 0); -0-1-COMMIT; -1-1-BEGIN; -2-1-select * from t1 where k=0; -3-2-BEGIN; -4-2-select * from t1 where k=1; -5-1-update t1 set v=1 where k=1; -6-1-COMMIT; -7-2-update t1 set v=1 where k=0; -8-2-COMMIT; -9-3-select * from t1; -10-3-COMMIT; - -serializable { -2-0,0 -4-1,1 -9-0,1 1,1 - -2-0,1 -4-1,0 -9-0,1 1,1 -} From 811ea187803848f5fdeef2c0abbc8d66c810af8e Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Feb 2022 16:02:49 +0800 Subject: [PATCH 14/81] Add new test cases --- .../t/pg/iat_dda_read_skew_committed.txt | 26 +++++ .../pg/iat_dda_read_write_skew1_committed.txt | 24 ++++ src/dbtest/t/pg/iat_dda_write_skew.txt | 26 +++++ .../t/pg/iat_dda_write_skew_committed.txt | 26 +++++ ...skew_predicate_based-intersecting_data.txt | 32 ++++++ ...w_predicate_based-overdraft_protection.txt | 26 +++++ src/dbtest/t/pg/iat_mda_step_iat.txt | 53 +++++++++ ...a_step_iat_causality_violation_anomaly.txt | 51 +++++++++ .../pg/iat_mda_step_iat_cross_phenomenon.txt | 108 ++++++++++++++++++ ...at_mda_step_iat_predicate_based_delete.txt | 53 +++++++++ ...at_mda_step_iat_predicate_based_insert.txt | 50 ++++++++ ...step_iat_read_only_transaction_anomaly.txt | 65 +++++++++++ .../t/pg/iat_mda_step_iat_uname_anomaly.txt | 75 ++++++++++++ .../t/pg/iat_sda_lost_update_committed.txt | 22 ++++ .../iat_sda_non_repeatable_read_committed.txt | 24 ++++ .../t/pg/rat_dda_double_write_skew1.txt | 24 ++++ .../rat_dda_double_write_skew1_committed.txt | 24 ++++ .../t/pg/rat_dda_double_write_skew2.txt | 24 ++++ src/dbtest/t/pg/rat_dda_read_skew.txt | 26 +++++ src/dbtest/t/pg/rat_dda_read_skew2.txt | 26 +++++ .../t/pg/rat_dda_read_skew2_committed.txt | 27 +++++ ...t_dda_read_skew_predicate_based_delete.txt | 27 +++++ ...t_dda_read_skew_predicate_based_insert.txt | 25 ++++ ..._read_skew_predicate_based_insert_test.txt | 25 ++++ src/dbtest/t/pg/rat_dda_write_read_skew.txt | 26 +++++ .../pg/rat_dda_write_read_skew_committed.txt | 29 +++++ src/dbtest/t/pg/rat_mda_step_rat.txt | 53 +++++++++ .../t/pg/rat_mda_step_rat_long_fork.txt | 108 ++++++++++++++++++ ...at_mda_step_rat_predicate_based_delete.txt | 53 +++++++++ ...at_mda_step_rat_predicate_based_insert.txt | 50 ++++++++ src/dbtest/t/pg/rat_sda_dirty_read.txt | 19 +++ src/dbtest/t/pg/rat_sda_intermediate_read.txt | 23 ++++ .../rat_sda_intermediate_read_committed.txt | 23 ++++ src/dbtest/t/pg/rat_sda_lost_self_update.txt | 22 ++++ .../t/pg/rat_sda_non_repeatable_read.txt | 24 ++++ ...le_read_predicate_based-phantom_delete.txt | 24 ++++ ...le_read_predicate_based-phantom_insert.txt | 23 ++++ .../wat_dda_double_write_skew2_committed.txt | 24 ++++ .../t/pg/wat_dda_full_write_skew_c1.txt | 22 ++++ .../t/pg/wat_dda_full_write_skew_c2.txt | 22 ++++ .../pg/wat_dda_full_write_skew_committed.txt | 22 ++++ .../t/pg/wat_dda_read_write_skew1_c1.txt | 24 ++++ .../t/pg/wat_dda_read_write_skew1_c2.txt | 24 ++++ .../t/pg/wat_dda_read_write_skew2_c1.txt | 24 ++++ .../t/pg/wat_dda_read_write_skew2_c2.txt | 24 ++++ .../pg/wat_dda_read_write_skew2_committed.txt | 24 ++++ src/dbtest/t/pg/wat_mda_step_wat_c1.txt | 35 ++++++ src/dbtest/t/pg/wat_mda_step_wat_c2.txt | 35 ++++++ .../t/pg/wat_sda_dirty_write_1abort.txt | 19 +++ .../t/pg/wat_sda_dirty_write_2commit.txt | 20 ++++ src/dbtest/t/pg/wat_sda_full_write.txt | 20 ++++ .../t/pg/wat_sda_full_write_committed.txt | 20 ++++ .../pg/wat_sda_lost_self_update_committed.txt | 22 ++++ src/dbtest/t/pg/wat_sda_lost_update_c1.txt | 22 ++++ src/dbtest/t/pg/wat_sda_lost_update_c2.txt | 22 ++++ 55 files changed, 1791 insertions(+) create mode 100644 src/dbtest/t/pg/iat_dda_read_skew_committed.txt create mode 100644 src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt create mode 100644 src/dbtest/t/pg/iat_dda_write_skew.txt create mode 100644 src/dbtest/t/pg/iat_dda_write_skew_committed.txt create mode 100644 src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt create mode 100644 src/dbtest/t/pg/iat_sda_lost_update_committed.txt create mode 100644 src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt create mode 100644 src/dbtest/t/pg/rat_dda_double_write_skew1.txt create mode 100644 src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt create mode 100644 src/dbtest/t/pg/rat_dda_double_write_skew2.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew2.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew2_committed.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt create mode 100644 src/dbtest/t/pg/rat_dda_write_read_skew.txt create mode 100644 src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt create mode 100644 src/dbtest/t/pg/rat_mda_step_rat.txt create mode 100644 src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt create mode 100644 src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 src/dbtest/t/pg/rat_sda_dirty_read.txt create mode 100644 src/dbtest/t/pg/rat_sda_intermediate_read.txt create mode 100644 src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt create mode 100644 src/dbtest/t/pg/rat_sda_lost_self_update.txt create mode 100644 src/dbtest/t/pg/rat_sda_non_repeatable_read.txt create mode 100644 src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt create mode 100644 src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt create mode 100644 src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt create mode 100644 src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt create mode 100644 src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt create mode 100644 src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt create mode 100644 src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt create mode 100644 src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt create mode 100644 src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt create mode 100644 src/dbtest/t/pg/wat_mda_step_wat_c1.txt create mode 100644 src/dbtest/t/pg/wat_mda_step_wat_c2.txt create mode 100644 src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt create mode 100644 src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt create mode 100644 src/dbtest/t/pg/wat_sda_full_write.txt create mode 100644 src/dbtest/t/pg/wat_sda_full_write_committed.txt create mode 100644 src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt create mode 100644 src/dbtest/t/pg/wat_sda_lost_update_c1.txt create mode 100644 src/dbtest/t/pg/wat_sda_lost_update_c2.txt diff --git a/src/dbtest/t/pg/iat_dda_read_skew_committed.txt b/src/dbtest/t/pg/iat_dda_read_skew_committed.txt new file mode 100644 index 00000000..6b4d7bd1 --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_read_skew_committed.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-SELECT * from t1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +7-1,0 +9-0,1 1,1 + +3-0,1 +7-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt b/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt new file mode 100644 index 00000000..3124233c --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +9-0,1 1,2 + +3-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/iat_dda_write_skew.txt b/src/dbtest/t/pg/iat_dda_write_skew.txt new file mode 100644 index 00000000..6ff4a9e1 --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_write_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-select * from t1 where k=0; +4-2-select * from t1 where k=1; +5-2-update t1 set v=1 where k=0; +6-1-update t1 set v=1 where k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +4-1,1 +9-0,1 1,1 + +3-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/iat_dda_write_skew_committed.txt b/src/dbtest/t/pg/iat_dda_write_skew_committed.txt new file mode 100644 index 00000000..72d11f58 --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_write_skew_committed.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-select * from t1 where k=0; +4-2-select * from t1 where k=1; +5-2-update t1 set v=1 where k=0; +6-2-COMMIT; +7-1-update t1 set v=1 where k=1; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +4-1,1 +9-0,1 1,1 + +3-0,1 +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt new file mode 100644 index 00000000..9131bf8c --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -0,0 +1,32 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS mytab; +0-1-CREATE TABLE mytab(class int NOT NULL, value int NOT NULL); +0-1-INSERT INTO mytab VALUES (1, 10); +0-1-INSERT INTO mytab VALUES (1, 20); +0-1-INSERT INTO mytab VALUES (2, 100); +0-1-INSERT INTO mytab VALUES (2, 200); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT SUM(value) FROM mytab WHERE class = 1; +4-1-INSERT INTO mytab VALUES (2, 30); +5-2-SELECT SUM(value) FROM mytab WHERE class = 2; +6-2-INSERT INTO mytab VALUES (1, 300); +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT SUM(value) FROM mytab WHERE class = 1; +10-3-SELECT SUM(value) FROM mytab WHERE class = 2; +11-3-DROP TABLE mytab; +12-3-COMMIT; + +serializable { +3-30, +5-330, +9-330, +10-330, + +3-330, +5-300, +9-330, +10-330, +} diff --git a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt new file mode 100644 index 00000000..512caa75 --- /dev/null +++ b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -0,0 +1,26 @@ +ParamNum:3 +0-1-DROP TABLE IF EXISTS account; +0-1-create table account (name varchar(255) not null, type varchar(255) not null, balance int not null default 0.00, primary key (name, type)); +0-1-insert into account values ('kevin','saving', 500); +0-1-insert into account values ('kevin','checking', 500); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-select type, balance from account where name = 'kevin'; +4-2-select type, balance from account where name = 'kevin'; +5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; +6-2-COMMIT; +7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; +8-1-COMMIT: +10-3-select * from account; +11-3-COMMIT; + +serializable { +3-checking,500, saving,500, +4-checking,500, saving,1400, +10-kevin,checking,1400 kevin,saving,1400 + +3-checking,1400, saving,500, +4-checking,500, saving,500, +10-kevin,checking,1400 kevin,saving,1400 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat.txt b/src/dbtest/t/pg/iat_mda_step_iat.txt new file mode 100644 index 00000000..52113332 --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=2; +5-2-select * from t1 where k=0; +6-3-select * from t1 where k=1; +7-1-update t1 set v=1 where k=0; +8-2-update t1 set v=1 where k=1; +9-3-update t1 set v=1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +4-2,0 +5-0,1 +6-1,1 +13-0,1 1,1 2,1 + +4-2,0 +5-0,1 +6-1,0 +13-0,1 1,1 2,1 + +4-2,0 +5-0,0 +6-1,1 +13-0,1 1,1 2,1 + +4-2,1 +5-0,0 +6-1,1 +13-0,1 1,1 2,1 + +4-2,1 +5-0,1 +6-1,0 +13-0,1 1,1 2,1 + +4-2,1 +5-0,0 +6-1,0 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt new file mode 100644 index 00000000..19b63934 --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt @@ -0,0 +1,51 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=0; +4-2-update t1 set v=1 where k=0; +6-2-commit; +7-3-select * from t1 where k=0; +8-3-update t1 set v=1 where k=1; +9-3-commit; +10-1-select * from t1 where k=1; +11-1-commit; +12-4-select * from t1 ORDER BY k; +13-4-commit; + +serializable { +4-0,0 +7-0,1 +10-1,0 +12-0,1 1,1 + +4-0,0 +7-0,0 +10-1,0 +12-0,1 1,1 + +4-0,1 +7-0,1 +10-1,1 +12-0,1 1,1 + +4-0,1 +7-0,1 +10-1,0 +12-0,1 1,1 + +4-0,0 +7-0,0 +10-1,1 +12-0,1 1,1 + +4-0,1 +7-0,0 +10-1,1 +12-0,1 1,1 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt b/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt new file mode 100644 index 00000000..59771ebd --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-4-BEGIN; +5-1-select * from t1 where k=0; +6-2-select * from t1 where k=1; +7-3-update t1 set v=1 where k=0; +8-3-commit; +9-4-update t1 set v=1 where k=1; +10-4-commit; +11-2-select * from t1 where k=0; +12-2-commit; +13-1-select * from t1 where k=1; +14-1-commit; +15-5-select * from t1 ORDER BY k; +16-5-commit; + +serializable { +5-0,0 +6-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +5-0,0 +6-1,1 +13-1,0 +11-0,0 +15-0,1 1,1 + +5-0,0 +6-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +5-0,0 +6-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +5-0,0 +6-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +5-0,1 +6-1,0 +13-1,0 +11-0,0 +15-0,1 1,1 + +5-0,1 +6-1,0 +13-1,1 +11-0,0 +15-0,1 1,1 + +5-0,0 +6-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +5-0,1 +6-1,0 +13-1,0 +11-0,1 +15-0,1 1,1 + +5-0,1 +6-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +5-0,0 +6-1,1 +13-1,1 +11-0,1 +15-0,1 1,1 + +5-0,1 +6-1,1 +13-1,1 +11-0,0 +15-0,1 1,1 + +5-0,1 +6-1,1 +13-1,0 +11-0,1 +15-0,1 1,1 + +5-0,1 +6-1,0 +13-1,1 +11-0,1 +15-0,1 1,1 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt new file mode 100644 index 00000000..19b94ba9 --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=2; +5-2-select * from t1 where k=0; +6-3-select * from t1 where k=1; +7-1-DELETE FROM t1 WHERE k=0; +8-2-DELETE FROM t1 WHERE k=1; +9-3-DELETE FROM t1 WHERE k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +4-2,0 +5-null +6-null +13-null + +4-2,0 +5-null +6-1,0 +13-null + +4-2,0 +5-0,0 +6-null +13-null + +4-null +5-0,0 +6-1,1 +13-null + +4-null +5-null +6-1,0 +13-null + +4-null +5-0,0 +6-1,0 +13-null +} \ No newline at end of file diff --git a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt new file mode 100644 index 00000000..526c2242 --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=2; +5-2-select * from t1 where k=0; +6-3-select * from t1 where k=1; +7-1-INSERT INTO t1 VALUES (0, 0); +8-2-INSERT INTO t1 VALUES (1, 0); +9-3-INSERT INTO t1 VALUES (2, 0); +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +4-null +5-0,1 +6-1,1 +13-0,1 1,1 2,1 + +4-null +5-0,1 +6-null +13-0,1 1,1 2,1 + +4-null +5-null +6-1,1 +13-0,1 1,1 2,1 + +4-2,1 +5-null +6-1,1 +13-0,1 1,1 2,1 + +4-2,1 +5-0,1 +6-null +13-0,1 1,1 2,1 + +4-2,1 +5-null +6-null +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt new file mode 100644 index 00000000..947288ca --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -0,0 +1,65 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=0; +5-1-select * from t1 where k=1; +6-2-select * from t1 where k=1; +6-2-update t1 set v=20 where k=1; +7-2-commit; +9-3-select * from t1 where k=0; +10-3-select * from t1 where k=1; +11-3-commit; +12-1-update t1 set v=11 where k=0; +13-1-commit; +14-3-select * from t1 ORDER BY k; +15-3-commit; + +serializable { +4-0,0 +5-1,0 +6-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +4-0,0 +5-1,0 +6-1,0 +9-0,11 +10-1,0 +14-0,11 1,20 + +4-0,0 +5-1,20 +6-1,0 +9-0,0 +10-1,20 +14-0,11 1,20 + +4-0,0 +5-1,20 +6-1,0 +9-0,11 +10-1,20 +14-0,11 1,20 + +4-0,0 +5-1,0 +6-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 + +4-0,0 +5-1,20 +6-1,0 +9-0,0 +10-1,0 +14-0,11 1,20 +} diff --git a/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt new file mode 100644 index 00000000..31c3f0c3 --- /dev/null +++ b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt @@ -0,0 +1,75 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-select * from t1 where k=1; +5-2-select * from t1 where k=0; +6-2-update t1 set v=1 where k=0; +7-2-select * from t1 where k=1; +8-2-update t1 set v=1 where k=1; +9-2-commit; +10-3-select * from t1 where k=0; +11-3-update t1 set v=2 where k=0; +12-3-select * from t1 where k=2; +13-3-update t1 set v=1 where k=2; +14-3-commit; +15-1-select * from t1 where k=2; +16-1-commit; +17-4-select * from t1 ORDER BY k; +18-4-commit; + +serializable { +4-1,0 +5-0,0 +7-1,0 +10-0,1 +12-2,0 +15-2,0 +17-0,2 1,1 2,1 + +4-1,0 +5-0,2 +7-1,0 +10-0,0 +12-2,0 +15-2,0 +17-0,2 1,1 2,1 + +4-1,1 +5-0,0 +7-1,0 +10-0,1 +12-2,0 +15-2,0 +17-0,2 1,1 2,1 + +4-1,2 +5-0,0 +7-1,0 +10-0,1 +12-2,0 +15-2,2 +17-0,2 1,1 2,1 + +4-1,0 +5-0,2 +7-1,0 +10-0,0 +12-2,0 +15-2,1 +17-0,2 1,1 2,1 + +4-1,1 +5-0,2 +7-1,0 +10-0,0 +12-2,0 +15-2,1 +17-0,2 1,1 2,1 +} diff --git a/src/dbtest/t/pg/iat_sda_lost_update_committed.txt b/src/dbtest/t/pg/iat_sda_lost_update_committed.txt new file mode 100644 index 00000000..60d382c8 --- /dev/null +++ b/src/dbtest/t/pg/iat_sda_lost_update_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-0,0 +8-0,2 + +3-0,2 +8-0,1 +} diff --git a/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt b/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt new file mode 100644 index 00000000..b2a5ff07 --- /dev/null +++ b/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN;; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-0,0 +6-0,0 +8-0,1 + +3-0,1 +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew1.txt b/src/dbtest/t/pg/rat_dda_double_write_skew1.txt new file mode 100644 index 00000000..2a219378 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_double_write_skew1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-2-begin; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-1-update t1 set v=2 where k=1; +7-2-commit; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt b/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt new file mode 100644 index 00000000..e0391273 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-2-begin; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-commit; +7-1-update t1 set v=2 where k=1; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +9-0,1 1,1 + +5-0,0 +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew2.txt b/src/dbtest/t/pg/rat_dda_double_write_skew2.txt new file mode 100644 index 00000000..d5a5d2c1 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_double_write_skew2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-2-begin; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-update t1 set v=2 where k=0; +6-1-select * from t1 where k=1; +7-1-commit; +8-2-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +6-1,0 +9-0,2 1,1 + +6-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_dda_read_skew.txt b/src/dbtest/t/pg/rat_dda_read_skew.txt new file mode 100644 index 00000000..24bc00a1 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=1 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-SELECT * from t1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +6-1,0 +9-0,1 1,1 + +3-0,1 +6-1,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/rat_dda_read_skew2.txt b/src/dbtest/t/pg/rat_dda_read_skew2.txt new file mode 100644 index 00000000..00af5caf --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew2.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=1; +5-2-SELECT * from t1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +5-0,1 +9-0,1 1,1 + +4-1,0 +5-0,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt b/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt new file mode 100644 index 00000000..c066a7e5 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=1; +5-2-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +5-0,1 +9-0,1 1,1 + + +4-1,0 +5-0,0 +9-0,1 1,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt new file mode 100644 index 00000000..e8fb7a1d --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt @@ -0,0 +1,27 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-select * from t1 where v=0; +4-2-DELETE FROM t1 WHERE k=1; +5-2-DELETE FROM t1 WHERE k=0; +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-null +7-null +9-null + + +3-0,0 1,0 +7-0,0 1,0 +9-null +} diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt new file mode 100644 index 00000000..f36c20f6 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-select * from t1 where v=0; +4-2-insert into t1 values(1,0); +5-2-insert into t1 values(0,0); +6-2-COMMIT; +7-1-select * from t1 where v=0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-null +7-null +9-0,0 1,0 + + +3-0,0 1,0 +7-0,0 1,0 +9-0,0 1,0 +} diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt new file mode 100644 index 00000000..103ceaae --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt @@ -0,0 +1,25 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT SUM(v) FROM t1 WHERE k >= 1 ; +4-2-insert into t1 values(0,1); +5-2-insert into t1 values(1,2); +6-2-COMMIT; +7-1-SELECT SUM(v) FROM t1 WHERE k <= 0; +8-1-COMMIT: +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-, +7-, +9-0,1 1,2 + + +3-1 +7-2 +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/rat_dda_write_read_skew.txt b/src/dbtest/t/pg/rat_dda_write_read_skew.txt new file mode 100644 index 00000000..e8bf94bb --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_write_read_skew.txt @@ -0,0 +1,26 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-1-select * from t1 where k=1; +7-2-COMMIT; +8-1-commit; +9-3-select * from t1 ORDER BY k; +10-3-commit; + +serializable { +5-0,1 +6-1,0 +9-0,1 1,1 + +5-0,0 +6-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt b/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt new file mode 100644 index 00000000..fa152ac5 --- /dev/null +++ b/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt @@ -0,0 +1,29 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-2-COMMIT; +7-1-select * from t1 where k=1; +8-1-COMMIT; +9-3-select * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +5-0,1 +7-1,0 +9-0,1 1,1 + +5-0,0 +7-1,1 +9-0,1 1,1 +} + + + diff --git a/src/dbtest/t/pg/rat_mda_step_rat.txt b/src/dbtest/t/pg/rat_mda_step_rat.txt new file mode 100644 index 00000000..0515c030 --- /dev/null +++ b/src/dbtest/t/pg/rat_mda_step_rat.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-update t1 set v=1 where k=0; +5-2-update t1 set v=1 where k=1; +6-2-select * from t1 where k=0; +7-3-update t1 set v=1 where k=2; +8-3-select * from t1 where k=1; +9-1-select * from t1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +6-0,1 +8-1,1 +9-2,0 +13-0,1 1,1 2,1 + +6-0,1 +8-1,0 +9-2,0 +13-0,1 1,1 2,1 + +6-0,0 +8-1,1 +9-2,0 +13-0,1 1,1 2,1 + +6-0,0 +8-1,1 +9-2,1 +13-0,1 1,1 2,1 + +6-0,1 +8-1,0 +9-2,1 +13-0,1 1,1 2,1 + +6-0,0 +8-1,0 +9-2,1 +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt b/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt new file mode 100644 index 00000000..52a46b1f --- /dev/null +++ b/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt @@ -0,0 +1,108 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-4-BEGIN; +2-1-BEGIN; +3-3-BEGIN; +4-2-BEGIN; +5-4-select * from t1 where k=0; +6-1-update t1 set v=1 where k=0; +7-3-select * from t1 where k=1; +8-3-select * from t1 where k=0; +9-2-update t1 set v=1 where k=1; +10-4-select * from t1 where k=1; +11-1-commit; +12-2-commit; +13-3-commit; +14-4-commit; +15-4-select * from t1 ORDER BY k; +16-4-commit; + +serializable { +5-0,0 +7-1,0 +8-0,0 +10-1,0 +15-0,1 1,1 + +5-0,1 +7-1,0 +8-0,0 +10-1,1 +15-0,1 1,1 + +5-0,0 +7-1,1 +8-0,1 +10-1,0 +15-0,1 1,1 + +5-0,1 +7-1,1 +8-0,1 +10-1,1 +15-0,1 1,1 + +5-0,1 +7-1,0 +8-0,1 +10-1,0 +15-0,1 1,1 + +5-0,0 +7-1,1 +8-0,0 +10-1,1 +15-0,1 1,1 + +5-0,1 +7-1,1 +8-0,1 +10-1,0 +15-0,1 1,1 + +5-0,1 +7-1,0 +8-0,1 +10-1,1 +15-0,1 1,1 + +5-0,0 +7-1,1 +8-0,1 +10-1,1 +15-0,1 1,1 + +5-0,1 +7-1,1 +8-0,0 +10-1,1 +15-0,1 1,1 + +5-0,0 +7-1,0 +8-0,0 +10-1,1 +15-0,1 1,1 + +5-0,1 +7-1,0 +8-0,0 +10-1,0 +15-0,1 1,1 + +5-0,0 +7-1,0 +8-0,1 +10-1,0 +15-0,1 1,1 + +5-0,0 +7-1,1 +8-0,0 +10-1,0 +15-0,1 1,1 +} diff --git a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt new file mode 100644 index 00000000..93ab0b91 --- /dev/null +++ b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt @@ -0,0 +1,53 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 1); +0-1-INSERT INTO t1 VALUES (1, 1); +0-1-INSERT INTO t1 VALUES (2, 1); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-DELETE FROM t1 WHERE k=0; +5-2-DELETE FROM t1 WHERE k=1; +6-2-SELECT SUM(v) FROM t1 WHERE k = 0; +7-3-DELETE FROM t1 WHERE k=2; +8-3-SELECT SUM(v) FROM t1 WHERE k = 1; +9-1-SELECT SUM(v) FROM t1 WHERE k = 2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1; +14-4-COMMIT; + +serializable { +6-, +8-, +9-1, +13-null + +6-, +8-1, +9-1, +13-null + +6-1, +8-, +9-1, +13-null + +6-1, +8-1, +9-, +13-null + +6-, +8-1, +9-, +13-null + +6-1, +8-1, +9-, +13-null +} diff --git a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt new file mode 100644 index 00000000..327444c5 --- /dev/null +++ b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt @@ -0,0 +1,50 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-INSERT INTO t1 VALUES (0, 1); +5-2-INSERT INTO t1 VALUES (1, 1); +6-2-SELECT SUM(v) FROM t1 WHERE k = 0; +7-3-INSERT INTO t1 VALUES (2, 1); +8-3-SELECT SUM(v) FROM t1 WHERE k = 1; +9-1-SELECT SUM(v) FROM t1 WHERE k = 2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +6-, +8-1, +9-1, +13-0,1 1,1 2,1 + +6-, +8-1, +9-, +13-0,1 1,1 2,1 + +6-, +8-, +9-1, +13-0,1 1,1 2,1 + +6-1, +8-, +9-1, +13-0,1 1,1 2,1 + +6-1, +8-1, +9-, +13-0,1 1,1 2,1 + +6-1, +8-, +9-, +13-0,1 1,1 2,1 +} diff --git a/src/dbtest/t/pg/rat_sda_dirty_read.txt b/src/dbtest/t/pg/rat_sda_dirty_read.txt new file mode 100644 index 00000000..9c4dbdce --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_dirty_read.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-2-BEGIN; +2-1-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k = 0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +4-0,0 +7-0,0 +} diff --git a/src/dbtest/t/pg/rat_sda_intermediate_read.txt b/src/dbtest/t/pg/rat_sda_intermediate_read.txt new file mode 100644 index 00000000..ac605837 --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_intermediate_read.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=0; +5-1-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt b/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt new file mode 100644 index 00000000..8ee1ecfc --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=2 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +4-0,2 +8-0,2 + +4-0,0 +8-0,2 +} + diff --git a/src/dbtest/t/pg/rat_sda_lost_self_update.txt b/src/dbtest/t/pg/rat_sda_lost_self_update.txt new file mode 100644 index 00000000..b8cd876c --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_lost_self_update.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +5-0,1 +8-0,2 + +5-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt new file mode 100644 index 00000000..55d3d966 --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN;; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=1 WHERE k=0; +5-1-SELECT * from t1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-0,0 +5-0,0 +8-0,1 + +3-0,1 +5-0,1 +8-0,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt new file mode 100644 index 00000000..7967d53a --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE v=0; +4-2-DELETE FROM t1 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-null +6-null +8-0,0 + +3-0,0 +6-0,0 +8-null +} diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt new file mode 100644 index 00000000..8fdab8e9 --- /dev/null +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -0,0 +1,23 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE v=0; +4-2-INSERT INTO t1 VALUES (0, 0); +5-2-COMMIT; +6-1-SELECT * from t1 WHERE v=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-null +6-null +8-0,0 + +3-0,0 +6-0,0 +8-0,0 +} diff --git a/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt b/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt new file mode 100644 index 00000000..be406517 --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-begin; +2-2-begin; +3-1-update t1 set v=1 where k=0; +4-2-update t1 set v=1 where k=1; +5-2-update t1 set v=2 where k=0; +6-2-commit; +7-1-select * from t1 where k=1; +8-1-commit; +9-3-SELECT * FROM t1 ORDER BY k; +10-3-COMMIT; + +serializable { +7-1,0 +9-0,2 1,1 + +7-1,1 +9-0,1 1,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt new file mode 100644 index 00000000..02f25624 --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt new file mode 100644 index 00000000..c919b20b --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt new file mode 100644 index 00000000..0c57e344 --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +9-0,2 1,1 + +9-0,1 1,2 +} diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt b/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt new file mode 100644 index 00000000..9595413a --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +9-0,1 1,2 + +3-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt b/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt new file mode 100644 index 00000000..ce6c922d --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=1; +5-2-UPDATE t1 SET v=1 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +3-0,0 +9-0,1 1,2 + +3-0,1 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt new file mode 100644 index 00000000..d28d199a --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-1-COMMIT; +8-2-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt new file mode 100644 index 00000000..b4a7b7d9 --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-1-UPDATE t1 SET v=1 WHERE k=1; +7-2-COMMIT; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt new file mode 100644 index 00000000..4c95e3af --- /dev/null +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt @@ -0,0 +1,24 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-SELECT * from t1 WHERE k=1; +5-2-UPDATE t1 SET v=2 WHERE k=0; +6-2-COMMIT; +7-1-UPDATE t1 SET v=1 WHERE k=1; +8-1-COMMIT; +9-3-SELECT * from t1 ORDER BY k; +10-3-COMMIT; + +serializable { +4-1,1 +9-0,2 1,1 + +4-1,0 +9-0,1 1,1 +} diff --git a/src/dbtest/t/pg/wat_mda_step_wat_c1.txt b/src/dbtest/t/pg/wat_mda_step_wat_c1.txt new file mode 100644 index 00000000..15702073 --- /dev/null +++ b/src/dbtest/t/pg/wat_mda_step_wat_c1.txt @@ -0,0 +1,35 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-update t1 set v=1 where k=0; +5-2-update t1 set v=2 where k=1; +6-2-update t1 set v=2 where k=0; +7-3-update t1 set v=3 where k=2; +8-3-update t1 set v=3 where k=1; +9-1-update t1 set v=1 where k=2; +10-1-COMMIT; +11-2-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +13-0,2 1,3 2,3 + +13-0,2 1,2 2,3 + +13-0,1 1,3 2,3 + +13-0,1 1,3 2,1 + +13-0,2 1,2 2,1 + +13-0,1 1,2 2,1 +} diff --git a/src/dbtest/t/pg/wat_mda_step_wat_c2.txt b/src/dbtest/t/pg/wat_mda_step_wat_c2.txt new file mode 100644 index 00000000..725ee920 --- /dev/null +++ b/src/dbtest/t/pg/wat_mda_step_wat_c2.txt @@ -0,0 +1,35 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-INSERT INTO t1 VALUES (1, 0); +0-1-INSERT INTO t1 VALUES (2, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-3-BEGIN; +4-1-update t1 set v=1 where k=0; +5-2-update t1 set v=2 where k=1; +6-2-update t1 set v=2 where k=0; +7-3-update t1 set v=3 where k=2; +8-3-update t1 set v=3 where k=1; +9-1-update t1 set v=1 where k=2; +10-2-COMMIT; +11-1-COMMIT; +12-3-COMMIT; +13-4-select * from t1 ORDER BY k; +14-4-COMMIT; + +serializable { +13-0,2 1,3 2,3 + +13-0,2 1,2 2,3 + +13-0,1 1,3 2,3 + +13-0,1 1,3 2,1 + +13-0,2 1,2 2,1 + +13-0,1 1,2 2,1 +} diff --git a/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt b/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt new file mode 100644 index 00000000..65bc0d99 --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt @@ -0,0 +1,19 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-ROLLBACK; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt b/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt new file mode 100644 index 00000000..04f11881 --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-COMMIT; +6-2-COMMIT; +7-3-SELECT * FROM t1; +8-3-DROP TABLE t1; +9-3-COMMIT; + +serializable { +7-0,1 + +7-0,2 +} diff --git a/src/dbtest/t/pg/wat_sda_full_write.txt b/src/dbtest/t/pg/wat_sda_full_write.txt new file mode 100644 index 00000000..e4cdc655 --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_full_write.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=3 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} diff --git a/src/dbtest/t/pg/wat_sda_full_write_committed.txt b/src/dbtest/t/pg/wat_sda_full_write_committed.txt new file mode 100644 index 00000000..7b32563e --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_full_write_committed.txt @@ -0,0 +1,20 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-UPDATE t1 SET v=3 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * from t1; +9-3-COMMIT; + +serializable { +8-0,2 + +8-0,3 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt b/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt new file mode 100644 index 00000000..f09f185b --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-UPDATE t1 SET v=1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-2-COMMIT; +6-1-SELECT * from t1 WHERE k=0; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +6-0,1 +8-0,2 + +6-0,1 +8-0,1 +} diff --git a/src/dbtest/t/pg/wat_sda_lost_update_c1.txt b/src/dbtest/t/pg/wat_sda_lost_update_c1.txt new file mode 100644 index 00000000..29a598ba --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_lost_update_c1.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-1-COMMIT; +7-2-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-0,0 +8-0,2 + +3-0,2 +8-0,1 +} \ No newline at end of file diff --git a/src/dbtest/t/pg/wat_sda_lost_update_c2.txt b/src/dbtest/t/pg/wat_sda_lost_update_c2.txt new file mode 100644 index 00000000..f508cb49 --- /dev/null +++ b/src/dbtest/t/pg/wat_sda_lost_update_c2.txt @@ -0,0 +1,22 @@ +ParamNum:2 +0-1-DROP TABLE IF EXISTS t1; +0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); +0-1-INSERT INTO t1 VALUES (0, 0); +0-1-COMMIT; +1-1-BEGIN; +2-2-BEGIN; +3-1-SELECT * from t1 WHERE k=0; +4-2-UPDATE t1 SET v=2 WHERE k=0; +5-1-UPDATE t1 SET v=1 WHERE k=0; +6-2-COMMIT; +7-1-COMMIT; +8-3-SELECT * FROM t1; +9-3-COMMIT; + +serializable { +3-0,0 +8-0,2 + +3-0,2 +8-0,1 +} \ No newline at end of file From a52bad5e015607267c08c83d7029635f965a623e Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Feb 2022 16:06:49 +0800 Subject: [PATCH 15/81] Add parallel exeuction of transaction queries. --- src/dbtest/do_test_list.txt | 110 ++++----- src/dbtest/src/case_cntl.cc | 8 +- src/dbtest/src/sql_cntl.cc | 182 +++++++++++---- src/dbtest/src/sql_cntl.h | 4 +- src/dbtest/src/sqltest.cc | 433 ++++++++++++++++++++++++++++++------ 5 files changed, 571 insertions(+), 166 deletions(-) diff --git a/src/dbtest/do_test_list.txt b/src/dbtest/do_test_list.txt index f829d4b5..1e171596 100644 --- a/src/dbtest/do_test_list.txt +++ b/src/dbtest/do_test_list.txt @@ -1,55 +1,57 @@ +#### RAT +rat_sda_dirty_read +#rat_sda_non_repeatable_read +#rat_sda_intermediate_read +#rat_sda_intermediate_read_committed +#rat_sda_non_repeatable_read_predicate_based-phantom_delete +#rat_sda_non_repeatable_read_predicate_based-phantom_insert +#rat_sda_lost_self_update +#rat_dda_write_read_skew +#rat_dda_write_read_skew_committed +#rat_dda_double_write_skew1 +#rat_dda_double_write_skew1_committed +#rat_dda_double_write_skew2 +#rat_dda_read_skew +#rat_dda_read_skew_predicate_based_delete +#rat_dda_read_skew_predicate_based_insert +#rat_dda_read_skew2 +#rat_dda_read_skew2_committed +#rat_mda_step_rat +#rat_mda_step_rat_long_fork +#rat_mda_step_rat_predicate_based_delete +#rat_mda_step_rat_predicate_based_insert #### WAT -#dirty-write1 -#dirty-write2 -#intermediate-write1 -#intermediate-write2 -#lost-self-update1 -#lost-self-update2 -#lost-update1 -#double-write-skew1-1 -#double-write-skew1-2 -#double-write-skew1-3 -#read-write-skew1-1 -#read-write-skew1-2 -#full-write-skew1 -#full-write-skew2 -#step-wat -### RAT -#dirty-read -#intermediate-reads -#non-repeatable-read1 -#non-repeatable-read2 -#write-read-skew1 -#write-read-skew2 -#double-write-skew2 -#read-skew1 -#read-skew2 -#read-skew3 -#fractured-reads -#causality-violation-anomaly -#serial-concurrent-phenomenon -#cross-phenomenon -#cross-phantom -#long-fork-anomaly -#half-predicate-read-skew -#total-same-predicate-read-skew -#total-diff-predicate-read-skew -#total-same-predicate-read-skew2 -#step-read-skew -#unnamed-anomaly -#rat-special -#rat-special2 -## IAT -lost-update2 -read-write-skew2 -write-skew -write-skew-black-white -write-skew-intersecting-data -write-skew-overdraft-protection -half-predicate-write-skew -total-same-predicate-write-skew -total-diff-predicate-write-skew -read-only-transaction-anomaly -primary-colors -sawtooth -predicate-sawtooth +#wat_sda_dirty_write_1abort +#wat_sda_dirty_write_2commit +#wat_sda_full_write +#wat_sda_full_write_committed +#wat_sda_lost_update_c1 +#wat_sda_lost_update_c2 +#wat_sda_lost_self_update_committed +#wat_dda_double_write_skew2_committed +#wat_dda_full_write_skew_c1 +#wat_dda_full_write_skew_c2 +#wat_dda_full_write_skew_committed +#wat_dda_read_write_skew1_c1 +#wat_dda_read_write_skew1_c2 +#wat_dda_read_write_skew2_c1 +#wat_dda_read_write_skew2_c2 +#wat_dda_read_write_skew2_committed +#wat_mda_step_wat_c1 +#wat_mda_step_wat_c2 +#### IAT +#iat_sda_non_repeatable_read_committed +#iat_sda_lost_update_committed +#iat_dda_read_skew_committed +#iat_dda_read_write_skew1_committed +#iat_dda_write_skew +#iat_dda_write_skew_predicate_based-intersecting_data +#iat_dda_write_skew_predicate_based-overdraft_protection +#iat_dda_write_skew_committed +#iat_mda_step_iat +#iat_mda_step_iat_predicate_based_delete +#iat_mda_step_iat_predicate_based_insert +#iat_mda_step_iat_uname_anomaly +#iat_mda_step_iat_cross_phenomenon +#iat_mda_step_iat_causality_violation_anomaly +#iat_mda_step_iat_read_only_transaction_anomaly \ No newline at end of file diff --git a/src/dbtest/src/case_cntl.cc b/src/dbtest/src/case_cntl.cc index c1c14f05..15157c47 100644 --- a/src/dbtest/src/case_cntl.cc +++ b/src/dbtest/src/case_cntl.cc @@ -72,7 +72,8 @@ std::pair CaseReader::TestSequenceAndTestResultSetF const auto index_second = test_file.rfind("/"); const auto end = test_file.find("."); std::string test_case = test_file.substr(index_second + 1, end - index_second - 1); - std::string test_case_type = db_type + "_" + test_case; + // std::string test_case_type = db_type + "_" + test_case; + std::string test_case_type = test_case; std::string line; TestSequence test_sequence(test_case_type); TestResultSet test_result_set(test_case_type); @@ -235,7 +236,10 @@ bool ResultHandler::IsTestExpectedResult(std::unordered_map test_result_set_list, const std::string& ret_file) { std::ofstream out(ret_file); for (auto& test_result_set : test_result_set_list) { - out << test_result_set.TestCaseType() + ": " << test_result_set.ResultType() << std::endl; + // return result without reason + auto result = test_result_set.ResultType(); + result = result.substr(0, result.find("\n")); + out << test_result_set.TestCaseType() + ": " << result << std::endl << std::endl; } out.close(); } diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index eda89d81..c15cad6e 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -9,6 +9,58 @@ * */ #include "sql_cntl.h" +#include +#include +#include + +std::string get_current_time(){ + + // date + time_t d = time(0); + tm* d_now = std::localtime(&d); + // std::cout << (d_now->tm_year + 1900) << '-' + // << (d_now->tm_mon + 1) << '-' + // << d_now->tm_mday + // << "\n"; + + // time + std::chrono::time_point now = std::chrono::system_clock::now(); + auto duration = now.time_since_epoch(); + + typedef std::chrono::duration + >::type> Days; /* UTC: +8:00 */ + + Days days = std::chrono::duration_cast(duration); + duration -= days; + auto hours = std::chrono::duration_cast(duration); + duration -= hours; + auto minutes = std::chrono::duration_cast(duration); + duration -= minutes; + auto seconds = std::chrono::duration_cast(duration); + duration -= seconds; + auto milliseconds = std::chrono::duration_cast(duration); + duration -= milliseconds; + auto microseconds = std::chrono::duration_cast(duration); + duration -= microseconds; + auto nanoseconds = std::chrono::duration_cast(duration); + + + // return std::to_string(hours.count()) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" + // + std::to_string(milliseconds.count()) +":"+ std::to_string(microseconds.count()) +":"+ std::to_string(nanoseconds.count()); + return std::to_string(d_now->tm_year + 1900) + "-" + std::to_string(d_now->tm_mon + 1) + "-" + std::to_string(d_now->tm_mday) + + " " + + std::to_string(d_now->tm_hour) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" + + std::to_string(milliseconds.count()) +':'+ std::to_string(microseconds.count()); + +} + +bool replace(std::string& str, const std::string& from, const std::string& to) { + size_t start_pos = str.find(from); + if(start_pos == std::string::npos) + return false; + str.replace(start_pos, from.length(), to); + return true; +} std::string SQLCHARToStr(SQLCHAR* ch) { char* ch_char = (char*)ch; @@ -28,7 +80,8 @@ void DBConnector::ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQ } } -std::string DBConnector::SqlExecuteErr(int session_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { +std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file) { + std::ofstream test_process(test_process_file, std::ios::app); std::string blank(blank_base*(session_id - 1), ' '); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { @@ -39,13 +92,29 @@ std::string DBConnector::SqlExecuteErr(int session_id, const std::string& sql, s DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); std::string err_info = SQLCHARToStr(ErrInfo); + // replace "\n" to " " + // replace(err_info, "\n", " "); + // std::string s = "one two three"; + // get error information of first line + err_info = err_info.substr(0, err_info.find("\n")); + auto index_not_exist = err_info.find("not exist"); auto index_crdb_rollback = sql.find("ROLLBACK TRANSACTION"); - if (index_not_exist == err_info.npos && index_crdb_rollback == sql.npos) { - std::cout << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; - if (!test_process) { - test_process << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; - } + if (sql_id != 1024 && index_not_exist == err_info.npos && index_crdb_rollback == sql.npos) { + usleep(100000*sql_id^3); + std::cout << blank + "Q" + std::to_string(sql_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; + test_process << blank + "Q" + std::to_string(sql_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; + // if (!test_process) { + // test_process << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; + // } + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " failed at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + // if (!test_process) { + // test_process << output_time_info << std::endl; + // } + return err_info; } else { return ""; } @@ -67,10 +136,10 @@ std::string DBConnector::SqlExecuteErr(int session_id, const std::string& sql, s std::cout << blank + "SQL_INVALID_HANDLE" << std::endl; test_process << blank + "SQL_INVALID_HANDLE" << std::endl; return "SQL_INVALID_HANDLE"; - } else if (ret == SQL_PARAM_DATA_AVAILABLE) { - std::cout << blank + "SQL_PARAM_DATA_AVAILABLE" << std::endl; - test_process << blank + "SQL_PARAM_DATA_AVAILABLE" << std::endl; - return "SQL_PARAM_DATA_AVAILABLE"; + } else if (ret == SQL_PARAM_DIAG_UNAVAILABLE) { + std::cout << blank + "SQL_PARAM_DIAG_UNAVAILABLE" << std::endl; + test_process << blank + "SQL_PARAM_DIAG_UNAVAILABLE" << std::endl; + return "SQL_PARAM_DIAG_UNAVAILABLE"; } else { std::cout << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; test_process << blank + "execute sql: '" + sql + "' failed, unknow error" << std::endl; @@ -84,29 +153,33 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet SQLHDBC m_hDatabaseConnection = DBConnector::conn_pool_[session_id - 1]; ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecWriteSql" << std::endl; + std::cout << __TIMESTAMP__ << std::endl; return false; } // execute sql if (sql_id != 1024) { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; std::cout << output_info << std::endl; if (!test_process_file.empty()) { std::ofstream test_process(test_process_file, std::ios::app); test_process << output_info << std::endl; - } + } } ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); - std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret, test_process_file); + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); + if (!err_info_sql.empty()) { auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { - test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + if (test_result_set.ResultType() == ""){ + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + } return true; } else { if (test_result_set.ResultType().empty()) { @@ -117,6 +190,15 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet //return false; } // get error info + else{ + if (sql_id != 1024 && sql_id !=0) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + } return true; } @@ -130,7 +212,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult std::vector>> expected_result_set_list = test_result_set.ExpectedResultSetList(); ret = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); - std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if (!err_info_stmt.empty()) { std::cout << "get stmt failed in DBConnector::ExecReadSql2Int" << std::endl; return false; @@ -139,7 +221,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult SQLCHAR value[param_num][20] = {{0}}; // execute sql std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; std::cout << output_info << std::endl; if (!test_process_file.empty()) { std::ofstream test_process(test_process_file, std::ios::app); @@ -147,8 +229,9 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult } ret = SQLExecDirect(m_hStatement, (SQLCHAR*)sql.c_str(), SQL_NTS); // parse result - std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql, "stmt", m_hStatement, ret, test_process_file); + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, sql, "stmt", m_hStatement, ret, test_process_file); if(err_info_sql.empty()) { + // bind column data for (int i = 0; i < param_num; i++) { SQLBindCol(m_hStatement, i + 1, SQL_C_CHAR, (void*)value[i], sizeof(value[i]), &length); @@ -179,18 +262,26 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult cur_result_set[sql_id].push_back("null"); } outputter.PrintAndWriteTxnSqlResult(cur_result_set[sql_id], expected_result_set_list, sql_id, sql, session_id, test_process_file); + if (sql_id != 1024 && sql_id !=0) { + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } return true; } else { auto index_timeout1 = err_info_sql.find("timeout"); auto index_timeout2 = err_info_sql.find("Timeout"); auto index_timeout3 = err_info_sql.find("time out"); if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { - test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + if (test_result_set.ResultType() == ""){ + test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); + } return true; } else { if (test_result_set.ResultType().empty()) { std::string info = "Rollback\nReason: " + err_info_sql; - test_result_set.SetResultType(info); + test_result_set.SetResultType(info); } } //return false; @@ -201,7 +292,7 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { if (sql_id != 1024) { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "T" + std::to_string(session_id) + " execute opt: '" + opt + "'"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '" + opt + "'"; std::cout << output_info << std::endl; if (!test_process_file.empty()) { std::ofstream test_process(test_process_file, std::ios::app); @@ -219,13 +310,22 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes std::cout << "unknow txn opt" << std::endl; } - std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, opt, "dbc", m_hDatabaseConnection, ret, test_process_file); + std::string err_info_sql = DBConnector::SqlExecuteErr(session_id, sql_id, opt, "dbc", m_hDatabaseConnection, ret, test_process_file); if (!err_info_sql.empty()) { if (test_result_set.ResultType().empty()) { std::string info = "Rollback\n" + err_info_sql; test_result_set.SetResultType(info); } } + else{ + if (sql_id != 1024 && sql_id !=0) { + std::string blank(blank_base*(session_id - 1), ' '); + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + std::ofstream test_process(test_process_file, std::ios::app); + test_process << output_time_info << std::endl; + } + } } else { TestResultSet test_result_set; if (!DBConnector::ExecWriteSql(1024, opt, test_result_set, session_id, test_process_file)) { @@ -240,7 +340,7 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce std::ofstream test_process(test_process_file, std::ios::app); if(!DBConnector::SetAutoCommit(m_hDatabaseConnection, 0)) { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "T" + std::to_string(session_id) + " start txn failed"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " begin failed"; std::cout << output_info << std::endl; if (!test_process) { test_process << output_info << std::endl; @@ -248,11 +348,17 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce return false; } else { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "T" + std::to_string(session_id) + " start txn success"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+"begin'"; std::cout << output_info << std::endl; - if (!test_process) { - test_process << output_info << std::endl; - } + test_process << output_info << std::endl; + // if (!test_process) { + // test_process << output_info << std::endl; + // } + if (sql_id != 1024 && sql_id !=0) { + std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " finished at: " + get_current_time() ; + std::cout << output_time_info << std::endl; + test_process << output_time_info << std::endl; + } return true; } } @@ -305,7 +411,7 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o std::cout << "unknow isolation level" << std::endl; return false; } - std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, "set isolation", "dbc", m_hDatabaseConnection, ret, test_process_file); + std::string err_info_stmt = DBConnector::SqlExecuteErr(session_id, 1024, "set isolation", "dbc", m_hDatabaseConnection, ret, test_process_file); if (!err_info_stmt.empty()) { return false; } @@ -321,16 +427,16 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o std::cout << "unknow isolation level" << std::endl; return false; } - TestResultSet test_result_set; - std::string sql; - if (db_type == "oracle") { - sql = "alter session set isolation_level =" + iso; - } else if (db_type == "ob") { - sql = "set session transaction isolation level " + iso + ";"; - } - if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { - return false; - } + TestResultSet test_result_set; + std::string sql; + if (db_type == "oracle") { + sql = "alter session set isolation_level =" + iso; + } else if (db_type == "ob") { + sql = "set session transaction isolation level " + iso + ";"; + } + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } } return true; } diff --git a/src/dbtest/src/sql_cntl.h b/src/dbtest/src/sql_cntl.h index 4721730e..afa3b1a8 100644 --- a/src/dbtest/src/sql_cntl.h +++ b/src/dbtest/src/sql_cntl.h @@ -43,7 +43,7 @@ class DBConnector { (SQLCHAR*)user.c_str(), SQL_NTS, (SQLCHAR*)passwd.c_str(), SQL_NTS); - std::string err_info_stmt = DBConnector::SqlExecuteErr(1, "connnected", "dbc", m_hDatabaseConnection, ret); + std::string err_info_stmt = DBConnector::SqlExecuteErr(1, 1024, "connnected", "dbc", m_hDatabaseConnection, ret); if (err_info_stmt != "") { return false; } @@ -66,7 +66,7 @@ class DBConnector { void ErrInfoWithStmt(std::string handle_type, SQLHANDLE& handle, SQLCHAR ErrInfo[], SQLCHAR SQLState[]); std::vector DBConnPool() {return conn_pool_;}; - std::string SqlExecuteErr(int session_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file=""); + std::string SqlExecuteErr(int session_id, int sql_id, const std::string& sql, std::string handle_type, SQLHANDLE& handle, SQLRETURN ret, std::string test_process_file=""); bool SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file=""); bool SQLStartTxn(int session_id, int sql_id, std::string test_process_file=""); diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index d971c25f..5ff36c12 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -10,70 +10,86 @@ */ #include "gflags/gflags.h" #include "sqltest.h" +#include +#include +#include +#include DEFINE_string(db_type, "mysql", "data resource name, please see /etc/odbc.ini, such as mysql pg oracle ob tidb sqlserver crdb"); DEFINE_string(user, "test123", "username"); DEFINE_string(passwd, "Ly.123456", "password"); DEFINE_string(db_name, "test", "create database name"); -DEFINE_int32(conn_pool_size, 4, "db_conn pool size"); +DEFINE_int32(conn_pool_size, 6, "db_conn pool size"); DEFINE_string(isolation, "serializable", "transation isolation level: read-uncommitted read-committed repeatable-read serializable"); DEFINE_string(case_dir, "mysql", "test case dir name"); -DEFINE_string(timeout, "2", "timeout"); +DEFINE_string(timeout, "20", "timeout"); -bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { - std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; - std::cout << test_process_file << std::endl; - std::ifstream test_process_tmp(test_process_file); - if (test_process_tmp) { - std::remove(test_process_file.c_str()); - } - std::ofstream test_process(test_process_file, std::ios::app); - - if (!test_process) { - std::cout << "create test_process_file failed" << std::endl; - } - test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; - std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; +// std::vector mutex_txn(5); // same as conn_pool_size +std::vector mutex_txn(6); // same as conn_pool_size - std::string test_case_type = test_sequence.TestCaseType(); - auto index_t = test_case_type.find_first_of("_"); - if (index_t != test_case_type.npos) { - test_case_type = test_case_type.substr(int(index_t) + 1); - } - test_process << "#### test_type: " + test_case_type + " ####" << std::endl; - test_process << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; +bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) +{ + struct timespec timeoutTime; + timeoutTime.tv_nsec = wait_nanosecond; + timeoutTime.tv_sec = wait_second; + return pthread_mutex_timedlock( mutex_txn[txn_id], &timeoutTime ) == 0; // == 0 locked else no lock +} - std::cout << "#### test_type: " + test_case_type + " ####" << std::endl; - std::cout << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; - std::string current_info = "current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas"; - std::string expected_info = "expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory"; - std::cout << current_info << std::endl; - std::cout << expected_info << std::endl; - test_process << current_info << std::endl; - test_process << expected_info << std::endl; - - std::cout << " " << std::endl; - test_process << " " << std::endl; - if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { - test_process << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl; +bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, + DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ + + usleep(1000000*sleeptime); + + std::ofstream test_process(test_process_file, std::ios::app); + int txn_id; + if (txn_sql_list.size() && txn_sql_list[0].TxnId()){ + txn_id = txn_sql_list[0].TxnId(); + pthread_mutex_lock(mutex_txn[txn_id]); + /* + float wait_second = 5; + float wait_nanosecond = 0; + if (!try_lock_wait(wait_second, wait_nanosecond, txn_id)) + { + std::string blank(blank_base*(txn_id - 1), ' '); + // std::cout<< blank <<"wait too long"< txn_sql_list = test_sequence.TxnSqlList(); - std::cout << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; - test_process << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; - //int i = 0; - std::unordered_map> cur_result_set; - std::unordered_map sql_map; - std::string table_name; - int sql_id_old; for (auto& txn_sql : txn_sql_list) { + // std::cout << " asdfg " << std::endl; + + // usleep(1000000); + // mutex_txn[txn_sql.TxnId()]->lock(); + // std::cout << " SQLID: " << txn_sql_list[0].SqlId() << " TXNID: " << txn_sql_list[0].TxnId() << " SQL: " << txn_sql_list[0].Sql() << std::endl; int sql_id = txn_sql.SqlId(); - int txn_id = txn_sql.TxnId(); + txn_id = txn_sql.TxnId(); std::string sql = txn_sql.Sql(); - sql_map[sql_id] = sql; + + if (FLAGS_db_type == "oracle") { + std::string sub_str ("IF EXISTS"); + if (sql.find(sub_str) != std::string::npos) { + // std::cout << " sql: " << sql << std::endl; + sql = std::regex_replace(sql, std::regex("IF EXISTS "), ""); + sql = std::regex_replace(sql, std::regex("if exists "), ""); + // std::cout << " sql: " << sql << std::endl; + std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; + // std::cout << " sql: " << sql_timeout << std::endl; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + goto jump; + } + } + + } + + std::string ret_type = test_result_set.ResultType(); auto index_T = ret_type.find("Timeout"); @@ -82,9 +98,9 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t for (int i = 0; i < FLAGS_conn_pool_size; i++) { if (FLAGS_db_type != "ob") { if (FLAGS_db_type == "crdb") { - db_connector.ExecWriteSql(1024, "ROLLBACK TRANSACTION", test_result_set, i + 1); + db_connector.ExecWriteSql(1024, "ROLLBACK TRANSACTION", test_result_set, i + 1, test_process_file); } else { - db_connector.SQLEndTnx("rollback", i + 1, 1024, test_result_set, FLAGS_db_type); + db_connector.SQLEndTnx("rollback", i + 1, 1024, test_result_set, FLAGS_db_type,test_process_file); } } } @@ -100,7 +116,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t auto index_rollback = sql.find("ROLLBACK"); auto index_rollback_1 = sql.find("rollback"); - if (sql_id == 1 && sql_id_old == 0) { + if (sql_id == 1) { std::cout << "" << std::endl; test_process << "" << std::endl; std::cout << dash + test_sequence.TestCaseType() + " test run" + dash << std::endl; @@ -108,63 +124,320 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t } if (index_read != sql.npos || index_read_1 != sql.npos) { if (!db_connector.ExecReadSql2Int(sql_id, sql, test_result_set, cur_result_set, txn_id, test_sequence.ParamNum(), test_process_file)) { - return false; + goto jump; } } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { if (FLAGS_db_type == "tidb") { - if (!db_connector.ExecWriteSql(0, "BEGIN PESSIMISTIC;", test_result_set, txn_id)) { - return false; + if (!db_connector.ExecWriteSql(0, "BEGIN PESSIMISTIC;", test_result_set, txn_id, test_process_file)) { + goto jump; } } else { if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { - return false; + goto jump; } // set pg lock timeout if (FLAGS_db_type == "pg") { std::string sql_timeout = "SET LOCAL lock_timeout = '" + FLAGS_timeout + "s';"; - if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id)) { - return false; + if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + goto jump; } } + // // oracle + // if (FLAGS_db_type == "oracle") { + // std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; + // std::cout << " sql: " << sql_timeout << std::endl; + // if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { + // goto jump; + // } + // } + // // alter session set ddl_lock_timeout = 5 + } } else { if (FLAGS_db_type == "crdb") { if (!db_connector.ExecWriteSql(0, "BEGIN TRANSACTION;", test_result_set, txn_id, test_process_file)) { - return false; + goto jump; } } else { if (!db_connector.ExecWriteSql(0, "BEGIN;", test_result_set, txn_id, test_process_file)) { - return false; + goto jump; } } } } else if (index_commit != sql.npos || index_commit_1 != sql.npos) { if (FLAGS_db_type != "crdb") { - if (!db_connector.SQLEndTnx("commit", txn_id, sql_id, test_result_set, test_process_file)) { - return false; + if (!db_connector.SQLEndTnx("commit", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; } } else { if (!db_connector.ExecWriteSql(0, "COMMIT TRANSACTION;", test_result_set, txn_id, test_process_file)) { - return false; + goto jump; } } } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { - if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, test_process_file)) { - return false; + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; } } else { if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id, test_process_file)) { - return false; + goto jump; } } - sql_id_old = sql_id; + + // mutex_txn[txn_id]->unlock(); } + pthread_mutex_unlock(mutex_txn[txn_id]); + return true; +jump: + pthread_mutex_unlock(mutex_txn[txn_id]); + // mutex_txn[txn_id]->unlock(); + return false; + + +}; + +bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector) { + std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + ".txt"; + // std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + std::cout << test_process_file << std::endl; + std::ifstream test_process_tmp(test_process_file); + if (test_process_tmp) { + std::remove(test_process_file.c_str()); + } + std::ofstream test_process(test_process_file, std::ios::app); + + if (!test_process) { + std::cout << "create test_process_file failed" << std::endl; + } + + test_process << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + std::cout << "#### db_type: " + FLAGS_db_type + " ####" << std::endl; + + std::string test_case_type = test_sequence.TestCaseType(); + auto index_t = test_case_type.find_first_of("_"); + if (index_t != test_case_type.npos) { + test_case_type = test_case_type.substr(int(index_t) + 1); + } + test_process << "#### test_type: " + test_case_type + " ####" << std::endl; + test_process << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::cout << "#### test_type: " + test_case_type + " ####" << std::endl; + std::cout << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; + + std::string current_info = "current_result: The query result of the current SQL statement. Each row of table is separated by a space, and the fields in each row are separated by commas"; + std::string expected_info = "expected_result: The expected result is the expected query result for each SQL that conforms to the serializability theory"; + std::cout << current_info << std::endl; + std::cout << expected_info << std::endl; + test_process << current_info << std::endl; + test_process << expected_info << std::endl; + + std::cout << " " << std::endl; + test_process << " " << std::endl; + + if (FLAGS_db_type != "oracle" && FLAGS_db_type != "ob") { + test_process << "set TXN_ISOLATION = " + FLAGS_isolation + " for each session"<< std::endl; + } + + std::vector txn_sql_list = test_sequence.TxnSqlList(); + std::cout << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; + test_process << dash + test_sequence.TestCaseType() + " test prepare" + dash << std::endl; + //int i = 0; + std::unordered_map> cur_result_set; + std::unordered_map sql_map; + std::string table_name; + + + std::vector> init_group; + std::vector> split_groups; + std::vector group; + + // for(int i = 0; i != txn_sql_list.size(); i++) { + // std::cout << txn_sql_list[i].SqlId() << std::endl; + // } + + // std::cout << " SQLID: " << txn_sql_list[0].SqlId() << " TXNID: " << txn_sql_list[0].TxnId() << " SQL: " << txn_sql_list[0].Sql() << std::endl; + int txn_id_old; + int thread_cnt = 0; + for (auto& txn_sql : txn_sql_list) { + // split into anther group + if (txn_sql.SqlId() == 1 || txn_sql.TxnId() != txn_id_old){ + // put into init group + if (txn_sql.SqlId() == 1) { + init_group.push_back(group); + group.clear(); + } + // put into parallel groups + else{ + split_groups.push_back(group); + group.clear(); + thread_cnt = thread_cnt + 1; + } + } + sql_map[txn_sql.SqlId()] = txn_sql.Sql();; + // add into the same group + TxnSql txn_sql1(txn_sql.SqlId(), txn_sql.TxnId(), txn_sql.Sql(), txn_sql.TestCaseType()); + group.push_back(txn_sql1); + txn_id_old = txn_sql.TxnId(); + } + split_groups.push_back(group); + thread_cnt = thread_cnt + 1; + + for (auto& group : init_group) { + // for (auto& txn_sql : group) { + // std::cout << " SQLID: " << txn_sql.SqlId() << " TXNID: " << txn_sql.TxnId() << " SQL: " << txn_sql.Sql() << std::endl; + // } + // std::cout << std::endl; + + if (! MultiThreadExecution(group, test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} + + } + + std::vector threads; + + + for (int i = 0; i < thread_cnt; i++) { + // if (thread_cnt-1==i){ + // threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), std::ref(test_process_file), std::ref(cur_result_set), i*2+1+1)); + // } else{ + // threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), std::ref(test_process_file), std::ref(cur_result_set), i*2+1)); + // } + threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), test_process_file, std::ref(cur_result_set), i+1)); + } + + for (auto &th : threads) { + th.join(); + // th.detach(); + } + + // threads[thread_cnt-1].detach(); + + // std::cout <<"wait too long"< " << std::endl; std::cout << " db_type: " + FLAGS_db_type << std::endl; std::cout << " user: " + FLAGS_user << std::endl; std::cout << " passwd: " + FLAGS_passwd << std::endl; std::cout << " isolation: " + FLAGS_isolation << std::endl; + // // mutex for txn + // //for(int i=0;i iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable"}; + std::vector iso_list = {"read-uncommitted", "read-committed", "repeatable-read", "serializable", "result_summary"}; for (auto iso : iso_list) { std::string iso_dir = FLAGS_db_type + "/" + iso; if (access(iso_dir.c_str(), 0) == -1) { @@ -244,16 +525,28 @@ int main(int argc, char* argv[]) { JobExecutor job_executor; int len = test_sequence_list.size(); for (int i = 0; i < len; i++) { + if (!job_executor.ExecTestSequence(test_sequence_list[i], test_result_set_list[i], db_connector)) { std::cout << "test sequence " + test_sequence_list[i].TestCaseType() + " execute failed" << std::endl; } else { std::string result_type = test_result_set_list[i].ResultType(); std::cout << "Test Result: " << result_type + "\n" << std::endl; } + // restart db connection + // db_connector.ReleaseConn(); + // if (!db_connector.InitDBConnector(FLAGS_user, FLAGS_passwd, FLAGS_db_type, FLAGS_conn_pool_size)) { + // std::cout << "init db_connector failed" << std::endl; + // } + // for(int i=0;i Date: Wed, 23 Mar 2022 21:07:29 +0800 Subject: [PATCH 16/81] Update test cases --- src/dbtest/src/sql_cntl.cc | 74 +++++++++++++++++-- src/dbtest/src/sqltest.cc | 51 ++++++++++--- .../t/pg/iat_mda_step_iat_uname_anomaly.txt | 34 ++++----- .../t/pg/wat_dda_full_write_skew_c1.txt | 4 +- .../t/pg/wat_dda_full_write_skew_c2.txt | 4 +- .../pg/wat_dda_full_write_skew_committed.txt | 4 +- 6 files changed, 132 insertions(+), 39 deletions(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index c15cad6e..cd9d996a 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -12,6 +12,7 @@ #include #include #include +#include std::string get_current_time(){ @@ -161,8 +162,9 @@ bool DBConnector::ExecWriteSql(int sql_id, const std::string& sql, TestResultSet } // execute sql if (sql_id != 1024) { + std::string sql1 = std::regex_replace(sql, std::regex("rollback"), "ROLLBACK"); std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql + "'"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute sql: '" + sql1 + "'"; std::cout << output_info << std::endl; if (!test_process_file.empty()) { std::ofstream test_process(test_process_file, std::ios::app); @@ -292,7 +294,17 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestResultSet& test_result_set, const std::string& db_type, std::string test_process_file) { if (sql_id != 1024) { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '" + opt + "'"; + std::string output_info; + if ("commit" == opt) { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ "COMMIT" +"';"; + } + else if ("rollback" == opt) { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ "ROLLBACK" +"';"; + } + else { + output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+ opt +"';"; + } + std::cout << output_info << std::endl; if (!test_process_file.empty()) { std::ofstream test_process(test_process_file, std::ios::app); @@ -305,7 +317,16 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes if ("commit" == opt) { ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_COMMIT); } else if ("rollback" == opt) { - ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + if (db_type != "crdb"){ + ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); + } else { + std::string sql = "ROLLBACK TRANSCATION;"; + // std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } + } else { std::cout << "unknow txn opt" << std::endl; } @@ -348,7 +369,7 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce return false; } else { std::string blank(blank_base*(session_id - 1), ' '); - std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+"begin'"; + std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+"BEGIN;'"; std::cout << output_info << std::endl; test_process << output_info << std::endl; // if (!test_process) { @@ -397,16 +418,41 @@ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string } bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { + // oracle mode if (db_type != "oracle" && db_type != "ob") { + // mysql mode + // if (db_type != "oracle") { SQLRETURN ret; if (opt == "read-uncommitted") { ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_UNCOMMITTED, 0); } else if (opt == "read-committed") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); } else if (opt == "repeatable-read") { - ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_REPEATABLE_READ, 0); } else if (opt == "serializable") { ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, 0); + } else if (opt == "snapshot") { + TestResultSet test_result_set; + std::string sql; + sql = "ALTER DATABASE CURRENT SET ALLOW_SNAPSHOT_ISOLATION ON;"; // SI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + sql = "SET TRANSACTION ISOLATION LEVEL SNAPSHOT;"; // SI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } + } else if (opt == "rcsnapshot") { + ret = SQLSetConnectAttr(m_hDatabaseConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED, 0); + TestResultSet test_result_set; + std::string sql; + sql = "ALTER DATABASE CURRENT SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT;"; // RCSI + std::cout << sql << std::endl; + if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + return false; + } } else { std::cout << "unknow isolation level" << std::endl; return false; @@ -415,7 +461,8 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o if (!err_info_stmt.empty()) { return false; } - } else { + } + else { std::string iso; if (opt == "read-committed") { iso = "read committed"; @@ -438,5 +485,18 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o return false; } } + + // // snapshot mode for myrocks + // if (db_type == "myrocks") { + // TestResultSet test_result_set; + // std::string sql; + // // sql = "START TRANSACTION WITH CONSISTENT ROCKSDB SNAPSHOT"; + // sql = "START TRANSACTION WITH CONSISTENT SNAPSHOT"; + // if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { + // return false; + // } + // std::cout << sql << std::endl; + // } + return true; } diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 5ff36c12..26831620 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -42,6 +42,7 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ usleep(1000000*sleeptime); + std::ofstream test_process(test_process_file, std::ios::app); int txn_id; @@ -73,7 +74,10 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ txn_id = txn_sql.TxnId(); std::string sql = txn_sql.Sql(); - if (FLAGS_db_type == "oracle") { + // oracle mode + if (FLAGS_db_type == "oracle" || FLAGS_db_type == "ob") { + // mysql mode + // if (FLAGS_db_type == "oracle") { std::string sub_str ("IF EXISTS"); if (sql.find(sub_str) != std::string::npos) { // std::cout << " sql: " << sql << std::endl; @@ -88,7 +92,15 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ } } - + + // replace sql keywords to capital + sql = std::regex_replace(sql, std::regex("set"), "SET"); // replace 'set' -> 'SET' + sql = std::regex_replace(sql, std::regex("from"), "FROM"); // replace 'from' -> 'FROM' + sql = std::regex_replace(sql, std::regex("values"), "VALUES"); + sql = std::regex_replace(sql, std::regex("where"), "WHERE"); + sql = std::regex_replace(sql, std::regex("insert"), "INSERT"); + sql = std::regex_replace(sql, std::regex("select"), "SELECT"); + sql = std::regex_replace(sql, std::regex("update"), "UPDATE"); std::string ret_type = test_result_set.ResultType(); @@ -129,9 +141,15 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { if (FLAGS_db_type == "tidb") { - if (!db_connector.ExecWriteSql(0, "BEGIN PESSIMISTIC;", test_result_set, txn_id, test_process_file)) { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN PESSIMISTIC;", test_result_set, txn_id, test_process_file)) { + // if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { goto jump; } + // } else if (FLAGS_db_type == "myrocks") { + // if (!db_connector.ExecWriteSql(sql_id, "START TRANSACTION WITH CONSISTENT SNAPSHOT;", test_result_set, txn_id, test_process_file)) { + // // if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { + // goto jump; + // } } else { if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { goto jump; @@ -156,11 +174,11 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ } } else { if (FLAGS_db_type == "crdb") { - if (!db_connector.ExecWriteSql(0, "BEGIN TRANSACTION;", test_result_set, txn_id, test_process_file)) { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN TRANSACTION;", test_result_set, txn_id, test_process_file)) { goto jump; } } else { - if (!db_connector.ExecWriteSql(0, "BEGIN;", test_result_set, txn_id, test_process_file)) { + if (!db_connector.ExecWriteSql(sql_id, "BEGIN;", test_result_set, txn_id, test_process_file)) { goto jump; } } @@ -171,13 +189,19 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ goto jump; } } else { - if (!db_connector.ExecWriteSql(0, "COMMIT TRANSACTION;", test_result_set, txn_id, test_process_file)) { + if (!db_connector.ExecWriteSql(sql_id, "COMMIT TRANSACTION;", test_result_set, txn_id, test_process_file)) { goto jump; } } } else if (index_rollback != sql.npos || index_rollback_1 != sql.npos) { - if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { - goto jump; + if (FLAGS_db_type != "crdb") { + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; + } + } else { + if (!db_connector.SQLEndTnx("rollback", txn_id, sql_id, test_result_set, FLAGS_db_type, test_process_file)) { + goto jump; + } } } else { if (!db_connector.ExecWriteSql(sql_id, sql, test_result_set, txn_id, test_process_file)) { @@ -219,6 +243,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t if (index_t != test_case_type.npos) { test_case_type = test_case_type.substr(int(index_t) + 1); } + test_process << "#### test_type: " + test_case_type + " ####" << std::endl; test_process << "#### isolation: " + FLAGS_isolation + " ####\n" << std::endl; @@ -283,12 +308,20 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t split_groups.push_back(group); thread_cnt = thread_cnt + 1; + if (FLAGS_db_type == "crdb"){ + // remove non transaction commit + // remove the first commit at the prepraration + init_group[0].pop_back(); + // remove the last commit at verification selct + split_groups[thread_cnt-1].pop_back(); + } + + // std::cout << init_group.size() < Date: Tue, 29 Mar 2022 15:47:09 +0800 Subject: [PATCH 17/81] Update test cases --- .../t/pg/iat_mda_step_iat_uname_anomaly.txt | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt index 7c9dd76e..84b2c30e 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt @@ -10,14 +10,14 @@ ParamNum:2 3-3-BEGIN; 4-1-select * from t1 where k=1; 5-2-select * from t1 where k=0; -6-3-select * from t1 where k=0; -7-2-update t1 set v=1 where k=0; -8-2-select * from t1 where k=1; -9-2-update t1 set v=1 where k=1; -10-2-commit; -11-3-update t1 set v=2 where k=0; -12-3-select * from t1 where k=2; -13-3-update t1 set v=1 where k=2; +6-2-update t1 set v=1 where k=0; +7-2-select * from t1 where k=1; +8-2-update t1 set v=1 where k=1; +9-2-commit; +10-3-select * from t1 where k=2; +11-3-update t1 set v=1 where k=2; +12-3-select * from t1 where k=0; +13-3-update t1 set v=2 where k=0; 14-3-commit; 15-1-select * from t1 where k=2; 16-1-commit; @@ -27,49 +27,49 @@ ParamNum:2 serializable { 4-1,0 5-0,0 -6-0,1 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,1 15-2,0 17-0,2 1,1 2,1 4-1,0 5-0,2 -6-0,0 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,0 15-2,0 17-0,2 1,1 2,1 4-1,1 5-0,0 -6-0,1 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,1 15-2,0 17-0,2 1,1 2,1 4-1,2 5-0,0 -6-0,1 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,1 15-2,2 17-0,2 1,1 2,1 4-1,0 5-0,2 -6-0,0 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,0 15-2,1 17-0,2 1,1 2,1 4-1,1 5-0,2 -6-0,0 -8-1,0 -12-2,0 +7-1,0 +10-2,0 +12-0,0 15-2,1 17-0,2 1,1 2,1 -} +} \ No newline at end of file From 4a7f94c137ae7496e4a5b0d348c6f5765528eea8 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 1 Apr 2022 13:15:22 +0800 Subject: [PATCH 18/81] Put last group of test out of paralell exeuctions --- src/dbtest/src/sqltest.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 26831620..49439986 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -329,7 +329,8 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t std::vector threads; - for (int i = 0; i < thread_cnt; i++) { + // exlcude last group + for (int i = 0; i < thread_cnt-1; i++) { // if (thread_cnt-1==i){ // threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), std::ref(test_process_file), std::ref(cur_result_set), i*2+1+1)); // } else{ @@ -343,6 +344,11 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // th.detach(); } + // execute last group if correct + if (test_result_set.ResultType() == "") { + if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} + } + // threads[thread_cnt-1].detach(); // std::cout <<"wait too long"< Date: Fri, 1 Apr 2022 13:15:42 +0800 Subject: [PATCH 19/81] Update test cases --- .../t/pg/iat_dda_read_skew_committed.txt | 8 +- .../pg/iat_dda_read_write_skew1_committed.txt | 8 +- src/dbtest/t/pg/iat_dda_write_skew.txt | 10 +- .../t/pg/iat_dda_write_skew_committed.txt | 8 +- ...skew_predicate_based-intersecting_data.txt | 11 +-- ...w_predicate_based-overdraft_protection.txt | 16 +-- src/dbtest/t/pg/iat_mda_step_iat.txt | 32 +++--- ...a_step_iat_causality_violation_anomaly.txt | 20 ++-- .../pg/iat_mda_step_iat_cross_phenomenon.txt | 72 +++++++------- ...at_mda_step_iat_predicate_based_delete.txt | 30 +++--- ...at_mda_step_iat_predicate_based_insert.txt | 30 +++--- ...step_iat_read_only_transaction_anomaly.txt | 42 ++++---- .../t/pg/iat_mda_step_iat_uname_anomaly.txt | 52 +++++----- .../t/pg/iat_sda_lost_update_committed.txt | 8 +- .../iat_sda_non_repeatable_read_committed.txt | 9 +- .../t/pg/rat_dda_double_write_skew1.txt | 4 +- .../rat_dda_double_write_skew1_committed.txt | 4 +- .../t/pg/rat_dda_double_write_skew2.txt | 4 +- src/dbtest/t/pg/rat_dda_read_skew.txt | 8 +- src/dbtest/t/pg/rat_dda_read_skew2.txt | 4 +- .../t/pg/rat_dda_read_skew2_committed.txt | 5 +- ...t_dda_read_skew_predicate_based_delete.txt | 8 +- ...t_dda_read_skew_predicate_based_insert.txt | 9 +- ..._read_skew_predicate_based_insert_test.txt | 9 +- src/dbtest/t/pg/rat_dda_write_read_skew.txt | 6 +- .../pg/rat_dda_write_read_skew_committed.txt | 4 +- src/dbtest/t/pg/rat_mda_step_rat.txt | 22 ++--- .../t/pg/rat_mda_step_rat_long_fork.txt | 98 +++++++++---------- ...at_mda_step_rat_predicate_based_delete.txt | 22 ++--- ...at_mda_step_rat_predicate_based_insert.txt | 22 ++--- src/dbtest/t/pg/rat_sda_dirty_read.txt | 9 +- src/dbtest/t/pg/rat_sda_intermediate_read.txt | 4 +- .../rat_sda_intermediate_read_committed.txt | 4 +- src/dbtest/t/pg/rat_sda_lost_self_update.txt | 4 +- .../t/pg/rat_sda_non_repeatable_read.txt | 8 +- ...le_read_predicate_based-phantom_delete.txt | 8 +- ...le_read_predicate_based-phantom_insert.txt | 8 +- .../wat_dda_double_write_skew2_committed.txt | 4 +- .../t/pg/wat_dda_full_write_skew_c1.txt | 4 +- .../t/pg/wat_dda_full_write_skew_c2.txt | 4 +- .../pg/wat_dda_full_write_skew_committed.txt | 4 +- .../t/pg/wat_dda_read_write_skew1_c1.txt | 8 +- .../t/pg/wat_dda_read_write_skew1_c2.txt | 8 +- .../t/pg/wat_dda_read_write_skew2_c1.txt | 4 +- .../t/pg/wat_dda_read_write_skew2_c2.txt | 4 +- .../pg/wat_dda_read_write_skew2_committed.txt | 4 +- src/dbtest/t/pg/wat_mda_step_wat_c1.txt | 10 +- src/dbtest/t/pg/wat_mda_step_wat_c2.txt | 8 +- .../t/pg/wat_sda_dirty_write_1abort.txt | 7 +- .../t/pg/wat_sda_dirty_write_2commit.txt | 7 +- src/dbtest/t/pg/wat_sda_full_write.txt | 4 +- .../t/pg/wat_sda_full_write_committed.txt | 4 +- .../pg/wat_sda_lost_self_update_committed.txt | 4 +- src/dbtest/t/pg/wat_sda_lost_update_c1.txt | 8 +- src/dbtest/t/pg/wat_sda_lost_update_c2.txt | 8 +- 55 files changed, 367 insertions(+), 367 deletions(-) diff --git a/src/dbtest/t/pg/iat_dda_read_skew_committed.txt b/src/dbtest/t/pg/iat_dda_read_skew_committed.txt index 6b4d7bd1..6dc7af49 100644 --- a/src/dbtest/t/pg/iat_dda_read_skew_committed.txt +++ b/src/dbtest/t/pg/iat_dda_read_skew_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=1 WHERE k=1; 5-2-UPDATE t1 SET v=1 WHERE k=0; 6-2-COMMIT; @@ -16,11 +16,11 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 7-1,0 9-0,1 1,1 -3-0,1 +2-0,1 7-1,1 9-0,1 1,1 } \ No newline at end of file diff --git a/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt b/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt index 3124233c..794a5a36 100644 --- a/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt +++ b/src/dbtest/t/pg/iat_dda_read_write_skew1_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=1 WHERE k=0; 6-2-COMMIT; @@ -16,9 +16,9 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 9-0,1 1,2 -3-0,1 +2-0,1 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/iat_dda_write_skew.txt b/src/dbtest/t/pg/iat_dda_write_skew.txt index 6ff4a9e1..744cb016 100644 --- a/src/dbtest/t/pg/iat_dda_write_skew.txt +++ b/src/dbtest/t/pg/iat_dda_write_skew.txt @@ -5,22 +5,22 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-select * from t1 where k=0; +2-1-select * from t1 where k=0; +3-2-BEGIN; 4-2-select * from t1 where k=1; 5-2-update t1 set v=1 where k=0; 6-1-update t1 set v=1 where k=1; 7-1-COMMIT; 8-2-COMMIT; 9-3-select * from t1 ORDER BY k; -10-3-COMMIT; +8-3-COMMIT; serializable { -3-0,0 +2-0,0 4-1,1 9-0,1 1,1 -3-0,1 +2-0,1 4-1,0 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/iat_dda_write_skew_committed.txt b/src/dbtest/t/pg/iat_dda_write_skew_committed.txt index 72d11f58..d897428d 100644 --- a/src/dbtest/t/pg/iat_dda_write_skew_committed.txt +++ b/src/dbtest/t/pg/iat_dda_write_skew_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-select * from t1 where k=0; +2-1-select * from t1 where k=0; +3-2-BEGIN; 4-2-select * from t1 where k=1; 5-2-update t1 set v=1 where k=0; 6-2-COMMIT; @@ -16,11 +16,11 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 4-1,1 9-0,1 1,1 -3-0,1 +2-0,1 4-1,0 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt index 9131bf8c..e286f7b1 100644 --- a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt +++ b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-intersecting_data.txt @@ -7,25 +7,24 @@ ParamNum:2 0-1-INSERT INTO mytab VALUES (2, 200); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT SUM(value) FROM mytab WHERE class = 1; -4-1-INSERT INTO mytab VALUES (2, 30); +2-1-SELECT SUM(value) FROM mytab WHERE class = 1; +3-1-INSERT INTO mytab VALUES (2, 30); +4-2-BEGIN; 5-2-SELECT SUM(value) FROM mytab WHERE class = 2; 6-2-INSERT INTO mytab VALUES (1, 300); 7-2-COMMIT; 8-1-COMMIT; 9-3-SELECT SUM(value) FROM mytab WHERE class = 1; 10-3-SELECT SUM(value) FROM mytab WHERE class = 2; -11-3-DROP TABLE mytab; 12-3-COMMIT; serializable { -3-30, +2-30, 5-330, 9-330, 10-330, -3-330, +2-330, 5-300, 9-330, 10-330, diff --git a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt index 512caa75..0936ca4c 100644 --- a/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt +++ b/src/dbtest/t/pg/iat_dda_write_skew_predicate_based-overdraft_protection.txt @@ -5,22 +5,22 @@ ParamNum:3 0-1-insert into account values ('kevin','checking', 500); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-select type, balance from account where name = 'kevin'; +2-1-select type, balance from account where name = 'kevin'; +3-2-BEGIN; 4-2-select type, balance from account where name = 'kevin'; 5-2-update account set balance = balance + 900 where name = 'kevin' and type = 'saving'; 6-2-COMMIT; 7-1-update account set balance = balance + 900 where name = 'kevin' and type = 'checking'; 8-1-COMMIT: -10-3-select * from account; -11-3-COMMIT; +9-3-select * from account; +10-3-COMMIT; serializable { -3-checking,500, saving,500, +2-checking,500, saving,500, 4-checking,500, saving,1400, -10-kevin,checking,1400 kevin,saving,1400 +9-kevin,checking,1400 kevin,saving,1400 -3-checking,1400, saving,500, +2-checking,1400, saving,500, 4-checking,500, saving,500, -10-kevin,checking,1400 kevin,saving,1400 +9-kevin,checking,1400 kevin,saving,1400 } diff --git a/src/dbtest/t/pg/iat_mda_step_iat.txt b/src/dbtest/t/pg/iat_mda_step_iat.txt index 52113332..9f1a518a 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat.txt @@ -6,10 +6,10 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=2; -5-2-select * from t1 where k=0; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; 6-3-select * from t1 where k=1; 7-1-update t1 set v=1 where k=0; 8-2-update t1 set v=1 where k=1; @@ -21,33 +21,33 @@ ParamNum:2 14-4-COMMIT; serializable { -4-2,0 -5-0,1 +2-2,0 +4-0,1 6-1,1 13-0,1 1,1 2,1 -4-2,0 -5-0,1 +2-2,0 +4-0,1 6-1,0 13-0,1 1,1 2,1 -4-2,0 -5-0,0 +2-2,0 +4-0,0 6-1,1 13-0,1 1,1 2,1 -4-2,1 -5-0,0 +2-2,1 +4-0,0 6-1,1 13-0,1 1,1 2,1 -4-2,1 -5-0,1 +2-2,1 +4-0,1 6-1,0 13-0,1 1,1 2,1 -4-2,1 -5-0,0 +2-2,1 +4-0,0 6-1,0 13-0,1 1,1 2,1 } diff --git a/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt index 19b63934..74f59396 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_causality_violation_anomaly.txt @@ -5,11 +5,11 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=0; +2-1-select * from t1 where k=0; +3-2-BEGIN; 4-2-update t1 set v=1 where k=0; -6-2-commit; +5-2-commit; +6-3-BEGIN; 7-3-select * from t1 where k=0; 8-3-update t1 set v=1 where k=1; 9-3-commit; @@ -19,32 +19,32 @@ ParamNum:2 13-4-commit; serializable { -4-0,0 +2-0,0 7-0,1 10-1,0 12-0,1 1,1 -4-0,0 +2-0,0 7-0,0 10-1,0 12-0,1 1,1 -4-0,1 +2-0,1 7-0,1 10-1,1 12-0,1 1,1 -4-0,1 +2-0,1 7-0,1 10-1,0 12-0,1 1,1 -4-0,0 +2-0,0 7-0,0 10-1,1 12-0,1 1,1 -4-0,1 +2-0,1 7-0,0 10-1,1 12-0,1 1,1 diff --git a/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt b/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt index 59771ebd..de6d8b92 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_cross_phenomenon.txt @@ -5,13 +5,13 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-4-BEGIN; -5-1-select * from t1 where k=0; -6-2-select * from t1 where k=1; -7-3-update t1 set v=1 where k=0; -8-3-commit; +2-1-select * from t1 where k=0; +3-2-BEGIN; +4-2-select * from t1 where k=1; +5-3-BEGIN; +6-3-update t1 set v=1 where k=0; +7-3-commit; +8-4-BEGIN; 9-4-update t1 set v=1 where k=1; 10-4-commit; 11-2-select * from t1 where k=0; @@ -19,89 +19,89 @@ ParamNum:2 13-1-select * from t1 where k=1; 14-1-commit; 15-5-select * from t1 ORDER BY k; -16-5-commit; +16-5-COMMIT; serializable { -5-0,0 -6-1,0 +2-0,0 +4-1,0 13-1,0 11-0,0 15-0,1 1,1 -5-0,0 -6-1,1 +2-0,0 +4-1,1 13-1,0 11-0,0 15-0,1 1,1 -5-0,0 -6-1,0 +2-0,0 +4-1,0 13-1,0 11-0,1 15-0,1 1,1 -5-0,0 -6-1,1 +2-0,0 +4-1,1 13-1,0 11-0,1 15-0,1 1,1 -5-0,0 -6-1,0 +2-0,0 +4-1,0 13-1,1 11-0,0 15-0,1 1,1 -5-0,1 -6-1,0 +2-0,1 +4-1,0 13-1,0 11-0,0 15-0,1 1,1 -5-0,1 -6-1,0 +2-0,1 +4-1,0 13-1,1 11-0,0 15-0,1 1,1 -5-0,0 -6-1,1 +2-0,0 +4-1,1 13-1,1 11-0,0 15-0,1 1,1 -5-0,1 -6-1,0 +2-0,1 +4-1,0 13-1,0 11-0,1 15-0,1 1,1 -5-0,1 -6-1,1 +2-0,1 +4-1,1 13-1,1 11-0,1 15-0,1 1,1 -5-0,0 -6-1,1 +2-0,0 +4-1,1 13-1,1 11-0,1 15-0,1 1,1 -5-0,1 -6-1,1 +2-0,1 +4-1,1 13-1,1 11-0,0 15-0,1 1,1 -5-0,1 -6-1,1 +2-0,1 +4-1,1 13-1,0 11-0,1 15-0,1 1,1 -5-0,1 -6-1,0 +2-0,1 +4-1,0 13-1,1 11-0,1 15-0,1 1,1 diff --git a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt index 19b94ba9..b9a1ea80 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_delete.txt @@ -6,10 +6,10 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=2; -5-2-select * from t1 where k=0; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; 6-3-select * from t1 where k=1; 7-1-DELETE FROM t1 WHERE k=0; 8-2-DELETE FROM t1 WHERE k=1; @@ -21,33 +21,33 @@ ParamNum:2 14-4-COMMIT; serializable { -4-2,0 -5-null +2-2,0 +4-null 6-null 13-null -4-2,0 -5-null +2-2,0 +4-null 6-1,0 13-null -4-2,0 -5-0,0 +2-2,0 +4-0,0 6-null 13-null -4-null -5-0,0 +2-null +4-0,0 6-1,1 13-null +2-null 4-null -5-null 6-1,0 13-null -4-null -5-0,0 +2-null +4-0,0 6-1,0 13-null } \ No newline at end of file diff --git a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt index 526c2242..3f683ea3 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_predicate_based_insert.txt @@ -3,10 +3,10 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=2; -5-2-select * from t1 where k=0; +2-1-select * from t1 where k=2; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-3-BEGIN; 6-3-select * from t1 where k=1; 7-1-INSERT INTO t1 VALUES (0, 0); 8-2-INSERT INTO t1 VALUES (1, 0); @@ -18,33 +18,33 @@ ParamNum:2 14-4-COMMIT; serializable { -4-null -5-0,1 +2-null +4-0,1 6-1,1 13-0,1 1,1 2,1 -4-null -5-0,1 +2-null +4-0,1 6-null 13-0,1 1,1 2,1 +2-null 4-null -5-null 6-1,1 13-0,1 1,1 2,1 -4-2,1 -5-null +2-2,1 +4-null 6-1,1 13-0,1 1,1 2,1 -4-2,1 -5-0,1 +2-2,1 +4-0,1 6-null 13-0,1 1,1 2,1 -4-2,1 -5-null +2-2,1 +4-null 6-null 13-0,1 1,1 2,1 } diff --git a/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt index 947288ca..05df640e 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_read_only_transaction_anomaly.txt @@ -5,60 +5,60 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=0; -5-1-select * from t1 where k=1; -6-2-select * from t1 where k=1; +2-1-select * from t1 where k=0; +3-1-select * from t1 where k=1; +4-2-BEGIN; +5-2-select * from t1 where k=1; 6-2-update t1 set v=20 where k=1; 7-2-commit; +8-3-BEGIN; 9-3-select * from t1 where k=0; 10-3-select * from t1 where k=1; 11-3-commit; 12-1-update t1 set v=11 where k=0; 13-1-commit; 14-3-select * from t1 ORDER BY k; -15-3-commit; +15-3-COMMIT; serializable { -4-0,0 +2-0,0 +3-1,0 5-1,0 -6-1,0 9-0,11 10-1,20 14-0,11 1,20 -4-0,0 +2-0,0 +3-1,0 5-1,0 -6-1,0 9-0,11 10-1,0 14-0,11 1,20 -4-0,0 -5-1,20 -6-1,0 +2-0,0 +3-1,20 +5-1,0 9-0,0 10-1,20 14-0,11 1,20 -4-0,0 -5-1,20 -6-1,0 +2-0,0 +3-1,20 +5-1,0 9-0,11 10-1,20 14-0,11 1,20 -4-0,0 +2-0,0 +3-1,0 5-1,0 -6-1,0 9-0,0 10-1,0 14-0,11 1,20 -4-0,0 -5-1,20 -6-1,0 +2-0,0 +3-1,20 +5-1,0 9-0,0 10-1,0 14-0,11 1,20 diff --git a/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt index 84b2c30e..be4deaad 100644 --- a/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt +++ b/src/dbtest/t/pg/iat_mda_step_iat_uname_anomaly.txt @@ -6,14 +6,14 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-select * from t1 where k=1; -5-2-select * from t1 where k=0; -6-2-update t1 set v=1 where k=0; -7-2-select * from t1 where k=1; -8-2-update t1 set v=1 where k=1; -9-2-commit; +2-1-select * from t1 where k=1; +3-2-BEGIN; +4-2-select * from t1 where k=0; +5-2-update t1 set v=1 where k=0; +6-2-select * from t1 where k=1; +7-2-update t1 set v=1 where k=1; +8-2-commit; +9-3-BEGIN; 10-3-select * from t1 where k=2; 11-3-update t1 set v=1 where k=2; 12-3-select * from t1 where k=0; @@ -25,49 +25,49 @@ ParamNum:2 18-4-commit; serializable { -4-1,0 -5-0,0 -7-1,0 +2-1,0 +4-0,0 +6-1,0 10-2,0 12-0,1 15-2,0 17-0,2 1,1 2,1 -4-1,0 -5-0,2 -7-1,0 +2-1,0 +4-0,2 +6-1,0 10-2,0 12-0,0 15-2,0 17-0,2 1,1 2,1 -4-1,1 -5-0,0 -7-1,0 +2-1,1 +4-0,0 +6-1,0 10-2,0 12-0,1 15-2,0 17-0,2 1,1 2,1 -4-1,2 -5-0,0 -7-1,0 +2-1,2 +4-0,0 +6-1,0 10-2,0 12-0,1 15-2,2 17-0,2 1,1 2,1 -4-1,0 -5-0,2 -7-1,0 +2-1,0 +4-0,2 +6-1,0 10-2,0 12-0,0 15-2,1 17-0,2 1,1 2,1 -4-1,1 -5-0,2 -7-1,0 +2-1,1 +4-0,2 +6-1,0 10-2,0 12-0,0 15-2,1 diff --git a/src/dbtest/t/pg/iat_sda_lost_update_committed.txt b/src/dbtest/t/pg/iat_sda_lost_update_committed.txt index 60d382c8..b8ecf732 100644 --- a/src/dbtest/t/pg/iat_sda_lost_update_committed.txt +++ b/src/dbtest/t/pg/iat_sda_lost_update_committed.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-2-COMMIT; 6-1-UPDATE t1 SET v=1 WHERE k=0; @@ -14,9 +14,9 @@ ParamNum:2 9-3-COMMIT; serializable { -3-0,0 +2-0,0 8-0,2 -3-0,2 +2-0,2 8-0,1 } diff --git a/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt b/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt index b2a5ff07..b6ca4463 100644 --- a/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt +++ b/src/dbtest/t/pg/iat_sda_non_repeatable_read_committed.txt @@ -4,21 +4,22 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN;; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=1 WHERE k=0; 5-2-COMMIT; 6-1-SELECT * from t1 WHERE k=0; 7-1-COMMIT; 8-3-SELECT * FROM t1; 9-3-COMMIT; +10-3-COMMIT; serializable { -3-0,0 +2-0,0 6-0,0 8-0,1 -3-0,1 +2-0,1 6-0,1 8-0,1 } diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew1.txt b/src/dbtest/t/pg/rat_dda_double_write_skew1.txt index 2a219378..83deae26 100644 --- a/src/dbtest/t/pg/rat_dda_double_write_skew1.txt +++ b/src/dbtest/t/pg/rat_dda_double_write_skew1.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-begin; -2-2-begin; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-begin; 4-2-update t1 set v=1 where k=1; 5-2-select * from t1 where k=0; 6-1-update t1 set v=2 where k=1; diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt b/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt index e0391273..bbe68e15 100644 --- a/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt +++ b/src/dbtest/t/pg/rat_dda_double_write_skew1_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-begin; -2-2-begin; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-begin; 4-2-update t1 set v=1 where k=1; 5-2-select * from t1 where k=0; 6-2-commit; diff --git a/src/dbtest/t/pg/rat_dda_double_write_skew2.txt b/src/dbtest/t/pg/rat_dda_double_write_skew2.txt index d5a5d2c1..9e81e864 100644 --- a/src/dbtest/t/pg/rat_dda_double_write_skew2.txt +++ b/src/dbtest/t/pg/rat_dda_double_write_skew2.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-begin; -2-2-begin; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-begin; 4-2-update t1 set v=1 where k=1; 5-2-update t1 set v=2 where k=0; 6-1-select * from t1 where k=1; diff --git a/src/dbtest/t/pg/rat_dda_read_skew.txt b/src/dbtest/t/pg/rat_dda_read_skew.txt index 24bc00a1..648f49b3 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=1 WHERE k=1; 5-2-UPDATE t1 SET v=1 WHERE k=0; 6-1-SELECT * from t1 WHERE k=1; @@ -16,11 +16,11 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 6-1,0 9-0,1 1,1 -3-0,1 +2-0,1 6-1,1 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/rat_dda_read_skew2.txt b/src/dbtest/t/pg/rat_dda_read_skew2.txt index 00af5caf..a3a4691d 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew2.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew2.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=1; 5-2-SELECT * from t1 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; diff --git a/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt b/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt index c066a7e5..4a43fdbc 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew2_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=1; 5-2-SELECT * from t1 WHERE k=0; 6-2-COMMIT; @@ -20,7 +20,6 @@ serializable { 5-0,1 9-0,1 1,1 - 4-1,0 5-0,0 9-0,1 1,1 diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt index e8fb7a1d..efbe28e5 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_delete.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-select * from t1 where v=0; +2-1-select * from t1 where v=0; +3-2-BEGIN; 4-2-DELETE FROM t1 WHERE k=1; 5-2-DELETE FROM t1 WHERE k=0; 6-2-COMMIT; @@ -16,12 +16,12 @@ ParamNum:2 10-3-COMMIT; serializable { -3-null +2-null 7-null 9-null -3-0,0 1,0 +2-0,0 1,0 7-0,0 1,0 9-null } diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt index f36c20f6..78b6e71a 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert.txt @@ -3,8 +3,8 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-select * from t1 where v=0; +2-1-select * from t1 where v=0; +3-2-BEGIN; 4-2-insert into t1 values(1,0); 5-2-insert into t1 values(0,0); 6-2-COMMIT; @@ -14,12 +14,11 @@ ParamNum:2 10-3-COMMIT; serializable { -3-null +2-null 7-null 9-0,0 1,0 - -3-0,0 1,0 +2-0,0 1,0 7-0,0 1,0 9-0,0 1,0 } diff --git a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt index 103ceaae..a46aadab 100644 --- a/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt +++ b/src/dbtest/t/pg/rat_dda_read_skew_predicate_based_insert_test.txt @@ -3,8 +3,8 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT SUM(v) FROM t1 WHERE k >= 1 ; +2-1-SELECT SUM(v) FROM t1 WHERE k >= 1 ; +3-2-BEGIN; 4-2-insert into t1 values(0,1); 5-2-insert into t1 values(1,2); 6-2-COMMIT; @@ -13,13 +13,14 @@ ParamNum:2 9-3-select * from t1 ORDER BY k; 10-3-COMMIT; + serializable { -3-, +2-, 7-, 9-0,1 1,2 -3-1 +2-1 7-2 9-0,1 1,2 } diff --git a/src/dbtest/t/pg/rat_dda_write_read_skew.txt b/src/dbtest/t/pg/rat_dda_write_read_skew.txt index e8bf94bb..90b9ada2 100644 --- a/src/dbtest/t/pg/rat_dda_write_read_skew.txt +++ b/src/dbtest/t/pg/rat_dda_write_read_skew.txt @@ -5,15 +5,15 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; 4-2-update t1 set v=1 where k=1; 5-2-select * from t1 where k=0; 6-1-select * from t1 where k=1; 7-2-COMMIT; 8-1-commit; 9-3-select * from t1 ORDER BY k; -10-3-commit; +10-3-COMMIT; serializable { 5-0,1 diff --git a/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt b/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt index fa152ac5..764cb1a2 100644 --- a/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt +++ b/src/dbtest/t/pg/rat_dda_write_read_skew_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; 4-2-update t1 set v=1 where k=1; 5-2-select * from t1 where k=0; 6-2-COMMIT; diff --git a/src/dbtest/t/pg/rat_mda_step_rat.txt b/src/dbtest/t/pg/rat_mda_step_rat.txt index 0515c030..6a3e0eb3 100644 --- a/src/dbtest/t/pg/rat_mda_step_rat.txt +++ b/src/dbtest/t/pg/rat_mda_step_rat.txt @@ -6,11 +6,11 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-update t1 set v=1 where k=0; -5-2-update t1 set v=1 where k=1; -6-2-select * from t1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=1 where k=1; +5-2-select * from t1 where k=0; +6-3-BEGIN; 7-3-update t1 set v=1 where k=2; 8-3-select * from t1 where k=1; 9-1-select * from t1 where k=2; @@ -21,32 +21,32 @@ ParamNum:2 14-4-COMMIT; serializable { -6-0,1 +5-0,1 8-1,1 9-2,0 13-0,1 1,1 2,1 -6-0,1 +5-0,1 8-1,0 9-2,0 13-0,1 1,1 2,1 -6-0,0 +5-0,0 8-1,1 9-2,0 13-0,1 1,1 2,1 -6-0,0 +5-0,0 8-1,1 9-2,1 13-0,1 1,1 2,1 -6-0,1 +5-0,1 8-1,0 9-2,1 13-0,1 1,1 2,1 -6-0,0 +5-0,0 8-1,0 9-2,1 13-0,1 1,1 2,1 diff --git a/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt b/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt index 52a46b1f..bda3a76c 100644 --- a/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt +++ b/src/dbtest/t/pg/rat_mda_step_rat_long_fork.txt @@ -5,13 +5,13 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-4-BEGIN; -2-1-BEGIN; -3-3-BEGIN; -4-2-BEGIN; -5-4-select * from t1 where k=0; -6-1-update t1 set v=1 where k=0; -7-3-select * from t1 where k=1; -8-3-select * from t1 where k=0; +2-4-select * from t1 where k=0; +3-1-BEGIN; +4-1-update t1 set v=1 where k=0; +5-3-BEGIN; +6-3-select * from t1 where k=1; +7-3-select * from t1 where k=0; +8-2-BEGIN; 9-2-update t1 set v=1 where k=1; 10-4-select * from t1 where k=1; 11-1-commit; @@ -22,87 +22,87 @@ ParamNum:2 16-4-commit; serializable { -5-0,0 -7-1,0 -8-0,0 +2-0,0 +6-1,0 +7-0,0 10-1,0 15-0,1 1,1 -5-0,1 -7-1,0 -8-0,0 +2-0,1 +6-1,0 +7-0,0 10-1,1 15-0,1 1,1 -5-0,0 -7-1,1 -8-0,1 +2-0,0 +6-1,1 +7-0,1 10-1,0 15-0,1 1,1 -5-0,1 -7-1,1 -8-0,1 +2-0,1 +6-1,1 +7-0,1 10-1,1 15-0,1 1,1 -5-0,1 -7-1,0 -8-0,1 +2-0,1 +6-1,0 +7-0,1 10-1,0 15-0,1 1,1 -5-0,0 -7-1,1 -8-0,0 +2-0,0 +6-1,1 +7-0,0 10-1,1 15-0,1 1,1 -5-0,1 -7-1,1 -8-0,1 +2-0,1 +6-1,1 +7-0,1 10-1,0 15-0,1 1,1 -5-0,1 -7-1,0 -8-0,1 +2-0,1 +6-1,0 +7-0,1 10-1,1 15-0,1 1,1 -5-0,0 -7-1,1 -8-0,1 +2-0,0 +6-1,1 +7-0,1 10-1,1 15-0,1 1,1 -5-0,1 -7-1,1 -8-0,0 +2-0,1 +6-1,1 +7-0,0 10-1,1 15-0,1 1,1 -5-0,0 -7-1,0 -8-0,0 +2-0,0 +6-1,0 +7-0,0 10-1,1 15-0,1 1,1 -5-0,1 -7-1,0 -8-0,0 +2-0,1 +6-1,0 +7-0,0 10-1,0 15-0,1 1,1 -5-0,0 -7-1,0 -8-0,1 +2-0,0 +6-1,0 +7-0,1 10-1,0 15-0,1 1,1 -5-0,0 -7-1,1 -8-0,0 +2-0,0 +6-1,1 +7-0,0 10-1,0 15-0,1 1,1 } diff --git a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt index 93ab0b91..877ed9de 100644 --- a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt +++ b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_delete.txt @@ -6,11 +6,11 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 1); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-DELETE FROM t1 WHERE k=0; -5-2-DELETE FROM t1 WHERE k=1; -6-2-SELECT SUM(v) FROM t1 WHERE k = 0; +2-1-DELETE FROM t1 WHERE k=0; +3-2-BEGIN; +4-2-DELETE FROM t1 WHERE k=1; +5-2-SELECT SUM(v) FROM t1 WHERE k = 0; +6-3-BEGIN; 7-3-DELETE FROM t1 WHERE k=2; 8-3-SELECT SUM(v) FROM t1 WHERE k = 1; 9-1-SELECT SUM(v) FROM t1 WHERE k = 2; @@ -21,32 +21,32 @@ ParamNum:2 14-4-COMMIT; serializable { -6-, +5-, 8-, 9-1, 13-null -6-, +5-, 8-1, 9-1, 13-null -6-1, +5-1, 8-, 9-1, 13-null -6-1, +5-1, 8-1, 9-, 13-null -6-, +5-, 8-1, 9-, 13-null -6-1, +5-1, 8-1, 9-, 13-null diff --git a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt index 327444c5..06f68f2d 100644 --- a/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt +++ b/src/dbtest/t/pg/rat_mda_step_rat_predicate_based_insert.txt @@ -3,11 +3,11 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-INSERT INTO t1 VALUES (0, 1); -5-2-INSERT INTO t1 VALUES (1, 1); -6-2-SELECT SUM(v) FROM t1 WHERE k = 0; +2-1-INSERT INTO t1 VALUES (0, 1); +3-2-BEGIN; +4-2-INSERT INTO t1 VALUES (1, 1); +5-2-SELECT SUM(v) FROM t1 WHERE k = 0; +6-3-BEGIN; 7-3-INSERT INTO t1 VALUES (2, 1); 8-3-SELECT SUM(v) FROM t1 WHERE k = 1; 9-1-SELECT SUM(v) FROM t1 WHERE k = 2; @@ -18,32 +18,32 @@ ParamNum:2 14-4-COMMIT; serializable { -6-, +5-, 8-1, 9-1, 13-0,1 1,1 2,1 -6-, +5-, 8-1, 9-, 13-0,1 1,1 2,1 -6-, +5-, 8-, 9-1, 13-0,1 1,1 2,1 -6-1, +5-1, 8-, 9-1, 13-0,1 1,1 2,1 -6-1, +5-1, 8-1, 9-, 13-0,1 1,1 2,1 -6-1, +5-1, 8-, 9-, 13-0,1 1,1 2,1 diff --git a/src/dbtest/t/pg/rat_sda_dirty_read.txt b/src/dbtest/t/pg/rat_sda_dirty_read.txt index 9c4dbdce..51a54867 100644 --- a/src/dbtest/t/pg/rat_sda_dirty_read.txt +++ b/src/dbtest/t/pg/rat_sda_dirty_read.txt @@ -3,15 +3,14 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; -1-2-BEGIN; -2-1-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +1-1-BEGIN; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k = 0; 5-1-ROLLBACK; 6-2-COMMIT; 7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; -9-3-COMMIT; +8-3-COMMIT; serializable { 4-0,0 diff --git a/src/dbtest/t/pg/rat_sda_intermediate_read.txt b/src/dbtest/t/pg/rat_sda_intermediate_read.txt index ac605837..7054534f 100644 --- a/src/dbtest/t/pg/rat_sda_intermediate_read.txt +++ b/src/dbtest/t/pg/rat_sda_intermediate_read.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=0; 5-1-UPDATE t1 SET v=2 WHERE k=0; 6-2-COMMIT; diff --git a/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt b/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt index 8ee1ecfc..cd9132fe 100644 --- a/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt +++ b/src/dbtest/t/pg/rat_sda_intermediate_read_committed.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=0; 5-2-COMMIT; 6-1-UPDATE t1 SET v=2 WHERE k=0; diff --git a/src/dbtest/t/pg/rat_sda_lost_self_update.txt b/src/dbtest/t/pg/rat_sda_lost_self_update.txt index b8cd876c..31745804 100644 --- a/src/dbtest/t/pg/rat_sda_lost_self_update.txt +++ b/src/dbtest/t/pg/rat_sda_lost_self_update.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-SELECT * from t1 WHERE k=0; 6-1-COMMIT; diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt index 55d3d966..18d8be0b 100644 --- a/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN;; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN;; 4-2-UPDATE t1 SET v=1 WHERE k=0; 5-1-SELECT * from t1 WHERE k=0; 6-2-COMMIT; @@ -14,11 +14,11 @@ ParamNum:2 9-3-COMMIT; serializable { -3-0,0 +2-0,0 5-0,0 8-0,1 -3-0,1 +2-0,1 5-0,1 8-0,1 } \ No newline at end of file diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt index 7967d53a..0ae57913 100644 --- a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE v=0; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; 4-2-DELETE FROM t1 WHERE k=0; 5-2-COMMIT; 6-1-SELECT * from t1 WHERE v=0; @@ -14,11 +14,11 @@ ParamNum:2 9-3-COMMIT; serializable { -3-null +2-null 6-null 8-0,0 -3-0,0 +2-0,0 6-0,0 8-null } diff --git a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt index 8fdab8e9..408f7737 100644 --- a/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt +++ b/src/dbtest/t/pg/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt @@ -3,8 +3,8 @@ ParamNum:2 0-1-CREATE TABLE t1 (k INT PRIMARY KEY, v INT); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE v=0; +2-1-SELECT * from t1 WHERE v=0; +3-2-BEGIN; 4-2-INSERT INTO t1 VALUES (0, 0); 5-2-COMMIT; 6-1-SELECT * from t1 WHERE v=0; @@ -13,11 +13,11 @@ ParamNum:2 9-3-COMMIT; serializable { -3-null +2-null 6-null 8-0,0 -3-0,0 +2-0,0 6-0,0 8-0,0 } diff --git a/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt b/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt index be406517..c925c802 100644 --- a/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt +++ b/src/dbtest/t/pg/wat_dda_double_write_skew2_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-begin; -2-2-begin; -3-1-update t1 set v=1 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-begin; 4-2-update t1 set v=1 where k=1; 5-2-update t1 set v=2 where k=0; 6-2-commit; diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt index 3d6b71cc..2ad62d13 100644 --- a/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_c1.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt index 90356e11..e047cc73 100644 --- a/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_c2.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; diff --git a/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt b/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt index d0548f9a..de5b71d0 100644 --- a/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt +++ b/src/dbtest/t/pg/wat_dda_full_write_skew_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-2-COMMIT; diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt b/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt index 9595413a..e129c548 100644 --- a/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt +++ b/src/dbtest/t/pg/wat_dda_read_write_skew1_c1.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=1 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; @@ -16,9 +16,9 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 9-0,1 1,2 -3-0,1 +2-0,1 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt b/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt index ce6c922d..ad1a73ee 100644 --- a/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt +++ b/src/dbtest/t/pg/wat_dda_read_write_skew1_c2.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=1; 5-2-UPDATE t1 SET v=1 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; @@ -16,9 +16,9 @@ ParamNum:2 10-3-COMMIT; serializable { -3-0,0 +2-0,0 9-0,1 1,2 -3-0,1 +2-0,1 9-0,1 1,1 } diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt index d28d199a..2b92f31a 100644 --- a/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_c1.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt index b4a7b7d9..8c9f9aa6 100644 --- a/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_c2.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-1-UPDATE t1 SET v=1 WHERE k=1; diff --git a/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt b/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt index 4c95e3af..ade01f80 100644 --- a/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt +++ b/src/dbtest/t/pg/wat_dda_read_write_skew2_committed.txt @@ -5,8 +5,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (1, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-SELECT * from t1 WHERE k=1; 5-2-UPDATE t1 SET v=2 WHERE k=0; 6-2-COMMIT; diff --git a/src/dbtest/t/pg/wat_mda_step_wat_c1.txt b/src/dbtest/t/pg/wat_mda_step_wat_c1.txt index 15702073..1a57bfed 100644 --- a/src/dbtest/t/pg/wat_mda_step_wat_c1.txt +++ b/src/dbtest/t/pg/wat_mda_step_wat_c1.txt @@ -6,11 +6,11 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-update t1 set v=1 where k=0; -5-2-update t1 set v=2 where k=1; -6-2-update t1 set v=2 where k=0; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-2-update t1 set v=2 where k=0; +6-3-BEGIN; 7-3-update t1 set v=3 where k=2; 8-3-update t1 set v=3 where k=1; 9-1-update t1 set v=1 where k=2; diff --git a/src/dbtest/t/pg/wat_mda_step_wat_c2.txt b/src/dbtest/t/pg/wat_mda_step_wat_c2.txt index 725ee920..df78d474 100644 --- a/src/dbtest/t/pg/wat_mda_step_wat_c2.txt +++ b/src/dbtest/t/pg/wat_mda_step_wat_c2.txt @@ -6,10 +6,10 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (2, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-3-BEGIN; -4-1-update t1 set v=1 where k=0; -5-2-update t1 set v=2 where k=1; +2-1-update t1 set v=1 where k=0; +3-2-BEGIN; +4-2-update t1 set v=2 where k=1; +5-3-BEGIN; 6-2-update t1 set v=2 where k=0; 7-3-update t1 set v=3 where k=2; 8-3-update t1 set v=3 where k=1; diff --git a/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt b/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt index 65bc0d99..3a0a598e 100644 --- a/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt +++ b/src/dbtest/t/pg/wat_sda_dirty_write_1abort.txt @@ -4,13 +4,14 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-ROLLBACK; 6-2-COMMIT; 7-3-SELECT * FROM t1; -8-3-COMMIT; +8-3-DROP TABLE IF EXISTS t1; +9-3-COMMIT; serializable { 7-0,1 diff --git a/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt b/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt index 04f11881..736f479f 100644 --- a/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt +++ b/src/dbtest/t/pg/wat_sda_dirty_write_2commit.txt @@ -4,15 +4,16 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-COMMIT; 6-2-COMMIT; 7-3-SELECT * FROM t1; -8-3-DROP TABLE t1; +8-3-DROP TABLE IF EXISTS t1; 9-3-COMMIT; + serializable { 7-0,1 diff --git a/src/dbtest/t/pg/wat_sda_full_write.txt b/src/dbtest/t/pg/wat_sda_full_write.txt index e4cdc655..c4c9ceaf 100644 --- a/src/dbtest/t/pg/wat_sda_full_write.txt +++ b/src/dbtest/t/pg/wat_sda_full_write.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-UPDATE t1 SET v=3 WHERE k=0; 6-1-COMMIT; diff --git a/src/dbtest/t/pg/wat_sda_full_write_committed.txt b/src/dbtest/t/pg/wat_sda_full_write_committed.txt index 7b32563e..97b442de 100644 --- a/src/dbtest/t/pg/wat_sda_full_write_committed.txt +++ b/src/dbtest/t/pg/wat_sda_full_write_committed.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-2-COMMIT; 6-1-UPDATE t1 SET v=3 WHERE k=0; diff --git a/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt b/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt index f09f185b..7b8a0059 100644 --- a/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt +++ b/src/dbtest/t/pg/wat_sda_lost_self_update_committed.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-UPDATE t1 SET v=1 WHERE k=0; +2-1-UPDATE t1 SET v=1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-2-COMMIT; 6-1-SELECT * from t1 WHERE k=0; diff --git a/src/dbtest/t/pg/wat_sda_lost_update_c1.txt b/src/dbtest/t/pg/wat_sda_lost_update_c1.txt index 29a598ba..5bc21686 100644 --- a/src/dbtest/t/pg/wat_sda_lost_update_c1.txt +++ b/src/dbtest/t/pg/wat_sda_lost_update_c1.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-UPDATE t1 SET v=1 WHERE k=0; 6-1-COMMIT; @@ -14,9 +14,9 @@ ParamNum:2 9-3-COMMIT; serializable { -3-0,0 +2-0,0 8-0,2 -3-0,2 +2-0,2 8-0,1 } \ No newline at end of file diff --git a/src/dbtest/t/pg/wat_sda_lost_update_c2.txt b/src/dbtest/t/pg/wat_sda_lost_update_c2.txt index f508cb49..90c6cc76 100644 --- a/src/dbtest/t/pg/wat_sda_lost_update_c2.txt +++ b/src/dbtest/t/pg/wat_sda_lost_update_c2.txt @@ -4,8 +4,8 @@ ParamNum:2 0-1-INSERT INTO t1 VALUES (0, 0); 0-1-COMMIT; 1-1-BEGIN; -2-2-BEGIN; -3-1-SELECT * from t1 WHERE k=0; +2-1-SELECT * from t1 WHERE k=0; +3-2-BEGIN; 4-2-UPDATE t1 SET v=2 WHERE k=0; 5-1-UPDATE t1 SET v=1 WHERE k=0; 6-2-COMMIT; @@ -14,9 +14,9 @@ ParamNum:2 9-3-COMMIT; serializable { -3-0,0 +2-0,0 8-0,2 -3-0,2 +2-0,2 8-0,1 } \ No newline at end of file From 60fe6dfc49663d12fde86afcddfe47671d9a2d43 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 14 Apr 2022 11:38:54 +0800 Subject: [PATCH 20/81] Clean up and update test cases --- src/dbtest/CMakeLists.txt | 42 +++++++++---------- src/dbtest/src/kvtest.cc | 11 +++-- src/dbtest/src/sql_cntl.cc | 31 +++++--------- src/dbtest/src/sqltest.cc | 34 +++++++-------- ...w_predicate_based-overdraft_protection.txt | 2 +- .../iat_sda_non_repeatable_read_committed.txt | 1 - 6 files changed, 56 insertions(+), 65 deletions(-) diff --git a/src/dbtest/CMakeLists.txt b/src/dbtest/CMakeLists.txt index 39ed9667..3031302c 100644 --- a/src/dbtest/CMakeLists.txt +++ b/src/dbtest/CMakeLists.txt @@ -37,28 +37,28 @@ target_link_libraries(3ts_dbtest ${ODBC_LD}) ########### kv test ############## # all .cc files -list(APPEND SOURCE_FILES_KV - "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/kv_cntl.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/kvtest.cc" -) +#list(APPEND SOURCE_FILES_KV +# "${CMAKE_CURRENT_SOURCE_DIR}/src/common.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/case_cntl.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/kv_cntl.cc" +# "${CMAKE_CURRENT_SOURCE_DIR}/src/kvtest.cc" +#) # bin -add_executable(3ts_kvtest ${SOURCE_FILES_KV}) +#add_executable(3ts_kvtest ${SOURCE_FILES_KV}) # ld:bson mongo -find_package(bsoncxx REQUIRED) -find_package(mongocxx REQUIRED) -include_directories(${LIBMONGOCXX_INCLUDE_DIR}) -include_directories(${LIBBSONCXX_INCLUDE_DIR}) +#find_package(bsoncxx REQUIRED) +#find_package(mongocxx REQUIRED) +#include_directories(${LIBMONGOCXX_INCLUDE_DIR}) +#include_directories(${LIBBSONCXX_INCLUDE_DIR}) # link ld -target_link_libraries(3ts_kvtest PRIVATE mongo::bsoncxx_shared) -target_link_libraries(3ts_kvtest PRIVATE mongo::mongocxx_shared) -target_link_libraries(3ts_kvtest PRIVATE ${THIRD_PARTIES}) +#target_link_libraries(3ts_kvtest PRIVATE mongo::bsoncxx_shared) +#target_link_libraries(3ts_kvtest PRIVATE mongo::mongocxx_shared) +#target_link_libraries(3ts_kvtest PRIVATE ${THIRD_PARTIES}) # third parties .h -target_include_directories(3ts_kvtest PUBLIC - "/usr/local/include/mongocxx/v_noabi" - "/usr/local/include/bsoncxx/v_noabi" - "/usr/local/include/libmongoc-1.0" - "/usr/local/include/libbson-1.0" - "/usr/local/lib" - ) +#target_include_directories(3ts_kvtest PUBLIC +# "/usr/local/include/mongocxx/v_noabi" +# "/usr/local/include/bsoncxx/v_noabi" +# "/usr/local/include/libmongoc-1.0" +# "/usr/local/include/libbson-1.0" +# "/usr/local/lib" +# ) diff --git a/src/dbtest/src/kvtest.cc b/src/dbtest/src/kvtest.cc index 23cefcf8..735b1320 100644 --- a/src/dbtest/src/kvtest.cc +++ b/src/dbtest/src/kvtest.cc @@ -108,7 +108,8 @@ bool JobExecutor::MongoStmtExcutor(const int session_id, const int stmt_id, cons } bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& test_result_set, MongoConnector& mongo_connector) { - std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + // std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + "_" + FLAGS_isolation + ".txt"; + std::string test_process_file = "./" + FLAGS_db_type + "/" + FLAGS_isolation + "/" + test_sequence.TestCaseType() + ".txt"; std::cout << "test_process_file : " << test_process_file << std::endl; // remove old test_process_file std::ifstream test_process_tmp(test_process_file); @@ -175,7 +176,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t if (result_handler.IsTestExpectedResult(cur_result_set, test_result_set.ExpectedResultSetList(), stmt_map, test_process_file)) { test_result_set.SetResultType("Avoid\nReason: Data anomaly did not occur and the data is consistent"); } else { - test_result_set.SetResultType("Exception\nReason: Data anomaly is not recognized by the database, resulting in data inconsistencies"); + test_result_set.SetResultType("Anomaly\nReason: Data anomaly is not recognized by the database, resulting in data inconsistencies"); } } if(!outputter.WriteResultType(test_result_set.ResultType(), test_process_file)) { @@ -209,8 +210,10 @@ int main(int argc, char* argv[]) { std::cout << " db_type: " << FLAGS_db_type << std::endl; std::cout << " uri: " << FLAGS_uri << std::endl; std::cout << " isolation: " << FLAGS_isolation << std::endl; - // init mongo_connector + // init mongo_connector + // provide IP, port, and db MongoConnector mongo_connector("mongodb://9.134.39.34:27037/admin", "testdb"); + //MongoConnector mongo_connector("mongodb://9.134.218.253:27037/admin", "testdb"); mongo_connector.InitMongoConnector(4); // init excute obj CaseReader case_reader; @@ -220,7 +223,7 @@ int main(int argc, char* argv[]) { mkdir(FLAGS_db_type.c_str(), S_IRWXU); } // create isolation dir - std::string iso_dir = "snapshot"; + std::string iso_dir = FLAGS_db_type + "/snapshot"; if (access(iso_dir.c_str(), 0) == -1) { mkdir(iso_dir.c_str(), S_IRWXU); } diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index cd9d996a..5ffbf26b 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -19,10 +19,6 @@ std::string get_current_time(){ // date time_t d = time(0); tm* d_now = std::localtime(&d); - // std::cout << (d_now->tm_year + 1900) << '-' - // << (d_now->tm_mon + 1) << '-' - // << d_now->tm_mday - // << "\n"; // time std::chrono::time_point now = std::chrono::system_clock::now(); @@ -45,9 +41,7 @@ std::string get_current_time(){ duration -= microseconds; auto nanoseconds = std::chrono::duration_cast(duration); - - // return std::to_string(hours.count()) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" - // + std::to_string(milliseconds.count()) +":"+ std::to_string(microseconds.count()) +":"+ std::to_string(nanoseconds.count()); + // return it by year, month, day, and time return std::to_string(d_now->tm_year + 1900) + "-" + std::to_string(d_now->tm_mon + 1) + "-" + std::to_string(d_now->tm_mday) + " " + std::to_string(d_now->tm_hour) +':'+ std::to_string(minutes.count()) +":"+ std::to_string(seconds.count())+":" @@ -93,21 +87,17 @@ std::string DBConnector::SqlExecuteErr(int session_id, int sql_id, const std::st DBConnector::ErrInfoWithStmt(handle_type, handle, ErrInfo, SQLState); std::string err_info = SQLCHARToStr(ErrInfo); - // replace "\n" to " " - // replace(err_info, "\n", " "); - // std::string s = "one two three"; - // get error information of first line + // get error information of all line, comment it to get only first line + // replace "\n" to " " err_info = err_info.substr(0, err_info.find("\n")); auto index_not_exist = err_info.find("not exist"); auto index_crdb_rollback = sql.find("ROLLBACK TRANSACTION"); if (sql_id != 1024 && index_not_exist == err_info.npos && index_crdb_rollback == sql.npos) { + // some time between rollback queries usleep(100000*sql_id^3); std::cout << blank + "Q" + std::to_string(sql_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; test_process << blank + "Q" + std::to_string(sql_id) + " failed reason: " << err_info << " errcode: " << SQLState << std::endl; - // if (!test_process) { - // test_process << blank + "execute sql: '" + sql + "' failed, reason: " << ErrInfo << " errcode: " << SQLState << std::endl; - // } std::string output_time_info = blank + "Q" + std::to_string(sql_id) + " failed at: " + get_current_time() ; std::cout << output_time_info << std::endl; std::ofstream test_process(test_process_file, std::ios::app); @@ -273,8 +263,8 @@ bool DBConnector::ExecReadSql2Int(int sql_id, const std::string& sql, TestResult return true; } else { auto index_timeout1 = err_info_sql.find("timeout"); - auto index_timeout2 = err_info_sql.find("Timeout"); - auto index_timeout3 = err_info_sql.find("time out"); + auto index_timeout2 = err_info_sql.find("Timeout"); + auto index_timeout3 = err_info_sql.find("time out"); if (index_timeout1 != err_info_sql.npos || index_timeout2 != err_info_sql.npos || index_timeout3 != err_info_sql.npos) { if (test_result_set.ResultType() == ""){ test_result_set.SetResultType("Timeout\nReason: Transaction execution timeout"); @@ -321,7 +311,6 @@ bool DBConnector::SQLEndTnx(std::string opt, int session_id, int sql_id, TestRes ret = SQLEndTran(SQL_HANDLE_DBC, m_hDatabaseConnection, SQL_ROLLBACK); } else { std::string sql = "ROLLBACK TRANSCATION;"; - // std::cout << sql << std::endl; if (!DBConnector::ExecWriteSql(1024, sql, test_result_set, session_id, test_process_file)) { return false; } @@ -372,6 +361,7 @@ bool DBConnector::SQLStartTxn(int session_id, int sql_id, std::string test_proce std::string output_info = blank + "Q" + std::to_string(sql_id) + "-T" + std::to_string(session_id) + " execute opt: '"+"BEGIN;'"; std::cout << output_info << std::endl; test_process << output_info << std::endl; + // for test purpose // if (!test_process) { // test_process << output_info << std::endl; // } @@ -418,9 +408,9 @@ bool DBConnector::SetTimeout(int conn_id, std::string timeout, const std::string } bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string opt, int session_id, const std::string& db_type, std::string test_process_file) { - // oracle mode + // for ob oracle mode if (db_type != "oracle" && db_type != "ob") { - // mysql mode + // for ob mysql mode // if (db_type != "oracle") { SQLRETURN ret; if (opt == "read-uncommitted") { @@ -486,7 +476,8 @@ bool DBConnector::SetIsolationLevel(SQLHDBC m_hDatabaseConnection, std::string o } } - // // snapshot mode for myrocks + // Snapshot mode for myrocks + // comment for normal mode for 4 levels // if (db_type == "myrocks") { // TestResultSet test_result_set; // std::string sql; diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index 49439986..e4138760 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -26,7 +26,7 @@ DEFINE_string(timeout, "20", "timeout"); // std::vector mutex_txn(5); // same as conn_pool_size -std::vector mutex_txn(6); // same as conn_pool_size +std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) { @@ -37,11 +37,12 @@ bool try_lock_wait(float wait_second, float wait_nanosecond, int txn_id) } - bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_sequence, TestResultSet& test_result_set, DBConnector db_connector, std::string test_process_file, std::unordered_map>& cur_result_set, int sleeptime){ - usleep(1000000*sleeptime); + // time between queries + // usleep(1000000*sleeptime); // 1 second + usleep(100000*sleeptime); // 0.1 second std::ofstream test_process(test_process_file, std::ios::app); @@ -49,7 +50,7 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ if (txn_sql_list.size() && txn_sql_list[0].TxnId()){ txn_id = txn_sql_list[0].TxnId(); pthread_mutex_lock(mutex_txn[txn_id]); - /* + /* pthread for wait die float wait_second = 5; float wait_nanosecond = 0; if (!try_lock_wait(wait_second, wait_nanosecond, txn_id)) @@ -65,10 +66,8 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ } for (auto& txn_sql : txn_sql_list) { - // std::cout << " asdfg " << std::endl; - - // usleep(1000000); - // mutex_txn[txn_sql.TxnId()]->lock(); + + // for test purpose // std::cout << " SQLID: " << txn_sql_list[0].SqlId() << " TXNID: " << txn_sql_list[0].TxnId() << " SQL: " << txn_sql_list[0].Sql() << std::endl; int sql_id = txn_sql.SqlId(); txn_id = txn_sql.TxnId(); @@ -80,12 +79,9 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ // if (FLAGS_db_type == "oracle") { std::string sub_str ("IF EXISTS"); if (sql.find(sub_str) != std::string::npos) { - // std::cout << " sql: " << sql << std::endl; sql = std::regex_replace(sql, std::regex("IF EXISTS "), ""); sql = std::regex_replace(sql, std::regex("if exists "), ""); - // std::cout << " sql: " << sql << std::endl; std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; - // std::cout << " sql: " << sql_timeout << std::endl; if (!db_connector.ExecWriteSql(1024, sql_timeout, test_result_set, txn_id, test_process_file)) { goto jump; } @@ -141,15 +137,17 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ } else if (index_begin != sql.npos || index_begin_1 != sql.npos) { if (FLAGS_db_type != "crdb" && FLAGS_db_type != "ob") { if (FLAGS_db_type == "tidb") { + // Pessimistic mode if (!db_connector.ExecWriteSql(sql_id, "BEGIN PESSIMISTIC;", test_result_set, txn_id, test_process_file)) { + // Optimistic mode // if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { goto jump; } - // } else if (FLAGS_db_type == "myrocks") { - // if (!db_connector.ExecWriteSql(sql_id, "START TRANSACTION WITH CONSISTENT SNAPSHOT;", test_result_set, txn_id, test_process_file)) { - // // if (!db_connector.ExecWriteSql(sql_id, "BEGIN OPTIMISTIC;", test_result_set, txn_id, test_process_file)) { - // goto jump; - // } + // MyRocks SI mode, comment it for 4 normal levels + } else if (FLAGS_db_type == "myrocks") { + if (!db_connector.ExecWriteSql(sql_id, "START TRANSACTION WITH CONSISTENT SNAPSHOT;", test_result_set, txn_id, test_process_file)) { + goto jump; + } } else { if (!db_connector.SQLStartTxn(txn_id, sql_id, test_process_file)) { goto jump; @@ -161,7 +159,7 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ goto jump; } } - // // oracle + // // oracle this will kill the session. // if (FLAGS_db_type == "oracle") { // std::string sql_timeout = "alter session set ddl_lock_timeout = " + FLAGS_timeout + ";"; // std::cout << " sql: " << sql_timeout << std::endl; @@ -348,7 +346,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t if (test_result_set.ResultType() == "") { if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} } - + // threads[thread_cnt-1].detach(); // std::cout <<"wait too long"< Date: Fri, 29 Apr 2022 22:44:24 +0800 Subject: [PATCH 21/81] Clean up --- src/dbtest/src/sql_cntl.cc | 2 +- src/dbtest/src/sqltest.cc | 156 ++----------------------------------- 2 files changed, 9 insertions(+), 149 deletions(-) diff --git a/src/dbtest/src/sql_cntl.cc b/src/dbtest/src/sql_cntl.cc index 5ffbf26b..4dbfd458 100644 --- a/src/dbtest/src/sql_cntl.cc +++ b/src/dbtest/src/sql_cntl.cc @@ -5,7 +5,7 @@ * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All * Tencent Modifications are Copyright (C) THL A29 Limited. * - * Author: farrisli (farrisli@tencent.com) + * Author: axingguchen xenitchen farrisli (axingguchen,xenitchen,farrisli@tencent.com) * */ #include "sql_cntl.h" diff --git a/src/dbtest/src/sqltest.cc b/src/dbtest/src/sqltest.cc index e4138760..b0bbfaa3 100644 --- a/src/dbtest/src/sqltest.cc +++ b/src/dbtest/src/sqltest.cc @@ -5,7 +5,7 @@ * in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All * Tencent Modifications are Copyright (C) THL A29 Limited. * - * Author: farrisli (farrisli@tencent.com) + * Author: axingguchen xenitchen farrisli (axingguchen,xenitchen,farrisli@tencent.com) * */ #include "gflags/gflags.h" @@ -24,7 +24,6 @@ DEFINE_string(isolation, "serializable", "transation isolation level: read-uncom DEFINE_string(case_dir, "mysql", "test case dir name"); DEFINE_string(timeout, "20", "timeout"); - // std::vector mutex_txn(5); // same as conn_pool_size std::vector mutex_txn(FLAGS_conn_pool_size); // same as conn_pool_size @@ -43,7 +42,6 @@ bool MultiThreadExecution(std::vector& txn_sql_list, TestSequence& test_ // time between queries // usleep(1000000*sleeptime); // 1 second usleep(100000*sleeptime); // 0.1 second - std::ofstream test_process(test_process_file, std::ios::app); int txn_id; @@ -275,6 +273,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t std::vector> split_groups; std::vector group; + // test purpose // for(int i = 0; i != txn_sql_list.size(); i++) { // std::cout << txn_sql_list[i].SqlId() << std::endl; // } @@ -297,7 +296,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t thread_cnt = thread_cnt + 1; } } - sql_map[txn_sql.SqlId()] = txn_sql.Sql();; + sql_map[txn_sql.SqlId()] = txn_sql.Sql(); // add into the same group TxnSql txn_sql1(txn_sql.SqlId(), txn_sql.TxnId(), txn_sql.Sql(), txn_sql.TestCaseType()); group.push_back(txn_sql1); @@ -314,7 +313,7 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t split_groups[thread_cnt-1].pop_back(); } - // std::cout << init_group.size() < threads; - - // exlcude last group + // exlcude last group for parallel execution for (int i = 0; i < thread_cnt-1; i++) { - // if (thread_cnt-1==i){ - // threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), std::ref(test_process_file), std::ref(cur_result_set), i*2+1+1)); - // } else{ - // threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), std::ref(test_process_file), std::ref(cur_result_set), i*2+1)); - // } threads.push_back(std::thread(MultiThreadExecution, std::ref(split_groups[i]), std::ref(test_sequence), std::ref(test_result_set), std::ref(db_connector), test_process_file, std::ref(cur_result_set), i+1)); } @@ -342,134 +335,11 @@ bool JobExecutor::ExecTestSequence(TestSequence& test_sequence, TestResultSet& t // th.detach(); } - // execute last group if correct + // execute last group if correct (no error) if (test_result_set.ResultType() == "") { if (! MultiThreadExecution(split_groups[thread_cnt-1], test_sequence, test_result_set, db_connector, test_process_file, cur_result_set, 0)) {return false;} } - // threads[thread_cnt-1].detach(); - - // std::cout <<"wait too long"< Date: Sat, 30 Apr 2022 16:47:36 +0800 Subject: [PATCH 22/81] Add test cases and result --- AUTHORS.txt | 9 +- README-zh.md | 75 - README.md | 86 +- config.cfg.template | 82 - contrib/deneva/Authors | 3 - contrib/deneva/Authors.zip | Bin 3188292 -> 0 bytes contrib/deneva/LICENSE | 202 - contrib/deneva/Makefile | 113 - contrib/deneva/README | 130 - contrib/deneva/README.md | 45 - contrib/deneva/benchmarks/PPS_schema.txt | 63 - .../deneva/benchmarks/TPCC_full_schema.txt | 134 - .../deneva/benchmarks/TPCC_short_schema.txt | 100 - contrib/deneva/benchmarks/YCSB_schema.txt | 15 - contrib/deneva/benchmarks/creator.cpp | 195 - contrib/deneva/benchmarks/creator.h | 75 - contrib/deneva/benchmarks/da.h | 65 - contrib/deneva/benchmarks/da_block_queue.cpp | 82 - contrib/deneva/benchmarks/da_block_queue.h | 28 - contrib/deneva/benchmarks/da_const.h | 12 - contrib/deneva/benchmarks/da_query.cpp | 139 - contrib/deneva/benchmarks/da_query.h | 50 - contrib/deneva/benchmarks/da_query_queue.cpp | 16 - contrib/deneva/benchmarks/da_query_queue.h | 14 - contrib/deneva/benchmarks/da_txn.cpp | 173 - contrib/deneva/benchmarks/da_wl.cpp | 95 - contrib/deneva/benchmarks/generic.cpp | 484 --- contrib/deneva/benchmarks/generic.h | 179 - contrib/deneva/benchmarks/pps.h | 168 - contrib/deneva/benchmarks/pps_helper.cpp | 32 - contrib/deneva/benchmarks/pps_helper.h | 50 - contrib/deneva/benchmarks/pps_query.cpp | 501 --- contrib/deneva/benchmarks/pps_query.h | 78 - contrib/deneva/benchmarks/pps_txn.cpp | 1246 ------ contrib/deneva/benchmarks/pps_wl.cpp | 283 -- contrib/deneva/benchmarks/tpcc.h | 183 - contrib/deneva/benchmarks/tpcc_const.h | 210 - contrib/deneva/benchmarks/tpcc_helper.cpp | 140 - contrib/deneva/benchmarks/tpcc_helper.h | 56 - contrib/deneva/benchmarks/tpcc_query.cpp | 341 -- contrib/deneva/benchmarks/tpcc_query.h | 101 - contrib/deneva/benchmarks/tpcc_txn.cpp | 1142 ----- contrib/deneva/benchmarks/tpcc_wl.cpp | 623 --- contrib/deneva/benchmarks/ycsb.h | 83 - contrib/deneva/benchmarks/ycsb_query.cpp | 394 -- contrib/deneva/benchmarks/ycsb_query.h | 102 - contrib/deneva/benchmarks/ycsb_txn.cpp | 356 -- contrib/deneva/benchmarks/ycsb_wl.cpp | 213 - contrib/deneva/client/client_main.cpp | 245 -- contrib/deneva/client/client_query.cpp | 182 - contrib/deneva/client/client_query.h | 49 - contrib/deneva/client/client_txn.cpp | 80 - contrib/deneva/client/client_txn.h | 44 - contrib/deneva/concurrency_control/bocc.cpp | 179 - contrib/deneva/concurrency_control/bocc.h | 61 - contrib/deneva/concurrency_control/focc.cpp | 234 - contrib/deneva/concurrency_control/focc.h | 69 - contrib/deneva/concurrency_control/hash.cpp | 122 - contrib/deneva/concurrency_control/hash.h | 37 - contrib/deneva/concurrency_control/maat.cpp | 319 -- contrib/deneva/concurrency_control/maat.h | 92 - contrib/deneva/concurrency_control/occ.cpp | 314 -- contrib/deneva/concurrency_control/occ.h | 71 - .../occ_critical_section.cpp | 89 - .../occ_critical_section.h | 58 - .../deneva/concurrency_control/row_lock.cpp | 397 -- contrib/deneva/concurrency_control/row_lock.h | 63 - .../deneva/concurrency_control/row_maat.cpp | 316 -- contrib/deneva/concurrency_control/row_maat.h | 42 - .../deneva/concurrency_control/row_mvcc.cpp | 380 -- contrib/deneva/concurrency_control/row_mvcc.h | 76 - .../deneva/concurrency_control/row_null.cpp | 42 - contrib/deneva/concurrency_control/row_null.h | 32 - .../deneva/concurrency_control/row_occ.cpp | 110 - contrib/deneva/concurrency_control/row_occ.h | 55 - .../deneva/concurrency_control/row_silo.cpp | 157 - contrib/deneva/concurrency_control/row_silo.h | 49 - .../deneva/concurrency_control/row_ssi.cpp | 428 -- contrib/deneva/concurrency_control/row_ssi.h | 90 - .../concurrency_control/row_sundial.cpp | 461 -- .../deneva/concurrency_control/row_sundial.h | 114 - contrib/deneva/concurrency_control/row_ts.cpp | 325 -- contrib/deneva/concurrency_control/row_ts.h | 65 - .../deneva/concurrency_control/row_wsi.cpp | 253 -- contrib/deneva/concurrency_control/row_wsi.h | 77 - contrib/deneva/concurrency_control/silo.cpp | 175 - contrib/deneva/concurrency_control/ssi.cpp | 303 -- contrib/deneva/concurrency_control/ssi.h | 99 - .../deneva/concurrency_control/sundial.cpp | 258 -- contrib/deneva/concurrency_control/sundial.h | 51 - contrib/deneva/concurrency_control/wsi.cpp | 113 - contrib/deneva/concurrency_control/wsi.h | 51 - contrib/deneva/config-debug.h | 366 -- contrib/deneva/config-std.h | 209 - contrib/deneva/config.cpp | 3 - contrib/deneva/config.h | 441 -- contrib/deneva/ifconfig-debug.txt | 2 - contrib/deneva/jemalloc/jemalloc.h | 367 -- contrib/deneva/obj/deps | 654 --- contrib/deneva/patch | 123 - contrib/deneva/statistics/stats.cpp | 1539 ------- contrib/deneva/statistics/stats.h | 366 -- contrib/deneva/statistics/stats_array.cpp | 124 - contrib/deneva/statistics/stats_array.h | 46 - contrib/deneva/storage/catalog.cpp | 61 - contrib/deneva/storage/catalog.h | 86 - contrib/deneva/storage/index_base.h | 53 - contrib/deneva/storage/index_btree.cpp | 579 --- contrib/deneva/storage/index_btree.h | 92 - contrib/deneva/storage/index_hash.cpp | 247 -- contrib/deneva/storage/index_hash.h | 98 - contrib/deneva/storage/row.cpp | 501 --- contrib/deneva/storage/row.h | 151 - contrib/deneva/storage/table.cpp | 54 - contrib/deneva/storage/table.h | 53 - contrib/deneva/system/abort_queue.cpp | 82 - contrib/deneva/system/abort_queue.h | 53 - contrib/deneva/system/abort_thread.cpp | 36 - contrib/deneva/system/abort_thread.h | 30 - contrib/deneva/system/array.h | 130 - contrib/deneva/system/calvin_thread.cpp | 168 - contrib/deneva/system/calvin_thread.h | 41 - contrib/deneva/system/client_thread.cpp | 120 - contrib/deneva/system/client_thread.h | 33 - contrib/deneva/system/concurrentqueue.h | 3774 ----------------- contrib/deneva/system/global.cpp | 243 -- contrib/deneva/system/global.h | 392 -- contrib/deneva/system/hash.cpp | 115 - contrib/deneva/system/hash.h | 56 - contrib/deneva/system/helper.cpp | 144 - contrib/deneva/system/helper.h | 287 -- contrib/deneva/system/http.cpp | 118 - contrib/deneva/system/http.h | 40 - contrib/deneva/system/io_thread.cpp | 257 -- contrib/deneva/system/io_thread.h | 44 - contrib/deneva/system/latch.h | 63 - contrib/deneva/system/libtcpforcpp.cpp | 139 - contrib/deneva/system/libtcpforcpp.h | 37 - contrib/deneva/system/lock_free_queue.cpp | 60 - contrib/deneva/system/lock_free_queue.h | 22 - contrib/deneva/system/log_thread.cpp | 33 - contrib/deneva/system/log_thread.h | 30 - contrib/deneva/system/logger.cpp | 144 - contrib/deneva/system/logger.h | 114 - contrib/deneva/system/ltsrpc.pb.cpp | 2968 ------------- contrib/deneva/system/ltsrpc.pb.h | 2006 --------- contrib/deneva/system/ltsrpc.proto | 77 - contrib/deneva/system/main.cpp | 412 -- contrib/deneva/system/manager.cpp | 112 - contrib/deneva/system/manager.h | 68 - contrib/deneva/system/mem_alloc.cpp | 65 - contrib/deneva/system/mem_alloc.h | 30 - contrib/deneva/system/msg_queue.cpp | 134 - contrib/deneva/system/msg_queue.h | 54 - contrib/deneva/system/parser.cpp | 263 -- contrib/deneva/system/pool.cpp | 442 -- contrib/deneva/system/pool.h | 142 - contrib/deneva/system/query.cpp | 99 - contrib/deneva/system/query.h | 83 - contrib/deneva/system/sequencer.cpp | 328 -- contrib/deneva/system/sequencer.h | 99 - contrib/deneva/system/sim_manager.cpp | 143 - contrib/deneva/system/sim_manager.h | 61 - contrib/deneva/system/thread.cpp | 105 - contrib/deneva/system/thread.h | 52 - contrib/deneva/system/txn.cpp | 1163 ----- contrib/deneva/system/txn.h | 324 -- contrib/deneva/system/txn_table.cpp | 251 -- contrib/deneva/system/txn_table.h | 75 - contrib/deneva/system/wl.cpp | 191 - contrib/deneva/system/wl.h | 58 - contrib/deneva/system/work_queue.cpp | 540 --- contrib/deneva/system/work_queue.h | 135 - contrib/deneva/system/worker_thread.cpp | 907 ---- contrib/deneva/system/worker_thread.h | 78 - contrib/deneva/test.sh | 40 - contrib/deneva/transport/message.cpp | 1876 -------- contrib/deneva/transport/message.h | 484 --- contrib/deneva/transport/msg_thread.cpp | 148 - contrib/deneva/transport/msg_thread.h | 83 - contrib/deneva/transport/nn.hpp | 205 - contrib/deneva/transport/transport.cpp | 323 -- contrib/deneva/transport/transport.h | 78 - make.sh | 1 - .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../crdb/serializable/iat_dda_write_skew.txt | 50 + .../iat_dda_write_skew_committed.txt | 50 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 50 + .../crdb/serializable/iat_mda_step_iat.txt | 90 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 90 + ...at_mda_step_iat_predicate_based_insert.txt | 87 + ...step_iat_read_only_transaction_anomaly.txt | 121 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 57 + .../rat_dda_double_write_skew1.txt | 34 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 53 + .../crdb/serializable/rat_dda_read_skew.txt | 60 + .../crdb/serializable/rat_dda_read_skew2.txt | 60 + .../rat_dda_read_skew2_committed.txt | 60 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../serializable/rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../crdb/serializable/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 206 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../crdb/serializable/rat_sda_dirty_read.txt | 44 + .../rat_sda_intermediate_read.txt | 50 + .../rat_sda_intermediate_read_committed.txt | 50 + .../serializable/rat_sda_lost_self_update.txt | 50 + .../rat_sda_non_repeatable_read.txt | 57 + ...le_read_predicate_based-phantom_delete.txt | 57 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 53 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../crdb/serializable/wat_mda_step_wat_c1.txt | 42 + .../crdb/serializable/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 43 + .../wat_sda_dirty_write_2commit.txt | 43 + .../crdb/serializable/wat_sda_full_write.txt | 43 + .../wat_sda_full_write_committed.txt | 43 + .../wat_sda_lost_self_update_committed.txt | 50 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 38 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 42 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 44 + .../read-committed/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 44 + .../repeatable-read/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 44 + .../read-committed/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-uncommitted/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-uncommitted/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 54 + .../rat_dda_double_write_skew1_committed.txt | 54 + .../rat_dda_double_write_skew2.txt | 54 + .../read-uncommitted/rat_dda_read_skew.txt | 61 + .../read-uncommitted/rat_dda_read_skew2.txt | 61 + .../rat_dda_read_skew2_committed.txt | 61 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-uncommitted/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 207 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-uncommitted/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 51 + .../rat_sda_intermediate_read_committed.txt | 51 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 58 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 54 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-uncommitted/wat_mda_step_wat_c1.txt | 44 + .../read-uncommitted/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-uncommitted/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 44 + .../repeatable-read/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../read-uncommitted_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 49 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../serializable/iat_mda_step_iat.txt | 89 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 171 + ...at_mda_step_iat_predicate_based_delete.txt | 89 + ...at_mda_step_iat_predicate_based_insert.txt | 85 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 35 + .../serializable/rat_dda_read_skew.txt | 42 + .../serializable/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../serializable/rat_mda_step_rat.txt | 74 + .../rat_mda_step_rat_long_fork.txt | 169 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 44 + .../serializable/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../serializable/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../mysql/read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../mysql/read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 44 + .../read-committed/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-uncommitted/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-uncommitted/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 54 + .../rat_dda_double_write_skew1_committed.txt | 54 + .../rat_dda_double_write_skew2.txt | 54 + .../read-uncommitted/rat_dda_read_skew.txt | 61 + .../read-uncommitted/rat_dda_read_skew2.txt | 61 + .../rat_dda_read_skew2_committed.txt | 61 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-uncommitted/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 207 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-uncommitted/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 51 + .../rat_sda_intermediate_read_committed.txt | 51 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 58 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 54 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-uncommitted/wat_mda_step_wat_c1.txt | 44 + .../read-uncommitted/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-uncommitted/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 44 + .../repeatable-read/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../read-uncommitted_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../mysql/serializable/iat_dda_write_skew.txt | 49 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../mysql/serializable/iat_mda_step_iat.txt | 89 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 171 + ...at_mda_step_iat_predicate_based_delete.txt | 89 + ...at_mda_step_iat_predicate_based_insert.txt | 85 + ...step_iat_read_only_transaction_anomaly.txt | 105 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 35 + .../mysql/serializable/rat_dda_read_skew.txt | 42 + .../mysql/serializable/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../mysql/serializable/rat_mda_step_rat.txt | 74 + .../rat_mda_step_rat_long_fork.txt | 169 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../mysql/serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 44 + .../serializable/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../mysql/serializable/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 53 + .../read-committed/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../read-committed/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 50 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 55 + .../rat_dda_double_write_skew1_committed.txt | 55 + .../rat_dda_double_write_skew2.txt | 55 + .../read-committed/rat_dda_read_skew.txt | 62 + .../read-committed/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 62 + .../read-committed/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../read-committed/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 52 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 57 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 55 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 53 + .../wat_dda_read_write_skew1_c2.txt | 53 + .../wat_dda_read_write_skew2_c1.txt | 53 + .../wat_dda_read_write_skew2_c2.txt | 53 + .../wat_dda_read_write_skew2_committed.txt | 53 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 45 + .../wat_sda_full_write_committed.txt | 45 + .../wat_sda_lost_self_update_committed.txt | 52 + .../read-committed/wat_sda_lost_update_c1.txt | 50 + .../read-committed/wat_sda_lost_update_c2.txt | 50 + .../read-committed_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 53 + .../read-committed/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../read-committed/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 50 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 55 + .../rat_dda_double_write_skew1_committed.txt | 55 + .../rat_dda_double_write_skew2.txt | 55 + .../read-committed/rat_dda_read_skew.txt | 62 + .../read-committed/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 62 + .../read-committed/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../read-committed/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 52 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 57 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 55 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 31 + .../wat_dda_full_write_skew_committed.txt | 31 + .../wat_dda_read_write_skew1_c1.txt | 53 + .../wat_dda_read_write_skew1_c2.txt | 53 + .../wat_dda_read_write_skew2_c1.txt | 53 + .../wat_dda_read_write_skew2_c2.txt | 53 + .../wat_dda_read_write_skew2_committed.txt | 53 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 39 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 45 + .../wat_sda_full_write_committed.txt | 45 + .../wat_sda_lost_self_update_committed.txt | 52 + .../read-committed/wat_sda_lost_update_c1.txt | 50 + .../read-committed/wat_sda_lost_update_c2.txt | 50 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../repeatable-read/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../repeatable-read/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../repeatable-read/rat_dda_read_skew.txt | 62 + .../repeatable-read/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../repeatable-read/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../repeatable-read/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 38 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 59 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 31 + .../wat_dda_full_write_skew_committed.txt | 31 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../repeatable-read/wat_mda_step_wat_c1.txt | 41 + .../repeatable-read/wat_mda_step_wat_c2.txt | 39 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 29 + .../repeatable-read/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../wat_sda_lost_update_c1.txt | 38 + .../wat_sda_lost_update_c2.txt | 38 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../serializable/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../serializable/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../serializable/rat_dda_read_skew.txt | 62 + .../serializable/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../serializable/rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../serializable/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../serializable/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../serializable/rat_sda_lost_self_update.txt | 38 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 59 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 31 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../serializable/wat_mda_step_wat_c1.txt | 42 + .../serializable/wat_mda_step_wat_c2.txt | 39 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 29 + .../serializable/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 38 + .../iat_dda_read_skew_committed.txt | 57 + .../iat_dda_read_write_skew1_committed.txt | 50 + .../read-committed/iat_dda_write_skew.txt | 57 + .../iat_dda_write_skew_committed.txt | 57 + ...skew_predicate_based-intersecting_data.txt | 68 + ...w_predicate_based-overdraft_protection.txt | 57 + .../read-committed/iat_mda_step_iat.txt | 104 + ...a_step_iat_causality_violation_anomaly.txt | 101 + .../iat_mda_step_iat_cross_phenomenon.txt | 201 + ...at_mda_step_iat_predicate_based_delete.txt | 104 + ...at_mda_step_iat_predicate_based_insert.txt | 101 + ...step_iat_read_only_transaction_anomaly.txt | 135 + .../iat_mda_step_iat_uname_anomaly.txt | 157 + .../iat_sda_lost_update_committed.txt | 47 + .../iat_sda_non_repeatable_read_committed.txt | 55 + .../rat_dda_double_write_skew1.txt | 52 + .../rat_dda_double_write_skew1_committed.txt | 52 + .../rat_dda_double_write_skew2.txt | 52 + .../read-committed/rat_dda_read_skew.txt | 59 + .../read-committed/rat_dda_read_skew2.txt | 59 + .../rat_dda_read_skew2_committed.txt | 59 + ...t_dda_read_skew_predicate_based_delete.txt | 57 + ...t_dda_read_skew_predicate_based_insert.txt | 55 + .../rat_dda_write_read_skew.txt | 57 + .../rat_dda_write_read_skew_committed.txt | 59 + .../read-committed/rat_mda_step_rat.txt | 104 + .../rat_mda_step_rat_long_fork.txt | 203 + ...at_mda_step_rat_predicate_based_delete.txt | 104 + ...at_mda_step_rat_predicate_based_insert.txt | 101 + .../read-committed/rat_sda_dirty_read.txt | 43 + .../rat_sda_intermediate_read.txt | 49 + .../rat_sda_intermediate_read_committed.txt | 49 + .../rat_sda_lost_self_update.txt | 49 + .../rat_sda_non_repeatable_read.txt | 56 + ...le_read_predicate_based-phantom_delete.txt | 54 + ...le_read_predicate_based-phantom_insert.txt | 53 + .../wat_dda_double_write_skew2_committed.txt | 52 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 50 + .../wat_dda_read_write_skew1_c2.txt | 50 + .../wat_dda_read_write_skew2_c1.txt | 50 + .../wat_dda_read_write_skew2_c2.txt | 50 + .../wat_dda_read_write_skew2_committed.txt | 50 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 42 + .../wat_sda_dirty_write_2commit.txt | 42 + .../read-committed/wat_sda_full_write.txt | 42 + .../wat_sda_full_write_committed.txt | 42 + .../wat_sda_lost_self_update_committed.txt | 49 + .../read-committed/wat_sda_lost_update_c1.txt | 47 + .../read-committed/wat_sda_lost_update_c2.txt | 47 + .../read-committed_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 59 + .../iat_dda_read_write_skew1_committed.txt | 40 + .../serializable/iat_dda_write_skew.txt | 57 + .../iat_dda_write_skew_committed.txt | 47 + ...skew_predicate_based-intersecting_data.txt | 68 + ...w_predicate_based-overdraft_protection.txt | 47 + .../oracle/serializable/iat_mda_step_iat.txt | 86 + ...a_step_iat_causality_violation_anomaly.txt | 103 + .../iat_mda_step_iat_cross_phenomenon.txt | 203 + ...at_mda_step_iat_predicate_based_delete.txt | 86 + ...at_mda_step_iat_predicate_based_insert.txt | 101 + ...step_iat_read_only_transaction_anomaly.txt | 117 + .../iat_mda_step_iat_uname_anomaly.txt | 159 + .../iat_sda_lost_update_committed.txt | 37 + .../iat_sda_non_repeatable_read_committed.txt | 57 + .../rat_dda_double_write_skew1.txt | 40 + .../rat_dda_double_write_skew1_committed.txt | 40 + .../rat_dda_double_write_skew2.txt | 40 + .../oracle/serializable/rat_dda_read_skew.txt | 59 + .../serializable/rat_dda_read_skew2.txt | 59 + .../rat_dda_read_skew2_committed.txt | 59 + ...t_dda_read_skew_predicate_based_delete.txt | 59 + ...t_dda_read_skew_predicate_based_insert.txt | 57 + .../serializable/rat_dda_write_read_skew.txt | 57 + .../rat_dda_write_read_skew_committed.txt | 57 + .../oracle/serializable/rat_mda_step_rat.txt | 104 + .../rat_mda_step_rat_long_fork.txt | 203 + ...at_mda_step_rat_predicate_based_delete.txt | 52 + ...at_mda_step_rat_predicate_based_insert.txt | 101 + .../serializable/rat_sda_dirty_read.txt | 43 + .../rat_sda_intermediate_read.txt | 49 + .../rat_sda_intermediate_read_committed.txt | 49 + .../serializable/rat_sda_lost_self_update.txt | 37 + .../rat_sda_non_repeatable_read.txt | 56 + ...le_read_predicate_based-phantom_delete.txt | 56 + ...le_read_predicate_based-phantom_insert.txt | 55 + .../wat_dda_double_write_skew2_committed.txt | 40 + .../wat_dda_full_write_skew_c1.txt | 32 + .../wat_dda_full_write_skew_c2.txt | 32 + .../wat_dda_full_write_skew_committed.txt | 32 + .../wat_dda_read_write_skew1_c1.txt | 40 + .../wat_dda_read_write_skew1_c2.txt | 16 + .../wat_dda_read_write_skew2_c1.txt | 40 + .../wat_dda_read_write_skew2_c2.txt | 40 + .../wat_dda_read_write_skew2_committed.txt | 40 + .../serializable/wat_mda_step_wat_c1.txt | 41 + .../serializable/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 42 + .../wat_sda_dirty_write_2commit.txt | 28 + .../serializable/wat_sda_full_write.txt | 30 + .../wat_sda_full_write_committed.txt | 30 + .../wat_sda_lost_self_update_committed.txt | 37 + .../serializable/wat_sda_lost_update_c1.txt | 37 + .../serializable/wat_sda_lost_update_c2.txt | 37 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../pg/read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../pg/read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../pg/read-committed/rat_dda_read_skew.txt | 63 + .../pg/read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../pg/read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../pg/read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../pg/read-committed/wat_mda_step_wat_c1.txt | 42 + .../pg/read-committed/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../pg/read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-uncommitted/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../pg/read-uncommitted/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../pg/read-uncommitted/rat_dda_read_skew.txt | 63 + .../read-uncommitted/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../pg/read-uncommitted/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-uncommitted/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-uncommitted/wat_mda_step_wat_c1.txt | 42 + .../read-uncommitted/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-uncommitted/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../pg/repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../pg/repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 42 + .../pg/repeatable-read/rat_dda_read_skew.txt | 63 + .../pg/repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../pg/repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../pg/repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 39 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../repeatable-read/wat_mda_step_wat_c1.txt | 42 + .../repeatable-read/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 30 + .../pg/repeatable-read/wat_sda_full_write.txt | 32 + .../wat_sda_full_write_committed.txt | 32 + .../wat_sda_lost_self_update_committed.txt | 39 + .../wat_sda_lost_update_c1.txt | 39 + .../wat_sda_lost_update_c2.txt | 39 + .../read-committed_total-result.txt | 108 + .../read-uncommitted_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../pg/serializable/iat_dda_write_skew.txt | 51 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 53 + ...w_predicate_based-overdraft_protection.txt | 49 + .../pg/serializable/iat_mda_step_iat.txt | 91 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 91 + ...at_mda_step_iat_predicate_based_insert.txt | 89 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 42 + .../pg/serializable/rat_dda_read_skew.txt | 63 + .../pg/serializable/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 51 + .../rat_dda_write_read_skew_committed.txt | 42 + .../pg/serializable/rat_mda_step_rat.txt | 91 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 91 + ...at_mda_step_rat_predicate_based_insert.txt | 88 + .../pg/serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 39 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../pg/serializable/wat_mda_step_wat_c1.txt | 42 + .../pg/serializable/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 30 + .../pg/serializable/wat_sda_full_write.txt | 32 + .../wat_sda_full_write_committed.txt | 32 + .../wat_sda_lost_self_update_committed.txt | 39 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../rcsnapshot/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../sqlserver/rcsnapshot/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rcsnapshot/rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rcsnapshot/rat_dda_double_write_skew2.txt | 35 + .../rcsnapshot/rat_dda_read_skew.txt | 61 + .../rcsnapshot/rat_dda_read_skew2.txt | 61 + .../rat_dda_read_skew2_committed.txt | 61 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rcsnapshot/rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../sqlserver/rcsnapshot/rat_mda_step_rat.txt | 74 + .../rcsnapshot/rat_mda_step_rat_long_fork.txt | 207 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../rcsnapshot/rat_sda_dirty_read.txt | 47 + .../rcsnapshot/rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rcsnapshot/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 58 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../rcsnapshot/wat_dda_full_write_skew_c1.txt | 35 + .../rcsnapshot/wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../rcsnapshot/wat_mda_step_wat_c1.txt | 44 + .../rcsnapshot/wat_mda_step_wat_c2.txt | 44 + .../rcsnapshot/wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../rcsnapshot/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../rcsnapshot/wat_sda_lost_update_c1.txt | 51 + .../rcsnapshot/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 35 + .../read-committed/rat_dda_read_skew.txt | 61 + .../read-committed/rat_dda_read_skew2.txt | 61 + .../rat_dda_read_skew2_committed.txt | 61 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../read-committed/rat_mda_step_rat.txt | 74 + .../rat_mda_step_rat_long_fork.txt | 207 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 58 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 44 + .../read-committed/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-uncommitted/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-uncommitted/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 54 + .../rat_dda_double_write_skew1_committed.txt | 54 + .../rat_dda_double_write_skew2.txt | 54 + .../read-uncommitted/rat_dda_read_skew.txt | 61 + .../read-uncommitted/rat_dda_read_skew2.txt | 61 + .../rat_dda_read_skew2_committed.txt | 61 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-uncommitted/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 207 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-uncommitted/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 51 + .../rat_sda_intermediate_read_committed.txt | 51 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 58 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 54 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-uncommitted/wat_mda_step_wat_c1.txt | 44 + .../read-uncommitted/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-uncommitted/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../repeatable-read/iat_dda_write_skew.txt | 49 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../repeatable-read/iat_mda_step_iat.txt | 89 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 140 + ...at_mda_step_iat_predicate_based_delete.txt | 89 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 53 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 35 + .../repeatable-read/rat_dda_read_skew.txt | 42 + .../repeatable-read/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../repeatable-read/rat_mda_step_rat.txt | 74 + .../rat_mda_step_rat_long_fork.txt | 169 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../repeatable-read/wat_mda_step_wat_c1.txt | 44 + .../repeatable-read/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 53 + .../wat_sda_lost_update_c2.txt | 53 + .../rcsnapshot_total-result.txt | 108 + .../read-committed_total-result.txt | 108 + .../read-uncommitted_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../result_summary/snapshot_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 49 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../serializable/iat_mda_step_iat.txt | 89 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 140 + ...at_mda_step_iat_predicate_based_delete.txt | 89 + ...at_mda_step_iat_predicate_based_insert.txt | 85 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 53 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 35 + .../serializable/rat_dda_read_skew.txt | 42 + .../serializable/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 42 + .../rat_dda_write_read_skew_committed.txt | 42 + .../serializable/rat_mda_step_rat.txt | 74 + .../rat_mda_step_rat_long_fork.txt | 167 + ...at_mda_step_rat_predicate_based_delete.txt | 74 + ...at_mda_step_rat_predicate_based_insert.txt | 71 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 44 + .../serializable/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../serializable/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../serializable/wat_sda_lost_update_c1.txt | 53 + .../serializable/wat_sda_lost_update_c2.txt | 53 + .../snapshot/iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../sqlserver/snapshot/iat_dda_write_skew.txt | 61 + .../snapshot/iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../sqlserver/snapshot/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 142 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../snapshot/rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../snapshot/rat_dda_double_write_skew2.txt | 42 + .../sqlserver/snapshot/rat_dda_read_skew.txt | 63 + .../sqlserver/snapshot/rat_dda_read_skew2.txt | 63 + .../snapshot/rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../snapshot/rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../sqlserver/snapshot/rat_mda_step_rat.txt | 109 + .../snapshot/rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../sqlserver/snapshot/rat_sda_dirty_read.txt | 47 + .../snapshot/rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../snapshot/rat_sda_lost_self_update.txt | 39 + .../snapshot/rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../snapshot/wat_dda_full_write_skew_c1.txt | 35 + .../snapshot/wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../snapshot/wat_dda_read_write_skew1_c1.txt | 42 + .../snapshot/wat_dda_read_write_skew1_c2.txt | 42 + .../snapshot/wat_dda_read_write_skew2_c1.txt | 42 + .../snapshot/wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../snapshot/wat_mda_step_wat_c1.txt | 43 + .../snapshot/wat_mda_step_wat_c2.txt | 43 + .../snapshot/wat_sda_dirty_write_1abort.txt | 46 + .../snapshot/wat_sda_dirty_write_2commit.txt | 30 + .../sqlserver/snapshot/wat_sda_full_write.txt | 32 + .../snapshot/wat_sda_full_write_committed.txt | 32 + .../wat_sda_lost_self_update_committed.txt | 39 + .../snapshot/wat_sda_lost_update_c1.txt | 39 + .../snapshot/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../tdsql/read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../tdsql/read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 40 + .../read-committed/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 40 + .../repeatable-read/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../tdsql/serializable/iat_dda_write_skew.txt | 47 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../tdsql/serializable/iat_mda_step_iat.txt | 86 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 171 + ...at_mda_step_iat_predicate_based_delete.txt | 86 + ...at_mda_step_iat_predicate_based_insert.txt | 81 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 40 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 33 + .../tdsql/serializable/rat_dda_read_skew.txt | 40 + .../tdsql/serializable/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 40 + .../rat_dda_write_read_skew_committed.txt | 42 + .../tdsql/serializable/rat_mda_step_rat.txt | 70 + .../rat_mda_step_rat_long_fork.txt | 166 + ...at_mda_step_rat_predicate_based_delete.txt | 70 + ...at_mda_step_rat_predicate_based_insert.txt | 67 + .../tdsql/serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 40 + .../wat_dda_read_write_skew1_c2.txt | 40 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 40 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 40 + .../serializable/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../tdsql/serializable/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 37 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 44 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 41 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 41 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 37 + .../wat_dda_full_write_skew_c2.txt | 37 + .../wat_dda_full_write_skew_committed.txt | 37 + .../wat_dda_read_write_skew1_c1.txt | 44 + .../wat_dda_read_write_skew1_c2.txt | 44 + .../wat_dda_read_write_skew2_c1.txt | 44 + .../wat_dda_read_write_skew2_c2.txt | 44 + .../wat_dda_read_write_skew2_committed.txt | 44 + .../read-committed/wat_mda_step_wat_c1.txt | 47 + .../read-committed/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 32 + .../read-committed/wat_sda_full_write.txt | 34 + .../wat_sda_full_write_committed.txt | 34 + .../wat_sda_lost_self_update_committed.txt | 41 + .../read-committed/wat_sda_lost_update_c1.txt | 41 + .../read-committed/wat_sda_lost_update_c2.txt | 41 + .../read-committed_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 44 + .../read-committed/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + ...lf-predicate-read-skew_repeatable-read.txt | 46 + ...f-predicate-write-skew_repeatable-read.txt | 44 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 35 + .../wat_dda_full_write_skew_c2.txt | 35 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 44 + .../repeatable-read/wat_mda_step_wat_c2.txt | 44 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 107 + .../iat_dda_read_skew_committed.txt | 75 + .../iat_dda_read_write_skew1_committed.txt | 43 + .../serializable/iat_dda_write_skew.txt | 50 + .../iat_dda_write_skew_committed.txt | 52 + ...skew_predicate_based-intersecting_data.txt | 77 + ...w_predicate_based-overdraft_protection.txt | 50 + .../serializable/iat_mda_step_iat.txt | 88 + ...a_step_iat_causality_violation_anomaly.txt | 128 + .../iat_mda_step_iat_cross_phenomenon.txt | 245 ++ ...at_mda_step_iat_predicate_based_delete.txt | 92 + ...at_mda_step_iat_predicate_based_insert.txt | 89 + ...step_iat_read_only_transaction_anomaly.txt | 123 + .../iat_mda_step_iat_uname_anomaly.txt | 184 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 34 + .../rat_dda_double_write_skew1_committed.txt | 36 + .../rat_dda_double_write_skew2.txt | 68 + .../serializable/rat_dda_read_skew.txt | 75 + .../serializable/rat_dda_read_skew2.txt | 75 + .../rat_dda_read_skew2_committed.txt | 75 + ...t_dda_read_skew_predicate_based_delete.txt | 75 + ...t_dda_read_skew_predicate_based_insert.txt | 62 + .../serializable/rat_dda_write_read_skew.txt | 75 + .../rat_dda_write_read_skew_committed.txt | 75 + .../serializable/rat_mda_step_rat.txt | 131 + .../rat_mda_step_rat_long_fork.txt | 245 ++ ...at_mda_step_rat_predicate_based_delete.txt | 112 + ...at_mda_step_rat_predicate_based_insert.txt | 109 + .../serializable/rat_sda_dirty_read.txt | 48 + .../rat_sda_intermediate_read.txt | 54 + .../rat_sda_intermediate_read_committed.txt | 54 + .../serializable/rat_sda_lost_self_update.txt | 54 + .../rat_sda_non_repeatable_read.txt | 61 + ...le_read_predicate_based-phantom_delete.txt | 61 + ...le_read_predicate_based-phantom_insert.txt | 60 + .../wat_dda_double_write_skew2_committed.txt | 68 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 43 + .../wat_dda_read_write_skew1_c2.txt | 43 + .../wat_dda_read_write_skew2_c1.txt | 43 + .../wat_dda_read_write_skew2_c2.txt | 43 + .../wat_dda_read_write_skew2_committed.txt | 43 + .../serializable/wat_mda_step_wat_c1.txt | 47 + .../serializable/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 42 + .../wat_sda_dirty_write_2commit.txt | 45 + .../serializable/wat_sda_full_write.txt | 47 + .../wat_sda_full_write_committed.txt | 47 + .../wat_sda_lost_self_update_committed.txt | 54 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 38 + .../serializable_total-result.txt | 107 + .../iat_dda_read_skew_committed.txt | 64 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../serializable/iat_dda_write_skew.txt | 50 + .../iat_dda_write_skew_committed.txt | 50 + ...skew_predicate_based-intersecting_data.txt | 77 + ...w_predicate_based-overdraft_protection.txt | 50 + .../serializable/iat_mda_step_iat.txt | 86 + ...a_step_iat_causality_violation_anomaly.txt | 109 + .../iat_mda_step_iat_cross_phenomenon.txt | 210 + ...at_mda_step_iat_predicate_based_delete.txt | 90 + ...at_mda_step_iat_predicate_based_insert.txt | 87 + ...step_iat_read_only_transaction_anomaly.txt | 121 + .../iat_mda_step_iat_uname_anomaly.txt | 165 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 39 + .../rat_dda_double_write_skew1_committed.txt | 39 + .../rat_dda_double_write_skew2.txt | 57 + .../serializable/rat_dda_read_skew.txt | 64 + .../serializable/rat_dda_read_skew2.txt | 64 + .../rat_dda_read_skew2_committed.txt | 64 + ...t_dda_read_skew_predicate_based_delete.txt | 64 + ...t_dda_read_skew_predicate_based_insert.txt | 62 + .../serializable/rat_dda_write_read_skew.txt | 64 + .../rat_dda_write_read_skew_committed.txt | 64 + .../serializable/rat_mda_step_rat.txt | 112 + .../rat_mda_step_rat_long_fork.txt | 210 + ...at_mda_step_rat_predicate_based_delete.txt | 112 + ...at_mda_step_rat_predicate_based_insert.txt | 109 + .../serializable/rat_sda_dirty_read.txt | 48 + .../rat_sda_intermediate_read.txt | 54 + .../rat_sda_intermediate_read_committed.txt | 54 + .../serializable/rat_sda_lost_self_update.txt | 54 + .../rat_sda_non_repeatable_read.txt | 61 + ...le_read_predicate_based-phantom_delete.txt | 61 + ...le_read_predicate_based-phantom_insert.txt | 60 + .../wat_dda_double_write_skew2_committed.txt | 57 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 32 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../serializable/wat_mda_step_wat_c1.txt | 41 + .../serializable/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 42 + .../wat_sda_dirty_write_2commit.txt | 45 + .../serializable/wat_sda_full_write.txt | 47 + .../wat_sda_full_write_committed.txt | 47 + .../wat_sda_lost_self_update_committed.txt | 54 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 38 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 67 + .../rat_dda_double_write_skew1_committed.txt | 67 + .../rat_dda_double_write_skew2.txt | 67 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 74 + .../read-committed/rat_mda_step_rat.txt | 147 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 147 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 36 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 46 + .../read-committed/wat_mda_step_wat_c2.txt | 46 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../serializable_total-result.txt | 107 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../gp_dist/serializable/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../serializable/rat_dda_read_skew.txt | 63 + .../serializable/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 72 + .../gp_dist/serializable/rat_mda_step_rat.txt | 147 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 147 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 39 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 36 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 46 + .../serializable/wat_mda_step_wat_c2.txt | 46 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 30 + .../serializable/wat_sda_full_write.txt | 32 + .../wat_sda_full_write_committed.txt | 32 + .../wat_sda_lost_self_update_committed.txt | 39 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 67 + .../rat_dda_double_write_skew1_committed.txt | 67 + .../rat_dda_double_write_skew2.txt | 67 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 74 + .../read-committed/rat_mda_step_rat.txt | 147 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 147 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 67 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 36 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 46 + .../read-committed/wat_mda_step_wat_c2.txt | 46 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../serializable_total-result.txt | 107 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../serializable/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../serializable/rat_dda_read_skew.txt | 63 + .../serializable/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 72 + .../serializable/rat_mda_step_rat.txt | 147 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 147 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 39 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 36 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 46 + .../serializable/wat_mda_step_wat_c2.txt | 46 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 30 + .../serializable/wat_sda_full_write.txt | 32 + .../wat_sda_full_write_committed.txt | 32 + .../wat_sda_lost_self_update_committed.txt | 39 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 39 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 53 + .../read-committed/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../read-committed/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 50 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 55 + .../rat_dda_double_write_skew1_committed.txt | 55 + .../rat_dda_double_write_skew2.txt | 55 + .../read-committed/rat_dda_read_skew.txt | 62 + .../read-committed/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 62 + .../read-committed/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../read-committed/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 52 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 57 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 55 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 53 + .../wat_dda_read_write_skew1_c2.txt | 53 + .../wat_dda_read_write_skew2_c1.txt | 53 + .../wat_dda_read_write_skew2_c2.txt | 53 + .../wat_dda_read_write_skew2_committed.txt | 53 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 45 + .../wat_sda_full_write_committed.txt | 45 + .../wat_sda_lost_self_update_committed.txt | 52 + .../read-committed/wat_sda_lost_update_c1.txt | 50 + .../read-committed/wat_sda_lost_update_c2.txt | 50 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../repeatable-read/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../repeatable-read/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../repeatable-read/rat_dda_read_skew.txt | 62 + .../repeatable-read/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../repeatable-read/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../repeatable-read/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 38 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 59 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../repeatable-read/wat_mda_step_wat_c1.txt | 41 + .../repeatable-read/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 29 + .../repeatable-read/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../wat_sda_lost_update_c1.txt | 38 + .../wat_sda_lost_update_c2.txt | 38 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 53 + .../read-committed/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../read-committed/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 50 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 55 + .../rat_dda_double_write_skew1_committed.txt | 55 + .../rat_dda_double_write_skew2.txt | 55 + .../read-committed/rat_dda_read_skew.txt | 62 + .../read-committed/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 62 + .../read-committed/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../read-committed/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 52 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 57 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 55 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 53 + .../wat_dda_read_write_skew1_c2.txt | 53 + .../wat_dda_read_write_skew2_c1.txt | 53 + .../wat_dda_read_write_skew2_c2.txt | 53 + .../wat_dda_read_write_skew2_committed.txt | 53 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 45 + .../wat_sda_full_write_committed.txt | 45 + .../wat_sda_lost_self_update_committed.txt | 52 + .../read-committed/wat_sda_lost_update_c1.txt | 50 + .../read-committed/wat_sda_lost_update_c2.txt | 50 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../repeatable-read/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 71 + ...w_predicate_based-overdraft_protection.txt | 60 + .../repeatable-read/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../repeatable-read/rat_dda_read_skew.txt | 62 + .../repeatable-read/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../repeatable-read/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../repeatable-read/rat_sda_dirty_read.txt | 46 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 38 + .../rat_sda_non_repeatable_read.txt | 59 + ...le_read_predicate_based-phantom_delete.txt | 59 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../repeatable-read/wat_mda_step_wat_c1.txt | 41 + .../repeatable-read/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 29 + .../repeatable-read/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../wat_sda_lost_update_c1.txt | 38 + .../wat_sda_lost_update_c2.txt | 38 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 72 + .../iat_dda_read_write_skew1_committed.txt | 65 + .../read-committed/iat_dda_write_skew.txt | 72 + .../iat_dda_write_skew_committed.txt | 72 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 128 + ...a_step_iat_causality_violation_anomaly.txt | 125 + .../iat_mda_step_iat_cross_phenomenon.txt | 242 ++ ...at_mda_step_iat_predicate_based_delete.txt | 128 + ...at_mda_step_iat_predicate_based_insert.txt | 125 + ...step_iat_read_only_transaction_anomaly.txt | 159 + .../iat_mda_step_iat_uname_anomaly.txt | 181 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 58 + .../rat_dda_double_write_skew1.txt | 67 + .../rat_dda_double_write_skew1_committed.txt | 67 + .../rat_dda_double_write_skew2.txt | 67 + .../read-committed/rat_dda_read_skew.txt | 74 + .../read-committed/rat_dda_read_skew2.txt | 74 + .../rat_dda_read_skew2_committed.txt | 74 + ...t_dda_read_skew_predicate_based_delete.txt | 72 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 74 + .../read-committed/rat_mda_step_rat.txt | 128 + .../rat_mda_step_rat_long_fork.txt | 244 ++ ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 67 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 65 + .../wat_dda_read_write_skew1_c2.txt | 65 + .../wat_dda_read_write_skew2_c1.txt | 65 + .../wat_dda_read_write_skew2_c2.txt | 65 + .../wat_dda_read_write_skew2_committed.txt | 65 + .../read-committed/wat_mda_step_wat_c1.txt | 42 + .../read-committed/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 44 + .../wat_sda_dirty_write_2commit.txt | 44 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 74 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../repeatable-read/iat_dda_write_skew.txt | 72 + .../iat_dda_write_skew_committed.txt | 72 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 128 + ...a_step_iat_causality_violation_anomaly.txt | 127 + .../iat_mda_step_iat_cross_phenomenon.txt | 244 ++ ...at_mda_step_iat_predicate_based_delete.txt | 128 + ...at_mda_step_iat_predicate_based_insert.txt | 125 + ...step_iat_read_only_transaction_anomaly.txt | 159 + .../iat_mda_step_iat_uname_anomaly.txt | 183 + .../iat_sda_lost_update_committed.txt | 37 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 42 + .../repeatable-read/rat_dda_read_skew.txt | 74 + .../repeatable-read/rat_dda_read_skew2.txt | 74 + .../rat_dda_read_skew2_committed.txt | 74 + ...t_dda_read_skew_predicate_based_delete.txt | 74 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 72 + .../repeatable-read/rat_mda_step_rat.txt | 128 + .../rat_mda_step_rat_long_fork.txt | 244 ++ ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 37 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 34 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../repeatable-read/wat_mda_step_wat_c1.txt | 42 + .../repeatable-read/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 44 + .../wat_sda_dirty_write_2commit.txt | 28 + .../repeatable-read/wat_sda_full_write.txt | 30 + .../wat_sda_full_write_committed.txt | 30 + .../wat_sda_lost_self_update_committed.txt | 37 + .../wat_sda_lost_update_c1.txt | 37 + .../wat_sda_lost_update_c2.txt | 37 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 74 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 72 + .../iat_dda_write_skew_committed.txt | 72 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 61 + .../serializable/iat_mda_step_iat.txt | 128 + ...a_step_iat_causality_violation_anomaly.txt | 127 + .../iat_mda_step_iat_cross_phenomenon.txt | 244 ++ ...at_mda_step_iat_predicate_based_delete.txt | 128 + ...at_mda_step_iat_predicate_based_insert.txt | 125 + ...step_iat_read_only_transaction_anomaly.txt | 159 + .../iat_mda_step_iat_uname_anomaly.txt | 183 + .../iat_sda_lost_update_committed.txt | 37 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 42 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 42 + .../serializable/rat_dda_read_skew.txt | 74 + .../serializable/rat_dda_read_skew2.txt | 74 + .../rat_dda_read_skew2_committed.txt | 74 + ...t_dda_read_skew_predicate_based_delete.txt | 74 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 72 + .../rat_dda_write_read_skew_committed.txt | 72 + .../serializable/rat_mda_step_rat.txt | 128 + .../rat_mda_step_rat_long_fork.txt | 244 ++ ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 37 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 42 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 25 + .../wat_dda_read_write_skew1_c1.txt | 42 + .../wat_dda_read_write_skew1_c2.txt | 42 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 42 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 42 + .../serializable/wat_mda_step_wat_c2.txt | 42 + .../wat_sda_dirty_write_1abort.txt | 44 + .../wat_sda_dirty_write_2commit.txt | 28 + .../serializable/wat_sda_full_write.txt | 30 + .../wat_sda_full_write_committed.txt | 30 + .../wat_sda_lost_self_update_committed.txt | 37 + .../serializable/wat_sda_lost_update_c1.txt | 37 + .../serializable/wat_sda_lost_update_c2.txt | 37 + .../iat_dda_read_skew_committed.txt | 60 + .../iat_dda_read_write_skew1_committed.txt | 53 + .../read-committed/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 73 + ...w_predicate_based-overdraft_protection.txt | 60 + .../read-committed/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 105 + .../iat_mda_step_iat_cross_phenomenon.txt | 206 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 161 + .../iat_sda_lost_update_committed.txt | 50 + .../iat_sda_non_repeatable_read_committed.txt | 57 + .../rat_dda_double_write_skew1.txt | 55 + .../rat_dda_double_write_skew1_committed.txt | 55 + .../rat_dda_double_write_skew2.txt | 55 + .../read-committed/rat_dda_read_skew.txt | 62 + .../read-committed/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 60 + ...t_dda_read_skew_predicate_based_insert.txt | 58 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 62 + .../read-committed/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../read-committed/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 52 + .../rat_sda_non_repeatable_read.txt | 56 + ...le_read_predicate_based-phantom_delete.txt | 54 + ...le_read_predicate_based-phantom_insert.txt | 56 + .../wat_dda_double_write_skew2_committed.txt | 55 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 53 + .../wat_dda_read_write_skew1_c2.txt | 53 + .../wat_dda_read_write_skew2_c1.txt | 53 + .../wat_dda_read_write_skew2_c2.txt | 53 + .../wat_dda_read_write_skew2_committed.txt | 53 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 43 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 45 + .../wat_sda_full_write_committed.txt | 45 + .../wat_sda_lost_self_update_committed.txt | 52 + .../read-committed/wat_sda_lost_update_c1.txt | 50 + .../read-committed/wat_sda_lost_update_c2.txt | 50 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../repeatable-read/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 73 + ...w_predicate_based-overdraft_protection.txt | 60 + .../repeatable-read/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../repeatable-read/rat_dda_read_skew.txt | 62 + .../repeatable-read/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../repeatable-read/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../repeatable-read/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_lost_self_update.txt | 38 + .../rat_sda_non_repeatable_read.txt | 56 + ...le_read_predicate_based-phantom_delete.txt | 56 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../repeatable-read/wat_mda_step_wat_c1.txt | 41 + .../repeatable-read/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 43 + .../wat_sda_dirty_write_2commit.txt | 29 + .../repeatable-read/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../wat_sda_lost_update_c1.txt | 38 + .../wat_sda_lost_update_c2.txt | 38 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 62 + .../iat_dda_read_write_skew1_committed.txt | 41 + .../serializable/iat_dda_write_skew.txt | 60 + .../iat_dda_write_skew_committed.txt | 60 + ...skew_predicate_based-intersecting_data.txt | 73 + ...w_predicate_based-overdraft_protection.txt | 60 + .../serializable/iat_mda_step_iat.txt | 108 + ...a_step_iat_causality_violation_anomaly.txt | 107 + .../iat_mda_step_iat_cross_phenomenon.txt | 208 + ...at_mda_step_iat_predicate_based_delete.txt | 108 + ...at_mda_step_iat_predicate_based_insert.txt | 105 + ...step_iat_read_only_transaction_anomaly.txt | 139 + .../iat_mda_step_iat_uname_anomaly.txt | 163 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 41 + .../rat_dda_double_write_skew1_committed.txt | 41 + .../rat_dda_double_write_skew2.txt | 41 + .../serializable/rat_dda_read_skew.txt | 62 + .../serializable/rat_dda_read_skew2.txt | 62 + .../rat_dda_read_skew2_committed.txt | 62 + ...t_dda_read_skew_predicate_based_delete.txt | 62 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../serializable/rat_dda_write_read_skew.txt | 60 + .../rat_dda_write_read_skew_committed.txt | 60 + .../serializable/rat_mda_step_rat.txt | 108 + .../rat_mda_step_rat_long_fork.txt | 208 + ...at_mda_step_rat_predicate_based_delete.txt | 108 + ...at_mda_step_rat_predicate_based_insert.txt | 105 + .../serializable/rat_sda_dirty_read.txt | 45 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 52 + .../rat_sda_non_repeatable_read.txt | 56 + ...le_read_predicate_based-phantom_delete.txt | 56 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 41 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 33 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 41 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 41 + .../serializable/wat_mda_step_wat_c1.txt | 41 + .../serializable/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 43 + .../wat_sda_dirty_write_2commit.txt | 29 + .../serializable/wat_sda_full_write.txt | 31 + .../wat_sda_full_write_committed.txt | 31 + .../wat_sda_lost_self_update_committed.txt | 38 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 38 + test_result/disttibuted_result/readme.txt | 6 + .../iat_dda_read_skew_committed.txt | 73 + .../iat_dda_read_write_skew1_committed.txt | 66 + .../read-committed/iat_dda_write_skew.txt | 73 + .../iat_dda_write_skew_committed.txt | 73 + ...skew_predicate_based-intersecting_data.txt | 75 + ...w_predicate_based-overdraft_protection.txt | 62 + .../read-committed/iat_mda_step_iat.txt | 129 + ...a_step_iat_causality_violation_anomaly.txt | 126 + .../iat_mda_step_iat_cross_phenomenon.txt | 243 ++ ...at_mda_step_iat_predicate_based_delete.txt | 129 + ...at_mda_step_iat_predicate_based_insert.txt | 126 + ...step_iat_read_only_transaction_anomaly.txt | 160 + .../iat_mda_step_iat_uname_anomaly.txt | 182 + .../iat_sda_lost_update_committed.txt | 52 + .../iat_sda_non_repeatable_read_committed.txt | 59 + .../rat_dda_double_write_skew1.txt | 68 + .../rat_dda_double_write_skew1_committed.txt | 68 + .../rat_dda_double_write_skew2.txt | 68 + .../read-committed/rat_dda_read_skew.txt | 75 + .../read-committed/rat_dda_read_skew2.txt | 75 + .../rat_dda_read_skew2_committed.txt | 75 + ...t_dda_read_skew_predicate_based_delete.txt | 73 + ...t_dda_read_skew_predicate_based_insert.txt | 60 + .../rat_dda_write_read_skew.txt | 73 + .../rat_dda_write_read_skew_committed.txt | 75 + .../read-committed/rat_mda_step_rat.txt | 129 + .../rat_mda_step_rat_long_fork.txt | 245 ++ ...at_mda_step_rat_predicate_based_delete.txt | 110 + ...at_mda_step_rat_predicate_based_insert.txt | 107 + .../read-committed/rat_sda_dirty_read.txt | 48 + .../rat_sda_intermediate_read.txt | 54 + .../rat_sda_intermediate_read_committed.txt | 54 + .../rat_sda_lost_self_update.txt | 54 + .../rat_sda_non_repeatable_read.txt | 61 + ...le_read_predicate_based-phantom_delete.txt | 59 + ...le_read_predicate_based-phantom_insert.txt | 58 + .../wat_dda_double_write_skew2_committed.txt | 68 + .../wat_dda_full_write_skew_c1.txt | 34 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 66 + .../wat_dda_read_write_skew1_c2.txt | 66 + .../wat_dda_read_write_skew2_c1.txt | 66 + .../wat_dda_read_write_skew2_c2.txt | 66 + .../wat_dda_read_write_skew2_committed.txt | 66 + .../read-committed/wat_mda_step_wat_c1.txt | 41 + .../read-committed/wat_mda_step_wat_c2.txt | 41 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../read-committed/wat_sda_full_write.txt | 47 + .../wat_sda_full_write_committed.txt | 47 + .../wat_sda_lost_self_update_committed.txt | 54 + .../read-committed/wat_sda_lost_update_c1.txt | 52 + .../read-committed/wat_sda_lost_update_c2.txt | 52 + .../iat_dda_read_skew_committed.txt | 75 + .../iat_dda_read_write_skew1_committed.txt | 66 + .../repeatable-read/iat_dda_write_skew.txt | 73 + .../iat_dda_write_skew_committed.txt | 73 + ...skew_predicate_based-intersecting_data.txt | 75 + ...w_predicate_based-overdraft_protection.txt | 62 + .../repeatable-read/iat_mda_step_iat.txt | 129 + ...a_step_iat_causality_violation_anomaly.txt | 128 + .../iat_mda_step_iat_cross_phenomenon.txt | 245 ++ ...at_mda_step_iat_predicate_based_delete.txt | 129 + ...at_mda_step_iat_predicate_based_insert.txt | 126 + ...step_iat_read_only_transaction_anomaly.txt | 160 + .../iat_mda_step_iat_uname_anomaly.txt | 184 + .../iat_sda_lost_update_committed.txt | 52 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 68 + .../rat_dda_double_write_skew1_committed.txt | 68 + .../rat_dda_double_write_skew2.txt | 68 + .../repeatable-read/rat_dda_read_skew.txt | 75 + .../repeatable-read/rat_dda_read_skew2.txt | 75 + .../rat_dda_read_skew2_committed.txt | 75 + ...t_dda_read_skew_predicate_based_delete.txt | 75 + ...t_dda_read_skew_predicate_based_insert.txt | 62 + .../rat_dda_write_read_skew.txt | 73 + .../rat_dda_write_read_skew_committed.txt | 75 + .../repeatable-read/rat_mda_step_rat.txt | 148 + .../rat_mda_step_rat_long_fork.txt | 245 ++ ...at_mda_step_rat_predicate_based_delete.txt | 110 + ...at_mda_step_rat_predicate_based_insert.txt | 107 + .../repeatable-read/rat_sda_dirty_read.txt | 48 + .../rat_sda_intermediate_read.txt | 52 + .../rat_sda_intermediate_read_committed.txt | 54 + .../rat_sda_lost_self_update.txt | 54 + .../rat_sda_non_repeatable_read.txt | 61 + ...le_read_predicate_based-phantom_delete.txt | 61 + ...le_read_predicate_based-phantom_insert.txt | 60 + .../wat_dda_double_write_skew2_committed.txt | 68 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 66 + .../wat_dda_read_write_skew1_c2.txt | 66 + .../wat_dda_read_write_skew2_c1.txt | 66 + .../wat_dda_read_write_skew2_c2.txt | 66 + .../wat_dda_read_write_skew2_committed.txt | 66 + .../repeatable-read/wat_mda_step_wat_c1.txt | 43 + .../repeatable-read/wat_mda_step_wat_c2.txt | 43 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../repeatable-read/wat_sda_full_write.txt | 47 + .../wat_sda_full_write_committed.txt | 47 + .../wat_sda_lost_self_update_committed.txt | 54 + .../wat_sda_lost_update_c1.txt | 52 + .../wat_sda_lost_update_c2.txt | 52 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 43 + .../iat_dda_read_write_skew1_committed.txt | 43 + .../serializable/iat_dda_write_skew.txt | 50 + .../iat_dda_write_skew_committed.txt | 50 + ...skew_predicate_based-intersecting_data.txt | 77 + ...w_predicate_based-overdraft_protection.txt | 48 + .../serializable/iat_mda_step_iat.txt | 87 + ...a_step_iat_causality_violation_anomaly.txt | 128 + .../iat_mda_step_iat_cross_phenomenon.txt | 172 + ...at_mda_step_iat_predicate_based_delete.txt | 87 + ...at_mda_step_iat_predicate_based_insert.txt | 84 + ...step_iat_read_only_transaction_anomaly.txt | 121 + .../iat_mda_step_iat_uname_anomaly.txt | 128 + .../iat_sda_lost_update_committed.txt | 38 + .../iat_sda_non_repeatable_read_committed.txt | 61 + .../rat_dda_double_write_skew1.txt | 34 + .../rat_dda_double_write_skew1_committed.txt | 36 + .../rat_dda_double_write_skew2.txt | 43 + .../serializable/rat_dda_read_skew.txt | 41 + .../serializable/rat_dda_read_skew2.txt | 43 + .../rat_dda_read_skew2_committed.txt | 43 + ...t_dda_read_skew_predicate_based_delete.txt | 75 + ...t_dda_read_skew_predicate_based_insert.txt | 62 + .../serializable/rat_dda_write_read_skew.txt | 41 + .../rat_dda_write_read_skew_committed.txt | 43 + .../serializable/rat_mda_step_rat.txt | 73 + .../rat_mda_step_rat_long_fork.txt | 167 + ...at_mda_step_rat_predicate_based_delete.txt | 69 + ...at_mda_step_rat_predicate_based_insert.txt | 66 + .../serializable/rat_sda_dirty_read.txt | 48 + .../rat_sda_intermediate_read.txt | 54 + .../rat_sda_intermediate_read_committed.txt | 54 + .../serializable/rat_sda_lost_self_update.txt | 54 + .../rat_sda_non_repeatable_read.txt | 61 + ...le_read_predicate_based-phantom_delete.txt | 61 + ...le_read_predicate_based-phantom_insert.txt | 60 + .../wat_dda_double_write_skew2_committed.txt | 43 + .../wat_dda_full_write_skew_c1.txt | 36 + .../wat_dda_full_write_skew_c2.txt | 34 + .../wat_dda_full_write_skew_committed.txt | 36 + .../wat_dda_read_write_skew1_c1.txt | 41 + .../wat_dda_read_write_skew1_c2.txt | 41 + .../wat_dda_read_write_skew2_c1.txt | 43 + .../wat_dda_read_write_skew2_c2.txt | 41 + .../wat_dda_read_write_skew2_committed.txt | 43 + .../serializable/wat_mda_step_wat_c1.txt | 43 + .../serializable/wat_mda_step_wat_c2.txt | 43 + .../wat_sda_dirty_write_1abort.txt | 45 + .../wat_sda_dirty_write_2commit.txt | 45 + .../serializable/wat_sda_full_write.txt | 47 + .../wat_sda_full_write_committed.txt | 47 + .../wat_sda_lost_self_update_committed.txt | 54 + .../serializable/wat_sda_lost_update_c1.txt | 38 + .../serializable/wat_sda_lost_update_c2.txt | 36 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 40 + .../read-committed/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 40 + .../repeatable-read/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../serializable_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 42 + .../iat_dda_read_write_skew1_committed.txt | 42 + .../serializable/iat_dda_write_skew.txt | 47 + .../iat_dda_write_skew_committed.txt | 49 + ...skew_predicate_based-intersecting_data.txt | 74 + ...w_predicate_based-overdraft_protection.txt | 49 + .../serializable/iat_mda_step_iat.txt | 86 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 171 + ...at_mda_step_iat_predicate_based_delete.txt | 86 + ...at_mda_step_iat_predicate_based_insert.txt | 81 + ...step_iat_read_only_transaction_anomaly.txt | 120 + .../iat_mda_step_iat_uname_anomaly.txt | 127 + .../iat_sda_lost_update_committed.txt | 39 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 40 + .../rat_dda_double_write_skew1_committed.txt | 42 + .../rat_dda_double_write_skew2.txt | 33 + .../serializable/rat_dda_read_skew.txt | 40 + .../serializable/rat_dda_read_skew2.txt | 42 + .../rat_dda_read_skew2_committed.txt | 42 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../serializable/rat_dda_write_read_skew.txt | 40 + .../rat_dda_write_read_skew_committed.txt | 42 + .../serializable/rat_mda_step_rat.txt | 70 + .../rat_mda_step_rat_long_fork.txt | 166 + ...at_mda_step_rat_predicate_based_delete.txt | 70 + ...at_mda_step_rat_predicate_based_insert.txt | 67 + .../serializable/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../serializable/rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 35 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 40 + .../wat_dda_read_write_skew1_c2.txt | 40 + .../wat_dda_read_write_skew2_c1.txt | 42 + .../wat_dda_read_write_skew2_c2.txt | 40 + .../wat_dda_read_write_skew2_committed.txt | 42 + .../serializable/wat_mda_step_wat_c1.txt | 40 + .../serializable/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../serializable/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../serializable/wat_sda_lost_update_c1.txt | 39 + .../serializable/wat_sda_lost_update_c2.txt | 37 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 44 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 41 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 41 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 37 + .../wat_dda_full_write_skew_c2.txt | 37 + .../wat_dda_full_write_skew_committed.txt | 37 + .../wat_dda_read_write_skew1_c1.txt | 44 + .../wat_dda_read_write_skew1_c2.txt | 44 + .../wat_dda_read_write_skew2_c1.txt | 44 + .../wat_dda_read_write_skew2_c2.txt | 44 + .../wat_dda_read_write_skew2_committed.txt | 44 + .../read-committed/wat_mda_step_wat_c1.txt | 47 + .../read-committed/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 32 + .../read-committed/wat_sda_full_write.txt | 34 + .../wat_sda_full_write_committed.txt | 34 + .../wat_sda_lost_self_update_committed.txt | 41 + .../read-committed/wat_sda_lost_update_c1.txt | 41 + .../read-committed/wat_sda_lost_update_c2.txt | 41 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 44 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 41 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 41 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 37 + .../wat_dda_full_write_skew_c2.txt | 37 + .../wat_dda_full_write_skew_committed.txt | 37 + .../wat_dda_read_write_skew1_c1.txt | 44 + .../wat_dda_read_write_skew1_c2.txt | 44 + .../wat_dda_read_write_skew2_c1.txt | 44 + .../wat_dda_read_write_skew2_c2.txt | 44 + .../wat_dda_read_write_skew2_committed.txt | 44 + .../repeatable-read/wat_mda_step_wat_c1.txt | 47 + .../repeatable-read/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 32 + .../repeatable-read/wat_sda_full_write.txt | 34 + .../wat_sda_full_write_committed.txt | 34 + .../wat_sda_lost_self_update_committed.txt | 41 + .../wat_sda_lost_update_c1.txt | 41 + .../wat_sda_lost_update_c2.txt | 41 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 44 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 41 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 41 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 37 + .../wat_dda_full_write_skew_c2.txt | 37 + .../wat_dda_full_write_skew_committed.txt | 37 + .../wat_dda_read_write_skew1_c1.txt | 44 + .../wat_dda_read_write_skew1_c2.txt | 44 + .../wat_dda_read_write_skew2_c1.txt | 44 + .../wat_dda_read_write_skew2_c2.txt | 44 + .../wat_dda_read_write_skew2_committed.txt | 44 + .../read-committed/wat_mda_step_wat_c1.txt | 47 + .../read-committed/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 32 + .../read-committed/wat_sda_full_write.txt | 34 + .../wat_sda_full_write_committed.txt | 34 + .../wat_sda_lost_self_update_committed.txt | 41 + .../read-committed/wat_sda_lost_update_c1.txt | 41 + .../read-committed/wat_sda_lost_update_c2.txt | 41 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 44 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 41 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 44 + .../rat_dda_double_write_skew1_committed.txt | 44 + .../rat_dda_double_write_skew2.txt | 44 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 41 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 44 + .../wat_dda_full_write_skew_c1.txt | 37 + .../wat_dda_full_write_skew_c2.txt | 37 + .../wat_dda_full_write_skew_committed.txt | 37 + .../wat_dda_read_write_skew1_c1.txt | 44 + .../wat_dda_read_write_skew1_c2.txt | 44 + .../wat_dda_read_write_skew2_c1.txt | 44 + .../wat_dda_read_write_skew2_c2.txt | 44 + .../wat_dda_read_write_skew2_committed.txt | 44 + .../repeatable-read/wat_mda_step_wat_c1.txt | 47 + .../repeatable-read/wat_mda_step_wat_c2.txt | 47 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 32 + .../repeatable-read/wat_sda_full_write.txt | 34 + .../wat_sda_full_write_committed.txt | 34 + .../wat_sda_lost_self_update_committed.txt | 41 + .../wat_sda_lost_update_c1.txt | 41 + .../wat_sda_lost_update_c2.txt | 41 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 40 + .../read-committed/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 40 + .../repeatable-read/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + .../iat_dda_read_skew_committed.txt | 61 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../read-committed/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../read-committed/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 106 + .../iat_mda_step_iat_cross_phenomenon.txt | 207 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 162 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 60 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../read-committed/rat_dda_read_skew.txt | 63 + .../read-committed/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 61 + ...t_dda_read_skew_predicate_based_insert.txt | 59 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 63 + .../read-committed/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../read-committed/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 58 + ...le_read_predicate_based-phantom_insert.txt | 57 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../read-committed/wat_mda_step_wat_c1.txt | 40 + .../read-committed/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../read-committed/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../read-committed/wat_sda_lost_update_c1.txt | 51 + .../read-committed/wat_sda_lost_update_c2.txt | 51 + .../iat_dda_read_skew_committed.txt | 63 + .../iat_dda_read_write_skew1_committed.txt | 54 + .../repeatable-read/iat_dda_write_skew.txt | 61 + .../iat_dda_write_skew_committed.txt | 61 + ...skew_predicate_based-intersecting_data.txt | 72 + ...w_predicate_based-overdraft_protection.txt | 61 + .../repeatable-read/iat_mda_step_iat.txt | 109 + ...a_step_iat_causality_violation_anomaly.txt | 108 + .../iat_mda_step_iat_cross_phenomenon.txt | 209 + ...at_mda_step_iat_predicate_based_delete.txt | 109 + ...at_mda_step_iat_predicate_based_insert.txt | 106 + ...step_iat_read_only_transaction_anomaly.txt | 140 + .../iat_mda_step_iat_uname_anomaly.txt | 164 + .../iat_sda_lost_update_committed.txt | 51 + .../iat_sda_non_repeatable_read_committed.txt | 62 + .../rat_dda_double_write_skew1.txt | 56 + .../rat_dda_double_write_skew1_committed.txt | 56 + .../rat_dda_double_write_skew2.txt | 56 + .../repeatable-read/rat_dda_read_skew.txt | 63 + .../repeatable-read/rat_dda_read_skew2.txt | 63 + .../rat_dda_read_skew2_committed.txt | 63 + ...t_dda_read_skew_predicate_based_delete.txt | 63 + ...t_dda_read_skew_predicate_based_insert.txt | 61 + .../rat_dda_write_read_skew.txt | 61 + .../rat_dda_write_read_skew_committed.txt | 61 + .../repeatable-read/rat_mda_step_rat.txt | 109 + .../rat_mda_step_rat_long_fork.txt | 209 + ...at_mda_step_rat_predicate_based_delete.txt | 109 + ...at_mda_step_rat_predicate_based_insert.txt | 106 + .../repeatable-read/rat_sda_dirty_read.txt | 47 + .../rat_sda_intermediate_read.txt | 53 + .../rat_sda_intermediate_read_committed.txt | 53 + .../rat_sda_lost_self_update.txt | 53 + .../rat_sda_non_repeatable_read.txt | 60 + ...le_read_predicate_based-phantom_delete.txt | 60 + ...le_read_predicate_based-phantom_insert.txt | 59 + .../wat_dda_double_write_skew2_committed.txt | 56 + .../wat_dda_full_write_skew_c1.txt | 33 + .../wat_dda_full_write_skew_c2.txt | 33 + .../wat_dda_full_write_skew_committed.txt | 35 + .../wat_dda_read_write_skew1_c1.txt | 54 + .../wat_dda_read_write_skew1_c2.txt | 54 + .../wat_dda_read_write_skew2_c1.txt | 54 + .../wat_dda_read_write_skew2_c2.txt | 54 + .../wat_dda_read_write_skew2_committed.txt | 54 + .../repeatable-read/wat_mda_step_wat_c1.txt | 40 + .../repeatable-read/wat_mda_step_wat_c2.txt | 40 + .../wat_sda_dirty_write_1abort.txt | 46 + .../wat_sda_dirty_write_2commit.txt | 46 + .../repeatable-read/wat_sda_full_write.txt | 46 + .../wat_sda_full_write_committed.txt | 46 + .../wat_sda_lost_self_update_committed.txt | 53 + .../wat_sda_lost_update_c1.txt | 51 + .../wat_sda_lost_update_c2.txt | 51 + .../read-committed_total-result.txt | 108 + .../repeatable-read_total-result.txt | 108 + test_result/readme.txt | 7 + .../iat_dda_read_skew_committed.txt | 26 + .../iat_dda_read_write_skew1_committed.txt | 24 + test_result/test_cases/iat_dda_write_skew.txt | 26 + .../iat_dda_write_skew_committed.txt | 26 + ...skew_predicate_based-intersecting_data.txt | 31 + ...w_predicate_based-overdraft_protection.txt | 26 + test_result/test_cases/iat_mda_step_iat.txt | 53 + ...a_step_iat_causality_violation_anomaly.txt | 51 + .../iat_mda_step_iat_cross_phenomenon.txt | 108 + ...at_mda_step_iat_predicate_based_delete.txt | 53 + ...at_mda_step_iat_predicate_based_insert.txt | 50 + ...step_iat_read_only_transaction_anomaly.txt | 65 + .../iat_mda_step_iat_uname_anomaly.txt | 75 + .../iat_sda_lost_update_committed.txt | 22 + .../iat_sda_non_repeatable_read_committed.txt | 24 + .../test_cases/rat_dda_double_write_skew1.txt | 24 + .../rat_dda_double_write_skew1_committed.txt | 24 + .../test_cases/rat_dda_double_write_skew2.txt | 24 + test_result/test_cases/rat_dda_read_skew.txt | 26 + test_result/test_cases/rat_dda_read_skew2.txt | 26 + .../rat_dda_read_skew2_committed.txt | 26 + ...t_dda_read_skew_predicate_based_delete.txt | 27 + ...t_dda_read_skew_predicate_based_insert.txt | 24 + ..._read_skew_predicate_based_insert_test.txt | 26 + .../test_cases/rat_dda_write_read_skew.txt | 26 + .../rat_dda_write_read_skew_committed.txt | 29 + test_result/test_cases/rat_mda_step_rat.txt | 53 + .../test_cases/rat_mda_step_rat_long_fork.txt | 108 + ...at_mda_step_rat_predicate_based_delete.txt | 53 + ...at_mda_step_rat_predicate_based_insert.txt | 50 + test_result/test_cases/rat_sda_dirty_read.txt | 18 + .../test_cases/rat_sda_intermediate_read.txt | 23 + .../rat_sda_intermediate_read_committed.txt | 23 + .../test_cases/rat_sda_lost_self_update.txt | 22 + .../rat_sda_non_repeatable_read.txt | 24 + ...le_read_predicate_based-phantom_delete.txt | 24 + ...le_read_predicate_based-phantom_insert.txt | 23 + .../wat_dda_double_write_skew2_committed.txt | 24 + .../test_cases/wat_dda_full_write_skew_c1.txt | 22 + .../test_cases/wat_dda_full_write_skew_c2.txt | 22 + .../wat_dda_full_write_skew_committed.txt | 22 + .../wat_dda_read_write_skew1_c1.txt | 24 + .../wat_dda_read_write_skew1_c2.txt | 24 + .../wat_dda_read_write_skew2_c1.txt | 24 + .../wat_dda_read_write_skew2_c2.txt | 24 + .../wat_dda_read_write_skew2_committed.txt | 24 + .../test_cases/wat_mda_step_wat_c1.txt | 35 + .../test_cases/wat_mda_step_wat_c2.txt | 35 + .../test_cases/wat_sda_dirty_write_1abort.txt | 20 + .../wat_sda_dirty_write_2commit.txt | 21 + test_result/test_cases/wat_sda_full_write.txt | 20 + .../wat_sda_full_write_committed.txt | 20 + .../wat_sda_lost_self_update_committed.txt | 22 + .../test_cases/wat_sda_lost_update_c1.txt | 22 + .../test_cases/wat_sda_lost_update_c2.txt | 22 + 3707 files changed, 239168 insertions(+), 43481 deletions(-) delete mode 100644 README-zh.md delete mode 100644 config.cfg.template delete mode 100644 contrib/deneva/Authors delete mode 100644 contrib/deneva/Authors.zip delete mode 100644 contrib/deneva/LICENSE delete mode 100644 contrib/deneva/Makefile delete mode 100644 contrib/deneva/README delete mode 100644 contrib/deneva/README.md delete mode 100644 contrib/deneva/benchmarks/PPS_schema.txt delete mode 100644 contrib/deneva/benchmarks/TPCC_full_schema.txt delete mode 100644 contrib/deneva/benchmarks/TPCC_short_schema.txt delete mode 100644 contrib/deneva/benchmarks/YCSB_schema.txt delete mode 100644 contrib/deneva/benchmarks/creator.cpp delete mode 100644 contrib/deneva/benchmarks/creator.h delete mode 100644 contrib/deneva/benchmarks/da.h delete mode 100644 contrib/deneva/benchmarks/da_block_queue.cpp delete mode 100644 contrib/deneva/benchmarks/da_block_queue.h delete mode 100644 contrib/deneva/benchmarks/da_const.h delete mode 100644 contrib/deneva/benchmarks/da_query.cpp delete mode 100644 contrib/deneva/benchmarks/da_query.h delete mode 100644 contrib/deneva/benchmarks/da_query_queue.cpp delete mode 100644 contrib/deneva/benchmarks/da_query_queue.h delete mode 100644 contrib/deneva/benchmarks/da_txn.cpp delete mode 100644 contrib/deneva/benchmarks/da_wl.cpp delete mode 100644 contrib/deneva/benchmarks/generic.cpp delete mode 100644 contrib/deneva/benchmarks/generic.h delete mode 100644 contrib/deneva/benchmarks/pps.h delete mode 100644 contrib/deneva/benchmarks/pps_helper.cpp delete mode 100644 contrib/deneva/benchmarks/pps_helper.h delete mode 100644 contrib/deneva/benchmarks/pps_query.cpp delete mode 100644 contrib/deneva/benchmarks/pps_query.h delete mode 100644 contrib/deneva/benchmarks/pps_txn.cpp delete mode 100644 contrib/deneva/benchmarks/pps_wl.cpp delete mode 100644 contrib/deneva/benchmarks/tpcc.h delete mode 100644 contrib/deneva/benchmarks/tpcc_const.h delete mode 100644 contrib/deneva/benchmarks/tpcc_helper.cpp delete mode 100644 contrib/deneva/benchmarks/tpcc_helper.h delete mode 100644 contrib/deneva/benchmarks/tpcc_query.cpp delete mode 100644 contrib/deneva/benchmarks/tpcc_query.h delete mode 100644 contrib/deneva/benchmarks/tpcc_txn.cpp delete mode 100644 contrib/deneva/benchmarks/tpcc_wl.cpp delete mode 100644 contrib/deneva/benchmarks/ycsb.h delete mode 100644 contrib/deneva/benchmarks/ycsb_query.cpp delete mode 100644 contrib/deneva/benchmarks/ycsb_query.h delete mode 100644 contrib/deneva/benchmarks/ycsb_txn.cpp delete mode 100644 contrib/deneva/benchmarks/ycsb_wl.cpp delete mode 100644 contrib/deneva/client/client_main.cpp delete mode 100644 contrib/deneva/client/client_query.cpp delete mode 100644 contrib/deneva/client/client_query.h delete mode 100644 contrib/deneva/client/client_txn.cpp delete mode 100644 contrib/deneva/client/client_txn.h delete mode 100644 contrib/deneva/concurrency_control/bocc.cpp delete mode 100644 contrib/deneva/concurrency_control/bocc.h delete mode 100644 contrib/deneva/concurrency_control/focc.cpp delete mode 100644 contrib/deneva/concurrency_control/focc.h delete mode 100644 contrib/deneva/concurrency_control/hash.cpp delete mode 100644 contrib/deneva/concurrency_control/hash.h delete mode 100644 contrib/deneva/concurrency_control/maat.cpp delete mode 100644 contrib/deneva/concurrency_control/maat.h delete mode 100644 contrib/deneva/concurrency_control/occ.cpp delete mode 100644 contrib/deneva/concurrency_control/occ.h delete mode 100644 contrib/deneva/concurrency_control/occ_critical_section.cpp delete mode 100644 contrib/deneva/concurrency_control/occ_critical_section.h delete mode 100644 contrib/deneva/concurrency_control/row_lock.cpp delete mode 100644 contrib/deneva/concurrency_control/row_lock.h delete mode 100644 contrib/deneva/concurrency_control/row_maat.cpp delete mode 100644 contrib/deneva/concurrency_control/row_maat.h delete mode 100644 contrib/deneva/concurrency_control/row_mvcc.cpp delete mode 100644 contrib/deneva/concurrency_control/row_mvcc.h delete mode 100644 contrib/deneva/concurrency_control/row_null.cpp delete mode 100644 contrib/deneva/concurrency_control/row_null.h delete mode 100644 contrib/deneva/concurrency_control/row_occ.cpp delete mode 100644 contrib/deneva/concurrency_control/row_occ.h delete mode 100644 contrib/deneva/concurrency_control/row_silo.cpp delete mode 100644 contrib/deneva/concurrency_control/row_silo.h delete mode 100644 contrib/deneva/concurrency_control/row_ssi.cpp delete mode 100644 contrib/deneva/concurrency_control/row_ssi.h delete mode 100644 contrib/deneva/concurrency_control/row_sundial.cpp delete mode 100644 contrib/deneva/concurrency_control/row_sundial.h delete mode 100644 contrib/deneva/concurrency_control/row_ts.cpp delete mode 100644 contrib/deneva/concurrency_control/row_ts.h delete mode 100644 contrib/deneva/concurrency_control/row_wsi.cpp delete mode 100644 contrib/deneva/concurrency_control/row_wsi.h delete mode 100644 contrib/deneva/concurrency_control/silo.cpp delete mode 100644 contrib/deneva/concurrency_control/ssi.cpp delete mode 100644 contrib/deneva/concurrency_control/ssi.h delete mode 100644 contrib/deneva/concurrency_control/sundial.cpp delete mode 100644 contrib/deneva/concurrency_control/sundial.h delete mode 100644 contrib/deneva/concurrency_control/wsi.cpp delete mode 100644 contrib/deneva/concurrency_control/wsi.h delete mode 100644 contrib/deneva/config-debug.h delete mode 100644 contrib/deneva/config-std.h delete mode 100644 contrib/deneva/config.cpp delete mode 100644 contrib/deneva/config.h delete mode 100644 contrib/deneva/ifconfig-debug.txt delete mode 100644 contrib/deneva/jemalloc/jemalloc.h delete mode 100644 contrib/deneva/obj/deps delete mode 100644 contrib/deneva/patch delete mode 100644 contrib/deneva/statistics/stats.cpp delete mode 100644 contrib/deneva/statistics/stats.h delete mode 100644 contrib/deneva/statistics/stats_array.cpp delete mode 100644 contrib/deneva/statistics/stats_array.h delete mode 100644 contrib/deneva/storage/catalog.cpp delete mode 100644 contrib/deneva/storage/catalog.h delete mode 100644 contrib/deneva/storage/index_base.h delete mode 100644 contrib/deneva/storage/index_btree.cpp delete mode 100644 contrib/deneva/storage/index_btree.h delete mode 100644 contrib/deneva/storage/index_hash.cpp delete mode 100644 contrib/deneva/storage/index_hash.h delete mode 100644 contrib/deneva/storage/row.cpp delete mode 100644 contrib/deneva/storage/row.h delete mode 100644 contrib/deneva/storage/table.cpp delete mode 100644 contrib/deneva/storage/table.h delete mode 100644 contrib/deneva/system/abort_queue.cpp delete mode 100644 contrib/deneva/system/abort_queue.h delete mode 100644 contrib/deneva/system/abort_thread.cpp delete mode 100644 contrib/deneva/system/abort_thread.h delete mode 100644 contrib/deneva/system/array.h delete mode 100644 contrib/deneva/system/calvin_thread.cpp delete mode 100644 contrib/deneva/system/calvin_thread.h delete mode 100644 contrib/deneva/system/client_thread.cpp delete mode 100644 contrib/deneva/system/client_thread.h delete mode 100644 contrib/deneva/system/concurrentqueue.h delete mode 100644 contrib/deneva/system/global.cpp delete mode 100644 contrib/deneva/system/global.h delete mode 100644 contrib/deneva/system/hash.cpp delete mode 100644 contrib/deneva/system/hash.h delete mode 100644 contrib/deneva/system/helper.cpp delete mode 100644 contrib/deneva/system/helper.h delete mode 100644 contrib/deneva/system/http.cpp delete mode 100644 contrib/deneva/system/http.h delete mode 100644 contrib/deneva/system/io_thread.cpp delete mode 100644 contrib/deneva/system/io_thread.h delete mode 100644 contrib/deneva/system/latch.h delete mode 100644 contrib/deneva/system/libtcpforcpp.cpp delete mode 100644 contrib/deneva/system/libtcpforcpp.h delete mode 100644 contrib/deneva/system/lock_free_queue.cpp delete mode 100644 contrib/deneva/system/lock_free_queue.h delete mode 100644 contrib/deneva/system/log_thread.cpp delete mode 100644 contrib/deneva/system/log_thread.h delete mode 100644 contrib/deneva/system/logger.cpp delete mode 100644 contrib/deneva/system/logger.h delete mode 100644 contrib/deneva/system/ltsrpc.pb.cpp delete mode 100644 contrib/deneva/system/ltsrpc.pb.h delete mode 100644 contrib/deneva/system/ltsrpc.proto delete mode 100644 contrib/deneva/system/main.cpp delete mode 100644 contrib/deneva/system/manager.cpp delete mode 100644 contrib/deneva/system/manager.h delete mode 100644 contrib/deneva/system/mem_alloc.cpp delete mode 100644 contrib/deneva/system/mem_alloc.h delete mode 100644 contrib/deneva/system/msg_queue.cpp delete mode 100644 contrib/deneva/system/msg_queue.h delete mode 100644 contrib/deneva/system/parser.cpp delete mode 100644 contrib/deneva/system/pool.cpp delete mode 100644 contrib/deneva/system/pool.h delete mode 100644 contrib/deneva/system/query.cpp delete mode 100644 contrib/deneva/system/query.h delete mode 100644 contrib/deneva/system/sequencer.cpp delete mode 100644 contrib/deneva/system/sequencer.h delete mode 100644 contrib/deneva/system/sim_manager.cpp delete mode 100644 contrib/deneva/system/sim_manager.h delete mode 100644 contrib/deneva/system/thread.cpp delete mode 100644 contrib/deneva/system/thread.h delete mode 100644 contrib/deneva/system/txn.cpp delete mode 100644 contrib/deneva/system/txn.h delete mode 100644 contrib/deneva/system/txn_table.cpp delete mode 100644 contrib/deneva/system/txn_table.h delete mode 100644 contrib/deneva/system/wl.cpp delete mode 100644 contrib/deneva/system/wl.h delete mode 100644 contrib/deneva/system/work_queue.cpp delete mode 100644 contrib/deneva/system/work_queue.h delete mode 100644 contrib/deneva/system/worker_thread.cpp delete mode 100644 contrib/deneva/system/worker_thread.h delete mode 100755 contrib/deneva/test.sh delete mode 100644 contrib/deneva/transport/message.cpp delete mode 100644 contrib/deneva/transport/message.h delete mode 100644 contrib/deneva/transport/msg_thread.cpp delete mode 100644 contrib/deneva/transport/msg_thread.h delete mode 100755 contrib/deneva/transport/nn.hpp delete mode 100644 contrib/deneva/transport/transport.cpp delete mode 100644 contrib/deneva/transport/transport.h delete mode 100755 make.sh create mode 100644 test_result/centralizend_result/crdb/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/crdb/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/crdb/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrocks_si/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrocks_si/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/myrocks_si/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrockss/read-uncommitted/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrockss/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/myrockss/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/myrockss/result_summary/read-uncommitted_total-result.txt create mode 100644 test_result/centralizend_result/myrockss/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/myrockss/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/myrockss/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mysql/read-uncommitted/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mysql/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/mysql/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/mysql/result_summary/read-uncommitted_total-result.txt create mode 100644 test_result/centralizend_result/mysql/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/mysql/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/mysql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/mysql/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/ob_mysql/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/ob_mysql/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/ob_oracle/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/ob_oracle/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/ob_oracle/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/oracle/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/oracle/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/oracle/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/oracle/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/oracle/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/pg/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/pg/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/pg/read-uncommitted/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/pg/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/pg/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/pg/result_summary/read-uncommitted_total-result.txt create mode 100644 test_result/centralizend_result/pg/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/pg/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/pg/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/pg/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/rcsnapshot/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/read-uncommitted/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/rcsnapshot_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/read-uncommitted_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/result_summary/snapshot_total-result.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/sqlserver/snapshot/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tdsql/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tdsql/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tdsql/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/tdsql/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/centralizend_result/tdsql/result_summary/serializable_total-result.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tdsql/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tidb_opt/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tidb_opt/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-read-skew_repeatable-read.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/tidb_half-predicate-write-skew_repeatable-read.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/centralizend_result/tidb_per/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/centralizend_result/tidb_per/result_summary/read-committed_total-result.txt create mode 100644 test_result/centralizend_result/tidb_per/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_dist/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/crdb_test/crdb_single/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_dist/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/gp_test/gp_single/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_dist/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/ob_mysql_test/ob_single/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_dis/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/ob_oracle_test/ob_oracle_single/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/readme.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_dist/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/result_summary/serializable_total-result.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tdsql_test/tdsql_single/serializable/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_dist/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_optimistic_single/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_dist/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/read-committed/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_lost_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_double_write_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_dirty_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_lost_self_update.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_mda_step_wat_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_full_write_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c1.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/repeatable-read/wat_sda_lost_update_c2.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/read-committed_total-result.txt create mode 100644 test_result/disttibuted_result/tidb_test/tidb_pessimistic_single/result_summary/repeatable-read_total-result.txt create mode 100644 test_result/readme.txt create mode 100644 test_result/test_cases/iat_dda_read_skew_committed.txt create mode 100644 test_result/test_cases/iat_dda_read_write_skew1_committed.txt create mode 100644 test_result/test_cases/iat_dda_write_skew.txt create mode 100644 test_result/test_cases/iat_dda_write_skew_committed.txt create mode 100644 test_result/test_cases/iat_dda_write_skew_predicate_based-intersecting_data.txt create mode 100644 test_result/test_cases/iat_dda_write_skew_predicate_based-overdraft_protection.txt create mode 100644 test_result/test_cases/iat_mda_step_iat.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_causality_violation_anomaly.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_cross_phenomenon.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_predicate_based_delete.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_predicate_based_insert.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_read_only_transaction_anomaly.txt create mode 100644 test_result/test_cases/iat_mda_step_iat_uname_anomaly.txt create mode 100644 test_result/test_cases/iat_sda_lost_update_committed.txt create mode 100644 test_result/test_cases/iat_sda_non_repeatable_read_committed.txt create mode 100644 test_result/test_cases/rat_dda_double_write_skew1.txt create mode 100644 test_result/test_cases/rat_dda_double_write_skew1_committed.txt create mode 100644 test_result/test_cases/rat_dda_double_write_skew2.txt create mode 100644 test_result/test_cases/rat_dda_read_skew.txt create mode 100644 test_result/test_cases/rat_dda_read_skew2.txt create mode 100644 test_result/test_cases/rat_dda_read_skew2_committed.txt create mode 100644 test_result/test_cases/rat_dda_read_skew_predicate_based_delete.txt create mode 100644 test_result/test_cases/rat_dda_read_skew_predicate_based_insert.txt create mode 100644 test_result/test_cases/rat_dda_read_skew_predicate_based_insert_test.txt create mode 100644 test_result/test_cases/rat_dda_write_read_skew.txt create mode 100644 test_result/test_cases/rat_dda_write_read_skew_committed.txt create mode 100644 test_result/test_cases/rat_mda_step_rat.txt create mode 100644 test_result/test_cases/rat_mda_step_rat_long_fork.txt create mode 100644 test_result/test_cases/rat_mda_step_rat_predicate_based_delete.txt create mode 100644 test_result/test_cases/rat_mda_step_rat_predicate_based_insert.txt create mode 100644 test_result/test_cases/rat_sda_dirty_read.txt create mode 100644 test_result/test_cases/rat_sda_intermediate_read.txt create mode 100644 test_result/test_cases/rat_sda_intermediate_read_committed.txt create mode 100644 test_result/test_cases/rat_sda_lost_self_update.txt create mode 100644 test_result/test_cases/rat_sda_non_repeatable_read.txt create mode 100644 test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_delete.txt create mode 100644 test_result/test_cases/rat_sda_non_repeatable_read_predicate_based-phantom_insert.txt create mode 100644 test_result/test_cases/wat_dda_double_write_skew2_committed.txt create mode 100644 test_result/test_cases/wat_dda_full_write_skew_c1.txt create mode 100644 test_result/test_cases/wat_dda_full_write_skew_c2.txt create mode 100644 test_result/test_cases/wat_dda_full_write_skew_committed.txt create mode 100644 test_result/test_cases/wat_dda_read_write_skew1_c1.txt create mode 100644 test_result/test_cases/wat_dda_read_write_skew1_c2.txt create mode 100644 test_result/test_cases/wat_dda_read_write_skew2_c1.txt create mode 100644 test_result/test_cases/wat_dda_read_write_skew2_c2.txt create mode 100644 test_result/test_cases/wat_dda_read_write_skew2_committed.txt create mode 100644 test_result/test_cases/wat_mda_step_wat_c1.txt create mode 100644 test_result/test_cases/wat_mda_step_wat_c2.txt create mode 100644 test_result/test_cases/wat_sda_dirty_write_1abort.txt create mode 100644 test_result/test_cases/wat_sda_dirty_write_2commit.txt create mode 100644 test_result/test_cases/wat_sda_full_write.txt create mode 100644 test_result/test_cases/wat_sda_full_write_committed.txt create mode 100644 test_result/test_cases/wat_sda_lost_self_update_committed.txt create mode 100644 test_result/test_cases/wat_sda_lost_update_c1.txt create mode 100644 test_result/test_cases/wat_sda_lost_update_c2.txt diff --git a/AUTHORS.txt b/AUTHORS.txt index a3efcca1..ea00b6d4 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,7 +1,4 @@ -Authors ordered by first contribution. - +Yuxing Chen +Yu Li Chang Liu -ZhanHao Zhao -HongYao Zhao -GuangLin Ma -Ming Yan +Xinpeng Chen diff --git a/README-zh.md b/README-zh.md deleted file mode 100644 index dcdec57c..00000000 --- a/README-zh.md +++ /dev/null @@ -1,75 +0,0 @@ -![](assets/logo.png) - -## 简介 - -![](https://img.shields.io/badge/license-GPLv3-brightgreen) - -**Tencent Transaction Processing Testbed System(简称3TS)**,是腾讯公司CynosDB(TDSQL)团队与中国人民大学数据工程与知识工程教育部重点实验室,联合研制的面向数据库事务处理的验证系统。该系统旨在通过设计和构建事务(包括分布式事务)处理统一框架,并通过框架提供的访问接口,方便使用者快速构建新的并发控制算法;通过验证系统提供的测试床,可以方便用户根据应用场景的需要,对目前主流的并发控制算法在相同的测试环境下进行公平的性能比较,选择一种最佳的并发控制算法。目前,验证系统已集成13种主流的并发控制算法,提供了TPC-C、PPS、YCSB等常见基准测试。3TS还进一步提供了一致性级别的测试基准,针对现阶段分布式数据库系统的井喷式发展而造成的系统选择难问题,提供一致性级别判别与性能测试比较。 - -如需更详细理解本项目目的,请参阅[3TS开源声明](doc/zh/announcement.md)。 - -## 特性 - -1. 支持三种history的生成方式:遍历生成、随机生成、从文本读取 -2. 内置多种算法,包括:可串行化、冲突可串行化、SSI、BOCC、FOCC等 -3. 支持从执行时间和回滚率两个角度评估算法开销 - -## 环境依赖 - -### 3TS-DA - -- 支持**C++17**或以上版本的编译器(建议使用g++8) -- libconfig 1.7.2 -- gflags 2.1.1 -- gtest 1.6.0 - -### Deneva - -- protobuf 3.9.1 -- curl 7.29.0 -- nanomsg 5.1.0 - -## 使用方法 - -- 执行`make.sh`编译代码,编译成功后会生成`3ts`二进制文件 -- 执行`cp config/config.cfg.template config.cfg`,复制一份配置文件 -- 执行`vi config.cfg`,填写配置,决定测试的行为 -- 执行`./t3s --conf_path=config.cfg`,即可执行测试,测试完成后会在本地生成测试结果文件 - -## 基本原理 - -3TS框架由四部分构成: - -- 运行模式(runner):负责控制框架的行为。目前框架提供两种运行方式,具体使用何种运行方式,请在配置文件中的`Target`配置项下指定,如`Target = ["FilterRun"]`。 - - `FilterRun`:输出各个算法对各个history的检测结果,同时可以对检测结果进行筛选 - - `BenchmarkRun`:用于测试性能,输出不同事务数量、变量数量场景下,各个算法检测指定数量的history所需要消耗的时间 -- 生成器(generator):负责生成history。 -- 算法(algorithm):对生成器所生成的history进行检测。目前框架提供如下算法: - - 可串行化检测算法(基于可串行化的定义,判断history是否满足可串行化条件,但判定**并发序列和串行序列的执行结果是否一致**的标准,以及**各个事务所采取的读策略**有所不同): - - 四种读策略下,以**各事务读集相同**和**各变量终态一致**为标准的,可串行化检测算法 - - `"SerializableAlgorithm_ALL_SAME_RU"` // 未提交读策略 - - `"SerializableAlgorithm_ALL_SAME_RC"` // 已提交读策略(读取最新的已提交版本,天然避免了由**脏读**异常带来的不可串行化情况) - - `"SerializableAlgorithm_ALL_SAME_RR"` // 可重复读策略(当事务第二次读到某一变量时,取第一次读到的版本,天然避免了由**不可重复读**异常带来的不可串行化情况) - - `"SerializableAlgorithm_ALL_SAME_SI"` // 快照读策略(天然避免了由**幻读**异常带来的不可串行化情况) - - 四种读策略下,以**各提交状态事务读集相同**和**各变量终态一致**为标准的,可串行化检测算法 - - `"SerializableAlgorithm_COMMIT_SAME_RU"` // 未提交读策略 - - `"SerializableAlgorithm_COMMIT_SAME_RC"` // 已提交读策略 - - `"SerializableAlgorithm_COMMIT_SAME_RR"` // 可重复读策略 - - `"SerializableAlgorithm_COMMIT_SAME_SI"` // 快照读策略 - - 四种读策略下,仅以**各变量终态一致**为标准的,可串行化检测算法 - - `"SerializableAlgorithm_FINAL_SAME_RU"` // 未提交读策略 - - `"SerializableAlgorithm_FINAL_SAME_RC"` // 已提交读策略 - - `"SerializableAlgorithm_FINAL_SAME_RR"` // 可重复读策略 - - `"SerializableAlgorithm_FINAL_SAME_SI"` // 快照读策略 - - 冲突可串行化检测算法:`"ConflictSerializableAlgorithm"` - - SSI检测算法:`"SSI"` - - WSI检测算法:`"WSI"` - - BOCC检测算法:`"BOCC"` - - FOCC检测算法:`"FOCC"` -- 输出器(outputter):对算法的检测结果进行相应统计,并输出到指定文件中。 - -**其余配置项说明,请参考配置文件相关注释。** - -## 许可证 - -GPLv3 @ Tencent diff --git a/README.md b/README.md index 7057de41..89e38d64 100644 --- a/README.md +++ b/README.md @@ -8,68 +8,46 @@ If you want to better understand the aims of our project, please view [3TS opensource announcement](doc/en/announcement.md). -## Features +## Coo: Consistency Check -1. Support three ways to generate histories: Traversing Generating, Randomly Generating, Generating From the Text File. -2. Built-in multiple algorithms, including Serializable Algorithm, Conflict Serializable Algorithm, SSI, BOCC, FOCC, etc. -3. Support evaluating algorithm cost from the execution time and rollback rate two perspectives. +To test the consistency of real databases. +We generate the anomaly history, and simulate multi-users transcation reqeusting to databases. -## Dependence +Check out some test cases (e.g., [dirty write](test_result/test_cases/wat_sda_dirty_write_2commit.txt)) and result (e.g., [passed by MySQL](test_result/centralizend_result/mysql/serializable/wat_sda_dirty_write_2commit.txt)). -### 3TS-DA -- a compilter supporting C++17 or upper versions (recommend g++8) -- libconfig 1.7.2 -- gflags 2.1.1 -- gtest 1.6.0 -### Deneva +## Usage +To generate Makefile (all commands are executed under '3TS/src/dbtest'): +``` +cmake -S ./ +``` -- protobuf 3.9.1 -- curl 7.29.0 -- nanomsg 5.1.0 +To complie the code: +``` +make +``` + +## Example + +For test cases, it specify in "do_test_list.txt". Use "#" to exclude (comment) the test case. +We provide three levels of test cases, i.e., the basic cases (33 anomalies in the paper), the predicate cases, and the MDA cases (with multiple transactions and objects). For specific test cases to evaluate, we specify it in do_test_list.txt. + +``` +// to test all test cases +cp t/bk_do_test_list_all.txt do_test_list.txt + +// to test only basic cases +cp t/bk_do_test_list_basic.txt do_test_list.txt +``` + +Edit "auto_test.sh" for database configurations (e.g., username, password). Edit "auto_test_all.sh" for databse (e.g., PostgreSQL, and MySQL) and isolation (e.g., SERIALIZABLE, REPEATABLE READ, READ COMMITTED, and READ UNCOMMITTED) configuration. -## Usage -- Run `make.sh` to compile the code. The `3ts` binary will be generated if compiling successfully. -- Run `cp config/config.cfg.template config.cfg` to copy the configuration file. -- Run `vi config.cfg` to modify the configuration file to determine the behavior of the testbed. -- Run `./t3s --conf_path=config.cfg` to execute test. The test result file will be generated when test is over. - -## Principle - -3TS framework can be divided into four parts: - -- Runner: To determine the behavior of the testbed. The testbed now supports two runners. Please specify the runner behind the `Target` configuration item, e.g. `Target = ["FilterRun"]`. - - `FilterRun`: To output the detection result from each algorithms with each history and the result can be filtered. - - `BenchmarkRun`: To test performance by outputting the time cost of each algorithm detecting anomalies from the same number of histories in different transaction numbers and variable item numbers. -- Generator: To generate histories. -- Algorithm: To detect anomalies in each history generated by Generator. The testbed supports following algorithms: - - Serializable Algorithm (Judge whether the history is serializable or not based on the definition of serializable. But the standard to **check the consistency between the execution results of concurrent history and serialized history** and **the read strategy of each transaction** are different.): - - The Serializable Algorithms based on standard that **every correspond transactions' read set** and **every correspond variable items' final version** are all same in the four read strategies. - - `"SerializableAlgorithm_ALL_SAME_RU"` // uncommitted read strategy - - `"SerializableAlgorithm_ALL_SAME_RC"` // committed read strategy (read the latest committed version by which naturally avoid the unserializable cases caused by **dirty read** anomaly) - - `"SerializableAlgorithm_ALL_SAME_RR"` // repeatable read strategy (read the previous version when second reading the same variable item in the same transaction by which naturally avoid the unserializable cases caused by **non-repeatable read anomaly**) - - `"SerializableAlgorithm_ALL_SAME_SI"` // snapshot read strategy (naturally avoid the unserializable cases caused by **phantom anomaly**) - - The Serializable Algorithms based on standard that **the every committed correspond transactions' read set** and **every correspond variable items' final version** are all same in the four read strategies. - - `"SerializableAlgorithm_COMMIT_SAME_RU"` // uncommitted read strategy - - `"SerializableAlgorithm_COMMIT_SAME_RC"` // committed read strategy - - `"SerializableAlgorithm_COMMIT_SAME_RR"` // repeatable read strategy - - `"SerializableAlgorithm_COMMIT_SAME_SI"` // snapshot read strategy - - The Serializable Algorithms based on standard that only **the every correspond variable items' final version** are same in the four read strategies. - - `"SerializableAlgorithm_FINAL_SAME_RU"` // uncommitted read strategy - - `"SerializableAlgorithm_FINAL_SAME_RC"` // committed read strategy - - `"SerializableAlgorithm_FINAL_SAME_RR"` // repeatable read strategy - - `"SerializableAlgorithm_FINAL_SAME_SI"` // snapshot read strategy - - Conflict Serializable Algorithm:`"ConflictSerializableAlgorithm"` - - Serializable Snapshot Isolation:`"SSI"` - - Write-Snapshot Isolation:`"WSI"` - - Backward Optimistic Concurrency Control:`"BOCC"` - - Forward Optimistic Concurrency Control:`"FOCC"` - -- Outputter: To statistics the results and output to the specific file. - -**For explanations to other configuration items, please view the comments in configuration file.** +To run the test (under '3TS/src/dbtest'): +``` +./auto_test_all.sh +``` ## License diff --git a/config.cfg.template b/config.cfg.template deleted file mode 100644 index 88d02b27..00000000 --- a/config.cfg.template +++ /dev/null @@ -1,82 +0,0 @@ -Target = ("FilterRun"); // The runner to run. - -/* ========== runners ========= */ - -// For each algorithm's result, do filter if field is set. If is set true/false, -// only output the result when the algorithm consider the history OK/NG. -FilterRun = { - thread_num = 10L; // number of threads - generator = "TraversalGenerator"; // history generator - outputters = ("CompareOutputter", "RollbackRateOutputter"); // result outputters - algorithms = ( // concurrency control algorithms and filters - { name = "SerializableAlgorithm_COMMIT_SAME_SI"; }, - { name = "BOCC"; } - ); -}; - -// Output time required for each algorithm in different transaction or variable item numbers. -BenchmarkRun = { - trans_nums = (2L, 4L, 6L); // numbers of transactions - item_nums = (2L, 4L, 6L); // numbers of variable items - algorithms = ("SSI"); // concurrent algorithms - history_num = 1024L; // number of histories to generate - with_abort = true; // generate history with Abort operation - tail_tcl = true; // generate TCL operation only on the tail of history - os = "cout"; // filename the benchmark result output to, "cout" means standard output -}; - -/* ========== history generators ========= */ - -// Generate all histories meeting such conditions. -TraversalGenerator = { - trans_num = 2L; // number of transactions - item_num = 2L; // number of variable items - max_dml = 6L; // max number of DML operations - subtask_num = 10L; // number of subtasks - subtask_id = 0L; // the id of subtask to run - with_abort = true; // generate history with Abort operation - tail_tcl = false; // generate TCL operation only on the tail of history - allow_empty_trans = false; // transactions generated can be without DML operations - dynamic_history_len = false; // number of DML operation can be less than -}; - -// Generate histories described in the file. -InputGenerator = { - file = "input.txt"; // input file contains histories -} - -// Generate random histories. -RandomGenerator = { - trans_num = 1L; // number of transactions - item_num = 7L; // number of variable items - max_dml = 2L; // max number of DML operations - history_num = 100L; // number of histories to generate - with_abort = true; // generate history with Abort operation - tail_tcl = true; // generate TCL operation only on the tail of history - allow_empty_trans = false; // transactions generated can be without DML operations - dynamic_history_len = false; // number of DML operation can be less than -} - -/* ========== result outputters ========= */ - -// Output the rollback rate information of each algorithm supporing rollback rate statistic. -RollbackRateOutputter = { - file = "rollback_rate.txt"; // filename to output -} - -// Output the detail information of each algorithm in each history. -DetailOutputter = { - file = "detail.txt"; // filename to output -} - -// Compare each algorithm's result and output in classification. -CompareOutputter = { - file = "compare.txt"; // filename to output -} - -// Pick the first algorithm as datum algorithm, and calculate each algorithm's miss/wrong judgment -// rate or true/false rollback rate with the datum algorithm. -DatumOutputter = { - file = "testall.txt"; // filename to output -} - diff --git a/contrib/deneva/Authors b/contrib/deneva/Authors deleted file mode 100644 index 08418a71..00000000 --- a/contrib/deneva/Authors +++ /dev/null @@ -1,3 +0,0 @@ -Massachusetts Institute of Technology (rhardin@mit.edu) -Dana Van Aken (dvanaken@cs.cmu.edu) -Xiangyao Yu (yxy@csail.mit.edu) diff --git a/contrib/deneva/Authors.zip b/contrib/deneva/Authors.zip deleted file mode 100644 index bfb1fc48fedc16274716747f9e4d1a10caa397d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3188292 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 z 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

  • Gd*haAPvK#eS? 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%0ABx{vA+CNchonCb##EQ3 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 From 9d6053540a87fe9b25c4e39c9860ac19dba4758b Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Tue, 26 Jan 2021 18:14:40 +0800 Subject: [PATCH 05/81] jdbc --- .../CMakeDirectoryInformation.cmake | 4 +- src/dbtest/CMakeFiles/Makefile.cmake | 4 +- src/dbtest/CMakeFiles/Makefile2 | 47 +---- .../CMakeFiles/dbtest.dir/CXX.includecache | 168 ++++++++++++++++-- .../CMakeFiles/dbtest.dir/DependInfo.cmake | 10 +- src/dbtest/CMakeFiles/dbtest.dir/build.make | 18 +- .../CMakeFiles/dbtest.dir/depend.internal | 26 ++- src/dbtest/CMakeFiles/dbtest.dir/depend.make | 22 ++- src/dbtest/CMakeFiles/dbtest.dir/flags.make | 4 +- .../CMakeFiles/dbtest.dir/src/db_test.cc.gcno | Bin 17760 -> 319152 bytes src/dbtest/CMakeFiles/progress.marks | 2 +- src/dbtest/Makefile | 27 +-- src/dbtest/cmake_install.cmake | 4 +- src/dbtest/config/db-test.conf | 4 - src/dbtest/config/gflags.conf | 11 +- src/dbtest/src/db_test.cc | 52 +++++- src/dbtest/src/db_test.h | 118 ++++++------ 17 files changed, 339 insertions(+), 182 deletions(-) delete mode 100644 src/dbtest/config/db-test.conf diff --git a/src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake b/src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake index 6a807ae1..0ef2556c 100644 --- a/src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake @@ -2,8 +2,8 @@ # Generated by "Unix Makefiles" Generator, CMake Version 3.3 # Relative path conversion top directories. -set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/data1/farrisli/3TS-DBTest") -set(CMAKE_RELATIVE_PATH_TOP_BINARY "/data1/farrisli/3TS-DBTest") +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/data1/farrisli/3TS/src/dbtest") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/data1/farrisli/3TS/src/dbtest") # Force unix paths in dependencies. set(CMAKE_FORCE_UNIX_PATHS 1) diff --git a/src/dbtest/CMakeFiles/Makefile.cmake b/src/dbtest/CMakeFiles/Makefile.cmake index 2030fd8d..41fd17e7 100644 --- a/src/dbtest/CMakeFiles/Makefile.cmake +++ b/src/dbtest/CMakeFiles/Makefile.cmake @@ -13,7 +13,7 @@ set(CMAKE_MAKEFILE_DEPENDS "CMakeLists.txt" "/usr/local/lib/cmake/gflags/gflags-config-version.cmake" "/usr/local/lib/cmake/gflags/gflags-config.cmake" - "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets-noconfig.cmake" + "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets-release.cmake" "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets.cmake" "/usr/local/share/cmake-3.3/Modules/CMakeCInformation.cmake" "/usr/local/share/cmake-3.3/Modules/CMakeCXXInformation.cmake" @@ -21,7 +21,6 @@ set(CMAKE_MAKEFILE_DEPENDS "/usr/local/share/cmake-3.3/Modules/CMakeGenericSystem.cmake" "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInformation.cmake" "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInitialize.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeUnixFindMake.cmake" "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-C.cmake" "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-CXX.cmake" "/usr/local/share/cmake-3.3/Modules/Compiler/GNU.cmake" @@ -45,6 +44,5 @@ set(CMAKE_MAKEFILE_PRODUCTS # Dependency information for all targets: set(CMAKE_DEPEND_INFO_FILES - "CMakeFiles/dbtest_core_static.dir/DependInfo.cmake" "CMakeFiles/dbtest.dir/DependInfo.cmake" ) diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 index 74913812..447e334e 100644 --- a/src/dbtest/CMakeFiles/Makefile2 +++ b/src/dbtest/CMakeFiles/Makefile2 @@ -54,10 +54,10 @@ RM = /usr/local/bin/cmake -E remove -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest #============================================================================= # Target rules for target CMakeFiles/dbtest.dir @@ -66,7 +66,7 @@ CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest CMakeFiles/dbtest.dir/all: $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/depend $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=1,2 "Built target dbtest" + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2 "Built target dbtest" .PHONY : CMakeFiles/dbtest.dir/all # Include target in all. @@ -76,9 +76,9 @@ all: CMakeFiles/dbtest.dir/all # Build rule for subdir invocation for target. CMakeFiles/dbtest.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 2 + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 2 $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/dbtest.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 .PHONY : CMakeFiles/dbtest.dir/rule # Convenience name for target. @@ -96,43 +96,6 @@ clean: CMakeFiles/dbtest.dir/clean .PHONY : clean -#============================================================================= -# Target rules for target CMakeFiles/dbtest_core_static.dir - -# All Build rule for target. -CMakeFiles/dbtest_core_static.dir/all: - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/depend - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=3,4 "Built target dbtest_core_static" -.PHONY : CMakeFiles/dbtest_core_static.dir/all - -# Include target in all. -all: CMakeFiles/dbtest_core_static.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/dbtest_core_static.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 2 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/dbtest_core_static.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 -.PHONY : CMakeFiles/dbtest_core_static.dir/rule - -# Convenience name for target. -dbtest_core_static: CMakeFiles/dbtest_core_static.dir/rule - -.PHONY : dbtest_core_static - -# clean rule for target. -CMakeFiles/dbtest_core_static.dir/clean: - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/clean -.PHONY : CMakeFiles/dbtest_core_static.dir/clean - -# clean rule for target. -clean: CMakeFiles/dbtest_core_static.dir/clean - -.PHONY : clean - #============================================================================= # Special targets to cleanup operation of make. diff --git a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache index e6aea788..6bfb3ac8 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache +++ b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache @@ -6,53 +6,183 @@ #IncludeRegexTransform: -/data1/farrisli/3TS-DBTest/src/db_test.cc +/data1/farrisli/3TS/src/dbtest/src/db_test.cc db_test.h -/data1/farrisli/3TS-DBTest/src/db_test.h +/data1/farrisli/3TS/src/dbtest/src/db_test.h gflags/gflags.h -/data1/farrisli/3TS-DBTest/src/gflags/gflags.h +/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h iomanip - cstdlib - -libconfig.h++ +fstream +- +cassert - -/data1/farrisli/3TS-DBTest/src/db_test.h +/data1/farrisli/3TS/src/dbtest/src/db_test.h vector - libconfig.h++ - iostream - +jdbc/mysql_connection.h +- +jdbc/mysql_driver.h +- +jdbc/cppconn/driver.h +- +jdbc/cppconn/statement.h +- +jdbc/cppconn/prepared_statement.h +- +unordered_map +- + +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h +stdint.h +- +inttypes.h +- +stdint.h +- -include/gflags/gflags.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h +map +- +build_config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h +warning.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h +sqlstring.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h +variant.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h +connection.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h +build_config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h +build_config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h +stdexcept +- string - -vector +memory - -gflags_declare.h -include/gflags/gflags_declare.h -gflags_gflags.h -include/gflags/gflags_gflags.h -include/gflags/gflags_declare.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h +iostream +- +statement.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h +config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h +list +- +map +- +iostream +- +sqlstring.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h +resultset_metadata.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h +sqlstring.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h +datatype.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h string - -stdint.h +algorithm - -sys/types.h +build_config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h +iostream - -inttypes.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h +config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h +resultset.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h +string +- + +/usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h +string +- +map +- +list +- +algorithm +- +typeinfo +- +build_config.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h +sqlstring.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h +exception.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h + +/usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h +stdexcept +- +string +- +memory +- +sqlstring.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h + +/usr/include/mysql-cppconn-8/jdbc/mysql_connection.h +cppconn/connection.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h +memory - -include/gflags/gflags_gflags.h +/usr/include/mysql-cppconn-8/jdbc/mysql_driver.h +cppconn/driver.h +/usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h +memory +- -include/libconfig.h++ -stdio.h +/usr/local/include/gflags/gflags.h +string - -exception +vector - +gflags/gflags_declare.h +/usr/local/include/gflags/gflags/gflags_declare.h +gflags_gflags.h +/usr/local/include/gflags/gflags_gflags.h + +/usr/local/include/gflags/gflags_declare.h string - +stdint.h +- +sys/types.h +- +inttypes.h +- + +/usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake b/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake index 6931b0e8..a5f28ad6 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake +++ b/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake @@ -4,14 +4,20 @@ set(CMAKE_DEPENDS_LANGUAGES ) # The set of files for implicit dependencies of each language: set(CMAKE_DEPENDS_CHECK_CXX - "/data1/farrisli/3TS-DBTest/src/db_test.cc" "/data1/farrisli/3TS-DBTest/CMakeFiles/dbtest.dir/src/db_test.cc.o" + "/data1/farrisli/3TS/src/dbtest/src/db_test.cc" "/data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.o" ) set(CMAKE_CXX_COMPILER_ID "GNU") +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "GFLAGS_IS_A_DLL=0" + ) + # The include file search paths: set(CMAKE_CXX_TARGET_INCLUDE_PATH "src" - "include" + "/usr/include/mysql-cppconn-8" + "/usr/local/include" ) # Targets to which this target links. diff --git a/src/dbtest/CMakeFiles/dbtest.dir/build.make b/src/dbtest/CMakeFiles/dbtest.dir/build.make index e8e93a2b..495ae59f 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/build.make +++ b/src/dbtest/CMakeFiles/dbtest.dir/build.make @@ -43,10 +43,10 @@ RM = /usr/local/bin/cmake -E remove -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest # Include any dependencies generated for this target. include CMakeFiles/dbtest.dir/depend.make @@ -59,16 +59,16 @@ include CMakeFiles/dbtest.dir/flags.make CMakeFiles/dbtest.dir/src/db_test.cc.o: CMakeFiles/dbtest.dir/flags.make CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS/src/dbtest/src/db_test.cc CMakeFiles/dbtest.dir/src/db_test.cc.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest.dir/src/db_test.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i CMakeFiles/dbtest.dir/src/db_test.cc.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s CMakeFiles/dbtest.dir/src/db_test.cc.o.requires: @@ -90,8 +90,10 @@ dbtest_EXTERNAL_OBJECTS = dbtest: CMakeFiles/dbtest.dir/src/db_test.cc.o dbtest: CMakeFiles/dbtest.dir/build.make +dbtest: /usr/local/lib/libgflags.so.2.2.2 +dbtest: /usr/lib64/libmysqlcppconn.so dbtest: CMakeFiles/dbtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest.dir/link.txt --verbose=$(VERBOSE) # Rule to build all files generated by this target. @@ -108,6 +110,6 @@ CMakeFiles/dbtest.dir/clean: .PHONY : CMakeFiles/dbtest.dir/clean CMakeFiles/dbtest.dir/depend: - cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) + cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) .PHONY : CMakeFiles/dbtest.dir/depend diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal index 4553eb0f..25343602 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal @@ -2,9 +2,23 @@ # Generated by "Unix Makefiles" Generator, CMake Version 3.3 CMakeFiles/dbtest.dir/src/db_test.cc.o - /data1/farrisli/3TS-DBTest/src/db_test.cc - /data1/farrisli/3TS-DBTest/src/db_test.h - include/gflags/gflags.h - include/gflags/gflags_declare.h - include/gflags/gflags_gflags.h - include/libconfig.h++ + /data1/farrisli/3TS/src/dbtest/src/db_test.cc + /data1/farrisli/3TS/src/dbtest/src/db_test.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/config.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h + /usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h + /usr/include/mysql-cppconn-8/jdbc/mysql_connection.h + /usr/include/mysql-cppconn-8/jdbc/mysql_driver.h + /usr/local/include/gflags/gflags.h + /usr/local/include/gflags/gflags_declare.h + /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.make b/src/dbtest/CMakeFiles/dbtest.dir/depend.make index a645e678..207fbdd7 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.make +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.make @@ -3,8 +3,22 @@ CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags_declare.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: include/gflags/gflags_gflags.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: include/libconfig.h++ +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/config.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/mysql_connection.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/mysql_driver.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_declare.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/flags.make b/src/dbtest/CMakeFiles/dbtest.dir/flags.make index 0c7fc2ed..9076d1a8 100644 --- a/src/dbtest/CMakeFiles/dbtest.dir/flags.make +++ b/src/dbtest/CMakeFiles/dbtest.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 3.3 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include +CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -I/usr/include/mysql-cppconn-8 -isystem /usr/local/include -CXX_DEFINES = +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno index 7894358f5d53ab09731c3c3b7a4520ddb6f92dc3..0ba84dcab571943f05e334440ffc76c4ef243881 100644 GIT binary patch literal 319152 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�)awRgG(EIeML|uw_N?j(MyJWbTe$I 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 diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks index b8626c4c..0cfbf088 100644 --- a/src/dbtest/CMakeFiles/progress.marks +++ b/src/dbtest/CMakeFiles/progress.marks @@ -1 +1 @@ -4 +2 diff --git a/src/dbtest/Makefile b/src/dbtest/Makefile index 69c05d89..05cf8f44 100644 --- a/src/dbtest/Makefile +++ b/src/dbtest/Makefile @@ -48,10 +48,10 @@ RM = /usr/local/bin/cmake -E remove -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest #============================================================================= # Targets provided globally by CMake. @@ -80,9 +80,9 @@ rebuild_cache/fast: rebuild_cache # The main all target all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles /data1/farrisli/3TS-DBTest/CMakeFiles/progress.marks + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles /data1/farrisli/3TS/src/dbtest/CMakeFiles/progress.marks $(MAKE) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS-DBTest/CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 .PHONY : all # The main clean target @@ -123,19 +123,6 @@ dbtest/fast: $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build .PHONY : dbtest/fast -#============================================================================= -# Target rules for targets named dbtest_core_static - -# Build rule for target. -dbtest_core_static: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dbtest_core_static -.PHONY : dbtest_core_static - -# fast build rule for target. -dbtest_core_static/fast: - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/build -.PHONY : dbtest_core_static/fast - src/db_test.o: src/db_test.cc.o .PHONY : src/db_test.o @@ -143,7 +130,6 @@ src/db_test.o: src/db_test.cc.o # target to build an object file src/db_test.cc.o: $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o .PHONY : src/db_test.cc.o src/db_test.i: src/db_test.cc.i @@ -153,7 +139,6 @@ src/db_test.i: src/db_test.cc.i # target to preprocess a source file src/db_test.cc.i: $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.i - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i .PHONY : src/db_test.cc.i src/db_test.s: src/db_test.cc.s @@ -163,7 +148,6 @@ src/db_test.s: src/db_test.cc.s # target to generate assembly for a file src/db_test.cc.s: $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.s - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s .PHONY : src/db_test.cc.s # Help Target @@ -173,9 +157,8 @@ help: @echo "... clean" @echo "... depend" @echo "... edit_cache" - @echo "... rebuild_cache" - @echo "... dbtest_core_static" @echo "... dbtest" + @echo "... rebuild_cache" @echo "... src/db_test.o" @echo "... src/db_test.i" @echo "... src/db_test.s" diff --git a/src/dbtest/cmake_install.cmake b/src/dbtest/cmake_install.cmake index a73a0d6a..0ba635dd 100644 --- a/src/dbtest/cmake_install.cmake +++ b/src/dbtest/cmake_install.cmake @@ -1,4 +1,4 @@ -# Install script for directory: /data1/farrisli/3TS-DBTest +# Install script for directory: /data1/farrisli/3TS/src/dbtest # Set the install prefix if(NOT DEFINED CMAKE_INSTALL_PREFIX) @@ -40,5 +40,5 @@ endif() string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT "${CMAKE_INSTALL_MANIFEST_FILES}") -file(WRITE "/data1/farrisli/3TS-DBTest/${CMAKE_INSTALL_MANIFEST}" +file(WRITE "/data1/farrisli/3TS/src/dbtest/${CMAKE_INSTALL_MANIFEST}" "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/src/dbtest/config/db-test.conf b/src/dbtest/config/db-test.conf deleted file mode 100644 index 6e86d1ba..00000000 --- a/src/dbtest/config/db-test.conf +++ /dev/null @@ -1,4 +0,0 @@ -# db_info -mysql = ["9.134.218.253", "3306", "ly", "123123"]; -oracle = ["9.134.218.253", "3306", "ly", "123123"]; - diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf index 62512763..4d6a4499 100644 --- a/src/dbtest/config/gflags.conf +++ b/src/dbtest/config/gflags.conf @@ -1,6 +1,7 @@ --db="mysql" --host="9.134.218.253" --port="3306" --user="ly" --passwd="123456" +-db_type=mysql +-host=9.134.218.253 +-port=3306 +-user=test123 +-passwd=Ly.123456 +-db_name=test diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc index 17c95397..2dea3d93 100644 --- a/src/dbtest/src/db_test.cc +++ b/src/dbtest/src/db_test.cc @@ -6,11 +6,12 @@ #include -DEFINE_string(db, "mysql", "database type, include mysql, oracle, sql server"); +DEFINE_string(db_type, "mysql", "database type, include mysql, oracle, sql server"); DEFINE_string(host, "", "database host ip, such as x.x.x.x"); DEFINE_string(port, "", "database port, such as 3306"); DEFINE_string(user, "", "username"); DEFINE_string(passwd, "", "password"); +DEFINE_string(db_name, "test", "create database name"); //std::unique_ptr get_db_connector(const std::string& host, // const std::string& port, @@ -36,7 +37,9 @@ TestCaseType SQLReader::get_test_case_type_by_test_file(std::string& test_file) if (test_file.find("dirty-read")) { return TestCaseType::DirtyRead; } else { - throw "unsupported test type"; + //throw "unsupported test type"; + std::cerr << "unsupported test type" << std::endl; + return TestCaseType::Unsupported; } } @@ -52,7 +55,8 @@ TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) test_sequence.add_txn_sql(txn_sql); } } else { - throw "test file not found"; + //throw "test file not found"; + std::cerr << "test file not found" << std::endl; } std::vector txn_sql_list = test_sequence.get_txn_sql_list(); TxnSQL txn_sql = txn_sql_list[0]; @@ -72,15 +76,48 @@ void SQLReader::init_test_sequence_list(std::string& test_path) { SQLReader::add_test_sequence(test_sequence); } } else { - throw "do_test_list.txt not found"; + //throw "do_test_list.txt not found"; + std::cerr << "do_test_list.txt not found" << std::endl; } } +//MYSQLConnector::execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { + +//} +void MYSQLConnector::set_auto_commit() { +} + +void MYSQLConnector::begin() { +} + +void MYSQLConnector::rollback() { +} + +void MYSQLConnector::commit() { +} + +void MYSQLConnector::execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { + sql::Statement* stmt = MYSQLConnector::stmt_pool_[conn_id]; + sql::ResultSet *res; + res = stmt->executeQuery(sql); + uint32_t index = 0; + while (res->next()) { + std::cout << res->getString(index) << std::endl; + index++; + } +} + +void MYSQLConnector::close_stmt() { +} + +void MYSQLConnector::close_conn() { +} + int main(int argc, char* argv[]) { google::ParseCommandLineFlags(&argc, &argv, true); SQLReader sql_reader; - std::string test_path_base = "../t/"; + std::string test_path_base = "t/"; std::string test_path = test_path_base + "mysql"; sql_reader.init_test_sequence_list(test_path); std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); @@ -90,5 +127,10 @@ int main(int argc, char* argv[]) { std::cout << txn_sql.get_sql() << std::endl; } } + + MYSQLConnector mysql_connector(FLAGS_host, FLAGS_port, FLAGS_user, FLAGS_passwd, FLAGS_db_name, 1); + TestResultSet test_rs; + mysql_connector.execute_sql("select * from sbtest1", test_rs, 0); + return 0; } diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h index 9ce24cb4..88753b2f 100644 --- a/src/dbtest/src/db_test.h +++ b/src/dbtest/src/db_test.h @@ -1,10 +1,11 @@ #include #include #include -#include "jdbc/mysql_connection.h" -#include "jdbc/mysql_driver.h" -#include "jdbc/cppconn/statement.h" -#include "jdbc/cppconn/prepared_statement.h" +#include +#include +#include +#include +#include #include enum class ResultType { @@ -137,54 +138,61 @@ class SQLReader { }; //db connector -//class DBConnectorBase { -//public: -// virtual void set_auto_commit() = 0; -// virtual void begin() = 0; -// virtual void rollback() = 0; -// virtual void commit() = 0; -// virtual void execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; -// virtual void ececute_write_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; -// virtual void close_stmt() = 0; -// virtual void close_conn() = 0; -// virtual ~DBConnectorBase(); -//}; -// -//enum class DBType { -// MYSQL, -// ORACLE -//}; -// -//class MYSQLConnector : public DBConnectorBase { -//private: -// std::vector conn_pool_; -// std::vector stmt_pool_; -//public: -// MYSQLConnector(const std::string& host, std::string port, const std::string& user, const std::string& passwd, int conn_pool_size) { -// sql::mysql::MySQL_Driver *driver = NULL; -// driver = sql::mysql::get_mysql_driver_instance(); -// for (int i=0;iconnect(url, user, passwd); -// if (conn == NULL) { -// std::cout << "conn is null" << std::endl; -// } -// conn_pool_.push_back(conn); -// std::cout << "connect suceess" << std::endl; -// } -// } -// virtual void set_auto_commit() override; -// virtual void begin() override; -// virtual void rollback() override; -// virtual void commit() override; -// virtual void execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; -// virtual void ececute_write_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; -// virtual void close_stmt() override; -// virtual void close_conn() override; -// virtual ~MYSQLConnector(); -//}; +class DBConnectorBase { +public: + virtual void set_auto_commit() = 0; + virtual void begin() = 0; + virtual void rollback() = 0; + virtual void commit() = 0; + virtual void execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; + virtual void close_stmt() = 0; + virtual void close_conn() = 0; + virtual ~DBConnectorBase() {}; +}; + +enum class DBType { + MYSQL, + ORACLE +}; + +class MYSQLConnector : public DBConnectorBase { +private: + //std::vector> conn_pool_; + std::vector conn_pool_; + std::vector stmt_pool_; +public: + MYSQLConnector(const std::string& host, const std::string port, const std::string& user, const std::string& passwd, const std::string& db_name, int conn_pool_size) { + sql::mysql::MySQL_Driver *driver = NULL; + driver = sql::mysql::get_mysql_driver_instance(); + for (int i = 0; i < conn_pool_size; i++) { + //std::unique_ptr conn = NULL; + sql::Connection* conn = NULL; + sql::Statement* stmt = NULL; + //std::unique_ptr stmt = NULL; + if (driver == NULL) { + std::cout << "driver is null" << std::endl; + } + std::string url_base = "tcp://"; + std::string url = url_base + host + ":" + port; + conn = driver->connect(url, user, passwd); + if (conn == NULL) { + std::cout << "conn is null" << std::endl; + } + stmt = conn->createStatement(); + conn_pool_.push_back(conn); + stmt_pool_.push_back(stmt); + std::cout << "connect suceess" << std::endl; + } + stmt_pool_[0]->executeQuery("create database if not exists" + db_name); + }; + virtual void set_auto_commit() override; + virtual void begin() override; + virtual void rollback() override; + virtual void commit() override; + virtual void execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; + virtual void close_stmt() override; + virtual void close_conn() override; + virtual ~MYSQLConnector() { + std::cout << "deconstruct" << std::endl; + }; +}; From 786f8383e8da913abbb0eed452322b80170353f1 Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Wed, 27 Jan 2021 16:23:16 +0800 Subject: [PATCH 06/81] ODBC connect mysql success --- .gitignore | 2 +- .../CMakeFiles/3.3.2/CMakeCCompiler.cmake | 63 -- .../CMakeFiles/3.3.2/CMakeCXXCompiler.cmake | 64 -- .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 20784 -> 0 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 20800 -> 0 bytes src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake | 15 - .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 ---------------- src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 20880 -> 0 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 --------------- .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 20888 -> 0 bytes .../CMakeDirectoryInformation.cmake | 16 - src/dbtest/CMakeFiles/CMakeOutput.log | 548 ----------------- src/dbtest/CMakeFiles/Makefile.cmake | 48 -- src/dbtest/CMakeFiles/Makefile2 | 108 ---- src/dbtest/CMakeFiles/Progress/1 | 1 - src/dbtest/CMakeFiles/cmake.check_cache | 1 - .../CMakeFiles/dbtest.dir/CXX.includecache | 188 ------ .../CMakeFiles/dbtest.dir/DependInfo.cmake | 25 - src/dbtest/CMakeFiles/dbtest.dir/build.make | 115 ---- .../CMakeFiles/dbtest.dir/cmake_clean.cmake | 10 - .../CMakeFiles/dbtest.dir/depend.internal | 24 - src/dbtest/CMakeFiles/dbtest.dir/depend.make | 24 - src/dbtest/CMakeFiles/dbtest.dir/flags.make | 8 - .../CMakeFiles/dbtest.dir/progress.make | 3 - .../CMakeFiles/dbtest.dir/src/db_test.cc.gcno | Bin 319152 -> 0 bytes .../dbtest_core_static.dir/CXX.includecache | 34 -- .../dbtest_core_static.dir/DependInfo.cmake | 25 - .../dbtest_core_static.dir/build.make | 114 ---- .../dbtest_core_static.dir/cmake_clean.cmake | 10 - .../cmake_clean_target.cmake | 3 - .../dbtest_core_static.dir/depend.internal | 7 - .../dbtest_core_static.dir/depend.make | 7 - .../dbtest_core_static.dir/flags.make | 8 - .../dbtest_core_static.dir/progress.make | 3 - .../src/db_test.cc.gcno | Bin 1260 -> 0 bytes src/dbtest/CMakeFiles/feature_tests.bin | Bin 20744 -> 0 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 -- src/dbtest/CMakeFiles/feature_tests.cxx | 405 ------------- src/dbtest/CMakeFiles/progress.marks | 1 - src/dbtest/Makefile | 178 ------ src/dbtest/cmake/Modules/FindLIBCONFIG.cmake | 57 -- src/dbtest/cmake_install.cmake | 44 -- src/dbtest/config/gflags.conf | 7 - src/dbtest/include/gflags/gflags.h | 573 ------------------ .../include/gflags/gflags_completions.h | 121 ---- src/dbtest/include/gflags/gflags_declare.h | 141 ----- src/dbtest/include/gflags/gflags_gflags.h | 101 --- src/dbtest/include/libconfig.h++ | 540 ----------------- src/dbtest/src/db_test.cc | 136 ----- src/dbtest/src/db_test.h | 198 ------ 50 files changed, 1 insertion(+), 5015 deletions(-) delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out delete mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out delete mode 100644 src/dbtest/CMakeFiles/CMakeDirectoryInformation.cmake delete mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log delete mode 100644 src/dbtest/CMakeFiles/Makefile.cmake delete mode 100644 src/dbtest/CMakeFiles/Makefile2 delete mode 100644 src/dbtest/CMakeFiles/Progress/1 delete mode 100644 src/dbtest/CMakeFiles/cmake.check_cache delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/CXX.includecache delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make delete mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno delete mode 100755 src/dbtest/CMakeFiles/feature_tests.bin delete mode 100644 src/dbtest/CMakeFiles/feature_tests.c delete mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx delete mode 100644 src/dbtest/CMakeFiles/progress.marks delete mode 100644 src/dbtest/Makefile delete mode 100644 src/dbtest/cmake/Modules/FindLIBCONFIG.cmake delete mode 100644 src/dbtest/cmake_install.cmake delete mode 100644 src/dbtest/config/gflags.conf delete mode 100644 src/dbtest/include/gflags/gflags.h delete mode 100644 src/dbtest/include/gflags/gflags_completions.h delete mode 100644 src/dbtest/include/gflags/gflags_declare.h delete mode 100644 src/dbtest/include/gflags/gflags_gflags.h delete mode 100644 src/dbtest/include/libconfig.h++ delete mode 100644 src/dbtest/src/db_test.cc delete mode 100644 src/dbtest/src/db_test.h diff --git a/.gitignore b/.gitignore index 3f1e021b..e611002d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,5 @@ dbtest CMakeCache.txt CMakeFiles/* *.cmake -*Makefile* +Makefile cmake/* diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake deleted file mode 100644 index ff7e1439..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CMakeCCompiler.cmake +++ /dev/null @@ -1,63 +0,0 @@ -set(CMAKE_C_COMPILER "/usr/bin/cc") -set(CMAKE_C_COMPILER_ARG1 "") -set(CMAKE_C_COMPILER_ID "GNU") -set(CMAKE_C_COMPILER_VERSION "8.3.1") -set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") -set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") -set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") -set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") - -set(CMAKE_C_PLATFORM_ID "Linux") -set(CMAKE_C_SIMULATE_ID "") -set(CMAKE_C_SIMULATE_VERSION "") - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_COMPILER_IS_GNUCC 1) -set(CMAKE_C_COMPILER_LOADED 1) -set(CMAKE_C_COMPILER_WORKS TRUE) -set(CMAKE_C_ABI_COMPILED TRUE) -set(CMAKE_COMPILER_IS_MINGW ) -set(CMAKE_COMPILER_IS_CYGWIN ) -if(CMAKE_COMPILER_IS_CYGWIN) - set(CYGWIN 1) - set(UNIX 1) -endif() - -set(CMAKE_C_COMPILER_ENV_VAR "CC") - -if(CMAKE_COMPILER_IS_MINGW) - set(MINGW 1) -endif() -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) -set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_C_LINKER_PREFERENCE 10) - -# Save compiler ABI information. -set(CMAKE_C_SIZEOF_DATA_PTR "8") -set(CMAKE_C_COMPILER_ABI "ELF") -set(CMAKE_C_LIBRARY_ARCHITECTURE "") - -if(CMAKE_C_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_C_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") -endif() - -if(CMAKE_C_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "") -endif() - - - - -set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c") -set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib") -set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") - - - diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake deleted file mode 100644 index 8abfa8c8..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CMakeCXXCompiler.cmake +++ /dev/null @@ -1,64 +0,0 @@ -set(CMAKE_CXX_COMPILER "/usr/bin/c++") -set(CMAKE_CXX_COMPILER_ARG1 "") -set(CMAKE_CXX_COMPILER_ID "GNU") -set(CMAKE_CXX_COMPILER_VERSION "8.3.1") -set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") -set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") -set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") -set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") - -set(CMAKE_CXX_PLATFORM_ID "Linux") -set(CMAKE_CXX_SIMULATE_ID "") -set(CMAKE_CXX_SIMULATE_VERSION "") - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_COMPILER_IS_GNUCXX 1) -set(CMAKE_CXX_COMPILER_LOADED 1) -set(CMAKE_CXX_COMPILER_WORKS TRUE) -set(CMAKE_CXX_ABI_COMPILED TRUE) -set(CMAKE_COMPILER_IS_MINGW ) -set(CMAKE_COMPILER_IS_CYGWIN ) -if(CMAKE_COMPILER_IS_CYGWIN) - set(CYGWIN 1) - set(UNIX 1) -endif() - -set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") - -if(CMAKE_COMPILER_IS_MINGW) - set(MINGW 1) -endif() -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP) -set(CMAKE_CXX_LINKER_PREFERENCE 30) -set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) - -# Save compiler ABI information. -set(CMAKE_CXX_SIZEOF_DATA_PTR "8") -set(CMAKE_CXX_COMPILER_ABI "ELF") -set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") - -if(CMAKE_CXX_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_CXX_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") -endif() - -if(CMAKE_CXX_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "") -endif() - - - - -set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c") -set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib") -set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") - - - diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin b/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index b01e72d7cefa69326618a19c0a3f1407599ccd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20784 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 diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake b/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake deleted file mode 100644 index 1e28fa59..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CMakeSystem.cmake +++ /dev/null @@ -1,15 +0,0 @@ -set(CMAKE_HOST_SYSTEM "Linux-5.4.32-1-tlinux4-0001") -set(CMAKE_HOST_SYSTEM_NAME "Linux") -set(CMAKE_HOST_SYSTEM_VERSION "5.4.32-1-tlinux4-0001") -set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") - - - -set(CMAKE_SYSTEM "Linux-5.4.32-1-tlinux4-0001") -set(CMAKE_SYSTEM_NAME "Linux") -set(CMAKE_SYSTEM_VERSION "5.4.32-1-tlinux4-0001") -set(CMAKE_SYSTEM_PROCESSOR "x86_64") - -set(CMAKE_CROSSCOMPILING "FALSE") - -set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c deleted file mode 100644 index 444e4093..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c +++ /dev/null @@ -1,508 +0,0 @@ -#ifdef __cplusplus -# error "A C++ compiler has been selected for C." -#endif - -#if defined(__18CXX) -# define ID_VOID_MAIN -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(SDCC) -# define COMPILER_ID "SDCC" - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} -#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out deleted file mode 100755 index df37a0ba458edea0f27a40f4181672bcb68fb975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20880 zcmeHPeQX@X6`#9{6Q>DhCtzv_ZI%`!$Kdq`iE(HHd$!MBgA=>4!$*VJtnb$LDd#)) zZm)HaTB0Vc2#)R8>ix652niAQkZksT5kGMkRCX+#@}&i?|4*$6s9#Kte;=26lF1tp0U#ye?q|&Qq4s-@)To4 zN$)G5hvmH7KyKeI^9%CJQCUBt;7aT5-Cun?dFO2dPv0~-_hLs)Js1KL9w3@A_TN1T4hyWFq=1Qj3Q zRe-Ja!IOX~KKOV5&Y<2YtY$Ye42&B^+br0|teMHN!Qr9aKBG(RQa3SUXnd=YwhGpC zrf6G*@vVK?e9js-C$ko4PS56ZQqvHkzJgdV;gJY<1N}kmR=PH`5_z9P5eTR6&^X0D zfN~VhI&ktW^3FSO^gD%%4xIWH@j@DUAoM`!fzSh?2SN{o9tb@UdLZ<`f7SzUHGKX( zec!oy{XpF-?TqOUAGM?9lls2n^-DY>bV2AmyeXg8JKwD8DqNHmu*z)fe?cTV6oBhwA=-Wb;M439_1!S*gOLytVCzi`RE3Jh$K2I|YFryADxSM@Rfy;~-L%}Q79 z&=<~}eXv|EKUa4bAd!isMaT!Fs|7^)*B(W|g>RnI7fPp3B;UvK=m(l2pmHF2PJdF5 zoNPG48h&#$l6)WVH{sLV4}ZlE=YkDK_G<85Ei4>JzCW=9g%%FN{1f*KExeStduZW8 zVn<@(gT(mop&OsRnXw)Ep*Eyr!yC?E8=W1wR4(hsK8V@tJ71Rm8eVvBc;Q0-!W)V5 zRj2fQOA&qZpG$wo_S-p;xIZzGcpzacExPNAEsOc`cCWNF);bKK2SN{o9tb@UdLZ;b z=z-7!p$9?_gdPYz@c-(8NM!}ozlKBG21ag6LKz9Kx zoG+Jcpyz--0rdVi%jHu*as3xV`G#PLHUMv|`4lPT@ zTMpLg@s3B9>+zm_D+c3QF5Z)fcO>F1y>X>C-rO5+?2Xs+^86Ci=fMu;jpo7-dLZ;b z=z-7!p$9?_gdPYz5PBf=Kx?vglcisgayVTG2Lr&-Fw;xkW^Kj5>Er{j_@)ju&p`^tj~puoB{hJvKu zk#w-H?>40c<^wh;J?brLr_$BYxw*5mt5a#&Zlx97v<2R_X#+!_<2N^M6dp|65V>Wh zXET0(E3!`zt&vMzrd;td<*dt;`;?Ur`<%;vW@p8BBhrU{GQ=ZVq58@MDk8OoP zv{zlBl*?su)5>%z{P8&d^y)-vYunH+4w2bs$F z$Mss5uLW!kpli?o24PRsuV9(k%rqaGg4$|Sw)YN6z5Wl|>f>)K>TmdORD+3D-~J|e z{{7AG-lg^>>L)|b)T?D*@ROnEEL*Gb?&c@6OX}l3E(}3^54U?^ct_Gty6@qA`Ck|( z`1tehj1#E%agP%Lea}^g59@m$RllaM{0}@kss9r7yC;Z8)K7-)yLBIO|IvL{C+|PJ ze}X~`9tMY_S`9k}Yc$7w@fbVni!WpKF+V$XjNXHtnZ)3U_mr>v3g-8o8iR){z2Ca+ ztYq|_?8c#&NFTZJRh9P`H@=!x#w`aUhEH}yb08ubWAV!WEjpPo7#*JXm2YJ9z2TN$ z!{|H1jjv^X@5wQE6QTcubIZeOl%_c$9*@D-MYAt{HS6)kKU-r1ff#(PXuC8Q4<0@6 ze~@qTcN`~U3nrqg7`@vOZ)*TlnohTl+34IUk<=0B<`*6eu;bQ z`wZZI{p49GPtSPr&+jEp;~?R$NZi|w?*`ya_^|e=S62W&7J%mi@W%r1!vXm3B<`*6 zs}esW-*KqEk!7O%UR;s5*FReT_w%z3cohD7ewSxFyi?+f9(+RLCp~x(@CbZ?(71u! z3B$KJUOSFGBkeFxy`JUrwd3KR0QW0@P`&=f?KH6c*K52S&WoR&cR(J$YQ5v_a(ID? zu-fsqfxlSQmh%f7uO0t4aXYo+@Lhnf1^?rJFks;7KzBk!LBJD!!tvU1`x}5a!gx;p zC$$}buZ`9|zrKYy2|4JGq#f^b;TM1_4mpbc3h*`2D_Fgv5ya_ph&!H-+`Yhgk>gFQ zMHBM)9)sbpfTJI%|62lP;;Y~zdJXtT z@#K3A;Ar3Lw;KV+^3XR3--7|RTG39l*3aF5D>5%9d7YQD_I+a%?SOwY>9;PaG{NyE z*5N59YcCZGc<4Yo%zCuLX#+<0#cfH*_cRk&_T0gk?KK^hEa09h|aSPS@$Ia(P04mr{AG&2c{&F+90k_|b zbXGXcv@JZI0i8IPu|!d-4HYDY{m9BrwefD2AFC<=Skw2a7#74&*4+kf`5>N;?>&mO zey>2~0SXqX_45r1QpfHa}@*jkKLF6b-X9&v2Jr*0Qa%dTZC_js8Lg z=3$tHg1HB(X&3e|G2xgl&Cc!t6-SEK)Fs-t)!c3M^~ueALun|UVGL|fY)u-;ZT$uu z4C2;FGo$~$ZHcWzeQu8Mo?*c3zme3X1-*YeGX{r8dK1IO$iTo@a@-hC^bRM{DnGXb zy^E#)@RLfcv}v29!ZYGWooJfttP=yJ#Cawl>ptAXNEh?QjG0U0!6!o_AeGMKj8f4` zvrKL(Z_w65%7j{-1>9vqi?%?5)?~3Lv*w4e7zUiRLJq`3SbR@b;aSV=k-{SGc4SN~ z?wPgCNuYK?&>4#HDP$O~b1=89PUlMMWGMsZ-(=w4%=5BLRGBc%Lk z9;Y6^OCV7B>HUk|=LDCrZ4kjVP12|No))P;F9qSXhu59-Y5nqUz)_U+pNeUa!u3>6 zD(j{qC2UX}=>zb?HBZu~`J=e3D9#sRpz@O((cQqqHB?H|JX5pOS5O&(xBLQS>_Ld2 zDCyIDRFBl(B?T#eZ~gZJANvp5=YhVv_yQb*6VKd1nyrA3Ld>a8@5PGLe-W9EAmIwK z2r;KV&4XQ(3q~|wOA6lne<1a#{+0PMMQA)uijqpWg8mp{m_O-P&jS-88!M6`;>{oT zHaqoc{_S~1$R8D?awY#0a0DW8_{r{8nWv-k!o2d7Ci+{@#Wexar|(N$1rP$siBvUB z_#c6RZBP0%??>mc(Yb5XKS+<-@g>m3`jbA*51y7EMhftpf%J)<0;W?RKE#B0hahyH zid1d+&j7=zPv4czQePoONhx1~UxNr@RDSwS>yi3idCbch&O-t*DPCcb{>>FcL`a|L zy8zRk3zVRF&a^bRnl@Yrb$+kQC?{x#`mPh7+bmLtr9SQ}8HFF!hy03cs=Lq-*XBM! ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 721698c5..00000000 --- a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__COMO__) -# define COMPILER_ID "Comeau" - /* __COMO_VERSION__ = VRR */ -# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) -# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) - -#elif defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif - /* __INTEL_COMPILER = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) -# define COMPILER_ID "Fujitsu" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) -# define COMPILER_ID "ADSP" -#if defined(__VISUALDSPVERSION__) - /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ -# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) -# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" - -#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) -# define COMPILER_ID "MIPSpro" -# if defined(_SGI_COMPILER_VERSION) - /* _SGI_COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) -# else - /* _COMPILER_VERSION = VRP */ -# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) -# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) -# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__sgi) -# define COMPILER_ID "MIPSpro" - -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) -# define PLATFORM_ID "IRIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# else /* unknown platform */ -# define PLATFORM_ID "" -# endif - -#else /* unknown platform */ -# define PLATFORM_ID "" - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID "" -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number components. */ -#ifdef COMPILER_VERSION_MAJOR -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif - (void)argv; - return require; -} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out deleted file mode 100755 index f0380648c5053dc778459644ff0b04275b5e1716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20888 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 ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccRVGoVg.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_cec3a] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--no-as-needed] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting C [-std=c11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_4fe4f/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_4fe4f.dir/build.make CMakeFiles/cmTC_4fe4f.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_4fe4f -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4fe4f.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -o cmTC_4fe4f -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:1c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c99] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_1ba76/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_1ba76.dir/build.make CMakeFiles/cmTC_1ba76.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_1ba76 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ba76.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -o cmTC_1ba76 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:1c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:1c_variadic_macros - - -Detecting C [-std=c90] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_abea6/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_abea6.dir/build.make CMakeFiles/cmTC_abea6.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c -Linking C executable cmTC_abea6 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_abea6.dir/link.txt --verbose=1 -/usr/bin/cc CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -o cmTC_abea6 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: C_FEATURE:1c_function_prototypes - Feature record: C_FEATURE:0c_restrict - Feature record: C_FEATURE:0c_static_assert - Feature record: C_FEATURE:0c_variadic_macros -Determining if the CXX compiler works passed with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_14d92/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_14d92.dir/build.make CMakeFiles/cmTC_14d92.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx -Linking CXX executable cmTC_14d92 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_14d92.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -o cmTC_14d92 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Detecting CXX compiler ABI info compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp -Linking CXX executable cmTC_dcf1b -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic -Using built-in specs. -COLLECT_GCC=/usr/bin/c++ -COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-redhat-linux -Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux -Thread model: posix -gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) -COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' - /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o -COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - -Parsed CXX implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] - ignore line: [] - ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast"] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build] - ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] - ignore line: [Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] - ignore line: [/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Linking CXX executable cmTC_dcf1b] - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] - ignore line: [Thread model: posix] - ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccdsGisy.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_dcf1b] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] - arg [CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore - remove lib [gcc_s] - remove lib [gcc] - remove lib [gcc_s] - remove lib [gcc] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;c] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - -Detecting CXX [-std=c++14] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_4a014/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_4a014.dir/build.make CMakeFiles/cmTC_4a014.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++14 -o CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_4a014 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4a014.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -o cmTC_4a014 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:1cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:1cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:1cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:1cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:1cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:1cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:1cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:1cxx_relaxed_constexpr - Feature record: CXX_FEATURE:1cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:1cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++11] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_3d352/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_3d352.dir/build.make CMakeFiles/cmTC_3d352.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++11 -o CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_3d352 -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3d352.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -o cmTC_3d352 -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:1cxx_alias_templates - Feature record: CXX_FEATURE:1cxx_alignas - Feature record: CXX_FEATURE:1cxx_alignof - Feature record: CXX_FEATURE:1cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:1cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:1cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:1cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:1cxx_default_function_template_args - Feature record: CXX_FEATURE:1cxx_defaulted_functions - Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:1cxx_delegating_constructors - Feature record: CXX_FEATURE:1cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:1cxx_enum_forward_declarations - Feature record: CXX_FEATURE:1cxx_explicit_conversions - Feature record: CXX_FEATURE:1cxx_extended_friend_declarations - Feature record: CXX_FEATURE:1cxx_extern_templates - Feature record: CXX_FEATURE:1cxx_final - Feature record: CXX_FEATURE:1cxx_func_identifier - Feature record: CXX_FEATURE:1cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:1cxx_inheriting_constructors - Feature record: CXX_FEATURE:1cxx_inline_namespaces - Feature record: CXX_FEATURE:1cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:1cxx_local_type_template_args - Feature record: CXX_FEATURE:1cxx_long_long_type - Feature record: CXX_FEATURE:1cxx_noexcept - Feature record: CXX_FEATURE:1cxx_nonstatic_member_init - Feature record: CXX_FEATURE:1cxx_nullptr - Feature record: CXX_FEATURE:1cxx_override - Feature record: CXX_FEATURE:1cxx_range_for - Feature record: CXX_FEATURE:1cxx_raw_string_literals - Feature record: CXX_FEATURE:1cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:1cxx_right_angle_brackets - Feature record: CXX_FEATURE:1cxx_rvalue_references - Feature record: CXX_FEATURE:1cxx_sizeof_member - Feature record: CXX_FEATURE:1cxx_static_assert - Feature record: CXX_FEATURE:1cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:1cxx_thread_local - Feature record: CXX_FEATURE:1cxx_trailing_return_types - Feature record: CXX_FEATURE:1cxx_unicode_literals - Feature record: CXX_FEATURE:1cxx_uniform_initialization - Feature record: CXX_FEATURE:1cxx_unrestricted_unions - Feature record: CXX_FEATURE:1cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:1cxx_variadic_macros - Feature record: CXX_FEATURE:1cxx_variadic_templates - - -Detecting CXX [-std=c++98] compiler features compiled with the following output: -Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp - -Run Build Command:"/usr/bin/gmake" "cmTC_7bf6e/fast" -/usr/bin/gmake -f CMakeFiles/cmTC_7bf6e.dir/build.make CMakeFiles/cmTC_7bf6e.dir/build -gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -/usr/bin/c++ -fPIC -std=c++98 -o CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx -Linking CXX executable cmTC_7bf6e -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7bf6e.dir/link.txt --verbose=1 -/usr/bin/c++ -fPIC CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -o cmTC_7bf6e -rdynamic -gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' - - - Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers - Feature record: CXX_FEATURE:0cxx_alias_templates - Feature record: CXX_FEATURE:0cxx_alignas - Feature record: CXX_FEATURE:0cxx_alignof - Feature record: CXX_FEATURE:0cxx_attributes - Feature record: CXX_FEATURE:0cxx_attribute_deprecated - Feature record: CXX_FEATURE:0cxx_auto_type - Feature record: CXX_FEATURE:0cxx_binary_literals - Feature record: CXX_FEATURE:0cxx_constexpr - Feature record: CXX_FEATURE:0cxx_contextual_conversions - Feature record: CXX_FEATURE:0cxx_decltype - Feature record: CXX_FEATURE:0cxx_decltype_auto - Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types - Feature record: CXX_FEATURE:0cxx_default_function_template_args - Feature record: CXX_FEATURE:0cxx_defaulted_functions - Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers - Feature record: CXX_FEATURE:0cxx_delegating_constructors - Feature record: CXX_FEATURE:0cxx_deleted_functions - Feature record: CXX_FEATURE:0cxx_digit_separators - Feature record: CXX_FEATURE:0cxx_enum_forward_declarations - Feature record: CXX_FEATURE:0cxx_explicit_conversions - Feature record: CXX_FEATURE:0cxx_extended_friend_declarations - Feature record: CXX_FEATURE:0cxx_extern_templates - Feature record: CXX_FEATURE:0cxx_final - Feature record: CXX_FEATURE:0cxx_func_identifier - Feature record: CXX_FEATURE:0cxx_generalized_initializers - Feature record: CXX_FEATURE:0cxx_generic_lambdas - Feature record: CXX_FEATURE:0cxx_inheriting_constructors - Feature record: CXX_FEATURE:0cxx_inline_namespaces - Feature record: CXX_FEATURE:0cxx_lambdas - Feature record: CXX_FEATURE:0cxx_lambda_init_captures - Feature record: CXX_FEATURE:0cxx_local_type_template_args - Feature record: CXX_FEATURE:0cxx_long_long_type - Feature record: CXX_FEATURE:0cxx_noexcept - Feature record: CXX_FEATURE:0cxx_nonstatic_member_init - Feature record: CXX_FEATURE:0cxx_nullptr - Feature record: CXX_FEATURE:0cxx_override - Feature record: CXX_FEATURE:0cxx_range_for - Feature record: CXX_FEATURE:0cxx_raw_string_literals - Feature record: CXX_FEATURE:0cxx_reference_qualified_functions - Feature record: CXX_FEATURE:0cxx_relaxed_constexpr - Feature record: CXX_FEATURE:0cxx_return_type_deduction - Feature record: CXX_FEATURE:0cxx_right_angle_brackets - Feature record: CXX_FEATURE:0cxx_rvalue_references - Feature record: CXX_FEATURE:0cxx_sizeof_member - Feature record: CXX_FEATURE:0cxx_static_assert - Feature record: CXX_FEATURE:0cxx_strong_enums - Feature record: CXX_FEATURE:1cxx_template_template_parameters - Feature record: CXX_FEATURE:0cxx_thread_local - Feature record: CXX_FEATURE:0cxx_trailing_return_types - Feature record: CXX_FEATURE:0cxx_unicode_literals - Feature record: CXX_FEATURE:0cxx_uniform_initialization - Feature record: CXX_FEATURE:0cxx_unrestricted_unions - Feature record: CXX_FEATURE:0cxx_user_literals - Feature record: CXX_FEATURE:0cxx_variable_templates - Feature record: CXX_FEATURE:0cxx_variadic_macros - Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile.cmake b/src/dbtest/CMakeFiles/Makefile.cmake deleted file mode 100644 index 41fd17e7..00000000 --- a/src/dbtest/CMakeFiles/Makefile.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# The generator used is: -set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") - -# The top level Makefile was generated from the following files: -set(CMAKE_MAKEFILE_DEPENDS - "CMakeCache.txt" - "CMakeFiles/3.3.2/CMakeCCompiler.cmake" - "CMakeFiles/3.3.2/CMakeCXXCompiler.cmake" - "CMakeFiles/3.3.2/CMakeSystem.cmake" - "CMakeLists.txt" - "/usr/local/lib/cmake/gflags/gflags-config-version.cmake" - "/usr/local/lib/cmake/gflags/gflags-config.cmake" - "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets-release.cmake" - "/usr/local/lib/cmake/gflags/gflags-nonamespace-targets.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeCInformation.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeCXXInformation.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeCommonLanguageInclude.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeGenericSystem.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInformation.cmake" - "/usr/local/share/cmake-3.3/Modules/CMakeSystemSpecificInitialize.cmake" - "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-C.cmake" - "/usr/local/share/cmake-3.3/Modules/Compiler/GNU-CXX.cmake" - "/usr/local/share/cmake-3.3/Modules/Compiler/GNU.cmake" - "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU-C.cmake" - "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU-CXX.cmake" - "/usr/local/share/cmake-3.3/Modules/Platform/Linux-GNU.cmake" - "/usr/local/share/cmake-3.3/Modules/Platform/Linux.cmake" - "/usr/local/share/cmake-3.3/Modules/Platform/UnixPaths.cmake" - ) - -# The corresponding makefile is: -set(CMAKE_MAKEFILE_OUTPUTS - "Makefile" - "CMakeFiles/cmake.check_cache" - ) - -# Byproducts of CMake generate step: -set(CMAKE_MAKEFILE_PRODUCTS - "CMakeFiles/CMakeDirectoryInformation.cmake" - ) - -# Dependency information for all targets: -set(CMAKE_DEPEND_INFO_FILES - "CMakeFiles/dbtest.dir/DependInfo.cmake" - ) diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 deleted file mode 100644 index 447e334e..00000000 --- a/src/dbtest/CMakeFiles/Makefile2 +++ /dev/null @@ -1,108 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# The main recursive all target -all: - -.PHONY : all - -# The main recursive preinstall target -preinstall: - -.PHONY : preinstall - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -#============================================================================= -# Target rules for target CMakeFiles/dbtest.dir - -# All Build rule for target. -CMakeFiles/dbtest.dir/all: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/depend - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2 "Built target dbtest" -.PHONY : CMakeFiles/dbtest.dir/all - -# Include target in all. -all: CMakeFiles/dbtest.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/dbtest.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 2 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/dbtest.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 -.PHONY : CMakeFiles/dbtest.dir/rule - -# Convenience name for target. -dbtest: CMakeFiles/dbtest.dir/rule - -.PHONY : dbtest - -# clean rule for target. -CMakeFiles/dbtest.dir/clean: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/clean -.PHONY : CMakeFiles/dbtest.dir/clean - -# clean rule for target. -clean: CMakeFiles/dbtest.dir/clean - -.PHONY : clean - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/src/dbtest/CMakeFiles/Progress/1 b/src/dbtest/CMakeFiles/Progress/1 deleted file mode 100644 index 7b4d68d7..00000000 --- a/src/dbtest/CMakeFiles/Progress/1 +++ /dev/null @@ -1 +0,0 @@ -empty \ No newline at end of file diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd731..00000000 --- a/src/dbtest/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache deleted file mode 100644 index 6bfb3ac8..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache +++ /dev/null @@ -1,188 +0,0 @@ -#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS/src/dbtest/src/db_test.cc -db_test.h -/data1/farrisli/3TS/src/dbtest/src/db_test.h -gflags/gflags.h -/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h -iomanip -- -cstdlib -- -fstream -- -cassert -- - -/data1/farrisli/3TS/src/dbtest/src/db_test.h -vector -- -libconfig.h++ -- -iostream -- -jdbc/mysql_connection.h -- -jdbc/mysql_driver.h -- -jdbc/cppconn/driver.h -- -jdbc/cppconn/statement.h -- -jdbc/cppconn/prepared_statement.h -- -unordered_map -- - -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h -stdint.h -- -inttypes.h -- -stdint.h -- - -/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h -map -- -build_config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h -warning.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h -sqlstring.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -variant.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h -connection.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h -build_config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h -build_config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h -stdexcept -- -string -- -memory -- - -/usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h -iostream -- -statement.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h -config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h -list -- -map -- -iostream -- -sqlstring.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -resultset_metadata.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h -sqlstring.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -datatype.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -string -- -algorithm -- -build_config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h -iostream -- - -/usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h -config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/config.h -resultset.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h -string -- - -/usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h -string -- -map -- -list -- -algorithm -- -typeinfo -- -build_config.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h -sqlstring.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -exception.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h - -/usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h -stdexcept -- -string -- -memory -- -sqlstring.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h - -/usr/include/mysql-cppconn-8/jdbc/mysql_connection.h -cppconn/connection.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h -memory -- - -/usr/include/mysql-cppconn-8/jdbc/mysql_driver.h -cppconn/driver.h -/usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h -memory -- - -/usr/local/include/gflags/gflags.h -string -- -vector -- -gflags/gflags_declare.h -/usr/local/include/gflags/gflags/gflags_declare.h -gflags_gflags.h -/usr/local/include/gflags/gflags_gflags.h - -/usr/local/include/gflags/gflags_declare.h -string -- -stdint.h -- -sys/types.h -- -inttypes.h -- - -/usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake b/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake deleted file mode 100644 index a5f28ad6..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# The set of languages for which implicit dependencies are needed: -set(CMAKE_DEPENDS_LANGUAGES - "CXX" - ) -# The set of files for implicit dependencies of each language: -set(CMAKE_DEPENDS_CHECK_CXX - "/data1/farrisli/3TS/src/dbtest/src/db_test.cc" "/data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.o" - ) -set(CMAKE_CXX_COMPILER_ID "GNU") - -# Preprocessor definitions for this target. -set(CMAKE_TARGET_DEFINITIONS_CXX - "GFLAGS_IS_A_DLL=0" - ) - -# The include file search paths: -set(CMAKE_CXX_TARGET_INCLUDE_PATH - "src" - "/usr/include/mysql-cppconn-8" - "/usr/local/include" - ) - -# Targets to which this target links. -set(CMAKE_TARGET_LINKED_INFO_FILES - ) diff --git a/src/dbtest/CMakeFiles/dbtest.dir/build.make b/src/dbtest/CMakeFiles/dbtest.dir/build.make deleted file mode 100644 index 495ae59f..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/build.make +++ /dev/null @@ -1,115 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -# Include any dependencies generated for this target. -include CMakeFiles/dbtest.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/dbtest.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/dbtest.dir/flags.make - -CMakeFiles/dbtest.dir/src/db_test.cc.o: CMakeFiles/dbtest.dir/flags.make -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS/src/dbtest/src/db_test.cc - -CMakeFiles/dbtest.dir/src/db_test.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest.dir/src/db_test.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i - -CMakeFiles/dbtest.dir/src/db_test.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s - -CMakeFiles/dbtest.dir/src/db_test.cc.o.requires: - -.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - -CMakeFiles/dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build -.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.provides - -CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest.dir/src/db_test.cc.o - - -# Object files for target dbtest -dbtest_OBJECTS = \ -"CMakeFiles/dbtest.dir/src/db_test.cc.o" - -# External object files for target dbtest -dbtest_EXTERNAL_OBJECTS = - -dbtest: CMakeFiles/dbtest.dir/src/db_test.cc.o -dbtest: CMakeFiles/dbtest.dir/build.make -dbtest: /usr/local/lib/libgflags.so.2.2.2 -dbtest: /usr/lib64/libmysqlcppconn.so -dbtest: CMakeFiles/dbtest.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/dbtest.dir/build: dbtest - -.PHONY : CMakeFiles/dbtest.dir/build - -CMakeFiles/dbtest.dir/requires: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires - -.PHONY : CMakeFiles/dbtest.dir/requires - -CMakeFiles/dbtest.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/dbtest.dir/cmake_clean.cmake -.PHONY : CMakeFiles/dbtest.dir/clean - -CMakeFiles/dbtest.dir/depend: - cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/dbtest.dir/depend - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake b/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake deleted file mode 100644 index 380f5ad3..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/cmake_clean.cmake +++ /dev/null @@ -1,10 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/dbtest.dir/src/db_test.cc.o" - "dbtest.pdb" - "dbtest" -) - -# Per-language clean rules from dependency scanning. -foreach(lang CXX) - include(CMakeFiles/dbtest.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal deleted file mode 100644 index 25343602..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal +++ /dev/null @@ -1,24 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest.dir/src/db_test.cc.o - /data1/farrisli/3TS/src/dbtest/src/db_test.cc - /data1/farrisli/3TS/src/dbtest/src/db_test.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/config.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h - /usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h - /usr/include/mysql-cppconn-8/jdbc/mysql_connection.h - /usr/include/mysql-cppconn-8/jdbc/mysql_driver.h - /usr/local/include/gflags/gflags.h - /usr/local/include/gflags/gflags_declare.h - /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.make b/src/dbtest/CMakeFiles/dbtest.dir/depend.make deleted file mode 100644 index 207fbdd7..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/depend.make +++ /dev/null @@ -1,24 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc -CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/build_config.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/config.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/connection.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/datatype.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/driver.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/exception.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/prepared_statement.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/resultset_metadata.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/sqlstring.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/statement.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/variant.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/cppconn/warning.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/mysql_connection.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/include/mysql-cppconn-8/jdbc/mysql_driver.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_declare.h -CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_gflags.h - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/flags.make b/src/dbtest/CMakeFiles/dbtest.dir/flags.make deleted file mode 100644 index 9076d1a8..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -I/usr/include/mysql-cppconn-8 -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/progress.make b/src/dbtest/CMakeFiles/dbtest.dir/progress.make deleted file mode 100644 index abadeb0c..00000000 --- a/src/dbtest/CMakeFiles/dbtest.dir/progress.make +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_PROGRESS_1 = 1 -CMAKE_PROGRESS_2 = 2 - diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno deleted file mode 100644 index 0ba84dcab571943f05e334440ffc76c4ef243881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319152 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�)awRgG(EIeML|uw_N?j(MyJWbTe$I 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]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/data1/farrisli/3TS-DBTest/src/db_test.cc -db_test.h -/data1/farrisli/3TS-DBTest/src/db_test.h -iomanip -- -cstdlib -- -libconfig.h++ -- - -/data1/farrisli/3TS-DBTest/src/db_test.h -vector -- -libconfig.h++ -- -iostream -- - -include/libconfig.h++ -stdio.h -- -exception -- -string -- - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake deleted file mode 100644 index 86aa1816..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# The set of languages for which implicit dependencies are needed: -set(CMAKE_DEPENDS_LANGUAGES - "CXX" - ) -# The set of files for implicit dependencies of each language: -set(CMAKE_DEPENDS_CHECK_CXX - "/data1/farrisli/3TS-DBTest/src/db_test.cc" "/data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - ) -set(CMAKE_CXX_COMPILER_ID "GNU") - -# Preprocessor definitions for this target. -set(CMAKE_TARGET_DEFINITIONS_CXX - "GFLAGS_IS_A_DLL=0" - ) - -# The include file search paths: -set(CMAKE_CXX_TARGET_INCLUDE_PATH - "src" - "include" - "/usr/local/include" - ) - -# Targets to which this target links. -set(CMAKE_TARGET_LINKED_INFO_FILES - ) diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make deleted file mode 100644 index fa470236..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make +++ /dev/null @@ -1,114 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS-DBTest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS-DBTest - -# Include any dependencies generated for this target. -include CMakeFiles/dbtest_core_static.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/dbtest_core_static.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/dbtest_core_static.dir/flags.make - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: CMakeFiles/dbtest_core_static.dir/flags.make -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -c /data1/farrisli/3TS-DBTest/src/db_test.cc - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS-DBTest/src/db_test.cc > CMakeFiles/dbtest_core_static.dir/src/db_test.cc.i - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s" - /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS-DBTest/src/db_test.cc -o CMakeFiles/dbtest_core_static.dir/src/db_test.cc.s - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires: - -.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - $(MAKE) -f CMakeFiles/dbtest_core_static.dir/build.make CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build -.PHONY : CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o - - -# Object files for target dbtest_core_static -dbtest_core_static_OBJECTS = \ -"CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - -# External object files for target dbtest_core_static -dbtest_core_static_EXTERNAL_OBJECTS = - -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/build.make -libdbtest_core_static.a: CMakeFiles/dbtest_core_static.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS-DBTest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libdbtest_core_static.a" - $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest_core_static.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/dbtest_core_static.dir/build: libdbtest_core_static.a - -.PHONY : CMakeFiles/dbtest_core_static.dir/build - -CMakeFiles/dbtest_core_static.dir/requires: CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o.requires - -.PHONY : CMakeFiles/dbtest_core_static.dir/requires - -CMakeFiles/dbtest_core_static.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake -.PHONY : CMakeFiles/dbtest_core_static.dir/clean - -CMakeFiles/dbtest_core_static.dir/depend: - cd /data1/farrisli/3TS-DBTest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest /data1/farrisli/3TS-DBTest/CMakeFiles/dbtest_core_static.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/dbtest_core_static.dir/depend - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake deleted file mode 100644 index ccfaea54..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean.cmake +++ /dev/null @@ -1,10 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o" - "libdbtest_core_static.pdb" - "libdbtest_core_static.a" -) - -# Per-language clean rules from dependency scanning. -foreach(lang CXX) - include(CMakeFiles/dbtest_core_static.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake b/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake deleted file mode 100644 index 5ded2361..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/cmake_clean_target.cmake +++ /dev/null @@ -1,3 +0,0 @@ -file(REMOVE_RECURSE - "libdbtest_core_static.a" -) diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal deleted file mode 100644 index 44bfc02c..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal +++ /dev/null @@ -1,7 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o - /data1/farrisli/3TS-DBTest/src/db_test.cc - /data1/farrisli/3TS-DBTest/src/db_test.h - include/libconfig.h++ diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make deleted file mode 100644 index f5b45059..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make +++ /dev/null @@ -1,7 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.cc -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: src/db_test.h -CMakeFiles/dbtest_core_static.dir/src/db_test.cc.o: include/libconfig.h++ - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make deleted file mode 100644 index 60ef1fd8..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make +++ /dev/null @@ -1,8 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# compile CXX with /usr/bin/c++ -CXX_FLAGS = -std=c++11 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS-DBTest/src -I/data1/farrisli/3TS-DBTest/include -isystem /usr/local/include - -CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make b/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make deleted file mode 100644 index 8c8fb6fb..00000000 --- a/src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_PROGRESS_1 = 3 -CMAKE_PROGRESS_2 = 4 - diff --git a/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno deleted file mode 100644 index f658c158ecb4ec4b0fa763bc0c07698045b5d327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmd5*yGlbr5Z#S2f)CIXHa0d28gvb@NTnn(iV_htHi9ghy-^mDn{XeEA0hsLUtnir z5ep0TC#>ugf5JKUAsQ_5uyA1S?984y%ssQ)vi134E??L_eq81(Fg{1FZDlrJubqXB z+s?xn#d4=|P%KoWbp4v#l~zr9b=O7EmESipCmfiLFy-!m-psi=Q)3>pgGb%e2X!?)@} zXEGu$Op8WVS53AD(3gd^&;ZtNE$%clf(?5QXNlv(X{Q#i?r+}SPhap>n#$PVhV{!o ePBr+iUf(n39lz&LkKf;MI>M0~sHbTZM)nEC;L#ia diff --git a/src/dbtest/CMakeFiles/feature_tests.bin b/src/dbtest/CMakeFiles/feature_tests.bin deleted file mode 100755 index 278f070a547e2715934a68da6cf6885e9f5ba075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20744 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 diff --git a/src/dbtest/CMakeFiles/feature_tests.c b/src/dbtest/CMakeFiles/feature_tests.c deleted file mode 100644 index 5a17cdba..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.c +++ /dev/null @@ -1,34 +0,0 @@ - - const char features[] = {"" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 -"1" -#else -"0" -#endif -"c_function_prototypes\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_restrict\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L -"1" -#else -"0" -#endif -"c_static_assert\n" -"C_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -"1" -#else -"0" -#endif -"c_variadic_macros\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/feature_tests.cxx b/src/dbtest/CMakeFiles/feature_tests.cxx deleted file mode 100644 index 54f83f04..00000000 --- a/src/dbtest/CMakeFiles/feature_tests.cxx +++ /dev/null @@ -1,405 +0,0 @@ - - const char features[] = {"" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_aggregate_default_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alias_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_alignof\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_attributes\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_attribute_deprecated\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_auto_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_binary_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_contextual_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_decltype\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_decltype_auto\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_decltype_incomplete_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_default_function_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_defaulted_move_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_delegating_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_deleted_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_digit_separators\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_enum_forward_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_explicit_conversions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_extended_friend_declarations\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_extern_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_final\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_func_identifier\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_generalized_initializers\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_generic_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_inheriting_constructors\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_inline_namespaces\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_lambdas\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_lambda_init_captures\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_local_type_template_args\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_long_long_type\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_noexcept\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_nonstatic_member_init\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_nullptr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_override\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_range_for\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_raw_string_literals\n" -"CXX_FEATURE:" -#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_reference_qualified_functions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_relaxed_constexpr\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L -"1" -#else -"0" -#endif -"cxx_return_type_deduction\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_right_angle_brackets\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_rvalue_references\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_sizeof_member\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_static_assert\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_strong_enums\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus -"1" -#else -"0" -#endif -"cxx_template_template_parameters\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_thread_local\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_trailing_return_types\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unicode_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_uniform_initialization\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_unrestricted_unions\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L -"1" -#else -"0" -#endif -"cxx_user_literals\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L -"1" -#else -"0" -#endif -"cxx_variable_templates\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_macros\n" -"CXX_FEATURE:" -#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) -"1" -#else -"0" -#endif -"cxx_variadic_templates\n" - -}; - -int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/src/dbtest/CMakeFiles/progress.marks b/src/dbtest/CMakeFiles/progress.marks deleted file mode 100644 index 0cfbf088..00000000 --- a/src/dbtest/CMakeFiles/progress.marks +++ /dev/null @@ -1 +0,0 @@ -2 diff --git a/src/dbtest/Makefile b/src/dbtest/Makefile deleted file mode 100644 index 05cf8f44..00000000 --- a/src/dbtest/Makefile +++ /dev/null @@ -1,178 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.3 - -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# Allow only one "make -f Makefile2" at a time, but pass parallelism. -.NOTPARALLEL: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/local/bin/cmake - -# The command to remove a file. -RM = /usr/local/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest - -#============================================================================= -# Targets provided globally by CMake. - -# Special rule for the target edit_cache -edit_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." - /usr/local/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : edit_cache - -# Special rule for the target edit_cache -edit_cache/fast: edit_cache - -.PHONY : edit_cache/fast - -# Special rule for the target rebuild_cache -rebuild_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." - /usr/local/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : rebuild_cache - -# Special rule for the target rebuild_cache -rebuild_cache/fast: rebuild_cache - -.PHONY : rebuild_cache/fast - -# The main all target -all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles /data1/farrisli/3TS/src/dbtest/CMakeFiles/progress.marks - $(MAKE) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 -.PHONY : all - -# The main clean target -clean: - $(MAKE) -f CMakeFiles/Makefile2 clean -.PHONY : clean - -# The main clean target -clean/fast: clean - -.PHONY : clean/fast - -# Prepare targets for installation. -preinstall: all - $(MAKE) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall - -# Prepare targets for installation. -preinstall/fast: - $(MAKE) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall/fast - -# clear depends -depend: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -.PHONY : depend - -#============================================================================= -# Target rules for targets named dbtest - -# Build rule for target. -dbtest: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dbtest -.PHONY : dbtest - -# fast build rule for target. -dbtest/fast: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/build -.PHONY : dbtest/fast - -src/db_test.o: src/db_test.cc.o - -.PHONY : src/db_test.o - -# target to build an object file -src/db_test.cc.o: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o -.PHONY : src/db_test.cc.o - -src/db_test.i: src/db_test.cc.i - -.PHONY : src/db_test.i - -# target to preprocess a source file -src/db_test.cc.i: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.i -.PHONY : src/db_test.cc.i - -src/db_test.s: src/db_test.cc.s - -.PHONY : src/db_test.s - -# target to generate assembly for a file -src/db_test.cc.s: - $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.s -.PHONY : src/db_test.cc.s - -# Help Target -help: - @echo "The following are some of the valid targets for this Makefile:" - @echo "... all (the default if no target is provided)" - @echo "... clean" - @echo "... depend" - @echo "... edit_cache" - @echo "... dbtest" - @echo "... rebuild_cache" - @echo "... src/db_test.o" - @echo "... src/db_test.i" - @echo "... src/db_test.s" -.PHONY : help - - - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake b/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake deleted file mode 100644 index b276459f..00000000 --- a/src/dbtest/cmake/Modules/FindLIBCONFIG.cmake +++ /dev/null @@ -1,57 +0,0 @@ -# - Find libconfig -# - This module determines the libconfig library of the system -# The following variables are set if the library found: -# LIBCONFIG_FOUND - If false do nnt try to use libconfig. -# LIBCONFIG_INCLUDE_DIRS - where to find the headfile of library. -# LIBCONFIG_LIBRARY_DIRS - where to find the libconfig library. -# LIBCONFIG_LIBRARIES, the library file name needed to use libconfig. -# LIBCONFIG_LIBRARY - the library needed to use libconfig. -# imported target -# libconfig::libconfig - -if(LIBCONFIG_FOUND) - return() -endif() -if (WIN32) - # windows下使用CONFIG模式调用find_package查找 - find_package(LIBCONFIG CONFIG) -else () - # linux下调用pkg_check_modules 查找 - include(FindPkgConfig) - unset(_verexp) - if(LIBCONFIG_FIND_VERSION) - if(LIBCONFIG_FIND_VERSION_EXACT) - set(_verexp "=${LIBCONFIG_FIND_VERSION}") - else() - set(_verexp ">=${LIBCONFIG_FIND_VERSION}") - endif() - endif() - pkg_check_modules (LIBCONFIG libconfig${_verexp}) -endif() - -# handle the QUIETLY and REQUIRED arguments and set LIBCONFIG_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBCONFIG DEFAULT_MSG LIBCONFIG_LIBRARIES LIBCONFIG_INCLUDE_DIRS) - -if(LIBCONFIG_FOUND) - if(NOT LIBCONFIG_FIND_QUIETLY) - message(STATUS " -I: ${LIBCONFIG_INCLUDE_DIRS}") - message(STATUS " -L: ${LIBCONFIG_LIBRARY_DIRS}") - message(STATUS " -l: ${LIBCONFIG_LIBRARIES}") - endif() - find_library (LIBCONFIG_LIBRARY NAMES ${LIBCONFIG_LIBRARIES} PATHS ${LIBCONFIG_LIBRARY_DIRS}) - - # 创建 imported target - if (NOT TARGET libconfig::libconfig) - add_library(libconfig::libconfig INTERFACE IMPORTED) - set_target_properties(libconfig::libconfig PROPERTIES - INTERFACE_COMPILE_OPTIONS "${LIBCONFIG_CFLAGS}" - INTERFACE_INCLUDE_DIRECTORIES "${LIBCONFIG_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "-L${LIBCONFIG_LIBRARY_DIRS} -l${LIBCONFIG_LIBRARIES }" - ) - if(NOT LIBCONFIG_FIND_QUIETLY) - message(STATUS "IMPORTED TARGET: libconfig::libconfig,link libraies ${_link_libs}") - endif() - endif () -endif(LIBCONFIG_FOUND) diff --git a/src/dbtest/cmake_install.cmake b/src/dbtest/cmake_install.cmake deleted file mode 100644 index 0ba635dd..00000000 --- a/src/dbtest/cmake_install.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# Install script for directory: /data1/farrisli/3TS/src/dbtest - -# Set the install prefix -if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local") -endif() -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Set the install configuration name. -if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) - if(BUILD_TYPE) - string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" - CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") - else() - set(CMAKE_INSTALL_CONFIG_NAME "Debug") - endif() - message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") -endif() - -# Set the component getting installed. -if(NOT CMAKE_INSTALL_COMPONENT) - if(COMPONENT) - message(STATUS "Install component: \"${COMPONENT}\"") - set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") - else() - set(CMAKE_INSTALL_COMPONENT) - endif() -endif() - -# Install shared libraries without execute permission? -if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) - set(CMAKE_INSTALL_SO_NO_EXE "0") -endif() - -if(CMAKE_INSTALL_COMPONENT) - set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") -else() - set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") -endif() - -string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT - "${CMAKE_INSTALL_MANIFEST_FILES}") -file(WRITE "/data1/farrisli/3TS/src/dbtest/${CMAKE_INSTALL_MANIFEST}" - "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/src/dbtest/config/gflags.conf b/src/dbtest/config/gflags.conf deleted file mode 100644 index 4d6a4499..00000000 --- a/src/dbtest/config/gflags.conf +++ /dev/null @@ -1,7 +0,0 @@ --db_type=mysql --host=9.134.218.253 --port=3306 --user=test123 --passwd=Ly.123456 --db_name=test - diff --git a/src/dbtest/include/gflags/gflags.h b/src/dbtest/include/gflags/gflags.h deleted file mode 100644 index 0db38f5c..00000000 --- a/src/dbtest/include/gflags/gflags.h +++ /dev/null @@ -1,573 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// Revamped and reorganized by Craig Silverstein -// -// This is the file that should be included by any file which declares -// or defines a command line flag or wants to parse command line flags -// or print a program usage message (which will include information about -// flags). Executive summary, in the form of an example foo.cc file: -// -// #include "foo.h" // foo.h has a line "DECLARE_int32(start);" -// #include "validators.h" // hypothetical file defining ValidateIsFile() -// -// DEFINE_int32(end, 1000, "The last record to read"); -// -// DEFINE_string(filename, "my_file.txt", "The file to read"); -// // Crash if the specified file does not exist. -// static bool dummy = RegisterFlagValidator(&FLAGS_filename, -// &ValidateIsFile); -// -// DECLARE_bool(verbose); // some other file has a DEFINE_bool(verbose, ...) -// -// void MyFunc() { -// if (FLAGS_verbose) printf("Records %d-%d\n", FLAGS_start, FLAGS_end); -// } -// -// Then, at the command-line: -// ./foo --noverbose --start=5 --end=100 -// -// For more details, see -// doc/gflags.html -// -// --- A note about thread-safety: -// -// We describe many functions in this routine as being thread-hostile, -// thread-compatible, or thread-safe. Here are the meanings we use: -// -// thread-safe: it is safe for multiple threads to call this routine -// (or, when referring to a class, methods of this class) -// concurrently. -// thread-hostile: it is not safe for multiple threads to call this -// routine (or methods of this class) concurrently. In gflags, -// most thread-hostile routines are intended to be called early in, -// or even before, main() -- that is, before threads are spawned. -// thread-compatible: it is safe for multiple threads to read from -// this variable (when applied to variables), or to call const -// methods of this class (when applied to classes), as long as no -// other thread is writing to the variable or calling non-const -// methods of this class. - -#ifndef GFLAGS_GFLAGS_H_ -#define GFLAGS_GFLAGS_H_ - -#include -#include - -#include "gflags_declare.h" // IWYU pragma: export - - -// We always want to export variables defined in user code -#ifndef GFLAGS_DLL_DEFINE_FLAG -# ifdef _MSC_VER -# define GFLAGS_DLL_DEFINE_FLAG __declspec(dllexport) -# else -# define GFLAGS_DLL_DEFINE_FLAG -# endif -#endif - - -namespace GFLAGS_NAMESPACE { - - -// -------------------------------------------------------------------- -// To actually define a flag in a file, use DEFINE_bool, -// DEFINE_string, etc. at the bottom of this file. You may also find -// it useful to register a validator with the flag. This ensures that -// when the flag is parsed from the commandline, or is later set via -// SetCommandLineOption, we call the validation function. It is _not_ -// called when you assign the value to the flag directly using the = operator. -// -// The validation function should return true if the flag value is valid, and -// false otherwise. If the function returns false for the new setting of the -// flag, the flag will retain its current value. If it returns false for the -// default value, ParseCommandLineFlags() will die. -// -// This function is safe to call at global construct time (as in the -// example below). -// -// Example use: -// static bool ValidatePort(const char* flagname, int32 value) { -// if (value > 0 && value < 32768) // value is ok -// return true; -// printf("Invalid value for --%s: %d\n", flagname, (int)value); -// return false; -// } -// DEFINE_int32(port, 0, "What port to listen on"); -// static bool dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort); - -// Returns true if successfully registered, false if not (because the -// first argument doesn't point to a command-line flag, or because a -// validator is already registered for this flag). -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const bool* flag, bool (*validate_fn)(const char*, bool)); -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const int32* flag, bool (*validate_fn)(const char*, int32)); -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const int64* flag, bool (*validate_fn)(const char*, int64)); -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const uint64* flag, bool (*validate_fn)(const char*, uint64)); -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const double* flag, bool (*validate_fn)(const char*, double)); -extern GFLAGS_DLL_DECL bool RegisterFlagValidator(const std::string* flag, bool (*validate_fn)(const char*, const std::string&)); - -// Convenience macro for the registration of a flag validator -#define DEFINE_validator(name, validator) \ - static const bool name##_validator_registered = \ - GFLAGS_NAMESPACE::RegisterFlagValidator(&FLAGS_##name, validator) - - -// -------------------------------------------------------------------- -// These methods are the best way to get access to info about the -// list of commandline flags. Note that these routines are pretty slow. -// GetAllFlags: mostly-complete info about the list, sorted by file. -// ShowUsageWithFlags: pretty-prints the list to stdout (what --help does) -// ShowUsageWithFlagsRestrict: limit to filenames with restrict as a substr -// -// In addition to accessing flags, you can also access argv[0] (the program -// name) and argv (the entire commandline), which we sock away a copy of. -// These variables are static, so you should only set them once. -// -// No need to export this data only structure from DLL, avoiding VS warning 4251. -struct CommandLineFlagInfo { - std::string name; // the name of the flag - std::string type; // the type of the flag: int32, etc - std::string description; // the "help text" associated with the flag - std::string current_value; // the current value, as a string - std::string default_value; // the default value, as a string - std::string filename; // 'cleaned' version of filename holding the flag - bool has_validator_fn; // true if RegisterFlagValidator called on this flag - bool is_default; // true if the flag has the default value and - // has not been set explicitly from the cmdline - // or via SetCommandLineOption - const void* flag_ptr; // pointer to the flag's current value (i.e. FLAGS_foo) -}; - -// Using this inside of a validator is a recipe for a deadlock. -// TODO(user) Fix locking when validators are running, to make it safe to -// call validators during ParseAllFlags. -// Also make sure then to uncomment the corresponding unit test in -// gflags_unittest.sh -extern GFLAGS_DLL_DECL void GetAllFlags(std::vector* OUTPUT); -// These two are actually defined in gflags_reporting.cc. -extern GFLAGS_DLL_DECL void ShowUsageWithFlags(const char *argv0); // what --help does -extern GFLAGS_DLL_DECL void ShowUsageWithFlagsRestrict(const char *argv0, const char *restrict); - -// Create a descriptive string for a flag. -// Goes to some trouble to make pretty line breaks. -extern GFLAGS_DLL_DECL std::string DescribeOneFlag(const CommandLineFlagInfo& flag); - -// Thread-hostile; meant to be called before any threads are spawned. -extern GFLAGS_DLL_DECL void SetArgv(int argc, const char** argv); - -// The following functions are thread-safe as long as SetArgv() is -// only called before any threads start. -extern GFLAGS_DLL_DECL const std::vector& GetArgvs(); -extern GFLAGS_DLL_DECL const char* GetArgv(); // all of argv as a string -extern GFLAGS_DLL_DECL const char* GetArgv0(); // only argv0 -extern GFLAGS_DLL_DECL uint32 GetArgvSum(); // simple checksum of argv -extern GFLAGS_DLL_DECL const char* ProgramInvocationName(); // argv0, or "UNKNOWN" if not set -extern GFLAGS_DLL_DECL const char* ProgramInvocationShortName(); // basename(argv0) - -// ProgramUsage() is thread-safe as long as SetUsageMessage() is only -// called before any threads start. -extern GFLAGS_DLL_DECL const char* ProgramUsage(); // string set by SetUsageMessage() - -// VersionString() is thread-safe as long as SetVersionString() is only -// called before any threads start. -extern GFLAGS_DLL_DECL const char* VersionString(); // string set by SetVersionString() - - - -// -------------------------------------------------------------------- -// Normally you access commandline flags by just saying "if (FLAGS_foo)" -// or whatever, and set them by calling "FLAGS_foo = bar" (or, more -// commonly, via the DEFINE_foo macro). But if you need a bit more -// control, we have programmatic ways to get/set the flags as well. -// These programmatic ways to access flags are thread-safe, but direct -// access is only thread-compatible. - -// Return true iff the flagname was found. -// OUTPUT is set to the flag's value, or unchanged if we return false. -extern GFLAGS_DLL_DECL bool GetCommandLineOption(const char* name, std::string* OUTPUT); - -// Return true iff the flagname was found. OUTPUT is set to the flag's -// CommandLineFlagInfo or unchanged if we return false. -extern GFLAGS_DLL_DECL bool GetCommandLineFlagInfo(const char* name, CommandLineFlagInfo* OUTPUT); - -// Return the CommandLineFlagInfo of the flagname. exit() if name not found. -// Example usage, to check if a flag's value is currently the default value: -// if (GetCommandLineFlagInfoOrDie("foo").is_default) ... -extern GFLAGS_DLL_DECL CommandLineFlagInfo GetCommandLineFlagInfoOrDie(const char* name); - -enum GFLAGS_DLL_DECL FlagSettingMode { - // update the flag's value (can call this multiple times). - SET_FLAGS_VALUE, - // update the flag's value, but *only if* it has not yet been updated - // with SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef". - SET_FLAG_IF_DEFAULT, - // set the flag's default value to this. If the flag has not yet updated - // yet (via SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef") - // change the flag's current value to the new default value as well. - SET_FLAGS_DEFAULT -}; - -// Set a particular flag ("command line option"). Returns a string -// describing the new value that the option has been set to. The -// return value API is not well-specified, so basically just depend on -// it to be empty if the setting failed for some reason -- the name is -// not a valid flag name, or the value is not a valid value -- and -// non-empty else. - -// SetCommandLineOption uses set_mode == SET_FLAGS_VALUE (the common case) -extern GFLAGS_DLL_DECL std::string SetCommandLineOption (const char* name, const char* value); -extern GFLAGS_DLL_DECL std::string SetCommandLineOptionWithMode(const char* name, const char* value, FlagSettingMode set_mode); - - -// -------------------------------------------------------------------- -// Saves the states (value, default value, whether the user has set -// the flag, registered validators, etc) of all flags, and restores -// them when the FlagSaver is destroyed. This is very useful in -// tests, say, when you want to let your tests change the flags, but -// make sure that they get reverted to the original states when your -// test is complete. -// -// Example usage: -// void TestFoo() { -// FlagSaver s1; -// FLAG_foo = false; -// FLAG_bar = "some value"; -// -// // test happens here. You can return at any time -// // without worrying about restoring the FLAG values. -// } -// -// Note: This class is marked with GFLAGS_ATTRIBUTE_UNUSED because all -// the work is done in the constructor and destructor, so in the standard -// usage example above, the compiler would complain that it's an -// unused variable. -// -// This class is thread-safe. However, its destructor writes to -// exactly the set of flags that have changed value during its -// lifetime, so concurrent _direct_ access to those flags -// (i.e. FLAGS_foo instead of {Get,Set}CommandLineOption()) is unsafe. - -class GFLAGS_DLL_DECL FlagSaver { - public: - FlagSaver(); - ~FlagSaver(); - - private: - class FlagSaverImpl* impl_; // we use pimpl here to keep API steady - - FlagSaver(const FlagSaver&); // no copying! - void operator=(const FlagSaver&); -}__attribute((unused)); - -// -------------------------------------------------------------------- -// Some deprecated or hopefully-soon-to-be-deprecated functions. - -// This is often used for logging. TODO(csilvers): figure out a better way -extern GFLAGS_DLL_DECL std::string CommandlineFlagsIntoString(); -// Usually where this is used, a FlagSaver should be used instead. -extern GFLAGS_DLL_DECL -bool ReadFlagsFromString(const std::string& flagfilecontents, - const char* prog_name, - bool errors_are_fatal); // uses SET_FLAGS_VALUE - -// These let you manually implement --flagfile functionality. -// DEPRECATED. -extern GFLAGS_DLL_DECL bool AppendFlagsIntoFile(const std::string& filename, const char* prog_name); -extern GFLAGS_DLL_DECL bool ReadFromFlagsFile(const std::string& filename, const char* prog_name, bool errors_are_fatal); // uses SET_FLAGS_VALUE - - -// -------------------------------------------------------------------- -// Useful routines for initializing flags from the environment. -// In each case, if 'varname' does not exist in the environment -// return defval. If 'varname' does exist but is not valid -// (e.g., not a number for an int32 flag), abort with an error. -// Otherwise, return the value. NOTE: for booleans, for true use -// 't' or 'T' or 'true' or '1', for false 'f' or 'F' or 'false' or '0'. - -extern GFLAGS_DLL_DECL bool BoolFromEnv(const char *varname, bool defval); -extern GFLAGS_DLL_DECL int32 Int32FromEnv(const char *varname, int32 defval); -extern GFLAGS_DLL_DECL int64 Int64FromEnv(const char *varname, int64 defval); -extern GFLAGS_DLL_DECL uint64 Uint64FromEnv(const char *varname, uint64 defval); -extern GFLAGS_DLL_DECL double DoubleFromEnv(const char *varname, double defval); -extern GFLAGS_DLL_DECL const char *StringFromEnv(const char *varname, const char *defval); - - -// -------------------------------------------------------------------- -// The next two functions parse gflags from main(): - -// Set the "usage" message for this program. For example: -// string usage("This program does nothing. Sample usage:\n"); -// usage += argv[0] + " "; -// SetUsageMessage(usage); -// Do not include commandline flags in the usage: we do that for you! -// Thread-hostile; meant to be called before any threads are spawned. -extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage); - -// Sets the version string, which is emitted with --version. -// For instance: SetVersionString("1.3"); -// Thread-hostile; meant to be called before any threads are spawned. -extern GFLAGS_DLL_DECL void SetVersionString(const std::string& version); - - -// Looks for flags in argv and parses them. Rearranges argv to put -// flags first, or removes them entirely if remove_flags is true. -// If a flag is defined more than once in the command line or flag -// file, the last definition is used. Returns the index (into argv) -// of the first non-flag argument. -// See top-of-file for more details on this function. -#ifndef SWIG // In swig, use ParseCommandLineFlagsScript() instead. -extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv, bool remove_flags); -#endif - - -// Calls to ParseCommandLineNonHelpFlags and then to -// HandleCommandLineHelpFlags can be used instead of a call to -// ParseCommandLineFlags during initialization, in order to allow for -// changing default values for some FLAGS (via -// e.g. SetCommandLineOptionWithMode calls) between the time of -// command line parsing and the time of dumping help information for -// the flags as a result of command line parsing. If a flag is -// defined more than once in the command line or flag file, the last -// definition is used. Returns the index (into argv) of the first -// non-flag argument. (If remove_flags is true, will always return 1.) -extern GFLAGS_DLL_DECL uint32 ParseCommandLineNonHelpFlags(int *argc, char*** argv, bool remove_flags); - -// This is actually defined in gflags_reporting.cc. -// This function is misnamed (it also handles --version, etc.), but -// it's too late to change that now. :-( -extern GFLAGS_DLL_DECL void HandleCommandLineHelpFlags(); // in gflags_reporting.cc - -// Allow command line reparsing. Disables the error normally -// generated when an unknown flag is found, since it may be found in a -// later parse. Thread-hostile; meant to be called before any threads -// are spawned. -extern GFLAGS_DLL_DECL void AllowCommandLineReparsing(); - -// Reparse the flags that have not yet been recognized. Only flags -// registered since the last parse will be recognized. Any flag value -// must be provided as part of the argument using "=", not as a -// separate command line argument that follows the flag argument. -// Intended for handling flags from dynamically loaded libraries, -// since their flags are not registered until they are loaded. -extern GFLAGS_DLL_DECL void ReparseCommandLineNonHelpFlags(); - -// Clean up memory allocated by flags. This is only needed to reduce -// the quantity of "potentially leaked" reports emitted by memory -// debugging tools such as valgrind. It is not required for normal -// operation, or for the google perftools heap-checker. It must only -// be called when the process is about to exit, and all threads that -// might access flags are quiescent. Referencing flags after this is -// called will have unexpected consequences. This is not safe to run -// when multiple threads might be running: the function is -// thread-hostile. -extern GFLAGS_DLL_DECL void ShutDownCommandLineFlags(); - - -// -------------------------------------------------------------------- -// Now come the command line flag declaration/definition macros that -// will actually be used. They're kind of hairy. A major reason -// for this is initialization: we want people to be able to access -// variables in global constructors and have that not crash, even if -// their global constructor runs before the global constructor here. -// (Obviously, we can't guarantee the flags will have the correct -// default value in that case, but at least accessing them is safe.) -// The only way to do that is have flags point to a static buffer. -// So we make one, using a union to ensure proper alignment, and -// then use placement-new to actually set up the flag with the -// correct default value. In the same vein, we have to worry about -// flag access in global destructors, so FlagRegisterer has to be -// careful never to destroy the flag-values it constructs. -// -// Note that when we define a flag variable FLAGS_, we also -// preemptively define a junk variable, FLAGS_no. This is to -// cause a link-time error if someone tries to define 2 flags with -// names like "logging" and "nologging". We do this because a bool -// flag FLAG can be set from the command line to true with a "-FLAG" -// argument, and to false with a "-noFLAG" argument, and so this can -// potentially avert confusion. -// -// We also put flags into their own namespace. It is purposefully -// named in an opaque way that people should have trouble typing -// directly. The idea is that DEFINE puts the flag in the weird -// namespace, and DECLARE imports the flag from there into the current -// namespace. The net result is to force people to use DECLARE to get -// access to a flag, rather than saying "extern GFLAGS_DLL_DECL bool FLAGS_whatever;" -// or some such instead. We want this so we can put extra -// functionality (like sanity-checking) in DECLARE if we want, and -// make sure it is picked up everywhere. -// -// We also put the type of the variable in the namespace, so that -// people can't DECLARE_int32 something that they DEFINE_bool'd -// elsewhere. - -class GFLAGS_DLL_DECL FlagRegisterer { - public: - FlagRegisterer(const char* name, const char* type, - const char* help, const char* filename, - void* current_storage, void* defvalue_storage); -}; - -// If your application #defines STRIP_FLAG_HELP to a non-zero value -// before #including this file, we remove the help message from the -// binary file. This can reduce the size of the resulting binary -// somewhat, and may also be useful for security reasons. - -extern GFLAGS_DLL_DECL const char kStrippedFlagHelp[]; - - -} // namespace GFLAGS_NAMESPACE - - -#ifndef SWIG // In swig, ignore the main flag declarations - -#if defined(STRIP_FLAG_HELP) && STRIP_FLAG_HELP > 0 -// Need this construct to avoid the 'defined but not used' warning. -#define MAYBE_STRIPPED_HELP(txt) \ - (false ? (txt) : GFLAGS_NAMESPACE::kStrippedFlagHelp) -#else -#define MAYBE_STRIPPED_HELP(txt) txt -#endif - -// Each command-line flag has two variables associated with it: one -// with the current value, and one with the default value. However, -// we have a third variable, which is where value is assigned; it's a -// constant. This guarantees that FLAG_##value is initialized at -// static initialization time (e.g. before program-start) rather than -// than global construction time (which is after program-start but -// before main), at least when 'value' is a compile-time constant. We -// use a small trick for the "default value" variable, and call it -// FLAGS_no. This serves the second purpose of assuring a -// compile error if someone tries to define a flag named no -// which is illegal (--foo and --nofoo both affect the "foo" flag). -#define DEFINE_VARIABLE(type, shorttype, name, value, help) \ - namespace fL##shorttype { \ - static const type FLAGS_nono##name = value; \ - /* We always want to export defined variables, dll or no */ \ - GFLAGS_DLL_DEFINE_FLAG type FLAGS_##name = FLAGS_nono##name; \ - type FLAGS_no##name = FLAGS_nono##name; \ - static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \ - #name, #type, MAYBE_STRIPPED_HELP(help), __FILE__, \ - &FLAGS_##name, &FLAGS_no##name); \ - } \ - using fL##shorttype::FLAGS_##name - -// For DEFINE_bool, we want to do the extra check that the passed-in -// value is actually a bool, and not a string or something that can be -// coerced to a bool. These declarations (no definition needed!) will -// help us do that, and never evaluate From, which is important. -// We'll use 'sizeof(IsBool(val))' to distinguish. This code requires -// that the compiler have different sizes for bool & double. Since -// this is not guaranteed by the standard, we check it with a -// COMPILE_ASSERT. -namespace fLB { -struct CompileAssert {}; -typedef CompileAssert expected_sizeof_double_neq_sizeof_bool[ - (sizeof(double) != sizeof(bool)) ? 1 : -1]; -template double GFLAGS_DLL_DECL IsBoolFlag(const From& from); -GFLAGS_DLL_DECL bool IsBoolFlag(bool from); -} // namespace fLB - -// Here are the actual DEFINE_*-macros. The respective DECLARE_*-macros -// are in a separate include, gflags_declare.h, for reducing -// the physical transitive size for DECLARE use. -#define DEFINE_bool(name, val, txt) \ - namespace fLB { \ - typedef ::fLB::CompileAssert FLAG_##name##_value_is_not_a_bool[ \ - (sizeof(::fLB::IsBoolFlag(val)) != sizeof(double))? 1: -1]; \ - } \ - DEFINE_VARIABLE(bool, B, name, val, txt) - -#define DEFINE_int32(name, val, txt) \ - DEFINE_VARIABLE(GFLAGS_NAMESPACE::int32, I, \ - name, val, txt) - -#define DEFINE_int64(name, val, txt) \ - DEFINE_VARIABLE(GFLAGS_NAMESPACE::int64, I64, \ - name, val, txt) - -#define DEFINE_uint64(name,val, txt) \ - DEFINE_VARIABLE(GFLAGS_NAMESPACE::uint64, U64, \ - name, val, txt) - -#define DEFINE_double(name, val, txt) \ - DEFINE_VARIABLE(double, D, name, val, txt) - -// Strings are trickier, because they're not a POD, so we can't -// construct them at static-initialization time (instead they get -// constructed at global-constructor time, which is much later). To -// try to avoid crashes in that case, we use a char buffer to store -// the string, which we can static-initialize, and then placement-new -// into it later. It's not perfect, but the best we can do. - -namespace fLS { - -inline clstring* dont_pass0toDEFINE_string(char *stringspot, - const char *value) { - return new(stringspot) clstring(value); -} -inline clstring* dont_pass0toDEFINE_string(char *stringspot, - const clstring &value) { - return new(stringspot) clstring(value); -} -inline clstring* dont_pass0toDEFINE_string(char *stringspot, - int value); -} // namespace fLS - -// We need to define a var named FLAGS_no##name so people don't define -// --string and --nostring. And we need a temporary place to put val -// so we don't have to evaluate it twice. Two great needs that go -// great together! -// The weird 'using' + 'extern' inside the fLS namespace is to work around -// an unknown compiler bug/issue with the gcc 4.2.1 on SUSE 10. See -// http://code.google.com/p/google-gflags/issues/detail?id=20 -#define DEFINE_string(name, val, txt) \ - namespace fLS { \ - using ::fLS::clstring; \ - static union { void* align; char s[sizeof(clstring)]; } s_##name[2]; \ - clstring* const FLAGS_no##name = ::fLS:: \ - dont_pass0toDEFINE_string(s_##name[0].s, \ - val); \ - static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \ - #name, "string", MAYBE_STRIPPED_HELP(txt), __FILE__, \ - s_##name[0].s, new (s_##name[1].s) clstring(*FLAGS_no##name)); \ - extern GFLAGS_DLL_DEFINE_FLAG clstring& FLAGS_##name; \ - using fLS::FLAGS_##name; \ - clstring& FLAGS_##name = *FLAGS_no##name; \ - } \ - using fLS::FLAGS_##name - -#endif // SWIG - - -// Import gflags library symbols into alternative/deprecated namespace(s) -#include "gflags_gflags.h" - - -#endif // GFLAGS_GFLAGS_H_ diff --git a/src/dbtest/include/gflags/gflags_completions.h b/src/dbtest/include/gflags/gflags_completions.h deleted file mode 100644 index f951c1e0..00000000 --- a/src/dbtest/include/gflags/gflags_completions.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// --- - -// -// Implement helpful bash-style command line flag completions -// -// ** Functional API: -// HandleCommandLineCompletions() should be called early during -// program startup, but after command line flag code has been -// initialized, such as the beginning of HandleCommandLineHelpFlags(). -// It checks the value of the flag --tab_completion_word. If this -// flag is empty, nothing happens here. If it contains a string, -// however, then HandleCommandLineCompletions() will hijack the -// process, attempting to identify the intention behind this -// completion. Regardless of the outcome of this deduction, the -// process will be terminated, similar to --helpshort flag -// handling. -// -// ** Overview of Bash completions: -// Bash can be told to programatically determine completions for the -// current 'cursor word'. It does this by (in this case) invoking a -// command with some additional arguments identifying the command -// being executed, the word being completed, and the previous word -// (if any). Bash then expects a sequence of output lines to be -// printed to stdout. If these lines all contain a common prefix -// longer than the cursor word, bash will replace the cursor word -// with that common prefix, and display nothing. If there isn't such -// a common prefix, bash will display the lines in pages using 'more'. -// -// ** Strategy taken for command line completions: -// If we can deduce either the exact flag intended, or a common flag -// prefix, we'll output exactly that. Otherwise, if information -// must be displayed to the user, we'll take the opportunity to add -// some helpful information beyond just the flag name (specifically, -// we'll include the default flag value and as much of the flag's -// description as can fit on a single terminal line width, as specified -// by the flag --tab_completion_columns). Furthermore, we'll try to -// make bash order the output such that the most useful or relevent -// flags are the most likely to be shown at the top. -// -// ** Additional features: -// To assist in finding that one really useful flag, substring matching -// was implemented. Before pressing a to get completion for the -// current word, you can append one or more '?' to the flag to do -// substring matching. Here's the semantics: -// --foo Show me all flags with names prefixed by 'foo' -// --foo? Show me all flags with 'foo' somewhere in the name -// --foo?? Same as prior case, but also search in module -// definition path for 'foo' -// --foo??? Same as prior case, but also search in flag -// descriptions for 'foo' -// Finally, we'll trim the output to a relatively small number of -// flags to keep bash quiet about the verbosity of output. If one -// really wanted to see all possible matches, appending a '+' to the -// search word will force the exhaustive list of matches to be printed. -// -// ** How to have bash accept completions from a binary: -// Bash requires that it be informed about each command that programmatic -// completion should be enabled for. Example addition to a .bashrc -// file would be (your path to gflags_completions.sh file may differ): - -/* -$ complete -o bashdefault -o default -o nospace -C \ - '/home/build/eng/bash/bash_completions.sh --tab_completion_columns $COLUMNS' \ - time env binary_name another_binary [...] -*/ - -// This would allow the following to work: -// $ /path/to/binary_name --vmodule -// Or: -// $ ./bin/path/another_binary --gfs_u -// (etc) -// -// Sadly, it appears that bash gives no easy way to force this behavior for -// all commands. That's where the "time" in the above example comes in. -// If you haven't specifically added a command to the list of completion -// supported commands, you can still get completions by prefixing the -// entire command with "env". -// $ env /some/brand/new/binary --vmod -// Assuming that "binary" is a newly compiled binary, this should still -// produce the expected completion output. - - -#ifndef GFLAGS_COMPLETIONS_H_ -#define GFLAGS_COMPLETIONS_H_ - -namespace google { - -extern void HandleCommandLineCompletions(void); - -} - -#endif // GFLAGS_COMPLETIONS_H_ diff --git a/src/dbtest/include/gflags/gflags_declare.h b/src/dbtest/include/gflags/gflags_declare.h deleted file mode 100644 index 9b85f46c..00000000 --- a/src/dbtest/include/gflags/gflags_declare.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 1999, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// Revamped and reorganized by Craig Silverstein -// -// This is the file that should be included by any file which declares -// command line flag. - -#ifndef GFLAGS_DECLARE_H_ -#define GFLAGS_DECLARE_H_ - - -// --------------------------------------------------------------------------- -// Namespace of gflags library symbols. -#define GFLAGS_NAMESPACE google - -// --------------------------------------------------------------------------- -// Windows DLL import/export. - -// We always want to import the symbols of the gflags library -#ifndef GFLAGS_DLL_DECL -# if 1 && defined(_MSC_VER) -# define GFLAGS_DLL_DECL __declspec(dllimport) -# else -# define GFLAGS_DLL_DECL -# endif -#endif - -// We always want to import variables declared in user code -#ifndef GFLAGS_DLL_DECLARE_FLAG -# ifdef _MSC_VER -# define GFLAGS_DLL_DECLARE_FLAG __declspec(dllimport) -# else -# define GFLAGS_DLL_DECLARE_FLAG -# endif -#endif - -// --------------------------------------------------------------------------- -// Flag types -#include -#if 1 -# include // the normal place uint32_t is defined -#elif 1 -# include // the normal place u_int32_t is defined -#elif 1 -# include // a third place for uint32_t or u_int32_t -#endif - -namespace GFLAGS_NAMESPACE { - -#if 1 // C99 -typedef int32_t int32; -typedef uint32_t uint32; -typedef int64_t int64; -typedef uint64_t uint64; -#elif 0 // BSD -typedef int32_t int32; -typedef u_int32_t uint32; -typedef int64_t int64; -typedef u_int64_t uint64; -#elif 0 // Windows -typedef __int32 int32; -typedef unsigned __int32 uint32; -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else -# error Do not know how to define a 32-bit integer quantity on your system -#endif - -} // namespace GFLAGS_NAMESPACE - - -namespace fLS { - -// The meaning of "string" might be different between now and when the -// macros below get invoked (e.g., if someone is experimenting with -// other string implementations that get defined after this file is -// included). Save the current meaning now and use it in the macros. -typedef std::string clstring; - -} // namespace fLS - - -#define DECLARE_VARIABLE(type, shorttype, name) \ - /* We always want to import declared variables, dll or no */ \ - namespace fL##shorttype { extern GFLAGS_DLL_DECLARE_FLAG type FLAGS_##name; } \ - using fL##shorttype::FLAGS_##name - -#define DECLARE_bool(name) \ - DECLARE_VARIABLE(bool, B, name) - -#define DECLARE_int32(name) \ - DECLARE_VARIABLE(::GFLAGS_NAMESPACE::int32, I, name) - -#define DECLARE_int64(name) \ - DECLARE_VARIABLE(::GFLAGS_NAMESPACE::int64, I64, name) - -#define DECLARE_uint64(name) \ - DECLARE_VARIABLE(::GFLAGS_NAMESPACE::uint64, U64, name) - -#define DECLARE_double(name) \ - DECLARE_VARIABLE(double, D, name) - -#define DECLARE_string(name) \ - /* We always want to import declared variables, dll or no */ \ - namespace fLS { \ - using ::fLS::clstring; \ - extern GFLAGS_DLL_DECLARE_FLAG ::fLS::clstring& FLAGS_##name; \ - } \ - using fLS::FLAGS_##name - - -#endif // GFLAGS_DECLARE_H_ diff --git a/src/dbtest/include/gflags/gflags_gflags.h b/src/dbtest/include/gflags/gflags_gflags.h deleted file mode 100644 index 0c17825d..00000000 --- a/src/dbtest/include/gflags/gflags_gflags.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2014, Andreas Schuh -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ----------------------------------------------------------------------------- -// Imports the gflags library symbols into an alternative/deprecated namespace. - -#ifndef GFLAGS_GFLAGS_H_ -# error The internal header gflags_gflags.h may only be included by gflags.h -#endif - -#ifndef GFLAGS_NS_GFLAGS_H_ -#define GFLAGS_NS_GFLAGS_H_ - - -namespace gflags { - - -using GFLAGS_NAMESPACE::int32; -using GFLAGS_NAMESPACE::uint32; -using GFLAGS_NAMESPACE::int64; -using GFLAGS_NAMESPACE::uint64; - -using GFLAGS_NAMESPACE::RegisterFlagValidator; -using GFLAGS_NAMESPACE::CommandLineFlagInfo; -using GFLAGS_NAMESPACE::GetAllFlags; -using GFLAGS_NAMESPACE::ShowUsageWithFlags; -using GFLAGS_NAMESPACE::ShowUsageWithFlagsRestrict; -using GFLAGS_NAMESPACE::DescribeOneFlag; -using GFLAGS_NAMESPACE::SetArgv; -using GFLAGS_NAMESPACE::GetArgvs; -using GFLAGS_NAMESPACE::GetArgv; -using GFLAGS_NAMESPACE::GetArgv0; -using GFLAGS_NAMESPACE::GetArgvSum; -using GFLAGS_NAMESPACE::ProgramInvocationName; -using GFLAGS_NAMESPACE::ProgramInvocationShortName; -using GFLAGS_NAMESPACE::ProgramUsage; -using GFLAGS_NAMESPACE::VersionString; -using GFLAGS_NAMESPACE::GetCommandLineOption; -using GFLAGS_NAMESPACE::GetCommandLineFlagInfo; -using GFLAGS_NAMESPACE::GetCommandLineFlagInfoOrDie; -using GFLAGS_NAMESPACE::FlagSettingMode; -using GFLAGS_NAMESPACE::SET_FLAGS_VALUE; -using GFLAGS_NAMESPACE::SET_FLAG_IF_DEFAULT; -using GFLAGS_NAMESPACE::SET_FLAGS_DEFAULT; -using GFLAGS_NAMESPACE::SetCommandLineOption; -using GFLAGS_NAMESPACE::SetCommandLineOptionWithMode; -using GFLAGS_NAMESPACE::FlagSaver; -using GFLAGS_NAMESPACE::CommandlineFlagsIntoString; -using GFLAGS_NAMESPACE::ReadFlagsFromString; -using GFLAGS_NAMESPACE::AppendFlagsIntoFile; -using GFLAGS_NAMESPACE::ReadFromFlagsFile; -using GFLAGS_NAMESPACE::BoolFromEnv; -using GFLAGS_NAMESPACE::Int32FromEnv; -using GFLAGS_NAMESPACE::Int64FromEnv; -using GFLAGS_NAMESPACE::Uint64FromEnv; -using GFLAGS_NAMESPACE::DoubleFromEnv; -using GFLAGS_NAMESPACE::StringFromEnv; -using GFLAGS_NAMESPACE::SetUsageMessage; -using GFLAGS_NAMESPACE::SetVersionString; -using GFLAGS_NAMESPACE::ParseCommandLineNonHelpFlags; -using GFLAGS_NAMESPACE::HandleCommandLineHelpFlags; -using GFLAGS_NAMESPACE::AllowCommandLineReparsing; -using GFLAGS_NAMESPACE::ReparseCommandLineNonHelpFlags; -using GFLAGS_NAMESPACE::ShutDownCommandLineFlags; -using GFLAGS_NAMESPACE::FlagRegisterer; - -#ifndef SWIG -using GFLAGS_NAMESPACE::ParseCommandLineFlags; -#endif - - -} // namespace gflags - - -#endif // GFLAGS_NS_GFLAGS_H_ diff --git a/src/dbtest/include/libconfig.h++ b/src/dbtest/include/libconfig.h++ deleted file mode 100644 index a43672c9..00000000 --- a/src/dbtest/include/libconfig.h++ +++ /dev/null @@ -1,540 +0,0 @@ -/* ---------------------------------------------------------------------------- - libconfig - A library for processing structured configuration files - Copyright (C) 2005-2014 Mark A Lindner - - This file is part of libconfig. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - as published by the Free Software Foundation; either version 2.1 of - the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, see - . - ---------------------------------------------------------------------------- -*/ - -#ifndef __libconfig_hpp -#define __libconfig_hpp - -#include -#include -#include - -#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -#if defined(LIBCONFIGXX_STATIC) -#define LIBCONFIGXX_API -#elif defined(LIBCONFIGXX_EXPORTS) -#define LIBCONFIGXX_API __declspec(dllexport) -#else /* ! LIBCONFIGXX_EXPORTS */ -#define LIBCONFIGXX_API __declspec(dllimport) -#endif /* LIBCONFIGXX_STATIC */ -#else /* ! WIN32 */ -#define LIBCONFIGXX_API -#endif /* WIN32 */ - -#define LIBCONFIGXX_VER_MAJOR 1 -#define LIBCONFIGXX_VER_MINOR 5 -#define LIBCONFIGXX_VER_REVISION 0 - -struct config_t; // fwd decl -struct config_setting_t; // fwd decl - -namespace libconfig { - -class LIBCONFIGXX_API ConfigException : public std::exception { }; - -class Setting; // fwd decl -class SettingIterator; -class SettingConstIterator; - -class LIBCONFIGXX_API SettingException : public ConfigException -{ - public: - - SettingException(const Setting &setting); - SettingException(const Setting &setting, int idx); - SettingException(const Setting &setting, const char *name); - SettingException(const char *path); - - SettingException(const SettingException &other); - SettingException& operator=(const SettingException &other); - - virtual ~SettingException() throw(); - - const char *getPath() const; - - virtual const char *what() const throw(); - - private: - - char *_path; -}; - -class LIBCONFIGXX_API SettingTypeException : public SettingException -{ - public: - - SettingTypeException(const Setting &setting); - SettingTypeException(const Setting &setting, int idx); - SettingTypeException(const Setting &setting, const char *name); - - virtual const char *what() const throw(); -}; - -class LIBCONFIGXX_API SettingNotFoundException : public SettingException -{ - public: - - SettingNotFoundException(const char *path); - SettingNotFoundException(const Setting &setting, int idx); - SettingNotFoundException(const Setting &setting, const char *name); - - virtual const char *what() const throw(); -}; - -class LIBCONFIGXX_API SettingNameException : public SettingException -{ - public: - - SettingNameException(const Setting &setting, const char *name); - - virtual const char *what() const throw(); -}; - -class LIBCONFIGXX_API FileIOException : public ConfigException -{ - public: - - virtual const char *what() const throw(); -}; - -class LIBCONFIGXX_API ParseException : public ConfigException -{ - public: - - ParseException(const char *file, int line, const char *error); - - ParseException(const ParseException &other); - - virtual ~ParseException() throw(); - - inline const char *getFile() const - { return(_file); } - - inline int getLine() const - { return(_line); } - - inline const char *getError() const - { return(_error); } - - virtual const char *what() const throw(); - - private: - - const char *_file; - int _line; - const char *_error; -}; - -class LIBCONFIGXX_API Setting -{ - friend class Config; - - public: - - enum Type - { - TypeNone = 0, - // scalar types - TypeInt, - TypeInt64, - TypeFloat, - TypeString, - TypeBoolean, - // aggregate types - TypeGroup, - TypeArray, - TypeList - }; - - enum Format - { - FormatDefault = 0, - FormatHex = 1 - }; - - enum Option - { - OptionNone = 0, - OptionAutoConvert = 0x01, - OptionSemicolonSeparators = 0x02, - OptionColonAssignmentForGroups = 0x04, - OptionColonAssignmentForNonGroups = 0x08, - OptionOpenBraceOnSeparateLine = 0x10 - }; - - typedef SettingIterator iterator; - typedef SettingConstIterator const_iterator; - - public: - - virtual ~Setting(); - - inline Type getType() const { return(_type); } - - inline Format getFormat() const { return(_format); } - void setFormat(Format format); - - operator bool() const; - operator int() const; - operator unsigned int() const; - operator long() const; - operator unsigned long() const; - operator long long() const; - operator unsigned long long() const; - operator double() const; - operator float() const; - operator const char *() const; - operator std::string() const; - - inline const char *c_str() const - { return operator const char *(); } - - Setting & operator=(bool value); - Setting & operator=(int value); - Setting & operator=(long value); - Setting & operator=(const long long &value); - Setting & operator=(const double &value); - Setting & operator=(float value); - Setting & operator=(const char *value); - Setting & operator=(const std::string &value); - - Setting & lookup(const char *path) const; - inline Setting & lookup(const std::string &path) const - { return(lookup(path.c_str())); } - - Setting & operator[](const char *name) const; - Setting & operator[](int index) const; - - bool lookupValue(const char *name, bool &value) const; - bool lookupValue(const char *name, int &value) const; - bool lookupValue(const char *name, unsigned int &value) const; - bool lookupValue(const char *name, long long &value) const; - bool lookupValue(const char *name, unsigned long long &value) const; - bool lookupValue(const char *name, double &value) const; - bool lookupValue(const char *name, float &value) const; - bool lookupValue(const char *name, const char *&value) const; - bool lookupValue(const char *name, std::string &value) const; - - inline bool lookupValue(const std::string &name, bool &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, int &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, unsigned int &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, long long &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, - unsigned long long &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, double &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, float &value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, const char *&value) const - { return(lookupValue(name.c_str(), value)); } - - inline bool lookupValue(const std::string &name, std::string &value) const - { return(lookupValue(name.c_str(), value)); } - - void remove(const char *name); - - inline void remove(const std::string &name) - { remove(name.c_str()); } - - void remove(unsigned int idx); - - Setting & add(const char *name, Type type); - - inline Setting & add(const std::string &name, Type type) - { return(add(name.c_str(), type)); } - - Setting & add(Type type); - - bool exists(const char *name) const; - - inline bool exists(const std::string &name) const - { return(exists(name.c_str())); } - - int getLength() const; - const char *getName() const; - std::string getPath() const; - int getIndex() const; - - const Setting & getParent() const; - Setting & getParent(); - - bool isRoot() const; - - inline bool isGroup() const - { return(_type == TypeGroup); } - - inline bool isArray() const - { return(_type == TypeArray); } - - inline bool isList() const - { return(_type == TypeList); } - - inline bool isAggregate() const - { return(_type >= TypeGroup); } - - inline bool isScalar() const - { return((_type > TypeNone) && (_type < TypeGroup)); } - - inline bool isNumber() const - { - return((_type == TypeInt) || (_type == TypeInt64) || (_type == TypeFloat)); - } - - unsigned int getSourceLine() const; - const char *getSourceFile() const; - - iterator begin(); - iterator end(); - - const_iterator begin() const; - const_iterator end() const; - - private: - - config_setting_t *_setting; - Type _type; - Format _format; - - Setting(config_setting_t *setting); - - void assertType(Type type) const; - static Setting & wrapSetting(config_setting_t *setting); - - Setting(const Setting& other); // not supported - Setting& operator=(const Setting& other); // not supported -}; - - -class LIBCONFIGXX_API SettingIterator -{ - public: - - SettingIterator(Setting &setting, bool endIterator = false); - SettingIterator(const SettingIterator &other); - SettingIterator& operator=(const SettingIterator &other); - - // Equality comparison. - inline bool operator==(SettingIterator const &other) const - { return((_setting == other._setting) && (_idx == other._idx)); } - - inline bool operator!=(SettingIterator const &other) const - { return(!operator==(other)); } - - bool operator<(SettingIterator const &other) const; - - // Dereference operators. - inline Setting & operator*() - { return((*_setting)[_idx]); } - - inline Setting * operator->() - { return(&(*_setting)[_idx]); } - - inline const Setting & operator*() const - { return(*_setting)[_idx]; } - inline const Setting * operator->() const - { return(&(*_setting)[_idx]); } - - // Increment and decrement operators. - SettingIterator & operator++(); - SettingIterator operator++(int); - - SettingIterator & operator--(); - SettingIterator operator--(int); - - // Arithmetic operators. - SettingIterator operator+(int offset) const; - SettingIterator & operator+=(int offset); - - SettingIterator operator-(int offset) const; - SettingIterator & operator-=(int offset); - - int operator-(const SettingIterator &other) const; - - private: - - Setting *_setting; - - int _count; - int _idx; -}; - -SettingIterator operator+(int offset, const SettingIterator &si); - -class LIBCONFIGXX_API SettingConstIterator -{ - public: - - SettingConstIterator(const Setting &setting, bool endIterator = false); - SettingConstIterator(const SettingConstIterator &rhs); - SettingConstIterator& operator=(const SettingConstIterator &rhs); - - // Equality comparison. - bool operator==(SettingConstIterator const &other) const - { return((_setting == other._setting) && (_idx == other._idx)); } - - inline bool operator!=(SettingConstIterator const &other) const - { return(!operator==(other)); } - - // Dereference operators. - inline Setting const & operator*() - { return((*_setting)[_idx]); } - inline Setting const * operator->() - { return(&(*_setting)[_idx]); } - - inline const Setting& operator*() const - { return((*_setting)[_idx]); } - inline const Setting * operator->() const - { return(&(*_setting)[_idx]); } - - // Increment and decrement operators. - SettingConstIterator & operator++(); - SettingConstIterator operator++(int); - - SettingConstIterator & operator--(); - SettingConstIterator operator--(int); - - // Arithmetic operators. - SettingConstIterator operator+(int offset) const; - SettingConstIterator & operator+=(int offset); - - SettingConstIterator operator-(int offset) const; - SettingConstIterator & operator-=(int offset); - - int operator-(const SettingConstIterator &other) const; - - private: - - const Setting *_setting; - - int _count; - int _idx; -}; - -SettingConstIterator operator+(int offset, const SettingConstIterator &si); - -class LIBCONFIGXX_API Config -{ - public: - - Config(); - virtual ~Config(); - - void setOptions(int options); - int getOptions() const; - - void setAutoConvert(bool flag); - bool getAutoConvert() const; - - void setDefaultFormat(Setting::Format format); - inline Setting::Format getDefaultFormat() const - { return(_defaultFormat); } - - void setTabWidth(unsigned short width); - unsigned short getTabWidth() const; - - void setIncludeDir(const char *includeDir); - const char *getIncludeDir() const; - - void read(FILE *stream); - void write(FILE *stream) const; - - void readString(const char *str); - inline void readString(const std::string &str) - { return(readString(str.c_str())); } - - void readFile(const char *filename); - void writeFile(const char *filename); - - Setting & lookup(const char *path) const; - inline Setting & lookup(const std::string &path) const - { return(lookup(path.c_str())); } - - bool exists(const char *path) const; - inline bool exists(const std::string &path) const - { return(exists(path.c_str())); } - - bool lookupValue(const char *path, bool &value) const; - bool lookupValue(const char *path, int &value) const; - bool lookupValue(const char *path, unsigned int &value) const; - bool lookupValue(const char *path, long long &value) const; - bool lookupValue(const char *path, unsigned long long &value) const; - bool lookupValue(const char *path, double &value) const; - bool lookupValue(const char *path, float &value) const; - bool lookupValue(const char *path, const char *&value) const; - bool lookupValue(const char *path, std::string &value) const; - - inline bool lookupValue(const std::string &path, bool &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, int &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, unsigned int &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, long long &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, - unsigned long long &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, double &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, float &value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, const char *&value) const - { return(lookupValue(path.c_str(), value)); } - - inline bool lookupValue(const std::string &path, std::string &value) const - { return(lookupValue(path.c_str(), value)); } - - Setting & getRoot() const; - - private: - - static void ConfigDestructor(void *arg); - void handleError() const; - - config_t *_config; - Setting::Format _defaultFormat; - - Config(const Config& other); // not supported - Config& operator=(const Config& other); // not supported -}; - -} // namespace libconfig - -#endif // __libconfig_hpp diff --git a/src/dbtest/src/db_test.cc b/src/dbtest/src/db_test.cc deleted file mode 100644 index 2dea3d93..00000000 --- a/src/dbtest/src/db_test.cc +++ /dev/null @@ -1,136 +0,0 @@ -#include "db_test.h" -#include "gflags/gflags.h" -#include -#include -#include -#include - - -DEFINE_string(db_type, "mysql", "database type, include mysql, oracle, sql server"); -DEFINE_string(host, "", "database host ip, such as x.x.x.x"); -DEFINE_string(port, "", "database port, such as 3306"); -DEFINE_string(user, "", "username"); -DEFINE_string(passwd, "", "password"); -DEFINE_string(db_name, "test", "create database name"); - -//std::unique_ptr get_db_connector(const std::string& host, -// const std::string& port, -// const std::string& user, -// const std::string& passwd, -// const DBType& db_type) { -// return NULL; -//} - -std::pair SQLReader::get_txn_id_and_sql(std::string line) { - std::pair txn_id_and_sql; - const auto index = line.find_first_of(" "); - if (index > 0) { - txn_id_and_sql.first = line.substr(0, index); - txn_id_and_sql.second = line.substr(index + 1); - } else { - throw "read txn_sql failed, please check format of test file. line:" + line; - } - return txn_id_and_sql; -} - -TestCaseType SQLReader::get_test_case_type_by_test_file(std::string& test_file) { - if (test_file.find("dirty-read")) { - return TestCaseType::DirtyRead; - } else { - //throw "unsupported test type"; - std::cerr << "unsupported test type" << std::endl; - return TestCaseType::Unsupported; - } -} - -TestSequence SQLReader::get_one_test_sequence_from_file(std::string& test_file) { - std::ifstream test_stream(test_file); - TestCaseType test_case_type = SQLReader::get_test_case_type_by_test_file(test_file); - std::string line; - TestSequence test_sequence(test_case_type); - if (test_stream) { - while (getline(test_stream, line)) { - std::pair txn_id_and_sql = SQLReader::get_txn_id_and_sql(line); - TxnSQL txn_sql(txn_id_and_sql.second, txn_id_and_sql.first, test_case_type); - test_sequence.add_txn_sql(txn_sql); - } - } else { - //throw "test file not found"; - std::cerr << "test file not found" << std::endl; - } - std::vector txn_sql_list = test_sequence.get_txn_sql_list(); - TxnSQL txn_sql = txn_sql_list[0]; - std::cout << txn_sql.get_txn_id() << std::endl; - std::cout << txn_sql.get_sql() << std::endl; - return test_sequence; -} - -void SQLReader::init_test_sequence_list(std::string& test_path) { - std::ifstream do_test_stream("./do_test_list.txt"); - std::string test_case; - if (do_test_stream) { - while (getline(do_test_stream, test_case)) { - std::string test_file_name = test_case + ".txt"; - std::string test_file = test_path + "/" + test_file_name; - TestSequence test_sequence = SQLReader::get_one_test_sequence_from_file(test_file); - SQLReader::add_test_sequence(test_sequence); - } - } else { - //throw "do_test_list.txt not found"; - std::cerr << "do_test_list.txt not found" << std::endl; - } -} - -//MYSQLConnector::execute_read_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { - -//} -void MYSQLConnector::set_auto_commit() { -} - -void MYSQLConnector::begin() { -} - -void MYSQLConnector::rollback() { -} - -void MYSQLConnector::commit() { -} - -void MYSQLConnector::execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) { - sql::Statement* stmt = MYSQLConnector::stmt_pool_[conn_id]; - sql::ResultSet *res; - res = stmt->executeQuery(sql); - uint32_t index = 0; - while (res->next()) { - std::cout << res->getString(index) << std::endl; - index++; - } -} - -void MYSQLConnector::close_stmt() { -} - -void MYSQLConnector::close_conn() { -} - -int main(int argc, char* argv[]) { - google::ParseCommandLineFlags(&argc, &argv, true); - - SQLReader sql_reader; - std::string test_path_base = "t/"; - std::string test_path = test_path_base + "mysql"; - sql_reader.init_test_sequence_list(test_path); - std::vector test_sequence_list = sql_reader.SQLReader::get_test_sequence_list(); - for (auto &test_sequence : test_sequence_list) { - std::vector txn_sql_list = test_sequence.get_txn_sql_list(); - for (auto &txn_sql : txn_sql_list) { - std::cout << txn_sql.get_sql() << std::endl; - } - } - - MYSQLConnector mysql_connector(FLAGS_host, FLAGS_port, FLAGS_user, FLAGS_passwd, FLAGS_db_name, 1); - TestResultSet test_rs; - mysql_connector.execute_sql("select * from sbtest1", test_rs, 0); - - return 0; -} diff --git a/src/dbtest/src/db_test.h b/src/dbtest/src/db_test.h deleted file mode 100644 index 88753b2f..00000000 --- a/src/dbtest/src/db_test.h +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -enum class ResultType { - RollBack, - Avaid, - Exception -}; - -enum class TestCaseType { - Unsupported, - DirtyRead, - UnrepeatableRead, - PhantomRead, - DirtyWrite, - LostUpdate, - MiddleRead, - BlackWhite, - IntersectingData, - OverdraftProtection, - PrimaryColors, - ReadWritePartialOrder, - ReadPartialOrder, - Serrasoid, - Step, - DoubleWriteSkew, - PredicateSawtooth, - ReadOnlyTransactionAnomaly, - CausalityViolationAnomaly, - CrossPhenomenon, - CrossPhantom, - UnnamedAnomaly, - HalfPredicatesReadPartialOrder, - TotalPredicatesReadPartialOrderSame, - TotalPredicatesReadPartialOrderDifferent, - HalfPredicatesWritePartialOrder, - TotalPredicatesWritePartialOrderSame, - TotalPredicatesWritePartialOrderDifferent -}; - -// result set -class ReadResultSet { -private: - std::vector>> read_rs_; -public: - std::vector>> get_rs() {return read_rs_;}; -}; - -class TxnResultSet { -private: - bool is_commit_; - bool is_timeout_; -public: - bool is_commit() {return is_commit_;}; - bool is_timeout() {return is_timeout_;}; - void update_commit_status(bool commit) {is_commit_ = commit;}; - void update_timeout_status(bool timeout) {is_timeout_ = timeout;}; -}; - -class TestResultSet { -private: - TestCaseType test_case_type_; - std::vector txn_result_set_list_; - // key:sql_id value:[[read set1], [read set2], ...] - std::unordered_map> read_sql_result_set_; - ResultType result_type_; -public: - TestCaseType get_test_case_type() {return test_case_type_;}; - std::vector get_txn_result_set_list() {return txn_result_set_list_;}; - std::unordered_map> get_read_sql_result_set() {return read_sql_result_set_;}; - bool is_expected_result(); - ResultType get_result_type() {return result_type_;}; - void set_result_type(ResultType result_type) {result_type_ = result_type;}; -}; - -// The sql with txn_id in test case -class TxnSQL { -private: - std::string sql_; - std::string txn_id_; - TestCaseType test_case_type_; -public: - TxnSQL(std::string sql, std::string txn_id, TestCaseType test_case_id) { - sql_ = sql; - txn_id_ = txn_id; - test_case_type_ = test_case_id; - }; - std::string get_sql() {return sql_;}; - std::string get_txn_id() {return txn_id_;}; - TestCaseType get_test_case_type() {return test_case_type_;}; -}; -// TestSequence->exception test case, include a series of TxnSQL -class TestSequence { -private: - TestCaseType test_case_type_; - std::vector txn_sql_list_; -public: - TestSequence(TestCaseType test_case_type) { - test_case_type_ = test_case_type; - }; - void add_txn_sql(TxnSQL txn_sql) {txn_sql_list_.push_back(txn_sql);}; - std::vector get_txn_sql_list() {return txn_sql_list_;}; - TestCaseType get_test_case_type() {return test_case_type_;}; -}; - -//read and parse sql from file -class SQLReader { -private: - std::vector test_sequence_list_; - std::vector test_result_list_; -public: - void init_test_sequence_list(std::string& test_path); - void init_test_result_list(std::string& result_path); - - void add_test_sequence(TestSequence test_sequence) { - test_sequence_list_.push_back(test_sequence); - }; - void add_test_result(TestResultSet test_case_expected_result) { - test_result_list_.push_back(test_case_expected_result); - }; - - TestSequence get_one_test_sequence_from_file(std::string& test_file); - TestResultSet get_one_test_result_from_file(std::string& result_path); - - TestCaseType get_test_case_type_by_test_file(std::string& test_file); - - std::pair get_txn_id_and_sql(std::string line); - - std::vector get_test_sequence_list() {return test_sequence_list_;}; - std::vector get_test_result_list() {return test_result_list_;}; -}; - -//db connector -class DBConnectorBase { -public: - virtual void set_auto_commit() = 0; - virtual void begin() = 0; - virtual void rollback() = 0; - virtual void commit() = 0; - virtual void execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) = 0; - virtual void close_stmt() = 0; - virtual void close_conn() = 0; - virtual ~DBConnectorBase() {}; -}; - -enum class DBType { - MYSQL, - ORACLE -}; - -class MYSQLConnector : public DBConnectorBase { -private: - //std::vector> conn_pool_; - std::vector conn_pool_; - std::vector stmt_pool_; -public: - MYSQLConnector(const std::string& host, const std::string port, const std::string& user, const std::string& passwd, const std::string& db_name, int conn_pool_size) { - sql::mysql::MySQL_Driver *driver = NULL; - driver = sql::mysql::get_mysql_driver_instance(); - for (int i = 0; i < conn_pool_size; i++) { - //std::unique_ptr conn = NULL; - sql::Connection* conn = NULL; - sql::Statement* stmt = NULL; - //std::unique_ptr stmt = NULL; - if (driver == NULL) { - std::cout << "driver is null" << std::endl; - } - std::string url_base = "tcp://"; - std::string url = url_base + host + ":" + port; - conn = driver->connect(url, user, passwd); - if (conn == NULL) { - std::cout << "conn is null" << std::endl; - } - stmt = conn->createStatement(); - conn_pool_.push_back(conn); - stmt_pool_.push_back(stmt); - std::cout << "connect suceess" << std::endl; - } - stmt_pool_[0]->executeQuery("create database if not exists" + db_name); - }; - virtual void set_auto_commit() override; - virtual void begin() override; - virtual void rollback() override; - virtual void commit() override; - virtual void execute_sql(const std::string& sql, TestResultSet& test_rs, int conn_id) override; - virtual void close_stmt() override; - virtual void close_conn() override; - virtual ~MYSQLConnector() { - std::cout << "deconstruct" << std::endl; - }; -}; From 0f54745cd5be097eab12d5621b8a8a83866af4aa Mon Sep 17 00:00:00 2001 From: fishheader <920836562@qq.com> Date: Wed, 27 Jan 2021 16:31:09 +0800 Subject: [PATCH 07/81] Update .gitignore --- .../3.3.2/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 20784 bytes .../3.3.2/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 20800 bytes .../3.3.2/CompilerIdC/CMakeCCompilerId.c | 508 ++++++++++++++++ src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out | Bin 0 -> 20880 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 ++++++++++++++++ .../CMakeFiles/3.3.2/CompilerIdCXX/a.out | Bin 0 -> 20888 bytes .../CMakeFiles/3ts_dbtest.dir/build.make | 114 ++++ .../CMakeFiles/3ts_dbtest.dir/depend.make | 2 + .../CMakeFiles/3ts_dbtest.dir/flags.make | 8 + .../CMakeFiles/3ts_dbtest.dir/progress.make | 3 + src/dbtest/CMakeFiles/CMakeOutput.log | 548 ++++++++++++++++++ src/dbtest/CMakeFiles/Makefile2 | 108 ++++ src/dbtest/CMakeFiles/Progress/1 | 1 + src/dbtest/CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/dbtest.dir/CXX.includecache | 58 ++ src/dbtest/CMakeFiles/dbtest.dir/build.make | 114 ++++ .../CMakeFiles/dbtest.dir/depend.internal | 9 + src/dbtest/CMakeFiles/dbtest.dir/depend.make | 9 + src/dbtest/CMakeFiles/dbtest.dir/flags.make | 8 + .../CMakeFiles/dbtest.dir/progress.make | 3 + .../CMakeFiles/dbtest.dir/src/db_test.cc.gcda | Bin 0 -> 28484 bytes .../CMakeFiles/dbtest.dir/src/db_test.cc.gcno | Bin 0 -> 281892 bytes .../dbtest_core_static.dir/CXX.includecache | 34 ++ .../dbtest_core_static.dir/build.make | 114 ++++ .../dbtest_core_static.dir/depend.internal | 7 + .../dbtest_core_static.dir/depend.make | 7 + .../dbtest_core_static.dir/flags.make | 8 + .../dbtest_core_static.dir/progress.make | 3 + .../src/db_test.cc.gcno | Bin 0 -> 1260 bytes src/dbtest/CMakeFiles/feature_tests.bin | Bin 0 -> 20744 bytes src/dbtest/CMakeFiles/feature_tests.c | 34 ++ src/dbtest/CMakeFiles/feature_tests.cxx | 405 +++++++++++++ src/dbtest/CMakeFiles/progress.marks | 1 + src/dbtest/config/gflags.conf | 5 + src/dbtest/dbtest | Bin 0 -> 798408 bytes src/dbtest/src/db_test.cc | 118 ++++ src/dbtest/src/db_test.h | 172 ++++++ src/dbtest/src/odbc | Bin 0 -> 43569 bytes src/dbtest/src/odbc.cc | 66 +++ 39 files changed, 2966 insertions(+) create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin create mode 100755 src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_CXX.bin create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out create mode 100644 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/build.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/CMakeOutput.log create mode 100644 src/dbtest/CMakeFiles/Makefile2 create mode 100644 src/dbtest/CMakeFiles/Progress/1 create mode 100644 src/dbtest/CMakeFiles/cmake.check_cache create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/build.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda create mode 100644 src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/CXX.includecache create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/build.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.internal create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/depend.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/flags.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/progress.make create mode 100644 src/dbtest/CMakeFiles/dbtest_core_static.dir/src/db_test.cc.gcno create mode 100755 src/dbtest/CMakeFiles/feature_tests.bin create mode 100644 src/dbtest/CMakeFiles/feature_tests.c create mode 100644 src/dbtest/CMakeFiles/feature_tests.cxx create mode 100644 src/dbtest/CMakeFiles/progress.marks create mode 100644 src/dbtest/config/gflags.conf create mode 100755 src/dbtest/dbtest create mode 100644 src/dbtest/src/db_test.cc create mode 100644 src/dbtest/src/db_test.h create mode 100755 src/dbtest/src/odbc create mode 100644 src/dbtest/src/odbc.cc diff --git a/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin b/src/dbtest/CMakeFiles/3.3.2/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..b01e72d7cefa69326618a19c0a3f1407599ccd38 GIT binary patch literal 20784 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 00000000..444e4093 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,508 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} +#endif diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..df37a0ba458edea0f27a40f4181672bcb68fb975 GIT binary patch literal 20880 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 ar>Ws3lgdr9c$@m^KQtsH8axV~B>NYm*C2ra literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..721698c5 --- /dev/null +++ b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,498 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} diff --git a/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out b/src/dbtest/CMakeFiles/3.3.2/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..f0380648c5053dc778459644ff0b04275b5e1716 GIT binary patch literal 20888 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 CMakeFiles/3ts_dbtest.dir/src/db_test.cc.i + +CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/3ts_dbtest.dir/src/db_test.cc.s + +CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires: + +.PHONY : CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires + +CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides.build +.PHONY : CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides + +CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o + + +# Object files for target 3ts_dbtest +3ts_dbtest_OBJECTS = \ +"CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o" + +# External object files for target 3ts_dbtest +3ts_dbtest_EXTERNAL_OBJECTS = + +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/build.make +3ts_dbtest: /usr/local/lib/libgflags.so.2.2.2 +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable 3ts_dbtest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/3ts_dbtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/3ts_dbtest.dir/build: 3ts_dbtest + +.PHONY : CMakeFiles/3ts_dbtest.dir/build + +CMakeFiles/3ts_dbtest.dir/requires: CMakeFiles/3ts_dbtest.dir/src/db_test.cc.o.requires + +.PHONY : CMakeFiles/3ts_dbtest.dir/requires + +CMakeFiles/3ts_dbtest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/3ts_dbtest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/3ts_dbtest.dir/clean + +CMakeFiles/3ts_dbtest.dir/depend: + cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/3ts_dbtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/3ts_dbtest.dir/depend + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make new file mode 100644 index 00000000..ce418f73 --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for 3ts_dbtest. +# This may be replaced when dependencies are built. diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make new file mode 100644 index 00000000..a72c49ae --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make new file mode 100644 index 00000000..abadeb0c --- /dev/null +++ b/src/dbtest/CMakeFiles/3ts_dbtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/src/dbtest/CMakeFiles/CMakeOutput.log b/src/dbtest/CMakeFiles/CMakeOutput.log new file mode 100644 index 00000000..cbaa8ef4 --- /dev/null +++ b/src/dbtest/CMakeFiles/CMakeOutput.log @@ -0,0 +1,548 @@ +The system is: Linux - 5.4.32-1-tlinux4-0001 - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/data1/farrisli/3TS-DBTest/CMakeFiles/3.3.2/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: -fPIC +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/data1/farrisli/3TS-DBTest/CMakeFiles/3.3.2/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_19748/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_19748.dir/build.make CMakeFiles/cmTC_19748.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_19748.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_19748.dir/testCCompiler.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_19748 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_19748.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_19748.dir/testCCompiler.c.o -o cmTC_19748 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_cec3a/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_cec3a.dir/build.make CMakeFiles/cmTC_cec3a.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_cec3a +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cec3a.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -o cmTC_cec3a -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux +Thread model: posix +gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) +COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64' + /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRVGoVg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_cec3a /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64' +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_cec3a/fast"] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_cec3a.dir/build.make CMakeFiles/cmTC_cec3a.dir/build] + ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.3/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_cec3a] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cec3a.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -o cmTC_cec3a -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cec3a' '-rdynamic' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRVGoVg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_cec3a /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccRVGoVg.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_cec3a] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_cec3a.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_4fe4f/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_4fe4f.dir/build.make CMakeFiles/cmTC_4fe4f.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_4fe4f +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4fe4f.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_4fe4f.dir/feature_tests.c.o -o cmTC_4fe4f -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_1ba76/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_1ba76.dir/build.make CMakeFiles/cmTC_1ba76.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_1ba76 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ba76.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_1ba76.dir/feature_tests.c.o -o cmTC_1ba76 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_abea6/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_abea6.dir/build.make CMakeFiles/cmTC_abea6.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_abea6.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.c +Linking C executable cmTC_abea6 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_abea6.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_abea6.dir/feature_tests.c.o -o cmTC_abea6 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Determining if the CXX compiler works passed with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_14d92/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_14d92.dir/build.make CMakeFiles/cmTC_14d92.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_14d92 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_14d92.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_14d92.dir/testCXXCompiler.cxx.o -o cmTC_14d92 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp +Linking CXX executable cmTC_dcf1b +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux +Thread model: posix +gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) +COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o +COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/gmake" "cmTC_dcf1b/fast"] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_dcf1b.dir/build.make CMakeFiles/cmTC_dcf1b.dir/build] + ignore line: [gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -fPIC -o CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.3/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Linking CXX executable cmTC_dcf1b] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dcf1b.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -fPIC -v CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_dcf1b -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fPIC' '-v' '-o' 'cmTC_dcf1b' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccdsGisy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_dcf1b /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccdsGisy.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_dcf1b] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] + arg [CMakeFiles/cmTC_dcf1b.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o] ==> ignore + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8] ==> [/usr/lib/gcc/x86_64-redhat-linux/8] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/8/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;c] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/8;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + + +Detecting CXX [-std=c++14] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_4a014/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_4a014.dir/build.make CMakeFiles/cmTC_4a014.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++14 -o CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_4a014 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4a014.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_4a014.dir/feature_tests.cxx.o -o cmTC_4a014 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:1cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:1cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:1cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:1cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:1cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:1cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:1cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:1cxx_relaxed_constexpr + Feature record: CXX_FEATURE:1cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:1cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++11] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_3d352/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_3d352.dir/build.make CMakeFiles/cmTC_3d352.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++11 -o CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_3d352 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3d352.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_3d352.dir/feature_tests.cxx.o -o cmTC_3d352 -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++98] compiler features compiled with the following output: +Change Dir: /data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/gmake" "cmTC_7bf6e/fast" +/usr/bin/gmake -f CMakeFiles/cmTC_7bf6e.dir/build.make CMakeFiles/cmTC_7bf6e.dir/build +gmake[1]: Entering directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o +/usr/bin/c++ -fPIC -std=c++98 -o CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -c /data1/farrisli/3TS-DBTest/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_7bf6e +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7bf6e.dir/link.txt --verbose=1 +/usr/bin/c++ -fPIC CMakeFiles/cmTC_7bf6e.dir/feature_tests.cxx.o -o cmTC_7bf6e -rdynamic +gmake[1]: Leaving directory '/data1/farrisli/3TS-DBTest/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:0cxx_alias_templates + Feature record: CXX_FEATURE:0cxx_alignas + Feature record: CXX_FEATURE:0cxx_alignof + Feature record: CXX_FEATURE:0cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:0cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:0cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:0cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:0cxx_default_function_template_args + Feature record: CXX_FEATURE:0cxx_defaulted_functions + Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:0cxx_delegating_constructors + Feature record: CXX_FEATURE:0cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:0cxx_enum_forward_declarations + Feature record: CXX_FEATURE:0cxx_explicit_conversions + Feature record: CXX_FEATURE:0cxx_extended_friend_declarations + Feature record: CXX_FEATURE:0cxx_extern_templates + Feature record: CXX_FEATURE:0cxx_final + Feature record: CXX_FEATURE:0cxx_func_identifier + Feature record: CXX_FEATURE:0cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:0cxx_inheriting_constructors + Feature record: CXX_FEATURE:0cxx_inline_namespaces + Feature record: CXX_FEATURE:0cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:0cxx_local_type_template_args + Feature record: CXX_FEATURE:0cxx_long_long_type + Feature record: CXX_FEATURE:0cxx_noexcept + Feature record: CXX_FEATURE:0cxx_nonstatic_member_init + Feature record: CXX_FEATURE:0cxx_nullptr + Feature record: CXX_FEATURE:0cxx_override + Feature record: CXX_FEATURE:0cxx_range_for + Feature record: CXX_FEATURE:0cxx_raw_string_literals + Feature record: CXX_FEATURE:0cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:0cxx_right_angle_brackets + Feature record: CXX_FEATURE:0cxx_rvalue_references + Feature record: CXX_FEATURE:0cxx_sizeof_member + Feature record: CXX_FEATURE:0cxx_static_assert + Feature record: CXX_FEATURE:0cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:0cxx_thread_local + Feature record: CXX_FEATURE:0cxx_trailing_return_types + Feature record: CXX_FEATURE:0cxx_unicode_literals + Feature record: CXX_FEATURE:0cxx_uniform_initialization + Feature record: CXX_FEATURE:0cxx_unrestricted_unions + Feature record: CXX_FEATURE:0cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:0cxx_variadic_macros + Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/src/dbtest/CMakeFiles/Makefile2 b/src/dbtest/CMakeFiles/Makefile2 new file mode 100644 index 00000000..7980d19a --- /dev/null +++ b/src/dbtest/CMakeFiles/Makefile2 @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest + +#============================================================================= +# Target rules for target CMakeFiles/3ts_dbtest.dir + +# All Build rule for target. +CMakeFiles/3ts_dbtest.dir/all: + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/depend + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=1,2 "Built target 3ts_dbtest" +.PHONY : CMakeFiles/3ts_dbtest.dir/all + +# Include target in all. +all: CMakeFiles/3ts_dbtest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/3ts_dbtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/3ts_dbtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /data1/farrisli/3TS/src/dbtest/CMakeFiles 0 +.PHONY : CMakeFiles/3ts_dbtest.dir/rule + +# Convenience name for target. +3ts_dbtest: CMakeFiles/3ts_dbtest.dir/rule + +.PHONY : 3ts_dbtest + +# clean rule for target. +CMakeFiles/3ts_dbtest.dir/clean: + $(MAKE) -f CMakeFiles/3ts_dbtest.dir/build.make CMakeFiles/3ts_dbtest.dir/clean +.PHONY : CMakeFiles/3ts_dbtest.dir/clean + +# clean rule for target. +clean: CMakeFiles/3ts_dbtest.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/dbtest/CMakeFiles/Progress/1 b/src/dbtest/CMakeFiles/Progress/1 new file mode 100644 index 00000000..7b4d68d7 --- /dev/null +++ b/src/dbtest/CMakeFiles/Progress/1 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/src/dbtest/CMakeFiles/cmake.check_cache b/src/dbtest/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/src/dbtest/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache new file mode 100644 index 00000000..3a2a14bd --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/CXX.includecache @@ -0,0 +1,58 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/data1/farrisli/3TS/src/dbtest/src/db_test.cc +db_test.h +/data1/farrisli/3TS/src/dbtest/src/db_test.h +gflags/gflags.h +/data1/farrisli/3TS/src/dbtest/src/gflags/gflags.h +iomanip +- +cstdlib +- +fstream +- +cassert +- + +/data1/farrisli/3TS/src/dbtest/src/db_test.h +iostream +- +sql.h +- +sqlext.h +- +sqltypes.h +- +vector +- +unordered_map +- + +/usr/local/include/gflags/gflags.h +string +- +vector +- +gflags/gflags_declare.h +/usr/local/include/gflags/gflags/gflags_declare.h +gflags_gflags.h +/usr/local/include/gflags/gflags_gflags.h + +/usr/local/include/gflags/gflags_declare.h +string +- +stdint.h +- +sys/types.h +- +inttypes.h +- + +/usr/local/include/gflags/gflags_gflags.h + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/build.make b/src/dbtest/CMakeFiles/dbtest.dir/build.make new file mode 100644 index 00000000..cce240c4 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /data1/farrisli/3TS/src/dbtest + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /data1/farrisli/3TS/src/dbtest + +# Include any dependencies generated for this target. +include CMakeFiles/dbtest.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/dbtest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/dbtest.dir/flags.make + +CMakeFiles/dbtest.dir/src/db_test.cc.o: CMakeFiles/dbtest.dir/flags.make +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/dbtest.dir/src/db_test.cc.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/dbtest.dir/src/db_test.cc.o -c /data1/farrisli/3TS/src/dbtest/src/db_test.cc + +CMakeFiles/dbtest.dir/src/db_test.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/dbtest.dir/src/db_test.cc.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /data1/farrisli/3TS/src/dbtest/src/db_test.cc > CMakeFiles/dbtest.dir/src/db_test.cc.i + +CMakeFiles/dbtest.dir/src/db_test.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/dbtest.dir/src/db_test.cc.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /data1/farrisli/3TS/src/dbtest/src/db_test.cc -o CMakeFiles/dbtest.dir/src/db_test.cc.s + +CMakeFiles/dbtest.dir/src/db_test.cc.o.requires: + +.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + +CMakeFiles/dbtest.dir/src/db_test.cc.o.provides: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + $(MAKE) -f CMakeFiles/dbtest.dir/build.make CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build +.PHONY : CMakeFiles/dbtest.dir/src/db_test.cc.o.provides + +CMakeFiles/dbtest.dir/src/db_test.cc.o.provides.build: CMakeFiles/dbtest.dir/src/db_test.cc.o + + +# Object files for target dbtest +dbtest_OBJECTS = \ +"CMakeFiles/dbtest.dir/src/db_test.cc.o" + +# External object files for target dbtest +dbtest_EXTERNAL_OBJECTS = + +dbtest: CMakeFiles/dbtest.dir/src/db_test.cc.o +dbtest: CMakeFiles/dbtest.dir/build.make +dbtest: /usr/local/lib/libgflags.so.2.2.2 +dbtest: CMakeFiles/dbtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/data1/farrisli/3TS/src/dbtest/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable dbtest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/dbtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/dbtest.dir/build: dbtest + +.PHONY : CMakeFiles/dbtest.dir/build + +CMakeFiles/dbtest.dir/requires: CMakeFiles/dbtest.dir/src/db_test.cc.o.requires + +.PHONY : CMakeFiles/dbtest.dir/requires + +CMakeFiles/dbtest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/dbtest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/dbtest.dir/clean + +CMakeFiles/dbtest.dir/depend: + cd /data1/farrisli/3TS/src/dbtest && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest /data1/farrisli/3TS/src/dbtest/CMakeFiles/dbtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/dbtest.dir/depend + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.internal b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal new file mode 100644 index 00000000..0da98cf7 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest.dir/src/db_test.cc.o + /data1/farrisli/3TS/src/dbtest/src/db_test.cc + /data1/farrisli/3TS/src/dbtest/src/db_test.h + /usr/local/include/gflags/gflags.h + /usr/local/include/gflags/gflags_declare.h + /usr/local/include/gflags/gflags_gflags.h diff --git a/src/dbtest/CMakeFiles/dbtest.dir/depend.make b/src/dbtest/CMakeFiles/dbtest.dir/depend.make new file mode 100644 index 00000000..9b68b733 --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.cc +CMakeFiles/dbtest.dir/src/db_test.cc.o: src/db_test.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_declare.h +CMakeFiles/dbtest.dir/src/db_test.cc.o: /usr/local/include/gflags/gflags_gflags.h + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/flags.make b/src/dbtest/CMakeFiles/dbtest.dir/flags.make new file mode 100644 index 00000000..a72c49ae --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++17 -g -ftest-coverage -fprofile-arcs -Wno-deprecated -O0 -Wall -g -ggdb -I/data1/farrisli/3TS/src/dbtest/src -isystem /usr/local/include + +CXX_DEFINES = -DGFLAGS_IS_A_DLL=0 + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/progress.make b/src/dbtest/CMakeFiles/dbtest.dir/progress.make new file mode 100644 index 00000000..abadeb0c --- /dev/null +++ b/src/dbtest/CMakeFiles/dbtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..0f7e8c95ccac73424a9e1e4223834a0e80453a63 GIT binary patch literal 28484 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 literal 0 HcmV?d00001 diff --git a/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno b/src/dbtest/CMakeFiles/dbtest.dir/src/db_test.cc.gcno new file mode 100644 index 0000000000000000000000000000000000000000..8e0483c06a5a0d188df1e5d5a54a23237bfc40c1 GIT binary patch literal 281892 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